Personal dotfiles for macOS and Linux. Symlink-based — no dotbot or stow.
New machine bootstrap (installs Homebrew, 1Password, clones repo, runs
install.sh):
/bin/bash <(wget --no-cache -qO- https://raw.githubusercontent.com/nikitabarskov/dotfiles/main/bootstrap.sh)Re-apply dotfiles on an existing machine (idempotent):
bash ./install.shjust fix # format + lint (mise fmt then biome check --unsafe --write)
just upgrade # bump all mise tool versions
just lock # regenerate mise.lock for linux-x64 and macos-arm64| Path | Purpose |
|---|---|
install.sh |
Symlinks everything into $HOME and ~/.config/ |
bootstrap.sh |
One-time new-machine setup |
justfile |
Task runner |
.miserc.toml |
Project-level early mise settings |
mise.toml |
Tool versions (biome, claude, codex, rtk, just) |
.config/mise/ |
Global mise tools, lockfile, and early settings |
.config/agents/AGENTS.md |
Global AI agent instructions (symlinked to Claude, OpenCode, Codex) |
.config/git/ |
Per-context git configs (nikitabarskov, hirn.studio, deepinsight) |
.config/homebrew/ |
darwin.Brewfile and linux.Brewfile |
- macOS: links
aerospace.toml,darwin.Brewfile; creates 1Password SSH sign at/opt/1Password/op-ssh-sign - Linux: links
i3/config,linux.Brewfile, GTK/HiDPI settings,xprofile,Xresources
Biome handles JSON files. Indent style is tabs. Run just fix before
committing — it both formats and lints. biome.json exempts
.config/zed/settings.json to allow comments and trailing commas.
.config/agents/AGENTS.md is the single source of truth for global coding
preferences, principles, and shared tool instructions (CodeGraph, RTK).
install.sh symlinks it to:
~/.claude/CLAUDE.md~/.config/opencode/AGENTS.md~/.codex/AGENTS.md
Edit .config/agents/AGENTS.md to update global preferences; re-run
install.sh to propagate (symlinks mean it's live immediately).
Do not run rtk init --global — it replaces ~/.claude/CLAUDE.md with a
real file, breaking the symlink. RTK instructions are managed manually in
.config/agents/AGENTS.md. If the symlink breaks, restore it with
bash ./install.sh.
.agents/skills/ is the single source of truth for shared agent skills
(OpenCode, Claude Code, Codex). install.sh symlinks the whole .agents/
directory to ~/.agents/.
To add a new skill, create .agents/skills/<name>/SKILL.md with the required
frontmatter (name, description).
SSH signing via 1Password. Socket at ~/.1password/agent.sock. Per-context git
configs in .config/git/ with includes for nikitabarskov, hirn.studio, and
deepinsight identities.
| Link | Summary |
|---|---|
| anishathalye/dotbot | Lightweight dotfiles bootstrapper. Uses a YAML config to symlink, create dirs, and run shell commands. No external dependencies; ships as a git submodule or PyPI package. |
| Using GNU Stow to manage your dotfiles | Classic article showing how to use GNU Stow to symlink dotfiles from a versioned subdirectory into $HOME. Simpler alternative to dedicated dotfile managers. |
| MikeMcQuaid/strap | Script to bootstrap a minimal macOS dev system: enables FileVault/firewall/TouchID sudo, installs Xcode CLT and Homebrew, runs macOS updates, and optionally installs a ~/github/username/dotfiles repo and Brewfile. |
| Brew Bundle Brewfile Tips | Comprehensive guide to brew bundle: creating/restoring Brewfiles, using mas for App Store apps, buo/cask-upgrade for GUI app upgrades, and managing multiple Brewfiles per machine profile. |
| mac-upgrade.sh | Single-command macOS upgrade script: runs brew update, brew upgrade, brew cu --all, mas upgrade, brew cleanup, then dumps the result back to a Brewfile. |
| buo/homebrew-cask-upgrade | brew cu — interactive Homebrew Cask upgrade tool with version pinning, auto-update app filtering, and --all/--yes/--cleanup flags. Fills the gap left by native brew upgrade for casks. |
| GNU tools in macOS instead of FreeBSD tools | How to install GNU coreutils/sed/tar/grep via Homebrew and prepend their gnubin paths so they shadow the BSD defaults on macOS. |
| dotfiles — Document and automate your Macbook setup | GitLab blog post on dotfiles philosophy, structure, and automation: ZSH + Oh My Zsh, Homebrew scripts, defaults write for trackpad/keyboard settings, and keeping everything in a public git repo. |
| i3wm for multilinguals | How to add a second keyboard layout in i3wm via setxkbmap, force US layout before screen lock with xkb-switch, and show a language indicator in i3bar with a custom i3status wrapper. |