Replies: 2 comments 9 replies
|
I know this as an Omarchy focused post, but all of your suggested additions to mise would be 100% applicable to my CachyOS bootstrap too. I'm currently fully using mise bootstrap to one-touch setup all my machines atm via my dotfiles repo, which contains both arch and macOS mise configs. The absent state and AUR backend would be especially helpful as those are both gaps I've had to work around in my current dots. Definitely looking forward to those |
|
I've opened a focused follow-up on dotfiles: automatic history, easy restore, and optional sync for Omarchy. It builds on the Dots plan and my introduction to mise's dotfile history, with a concrete first step: save personal config edits automatically and let users inspect and restore them from Omarchy's config menu. It also separates what mise already does from the remaining integration and sharing decisions. That part can move independently of the broader packages/services proposal here. Please bring dotfiles-specific feedback to the new discussion. AI-assisted — Tool: Codex; model: OpenAI/GPT-6; version: unavailable. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Omarchy already ships mise, and as of the lazy-tools change it declares its default agent CLIs (Claude Code, Codex, gh, opencode, and the rest) as lazy tools in a system-level mise config at
/etc/mise/config.toml. That file is already a small "Omarchy layer": it says what the distro wants on the machine, and a user's own~/.config/mise/config.tomllayers on top of it, so pinningclaudeto a version in the global config already overrides Omarchy'slatest.mise has a second half that Omarchy is not using yet:
mise bootstrap, which converges a machine to a declared state. Packages, system files, systemd services, firewall rules, dotfiles, and the tools it already handles. It uses the same config files and the same layering. I maintain mise, and I am willing to make broad changes to bootstrap to fit Omarchy. This post is about what extending that existing layer would give Omarchy users that they do not have today.The user problem
Omarchy makes a fresh machine beautiful in twenty minutes. Then people spend the next month making it theirs:
pacman -Sa dozen things, remove the preinstalls they never open, flip a service, tweak a Hyprland file, install their language toolchains. None of that is recorded anywhere. When they get a second machine, reinstall after a bad experiment, or move from the laptop to a desktop, they do it all again from memory.The current answer is "keep notes" or "write a shell script". Neither is Omarchy-grade.
This is opt-in
Nothing here is required to set up or use an Omarchy machine. The installer,
omarchy update, and every existing command keep working exactly as they do for someone who never touches a mise config. Bootstrap is one way to make a setup trackable and shareable for the people who want that. Users who prefer topacman -Sthings by hand lose nothing.What it would look like
The user's global mise config,
~/.config/mise/config.toml, becomes the one file that describes their machine.~/.config/miseis a git checkout, so that file and the dotfiles next to it live in a repo. Roughly:On a fresh Omarchy machine:
which checks the repo out as
~/.config/miseand runsmise bootstrap. Ten minutes later it is their machine. From then onomarchy updateruns plainmise bootstrap, so declared packages and files stay applied over time. There is no separate dotfiles repo path for Omarchy to remember, because the global config is the repo.What users get that they do not have today
Their setup gets recorded without them doing anything new. Because the repo is the global config, every
mise use -g nodea user already runs today lands in the repo. Omarchy's own dev-env installer writes there too. Addomarchy pkg adddelegating tomise bootstrap packages use -g pacman:...and installing a package records it as well. The declared file stays true because the tools people already use write to it.Reinstall stops being scary. A fresh Omarchy install plus one command gets someone back to their exact setup. That makes people far more willing to try things, wipe, and start over, which is the mindset Omarchy wants to encourage.
Many machines, one source of truth. Laptop and desktop share the repo. mise environments (
-E work,-E home) handle the differences from one config.Customizing Omarchy by declaring, not by fighting it. Today the only Omarchy default a user can override declaratively is a tool version. Removing a preinstall or disabling a default service is a manual action Omarchy might undo on the next refresh, and the preinstalls toggle works by deleting and reinstalling the whole system mise file. With bootstrap, the same override mechanism that already works for tools covers packages, services, and files. I verified this week that a user config overriding a system-level declaration works today: the plan showed the union of both, the user's entries won on shared keys, and each line named the config that declared it.
A machine that can tell you what changed.
mise bootstrap planandmise bootstrap status --missingare a drift report. "Why is my machine different from my other one" has an answer.Shareable setups. "Omarchy, but set up for Rails work" or "Omarchy for a Framework 13 in a design shop" becomes a repo someone can fork. That is a community surface Omarchy does not have.
Fleets, later. The same config applies to other machines with
mise bootstrap remote, which stages the project over plain OpenSSH and runs bootstrap there. Hosts live in an inventory with tags, and-Eenvironments give a host its profile, so this is the Ansible shape without Python on the target. Nobody needs this to set up one laptop. It matters when a team, a classroom, or a company wants ten Omarchy machines to match one repo, and it means Omarchy would not have to build its own fleet story when that comes up.Agents can edit TOML safely. Omarchy's pitch is Beautiful, Fun and Agentic. An agent adding a package by editing one declared file and running
planis a much safer loop than an agent runningsudo pacman -S. The desired state is reviewable in a diff before anything happens, and it is already in git.What Omarchy itself gets
This is secondary, but real. A good share of
install/config/and of the migrations are hand-written versions of "ensure this service is enabled", "ensure this file is in/etcwith these permissions", "ensure this package is present". Those become[bootstrap.*]sections next to the[tools]table Omarchy already ships in/etc/mise/config.toml(or a sibling file in/etc/mise/conf.d/), converged on every update, with no marker files and no bespoke idempotency logic per script. The user's global config layers on top of that system file, which is exactly why the user story above works and why the tool-version override works already.What does not work yet, and what I will build
I want to be straight about the gaps, because they are mine to fix.
state = "absent"for a pacman package does not exist. It is the most common customization after "add these", so it is first.mise bootstrap --from <url>exists but clones to a side directory. It should be able to make the checkout~/.config/miseitself, with sane handling of an existing config there.On the Omarchy side the main thing to sort out is
omarchy-refresh-config, which copies onto the target and would write through a symlink into a user's repo. That is a small change once the model is agreed.Proposed order
[bootstrap.services]and[bootstrap.files]declarations beside the existing lazy[tools]in Omarchy's system mise config, and apply them fromomarchy updateandomarchy-migrate. No user-facing surface yet. This proves the model on the file that already exists.omarchy setup dotfiles, runmise bootstrapfromomarchy update, and pointomarchy pkg addat the declared config. Small once step 1 exists.I am happy to do the mise work and to help with the Omarchy side. Interested in whether this direction appeals before writing any code.
All reactions