~whynothugo/dotfiles

🏡 My desktop setup: systemd, sway, alacritty, greetd, zsh, neovim.

27969ae I'd rather not maintain my own dotfiles tool

2 days ago

66e0f5f alacritty: Set font to Fantasque Mono

4 days ago

#~/.dotfiles

"A man and his tools make a man and his trade". -Vita Sackville-West

This repository contains all configuration files for my desktop setup. The entire system configuration is defined in a declarative way, so recreating it and rolling back and forth can be done with confidence.

There's a few sets of files here:

dotfiles: These are user-specific configuration for applications. This includes compositor setup, neovim configuration, terminal theme, and settings for a lot of other applications. Symlinks are placed in the home directory pointing to the files inside this repository, so it's easy to track any changes using just git.

ansible: Some ansible playbooks to configure dconf-based applications and install flatpaks I use. Due to how ansible handles sudo, it can't be used for anything system wide. There's also bootstrapping issues in trying to use it to configure pristine systems, so the scope of what ansible handles will likely continue being rather narrow.

sysconfig: This is system-wide configuration. This includes installed packages, networking overrides, sudo configuration, SecureBoot and several other system-wide settings. This is all installed as a system package, which installs all the custom files, and pulls all wanted packages as dependencies.

Storing all this in a git repository allows me to be bolder when experimenting with new features or configurations -- if I find anything breaks, it's very simple to got roll back to the previous state.

Other uses of this repository include:

  • Keep configurations in sync across devices.
  • Keep a versioned history of my configurations.
  • Quickly bootstrap new configure new machines (physical or virtual).

#Dotfiles

I use my own rust-based tool (see src/) to keep this repository in sync with my actual dotfiles using symlinks.

It gets the job done, and builds to a static binary, which makes bootstrapping simpler. I'd love to drop my own custom tool and just rely on something maintained by someone else. However, I've yet to find something that does simply this. homesick used to work, but it's given me issues with major ruby updates over the years. A binary-compiled homesick clone would be super!

#Sysconfig

The system configuration is installed by an ArchLinux package. See sysconfig/README.md for more details on that.

#Tools I use

  • sway: desktop compositor
  • waybar: system status bar
  • neovim: code editor (using LSP, tree-sitter, and quite a few plugins)
  • zsh: shell and main working environment (it's designed for interactive use)
  • alacritty: very fast OpenGL terminal emulator in Rust
  • gammastep: screen colour temperature based on sunrise and sundown
  • darkman: automatic dark mode based on sundown and sunrise

I try to upstream any fixes, tweaks and improvements whenever possible, and limit this repository to customisations and very opinionated settings only.

#Documentation

I try to keep things relatively well documented. Some settings or overrides require attention only once every couple of years (e.g.: Firefox style overrides), and keeping comments around lets me figure out what existing code does, and where I got it from.

Git blame should generally be rather useful too.

#Bootstrapping a new system

  • Remember to run rustup default stable.
  • Add repo keys for quarry:
sudo pacman-key --recv-keys 0x8E1992167465DB5FB045557CB02854ED753E0F1F
sudo pacman-key --lsign-key 0x8E1992167465DB5FB045557CB02854ED753E0F1F

#LICENCE

Copyright 2012-2021, Hugo Osvaldo Barrera hugo@barrera.io

This repository is licensed under the ISC licence. See LICENCE for details.