Eu uso a seguinte estrutura para acompanhar pacotes e arquivos
~/.emacs.d
|-- elpa ;; Package.el packages
|-- hack ;; Development versions of packages (e.g. org, personal packages)
|-- single-lisp ;; Individual lisp files from outside sources (e.g. EmacsWiki)
|-- site-lisp ;; Lisp packages not managed by package.el (directories)
|-- user-config ;; Machine/situation specific customization (work vs home)
| `-- custom.el ;; Customization settings
|-- lisp ;; Individual .el files to keep init.el clean
| `-- defaults.el ;; Default configuration settings
`-- init.el
Em seguida, uso use-packagepara gerenciar quais pacotes são carregados e quais personalizações são definidas para cada pacote. Na maioria das vezes, apenas hacke elpaexigem atualização, as outras pastas geralmente são para pacotes únicos que eu quero testar ou usar brevemente, mas não precisam carregar (mesmo que ociosamente).
custom.el é para Personalizar configurações, que eu prefiro não usar (e não versão mesmo que eu use).
defaults.elé para configuração geral (barra de menus, fonte, codificação etc.) que pode ser substituída em qualquer arquivo .el user-config/para permitir um sistema que funcione conforme o esperado, mas que pode ser ajustado ao ambiente.
Eu já tinha tentado manter functions, macros, adviceem pacotes separados para permitir a delimitação entre conteúdo, mas correu para definição / exigem questões tão ter colocado os de volta em init.el. Eles podem eventualmente ser colocados de volta ~/.emacs.d/lisp/.
Tento me manter init.elorganizado, classificar o conteúdo por função e finalidade, para que seja fácil encontrá-lo novamente. Eu tinha o init.elarquivo monolítico e continuava adicionando novo conteúdo no final (ou onde eu achava que poderia caber) e depois acabava sem saber o que eu adicionei ou onde o adicionei quando fui procurá-lo (e às vezes, pesquisar usando isearchnão ajudou, pois não conseguia me lembrar de como nomeei as coisas na época).