Clone into ~/dev/dotfiles (path assumed by scripts):
mkdir -p ~/dev && git clone <repo> ~/dev/dotfiles && cd ~/dev/dotfiles- Run the provisioner first (installs system packages, brew/apt/etc.):
- macOS:
./provisioners/macos-new.sh - WSL (Ubuntu):
./provisioners/wsl.sh - Debian (legacy):
./provisioners/deb.sh - Windows:
./provisioners/win.ps1
- macOS:
- Then run
./installto wire the dotfiles into~. - macOS only:
chsh -s /opt/homebrew/bin/bashandgit lfs install. - WSL only: finish the Doom Emacs steps printed by
wsl.sh(install nerd-icons fonts,copilot-install-server, create GitHub token for magit/forge in~/.authinfo.gpg).
To see exactly what packages the provisioner installs, read the provisioner script — there's no separate manifest. macos-new.sh is the current macOS reference; macos.sh is kept only as a legacy MacPorts / scientific-stack reference and is not run on new machines.
linkfiles/.*— symlinks each entry into~(solinkfiles/.bashrc→~/.bashrc,linkfiles/.config→~/.config, etc.). Skips if the target exists; pass-fto force-overwrite.copyfiles/.*— copies into~(not symlinks). Use this for files that will accumulate secrets and must not be version-controlled.- Runs
git submodule update --initand bootstraps vim-plug for vim + neovim.
Re-running is safe; each entry is skip-if-exists unless -f.
After ./install (and a fresh shell), confirm:
-
bash --versionshows a 5.x from/opt/homebrew/bin/bashon macOS (not/bin/bash). -
which ls grep findpoint at brew'sgnubindirs on macOS (GNU, not BSD). -
echo $PATH | tr : '\n' | headshows brew / conda / cargo / user ahead of system. -
declare -F | grep -E 'emacsd|nd|dotsource'→ functions are loaded. -
emacsdstarts a daemon;emc <somefile>attaches a client. -
vimopens and plugins are installed (:PlugStatus). -
tmuxstarts with the expected keybindings.
scutil --get ComputerName(macOS) orhostname -s(Linux/WSL).- Create
bashfuncs/<hostname>for host-specific init (conda path, nvm, welcome banner, etc.). Generic/portable things belong in a regularbashfuncs/<feature>module, not in the per-host file. - Add an
elif [ "$COMPUTERNAME" = "<hostname>" ]branch inbashfuncs/macos(or the Linux/WSL equivalent) thatdotsources it.
See CLAUDE.md and bashfuncs/CLAUDE.md for the full map — layout, PATH model, Doom Emacs setup, provisioner differences.
Alacritty hints (the [hints] block in linkfiles/.config/alacritty/alacritty.toml) hand issue ids to bin/linear-open:
- Shift-click an issue id (
RES-1234), orctrl-shift-lto pick one by keyboard. - Cmd-shift-click a bare number (
1234→RES-1234), orctrl-shift-n. Second modifier on purpose: every pid, port and byte count in the scrollback matches that one, and plain shift-click is what reaches the mouse inside a TUI that has grabbed it (vim, tmux, less) — worth keeping free for selecting text there. - Plain click still opens urls,
ctrl-shift-ofor the keyboard version. - From the shell:
linear-open 1234,linear-open res-1234,linear-open https://linear.app/…. Add-pto print the url instead of opening it.
Opens in Linear.app when it is installed, browser otherwise. Set LINEAR_WORKSPACE / LINEAR_TEAM to point at a different workspace or default team prefix.
Old reason this repo existed. Notes kept for occasional revival.
sudo port -f install neomutt +idn +lmdb +notmuch +ssl
sudo port -f install offlineimapCopy .offlineimaprc to the home directory. Replace the <REDACTED> line with a gmail device password.
Export the macOS trust store: Keychain Access → System Roots → Certificates → CMD-A → CMD-SHIFT-E to a single .pem. Place at ~/ca-certs/certs.pem (matches the path in .offlineimaprc).
On Linux, use sslcacertfile = /etc/ssl/certs/ca-certificates.crt instead.
Run offlineimap -o to fetch first time. If you have an offline copy of your mail, rsync that first — far faster than a cold sync. Put offlineimap in cron to restart it on crash (acts as a daemon, so it no-ops if already running).
pdftotextvia brewpoppleratool(archives),w3m,elinks