Personal dotfiles for macOS, managed with GNU Stow.
| File / directory | Description |
|---|---|
.config/ghostty/ |
Ghostty terminal with Dracula colour scheme |
.config/nvim/ |
Neovim config with lazy.nvim plugin manager and a pinned lazy-lock.json lockfile |
.aliases |
Handy shell aliases |
.bash_profile / .bashrc / .profile |
Bash startup files |
.brew |
Homebrew formulae and casks |
.gitconfig |
Git settings (diff-so-fancy, GPG signing, …) |
.gitmessage |
Conventional Commits message template |
.gnupg/ |
GPG configuration |
.macos |
Sensible macOS defaults |
.macos_hardening |
Security-focused macOS hardening settings |
.ssh/ |
SSH client configuration |
.tmux.conf |
tmux with vi-style key bindings |
.vimrc |
Vim with Vundle plugins (fzf, ALE, airline, …) |
bin/ |
Utility scripts |
- git
- GNU Stow —
brew install stow(macOS) orapt install stow(Debian/Ubuntu)
git clone https://github.com/bdossantos/dotfiles ~/.dotfiles
cd ~/.dotfiles
make installcd ~/.dotfiles
make uninstallWhen setting up a new Mac, you may want to apply sensible defaults and security hardening:
su - admin -c "env PATH=$PATH:/usr/sbin/ bash -x $HOME/.dotfiles/.macos"
su - admin -c "env PATH=$PATH:/usr/sbin/ bash -x $HOME/.dotfiles/.macos_hardening"make run-brewchsh -s "$(brew --prefix)/bin/bash"
exec $SHELL~/.bash_profileshould be super-simple and just load~/.profileand~/.bashrc(in that order)~/.profilehas the stuff NOT specifically related to bash, such as environment variables (PATH and friends)~/.bashrchas anything you'd want at an interactive command line. Command prompt, EDITOR variable, bash aliases for my use
A few other notes:
- Anything that should be available to graphical applications OR to sh (or bash
invoked as sh) MUST be in
~/.profile ~/.bashrcmust not output anything- Anything that should be available only to login shells should go in
~/.profile - Ensure that
~/.bash_logindoes not exist.
See also https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
Do not blindly run
:Lazy update. A supply chain attack relies on developers pulling malicious updates without reviewing them first.
Follow these steps instead:
-
Check for updates without applying them
:Lazy checkThis fetches the latest commits for every plugin but does not install anything.
-
Review the pending changes
Open the Lazy UI (
:Lazy). It lists every commit between your locked version and the remote tip. Skim the commit messages for anything suspicious before proceeding. -
Update deliberately
Once you are satisfied that the updates are legitimate, press U inside the Lazy UI to apply them.
-
Commit the updated lockfile
Immediately after updating and confirming Neovim still works, commit
lazy-lock.jsonso that the pinned versions are recorded:git add .config/nvim/lazy-lock.json git commit -m "chore(nvim): update lazy-lock.json"
pre-commit is used for linting (shellcheck, YAML, trailing whitespace, …). Run the full test suite with:
make testWTFPL © Benjamin Dos Santos