Arch Linux + GNOME dotfiles, managed with GNU Stow.
| Package | Target | App |
|---|---|---|
fish |
~/.config/fish/config.fish |
Fish shell |
zsh |
~/.zshrc |
Zsh |
tmux |
~/.tmux.conf |
Tmux |
git |
~/.gitconfig |
Git |
ghostty |
~/.config/ghostty/config |
Ghostty terminal |
starship |
~/.config/starship.toml |
Starship prompt |
fastfetch |
~/.config/fastfetch/config.jsonc |
Fastfetch |
zed |
~/.config/zed/settings.json |
Zed editor |
fontconfig |
~/.config/fontconfig/fonts.conf |
Fontconfig (Apple font aliases → Adwaita Sans) |
color |
~/.local/share/color/icc/sRGB-v2-magic.icc |
sRGB v2 ICC color profile |
gnome |
~/.config/monitors.xml, ~/.config/mimeapps.list |
GNOME display layout + default apps |
btop |
~/.config/btop/btop.conf (+ themes/) |
btop system monitor |
electron |
~/.config/electron-flags.conf |
Electron app flags (Wayland etc.) |
scripts |
~/.local/bin/* |
Custom user scripts (e.g. toggle-power-profile) |
All packages installed:
stow --no-folding fish zsh tmux git ghostty starship fastfetch zed fontconfig color gnome btop electron scriptssnapshots/ holds point-in-time exports that are not symlinked — they're inputs for restoring state on a fresh machine.
| File | Content | Restore |
|---|---|---|
snapshots/gnome-dconf.ini |
dconf dump of /org/gnome/ (system + extensions + GNOME apps, secrets filtered) |
dconf load /org/gnome/ < snapshots/gnome-dconf.ini |
snapshots/gnome-extensions.txt |
Installed GNOME shell extensions | Reinstall via Extensions app / gnome-extensions install |
snapshots/pkglist.txt |
Explicitly installed pacman packages | sudo pacman -S --needed - < snapshots/pkglist.txt |
snapshots/aurlist.txt |
AUR / foreign packages | Install via your AUR helper (yay -S - < snapshots/aurlist.txt) |
Regenerate snapshots: ./snapshot.sh. Run before committing dotfiles changes.
pacman.conf— system file, copy manually to/etc/pacman.confif needed.backup.sh— rsync-based external disk backup script. EditDEST_BASE_DIRbefore use.
~/.config/gh/— contains OAuth tokens. Usegh auth loginafter fresh install.~/.ssh/,~/.gnupg/— secrets. Back up out-of-band.~/.icons/,~/.local/share/icons/— icon themes (~40 MB). Reinstall via package manager.~/.local/share/gnome-shell/extensions/— tracked as list insnapshots/gnome-extensions.txt; reinstall, don't symlink.- Browser profiles (
~/.mozilla,~/.config/google-chrome) — usebackup.shrsync target instead.
git clone <repo> ~/dotfiles
cd ~/dotfiles
# 1. Install packages
sudo pacman -S --needed - < snapshots/pkglist.txt
yay -S --needed - < snapshots/aurlist.txt
# 2. Install stow + apply configs
sudo pacman -S stow
stow --no-folding fish zsh tmux git ghostty starship fastfetch zed fontconfig color gnome btop electron scripts
# 3. Restore GNOME settings
dconf load /org/gnome/ < snapshots/gnome-dconf.ini
# 4. Reinstall GNOME extensions listed in snapshots/gnome-extensions.txt (via Extensions app)Stowed configs are symlinks — editing the live file (e.g. ~/.zshrc) edits the repo file directly. To capture changes:
cd ~/dotfiles
# 1. Refresh snapshots (dconf dump, extension list, pkglist, aurlist).
./snapshot.sh
# 2. Review what changed.
git status
git diff
# 3. Stage + commit + push.
git add -A
git commit -m "update configs"
git pushRun ./snapshot.sh whenever:
- You change a GNOME setting via Settings / Tweaks / an extension.
- You install or remove a package (
pacman -S,paru -S, etc.). - You install or remove a GNOME shell extension.
The script auto-filters known secret patterns (GitHub PATs, OpenAI keys, AWS keys, etc.) from the dconf dump and bails if a token-shaped value survives. If you add an extension that stores credentials under a new key name, extend SECRET_KEYS_REGEX in snapshot.sh.
- Create a new top-level dir named after the app.
- Mirror the target path relative to
$HOMEinside it. For~/.config/foo/bar.conf→foo/.config/foo/bar.conf. mv ~/.config/foo/bar.conf foo/.config/foo/bar.conf && stow --no-folding foo.