dotfiles
Personal dotfiles managed with GNU Stow. Each top-level directory is a stow package that mirrors files into $HOME.
Quick start
git clone <repo-url> ~/.dotfiles
cd ~/.dotfiles
# Arch
sudo pacman -S stow
# Fedora
# sudo dnf install stow
stow bash git nvim vim python ghostty mangohud konsole kde-themes dolphin agents vscode vscode-server
To stow all packages at once (excludes arch/, which is not a stow package):
stow agents bash dolphin ghostty git kde-themes konsole mangohud nvim python vim vscode vscode-server
arch/ holds standalone helper scripts — see Scripts below.
Packages
| Package | Symlinks |
|---|---|
bash |
~/.bashrc, ~/.bashrc.d/*, ~/.editorconfig |
git |
~/.gitconfig, ~/.gitignore_global |
nvim |
~/.config/nvim/ |
vim |
~/.vimrc |
python |
~/.ruff.toml |
ghostty |
~/.config/ghostty/ |
mangohud |
~/.config/MangoHud/ (base, custom, and FFXIV wine configs) |
konsole |
~/.config/konsolerc, ~/.local/share/konsole/ (Catppuccin themes, bash profile) |
kde-themes |
~/.local/share/color-schemes/ (Catppuccin Mocha Teal/Blue) |
dolphin |
~/.config/dolphinrc, ~/.config/dolphin/, ~/.local/share/dolphin/ |
agents |
~/.grok/ (Grok CLI config, rules, skills path) |
vscode |
~/.config/Code/User/settings.json → shared with vscode-server |
vscode-server |
~/.vscode-server/data/Machine/settings.json |
Bash modules
~/.bashrc.d/ is sourced automatically. Modules:
alias.bash— general aliasesgit.bash— git helpersfonts.bash— font pathsruff.bash— Ruff integrationmango.bash— MangoHud env varsvscode.bash— VS Code helperswsl.bash— WSL ssh-agent interop (loaded only when/mnt/cis present)apt.bash— Debian/Ubuntu helpers
Scripts
| Script | Purpose |
|---|---|
arch/update.sh |
Update uv, pacman, flatpak, and VS Code (/opt/vscode) |
arch/upgrade_vscode.sh |
Upgrade /opt/vscode tarball install when a newer release is available |
arch/fix_vscode.sh |
Create VS Code desktop entry and icon symlinks for /opt/vscode |
dolphin.sh |
Copy live Dolphin config into the repo and stow dolphin |
vscode-server/install-vscode-extensions.sh |
Install extensions from extensions.txt (local, remote, or both) |
vscode-server/install-fira-code-fonts.sh |
Install Fira Code fonts for VS Code |
VS Code extensions
# Install remote (WSL) extensions from extensions.txt
bash ~/.dotfiles/vscode-server/install-vscode-extensions.sh
# Export currently installed extensions back to extensions.txt
bash ~/.dotfiles/vscode-server/install-vscode-extensions.sh --export
Grok agents
The agents package stows ~/.grok/ with global agent configuration:
config.toml— CLI settings, marketplace, and skills pathrules/— global rules (e.g.american-english.md)AGENTS.md— pointer to project-specific rules in.grok/rules/
Skills are loaded from ~/.dotfiles/agents/.grok/.skills (configured in config.toml).
Stow layout
Each package follows the standard stow convention — files live under the home-directory paths they should symlink to:
~/.dotfiles/
├── bash/
│ ├── .bashrc
│ └── .bashrc.d/
├── nvim/
│ └── .config/nvim/
├── git/
│ └── .gitconfig
├── agents/
│ └── .grok/
└── ...
Stow creates symlinks from $HOME back into the repo and handles conflicts cleanly.
WSL
Resources:
Install OpenSSH
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Start the sshd service
Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
Set-Service -Name 'ssh-agent' -StartupType Automatic
Start-Service ssh-agent
Once ssh-agent is running, wsl.bash aliases ssh and ssh-add to their Windows .exe counterparts so keys persist across WSL sessions.