Personal dotfiles managed with GNU Stow, featuring automated setup and 1Password integration.
git clone [email protected]:ricksaarge/dotfiles.git ~/dotfiles
cd ~/dotfiles
cp .env.example .env
# Edit .env with your information
./task install- Automated Installation - Single command setup with
./task install - Cross-Platform - macOS and Ubuntu support
- GNU Stow - Clean symlink management
- 1Password Integration - SSH authentication and Git commit signing
- Package Management - Brewfile (macOS) and apt.txt (Ubuntu)
- Modern Shell - Starship prompt with Nerd Font icons
dotfiles/
├── task # Main installation script
├── Brewfile # macOS packages (Homebrew Bundle)
├── apt.txt # Ubuntu packages
├── .env.example # Configuration template
├── stow-common/ # Cross-platform dotfiles
│ ├── .gitconfig # Git config (requires .env)
│ ├── .vimrc # Vim configuration
│ ├── .tmux.conf # Tmux configuration
│ └── .config/
│ └── starship.toml # Starship prompt (ASCII)
├── stow-macos/ # macOS-specific dotfiles
│ ├── .zshrc # Zsh configuration
│ ├── .zprofile # Zsh login shell
│ ├── .gitconfig.platform # 1Password Git signing
│ ├── .ssh/
│ │ ├── config # 1Password SSH agent
│ │ └── allowed_signers # SSH signature verification
│ └── .config/
│ └── starship-nerd.toml # Starship (Nerd Fonts)
└── stow-ubuntu/ # Ubuntu-specific dotfiles
├── .bashrc
└── .bash_profile
macOS:
# Homebrew (if not installed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Ubuntu:
sudo apt update
sudo apt install -y git-
Clone:
git clone [email protected]:ricksaarge/dotfiles.git ~/dotfiles cd ~/dotfiles
-
Configure:
cp .env.example .env nano .env # Edit with your infoRequired variables:
GIT_USER_NAME="Your Name" GIT_USER_EMAIL="[email protected]" GITHUB_USERNAME="yourusername"
-
Install:
./task install
This will:
- Install Homebrew (macOS) or update apt (Ubuntu)
- Install packages from Brewfile/apt.txt
- Install GNU Stow
- Generate
.gitconfig.localfrom.env - Stow dotfiles to
$HOME - Apply macOS defaults (macOS only)
The ./task script provides automated setup:
./task install # Full setup (recommended)
./task install-homebrew # Install Homebrew (macOS)
./task install-packages # Install from Brewfile/apt.txt
./task install-stow # Install GNU Stow
./task configure-git # Generate .gitconfig.local
./task stow # Symlink dotfiles
./task macos-defaults # Apply macOS settings
./task help # Show all commandsEnable in 1Password:
- Open 1Password → Settings → Developer
- Enable "Use the SSH agent"
- Add your SSH key to 1Password
Already configured in dotfiles:
.zshrcand.zprofilesetSSH_AUTH_SOCK.ssh/configpoints to 1Password agent socket
Test:
ssh -T [email protected]
# Should authenticate via 1PasswordAdd signing key to GitHub:
- Copy your SSH public key:
cat ~/.ssh/allowed_signers | awk '{print $2" "$3}'
- Go to https://github.com/settings/keys
- Click "New SSH Key"
- Key type: Select "Signing Key"
- Paste key and save
Already configured in dotfiles:
.gitconfig.platformenables SSH signing- Uses 1Password's
op-ssh-sign - Commits auto-signed (no
-Sflag needed)
Test:
git commit --allow-empty -m "Test"
git log --show-signature -1
# Should show "Good 'git' signature"Verify on GitHub:
git push
# Commits show "Verified" badge ✅| File | Source | Purpose |
|---|---|---|
.gitconfig |
stow-common |
Universal settings, aliases |
.gitconfig.local |
Generated from .env |
Name, email, signing key |
.gitconfig.platform |
stow-macos |
1Password SSH signing (macOS) |
Chain: .gitconfig includes .gitconfig.local and .gitconfig.platform
| Config | Platform | Features |
|---|---|---|
starship.toml |
Ubuntu/SSH | ASCII-only, universal |
starship-nerd.toml |
macOS | Nerd Font icons, colors |
macOS uses Nerd Font version (set in .zshrc)
# Install packages
brew bundle install
# Check status
brew bundle check
# Update Brewfile
brew bundle dump --forceIncludes: Git, Stow, Starship, Node, Python, Docker, and more
# Packages installed via ./task install-packagesIncludes: Build tools, curl, wget, git, tmux, vim
# Add to appropriate stow directory
cp ~/.config/myapp/config.yml stow-common/.config/myapp/
# Re-stow
stow --restow stow-commonFiles in stow-macos/ or stow-ubuntu/ override stow-common/
cd ~/dotfiles
git pull
./task install # Re-run to update# Backup and remove conflicting files
mv ~/.gitconfig ~/.gitconfig.backup
# Or adopt existing files (overwrites repo)
stow --adopt stow-common# Check 1Password SSH agent socket
ls -la ~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock
# Check environment variable
echo $SSH_AUTH_SOCK
# Should match socket path above
# Restart shell
exec zsh- Ensure signing key added to GitHub (see "1Password Setup" above)
- Verify key type is "Signing Key" (not "Authentication Key")
- Check local signing works:
git log --show-signature -1 # Should show "Good 'git' signature"
# Check .env exists and is valid
cat .env
# Check required variables set
grep GIT_USER .env
# Run with debug
bash -x ./task install✅ Public SSH keys ✅ Configuration templates ✅ Shell scripts ✅ Package lists
❌ .env (in .gitignore)
❌ .gitconfig.local (generated, in .gitignore)
❌ Private SSH keys
❌ Tokens/passwords
Location: 1Password vault (encrypted)
Access: Via SSH agent socket
On Disk: None (not written to ~/.ssh/)
This repository uses custom tools and formats:
| Tool | Purpose | Repository |
|---|---|---|
| AISD | AI-Structured Documentation format | ricksaarge/aisd |
| todo-md | Task list format for TODO.md | ricksaarge/todo-md |
| fortunes | Fortune quotes collection | ricksaarge/fortunes |
See AGENTS.md for AI agent instructions.
This dotfiles approach was inspired by these repositories:
| Source | Complexity | Key Features |
|---|---|---|
| nygaard.dev | Low | GNU Stow + Brew Bundle simplicity |
| webpro/dotfiles | Medium | Balanced approach, good documentation |
| mathiasbynens/dotfiles | High | Comprehensive macOS defaults reference |
See docs/research/inspiration.md for full analysis.
MIT
Ricardo Gemignani (@ricksaarge)