Problem
Currently using system-wide Python 3.12, Rust, and Node.js versions. While uv handles Python package management well, we can't:
- Run different Python versions per project (e.g., legacy 3.10 project + modern 3.12 project)
- Test against multiple Node.js versions
- Quickly switch Rust toolchains
- Match production environments exactly
Impact
- "Works on my machine" problems
- Can't maintain legacy projects alongside modern ones
- No per-project
.tool-versions file for team consistency
- Manual NixOS rebuilds just to change language versions
Action Plan
Priority: MEDIUM - Quality of life improvement
1. Add mise (formerly rtx) to configuration.nix
users.users.cbertrand.packages = with pkgs; [
mise # Fast Rust-based, replaces asdf
];
2. Enable mise in bashrc
# In sources/bashrc.sh
eval "$(mise activate bash)"
3. Configure mise for auto-installation
# ~/.config/mise/config.toml
[tools]
python = "3.12"
node = "22"
rust = "1.75"
[settings]
experimental = true
4. Per-project versions using .mise.toml
[tools]
python = "3.10.12" # Legacy project
node = "20.11.0"
5. Keep NixOS packages as fallback
mise can reference system versions
Why mise over asdf
- 24x faster (Rust vs bash)
- Built-in Python/Node support (no plugins needed)
- Replaces direnv for environment variables
- ~5ms overhead vs ~120ms for asdf
Sources
Problem
Currently using system-wide Python 3.12, Rust, and Node.js versions. While
uvhandles Python package management well, we can't:Impact
.tool-versionsfile for team consistencyAction Plan
Priority: MEDIUM - Quality of life improvement
1. Add
mise(formerly rtx) to configuration.nix2. Enable mise in bashrc
3. Configure mise for auto-installation
4. Per-project versions using
.mise.toml5. Keep NixOS packages as fallback
mise can reference system versions
Why mise over asdf
Sources