Skip to content

Repository files navigation

Dotfiles 🌚

My personal dotfiles and development environment for macOS and Linux, managed by mise.

Quick start

Set up a fresh machine with one command:

curl -fsSL https://raw.githubusercontent.com/zlliang/dotfiles/main/bootstrap.sh | bash

Or with the work profile:

curl -fsSL https://raw.githubusercontent.com/zlliang/dotfiles/main/bootstrap.sh | PROFILE=work bash

This stage-zero script installs system prerequisites (Xcode Command Line Tools and Homebrew on macOS; curl and git on Linux) and mise, clones this repository to ~/workspace/github/zlliang/dotfiles, and runs mise bootstrap under the chosen profile.

The work profile needs a few machine-local values: the script seeds the gitignored mise.work.local.toml from mise.work.local.toml.example. Fill in the placeholders and rerun mise bootstrap.

Configuration layout

.miserc.toml enables auto_env, so mise composes the configuration from layered files selected by platform and profile:

  • mise.toml: shared config — the repo list, the dotfile map, and dated one-time migrations that run as a final bootstrap hook
  • mise.macos.toml & mise.linux.toml: OS-specific packages, dotfiles, and user settings, loaded automatically on the matching platform
  • mise.work.toml: work-specific dotfiles, loaded when the work profile is active
  • mise.work.local.toml (gitignored): per-machine [vars] for the work profile, consumed by templates

The profile chosen at bootstrap persists beyond the first run: ~/.config/mise/miserc.toml is itself a managed dotfile (src/config/mise/miserc.toml) that records the active config environments, so later mise invocations keep the same profile without setting any environment variables.

Dotfiles

Dotfile sources live under src, mirroring the layout of the home directory. The default mode is template: each source renders through the mise template engine, so one file can produce different output per profile — for example, templates/AGENTS.md includes work-specific sections only when the work profile is active, and src/config/mise/config.work.toml fills in values from mise.work.local.toml. Fully managed directories use copy mode instead.

Everything converges through mise bootstrap: it installs OS packages, clones necessary repos, applies dotfiles, sets the login shell, and installs mise-managed tools, skipping whatever is already in the desired state. Useful commands:

mise bootstrap
mise bootstrap status
mise bootstrap repos status
mise bootstrap repos update
mise bootstrap dotfiles status
mise bootstrap dotfiles apply

Tools and tasks

Daily tools and routines live in the rendered global config, src/config/mise/config.toml, with work additions in src/config/mise/config.work.toml.

The mise run update task keeps a machine current: it pulls the declared repos, reruns mise bootstrap, and upgrades system packages, mise itself, managed tools, and AI agents and their skills.

About

My personal dotfiles and development environment for macOS and Linux, managed by mise.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages