Install Tool
Use mise first for user-scoped development tools. Use Arch packages for software that needs system integration.
Workflow
- Identify the requested tool, version constraint, expected executable, and whether it needs root-owned files, services, drivers, desktop integration, or another system-level feature.
- Check whether the request is already satisfied with
command -v <command>,mise ls --installed, andpacman -Q <package>as applicable. Do not reinstall a suitable existing version. - Discover viable sources before choosing:
- Resolve mise shorthand with
mise registry <tool>. - Consider explicit mise backends such as
aqua:owner/repo,github:owner/repo,npm:package, andcargo:crate. - Check official Arch repositories and the AUR when mise is unsuitable.
- Resolve mise shorthand with
- Decide whether the installation should persist through dotfiles:
- The global mise config at
~/.config/mise/config.tomlis stowed from~/.config/dotfiles/mise/.config/mise/config.toml. Confirm that ownership before changing it, and edit the stowed source rather than creating an unmanaged live config. - Arch packages needed on every public machine belong in
~/.config/dotfiles/.dot-public-packages. - Private or machine-specific required packages may belong in the optional
~/.config/dotfiles-private/.dot-private-packagesoverlay. Do not copy its contents into public files or output. dot initinstalls the stowed mise tools, then the public and available private package lists. Prefer this managed flow over a one-off package command when the tool should remain managed.
- The global mise config at
- When multiple viable sources exist, use the question tool to show the concrete choices and recommend one. Recommend mise by default. Recommend an Arch package for desktop applications, system services, drivers, and tools that genuinely need system integration.
- Install from the selected source:
- Managed mise: update the stowed global mise source, then run
mise installor the appropriatedotflow.mise use --global <tool>@latestis valid when the global config resolves to that stowed source. - Unmanaged mise:
mise use --global <tool>@latest, or use the requested version constraint. Omitting a version also defaults tolatest. - Managed Arch package: add it to the correct public or private required
package list, then use
dot initto install it. - Official Arch repository: load
pkexec-root, then runpkexec pacman -S --needed <package>. - AUR: load
pkexec-root, then runyay -S --needed <package> --sudo pkexec --sudoflags "".
- Managed mise: update the stowed global mise source, then run
- Verify both ownership and usability with
mise ls,pacman -Q <package>,command -v <command>, and the tool's version command as applicable. Runmise reshimonly when a command installed outside mise's normal tool installation is missing from the shims.
Source Rules
- Prefer mise registry shorthand for CLIs, development tools, runtimes, and language package managers. The registry selects its configured backend.
- If the registry has no shorthand, prefer a suitable explicit mise backend before pacman or yay for user-scoped development tooling.
- Do not treat a successful one-off install as complete when the tool belongs in the stowed mise config or a required package list. Persist it through the owning dotfiles source and verify that source changed.
- Keep the global
minimum_release_agesetting unchanged. For an intentional trusted or high-velocity exception, usemise use --global --minimum-release-age <duration> <tool>@latestor a per-tool table in the global mise config. - Load and follow
pkexec-rootbefore every privileged package operation, including package conflict removal. - If the selected AUR package is
mise-binand officialmiseis installed, confirm the conflict, remove it withpkexec pacman -Rdd mise, then installmise-binthrough yay. Do not apply this conflict rule to other packages. - Record the selected source, backend or package name, and version constraint in any config or documentation included in the installation request.
Examples
# Registry-backed CLI
mise use --global ripgrep@latest
# Explicit language-package backend
mise use --global npm:typescript@latest
# System-integrated package from the AUR, after loading pkexec-root
yay -S --needed <package> --sudo pkexec --sudoflags ""
# Replace the conflicting official mise package with mise-bin
pkexec pacman -Rdd mise
yay -S --needed mise-bin --sudo pkexec --sudoflags ""