Dotfiles
~ 🍭 ~
Install / Use
/learn @ahmedelgabri/DotfilesREADME
~ 🍭 ~
For setting up development environment on any Unix machine (Darwin/Linux). The config officially supports macOS & NixOS & managed by nix

Font is Pragmata Pro, theme is a my own fork of vim-colors-plain, Terminal is Ghostty
What's in it?
These are the main configs:
- nix to manage installing most of the dependencies, for GUI apps on
macsOS I'm still using
Homebrew cask through the
homebrew module in
nix-darwin - aerc for reading emails
- tmux 2.3 or later
- Neovim
- Zsh
- Git
- Ghostty as my terminal
- hammerspoon macOS automation, using it for window management & other stuff
Officially supported OSs
- ARM macOS Sequoia
- [Experimental] NixOS (tested on 22.11)
Installation
- Install
nix
[!NOTE]
Make sure to check the
quirkssection
curl --proto '=https' --tlsv1.2 -sSfL https://artifacts.nixos.org/nix-installer | sh -s -- install
- Set up
[!NOTE]
The flake attribute in my case is usually is the host machine name, if not passed it will default to
$(hostname -s)
online:
nix --experimental-features 'nix-command flakes' run "github:ahmedelgabri/dotfiles" -- <flake attribute>
On a first run, the bootstrap app uses the bundled flake source it was launched
from and then clones the repo into ~/.dotfiles for subsequent rebuilds.
Homebrew
I still use it mostly for GUI apps, since Nix and/or Home-manager support for
GUI applications have problems with symlinking to the Applications/ folder.
Homebrew is fully managed by nix it gets installed and run through nix using
nix-homebrew
Notes
- zsh: add these to
${XDG_DATA_HOME}/$(hostname)/zshrc
export HOMEBREW_GITHUB_API_TOKEN =
export GITHUB_TOKEN =
- For git add your GPG key info in
${XDG_DATA_HOME}/$(hostname)/gitconfig
[user]
signingkey =
Don't forget to upload your public key to GitHub!
Note: There needs to be a three-way match on your email for GitHub to show the commit as 'verified': The commit email, github email, & the email associated with the public key
Learn about creating a GPG key and signing your commits here
My email messages are synchronised between the remote server and my computer with isync, I read them with aerc and search index is built by notmuch.
After linking the dotfiles, there are only a few more things that need to be done.
Authentication
Each account must authenticate with an IMAP server and an SMTP server. The passwords, need be stored in the Pass.
For Fastmail (or Gmail accounts with two-factor authentication enabled), use an application-specific password.
In order for all this to work, a few items have to be stored in the password store:
service/email/source: (used by fastmail only JMAP password to access my email)service/email/outgoing: (used by fastmail only JMAP password to send emails)service/email/contacts: (used by fastmail only JMAP password to access contacts)service/email/password: App specific password, needed for local email syncingmbsyncand sending emails withmsmtp
Synchronizing periodically
Incoming messages are fetched from the remote server when mbsync runs (the
executable name for isync).
On macs I use launchd, on NixOS using systemd. You can check
mail.nix.
Authors
Related Skills
node-connect
340.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
340.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.2kCommit, push, and open a PR
