Skip to content
minusfivePublic

Repository files navigation

Personal System Configuration

This repository manages my macOS configuration. It uses mise, Homebrew, and custom Zsh scripts.

The configuration includes keyboard shortcuts for application launchers, window management, and text editing. These shortcuts work best with my custom keyboard layout.

Setup

The initialization script changes system settings and installs software. Read the initialization script and the scripts that it calls before you run it.

Clone the repository and initialize a machine:

git clone --single-branch --branch main git@github.com:minusfive/dot.git ~/dev/dot
cd ~/dev/dot
./scripts/init.zsh

The bootstrap supports work and personal profiles. The work profile is the default and is the safer choice for a new machine.

Select a profile with --profile:

./scripts/init.zsh --profile personal --mise

The script stores the selected profile at ${XDG_STATE_HOME:-$HOME/.local/state}/minusfive/profile and exports it as DOT_PROFILE. Later runs use the stored profile unless you select another one.

Each profile loads a different set of mise modules. The selected profile controls the active profile-specific mise environment.

Hammerspoon reads the same state file through the ProfileState Spoon. It mirrors the profile through hs.settings. The state file remains the source of truth.

Repository layout

The home/ directory is a source tree for files that belong under $HOME. Its layout mirrors the target layout, so each source path also describes its installed path.

Look in these directories when you customize the configuration:

.
├── .agents/                         # repository skills, eval workspaces, and guidance
├── .mise/                           # repository-local tools and tasks
├── assets/                          # images
├── home/                            # source tree mirrored under ~/
│   ├── .config/
│   │   ├── hammerspoon/             # ~/.config/hammerspoon
│   │   ├── mise/                    # ~/.config/mise
│   │   ├── nvim/                    # ~/.config/nvim
│   │   └── ...
│   ├── .ssh/
│   │   └── config                   # ~/.ssh/config
│   └── .zshenv                      # ~/.zshenv
├── scripts/                         # bootstrap and development tasks
├── tests/                           # script tests
└── ...

Machine bootstrap

mise manages global files, packages, and repository tools. Declarations for global configuration live in home/.config/mise/conf.d/. Mise links these files into ~/.config/mise/.

The declarations are grouped by logical boundary. For example, module.gh.toml manages GitHub resources and module.profiles.toml manages rendered workspace profiles. This keeps each bootstrap area small and independently understandable.

Package resources use dedicated module files. Tightly coupled declarations share a module. miserc.toml selects the modules for each profile.

dotfiles declarations describe user files that mise links, copies, templates, tracks, or removes. bootstrap.files declarations describe files that bootstrap creates or renders, while bootstrap.directories declarations describe directory state, such as permissions. Together, these declarations define the available resource modes and bootstrap phases.

The --mise initialization interface updates mise. It then applies the package, file, repository, and dotfile phases.

Development

The repository manages the tools that it uses for development. Entering the repository activates its project-specific mise environment.

Run the setup task to install project dependencies and install hk hooks that run through mise:

mise run setup

Run all configured checks:

mise run check

The hk configuration runs checks and fixes from one shared definition. rumdl owns Markdown linting and formatting, with soft-wrapped prose and automatic reflow for hard-wrapped paragraphs instead of a fixed-width hard-wrap policy. Prettier remains available for non-Markdown formatting. .rumdl.toml keeps the previous Markdown style choices, including its inline HTML allowlist.

Workspace

Previous Nix configuration

I previously maintained a Nix-based configuration. I no longer maintain it because this repository now replicates much of what I liked about Nix with mise.

Used by

Contributors

Languages