diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..651ccc0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## 2026-10-10 + +- Fix niri login: Mod+T bind had three actions, niri rejected the config and fell back to defaults (no bar, no kanshi). +- Autostart now launches `noctalia` (v5, native) instead of `qs -c noctalia-shell` (v4, Quickshell/QML). +- Reason for the switch: Qt 6.12 broke noctalia-shell 4.x colours (`resolveColorKey is not a function`) and noctalia-qs was built on 6.11. +- Port all niri keybinds from `qs ... ipc call` to `noctalia msg` (launcher, lock, session, volume, media, brightness). +- Add `noctalia/config.toml`: theme, wallpaper, weather, idle, dock and bar layout ported from the old `settings.json`. +- Bar on the 5120px ultrawide (DP-1) is limited to ~70% width via a per-monitor `margin_ends` override. +- Restore previous wallpaper (`stellar-blade-2024-ultrawide.jpg`) on all outputs. +- Document the noctalia v4 to v5 migration (files, keybinds, bar, rollback) in `docs/noctalia-v5.md` and CLAUDE.md. diff --git a/CLAUDE.md b/CLAUDE.md index 9e7dda6..cd8801f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -40,7 +40,8 @@ This installs ansible if missing, then runs the playbook. Tasks are split by cat Edit the relevant split file, not `config.kdl` itself. ### Noctalia (desktop shell / bar) -All settings live in `noctalia/settings.json` (JSON, edited by the Noctalia GUI or directly). Colorschemes are in `noctalia/colorschemes/` and plugins in `noctalia/plugins/`. +Runs **Noctalia v5** (`noctalia`, native). Config is `noctalia/config.toml` (TOML, hot-reloaded); validate with `noctalia config validate`. +`noctalia/settings.json` is the legacy v4 config. See `docs/noctalia-v5.md` for details and `CHANGELOG.md` for history. ### Neovim Uses **LazyVIM** framework. Entry point is `nvim/init.lua` which bootstraps lazy.nvim via `nvim/lua/config/lazy.lua`. diff --git a/docs/noctalia-v5.md b/docs/noctalia-v5.md new file mode 100644 index 0000000..bf44867 --- /dev/null +++ b/docs/noctalia-v5.md @@ -0,0 +1,36 @@ +# Noctalia v5 + +Noctalia v5 (`noctalia` package) is a native Wayland shell with no Qt dependency. It replaces v4 +(`noctalia-shell` + `noctalia-qs`, Quickshell/QML), which broke on Qt 6.12. + +## Files + +- `noctalia/config.toml` - hand-edited config, hot-reloaded. Linked to `~/.config/noctalia/config.toml`. +- `~/.local/state/noctalia/settings.toml` - GUI-managed overrides and runtime state (not in this repo). +- `noctalia/settings.json` - old v4 config, kept for reference or fallback. + +Validate after editing: `noctalia config validate`. Open the settings GUI: `noctalia msg settings-open`. + +## Startup and keybinds + +- Started from `niri/cfg/autostart.kdl` with `spawn-at-startup "noctalia"`. +- Keybinds in `niri/cfg/keybinds.kdl` call `noctalia msg `; list them with `noctalia msg --help`. +- Panel ids for `panel-toggle`: clipboard, control-center, launcher, polkit, session, tray-drawer, wallpaper. +- Wallpaper is set with `noctalia msg wallpaper-set [output] ` and persists. + +## Bar + +- Layout is the `start`, `center` and `end` lists in `[bar.main]`. +- `[bar.main.monitor.ultrawide]` matches DP-1 and sets `margin_ends = 768`, which gives about 70% width on 5120px. + Formula: `(monitor_width - wanted_width) / 2`. + +## Not ported from v4 + +- System monitor widget (widget id unknown in v5), per-widget options such as hover-only labels. +- v4 plugins (`polkit-agent`): v5 has a built-in `polkit` panel instead. +- The v4 bar only ran on DP-1; v5 runs on every output. + +## Rolling back + +Set autostart to `qs -c noctalia-shell` again and restore the `qs ... ipc call` binds from git history. +This needs a `noctalia-shell` that works with the installed Qt version. diff --git a/niri/cfg/autostart.kdl b/niri/cfg/autostart.kdl index 60e41ce..733e31c 100644 --- a/niri/cfg/autostart.kdl +++ b/niri/cfg/autostart.kdl @@ -1,5 +1,5 @@ // ────────────── Startup Applications ────────────── // https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#spawn-sh-at-startup - spawn-sh-at-startup "qs -c noctalia-shell" + spawn-at-startup "noctalia" spawn-at-startup "kanshi" diff --git a/niri/cfg/keybinds.kdl b/niri/cfg/keybinds.kdl index fb4c87d..8450ad2 100644 --- a/niri/cfg/keybinds.kdl +++ b/niri/cfg/keybinds.kdl @@ -16,29 +16,29 @@ binds { Mod+G hotkey-overlay-title="Focus: Gmail" { spawn-sh "$HOME/.config/niri/focus-or-launch.sh chrome-fmgjjmmmlfnkbppncabfkddbjimcfncm-Default /opt/helium-browser-bin/helium-wrapper --profile-directory=Default --app-id=fmgjjmmmlfnkbppncabfkddbjimcfncm"; } Mod+W hotkey-overlay-title="Focus: WhatsApp" { spawn-sh "$HOME/.config/niri/focus-or-launch.sh chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default /opt/helium-browser-bin/helium-wrapper --profile-directory=Default --app-id=hnpfjngllnobngcgfapefoaidbinmjnm"; } Mod+D hotkey-overlay-title="Focus: Todoist" { spawn-sh "$HOME/.config/niri/focus-or-launch.sh chrome-dlgohinmglaoopaiplliaecdpmnepmga-Default /opt/helium-browser-bin/helium-wrapper --profile-directory=Default --app-id=dlgohinmglaoopaiplliaecdpmnepmga"; } - //Mod+CTRL+Return hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; } - Alt+Space hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; } - Alt+Shift+Space hotkey-overlay-title="Open Window Search: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher windows"; } + //Mod+CTRL+Return hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "noctalia msg panel-toggle launcher"; } + Alt+Space hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "noctalia msg panel-toggle launcher"; } + Alt+Shift+Space hotkey-overlay-title="Open Window Search: noctalia launcher" { spawn-sh "noctalia msg window-switcher"; } Mod+B hotkey-overlay-title="Open Browser: helium" { spawn "helium-browser"; } - Mod+L hotkey-overlay-title="Lock Screen: noctalia lock" { spawn-sh "qs -c noctalia-shell ipc call lockScreen lock"; } - Mod+Shift+Q hotkey-overlay-title="Session Menu: noctalia sessionMenu" { spawn-sh "qs -c noctalia-shell ipc call sessionMenu toggle"; } + Mod+L hotkey-overlay-title="Lock Screen: noctalia lock" { spawn-sh "noctalia msg session lock"; } + Mod+Shift+Q hotkey-overlay-title="Session Menu: noctalia sessionMenu" { spawn-sh "noctalia msg panel-toggle session"; } // Please choose your own file manager. Mod+E hotkey-overlay-title="File Manager: Nautilus" { spawn "nautilus"; } // ─── Media Controls ─── - XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume increase"; } - XF86AudioLowerVolume allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume decrease"; } - XF86AudioMute allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume muteOutput"; } - XF86AudioMicMute allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume muteInput"; } - XF86AudioNext allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media next"; } - XF86AudioPrev allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media previous"; } - XF86AudioPlay allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media playPause"; } - XF86AudioPause allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media playPause"; } + XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "noctalia msg volume-up"; } + XF86AudioLowerVolume allow-when-locked=true { spawn-sh "noctalia msg volume-down"; } + XF86AudioMute allow-when-locked=true { spawn-sh "noctalia msg volume-mute"; } + XF86AudioMicMute allow-when-locked=true { spawn-sh "noctalia msg mic-mute"; } + XF86AudioNext allow-when-locked=true { spawn-sh "noctalia msg media next"; } + XF86AudioPrev allow-when-locked=true { spawn-sh "noctalia msg media previous"; } + XF86AudioPlay allow-when-locked=true { spawn-sh "noctalia msg media toggle"; } + XF86AudioPause allow-when-locked=true { spawn-sh "noctalia msg media toggle"; } // ─── Brightness Controls ─── - XF86MonBrightnessUp allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call brightness increase"; } - XF86MonBrightnessDown allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call brightness decrease"; } + XF86MonBrightnessUp allow-when-locked=true { spawn-sh "noctalia msg brightness-up"; } + XF86MonBrightnessDown allow-when-locked=true { spawn-sh "noctalia msg brightness-down"; } // ─── Window Movement and Focus ─── Alt+H { focus-column-left; } diff --git a/noctalia/config.toml b/noctalia/config.toml new file mode 100644 index 0000000..642bc50 --- /dev/null +++ b/noctalia/config.toml @@ -0,0 +1,56 @@ +# Ported from the old settings.json (noctalia-shell 4.x). Unlisted keys use defaults. + +[theme] +mode = "dark" +source = "builtin" +builtin = "Catppuccin" + +[wallpaper] +enabled = true +fill_mode = "crop" +transition = ["fade", "disc", "stripes", "wipe", "honeycomb"] +transition_duration = 1500 +directory = "/home/bgrolleman/Documents/Resources/Backgrounds" + +[weather] +enabled = true +unit = "celsius" + +[location] +address = "Amersfoort, The Netherlands" + +[idle.behavior.lock] +timeout = 660 +action = "lock" +enabled = true + +[idle.behavior.screen-off] +timeout = 600 +action = "screen_off" +enabled = true + +[dock] +enabled = true +position = "left" +auto_hide = true + +[bar.main] +position = "top" +background_opacity = 0.93 +capsule = true +margin_ends = 4 +margin_edge = 4 +widget_spacing = 6 + +start = ["launcher", "taskbar"] +center = ["clock", "media"] +end = ["workspaces", "tray", "network", "bluetooth", "notifications", "battery", "volume", "brightness", "control-center"] + +[widget.clock] +format = "{:%H:%M %a, %b %d}" +tooltip_format = "{:%H:%M %a, %b %d}" + +# 70% of the 5120px ultrawide: (5120 - 3584) / 2 +[bar.main.monitor.ultrawide] +match = "DP-1" +margin_ends = 768