Skip to content

Repository files navigation

Dotfiles

My dotfiles. Hope it's useful for others. Primarily using it for:

  1. Golang
  2. Ruby on Rails
  3. Web development in general
  4. Lua
  5. Docker
  6. Terraform

Layout

This repo is managed by mise dotfiles instead of GNU Stow.

home/          # files linked directly into $HOME
config/        # XDG config directories linked under ~/.config
local/bin/     # user executables linked under ~/.local/bin
macos/         # macOS-specific app config

Key examples:

  • home/.zshrc -> ~/.zshrc
  • config/zsh -> ~/.config/zsh
  • config/nvim -> ~/.config/nvim
  • config/mise/config.toml -> ~/.config/mise/config.toml
  • local/bin/dev-update -> ~/.local/bin/dev-update
  • macos/hammerspoon -> ~/.hammerspoon

The full mapping is declared in config/mise/config.toml under [dotfiles].

Kitty Workflow

Kitty is configured with the tall layout for Kesh workspaces: the primary pane occupies the left side and additional panes stack on the right. Keep tall first in enabled_layouts; Kitty uses the first enabled layout when reloading its configuration with Cmd+R, and putting splits first turns the workspace into vertical columns.

The first shell opened in a tab sets the tab title from its initial directory. Shell title updates are disabled, and windows launched from that tab keep the same title. Use Cmd+Shift+N to set a title manually.

Window navigation uses Ctrl+H/J/K/L for left/down/up/right. Navigation is geometric: Ctrl+K only moves when the focused pane has another pane above it.

Usage

Preview dotfile changes:

MISE_GLOBAL_CONFIG_FILE="$PWD/config/mise/config.toml" mise dotfiles apply --dry-run --force --yes

Apply dotfiles:

make setup

Bootstrap a remote Linux machine over SSH:

cp bootstrap/.env.example bootstrap/.env
# edit bootstrap/.env and set GITHUB_USER, GITHUB_EMAIL, and GITHUB_PAT
make setup-linux HOST=hades@orb
# or
make -C bootstrap setup-linux HOST=hades@orb

This installs base packages and mise on the remote host, configures git identity, clones this repo to ~/.dotfiles over HTTPS using GITHUB_PAT without persisting the token in git config, and runs the dotfiles setup.

Check status:

MISE_GLOBAL_CONFIG_FILE="$PWD/config/mise/config.toml" mise dotfiles status

Run validation:

make test
# or
MISE_GLOBAL_CONFIG_FILE="$PWD/config/mise/config.toml" mise test

Update the full development environment (Homebrew, mise, and all mise-managed tools):

make dev-update
# or
MISE_GLOBAL_CONFIG_FILE="$PWD/config/mise/config.toml" mise run dev-update

Local-Only Configuration Boundaries

Treat files under home/, config/, local/, and macos/ as shared/tracked by default. Keep machine-specific or secret values in local-only files under $HOME:

  • ~/.env.local for global secret and machine-specific environment variables loaded by mise ([settings].env_file), including OBSIDIAN_VAULT pointing to the directory that contains .obsidian
  • ~/.config/zsh/aliases.private.zsh
  • ~/.config/zsh/aliases.local.zsh
  • ~/.config/zsh/functions.local.zsh

~/.config/zsh/init.zsh sources the zsh local files only if they exist. Secret environment variables should live in ~/.env.local using export KEY="value" syntax, not in config/zsh/env.local.zsh. This repo ignores *.local.zsh and .env.local, but does not ignore aliases.private.zsh, so keep aliases.private.zsh outside this repo or add a local Git exclude for config/zsh/aliases.private.zsh.

Before committing, verify local-only files are still untracked:

git status --short --untracked-files=all

Repository Hygiene

Remove Finder metadata files:

find . -name '.DS_Store' -delete

Verify repository hygiene:

git ls-files | rg 'DS_Store$'
find . -name '.DS_Store'
git status --short

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages