A tidy $HOME
is a tidy mind.
These are my dotfiles, designed primarily for macOS (Apple silicon) and Debian 12, heavily inspired by
hlissner/dotfiles. Topics are split into category/topic
(e.g. shell/zsh
), aim for XDG compliance, and clutter your $HOME
as little as possible.
- Homebrew (for macOS)
- git
- zsh
- curl
git clone --recurse-submodules https://github.com/eduarbo/dotfiles.git ~/.config/dotfiles
The following are the categories and topics you can install:
-
macos/
– Mac-specific tools and tweaksapps
– The essential macOS app lineup I can't live withoutdefaults
– Opinionated values for a saner (and possibly sassier) macOShammerspoon
– Lua-powered automation for pro-level productivity- Window wrangling without the wrestling
- Lightning-fast app launcher
- Push-to-talk mic sorcery
- Instantly swap your audio outputs like a DJ
karabiner
– The ultimate keyboard wizardry to remap all the things
-
editor/
– My battle-stations for text and codeemacs
– The best of both Emacs and Vim worlds, with extra chaosnvim
– My nimble sidekick for those “just one quick edit” momentscoding-style
– Keep your code prettier than your neighbor's garden
-
shell/
– Terminal superpowers and creature comfortsgit
– Snazzy aliases and Zsh plugins for effortless versioningtmux
– Tab-multiplying terminal wizardryzsh
– The shell with speed, features, and a prompt that actually sparks joykitty
– The terminal so full-featured, even your cat would approve
-
dev/
– Essential tools and setups for a life in codelua
– Harness the power of luaenv and keep your Lua scripts flowingnode
– Install nodenv: because who wants to remember which version of Node broke what?python
– Pyenv to rule them all, so every script gets the right snakegolang
– Go fast, install Go, and grab some must-have packagesphp
– Composer support included, because sometimes you just can’t avoid PHP
Usage: deploy [-acdlLit] [TOPIC...]
-a Target all enabled topics (ignores TOPIC args)
-c Afterwards, remove dead symlinks & empty dot-directories in $HOME.
Can be used alone.
-d Unlink and run `./_init clean` for topic(s)
-l Only relink topic(s) (implies -i)
-L List enabled topics
-i Inhibit install/update/clean init scripts
-t Do a test run; do not actually do anything
deploy shell/zsh macos/kitty
: enablesshell/zsh
andmacos/kitty
deploy -d shell/zsh
: disables shell/zsh & cleans up after itdeploy -l shell/zsh
: refresh links for shell/zsh (inhibits init script)deploy -l
: relink all enabled topicsdeploy -L
: list all enabled topics
Here's a breakdown of what the script does:
cd $topic
if [[ -L $DOTFILES_DATA/${topic/\//.}.topic ]]; then
./_init update
else
ln -sfv $DOTFILES/$topic $DOTFILES_DATA/${topic/\//.}.topic
./_init install
./_init link
fi
-
If you use a password manager like 1Password, managing SSH keys is a breeze (and much more convenient). But if you're old-school (or just like a little DIY), you can still generate SSH keys manually:
ssh-keygen -t ed25519 -C "personal-mbpro-2025" # Use a descriptive comment: purpose + device + year
Forge (Magit’s helper for GitHub/GitLab) expects your personal access token to be stored in ~/.authinfo.gpg
, or another location specified in your auth-sources. This file should never be committed to your repository.
To set up your tokens securely:
- This repo provides an
authinfo.gpg.example
template. Copy or rename this file toauthinfo.gpg
in the same location - Run
dot -l doom/emacs
to link the file - Open and edit the file in Emacs to add your tokens, then save. Emacs will manage the GPG encryption for you
By following these steps, your dotfiles remain clean, secure, and portable—reducing the risk of accidentally exposing your credentials.
Make sure the GPG key ID is correct. You can get a list of GPG keys with
gpg --list-secret-keys --keyid-format LONG
and then set it in Git with
git config --global user.signingkey [GPG-key-ID]
.
More details in Telling Git about your GPG key.
git@github.com: Permission denied (publickey)
Just add your SSH Key to your GitHub account
- DOOM Emacs (pulled by
editor/emacs
) - Pacmux Tmux theme (pulled by
shell/tmux
) - Simpl ZSH prompt (pulled by
shell/zsh
)