Though I have been using emacs for few years now, I faced issues with controlling the indentation. Consider the below setting in vim to configure the indentation for all source files in a directory.
au BufEnter /code/kernel/*/*.[ch] setlocal tabstop=8 shiftwidth=8 noexpandtab
I tried dtrt-indent which automatically configures indentation based on existing indentation in the file. This approach works well for existing source files but does not configure indentation for new source files.
I settled on replicating the vim behaviour exactly by using per directory local variables.
(dir-locals-set-class-variables
'kernel-src-directory
'(
(c-mode . (
(c-basic-offset . 8)
(evil-shift-width . 8)
(indent-tabs-mode . t)
)
)
)
)
(dir-locals-set-directory-class
"/code/kernel" 'kernel-src-directory)