This is my dotfiles.
Do the platform-specific prerequisites first, then run the common bootstrap.
Install the base packages. git / curl bootstrap the clone and
installers, zsh is the login shell, unzip lets mise extract tool
archives, and bubblewrap / socat are the Claude Code sandbox
prerequisites.
sudo apt update
sudo apt install -y git curl zsh unzip bubblewrap socatNo extra platform packages are required — macOS already ships zsh as the
default shell. mise itself is installed in the bootstrap below.
Run these on any platform after the prerequisites above.
-
Clone the dotfiles. All repositories are managed under
~/reposvia ghq, so place it at the ghq-compatible path (ghq itself is installed later by mise).git clone https://github.com/halkn/dotfiles.git "$HOME/repos/github.com/halkn/dotfiles" cd "$HOME/repos/github.com/halkn/dotfiles"
-
Install mise and run the full setup.
just setupcreates symlinks (link), installs mise tools, clones zsh plugins, and installs Claude Code in that order.mise execprovides a temporaryjustfor the bootstrap without installing it globally first.curl https://mise.run | sh export PATH="$HOME/.local/bin:$HOME/.local/share/mise/shims:$PATH" mise exec just -- just setup
-
Make zsh the default login shell. macOS already defaults to zsh; on WSL, apt registers zsh in
/etc/shells, sochshaccepts it directly.chsh -s "$(command -v zsh)"
When the bootstrap finishes, reopen the terminal (or start a new login shell) to enter zsh with the linked config.
zsh keeps its config under .config/zsh (XDG); the only file in $HOME is
a small .zshenv stub that sets ZDOTDIR and hands off to it. Put
machine-local settings in .config/zsh/.zshenv.local (environment) or
.config/zsh/.zshrc.local (interactive); both are gitignored.
The git config ($XDG_CONFIG_HOME/git/config) includes a relative
config.local sibling, which resolves under $XDG_CONFIG_HOME and is not
tracked here. Set your name and email there per machine:
git config -f "${XDG_CONFIG_HOME:-$HOME/.config}/git/config.local" user.name "Your Name"
git config -f "${XDG_CONFIG_HOME:-$HOME/.config}/git/config.local" user.email "you@example.com"Verify the effective identity (this reads the included config.local):
git config user.name && git config user.emailCLI tools, LSP servers, and formatters are managed by
mise: shared tools live in .config/mise/config.toml
and dotfiles-specific Neovim tools in mise.toml. zsh plugins
(zsh-autosuggestions, fast-syntax-highlighting) are shallow git clones
under $XDG_DATA_HOME/zsh/plugins.
Claude Code is installed standalone.
Task automation uses just (itself a mise tool).
Useful recipes:
just --list # List recipes
just setup # Link dotfiles, install mise tools and zsh plugins, install Claude Code
just update # Update mise tools, zsh plugins, and Claude Code
just fmt # Format Markdown, zsh files, and Neovim Lua files
just fmt-check # Check formatting without writing files
just lint # Run repository checks