dotfiles
Brice Waegeneire’s dotfiles for *NIX, inspired by Kraymer/dotfiles and terlar/dotfiles.
Tutorial
Dependencies
Those dotfiles depends on a minimal set of programs, most of which are probably already installed on your system. If it’s not the case install the following packages with your package manager of choice:
git
, the version control systemstow
, a symlink managermake
, as dependency managerm4
, as theme engine
Using this dotfiles repository as a whole
To install all the configurations of this repository, enter the following in your terminal:
git clone https://github.com/bricewge/dotfiles.git
make all
Using part of the configurations
If you only want to use a subset of the repository, let’s say the
configuration just for tmux
and git
, then write the following in your
terminal:
git clone https://github.com/bricewge/dotfiles.git
make tmux git
How-to guides
How-to add a new module
How-to add OS specific configuration
How-to work on breaking changes
git worktree
but it doesn’t work with git-crypt
(AGWA/git-crypt#105) so maybe it can be replaced by
git-secret.
How-to manage secrets
Some file contains sensitive information and are best being kept private to do
so we can encrypt them with git-crypt
.
However note that this method may not be sufficient in regard to your threat
model, in that case, please, do not put them on the Internet nor in a public
git
repository.
How to uninstall some modules
When you want to remove a specific module from your $HOME
just do:
make uninstall PACKAGES=foo
To uninstall several modules at once, separate them with commas like this
PACKAGES=foo,bar,baz
. If you want to remove all the modules then just do
a make uninstall
.
Note: not all the installed modifications will be removed since it’s only
an unstow of the symlinks. So what was done in stow’s hooks pre-stow
and
post-stow
won’t be removed.
How-to use m4 as a theme engine
When a configuration format doesn’t allow you to put a space before the variable
you want to be replaced with m4
you need to quote the string before it.
Here is an example for polybar
when using format tags:
separator = %{`F'COLOR_FOREGROUND_DIM}|%{F-}
Which, when passed through m4
will result in:
separator = %{F#123456}|%{F-}
Discussion
Priorities
Portable
Sticking strictly to POSIX’s shell and requiring minimal dependencies make those
dotfiles
portable to most systems I use, in particular the ones running
busybox
that doesn’t have bash
installed and not much space to install
additional software.
Modular
You will rarely need to install the configuration for all of the software you
have configure, except your workstation. You won’t uses mpv
configurations on
a server for example.
KISS
Declaring dotfiles
bankruptcy never feel good, but not having a way to manage
all those configuration is worse. So let’s keep it as simple as possible.
Hackable
They’re will always be a time when you are forced to use a dirty workaround or have some exotic edge-case to take into account, none of which a handy shell script can’t overcome.
Why this organization?
Past alternatives
Previous ways that I used to managed this repository.
unordered shell scripts
vcsh with myrepos
salt
bork
- bash
- not maintained anymore
Other alternatives
homemanager
, Nix based
Reference
Module
Naming scheme
Hierarchy pattern | Description | Example |
---|---|---|
_* | Will never be stowed | alacritty/_alacritty.terminfo |
\@* | Subpackage, stowed when explicitly named | gpg/@macos |
{pre,post}-stow | Executed before or after package installation | git/post-stow |
.shell/login.d/* | Evaluated by login shells | gpg/.shell/login.d/gpg |
.shell/interactive.d/* | Evaluated by interactive shells |
License
All of this repository is under CC0 1.0 license except the wallpaper
subdirectory.