# Mise Configuration Personal [mise](https://mise.jdx.dev/) setup — a polyglot runtime version manager (successor to `asdf`, faster, written in Rust). Manages Go, Node, Rust, Python versions per-directory, plus tasks and environment variables. Config file (Arch): `~/.config/mise/config.toml` > [!warning] Raw notes > These are living, personal config notes — raw, frequently out-of-date, and sometimes half-baked. They reflect my setup at some point in time, not a maintained tutorial. Verify against upstream docs before copying. Reach out if something looks broken. > [!info] What is mise? > `mise` (formerly `rtx`) is a runtime version manager that replaces `asdf`, `nvm`, `pyenv`, `rbenv`, and similar tools with a single binary. It reads `.mise.toml` (or `.tool-versions`) files to pin tool versions per-directory and activates them automatically when you `cd` into a project. Global config lives at `~/.config/mise/config.toml`. ## Key Settings | Setting | Value | Why | |---------|-------|-----| | Go | `latest` | Always on current stable release | | Node | `25.8.0` | Pinned — avoids surprise major bumps | | Rust | `latest` | Stable channel, latest | | Python | `latest` | General scripting | | `auto_install` | `true` | Installs missing tools automatically on `cd` | ## Config File (Arch Linux) The global config at `~/.config/mise/config.toml`: ```toml [tools] go = "latest" node = "25.8.0" rust = "latest" python = "latest" [settings] auto_install = true ``` ### Why these versions? - **Go `latest`**: Go has a strong compatibility guarantee and a predictable release cadence. Staying on latest means getting performance improvements and new stdlib features without breakage risk. - **Node `25.8.0` (pinned)**: Node major versions can ship breaking changes in tooling (npm, corepack). Pinning avoids surprise upgrades mid-project; update deliberately. - **Rust `latest`**: The stable channel is conservative — `latest` here means current stable, not nightly. - **`auto_install = true`**: When you `cd` into a directory with a `.mise.toml` that pins a version you don't have, mise installs it automatically. No manual `mise install` needed. > [!tip] Per-project overrides > Create a `.mise.toml` at the project root to pin a different version for that project only: > ```toml > [tools] > go = "1.22.4" > node = "20.11.0" > ``` > mise activates the nearest `.mise.toml` walking up the directory tree. ## Common Commands | Command | Description | |---------|-------------| | `mise list` | Show all installed tool versions | | `mise current` | Show active versions in current directory | | `mise install` | Install all tools defined in current `.mise.toml` | | `mise use [email protected]` | Pin a version in the current directory's config | | `mise use -g go@latest` | Update global config | | `mise upgrade` | Upgrade all `latest`-pinned tools | | `mise exec -- <cmd>` | Run a command with mise tools in PATH | | `mise env` | Print shell exports for current tools | | `mise tasks` | List available tasks (if configured) | ## Shell Integration mise hooks into the shell via `eval "$(mise activate zsh)"` in `.zshrc`. This: - Prepends mise shims to `$PATH` - Activates the correct tool version on every `cd` - Makes `mise exec` transparent — `go`, `node`, `python` etc. resolve to the right version automatically > [!note] macOS setup > On macOS, mise is installed via Homebrew (`brew install mise`). The Arch config above (`platform/arch`) is the canonical source; macOS may use a separate profile or rely on Homebrew's own tool management for some tools. Check `mise current` to see what's active. ## Notes The global config lives only in the Arch Linux dotfiles profile (`configuration/platform/arch/`). No macOS-specific mise config exists in the dotfiles — macOS may rely on Homebrew or a separate local config not tracked here. ## Links - [mise docs](https://mise.jdx.dev/) - [mise GitHub](https://github.com/jdx/mise) - [.mise.toml reference](https://mise.jdx.dev/configuration.html) - [mise tasks](https://mise.jdx.dev/tasks/)