chore: split bootstrap config into mise conf.d fragments - #4069
Draft
risu729 wants to merge 1 commit into
Draft
Conversation
Reviewer's GuideThis PR reduces mise.toml from 225 to 81 lines by relocating bootstrap hooks and declarative bootstrap data into tracked .config/mise/conf.d fragments, while deliberately retaining sections that control dotfile source resolution, Renovate discovery, and lockfile placement. The installer now trusts all repository-local mise configs, and verification confirms fragment loading and bootstrap behavior remain intact. Sequence diagram for trusting mise configuration fragmentssequenceDiagram
participant Installer as wsl/install.sh
participant Mise as mise
participant Configs as Repository mise configs
Installer->>Mise: --cd dotfiles_dir trust --yes --all
Mise->>Configs: Load mise.toml and .config/mise/conf.d/*.toml
Mise-->>Installer: All local configs trusted
Installer->>Mise: --cd dotfiles_dir bootstrap --yes --update --force-dotfiles --locked --skip-dirty
Mise->>Configs: Read bootstrap hooks and declarative bootstrap data
Mise-->>Installer: Bootstrap completed
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
risu729
force-pushed
the
chore/delegate-repo-update-to-mise
branch
from
August 27, 2026 21:06
ace9c8e to
fa4d3f5
Compare
risu729
force-pushed
the
chore/split-mise-config-into-fragments
branch
from
August 27, 2026 21:06
fc8614d to
f9c7496
Compare
risu729
force-pushed
the
chore/split-mise-config-into-fragments
branch
from
August 27, 2026 21:13
f9c7496 to
1d1e5f2
Compare
Move the [bootstrap.*] sections out of mise.toml into .config/mise/conf.d/, separating the imperative shell hooks from the declarative package/repo/user lists. mise.toml drops from 225 to 81 lines and now holds only vars, tools, settings, deps, task_config, dotfiles, and hooks. [dotfiles] stays in mise.toml because dotfile sources resolve against the directory of the config file that declares them, so moving it would break every wsl/home/... source path. Trust is per config file, so the installer now trusts the whole config set with 'mise trust --all' instead of just mise.toml.
risu729
force-pushed
the
chore/split-mise-config-into-fragments
branch
from
August 27, 2026 21:55
1d1e5f2 to
1a2787d
Compare
risu729
marked this pull request as draft
August 27, 2026 23:22
This was referenced Sep 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Splits the 225-line
mise.tomlusing mise'sconf.dfragments (2026.8.13).Was stacked on #4068 (now merged); rebased onto
mainand retargeted.Layout
mise.tomlmin_version,[vars],[tools],[settings],[deps],[task_config],[dotfiles],[hooks].config/mise/conf.d/bootstrap-hooks.toml[bootstrap.hooks.*]shell blocks.config/mise/conf.d/bootstrap.toml[bootstrap.linux.systemd.units],packages,repos,userThis separates the imperative shell from the declarative lists, and keeps the file you edit to bump a tool version short.
Three constraints that shaped this
[dotfiles]had to stay inmise.toml. Dotfile sources resolve against the directory of the config file that declares them (src/system/files.rs:289, and the module docs: "resolved relative to the config file that declares them"). Moving the section would have silently repointed all 14wsl/home/...sources at.config/mise/conf.d/.The path must be
.config/mise/conf.d/, notmise/conf.d/. mise accepts both, but Renovate's mise manager only matches the former:Nothing moved here carries a Renovate-managed version today (the
apt:pins are alllatest), but this keeps the door open.[vars]stayed put, so thePSScriptAnalyzerjsonata manager, which is anchored to/^mise\.toml$/, is unaffected..gitignoreneeded a negation. The global ignore this repo ships (wsl/home/.config/git/ignore:726) has a*.drule that excludesconf.d/. Since git cannot re-include a file under an excluded directory,!/.config/mise/conf.d/is added to the repo.gitignore, which takes precedence overcore.excludesFile.Note
The constraint in point 1 is a mise inconsistency: relative
sourcepaths in[dotfiles]/[bootstrap.files]resolve against the declaring config file's directory, whiletask_config.includesresolves againstconfig_root()— so these sections silently break insideconf.dfragments even though mise knows the fragment's project root. Tracked as a draft item (with a minimal repro) in the mise project: https://github.com/users/risu729/projects/3/views/1?pane=issue&itemId=236320437Also
Trust is per config file, so
wsl/install.shnow runsmise trust --yes --allscoped with--cdinstead of trustingmise.tomlalone.Note on
[tools][tools]deliberately stayed inmise.toml. Lockfiles are placed beside their config, and conf.d entries share the parent's lockfile (src/lockfile.rs:1470-1495), so moving[tools]would relocate the 27KBmise.lockto.config/mise/mise.lockand put it out of reach of Renovate'slockFileNames = ['mise.lock'].Verification
mise run check --lintpasses (31 steps).mise config lsshows both fragments loaded.mise bootstrap repos/packages/user statusandlinux systemd-units statusall read the moved content correctly;bootstrap --dry-runstill registers the hooks.mise bootstrap dotfiles statusconfirms all 14 sources still resolve.shellcheckandshfmtpass onwsl/install.sh.Summary by Sourcery
Split the mise bootstrap configuration into conf.d fragments while preserving existing bootstrap behavior and tooling integrations.
Enhancements:
Chores: