npx skills add connorads/dotfilesREADME
dotfiles
Use git (and Sublime Merge) to manage dotfiles without using symlinks. Uses nix-darwin (macOS) or home-manager (Linux) and brew (macOS) to setup and install software, and mise to manage runtimes.
Usage
If you've already got your dotfiles setup you can use the following commands to manage your dotfiles.
Updating dotfiles
Track file
dotfiles add -f .somefile
Untrack file
dotfiles rm --cached .somefile
Managing system
macOS (nix-darwin)
Build and activate nix-darwin config. This will make changes to the system and update packages as per flake.nix
darwin-rebuild switch --flake ~/.config/nix
# alias: drs
Update nix packages. This will update your non-homebrew packages and update flake.lock
nix flake update --flake ~/.config/nix
# alias: nfu
# You need to run build and activate after i.e. drs
Update brew packages
brew upgrade
Update mise packages
mise upgrade
Linux (home-manager)
Build and activate home-manager config. This will update packages as per flake.nix
home-manager switch --flake ~/.config/nix
# alias: hms
Update nix packages. This will update your packages and update flake.lock
nix flake update --flake ~/.config/nix
# alias: nfu
# You need to run home-manager switch after i.e. hms
Update mise packages
mise upgrade
Setup
Setup (from this repo)
If you want to (fork and) clone this repo and use it for your own dotfiles, follow these steps.
-
Clone repo
DOTFILES_REPO=https://github.com/connorads/dotfiles/ DOTFILES_DIR=$HOME/git/dotfiles git clone --bare $DOTFILES_REPO $DOTFILES_DIR -
Change worktree to home directory
cd $DOTFILES_DIR git config --unset core.bare git config core.worktree $HOME -
Put dotfiles from git into home directory (⚠️ this will overwrite existing dotfiles in home directory)
cd $HOME git --git-dir=$DOTFILES_DIR/ checkout -f -
Setup nix, brew and install software (⚠️ skip the option to install Determinate Nix)
macOS (nix-darwin):
# Install Homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" eval "$(/opt/homebrew/bin/brew shellenv)" # Install Nix curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh # Build and activate nix-darwin configuration nix run nix-darwin/master#darwin-rebuild -- switch --flake ~/.config/nixLinux (home-manager):
# Install Nix curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install . ~/.nix-profile/etc/profile.d/nix.sh # Build and activate home-manager configuration nix run home-manager/master -- switch --flake ~/.config/nix -
You can now reload your shell and open Sublime Merge
smerge $DOTFILES_DIR
Setup YubiKey for sudo
macOS let's you use Touch ID for sudo but dem keyboards be expensive. Maybe you gots a YubiKey, this is how you set it up so you can touch your YubiKey instead of typing your password. The sudo/pam config is taken care of in flake.nix.
mkdir ~/.config/Yubico
pamu2fcfg > ~/.config/Yubico/u2f_keys
Add a second key if you like
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
Setup (from scratch)
Follow these steps to recreate the setup for this repo from scratch.
-
Create repository to store dotfiles
DOTFILES_DIR=$HOME/git/dotfiles git init --bare $DOTFILES_DIR -
Change worktree to home directory
cd $DOTFILES_DIR git config --unset core.bare git config core.worktree $HOME -
Ignore all files except
.gitignore(Sublime merge doesn't support status.showUntrackedFiles=no)cd $HOME echo "/*" >> .gitignore echo "!.gitignore" >> .gitignore -
Add alias to
.zshrcecho "alias dotfiles='git --git-dir=$HOME/git/dotfiles/'" >> $HOME/.zshrc -
You can now start tracking files
Credit
Inspired by
- StreakyCobra's comment on Hacker News for idea to avoid symlinks with bare repo
- zwyx's blog post for Sublime Merge integration
- [Us
...