dotfiles
My personal machine configuration.
The working tree is $HOME itself, so this repository is the home directory —
each branch targets a specific environment (OS, distribution, desktop), and only the tracked files belong to it.
The bare-repo-in-$HOME approach is inspired by this Atlassian tutorial.
The active branch is kde: Manjaro Linux, KDE Plasma on Wayland, foot + tmux, bash, nvim built from source, pass.
Layout
The work tree is $HOME — there is no .git/ in the home directory, the user chooses where the git dir lives.
Because $HOME is full of untracked noise (Downloads/, .cache/, Projects/, …), status.showUntrackedFiles is set to no so git status stays readable; use git ls-files to see what is actually tracked.
To bootstrap from scratch:
git init --bare "$DOTFILES_DIR"
export GIT_DIR="$DOTFILES_DIR" GIT_WORK_TREE="$HOME"
git config --local status.showUntrackedFiles no
git config --local core.bare false
Then track files one at a time — git add ~/.bashrc — and never git add -A (it would try to stage the entire home directory).
The dotfiles helper
GIT_DIR and GIT_WORK_TREE are deliberately not exported at login; only DOTFILES_DIR is, via ~/.config/environment.d/50-user.conf.
~/.local/bin/dotfiles is the entry point:
dotfiles on/dotfiles offcopy asource …line to the Wayland clipboard that exports (or unsets) the git variables in the current shell — a script can't mutate its parent's environment, so you paste the line to toggle one shell.dotfiles syncruns the whole non-interactive setup: Arch/AUR packages viayay, XDG user dirs, Python tools viapipx, a from-source Neovim build when a newer release tag is available, Proton VPN, and thekeydservice.dotfiles commit claude-memorysnapshots and pushes the Claude memory store submodule (viaclaude memory), then commits the bumped submodule pointer here.
There is also a dedicated tmux-dotfiles launcher (and its .desktop entry) that opens a foot/tmux session with the git environment already on.
Its sibling tmux-notes opens Neovim on the notes directory (~/Notes, via +NotesOpen) in a dedicated foot/tmux "Notes" session.
Stack
- Shell — bash
- Terminal — foot (Wayland)
- Multiplexer — tmux
- Editor — Neovim, built from source
- File browser — ranger
- Password manager — pass
- Keyboard remapping — keyd
- Claude Code —
claude-config+claude-memorysubmodules
