Arch Linux + macOS setup with xmonad, kitty, neovim, zsh, and more. Managed with GNU Stow.
~/dotfiles/
├── .config/
│ ├── dunst/ # Notification daemon (Linux)
│ ├── fontconfig/ # Font configuration (Linux)
│ ├── haskell/ # Haskell tools (fourmolu.yaml, justfile template)
│ ├── kitty/ # Terminal emulator
│ ├── newsboat/ # RSS reader
│ ├── nix/ # Nix config
│ ├── nixpkgs/ # Nix packages
│ ├── nvim/ # Neovim
│ ├── picom/ # Compositor (Linux)
│ ├── shell/ # Shell profile & aliases (cross-platform)
│ ├── xmonad/ # Window manager (Linux)
│ ├── zathura/ # PDF viewer (Linux)
│ └── zsh/ # Zsh config
├── .local/
│ └── bin/ # Custom scripts
├── .stack/
│ └── config.yaml # Stack global config
├── wallpapers/ # Desktop wallpapers
├── .xinitrc # X session entry point (Linux)
├── .Xresources # X resources (Linux)
├── .xserverrc # X server config (Linux)
├── .profile # -> .config/shell/profile
├── .zprofile # -> .config/shell/profile
├── .zshenv # Sets ZDOTDIR, sources .config/zsh/.zshenv (zsh bootstrap)
├── .nix-channels # Nix channels
└── etc/ # System config references (manual, see below)
yay -S stow
git clone git@github.com:you/dotfiles.git ~/dotfiles
cd ~/dotfiles && stow -t ~ .
# Kitty font size override (Linux uses smaller size than macOS default)
ln -sf kitty.linux.conf ~/.config/kitty/kitty.local.conf
# Build xmonad
cd ~/.config/xmonad && just buildbrew install stow
git clone git@github.com:you/dotfiles.git ~/dotfiles
cd ~/dotfiles && stow -t ~ .
# Kitty font size: macOS default (18) is already set in kitty.conf — nothing to docd ~/dotfiles && stow -t ~ -R .Files that differ between Linux and macOS are handled inline — no duplicate files needed.
| File | Mechanism |
|---|---|
kitty.conf |
font_size 18 (macOS default) + include kitty.local.conf for overrides |
kitty.linux.conf |
font_size 10 — symlinked to kitty.local.conf on Linux |
shell/profile |
if [ "$(uname)" = "Darwin" ] blocks for brew, BROWSER, QT vars |
shell/aliasrc |
if [ "$(uname)" = "Darwin" ] for clipboard (pbcopy vs xclip) and ls flags |
cd ~/.config/xmonad
just build # builds xmonad + xmobar, symlinks binaries
just restart # restart xmonad in-place (no logout)Binary must be at ~/.local/bin/xmonad-x86_64-linux. See xmonad/README.md for keybindings.
- Login →
.zprofile→.config/shell/profile - startx →
.xinitrcwhich:- Loads
.Xresources - Sets wallpaper via
feh - Executes
xmonad-x86_64-linux
- Loads
- Every shell →
.zshenv(setsZDOTDIR, sources.config/zsh/.zshenvfor PATH/env) - Login shell →
.zprofile→.config/shell/profile(editor, browser, brew, etc.) - Interactive shell →
.config/zsh/.zshrc
| Variable | Linux | macOS |
|---|---|---|
EDITOR |
nvim | nvim |
TERMINAL |
kitty | kitty |
BROWSER |
brave | open |
READER |
zathura | — |
XDG_CONFIG_HOME |
~/.config | ~/.config |
ZDOTDIR |
~/.config/zsh | ~/.config/zsh |
- Terminal: kitty + Hack / LiterationMono Nerd Font
- Shell: zsh
- Editor: neovim
- Dotfiles: stow
- Task runner: just
- Haskell: ghcup (GHC/HLS/stack), fourmolu (static binary in ~/.local/bin)
- WM: xmonad, xmonad-contrib, xmobar
- Launcher: rofi
- Notifications: dunst
- Compositor: picom
- PDF: zathura
- Browser: brave
- Clipboard: xclip
- Font packages:
ttf-hack-nerd,ttf-liberation-mono-nerd
- Package manager: homebrew
- Fonts:
brew install --cask font-hack-nerd-font font-liberation-nerd-font
These files target /etc/ and are not managed by stow. Apply once per machine with sudo.
/etc/vconsole.conf
KEYMAP=ANSI-dvorak
FONT=ter-v24n
/etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "us"
Option "XkbVariant" "altgr-intl"
EndSection