dotfiles

agent
Security Audit
Warn
Health Warn
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 7 GitHub stars
Code Pass
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

💻 My macOS dotfiles: Zsh, Neovim (LazyVim), Ghostty, tmux and herdr for AI coding agents, lazygit, mise and AeroSpace, all in Bereghici Dark and Light, following the macOS appearance.

README.md

dotfiles: zsh, starship, git, delta, fzf, neovim and homebrew for macOS

~abereghici 💻

CI
License: MIT
macOS

My macOS dotfiles: Zsh, Homebrew, Neovim (LazyVim), Ghostty, tmux and herdr for
coding agents, lazygit, mise and AeroSpace. Every themed tool uses Bereghici
Dark or Light and follows the macOS appearance. One script sets up a new Mac;
the configs are symlinks back into this repository, so editing them here is
editing them live.

[!WARNING]
These are my personal settings, and setup.sh changes your system (see
what it changes). Fork the repository and review the
code before running it, rather than installing it as is.

Contents

What's inside

Area Tools
Shell Zsh with aliases, fzf, zoxide, direnv and a Starship prompt
Terminal Ghostty, tmux and herdr on one prefix (keys)
Editor Neovim on LazyVim; VS Code settings and snippets with default keybindings
Git Git aliases, delta diffs and lazygit
Runtimes Node, Python, Go, Rust, Java, Bun, Maven and uv via mise
Theme Bereghici Dark/Light from abereghici/themes, switched by appearance (how)
macOS Defaults (notes), AeroSpace tiling and a Romanian keyboard layout
Apps Everything in the Brewfile, VS Code extensions included
Scripts bin/, including the projects picker for tmux and herdr and keychain for secrets

The repository is laid out by where things go: tilde/ is linked into
~, bin/ into ~/.local/bin, and the rest by
setup/ (herdr/plugins/,
keyboard/, lazygit/, vscode/,
launchd/). tests/ checks the result.

Requirements

  • macOS 14 (Sonoma) or later; tested on macOS 26 on Apple silicon. The Homebrew
    paths for Intel Macs are handled but not tested.
  • An administrator account (setup.sh uses sudo).
  • Git, from the Xcode Command Line Tools (xcode-select --install); the
    Homebrew installer also offers them.

Install

git clone https://github.com/abereghici/dotfiles.git ~/dotfiles
~/dotfiles/setup.sh

It asks you to press Enter and for your password, then what to do with any file
in the way and the local settings questions. Pass -y for no questions at all:
every file in the way is backed up, and the
local settings are skipped (run setup/local.sh
later). Open a new terminal when it's done. Setting up a new Mac? See the
checklist for what to do around it.

What setup.sh changes

In order, each step a script you can also run on its own:

  1. ~/.zshrc: moved to ~/.zshrc.backup if it's a real file (a timestamp
    is added when that backup exists).
  2. /etc/pam.d/sudo_local: created, if missing, so Touch ID can authorize
    sudo.
  3. setup/brew.sh: installs Homebrew if needed, runs
    brew update and brew upgrade, installs the Brewfile and
    runs brew cleanup.
  4. setup/symlinks.sh: links tilde/, bin/, the
    lazygit, lazydocker and VS Code configs and the keyboard layout. A file in
    the way is skipped, overwritten or backed up, as you choose (backed up with
    -y), and links left pointing at removed files are deleted. It also installs
    the appearance agent in ~/Library/LaunchAgents.
  5. setup/local.sh: asks for this machine's private settings
    and writes the *.local files, mode 600. Skipped
    with -y.
  6. setup/misc.sh: installs tpm and the tmux plugins, links
    the herdr plugins and installs
    herdr-reviewr, installs the
    mise runtimes and npm packages, clones (or updates)
    abereghici/themes into
    ~/.local/share/bereghici and runs its install.sh, then appearance sync.

setup/README.md describes each script in detail. A step
that fails, such as one Brewfile entry or an offline clone, is reported and the
rest goes on; re-running setup.sh is safe. The optional
setup/macos.sh writes macOS defaults and is not part of
setup.sh.

Local customizations

These optional files extend the dotfiles for one machine and are never checked
in. setup/local.sh writes them from your answers; every
question can be left empty, and a file that exists is kept (delete it to be
asked again).

~/.zsh.local

Sourced by .zshrc after the path, env, aliases, keybindings and completion
setup, and before the plugins and the prompt, so it can add to or override any
of them. local.sh writes the Keychain secrets you name into it, storing their
values in the Keychain, never in a file.

# Extra binaries for this machine only
[ -d "$HOME/.acme/bin" ] && PATH="$HOME/.acme/bin:$PATH"

# Secrets from the macOS Keychain (stored with `keychain set ACME_API_KEY`)
eval "$(keychain export ACME_API_KEY GITHUB_TOKEN)"

~/.gitconfig.local

Included at the end of ~/.gitconfig, so it can override or add to any setting.
local.sh writes your name, email and GitHub username, the optional
HTTPS-to-SSH rewrite for GitHub, and a separate identity for a work Git host:
any repository whose remote is on that host includes ~/.gitconfig.work.

[user]
  name = "Your Name"
  email = "[email protected]"
[includeIf "hasconfig:remote.*.url:https://git.example.com/**"]
  path = ~/.gitconfig.work

~/.config/mise/config.local.toml

mise loads it alongside config.toml (see
mise config ls), for tools you only need on this machine. ~/.config/mise
links to tilde/.config/mise, so the file lives there, git-ignored.

[tools]
terraform = "latest"

~/.config/herdr/reviewr.local.toml

Settings for herdr-reviewr, such
as a work GitLab host. herdr-reviewr-config merges
it with reviewr.toml into reviewr's
config; run it again after editing either.

gitlab_host = "git.example.com"

~/.macos.local

Personal settings for setup/macos.sh; each one is skipped
when unset.

COMPUTERNAME='my-mac'
LOCALHOSTNAME='my-mac'
LANGUAGES=(en)
LOCALE='en_US'
TIMEZONE='Europe/London' # list: sudo systemsetup -listtimezones

Updating

cd ~/dotfiles
git pull
./setup.sh -y

-y skips the questions, which an update doesn't need. Every step is safe to
run again: links already in place are skipped, and the Homebrew packages, mise
tools and themes are brought up to date. Plugins already installed keep their
version: update them with herdr plugin update and tpm's prefix U.

Uninstalling

~/dotfiles/setup/uninstall.sh -n # print what it would remove
~/dotfiles/setup/uninstall.sh

setup/uninstall.sh removes the links into this
repository and into the themes, the appearance agent and the herdr plugins
linked from here, lists the backups setup.sh made (restore them with mv),
and asks before removing /etc/pam.d/sudo_local. Homebrew and its packages, the
themes clone, the *.local files and any macOS defaults stay.

Troubleshooting

  • A command or setting is missing after setup: open a new terminal; the
    running one predates the links.
  • brew isn't found after installing Homebrew by hand: run
    eval "$(/opt/homebrew/bin/brew shellenv)", or open a new terminal.
  • Two quick ⌥Space presses open Claude's Quick Entry: Claude desktop opens
    it on a double tap of ⌥; set its shortcut to something else in its Settings.
  • ⌃ + arrows switch Spaces instead of resizing Neovim splits: turn off the
    Mission Control shortcuts.
  • A tool didn't switch theme with the appearance: run appearance sync
    (details).
  • Is everything in place? npm test runs the bats tests against
    this machine; they change nothing.

More docs

Contributing

Pull requests that fix bugs or add improvements without breaking changes are
welcome. See CONTRIBUTING.md for the checks to run, and
SECURITY.md to report a vulnerability privately.

License

MIT © Alexandru Bereghici

Credits

Ideas and structure from these repositories and articles:

Reviews (0)

No results found