fix(noctalia): migrate matic/viper config to v5 - #1977
Conversation
noctalia-shell v5 is a C++/Qt rewrite of the v4 Quickshell line. The input was already bumped to v5 in 5852fad but the config was never migrated, breaking matic/viper eval: the programs.noctalia-shell option no longer exists. Migrate to the v5 module: - programs.noctalia-shell -> programs.noctalia - binary noctalia-shell -> noctalia; lock-before-sleep IPC changes from 'ipc call lockScreen lock' to 'msg session lock' - rewrite settings from v4 JSON to v5 TOML, keeping only keys verified against the v5 schema so build-time 'noctalia config validate' passes Upstream does not migrate v4 settings (fresh install, sane defaults), so v4-only customizations (bar layout, Dracula palette, dark-mode dconf hook, idle timeouts) are dropped and must be re-applied on-device via the settings UI.
|
📝 WalkthroughWalkthroughThis PR migrates Noctalia configuration from v4 ( ChangesNoctalia v5 migration
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant SleepHook as lock-before-sleep.sh
participant Noctalia as noctalia binary
SleepHook->>Noctalia: msg session lock
Noctalia-->>SleepHook: lock success/failure
SleepHook->>SleepHook: allow sleep to proceed
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request updates the Noctalia configuration to support version 5, which includes renaming the program option to programs.noctalia, updating settings to the new schema, and adapting the lock script to use the new IPC command structure. The review feedback highlights that these changes will break existing tests in spec/noctalia_lock_before_sleep_spec.sh and spec/noctalia_bar_spec.sh, which need to be updated or removed to prevent CI failures.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
- lock-before-sleep spec: expect @Noctalia@ placeholder and 'msg session lock' (v5 IPC) instead of @noctalia_shell@ / 'ipc call lockScreen lock' - remove noctalia_bar_spec.sh: the v4 bar widget settings it asserted have no v5 equivalent and were dropped from config/noctalia/default.nix Flagged by gemini-code-assist on #1977.
Expect @Noctalia@ placeholder and 'msg session lock' instead of @noctalia_shell@ / 'ipc call lockScreen lock'. Split from the prior commit where a failed git-add left this file unstaged.
There was a problem hiding this comment.
4 issues found and verified against the latest diff
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Addressed gemini-code-assist feedback
Scope note: runtime IPC refs deferredThis PR migrates the
Tracked as an on-device follow-up. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@config/noctalia/lock-before-sleep.sh`:
- Around line 5-9: The Hyprland lock actions still reference the old
noctalia-shell IPC command, so update the lock keybind and lid switch bindings
to use the v5 session lock command instead. Locate the existing lock invocation
in the Hyprland config that currently calls the old lockScreen path, and replace
it with the same `noctalia msg session lock` command used by
`lock-before-sleep.sh` so all lock triggers stay consistent.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 07d9c9c5-8191-4dc1-a033-b1d99b812ba6
📒 Files selected for processing (3)
config/noctalia/default.nixconfig/noctalia/lock-before-sleep.shflake.nix
The v5 bump renamed the binary noctalia-shell -> noctalia and replaced
the 'ipc call <target> <method>' surface with 'noctalia msg <command>'.
Hyprland exec-once and keybinds plus the fish caf function still used the
v4 forms, so on v5 the shell would not launch and lock/launcher/panel
keybinds were no-ops. Verified each command against the v5 source:
- exec-once = noctalia-shell -> noctalia (config/hyprland/default.nix)
- lockScreen lock -> msg session lock (L key + lid bind)
- launcher toggle -> msg panel-toggle launcher
- launcher emoji -> msg panel-toggle launcher /emo
- launcher clipboard -> msg panel-toggle clipboard
- sessionMenu toggle -> msg panel-toggle session
- network togglePanel -> msg panel-toggle control-center network
- notifications toggleHistory -> msg panel-toggle control-center notifications
- caf: noctalia-shell msg idleInhibitor -> noctalia msg caffeine-{enable,disable}
Also corrects the flake.nix comment: renovate is not configured to gate
this input (the packageRule was dropped), so bumps can auto-merge; the
comment now says to treat bumps as breaking and rebuild on-device.
Addresses cubic-dev-ai P1 and indent-zero feedback on #1977.
Update: runtime IPC migration completed in-PR (ae4816f)My earlier "deferred to a follow-up" note is now superseded. After finding the v5 command surface in the upstream source (
Still needs an on-device |
There was a problem hiding this comment.
1 issue found across 6 files (changes from recent commits).
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
The old stub was a function, but command -q only resolves executables, so the noctalia call path was never exercised. Provide a real fake noctalia on PATH that records its args and assert 'msg caffeine-enable' / 'msg caffeine-disable', so a typo or future IPC rename fails the test. Addresses cubic-dev-ai P3 on #1977.
Problem
maticandviperNixOS eval fails:Commit 5852fad (Renovate #1974) bumped the
noctalia-shellflake input to6e7aa3bbut only changed the digest - it did not migrate the config.6e7aa3bis noctalia v5, a ground-up C++/Qt rewrite of the v4 Quickshell line, which renamed the home-manager option and restructured the entire config, so the existingprograms.noctalia-shellconfig no longer evaluates.What changed in v5 (upstream)
programs.noctalia-shellprograms.noctalianoctalia-shellnoctaliasettings.json(camelCase JSON)config.toml(snake_case TOML)ipc call lockScreen lockmsg session lockcolorschemes/*.jsonpalettes/*.json(new format)noctalia-qsUpstream is explicit: v5 is a fresh install and v4 settings are not migrated - "ships with sane defaults, customize from there."
This PR
programs.noctalia-shell->programs.noctalianoctalia-shell->noctalia;lock-before-sleep.shIPCipc call lockScreen lock->msg session locksettingsfrom v4 JSON to v5 TOML, keeping only keys verified against the v5 schema (src/config/schema/config_schema.cpp) so the build-timenoctalia config validatepasses:shell.font_family,shell.clipboard_enabled,shell.clipboard_auto_paste,location.auto_locate,wallpaper.enabledflake.lockandrenovate.jsonunchangedDropped - must be re-applied on-device via the settings UI
These v4 customizations have no mechanical v5 equivalent (changed semantics) and can't be validated on darwin CI:
Verification
nix evalofmatic:programs.noctalia.package.name=noctalia-5.0.0; the generatednoctalia/config.tomlresolves to a valid derivation (settings typecheck,validateConfigwired).noctalia config validaterun on the Linux host. Verify onmatic/viperwithmake build HOST=maticthen re-apply the dropped customizations in the settings UI.Summary by cubic
Migrates
maticandvipertonoctaliav5 and updates Hyprland/fish to the newmsgAPI so the shell starts and keybinds work again. Fixes NixOS eval failures and restores locking, launcher, and panel actions.Bug Fixes
programs.noctalia-shelltoprograms.noctaliaand now use thenoctaliapackage.noctalia msg session lock(wasipc call lockScreen lock), binary path fromnoctalia-shelltonoctalia, and script placeholder to@noctalia@.exec-once = noctalia, and keybinds to v5msgcommands (session lock,panel-togglelauncher/clipboard/session/control-center network/notifications)._caf_functiontonoctalia msg caffeine-{enable,disable}(wasidleInhibitor {enable,disable}) and added tests that assert these exact subcommands.shell.font_family,shell.clipboard_enabled,shell.clipboard_auto_paste,location.auto_locate,wallpaper.enabled.Migration
noctalia-shellinput bumps as breaking; rebuild on-device before merging. Verify on Linux hosts withmake build HOST=matic(orviper); build runsnoctalia config validate.Written for commit 79304b6. Summary will update on new commits.