Minimal Emacs Configuration Use XDG Config Directory
Hey guys! Ever felt like your .emacs.d
directory is just a black hole for stray files and configurations? You're not alone! I’ve been on a quest to clean up my Emacs setup and embrace the XDG config directory standard. This means moving all those config files from the traditional ~/.emacs.d
to the more organized ~/.config/emacs
(or wherever your $XDG_CONFIG_HOME
points). It’s all about keeping things tidy, consistent, and playing nicely with other applications that follow the XDG spec. So, let’s dive into how to achieve this minimal setup for Emacs, ensuring it uses the XDG config directory for everything.
Understanding the XDG Config Directory
Before we jump into the configuration, let's quickly chat about what the XDG Base Directory Specification is all about. Essentially, it's a standard that aims to organize user configuration files. Instead of scattering them across your home directory, it encourages applications to store their configs in specific directories. For Emacs, this means we want it to use $XDG_CONFIG_HOME/emacs
(which usually defaults to ~/.config/emacs
) for all its configuration needs. This includes your init.el
(or init.lisp
), custom themes, and any other Emacs-related goodies. Embracing the XDG standard not only declutters your home directory but also makes it easier to backup and manage your configurations. Think of it as giving your Emacs setup a proper home with a designated address, rather than letting it crash on your digital couch.
Initial Steps: Clearing the Slate
To make sure we're starting fresh, the first step is to clean out the old ~/.emacs.d
directory. This is crucial because Emacs, by default, looks for its configuration files in this location. To really ensure Emacs isn't tempted to use the old directory, you can even change its ownership to root. This will effectively prevent Emacs from writing to it, forcing it to look elsewhere – namely, our XDG config directory. It's like putting a “Do Not Enter” sign on the old clubhouse and building a brand-new one in a better location.
So, before you proceed, back up anything important in your ~/.emacs.d
directory (just in case!), and then either delete it or change its ownership. This might seem a bit drastic, but it's a necessary step to ensure Emacs fully adopts the XDG way. Once you’ve cleared the path, we can move on to the fun part: configuring Emacs to use the new directory.
Configuring Emacs for XDG
Now, let's get into the heart of the matter: configuring Emacs to use the XDG config directory. The key to this is setting the user-emacs-directory
variable. This variable tells Emacs where to look for your init.el
file and other configuration goodies. By default, it points to ~/.emacs.d
, but we're going to change that to $XDG_CONFIG_HOME/emacs
. To do this, you'll need to create a minimal Emacs configuration file in your new XDG directory. If you don't have a ~/.config/emacs
directory, go ahead and create one. Inside this directory, create an init.el
file (or init.lisp
, if you prefer Lisp syntax). This file is where you'll put the magic incantation that tells Emacs to use the XDG directory.
Inside your init.el
, you'll want to add the following lines of Emacs Lisp code:
(setq user-emacs-directory (expand-file-name ".config/emacs/" user-home-directory))
(load (concat user-emacs-directory "init.el"))
Let's break this down a bit. The first line sets the user-emacs-directory
variable to the full path of your XDG config directory. It uses expand-file-name
to ensure the path is properly expanded and user-home-directory
to get your home directory. The second line then loads the init.el
file from this new directory. This is important because Emacs only sets user-emacs-directory
before loading the init file, so we need to explicitly load it ourselves. It's like telling Emacs, “Hey, your new home is here, and all your stuff is inside!”
With these lines in place, Emacs should now be using your XDG config directory. You can verify this by starting Emacs and checking the value of user-emacs-directory
using M-x eval-expression
. It should show the path to your XDG config directory. If it does, congratulations! You've successfully taken the first step in XDG-ifying your Emacs setup.
Expanding the Configuration: Beyond the Basics
So, you've got Emacs using the XDG config directory for the basics, but what about everything else? Emacs has a habit of scattering files in various places, so we need to be a bit more proactive to truly embrace the XDG spirit. This means redirecting other Emacs-related files, such as custom themes, auto-save files, and backup files, to appropriate XDG directories.
Custom Themes
If you're using custom themes (and who isn't?), you'll want to make sure they're stored in the XDG data directory. This is typically ~/.local/share
, but you can check the $XDG_DATA_HOME
environment variable to be sure. To tell Emacs to look for themes in this directory, you can add the following to your init.el
:
(add-to-list 'custom-theme-load-path (expand-file-name ".local/share/emacs/themes" user-home-directory))
This adds the ~/.local/share/emacs/themes
directory to the custom-theme-load-path
, which is where Emacs looks for theme files. You'll likely need to create this directory if it doesn't already exist. Now, you can store your custom themes in this directory, keeping them neatly organized and out of your config directory.
Auto-Save and Backup Files
Emacs also creates auto-save and backup files, which, by default, are stored in the same directory as the files you're editing. This can clutter up your projects, so it's a good idea to redirect these to a separate directory within the XDG cache directory (typically ~/.cache
). Add the following to your init.el
:
(setq auto-save-file-name-transforms
`((