# dotfiles [![built with Grok](https://img.shields.io/badge/built%20with-Grok-000000?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI%2BPHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0xMy4yMzcxIDIxLjA0MDdMMjQuMzE4NiAxMi44NTA2QzI0Ljg2MTkgMTIuNDQ5MSAyNS42Mzg0IDEyLjYwNTcgMjUuODk3MyAxMy4yMjk0QzI3LjI1OTcgMTYuNTE4NSAyNi42NTEgMjAuNDcxMiAyMy45NDAzIDIzLjE4NTFDMjEuMjI5NyAyNS44OTg5IDE3LjQ1ODEgMjYuNDk0MSAxNC4wMTA4IDI1LjEzODZMMTAuMjQ0OSAyNi44ODQzQzE1LjY0NjMgMzAuNTgwNiAyMi4yMDUzIDI5LjY2NjUgMjYuMzA0IDI1LjU2MDFDMjkuNTU1MSAyMi4zMDUxIDMwLjU2MiAxNy44NjgzIDI5LjYyMDUgMTMuODY3M0wyOS42MjkgMTMuODc1OEMyOC4yNjM3IDcuOTk4MDkgMjkuOTY0NyA1LjY0ODcxIDMzLjQ0OSAwLjg0NDU3NkMzMy41MzE0IDAuNzMwNjY3IDMzLjYxMzkgMC42MTY3NTcgMzMuNjk2NCAwLjVMMjkuMTExMyA1LjA5MDU1VjUuMDc2MzFMMTMuMjM0MyAyMS4wNDM2Ii8%2BPHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0xMC45NTAzIDIzLjAzMTNDNy4wNzM0MyAxOS4zMjM1IDcuNzQxODUgMTMuNTg1MyAxMS4wNDk4IDEwLjI3NjNDMTMuNDk1OSA3LjgyNzIyIDE3LjUwMzYgNi44Mjc2NyAyMS4wMDIxIDguMjk3MUwyNC43NTk1IDYuNTU5OThDMjQuMDgyNiA2LjA3MDE3IDIzLjIxNSA1LjU0MzM0IDIyLjIxOTUgNS4xNzMxM0MxNy43MTk4IDMuMzE5MjYgMTIuMzMyNiA0LjI0MTkyIDguNjc0NzkgNy45MDEyNkM1LjE1NjM1IDExLjQyMzkgNC4wNDk5IDE2Ljg0MDMgNS45NDk5MiAyMS40NjIyQzcuMzY5MjQgMjQuOTE2NSA1LjA0MjU3IDI3LjM1OTggMi42OTg4NCAyOS44MjZDMS44NjgyOSAzMC43MDAyIDEuMDM0OSAzMS41NzQ1IDAuMzYzNjQgMzIuNUwxMC45NDc0IDIzLjAzNDEiLz48L3N2Zz4%3D)](https://x.ai/grok) Personal dotfiles managed with [GNU Stow](https://www.gnu.org/software/stow/). Each top-level directory is a stow package that mirrors files into `$HOME`. ## Quick start ```bash git clone ~/.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): ```bash stow agents bash dolphin ghostty git kde-themes konsole mangohud nvim python vim vscode vscode-server ``` `arch/` holds standalone helper scripts — see [Scripts](#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 aliases - `git.bash` — git helpers - `fonts.bash` — font paths - `ruff.bash` — Ruff integration - `mango.bash` — MangoHud env vars - `vscode.bash` — VS Code helpers - `wsl.bash` — WSL ssh-agent interop (loaded only when `/mnt/c` is present) - `apt.bash` — Debian/Ubuntu helpers ## Scripts | Script | Purpose | |--------|---------| | `arch/update.sh` | Update uv, pacman, and flatpak | | `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 ```bash # 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 path - `rules/` — 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: - [ssh-agent-on-windows](https://medium.com/@wondrous_oxblood_cheetah_508/ssh-agent-on-windows-c74b90fb2e31) ### Install OpenSSH [![OpenSSH](https://img.shields.io/badge/Windows-OpenSSH?style=flat-square&label=OpenSSH&color=blue)](https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse?tabs=powershell&pivots=windows-11) ```powershell Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' ``` ```powershell # 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 ``` ```powershell # 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." } ``` ```powershell 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.