Config files for fish, editors, terminals and more — for macOS and Linux.
First, make sure you have these installed:
git: to clone the repocurl: to download some stufftar: to extract downloaded stufffish: to actually run the dotfilessudo: some configs may need it
Then run:
git clone https://github.com/supercid/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./script/bootstrap.fish # macOS
./script/bootstrap.fish --linux # Linux (installs packages via apt where possible)Then close and open your terminal again.
All changed files are backed up with a
.backupsuffix.
The --linux flag makes the bootstrap install the toolset with apt-get,
falling back to pinned upstream release binaries for the tools Debian doesn't
package (neovim, yazi, terraform, terragrunt, curlie, red-tldr, …). It fails
loudly if any expected tool is missing, so it doubles as a CI check.
The whole setup can be built and exercised in a throwaway container — handy for trying changes without touching your machine, and for CI:
docker compose run --rm dotfiles # native arch (mac/linux dev box)
docker compose run --rm dotfiles-pi # linux/arm64, mirrors a Raspberry Pi
docker compose run --rm dotfiles-ci # linux/amd64, deterministic CI target
docker compose run --rm dotfiles-dood # + docker CLI, uses the host daemon
docker compose run --rm dotfiles-dind # + a nested docker daemon (isolated)The GitHub Actions workflow builds the image on both architectures and runs a docker-in-docker smoke test, so a package that moves or disappears turns CI red.
For macOS I recommend:
ghostty: the terminal emulator I use;fzf: fuzzy finder;bat: acatreplacement;eza: alsreplacement;jq: a JSON processor with syntax highlighting;starship: the prompt this config uses;git-delta: better git diffs;kubectx: quick Kubernetes context/namespace switching;grc: colorize command output;gh: GitHub from the terminal.
The full list of what gets installed lives in brew_packages/install.fish.
The prompt and file listings use Nerd Font glyphs. The fonts topic installs
Inconsolata (Nerd Font) — configure your terminal to use it.
Neovim is configured with LazyVim; the config is
versioned under nvim/config and symlinked to ~/.config/nvim. On Linux the
bootstrap installs a Neovim release new enough for LazyVim.
Run it — read and tweak it first!
$DOTFILES/macos/set-defaults.shThen log out and back in / restart.
The default EDITOR is vim; override it with your own local config.
PROJECTS defaults to ~/Developer, and the shortcut to that folder in the
shell is dev.
Everything's built around topic areas. To add a new area to your forked
dotfiles — say, "Erlang" — add an erlang directory and put files in it.
Anything in a conf.d directory or with a .fish function is linked into your
fish config. Anything with a .symlink extension is symlinked without the
extension into $HOME when you run script/bootstrap.fish.
How to add custom configuration without messing up the local repository.
Change ~/.gitconfig directly — it includes the dotfiles-managed one.
Edit ~/.ssh/config.local.
Feel free to contribute. Pull requests are automatically checked/linted with Shellcheck and shfmt.
