This repo configures an Apple Silicon Mac. The dot script installs the packages in packages/bundle, links home/ onto ~ with GNU Stow, and sets up Fish, Grok, Ioskeley Mono, Rex, and a GitHub SSH key. Clone it to ~/Code/.dotfiles, because dot finds its files from the directory that holds the script.
- Delete
~/.gitconfigif it exists. Git ignores~/.config/git/configwhile that file is present, anddot doctorfails. - Keep the SSH private key outside the repo.
dot doctorfails when~/.ssh/id_ed25519resolves to a path inside the clone.
./dot init
./dot linkdot init runs these steps in order:
- Installs Homebrew when
brewis not onPATH. It runs the official installer with/bin/bash. The installer asks you to press Return and may ask for your password to create/opt/homebrew. - Installs the packages in
packages/bundleand the latest Node.js LTS. - Links
home/onto~. - Makes Fish the login shell. When the Fish path is missing from
/etc/shells, it appends the path withsudo. When$SHELLis not Fish, it runschsh -s. Log out and back in afterward. - Installs Grok, Ioskeley Mono, and the Rex settings.
- Creates
~/.ssh/id_ed25519with no passphrase when the key is missing, then writes the GitHub SSH client block and uploads the signing key.
dot link points ~/.local/bin/dot at the script and refuses to replace a regular file at that path. Open a new Fish shell afterward. home/.config/fish/conf.d/brew.fish adds /opt/homebrew/bin and ~/.local/bin to PATH. dot init does not write ~/.zprofile or config.fish.
If the Homebrew install fails, dot init stops. If a later step fails, it continues and exits with status 1 at the end. If only the Grok install fails, run dot grok afterward.
To skip the SSH key, the GitHub host block, and the signing-key upload, run ./dot init --skip-ssh.
Git signs commits and tags with ~/.ssh/id_ed25519.pub, as set in home/.config/git/config. The upload needs gh logged in with the admin:ssh_signing_key scope.
gh auth login
gh auth refresh -h github.com -s admin:ssh_signing_key
dot sshdot ssh copies the public key to the clipboard when pbcopy works. It uploads the key as a signing key only, so also add it as an authentication key at https://github.com/settings/ssh/new. Until you do, dot ssh warns that SSH to GitHub fails. Until the signing-key upload succeeds, dot doctor fails and commits show as unverified.
dot doctorIt checks the tools, the links, Rex, Git signing, the GitHub signing key, SSH, and Ioskeley Mono.
dot updatedot update runs brew update, installs missing packages and the latest Node.js LTS, upgrades outdated formulae, relinks home/, installs Ioskeley Mono when a face is missing, and applies the Rex steps. For an outdated cask it prints the brew upgrade --cask command and does not run it.
dot packages prints whether each package in packages/bundle is installed. It exits with status 1 when one is missing.
The terminal font is IoskeleyMonoTerm Nerd Font Mono, from the latest release at https://github.com/ahatem/IoskeleyMono (IoskeleyMono-Term-NerdFont.zip). Rex is a terminal, so the installer uses the Term build and the single-cell Nerd Font Mono faces. The family name has no space in IoskeleyMonoTerm. Starship draws its icons from that font. The installer copies the Normal faces into ~/Library/Fonts when any of these files is missing. The Nerd archive has no hinted split. dot doctor checks only these four.
IoskeleyMonoTermNerdFontMono-Regular.ttfIoskeleyMonoTermNerdFontMono-Bold.ttfIoskeleyMonoTermNerdFontMono-Italic.ttfIoskeleyMonoTermNerdFontMono-BoldItalic.ttf
The copy also includes the other Normal weights. SemiCondensed faces and the larger Nerd Font faces stay out. Once the Nerd faces are installed, the plain Term faces from the earlier installer are removed.
Rex uses this family. The font is a Rex app setting, so it lives in home/.config/rex/macos-defaults.conf and not in init.lua. Relaunch Rex after the font changes.
dot rexdot rex writes the app settings from home/.config/rex/macos-defaults.conf, checks and reloads init.lua, imports the Oscura Midnight theme when Rex does not have it, and runs rex terminfo setup. dot init and dot update run the same steps. The theme import needs Rex open with Remote Control on. Relaunch Rex after a settings change.
Edit the tracked file under home/. Stow links home/.config/git/config to ~/.config/git/config. Set the Git name and email as user.name and user.email in that file.
After you add or move a file under home/, run dot stow. It runs stow -R --no-folding without --adopt, so each file is its own symlink and files an app writes into ~/.config/<tool> stay out of the repo. If a path in ~ is already a real file or directory, move it aside first.
After you change home/.config/fish/fish_plugins, run fisher update from Fish.
Run dot help for the full command list.
AGENTS.mddocuments the repo layout and conventions.home/.config/fish/AGENTS.mddocuments Fish.home/.config/tinycast/README.mdhas the Tinycast import steps.