My development environment for Windows 11, WSL2 (Ubuntu), and macOS, managed with mise. Windows hosts desktop apps; WSL2 and macOS share shell configuration and command-line tools.
Choose the platform to configure. The Windows installer also handles WSL2.
Set up Windows without a Microsoft account to avoid automatically installing
OneDrive. During initial setup, stay disconnected from the internet, press
Shift + F10, and run:
start ms-cxh:localonlyContinue with I don't have internet. Update Windows to the latest version and uninstall OneDrive if present, then run in Windows Terminal:
powershell -c "irm dot.risunosu.com/win | iex"This also sets up WSL2 with the personal profile. After installation, restore
PowerToys settings
from the backup in win/.
Remove unnecessary pre-installed software and install these apps separately:
For an existing or reset WSL2 environment, run in Bash:
bash -i <(curl -fsSL https://dot.risunosu.com/wsl)The WSL2 and macOS commands use process substitution (<()) so the script
comes from a file descriptor while standard input stays available for
interactive prompts. Piping into Bash would use standard input for the script.
Run in a terminal:
bash <(curl -fsSL https://dot.risunosu.com/mac)Accept the Xcode Command Line Tools installation dialog if prompted. The installer sets up mise, desktop apps, system preferences, and shared dotfiles. Homebrew itself is not required. Log out and back in for keyboard, mouse, and scrolling preferences to take effect.
macOS keeps zsh as the login shell. A managed block in ~/.zshrc loads the
shared configuration while preserving machine-local lines.
The WSL2 and macOS commands above install the shared configuration. Add
?profile=personal to include my Git identity and commit signing, SSH hosts,
personal repositories, and extra tools:
bash -i <(curl -fsSL "https://dot.risunosu.com/wsl?profile=personal")
bash <(curl -fsSL "https://dot.risunosu.com/mac?profile=personal")The profile is saved in ~/.config/mise/miserc.toml for later runs. To return
to the shared profile, remove its env line and rerun the installer. Existing
personal-profile links may remain.
Rerun the installer to update and reapply the configuration. On WSL2 and macOS,
the checkout lives at ~/.ghr/github.com/risu729/dotfiles.
Add ?ref=<branch-tag-or-commit> to an installer URL to select a revision, or
combine it with a profile:
bash <(curl -fsSL "https://dot.risunosu.com/mac?profile=personal&ref=main")An explicit ref leaves the Unix checkout detached at that revision. A later run
without ref returns to the default branch and updates it. Commit or stash
local changes before switching revisions.
When running the Unix installer directly from a clone, use DOTFILES_PROFILE
and DOTFILES_REF for the same options:
DOTFILES_PROFILE=personal DOTFILES_REF=main bash unix/install.shShared packages and dotfile mappings are in mise.toml, with
platform overrides in mise.linux.toml and
mise.macos.toml. Personal additions are in
mise.personal.toml. Edit these when adapting the setup
for your own machines.
On macOS, machine-local Claude Code credentials can go in
/Library/Application Support/ClaudeCode/managed-settings.d/*.json; the
installer manages ~/.claude/settings.json.
For the personal WSL Cloudflare Tunnel, place the remotely managed tunnel token
at ~/.config/cloudflared/tunnel-token. The systemd user service connects once
the token is present.
The personal profile includes glab. To authenticate with UNSW CSE GitLab:
glab auth login --hostname gitlab.cse.unsw.edu.au --git-protocol httpsSee AGENTS.md for development and maintenance notes.