My personal Arch Linux configuration files, managed as a bare Git repository whose work tree is $HOME. The repository lives at $HOME/.dotfiles. The config alias follows the Arch Wiki's Tracking dotfiles directly with Git approach.
| Area | Files | Notes |
|---|---|---|
| Shell and session | .bashrc, .bash_profile, .xinitrc, .local/bin/* |
Bash aliases, XDG variables, Starship prompt, lf integration, local helper scripts, and automatic startx from tty1. The X session starts dwm, picom, clipmenud, numlockx, Caps/Escape swap, and the screen-lock helper. |
| Git | .config/git/config |
Main branch defaults, automatic upstream setup, and signed commits. Import or replace the configured GPG key before committing. |
| Terminal workflow | .config/foot/foot.ini, .config/tmux/tmux.conf, .config/lf/*, .config/starship.toml |
Foot theme/transparency, tmux prefix/keybindings and X clipboard copying, lf icons/previews, and a compact Starship prompt. |
| Desktop bar | .config/polybar/*, .config/wallpaper.jpg |
Polybar theme, DWM integration, network, Bluetooth, weather, battery, and multi-monitor launcher. |
| Editors and development | .config/nvim/init.vim, .config/Code/User/*, .config/ruff/pyproject.toml |
Neovim basics; VS Code settings/keybindings for Git signing, Python/Ruff, C/C++, Go, and Vim; strict Ruff linting with NumPy docstrings. |
| Media and applications | .config/mpv/*, .config/onedrive/config, .librewolf/librewolf.overrides.cfg, .config/gtk-3.0/settings.ini |
mpv volume and thumbnail scripts, OneDrive polling/venv exclusion, LibreWolf preferences, and GTK settings. |
| Node and Pi | .config/npm/npmrc, .config/pi/agent/* |
XDG-based npm paths plus Pi settings, extensions, task agents, web-fetch dependencies, and PDF-reader scripts. |
Warning: checking out a bare dotfiles repository writes directly into
$HOME. Back up any conflicting files first.
git clone --bare -b main git@github.com:maxdswain/.dotfiles.git "$HOME/.dotfiles"
alias config='/usr/bin/git --git-dir="$HOME/.dotfiles" --work-tree="$HOME"'
config checkout
config config --local status.showUntrackedFiles noAdd the config alias to the new shell's .bashrc if it is not present yet. There is no dotfiles command; use config status, config add <path>, and config commit to manage this repository.
The following command uses package names confirmed with pacman on the machine that produced these files. Install the pieces you use:
sudo pacman -S --needed \
bash git fzf paru xclip lf tmux starship neovim mpv npm go \
xorg-xinit xorg-xrandr xorg-xset picom clipmenu numlockx \
xdg-desktop-portal-gtk feh networkmanager bluez-utils curl jq \
onedrive-abraunegg foot ruffOptional packages installed from the AUR on that machine include ctpv-git (lf previews) and visual-studio-code-bin:
paru -S --needed ctpv-git visual-studio-code-bindwm, slock, xssstate, and polybar currently resolve to locally installed paths (/usr/local/bin or $GOPATH/bin), not pacman-owned packages. Build/install compatible versions yourself before using the X session and bar; the source trees are not part of this repository. The tracked .local/bin/xsidle.sh helper launched by .xinitrc requires xssstate and xset.
For the configured font and bar icons, install a Nerd Font containing FiraCode Nerd Font and Weather Icons. Enable the services used by the status scripts when applicable:
sudo systemctl enable --now NetworkManager bluetoothThe configuration is X11/DWM-oriented. After installing the required window-manager and helper binaries, log in on tty1; .bash_profile runs startx there and .xinitrc starts the session. Start the bar separately when desired:
~/.config/polybar/launch.shThe launcher assumes the external monitor is named HDMI-1-1 and the internal display is eDP-1; adapt it for other hardware. The bar's weather script needs curl, jq, an OpenWeatherMap API key, and a city ID/name. Replace its embedded key and city with your own values before use.
Foot is a separate Wayland terminal configuration and is not started by .xinitrc.
- Git: commits are GPG-signed. Change
user.name,user.email, andsigningkeyin.config/git/config, or import the matching secret key. - tmux: clipboard bindings call
xclip; use an X11 session or adjust them for Wayland. - OneDrive: run
onedrive --synchronizeonce and authenticate before enabling its monitor service. The tracked config skips.venvdirectories and polls every 30 seconds. - VS Code: install the Ruff, C/C++, Vim, and desired Go extensions to use the referenced formatter/features.
- Pi: install Pi with
npm install -g --ignore-scripts @earendil-works/pi-coding-agent, then use the tracked.config/pi/agent/settings.json. Its configured packages are@gotgenes/pi-permission-system,@tintinweb/pi-tasks, andpi-codex-search; the local web-fetch extension has its ownpackage.json, and the PDF skill requiresPyMuPDF==1.27.2.2.
config status
config add .bashrc .config/tmux/tmux.conf
config commit -m 'chore: update shell and tmux configuration'
config push