These are my dotfiles, almost exclusively for my work on the command line. Most of the configuration is for bash, with some other extensive changes made for Vim (and associated GUIs such as MacVim and GVim. There's also basic support for NeoVim) and Git.
I use bash almost exclusively, and ideally the latest version. There is some
feature gating for backwards incompatible changes, but they're not extensively
tested (ex: PS0
was added in bash 4.2, so it's not set up for earlier
versions).
There is also a hard "build" time requirement on m4, which is not normally included on basic Linux distros. At some point in the future I hope to refactor the templating into somethign that just depends on bash, but for now the m4 macros work.
Check out this repo into ~/.dotfiles
and then check out the submodules (at
the moment there's just one, for Vundle). Then source common.sh
and run
process_source_files
, followed by link_dotfiles
. The same process is used
when updating, if anything that's processed by m4 is changed (which isn't all
that often).
There's the beginnings of support for checking out this repo somewhere other
than ~/.dotfiles
, but I haven't really invested much time into it and it's
incomplete.
Differences in the environment are detected at runtime as much as possible. While there can be a bit of a delay when opening a new shell, it's manageable (and not that bad on an SSD or other fast disk). There are a few areas where run-time detection isn't really feasible:
-
Email/Identity. The email is added to Git and Mercurial config files for committing. It can be set by adding a file to
~/.dotfiles/email
with just the email address. -
The operating system running the setup function is used to see if there's a GUI merge tool (
opendiff
on macOS, which opens up FileMerge.app, andmeld
on Linux systems). If there is, the default git merge tool is set to that command. -
If a PKCS11 provider is found, the SSH config has it added as a default. A PKCS11 provider is also searched for and made available in the shell in the
PKSC11_PROVIDER
environment variable (ex:ssh-keygen -D $PKCS11_PROVIDER
to extract public keys from an attached smart card).
I use these dotfiles day to day on the following platforms (not that I'm really supporting them in a real sense, I just use them).
-
macOS (x86_64)
-
Linux (arm, aarch64, x86_64)
-
FreeBSD (x86_64)
-
Linux on Windows (x86_64)
In the past I used these files on these platforms, and they should still work on them without much (if any) modification:
-
macOS (ppc, ppc64, x86)
-
Solaris (sparc)
-
Linux (x86, ppc)
-
FreeBSD (x86, arm)