My personal macOS dotfiles, managed with RCM. Sets up a full development environment — shell, editors, terminals, and CLI tools — with a single ./install.
Clone into ~/.dotfiles and run the installer:
git clone https://github.com/delianides/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./installThe installer will:
- Install Xcode command-line tools (if missing).
- Install Homebrew, then run
Brewfile,Brewfile.casks, andBrewfile.mas. - Switch the login shell to
zsh. - Symlink dotfiles into
$HOMEviarcup. - Apply macOS system defaults from
system/macos. - Install asdf language plugins (bun, node, python, ruby, rust, go) and the versions in
.tool-versions. - Install Claude Code.
After install: remap Caps Lock to Control in System Settings, install tmux plugins with prefix + I, and install any non-Homebrew fonts you want manually.
RCM commands (these are the day-to-day workflow):
| Command | What it does |
|---|---|
rcup -d . |
(Re)link all dotfiles into $HOME, respecting rcrc |
rcdn |
Remove all symlinks |
mkrc <file> |
Move a file into the dotfiles repo and replace it with a symlink. Use -t <tag> to scope to a tag |
lsrc |
Show every dotfile and where it links to |
Shell helpers:
qqorreload!— reload the current zsh session.
Each tag-* directory is an RCM tag. The active tags (shell editor terminal, set in rcrc) tell rcup which directories to link. Files inside are symlinked into $HOME with the tag prefix stripped — tag-shell/zshrc becomes ~/.zshrc, tag-editor/config/nvim/ becomes ~/.config/nvim/, and so on.
- Zsh —
zshenv,zshrc,aliases. Plugins are sourced from Homebrew (no plugin manager). - Starship prompt — config lives under
tag-terminal/config/starship.toml. - Git —
gitconfigwith delta as the pager and 1Password SSH commit signing. Conditional includes pick the right identity based on the working directory (~/Work/,~/Github/,~/Gitlab/). - asdf —
asdfrc,tool-versions,default-*package lists per language. - tmux —
config/tmux/tmux.conf, paired with sesh for session management. - Other tools —
config/direnv/,config/zellij/,config/worktrunk/, plus abin/directory of custom scripts. - Claude Code —
claude/holds settings and hooks.
- Neovim — LazyVim-based config in
config/nvim/. Plugin specs live inlua/plugins/, with extras and config split out intolua/plugins/extras/andlua/config/. - Helix —
config/helix/. - Zed —
config/zed/(settings and keybindings). - JetBrains IDEs —
ideavimrcfor IdeaVim.
- Ghostty —
config/ghostty/config. - WezTerm —
config/wezterm/wezterm.lua. - cmux —
config/cmux/for the cmux terminal multiplexer. - Starship —
config/starship.toml.
Homebrew installs are split into three files:
Brewfile— taps and CLI formulae (neovim, helix, ripgrep, fzf, gh, lazygit, kubernetes tooling, etc.).Brewfile.casks— GUI apps (Ghostty, WezTerm, Zed, Raycast, 1Password, Obsidian, Slack, Docker, fonts, …).Brewfile.mas— Mac App Store apps (installed viamas).
.github/workflows/dotfiles.yml lints Lua on every push and PR:
- luacheck — static analysis for Neovim Lua.
- StyLua — formatting check (
stylua --check .).