aboutsummaryrefslogtreecommitdiffstats

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 off copy a source … 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 sync runs the whole non-interactive setup: Arch/AUR packages via yay, XDG user dirs, Python tools via pipx, a from-source Neovim build when a newer release tag is available, Proton VPN, and the keyd service.
  • dotfiles commit claude-memory snapshots and pushes the Claude memory store submodule (via claude 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

  • Shellbash
  • Terminalfoot (Wayland)
  • Multiplexertmux
  • EditorNeovim, built from source
  • File browserranger
  • Password managerpass
  • Keyboard remappingkeyd
  • Claude Codeclaude-config + claude-memory submodules