From 001d180b22c3e9cf60a78b84177d298f315b789a Mon Sep 17 00:00:00 2001 From: Ryan Yin Date: Sat, 19 Sep 2026 14:30:34 +0800 Subject: [PATCH] feat(noctalia): upgrade to the native v5 shell Noctalia v5 is the native C++/Wayland rewrite; the Quickshell-based v4 line (pkgs.noctalia-shell) is EOL and its JSON config is not migrated upstream. - use the upstream home-manager programs.noctalia module (present at our pinned HM revision) instead of the hand-rolled package + symlink module: it installs pkgs.noctalia, validates config.toml at build time via checkConfig, and supports customPalettes; drop the v4 Qt/Qt6ct session setup - replace the v4 settings.json/plugins.json with a minimal shared config.toml (font, Catppuccin shell palette, templates off, screenshot annotation, accessibility/bar scale, night light, wallpaper, location/weather); host-specific bits live in per-host files (shoukei's eDP-1 backlight in noctalia/host-shoukei.toml), which merge after config.toml. Application theming stays with catppuccin/nix - treat config.toml as the single source of truth: do NOT persist ~/.local/state/noctalia and set setup_wizard_enabled = false, so UI tweaks are promoted back into the repo instead of accumulating in app-owned state - port niri keybinds to 'noctalia msg ...', update spawn-at-startup and the backdrop layer namespace, fix the broken 'octalia-shell' media-previous bind, and replace the grim/slurp/satty screenshot stack with Noctalia's native region/fullscreen/annotate commands (drop the unused packages) - drop the now-redundant swaybg and swaylock (Noctalia owns the wallpaper and lock screen, the latter authenticating against the PAM 'login' service) and its PAM entry; keep wlogout as an emergency fallback - update hypridle's lock commands and the matching eval test - refresh the noctalia docs --- README.md | 4 +- home/hosts/linux/12kingdoms-shoukei.nix | 3 + .../linux/12kingdoms-shoukei/noctalia.toml | 8 + home/linux/gui/README.md | 12 +- home/linux/gui/base/README.md | 65 +- home/linux/gui/base/desktop-tools.nix | 11 +- home/linux/gui/base/hypridle/default.nix | 6 +- .../linux/gui/base/noctalia/config/.gitignore | 2 - .../gui/base/noctalia/config/config.toml | 54 ++ .../gui/base/noctalia/config/plugins.json | 11 - .../gui/base/noctalia/config/settings.json | 695 ------------------ home/linux/gui/base/noctalia/default.nix | 35 +- home/linux/gui/base/noctalia/qt6ct.conf | 31 - home/linux/gui/niri/conf/keybindings.kdl | 44 +- home/linux/gui/niri/conf/noctalia-shell.kdl | 6 +- home/linux/gui/niri/conf/spawn-at-startup.kdl | 4 +- home/linux/gui/niri/default.nix | 5 - modules/nixos/desktop.nix | 2 - .../aarch64-linux/tests/home-manager/expr.nix | 2 +- 19 files changed, 157 insertions(+), 843 deletions(-) create mode 100644 home/hosts/linux/12kingdoms-shoukei/noctalia.toml delete mode 100644 home/linux/gui/base/noctalia/config/.gitignore create mode 100644 home/linux/gui/base/noctalia/config/config.toml delete mode 100644 home/linux/gui/base/noctalia/config/plugins.json delete mode 100644 home/linux/gui/base/noctalia/config/settings.json delete mode 100644 home/linux/gui/base/noctalia/qt6ct.conf diff --git a/README.md b/README.md index 27ada7b8..776c6375 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ You don't have to go through the pain I've experienced again! Check out my | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | **Window Manager** | [Niri][Niri] | | **Terminal Emulator** | [Zellij][Zellij] + [foot][foot]/[Kitty][Kitty]/[Alacritty][Alacritty]/[Ghostty][Ghostty] | -| **Status Bar** / **Notifier** / **Launcher** / **lockscreens** | [noctalia-shell][noctalia-shell] | +| **Status Bar** / **Notifier** / **Launcher** / **lockscreens** | [noctalia][noctalia] | | **Display Manager** | [tuigreet][tuigreet] | | **Color Scheme** | [catppuccin-nix][catppuccin-nix] | | **network management tool** | [NetworkManager][NetworkManager] | @@ -209,4 +209,4 @@ Other dotfiles that inspired me: [Btrfs]: https://btrfs.readthedocs.io [LUKS]: https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system [lanzaboote]: https://github.com/nix-community/lanzaboote -[noctalia-shell]: https://github.com/noctalia-dev/noctalia-shell +[noctalia]: https://github.com/noctalia-dev/noctalia diff --git a/home/hosts/linux/12kingdoms-shoukei.nix b/home/hosts/linux/12kingdoms-shoukei.nix index 116d369f..6d7ca7b2 100644 --- a/home/hosts/linux/12kingdoms-shoukei.nix +++ b/home/hosts/linux/12kingdoms-shoukei.nix @@ -24,6 +24,9 @@ in xdg.configFile."niri/niri-hardware.kdl".source = mkSymlink "${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/niri-hardware.kdl"; + # Host-specific Noctalia config; merges after the shared config.toml. + xdg.configFile."noctalia/host-shoukei.toml".source = ./12kingdoms-shoukei/noctalia.toml; + # The built-in laptop speakers are quiet, so boost above the -23 dB default. services.easyeffects.extraPresets."loudness-normalization".output."autogain#0".target = -12.0; } diff --git a/home/hosts/linux/12kingdoms-shoukei/noctalia.toml b/home/hosts/linux/12kingdoms-shoukei/noctalia.toml new file mode 100644 index 00000000..c098d718 --- /dev/null +++ b/home/hosts/linux/12kingdoms-shoukei/noctalia.toml @@ -0,0 +1,8 @@ +# shoukei (laptop) specific Noctalia config. +# Installed as ~/.config/noctalia/host-shoukei.toml, which sorts after +# config.toml in Noctalia's alphabetical merge, so it can override the shared +# baseline. + +[brightness.monitor.eDP-1] +backend = "backlight" +backlight_device = "apple-panel-bl" diff --git a/home/linux/gui/README.md b/home/linux/gui/README.md index 3078b133..654f5502 100644 --- a/home/linux/gui/README.md +++ b/home/linux/gui/README.md @@ -13,8 +13,8 @@ Manager. ### Base Desktop Environment - **base**: Common desktop configurations shared across all environments, including: - - **Noctalia Shell**: All-in-one Wayland desktop shell (replaces gammastep, swaylock, anyrun, - mako, waybar, wallpaper-switcher, wlogout, and other desktop tools) + - **Noctalia**: native (v5) all-in-one Wayland desktop shell (replaces gammastep, swaylock, + anyrun, mako, waybar, wallpaper-switcher, wlogout, grim/slurp/satty, and other desktop tools) - Creative tools and media applications - Development tools - Fcitx5 input method framework @@ -34,10 +34,10 @@ Manager. 1. **Configuration Location**: Desktop environment configuration files are located in `~/.config`, which can be easily managed by Home Manager. -2. **User-specific Services**: User-specific systemd services (noctalia-shell, fcitx5, hypridle, - etc.) can be easily managed by Home Manager. If desktop environments were configured via NixOS - Module, these user-level services might fail to start automatically. With Home Manager modules, - we can control systemd service dependency order more effectively. +2. **User-specific Services**: User-specific systemd services (noctalia, fcitx5, hypridle, etc.) can + be easily managed by Home Manager. If desktop environments were configured via NixOS Module, + these user-level services might fail to start automatically. With Home Manager modules, we can + control systemd service dependency order more effectively. 3. **System Benefits**: By minimizing package installation through NixOS Module: - Makes the NixOS system more secure and stable diff --git a/home/linux/gui/base/README.md b/home/linux/gui/base/README.md index c53397e1..15a78261 100644 --- a/home/linux/gui/base/README.md +++ b/home/linux/gui/base/README.md @@ -12,40 +12,54 @@ The configuration is organized into modular components that can be selectively e - **Development Tools**: IDEs and development utilities - **System Integration**: Input methods, theming, XDG specifications, GPU settings -## Noctalia Shell +## Noctalia -**Noctalia Shell** is an all-in-one Wayland desktop shell that replaces multiple separate tools with -a single, unified solution. It provides: +**Noctalia** (v5) is a native C++/Wayland all-in-one desktop shell that replaces multiple separate +tools with a single, unified solution. It is installed and configured through the upstream +[`programs.noctalia`](https://docs.noctalia.dev/noctalia/getting-started/nixos/) Home Manager +module, which validates the TOML at build time. -- **Unified Configuration**: All components configured in a single `settings.json` file -- **Consistent Experience**: Cohesive visual design and interaction patterns -- **Reduced Complexity**: No need to maintain multiple separate config files +### Configuration + +Noctalia merges **every `*.toml` in the config directory** (`~/.config/noctalia/`), sorted +alphabetically, and then layers the Settings UI's own overrides on top: + +| Layer | Location | Notes | +| -------------------- | ----------------------------------------------------------------- | ----------------------------------------------- | +| Declarative baseline | `~/.config/noctalia/*.toml` (repo: `noctalia/config/config.toml`) | Merged alphabetically; `[include]` supported | +| GUI overrides | `~/.local/state/noctalia/settings.toml` | Written by the Settings UI; loads last and wins | + +`noctalia config export merged` prints the effective user config and `noctalia config validate` +checks a file. Application theming stays with `catppuccin/nix`, so Noctalia's theme templates are +disabled. ### Component Replacement -Noctalia Shell consolidates functionality that previously required multiple tools: +Noctalia consolidates functionality that previously required multiple tools: -| Traditional Component | Purpose | Noctalia Replacement | -| ---------------------- | -------------------- | ------------------------------ | -| **gammastep** | Blue light filter | `nightLight` configuration | -| **swaylock** | Screen locker | Built-in lock screen | -| **anyrun** | Application launcher | `appLauncher` | -| **mako** | Notification daemon | `notifications` | -| **waybar** | Status bar | `bar` (with widgets) | -| **wallpaper-switcher** | Wallpaper management | `wallpaper` (with transitions) | -| **wlogout** | Session menu | `sessionMenu` | -| **wl-clipboard** | Clipboard management | Built-in clipboard manager | +| Traditional Component | Purpose | Noctalia counterpart | +| ---------------------- | ------------------------ | ------------------------------------------------- | +| **gammastep** | Blue light filter | `[nightlight]` | +| **swaylock** | Screen locker | built-in lock screen (`[lockscreen]`) | +| **anyrun** | Application launcher | launcher panel (`[shell.launcher]`) | +| **mako** | Notification daemon | `[notification]` | +| **waybar** | Status bar | `[bar]` + `[widget.*]` | +| **wallpaper-switcher** | Wallpaper management | `[wallpaper]` | +| **wlogout** | Session menu | `[shell.session]` | +| **wl-clipboard** | Clipboard management | built-in clipboard (encrypted history) | +| **grim/slurp/satty** | Screenshots + annotation | built-in `[shell.screenshot]` + annotation editor | ## Configuration Modules ### Desktop Shell -- **[`noctalia/default.nix`](./noctalia/default.nix)**: Package installation and systemd service -- **[`noctalia/settings.json`](./noctalia/settings.json)**: Main configuration with all settings +- **[`noctalia/default.nix`](./noctalia/default.nix)**: enables the upstream `programs.noctalia` + module +- **[`noctalia/config/config.toml`](./noctalia/config/config.toml)**: declarative baseline (v5 TOML) - Key features: bar, control center, night light, wallpaper, session menu, system monitor, - audio/volume, brightness, screen recorder, calendar, color schemes, dock, notifications, OSD, and - more. + Key features: bar and widgets, control center, desktop widgets, night light, wallpaper, session + panel, screenshots with annotation, system monitor, audio/volume, brightness, calendar/weather, + color schemes, dock, notifications, OSD, clipboard, and more. - **[`hypridle/`](./hypridle/)**: Idle management @@ -61,7 +75,8 @@ Noctalia Shell consolidates functionality that previously required multiple tool ### Applications -- **[`desktop-tools.nix`](./desktop-tools.nix)**: Daily GUI apps (foliate, remmina, messaging) +- **[`desktop-tools.nix`](./desktop-tools.nix)**: Wayland session tools (clipboard, color picker, + brightness, audio, screen recording, auto-mount, `wlogout` emergency fallback) - **[`browsers.nix`](./browsers.nix)**: Web browsers - **[`editors.nix`](./editors.nix)**: Desktop text editors - **[`media.nix`](./media.nix)**: Media players @@ -75,10 +90,10 @@ Noctalia Shell consolidates functionality that previously required multiple tool ### System Utilities -- **[`misc.nix`](./misc.nix)**: Wayland tools (screenshots, screen recording, color picker, audio) +- **[`misc.nix`](./misc.nix)**: Misc GUI apps (e-book reader, remote desktop, hardened IM clients) - **[`immutable-file.nix`](./immutable-file.nix)**: Immutable file handling ## Related Documentation -- Noctalia Shell: https://docs.noctalia.dev/docs +- Noctalia Shell: https://docs.noctalia.dev/noctalia/ - Parent: [`../README.md`](../README.md) diff --git a/home/linux/gui/base/desktop-tools.nix b/home/linux/gui/base/desktop-tools.nix index b2f479c1..58087469 100644 --- a/home/linux/gui/base/desktop-tools.nix +++ b/home/linux/gui/base/desktop-tools.nix @@ -16,26 +16,19 @@ }; home.packages = with pkgs; [ - swaybg # the wallpaper wl-clipboard # copying and pasting hyprpicker # color picker brightnessctl # audio alsa-utils # provides amixer/alsamixer/... networkmanagerapplet # provide GUI app: nm-connection-editor - # screenshot/screencast - flameshot - hyprshot # screen shot + # screen recording wf-recorder # screen recording virt-viewer # vnc connect to VM, used by kubevirt ]; - # screen locker - programs.swaylock.enable = true; - catppuccin.swaylock.enable = false; - - # Logout Menu + # Emergency session-menu fallback; the normal flow uses Noctalia's session panel. programs.wlogout.enable = true; # auto mount usb drives diff --git a/home/linux/gui/base/hypridle/default.nix b/home/linux/gui/base/hypridle/default.nix index 4b05f9ce..680719dc 100644 --- a/home/linux/gui/base/hypridle/default.nix +++ b/home/linux/gui/base/hypridle/default.nix @@ -30,8 +30,8 @@ in settings = { general = { - lock_cmd = "noctalia-shell ipc call lockScreen lock"; - before_sleep_cmd = "noctalia-shell ipc call lockScreen lock"; + lock_cmd = "noctalia msg session lock"; + before_sleep_cmd = "noctalia msg session lock"; # niri already owns org.freedesktop.ScreenSaver and feeds its # inhibitors into the compositor idle notifier, so hypridle must not # try to claim the interface (it would log "already providing..."). @@ -63,7 +63,7 @@ in # Skip while media is playing, same as screen-off above. condition_cmd = "! playerctl -a status 2>/dev/null | grep -q '^Playing$'"; condition_retry = 30; - on-timeout = "noctalia-shell ipc call lockScreen lock"; + on-timeout = "noctalia msg session lock"; } ]; }; diff --git a/home/linux/gui/base/noctalia/config/.gitignore b/home/linux/gui/base/noctalia/config/.gitignore deleted file mode 100644 index 48d598e1..00000000 --- a/home/linux/gui/base/noctalia/config/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# auto-generated from wallpaper -colors.json diff --git a/home/linux/gui/base/noctalia/config/config.toml b/home/linux/gui/base/noctalia/config/config.toml new file mode 100644 index 00000000..9bdb7020 --- /dev/null +++ b/home/linux/gui/base/noctalia/config/config.toml @@ -0,0 +1,54 @@ +# Noctalia v5 — minimal declarative baseline. +# Everything else is tuned in the Settings UI: those changes go to +# ~/.local/state/noctalia/settings.toml (persisted) and take precedence. + +[accessibility] +# Content scale for panels and other non-bar shell UI. +ui_scale = 1.1 + +[shell] +font_family = "Maple Mono NF CN" +avatar_path = "~/nix-config/_img/myself.jpg" +# Declarative deployment: state (~/.local/state/noctalia) is not persisted, so do +# not auto-open the first-run wizard every boot. +setup_wizard_enabled = false + +[shell.screenshot] +# Capture a region, then open the built-in annotation editor (replaces grim/slurp/satty). +annotate = true +directory = "~/Pictures/Screenshots" + +[theme] +source = "builtin" +builtin = "Catppuccin" + +# Application theming is managed by catppuccin/nix, so Noctalia templates stay off. +[theme.templates] +enable_builtin_templates = false +enable_community_templates = false + +[wallpaper] +directory = "/home/ryan/Pictures/Wallpapers" + +[wallpaper.automation] +enabled = true +interval_seconds = 600 + +[wallpaper.default] +path = "/home/ryan/Pictures/Wallpapers/rolling-girls_lalala.png" + +[location] +address = "Changsha" + +[weather] +enabled = true + +# Eye protection: hold the warm night temperature all the time. +[nightlight] +enabled = true +force = true + +[bar.main] +background_opacity = 0.2 +# Text-only bump; `scale` would enlarge glyphs and spacing too. +font_scale = 1.1 diff --git a/home/linux/gui/base/noctalia/config/plugins.json b/home/linux/gui/base/noctalia/config/plugins.json deleted file mode 100644 index 0e739d91..00000000 --- a/home/linux/gui/base/noctalia/config/plugins.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "sources": [ - { - "enabled": true, - "name": "Noctalia Plugins", - "url": "https://github.com/noctalia-dev/noctalia-plugins" - } - ], - "states": {}, - "version": 2 -} diff --git a/home/linux/gui/base/noctalia/config/settings.json b/home/linux/gui/base/noctalia/config/settings.json deleted file mode 100644 index cc65916f..00000000 --- a/home/linux/gui/base/noctalia/config/settings.json +++ /dev/null @@ -1,695 +0,0 @@ -{ - "appLauncher": { - "autoPasteClipboard": false, - "clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store", - "clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store", - "clipboardWrapText": true, - "customLaunchPrefix": "", - "customLaunchPrefixEnabled": false, - "density": "default", - "enableClipPreview": true, - "enableClipboardChips": true, - "enableClipboardHistory": true, - "enableClipboardSmartIcons": true, - "enableSessionSearch": true, - "enableSettingsSearch": true, - "enableWindowsSearch": true, - "iconMode": "native", - "ignoreMouseInput": false, - "overviewLayer": false, - "pinnedApps": [], - "position": "center", - "screenshotAnnotationTool": "", - "showCategories": true, - "showIconBackground": true, - "sortByMostUsed": true, - "terminalCommand": "xterm -e", - "viewMode": "list" - }, - "audio": { - "mprisBlacklist": [], - "preferredPlayer": "", - "spectrumFrameRate": 30, - "spectrumMirrored": true, - "visualizerType": "linear", - "volumeFeedback": false, - "volumeFeedbackSoundFile": "", - "volumeOverdrive": false, - "volumeStep": 1 - }, - "bar": { - "autoHideDelay": 500, - "autoShowDelay": 150, - "backgroundOpacity": 0.2, - "barType": "simple", - "capsuleColorKey": "none", - "capsuleOpacity": 1, - "contentPadding": 2, - "density": "comfortable", - "displayMode": "always_visible", - "enableExclusionZoneInset": true, - "fontScale": 1, - "frameRadius": 12, - "frameThickness": 8, - "hideOnOverview": true, - "marginHorizontal": 5, - "marginVertical": 5, - "middleClickAction": "none", - "middleClickCommand": "", - "middleClickFollowMouse": false, - "monitors": [], - "mouseWheelAction": "none", - "mouseWheelWrap": true, - "outerCorners": true, - "position": "top", - "reverseScroll": false, - "rightClickAction": "controlCenter", - "rightClickCommand": "", - "rightClickFollowMouse": true, - "screenOverrides": [], - "showCapsule": true, - "showOnWorkspaceSwitch": true, - "showOutline": false, - "useSeparateOpacity": true, - "widgetSpacing": 6, - "widgets": { - "center": [ - { - "characterCount": 2, - "colorizeIcons": false, - "emptyColor": "secondary", - "enableScrollWheel": true, - "focusedColor": "primary", - "followFocusedScreen": false, - "fontWeight": "bold", - "groupedBorderOpacity": 1, - "hideUnoccupied": false, - "iconScale": 0.8, - "id": "Workspace", - "labelMode": "index", - "occupiedColor": "secondary", - "pillSize": 0.6, - "showApplications": false, - "showApplicationsHover": false, - "showBadge": true, - "showLabelsOnlyWhenOccupied": true, - "unfocusedIconsOpacity": 1 - } - ], - "left": [ - { - "colorizeSystemIcon": "none", - "colorizeSystemText": "none", - "customIconPath": "", - "enableColorization": false, - "icon": "rocket", - "iconColor": "none", - "id": "Launcher", - "useDistroLogo": false - }, - { - "clockColor": "none", - "customFont": "", - "formatHorizontal": "HH:mm ddd, MMM dd", - "formatVertical": "HH mm - dd MM", - "id": "Clock", - "tooltipFormat": "HH:mm ddd, MMM dd", - "useCustomFont": false - }, - { - "compactMode": false, - "diskPath": "/persistent", - "iconColor": "none", - "id": "SystemMonitor", - "showCpuCores": false, - "showCpuFreq": false, - "showCpuTemp": false, - "showCpuUsage": true, - "showDiskAvailable": false, - "showDiskUsage": true, - "showDiskUsageAsPercent": false, - "showGpuTemp": false, - "showLoadAverage": true, - "showMemoryAsPercent": true, - "showMemoryUsage": true, - "showNetworkStats": true, - "showSwapUsage": false, - "textColor": "none", - "useMonospaceFont": true, - "usePadding": false - }, - { - "colorizeIcons": false, - "hideMode": "hidden", - "id": "ActiveWindow", - "maxWidth": 145, - "scrollingMode": "hover", - "showIcon": true, - "showText": true, - "textColor": "none", - "useFixedWidth": false - }, - { - "compactMode": false, - "hideMode": "hidden", - "hideWhenIdle": false, - "id": "MediaMini", - "maxWidth": 145, - "panelShowAlbumArt": true, - "scrollingMode": "hover", - "showAlbumArt": false, - "showArtistFirst": true, - "showProgressRing": true, - "showVisualizer": false, - "textColor": "none", - "useFixedWidth": false, - "visualizerType": "linear" - } - ], - "right": [ - { - "hideWhenZero": false, - "hideWhenZeroUnread": false, - "iconColor": "none", - "id": "NotificationHistory", - "showUnreadBadge": true, - "unreadBadgeColor": "primary" - }, - { - "deviceNativePath": "__default__", - "displayMode": "icon-always", - "hideIfIdle": false, - "hideIfNotDetected": true, - "id": "Battery", - "showNoctaliaPerformance": true, - "showPowerProfiles": true - }, - { - "displayMode": "alwaysShow", - "iconColor": "none", - "id": "Volume", - "middleClickCommand": "pwvucontrol || pavucontrol", - "textColor": "none" - }, - { - "applyToAllMonitors": false, - "displayMode": "alwaysShow", - "iconColor": "none", - "id": "Brightness", - "textColor": "none" - }, - { - "blacklist": [], - "chevronColor": "none", - "colorizeIcons": false, - "drawerEnabled": true, - "hidePassive": false, - "id": "Tray", - "pinned": [] - }, - { - "colorizeDistroLogo": false, - "colorizeSystemIcon": "none", - "colorizeSystemText": "none", - "customIconPath": "", - "enableColorization": false, - "icon": "noctalia", - "id": "ControlCenter", - "useDistroLogo": true - } - ] - } - }, - "brightness": { - "backlightDeviceMappings": [ - { - "device": "/sys/class/backlight/apple-panel-bl", - "output": "eDP-1" - } - ], - "brightnessStep": 3, - "enableDdcSupport": false, - "enforceMinimum": true - }, - "calendar": { - "cards": [ - { - "enabled": true, - "id": "calendar-header-card" - }, - { - "enabled": true, - "id": "calendar-month-card" - }, - { - "enabled": true, - "id": "weather-card" - } - ] - }, - "colorSchemes": { - "darkMode": true, - "generationMethod": "tonal-spot", - "manualSunrise": "06:30", - "manualSunset": "18:30", - "monitorForColors": "", - "predefinedScheme": "Noctalia (default)", - "schedulingMode": "off", - "syncGsettings": true, - "useWallpaperColors": true - }, - "controlCenter": { - "cards": [ - { - "enabled": true, - "id": "profile-card" - }, - { - "enabled": true, - "id": "shortcuts-card" - }, - { - "enabled": true, - "id": "audio-card" - }, - { - "enabled": true, - "id": "brightness-card" - }, - { - "enabled": true, - "id": "weather-card" - }, - { - "enabled": true, - "id": "media-sysmon-card" - } - ], - "diskPath": "/persistent", - "position": "close_to_bar_button", - "shortcuts": { - "left": [ - { - "id": "WiFi" - }, - { - "id": "Bluetooth" - }, - { - "id": "WallpaperSelector" - } - ], - "right": [ - { - "id": "Notifications" - }, - { - "id": "PowerProfile" - }, - { - "id": "KeepAwake" - }, - { - "id": "NightLight" - } - ] - } - }, - "desktopWidgets": { - "enabled": true, - "gridSnap": true, - "gridSnapScale": false, - "monitorWidgets": [ - { - "name": "eDP-1", - "widgets": [ - { - "clockStyle": "digital", - "customFont": "", - "format": "HH:mm\\nd MMMM yyyy", - "id": "Clock", - "roundedCorners": true, - "scale": 0.7378548922663623, - "showBackground": true, - "useCustomFont": false, - "usePrimaryColor": false, - "x": 92, - "y": 161 - }, - { - "hideMode": "visible", - "id": "MediaPlayer", - "roundedCorners": true, - "scale": 1.1501312913284876, - "showAlbumArt": true, - "showBackground": true, - "showButtons": true, - "showVisualizer": true, - "visualizerType": "linear", - "x": 92, - "y": 299 - }, - { - "id": "Weather", - "scale": 1.339282355295889, - "showBackground": true, - "x": 230, - "y": 161 - } - ] - } - ], - "overviewEnabled": true - }, - "dock": { - "animationSpeed": 1, - "backgroundOpacity": 1, - "colorizeIcons": false, - "deadOpacity": 0.6, - "displayMode": "auto_hide", - "dockType": "floating", - "enabled": false, - "floatingRatio": 1, - "groupApps": false, - "groupClickAction": "cycle", - "groupContextMenuMode": "extended", - "groupIndicatorStyle": "dots", - "inactiveIndicators": false, - "indicatorColor": "primary", - "indicatorOpacity": 0.6, - "indicatorThickness": 3, - "launcherIcon": "", - "launcherIconColor": "none", - "launcherPosition": "end", - "launcherUseDistroLogo": false, - "monitors": [], - "onlySameOutput": true, - "pinnedApps": [], - "pinnedStatic": false, - "position": "bottom", - "showDockIndicator": false, - "showLauncherIcon": false, - "sitOnFrame": false, - "size": 1 - }, - "general": { - "allowPanelsOnScreenWithoutBar": true, - "allowPasswordWithFprintd": false, - "animationDisabled": false, - "animationSpeed": 1, - "autoStartAuth": false, - "avatarImage": "~/nix-config/_img/myself.jpg", - "boxRadiusRatio": 1, - "clockFormat": "hh\\nmm", - "clockStyle": "custom", - "compactLockScreen": false, - "dimmerOpacity": 0.2, - "enableBlurBehind": true, - "enableLockScreenCountdown": true, - "enableLockScreenMediaControls": false, - "enableShadows": true, - "forceBlackScreenCorners": false, - "iRadiusRatio": 1, - "keybinds": { - "keyDown": ["Down"], - "keyEnter": ["Return", "Enter"], - "keyEscape": ["Esc"], - "keyLeft": ["Left"], - "keyRemove": ["Del"], - "keyRight": ["Right"], - "keyUp": ["Up"] - }, - "language": "", - "lockOnSuspend": true, - "lockScreenAnimations": false, - "lockScreenBlur": 0, - "lockScreenCountdownDuration": 10000, - "lockScreenMonitors": [], - "lockScreenTint": 0, - "passwordChars": false, - "radiusRatio": 1, - "reverseScroll": false, - "scaleRatio": 1, - "screenRadiusRatio": 1, - "shadowDirection": "bottom_right", - "shadowOffsetX": 2, - "shadowOffsetY": 3, - "showChangelogOnStartup": true, - "showHibernateOnLockScreen": false, - "showScreenCorners": false, - "showSessionButtonsOnLockScreen": true, - "smoothScrollEnabled": true, - "telemetryEnabled": false - }, - "hooks": { - "colorGeneration": "", - "darkModeChange": "", - "enabled": false, - "performanceModeDisabled": "", - "performanceModeEnabled": "", - "screenLock": "", - "screenUnlock": "", - "session": "", - "startup": "", - "wallpaperChange": "" - }, - "idle": { - "customCommands": "[]", - "enabled": false, - "fadeDuration": 5, - "lockCommand": "", - "lockTimeout": 660, - "resumeLockCommand": "", - "resumeScreenOffCommand": "", - "resumeSuspendCommand": "", - "screenOffCommand": "", - "screenOffTimeout": 600, - "suspendCommand": "", - "suspendTimeout": 1800 - }, - "location": { - "analogClockInCalendar": false, - "autoLocate": false, - "firstDayOfWeek": 1, - "hideWeatherCityName": false, - "hideWeatherTimezone": false, - "name": "Changsha", - "showCalendarEvents": true, - "showCalendarWeather": true, - "showWeekNumberInCalendar": false, - "use12hourFormat": false, - "useFahrenheit": false, - "weatherEnabled": true, - "weatherShowEffects": true, - "weatherTaliaMascotAlways": false - }, - "network": { - "bluetoothAutoConnect": true, - "bluetoothDetailsViewMode": "grid", - "bluetoothHideUnnamedDevices": false, - "bluetoothRssiPollIntervalMs": 10000, - "bluetoothRssiPollingEnabled": false, - "disableDiscoverability": false, - "networkPanelView": "wifi", - "wifiDetailsViewMode": "grid" - }, - "nightLight": { - "autoSchedule": true, - "dayTemp": "6500", - "enabled": true, - "forced": true, - "manualSunrise": "06:30", - "manualSunset": "18:30", - "nightTemp": "4000" - }, - "noctaliaPerformance": { - "disableDesktopWidgets": true, - "disableWallpaper": true - }, - "notifications": { - "backgroundOpacity": 1, - "clearDismissed": true, - "criticalUrgencyDuration": 15, - "density": "default", - "enableBatteryToast": true, - "enableKeyboardLayoutToast": true, - "enableMarkdown": false, - "enableMediaToast": false, - "enabled": true, - "location": "top_right", - "lowUrgencyDuration": 3, - "monitors": [], - "normalUrgencyDuration": 8, - "overlayLayer": true, - "respectExpireTimeout": false, - "saveToHistory": { - "critical": true, - "low": true, - "normal": true - }, - "sounds": { - "criticalSoundFile": "", - "enabled": false, - "excludedApps": "discord,firefox,chrome,chromium,edge", - "lowSoundFile": "", - "normalSoundFile": "", - "separateSounds": false, - "volume": 0.5 - } - }, - "osd": { - "autoHideMs": 2000, - "backgroundOpacity": 1, - "enabled": true, - "enabledTypes": [0, 1, 4, 3], - "location": "top_right", - "monitors": [], - "overlayLayer": true - }, - "plugins": { - "autoUpdate": false, - "notifyUpdates": true - }, - "sessionMenu": { - "countdownDuration": 10000, - "enableCountdown": true, - "largeButtonsLayout": "grid", - "largeButtonsStyle": true, - "position": "center", - "powerOptions": [ - { - "action": "lock", - "command": "", - "countdownEnabled": true, - "enabled": true, - "keybind": "1" - }, - { - "action": "suspend", - "command": "", - "countdownEnabled": true, - "enabled": true, - "keybind": "2" - }, - { - "action": "hibernate", - "command": "", - "countdownEnabled": true, - "enabled": true, - "keybind": "3" - }, - { - "action": "reboot", - "command": "", - "countdownEnabled": true, - "enabled": true, - "keybind": "4" - }, - { - "action": "logout", - "command": "", - "countdownEnabled": true, - "enabled": true, - "keybind": "5" - }, - { - "action": "shutdown", - "command": "", - "countdownEnabled": true, - "enabled": true, - "keybind": "6" - }, - { - "action": "rebootToUefi", - "command": "", - "countdownEnabled": true, - "enabled": true, - "keybind": "" - } - ], - "showHeader": true, - "showKeybinds": true - }, - "settingsVersion": 59, - "systemMonitor": { - "batteryCriticalThreshold": 5, - "batteryWarningThreshold": 20, - "cpuCriticalThreshold": 95, - "cpuWarningThreshold": 80, - "criticalColor": "", - "diskAvailCriticalThreshold": 10, - "diskAvailWarningThreshold": 20, - "diskCriticalThreshold": 90, - "diskWarningThreshold": 80, - "enableDgpuMonitoring": false, - "externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor", - "gpuCriticalThreshold": 90, - "gpuWarningThreshold": 80, - "memCriticalThreshold": 90, - "memWarningThreshold": 80, - "swapCriticalThreshold": 90, - "swapWarningThreshold": 80, - "tempCriticalThreshold": 90, - "tempWarningThreshold": 80, - "useCustomColors": false, - "warningColor": "" - }, - "templates": { - "activeTemplates": [], - "enableUserTheming": false - }, - "ui": { - "boxBorderEnabled": false, - "fontDefault": "Maple Mono NF CN", - "fontDefaultScale": 1, - "fontFixed": "Maple Mono NF CN", - "fontFixedScale": 1, - "panelBackgroundOpacity": 0.85, - "panelsAttachedToBar": true, - "scrollbarAlwaysVisible": true, - "settingsPanelMode": "attached", - "settingsPanelSideBarCardStyle": false, - "tooltipsEnabled": true, - "translucentWidgets": false - }, - "wallpaper": { - "automationEnabled": true, - "directory": "/home/ryan/Pictures/Wallpapers", - "enableMultiMonitorDirectories": false, - "enabled": true, - "favorites": [], - "fillColor": "#000000", - "fillMode": "crop", - "hideWallpaperFilenames": false, - "linkLightAndDarkWallpapers": true, - "monitorDirectories": [], - "overviewBlur": 0.4, - "overviewEnabled": true, - "overviewTint": 0.6, - "panelPosition": "follow_bar", - "randomIntervalSec": 600, - "setWallpaperOnAllMonitors": true, - "showHiddenFiles": false, - "skipStartupTransition": false, - "solidColor": "#1a1a2e", - "sortOrder": "name", - "transitionDuration": 1500, - "transitionEdgeSmoothness": 0.05, - "transitionType": ["fade", "disc", "stripes", "wipe", "pixelate", "honeycomb"], - "useOriginalImages": false, - "useSolidColor": false, - "useWallhaven": false, - "viewMode": "recursive", - "wallhavenApiKey": "", - "wallhavenCategories": "111", - "wallhavenOrder": "desc", - "wallhavenPurity": "100", - "wallhavenQuery": "", - "wallhavenRatios": "", - "wallhavenResolutionHeight": "", - "wallhavenResolutionMode": "atleast", - "wallhavenResolutionWidth": "", - "wallhavenSorting": "relevance", - "wallpaperChangeMode": "random" - } -} diff --git a/home/linux/gui/base/noctalia/default.nix b/home/linux/gui/base/noctalia/default.nix index 5307659d..db018b59 100644 --- a/home/linux/gui/base/noctalia/default.nix +++ b/home/linux/gui/base/noctalia/default.nix @@ -1,26 +1,25 @@ { lib, - config, pkgs, wallpapers, ... }: -let - package = pkgs.noctalia-shell; -in { - # Qt for noctalia-shell (replaces former systemd user service Environment=) - home.sessionVariables = { - # Qt6: wayland primary, xcb fallback (QT_QPA_PLATFORM). - "QT_QPA_PLATFORM" = "wayland;xcb"; - "QT_QPA_PLATFORMTHEME" = "qt6ct"; - "QT_AUTO_SCREEN_SCALE_FACTOR" = "1"; + # Use the upstream Home Manager module (shipped by home-manager itself): it + # installs pkgs.noctalia, validates the TOML at build time via `checkConfig`, + # and handles custom palettes. Runtime changes made in the Settings UI keep + # working: they go to ~/.local/state/noctalia/settings.toml, which loads after + # this file and wins. + # https://docs.noctalia.dev/noctalia/getting-started/nixos/#home-manager + programs.noctalia = { + enable = true; + settings = ./config/config.toml; }; + # Noctalia v5 is started by niri's spawn-at-startup (see the niri conf), so + # app2unit is still used to launch desktop entries as systemd user units. home.packages = [ - package - pkgs.qt6Packages.qt6ct # for icon theme pkgs.app2unit # Launch Desktop Entries (or arbitrary commands) as Systemd user units ] ++ (lib.optionals pkgs.stdenv.hostPlatform.isx86_64 [ @@ -28,16 +27,4 @@ in ]); home.file."Pictures/Wallpapers".source = wallpapers; - - xdg.configFile = - let - mkSymlink = config.lib.file.mkOutOfStoreSymlink; - confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/base/noctalia"; - in - { - # NOTE: use config dir as noctalia config because config is not only settings.json - # https://github.com/noctalia-dev/noctalia-shell/blob/main/nix/home-module.nix#L211-L220 - "noctalia".source = mkSymlink "${confPath}/config"; - "qt6ct/qt6ct.conf".source = mkSymlink "${confPath}/qt6ct.conf"; - }; } diff --git a/home/linux/gui/base/noctalia/qt6ct.conf b/home/linux/gui/base/noctalia/qt6ct.conf deleted file mode 100644 index 92d59fac..00000000 --- a/home/linux/gui/base/noctalia/qt6ct.conf +++ /dev/null @@ -1,31 +0,0 @@ -[Appearance] -custom_palette=false -icon_theme=Papirus -standard_dialogs=default -style=Fusion - -[Fonts] -fixed="Maple Mono NF CN,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular" -general="Maple Mono NF CN,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular" - -[Interface] -activate_item_on_single_click=1 -buttonbox_layout=0 -cursor_flash_time=1000 -dialog_buttons_have_icons=1 -double_click_interval=400 -gui_effects=@Invalid() -keyboard_scheme=2 -menus_have_icons=true -show_shortcuts_in_context_menus=true -stylesheets=@Invalid() -toolbutton_style=4 -underline_shortcut=1 -wheel_scroll_lines=3 - -[SettingsWindow] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5\0\0\0\0\0\0\0\0\x6\xab\0\0\0\0\0\0\0\0\0\0\x3H\0\0\x3\xf5) - -[Troubleshooting] -force_raster_widgets=1 -ignored_applications=@Invalid() diff --git a/home/linux/gui/niri/conf/keybindings.kdl b/home/linux/gui/niri/conf/keybindings.kdl index c94419fd..18c547ca 100644 --- a/home/linux/gui/niri/conf/keybindings.kdl +++ b/home/linux/gui/niri/conf/keybindings.kdl @@ -18,12 +18,12 @@ binds { Mod+Shift+Return { spawn "alacritty"; } // Launcher - Mod+D { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; } - Mod+Space { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; } - XF86Search { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; } + Mod+D { spawn "noctalia" "msg" "panel-toggle" "launcher"; } + Mod+Space { spawn "noctalia" "msg" "panel-toggle" "launcher"; } + XF86Search { spawn "noctalia" "msg" "panel-toggle" "launcher"; } // Locker - CTRL+Alt+L { spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"; } + CTRL+Alt+L { spawn "noctalia" "msg" "session" "lock"; } // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc. // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`. @@ -38,10 +38,10 @@ binds { // XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01-"; } // XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; } // XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; } - XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "increase"; } - XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "decrease"; } - XF86AudioMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; } - XF86AudioMicMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteInput"; } + XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia" "msg" "volume-up"; } + XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia" "msg" "volume-down"; } + XF86AudioMute allow-when-locked=true { spawn "noctalia" "msg" "volume-mute"; } + XF86AudioMicMute allow-when-locked=true { spawn "noctalia" "msg" "mic-mute"; } // Example media keys mapping using playerctl. @@ -50,18 +50,18 @@ binds { // XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; } // XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; } // XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; } - XF86AudioPlay allow-when-locked=true { spawn-sh "noctalia-shell ipc call media playPause"; } - XF86AudioStop allow-when-locked=true { spawn-sh "noctalia-shell ipc call media pause"; } - XF86AudioPrev allow-when-locked=true { spawn-sh "octalia-shell ipc call media previous"; } - XF86AudioNext allow-when-locked=true { spawn-sh "noctalia-shell ipc call media next"; } + XF86AudioPlay allow-when-locked=true { spawn "noctalia" "msg" "media" "toggle"; } + XF86AudioStop allow-when-locked=true { spawn "noctalia" "msg" "media" "pause"; } + XF86AudioPrev allow-when-locked=true { spawn "noctalia" "msg" "media" "previous"; } + XF86AudioNext allow-when-locked=true { spawn "noctalia" "msg" "media" "next"; } // Example brightness key mappings for brightnessctl. // You can use regular spawn with multiple arguments too (to avoid going through "sh"), // but you need to manually put each argument in separate "" quotes. // XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "1%+"; } // XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "1%-"; } - XF86MonBrightnessUp allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "brightness" "increase"; } - XF86MonBrightnessDown allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "brightness" "decrease"; } + XF86MonBrightnessUp allow-when-locked=true { spawn "noctalia" "msg" "brightness-up"; } + XF86MonBrightnessDown allow-when-locked=true { spawn "noctalia" "msg" "brightness-down"; } // keyboard backlight XF86KbdBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--device=kbd_backlight" "set" "10%+"; } @@ -224,10 +224,10 @@ binds { // Mod+Space { switch-layout "next"; } // Mod+Shift+Space { switch-layout "prev"; } - // Screenshot Annotation via satty - Print { spawn-sh "set -e; grim -t ppm -g \"$(slurp -o -d -F monospace)\" - | satty --filename - --copy-command=wl-copy --annotation-size-factor 2.0 --output-filename=\"$(xdg-user-dir PICTURES)/Screenshots/Screenshot from %Y-%m-%d %H:%M:%S.png\" --actions-on-enter=\"save-to-clipboard,exit\" --brush-smooth-history-size=5 --disable-notifications"; } - Ctrl+Print { screenshot-screen; } - Alt+Print { screenshot-window; } + // Native Noctalia screenshots; output/annotation policy lives in the noctalia config. + Print { spawn "noctalia" "msg" "screenshot-region"; } + Ctrl+Print { spawn "noctalia" "msg" "screenshot-fullscreen"; } + Alt+Print { spawn "noctalia" "msg" "screenshot-fullscreen" "pick"; } // Applications such as remote-desktop clients and software KVM switches may // request that niri stops processing the keyboard shortcuts defined here @@ -248,9 +248,9 @@ binds { Mod+Shift+P { power-off-monitors; } // Utility shortcuts - Mod+Shift+V { spawn "noctalia-shell" "ipc" "call" "launcher" "clipboard"; } - Mod+C { spawn "noctalia-shell" "ipc" "call" "launcher" "calculator"; } + Mod+Shift+V { spawn "noctalia" "msg" "panel-toggle" "clipboard"; } + Mod+C { spawn "noctalia" "msg" "panel-toggle" "launcher" "/calc"; } - Mod+S { spawn "noctalia-shell" "ipc" "call" "controlCenter" "toggle"; } - Mod+E { spawn "noctalia-shell" "ipc" "call" "sessionMenu" "toggle"; } + Mod+S { spawn "noctalia" "msg" "panel-toggle" "control-center"; } + Mod+E { spawn "noctalia" "msg" "panel-toggle" "session"; } } diff --git a/home/linux/gui/niri/conf/noctalia-shell.kdl b/home/linux/gui/niri/conf/noctalia-shell.kdl index 0bfc776e..5396925c 100644 --- a/home/linux/gui/niri/conf/noctalia-shell.kdl +++ b/home/linux/gui/niri/conf/noctalia-shell.kdl @@ -1,4 +1,4 @@ -// https://docs.noctalia.dev/getting-started/compositor-settings/niri/ +// https://docs.noctalia.dev/noctalia/compositor-settings/niri/ window-rule { // Rounded corners for a modern look. @@ -13,8 +13,8 @@ debug { honor-xdg-activation-with-invalid-serial } -// Set the overview wallpaper on the backdrop. +// Set the overview wallpaper on the backdrop (v5 namespace). layer-rule { - match namespace="^noctalia-overview*" + match namespace="^noctalia-backdrop" place-within-backdrop true } diff --git a/home/linux/gui/niri/conf/spawn-at-startup.kdl b/home/linux/gui/niri/conf/spawn-at-startup.kdl index 4cb92318..d6945b8e 100644 --- a/home/linux/gui/niri/conf/spawn-at-startup.kdl +++ b/home/linux/gui/niri/conf/spawn-at-startup.kdl @@ -1,3 +1,3 @@ // Noctalia: use niri spawn-at-startup (systemd user service is deprecated upstream). -// https://docs.noctalia.dev/getting-started/compositor-settings/niri/ -spawn-at-startup "noctalia-shell" +// https://docs.noctalia.dev/noctalia/compositor-settings/niri/ +spawn-at-startup "noctalia" diff --git a/home/linux/gui/niri/default.nix b/home/linux/gui/niri/default.nix index e112eab2..515c266a 100644 --- a/home/linux/gui/niri/default.nix +++ b/home/linux/gui/niri/default.nix @@ -24,11 +24,6 @@ in home.packages = with pkgs; [ # Niri v25.08 will create X11 sockets on disk, export $DISPLAY, and spawn `xwayland-satellite` on-demand when an X11 client connects xwayland-satellite - - # for Screenshot Annotation - slurp - grim - satty ]; xdg.configFile = diff --git a/modules/nixos/desktop.nix b/modules/nixos/desktop.nix index d1305c86..8666602b 100644 --- a/modules/nixos/desktop.nix +++ b/modules/nixos/desktop.nix @@ -46,8 +46,6 @@ in }; }; - # fix https://github.com/ryan4yin/nix-config/issues/10 - security.pam.services.swaylock = { }; }) ]; } diff --git a/outputs/aarch64-linux/tests/home-manager/expr.nix b/outputs/aarch64-linux/tests/home-manager/expr.nix index ee23a91c..e3f477d8 100644 --- a/outputs/aarch64-linux/tests/home-manager/expr.nix +++ b/outputs/aarch64-linux/tests/home-manager/expr.nix @@ -16,7 +16,7 @@ lib.genAttrs hosts ( listeners = hm.services.hypridle.settings.listener; findByAction = action: lib.findFirst (l: (l."on-timeout" or "") == action) { } listeners; screenOff = findByAction "niri msg action power-off-monitors"; - lock = findByAction "noctalia-shell ipc call lockScreen lock"; + lock = findByAction "noctalia msg session lock"; in { homeDirectory = hm.home.homeDirectory;