Personal configuration files for my macOS development environment, centered on Neovim, Zsh, and Ghostty.
- macOS
- No other prerequisites —
setup.shinstalls Homebrew and everything else fromBrewfile.
git clone https://github.com/ronload/dotfiles.git ~/dotfiles
cd ~/dotfiles
./setup.shsetup.sh installs Homebrew, Rust, opencode, and every package in Brewfile, then hands off to install.sh to symlink configs, clone fzf-git.sh, and sync Neovim plugins. Each step is idempotent and safe to re-run.
- nvim — Neovim with lazy.nvim and TokyoNight Moon
- zsh — Zsh shell (zshrc, zprofile, zshenv, aliases, prompt, abbreviations)
- ghostty — Ghostty terminal
- git — Git global config (with conditional work identity include)
- gh — GitHub CLI
- fastfetch — System info with a custom colored-bar module
- yazi — Terminal file manager
- Brewfile — Homebrew package manifest
Linting and formatting are driven by just. The justfile is the single source of truth — GitHub Actions invoke the same recipes on every push and pull request.
just # list all recipes
just ci # run every linter and formatter check
just lint # run all linters (lua, shell, zsh)
just format # run all formatter checks (lua, shell)
just lint-lua # luacheck on tracked Lua files
just lint-shell # shellcheck on tracked shell scripts
just lint-zsh # zsh -n syntax check on zsh/*
just format-lua # stylua --check
just format-shell # shfmt -i 2 -ci -dAll recipes operate on git ls-files, so untracked files are skipped. Zsh files are validated by zsh -n rather than shellcheck, which does not support zsh.
git/gitconfig conditionally includes a work identity for repos under git@github.com:prinsur/**:
[includeIf "hasconfig:remote.*.url:git@github.com:prinsur/**"]
path = ~/.gitconfig-prinsurThis override file is not tracked. Create it manually on each machine:
cat > ~/.gitconfig-prinsur <<'EOF'
[user]
email = your-work-email@example.com
EOFWithout it, commits to prinsur/* repos fall back to the global identity.
Released under the MIT License. See LICENSE for details.
