Skip to content

Switching from rc back to stable (4.5.0-rc1 → 4.0.6) breaks saved workspace layouts and mise tool shims #16282

Open

Description

@mhmodmonim

What happened

I switched to the rc channel with omarchy channel set rc, which installed 4.5.0-rc1. A few hours later I switched back with omarchy channel set stable, which downgraded to 4.0.6. The rc's migrations had changed user state in ways 4.0.6 can't use, and nothing undoes those changes, which broke two things.

1. Saved workspace layouts break the Hyprland config

With 4.5.0-rc1, omarchy-hyprland-workspace-layout-toggle (Super+L) saves layouts as:

o.workspace_mode({ workspace = "1", mode = "scrolling" })

4.0.6 loads the same directory (default/hypr/workspace-layouts.lua) but doesn't define o.workspace_mode. So after switching back, Hyprland shows the "Your config has errors" overlay, with one line per saved layout:

require("omarchy.workspace-layouts.1"): ~/.local/state/omarchy/workspace-layouts/1.lua:1: attempt to call a nil value (field 'workspace_mode')

2. Agent CLIs and dev tools stop working (mise "No version is set for shim")

4.5.0-rc1 ships /etc/mise/conf.d/omarchy-tools.toml, which declares codex, gh, node and other tools. Its migration removes those tools from ~/.config/mise/config.toml and deletes their ~/.local/bin wrappers. Switching back to stable removes /etc/mise/conf.d/omarchy-tools.toml but restores neither the user config entries nor the wrappers. The tools stay installed, but every shim fails:

$ codex
mise ERROR No version is set for shim: codex
Set a global default version with one of the following:
mise use -g codex@0.155.1
...

The same happened for gh, node, and k6, which I had added to my global mise config myself.

Expected

Switching back from rc to stable leaves a working system, for example:

  • 4.0.6 skips saved layout files it can't load, or the layout format stays readable by both versions.
  • The tool declarations or wrappers that the rc migration removed are restored, or the user config is left alone.

Steps to reproduce

  1. On 4.0.6, have codex or gh set up through mise, and toggle a workspace layout with Super+L.
  2. Run omarchy channel set rc (installs 4.5.0-rc1), then toggle a layout again.
  3. Run omarchy channel set stable (downgrades to 4.0.6).
  4. Reload Hyprland: the error overlay appears. Run codex or gh: the mise shim error appears.

Workaround

  • Rewrite each ~/.local/state/omarchy/workspace-layouts/N.lua as hl.workspace_rule({ workspace = "N", layout = "<mode>" }), or delete the files.
  • Add the tools back with mise use -g codex@latest gh@latest node@latest.

System

  • Omarchy 4.0.6-1 (stable, after 4.5.0rc1-1 on the rc channel)
  • mise 2026.10.17
  • Hyprland 0.56.2
  • Kernel 7.2.8-9-omarchy

Possibly related: #15876 (leave the user's mise config alone), #16204 (Kimi wrapper the lazy-shim migration missed).

Activity

  1. omarchybot commented on Oct 23, 2026

    @omarchybot
    Collaborator

    I reproduced both failures on a disposable Omarchy VM. It was running current quattro (967bbdd), so every 4.5 migration had already run. I saved a layout with the toggle, which wrote o.workspace_mode({ workspace = "1", mode = "scrolling" }). Then omarchy-channel-set stable installed omarchy and omarchy-settings 4.0.6-1 and removed /etc/mise/conf.d/omarchy-tools.toml.

    Layouts. Checked with Hyprland --verify-config against 4.0.6's config, it fails with exactly your error: workspace-layouts/1.lua:1: attempt to call a nil value (field 'workspace_mode'). Rewriting the same file in the old hl.workspace_rule(...) form makes it pass with config ok. The cause is migration 1791698594 (new in 4.5.0-rc1). It rewrites every saved layout to o.workspace_mode, and the new toggle writes that form too. The function only exists in 4.5's default/hypr/workspace-modes.lua, and 4.0.6's default/hypr/workspace-layouts.lua loads the saved files without it. The loader stops at the first file that fails, so the layouts after it don't load either.

    mise tools. After the switch, codex and node print No version is set for shim, and gh prints gh is not a valid shim. Migration 1791382872 deletes the stock ~/.local/bin wrappers and runs mise unuse -g --no-prune for each default tool's @latest entry, and 1792343099 does the same for node@latest. Both rely on omarchy-tools.toml declaring those tools instead. Going back to 4.0.6 removes that file. The migrations are already marked as run, and 4.0.6's update only runs mise up, so nothing puts the declarations or wrappers back. Your workaround (mise use -g codex@latest gh@latest node@latest) is the right repair for now.

    k6. Neither I nor the second opinion could explain k6 from the source. No 4.5 migration touches it, and the cleanup only removes the default tools' @latest entries. If it is still broken after the workaround, mise ls --global and mise doctor output would show where its entry went.

    More of the same. The second opinion found four other 4.5-only migrations that should break a return to 4.0.6 in the same way. I checked that each one is in 4.5.0-rc1 and not in 4.0.6, but I did not reproduce them:

    • 1791969355 splits the bar's center section, which 4.0.6's bar does not know.
    • 1788129995 removes Tensaku, which 4.0.6's screenshot editor still launches.
    • 1792343225 drops the user's upgrade.auto_prune = false, which 4.0.6's mise config does not set.
    • 1790528634 renames the Elsewhen plugin to an ID that 4.0.6 does not ship.

    Nothing in omarchy-channel-set or the docs promises or warns about going from rc back to stable. A fix needs one of these:

    • a 4.0.x point release that tolerates the newer formats,
    • 4.5 writing state that 4.0.x can still read,
    • a warning before the switch.

    Choosing among them is a decision for the maintainer, so I have not opened a pull request. This is labelled bug and is waiting on the maintainer.

    Checked by Claude Opus 5.5, with second opinions from Codex Medium and muse-spark-1.3-contributor via pi, thinking high. Both agreed with both causes. Independence is not guaranteed, but the four extra migrations came from Codex.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions