#+TITLE: .dotfiles * Overview I use of Emacs for almost everything, including my window manager ([[https://github.com/ch11ng/exwm][EXWM]]), except for the [[https://nyxt.atlas.engineer][Nyxt]] web browser. See my [[https://ambrevar.xyz/emacs/][Emacs pro-tips]]. As such, the more-or-less advanced configurations of my former favourite Unix programs are gone (Awesome, cmus, fish, fzf, Mutt, newsbeuter, ranger, urxvt, zathura, zsh). You can search for them before the git commit =README: The Big Emacs Shift=. * E-mail setup Emails can be particularly tricky to set up, so I think they deserve a dedicated section. My configuration files: - [[file:.mbsyncrc][.mbsyncrc]] for =mbsync= from the ~isync~ project to synchronize mail mailboxes over IMAP. - [[file:.notmuch-config][.notmuch-config]] for the email indexer. - A [[.cache/mail/.notmuch/hooks/pre-new][notmuch hook]] to tell Notmuch to use =mbsync= to fetch new emails. - My Emacs' [[file:.emacs.d/lisp/init-notmuch.el][init-notmuch.el]] for the user interface with the [[https://github.com/emacs-helm/helm-notmuch][helm-notmuch]] extension for searches with live updates. (A must!) - My Emacs' [[file:.emacs.d/lisp/init-message.el][init-message.el]] to send emails. I can afford to not rely on a dedicated SMTP client (e.g. =msmtp=) since all my email accounts use the same SMTP server. - My Emacs' [[file:.emacs.d/lisp/init-notmuch-sync.el][init-notmuch-sync.el]] and my [[file:.local/bin/homesync][homesync]] script to synchronize the user tags (but not the automatic ones) under version control. * Setup For the list of programs I currently use, see the =.package-lists/= folder. The =homeinit= script fully bootstraps a user profile with required files, folders, symlinks and applications. The =homeclean= script removes trash files, cache and warns if critically private data is found (e.g. PGP keys). The =homesync= script updates the package lists, prints the status of all known projects and optionally pushes the unmerged changes upstream. As for managing a dotfiles repository, there are various approaches. ** Direct versioning Git makes it possible to use your home folder as a git repository, thus versioning all files directly. #+BEGIN_SRC sh $ cd $ git init $ git remote add origin $ git fetch $ git checkout master #+END_SRC ** GNU Stow [[https://www.gnu.org/software/stow/][GNU Stow]] lets you symlink a project's files to an arbitrary folder. The simplest setup would be to clone the dotfiles to, say, =~/dotfiles= then run #+BEGIN_SRC sh $ cd ~/dotfiles $ stow . #+END_SRC Or, from a different location: #+begin_src sh $ cd /path/to/dotfiles $ stow -t ~ . #+end_src This has several advantages over direct versioning: - Subfolders in home are not subject to being included into the dotfiles git repository. This is especially relevant for projects under a version control system other than git. - No need for a =.gitignore=. - Simplified file control (add/remove/etc.). - You can fine-tune which program configuration to synchronize on a per-system basis. - You can manage several configurations for the same programs. * License Unless stated otherwise, all files are under the GPL3 license. See COPYING for the full license.