Merge branch 'main' of gitea.moonarch.de:nevaforget/moonarch

This commit is contained in:
nevaforget committed 2026-09-14 07:27:53 +02:00
commit 11a26e9548
14 files changed
+85 -102

No files matched your search

+8 -7
View File
@@ -7,14 +7,15 @@ Reproducible Arch Linux setup based on archinstall + post-install automation.
- `config/` — archinstall configuration (incl. custom-commands that clone the repo to /opt/moonarch, root-owned)
- `scripts/` — post-install and helper scripts
- `packages/` — package lists (official + AUR), maintained separately
- `defaults/` — XDG configs, shell config, helper binaries, systemd services, udev rules, greetd/regreet config, swaylock config, wallpaper
- `defaults/` — XDG configs, shell config, helper binaries, systemd services, udev rules, greetd/regreet config, gtklock config, wallpaper
## Lock Screen (swaylock)
## Lock Screen (gtklock)
- **Config path is not XDG.** swaylock searches `~/.swaylock/config`, `$XDG_CONFIG_HOME/swaylock/config` and `SYSCONFDIR/swaylock/config` (`/etc/swaylock/config` on Arch) — **never `/etc/xdg/`**. Verified by running swaylock against a throwaway `HOME` containing an invalid option: it rejects the option before it even connects to the compositor, and reports nothing at all when the file sits in `/etc/xdg/`. The config therefore lives in `defaults/etc/swaylock/config` and is installed by an explicit `install` line in the PKGBUILD, deliberately **outside** the generic `defaults/xdg/` → `/etc/xdg/` sweep.
- **No home seeding.** Owning `/etc/swaylock/config` makes the config effective through the package alone. The earlier approach seeded it into `/etc/skel` and existing homes from the `.install` hook; that hook only fires on a moonarch-git install/upgrade and only under `[ ! -f ]`, so a machine that pulled no update since swaylock arrived ran entirely unconfigured — no wallpaper, no Catppuccin ring. `pre_upgrade` retires those copies, but only the pristine ones (`cmp` against the still-old `/etc/xdg/swaylock/config`); an edited copy stays and keeps winning, which is what the home path is for. `moonarch-doctor` reports which file actually wins.
- **Blur is baked into the image.** Upstream swaylock has no blur — `effect-blur` exists only in the `swaylock-effects` fork, which is stuck on 1.7 upstream. So `defaults/backgrounds/wallpaper-blur.jpg` ships next to the plain wallpaper, generated once with `magick wallpaper.jpg -resize 25% -blur 0x12 -resize 4717x2984! -quality 88 -strip wallpaper-blur.jpg`. Downsample-blur-upsample rather than a large-radius blur at full resolution: same look, and the file compresses to 167 KB against the original's 374 KB. Regenerate it whenever the wallpaper changes — nothing derives it automatically.
- **NixOS reads a different path.** nixpkgs leaves meson's `sysconfdir` at `$out/etc`, so `/etc/swaylock/config` is never consulted there. moonix keeps its own `systemd.user.tmpfiles` seed into `~/.config/swaylock/config` (`moonix/modules/desktop.nix`) and substitutes the wallpaper path for a store path — that seed is why moonix is unaffected by the change above.
- **XDG config, no special casing.** gtklock searches `$XDG_CONFIG_HOME/gtklock/config.ini` and `gtklock/config.ini` under every `$XDG_CONFIG_DIRS` entry, so `defaults/xdg/gtklock/config.ini` rides the generic `defaults/xdg/` → `/etc/xdg/` sweep in the PKGBUILD and takes effect through the package alone. No `install` line of its own, no home seeding, no shadowing problem — all of which swaylock needed, because its sysconfdir was not an XDG path. A user copy in `~/.config/gtklock/config.ini` still wins, which is what a user config is for.
- **Modules are where the value is.** `userinfo-module` (avatar, clock) and `powerbar-module` (suspend/reboot/poweroff) are separate packages in `extra`, named bare in `modules=` because gtklock's compiled-in module directory is `/usr/lib/gtklock`. swaylock could do none of this. `playerctl-module` is deliberately not installed: it needs playerctld, which nothing here starts. The avatar comes from AccountsService, which resolves to `~/.face`; with no such file the module warns once and falls back to `avatar-default-symbolic`, and there is no option for the path.
- **Blur is baked into the image.** gtklock cannot blur — GTK3 has no `filter` CSS property at all, and it takes no screenshot of the session, so there is nothing to blur at lock time in the first place. Same as swaylock before it, whose `effect-blur` existed only in the `swaylock-effects` fork. So `defaults/backgrounds/wallpaper-blur.jpg` ships next to the plain wallpaper, generated once with `magick wallpaper.jpg -resize 25% -blur 0x12 -resize 4717x2984! -quality 88 -strip wallpaper-blur.jpg`. Downsample-blur-upsample rather than a large-radius blur at full resolution: same look, and the file compresses to 167 KB against the original's 374 KB. Regenerate it whenever the wallpaper changes — nothing derives it automatically.
- **Two callers, both spawning it directly.** `defaults/xdg/stasis/stasis.rune` (lid close and all three `lock_screen` plans) and `PowerPopout.qml`. There is no Wayland protocol for "lock the session" — ext-session-lock-v1 is how a client *becomes* the lock, not a request a third party sends — and no portal either. logind's `Session.Lock` only emits a signal someone has to be subscribed to, and nothing here is: niri owns `org.freedesktop.ScreenSaver` with `Inhibit`/`UnInhibit` and no `Lock`, and stasis ignores the signal on purpose. `stasis trigger lock-screen` would name the locker once instead of twice, and is not used: the button would then fail silently whenever stasis is down. The plan keeps running after a manual lock anyway, because stasis takes the state from logind's `LockedHint` rather than from having started the locker.
- **`-d` is not `-f`.** swaylock forked once the screen was locked; gtklock forks in `main()` before it has read its config, so a returned `gtklock -d` means "forked", not "locked". Nothing chains off the exit, so it does not matter today. `moonarch.install` rewrites `swaylock`/`moonlock` to `gtklock` in already-seeded `~/.config/stasis/stasis.rune` on upgrade — without that an existing install keeps calling a locker that is no longer there, and a missing binary fails silently in stasis.
## Battery Conservation Mode
@@ -158,7 +159,7 @@ System-wide generic-family defaults via `defaults/etc/fonts/conf.d/65-moonarch-f
## Qt Theming (Catppuccin via Kvantum)
Qt apps (e.g. VLC) get the Catppuccin Mocha look via the **Kvantum** style engine — GTK theming (Colloid) does not cover Qt, and the Qt5 GTK-follow path (`qt5-styleplugins`) is unmaintained and not in the official repos.
Qt apps (e.g. VLC) get the Catppuccin Mocha look via the **Kvantum** style engine — GTK theming does not cover Qt, and the Qt5 GTK-follow path (`qt5-styleplugins`) is unmaintained and not in the official repos.
- **Style — `QT_STYLE_OVERRIDE=kvantum` is the workhorse.** A single value themes **both Qt5 (VLC 3) and Qt6**. `QT_QPA_PLATFORMTHEME` cannot: one value selects either the Qt5 `qt5ct` plugin or the Qt6 `qt6ct` plugin, never both. The style override sidesteps that, so we ship `kvantum` + `kvantum-qt5` (Qt6 + Qt5 style plugins) and **skip `qt5ct`**.
- **Theme:** `kvantum-theme-catppuccin-git` (AUR) installs all flavors to `/usr/share/Kvantum/`; `defaults/xdg/Kvantum/kvantum.kvconfig` selects `catppuccin-mocha-lavender` (matches the ecosystem Lavender accent `#b4befe`).
+16
View File
@@ -1,5 +1,21 @@
# Decisions
## 2026-09-12 – GTK theme: the package was never installed, and it was never Mocha
- **Who**: Dominik, ClaudeCode
- **Why**: Two separate defects, found while porting moonix's Mocha switch back. (1) **Nothing installed a GTK theme at all.** `settings.ini` named `Colloid-Grey-Dark-Catppuccin` and the PKGBUILD symlinked `/usr/share/themes/Colloid-Grey-Dark-Catppuccin/gtk-4.0/` into `/etc/xdg`, but no package in either list ships it: `colloid-catppuccin-theme-git` is a split package of `colloid-icon-theme-git` running `install.sh -s catppuccin`, which installs **icons only**, and `kvantum-theme-catppuccin-git` is Qt. A fresh install therefore got Adwaita and three dangling symlinks. `post-install.sh` even had the error branch for it — "GTK4 theme not found … libadwaita apps will use fallback theme" — which fires on every fresh machine and was read as noise. (2) **The theme was never Mocha.** Colloid's `catppuccin` tweak produces Frappé with a grey accent (base `#292c3c`, selection `#ccd0da`); `#1e1e2e` and `#b4befe` appear nowhere in its `gtk.css`. Kvantum, Zed and the lock screen were all Mocha, so GTK was the one layer out of step — invisible because the two dark bases sit close together.
- **Tradeoffs**: (1) **Which package** — `catppuccin-gtk-theme-mocha`, maintained by Catppuccin itself, shipping the upstream 1.0.3 release zips for all fourteen accents. The alternative was building Colloid from source with the catppuccin tweak, which is what produced Frappé in the first place. No loss in shape either way: Catppuccin's GTK theme *is* Colloid — it carries `vinceliuice/Colloid-gtk-theme` as a git submodule and only recolors it, so widget shapes, radii and spacing are unchanged. (2) **Icons stay Colloid** — `colloid-catppuccin-theme-git` keeps its entry; it is the icon set and has no Mocha counterpart. Its name reads like a GTK theme, which is what hid defect (1); the list now says so in a comment. (3) **The name will not match moonix, ever** — Arch installs the release zips, whose directories carry the full build name including the `+default` tweak marker: `catppuccin-mocha-lavender-standard+default`. nixpkgs builds the same 1.0.3 from source with no tweaks and names it `catppuccin-mocha-lavender-standard`. Neither side can take the other's name without going out of its way, so moonix keeps rewriting this one value when it deploys `settings.ini` — no longer a migration measure but a permanent difference, and documented as such on both sides. (4) **Why the rewrite matters at all** — GTK3 reads `settings.ini` directly, and the dconf entry only reaches applications that ask GSettings, which on Wayland the GTK3 ones do not. A name that does not resolve puts every GTK3 application on Adwaita silently, which is precisely defect (1).
- **How**: `packages/aur.txt` gains `catppuccin-gtk-theme-mocha`, with comments recording what each of the two theme packages actually provides. Theme name updated in `defaults/xdg/gtk-3.0/settings.ini`, `gtk-4.0/settings.ini`, `defaults/etc/greetd/regreet.toml`, `scripts/post-install.sh` (`THEME_NAME`) and the three GTK4 symlinks in the PKGBUILD. `README.md` and `CLAUDE.md` follow. In moonix, `gtkSettings` now rewrites the new name instead of the Colloid one, with the comment rewritten to say the rewrite is permanent.
- **Worth checking on the next fresh install**: that `post-install.sh` no longer takes its "GTK4 theme not found" branch. That message firing is the signal that the theme package is missing again.
## 2026-09-11 – gtklock replaces swaylock
- **Who**: Dominik, ClaudeCode
- **Why**: moonix switched first (`moonix/DECISIONS.md` 2026-09-11) and this follows, so the two distributions agree again and moonix can drop the two `substitute` derivations that were rewriting these configs at deploy time. Two things made the switch worth it. gtklock's modules show an avatar, a clock and power buttons, none of which swaylock can do at all. And the old objection is gone: gtklock 4.0.0 links `libgtk-session-lock.so.0`, so it speaks ext-session-lock-v1 exactly like swaylock and the compositor still holds the lock if the process dies. Only the ≤2.x versions used layer-shell, where a crash unlocked the screen.
- **Tradeoffs**: (1) **Toolkit in the unlock path** — swaylock was picked in 2026-08-14 as "one protocol, no toolkit, least likely to break". gtklock adds GTK3 and two `dlopen`ed modules to the path that decides whether the machine unlocks. Accepted because the part that actually mattered, crash safety, is unchanged. (2) **Config location** — the real prize. gtklock searches `$XDG_CONFIG_DIRS`, so `defaults/xdg/gtklock/config.ini` rides the generic sweep and takes effect through the package alone. The whole apparatus from 2026-08-18 goes: the explicit `install` line in the PKGBUILD, the `pre_upgrade` retirement of seeded home copies, `check_swaylock_config` in `moonarch-doctor`, and the comment in `post-install.sh`. swaylock needed all of it because its sysconfdir was not an XDG path; gtklock needs none. (3) **Blur** — no change and no gain. GTK3 has no `filter` CSS property at all and gtklock takes no screenshot of the session, so there is nothing to blur at lock time. `wallpaper-blur.jpg` stays exactly as it was. (4) **Modules** — `userinfo` and `powerbar` only. `playerctl` needs playerctld, which nothing here starts. Named bare in `modules=` because gtklock's compiled-in module directory really is `/usr/lib/gtklock` on Arch; moonix has to spell out store paths instead, which is why it generates its own config rather than shipping this one. (5) **Two callers, both spawning directly** — `stasis.rune` and `PowerPopout.qml` each start the locker themselves. There is no Wayland protocol for "lock the session": ext-session-lock-v1 is how a client *becomes* the lock, not a request a third party sends, and no portal covers it. logind's `Session.Lock` only emits a signal someone must be subscribed to, and nothing here is — niri owns `org.freedesktop.ScreenSaver` with `Inhibit`/`UnInhibit` and no `Lock`, and stasis ignores the signal deliberately. `xdg-screensaver lock` is no answer either; it is an X11 script whose generic path runs `xautolock -locknow`. (6) **`stasis trigger lock-screen` for the popout** — rejected. It would name the locker once instead of twice, at the price of a Lock button that does nothing, silently, whenever stasis is down. The reason to want it turned out not to exist: the plan continues after a manual lock anyway, because stasis takes the state from logind's `LockedHint` and does not need to have started the locker. Verified by locking by hand and watching DPMS fire on schedule. (7) **`-d` is not `-f`** — swaylock forked once the screen was locked, gtklock forks in `main()` before it has read its config, so a returned `gtklock -d` means "forked", not "locked". Nothing chains off the exit today.
- **How**: `defaults/etc/swaylock/config` deleted, `defaults/xdg/gtklock/config.ini` added (background, two modules, nothing else). `defaults/xdg/stasis/stasis.rune`: `lid_close_action` and the three `lock_screen` commands, plus `@description`. `PowerPopout.qml:56` → `["gtklock", "-d"]`. `packages/official.txt`: `swaylock` → `gtklock gtklock-userinfo-module gtklock-powerbar-module`, all three in `extra`. `moonarch-doctor` loses `check_swaylock_config` and its call — an owned `/etc/xdg` config has no `/usr/share/moonarch` reference copy to compare against, so like `niri/config.kdl` and the GTK `settings.ini` it simply gets no check. `post-install.sh` loses the swaylock comment. In `moonarch-pkgbuilds/moonarch-git`: the `depends` entry, the `install` line for the swaylock config, and both obsolete `pre_upgrade` cleanup blocks.
- **The part that fails silently if forgotten**: `moonarch.install`'s `pre_upgrade` already carried a `sed` pointing seeded `~/.config/stasis/stasis.rune` at swaylock, because that file is copied into the home once and never overwritten. It now rewrites `swaylock`/`swaylock -f`/`moonlock` to `gtklock`. Without it an existing install keeps calling a locker that is no longer installed, and stasis fails silently on a missing binary: it logs the action as started, sees the immediate exit, treats the step as finished and stops there. Rule order matters — the `swaylock -f` rule runs before the bare one, or the bare rule rewrites the inner quotes first and `-f` never matches. This exact failure was observed on the NixOS machine during the switch.
## 2026-08-24 – power-profiles-daemon replaces auto-cpufreq
- **Who**: Dominik, ClaudeCode
+4 -4
View File
@@ -14,9 +14,9 @@ desktop that can be rebuilt from scratch in minutes.
|-----------|--------|-----|
| **Compositor** | [Niri](https://github.com/YaLTeR/niri) | Scrollable tiling — no fixed grid, infinite horizontal workspace. Purpose-built Wayland compositor, not an X11 port. |
| **Greeter** | [greetd](https://sr.ht/~kennylevinsen/greetd/) + [ReGreet](https://github.com/rharish101/ReGreet) | Minimal, Wayland-native login. ReGreet is a GTK4 greeter from the official repos, running inside its own Niri instance and inheriting the system GTK theme. |
| **Lock Screen** | [swaylock](https://github.com/swaywm/swaylock) | ext-session-lock-v1 protocol — compositor guarantees lock on crash. PAM authentication, one Wayland protocol, no toolkit. Background is a blurred copy of the default wallpaper, blurred at build time because upstream swaylock has no blur effect. |
| **Lock Screen** | [gtklock](https://github.com/jovanlanik/gtklock) | ext-session-lock-v1 through gtk-session-lock — compositor guarantees lock on crash. PAM authentication. Modules add the avatar, clock and power buttons swaylock had no way to show. Background is a blurred copy of the default wallpaper, blurred at build time: GTK3 has no blur and gtklock takes no screenshot. |
| **Power Menu** | Quickshell popout (`PowerPopout.qml`) | Lock, logout, hibernate, reboot, shutdown; every action except lock needs a second click. Part of the bar, so it needs no own package. |
| **Idle Manager** | [stasis](https://aur.archlinux.org/packages/stasis) + [wayland-pipewire-idle-inhibit](https://github.com/rafaelrc7/wayland-pipewire-idle-inhibit) | Separate AC/battery power plans. Brightness dimming, DPMS, lock (via swaylock), and suspend on configurable timeouts. The companion inhibitor holds a Wayland idle-inhibitor while audio plays — keeps the screen awake during windowed browser video, which stasis' pactl detection skips by design. |
| **Idle Manager** | [stasis](https://aur.archlinux.org/packages/stasis) + [wayland-pipewire-idle-inhibit](https://github.com/rafaelrc7/wayland-pipewire-idle-inhibit) | Separate AC/battery power plans. Brightness dimming, DPMS, lock (via gtklock), and suspend on configurable timeouts. The companion inhibitor holds a Wayland idle-inhibitor while audio plays — keeps the screen awake during windowed browser video, which stasis' pactl detection skips by design. |
| **Bar** | [Waybar](https://github.com/Alexays/Waybar) | Wayland-native, highly customizable. Niri workspace/window modules via community plugins. |
| **Launcher** | [Walker](https://github.com/abenz1267/walker) + [Elephant](https://github.com/abenz1267/elephant) | Wayland-native GTK4 launcher with built-in providers for apps, bluetooth, audio, files, and calculator. Dmenu mode for custom scripts (VPN, CPU governor). |
| **Terminal** | [Foot](https://codeberg.org/dnkl/foot) | Fast, minimal Wayland-native terminal. Server mode for instant window spawning. |
@@ -25,7 +25,7 @@ desktop that can be rebuilt from scratch in minutes.
| **Display Management** | [kanshi](https://sr.ht/~emersion/kanshi/) + [wdisplays-persistent](https://github.com/sfs-pra/wdisplays) | kanshi auto-switches output profiles on hotplug. wdisplays-persistent saves changes directly to kanshi config. |
| **Notifications** | [swaync](https://github.com/ErikReider/SwayNotificationCenter) | GTK4 notification daemon with DND toggle, grouping, MPRIS support. Fractional scaling via native GTK4. |
| **Clipboard** | [cliphist](https://github.com/sentriz/cliphist) + quickshell | Clipboard history stored in runtime dir, wiped on session start. The quickshell bar provides the picker (`Super+C`) with search, image thumbnails, and per-entry delete. |
| **GTK Theme** | Colloid-Grey-Dark-Catppuccin | Catppuccin Mocha palette, grey accent, explicit dark variant. |
| **GTK Theme** | catppuccin-mocha-lavender-standard+default | Catppuccin Mocha with the Lavender accent, matching Kvantum and the lock screen. Catppuccin's GTK theme is Colloid recolored -- it carries vinceliuice's theme as a submodule -- so the widget shapes are unchanged from before. |
| **Icons** | Colloid-Grey-Catppuccin-Dark | Catppuccin-colored icon set matching the GTK theme. |
| **Cursor** | Sweet-cursors | Visible on dark backgrounds without clashing. |
| **Font** | UbuntuSans Nerd Font | Clean sans-serif with full Nerd Font glyph coverage for bar/terminal icons. |
@@ -220,7 +220,7 @@ Quickshell config in this repository:
| Was | Now |
|-----|-----|
| moongreet (greetd greeter) | [ReGreet](https://github.com/rharish101/ReGreet), `greetd-regreet` |
| moonlock (screen locker) | [swaylock](https://github.com/swaywm/swaylock) |
| moonlock (screen locker) | [gtklock](https://github.com/jovanlanik/gtklock) |
| moonset (power menu) | `PowerPopout.qml` in the Quickshell config |
What remains in the [custom package repository](https://gitea.moonarch.de/nevaforget/moonarch-pkgbuilds)
+1 -1
View File
@@ -10,7 +10,7 @@ application_prefer_dark_theme = true
cursor_theme_name = "Sweet-cursors"
font_name = "UbuntuSans Nerd Font 12"
icon_theme_name = "Colloid-Grey-Catppuccin-Dark"
theme_name = "Colloid-Grey-Dark-Catppuccin"
theme_name = "catppuccin-mocha-lavender-standard+default"
[commands]
reboot = ["systemctl", "reboot"]
-53
View File
@@ -1,53 +0,0 @@
# ABOUTME: Moonarch default swaylock configuration, Catppuccin Mocha.
# ABOUTME: Installed to /etc/swaylock/config; callers pass -f themselves.
#
# Each line is turned into a --long-option by swaylock, so key=value applies.
# Colors are rrggbb[aa] without a leading '#'.
#
# swaylock searches ~/.swaylock/config, $XDG_CONFIG_HOME/swaylock/config and
# SYSCONFDIR/swaylock/config (= /etc/swaylock/config) — never /etc/xdg/. This
# file therefore ships to /etc/swaylock/, not to /etc/xdg/swaylock/. A user copy
# in ~/.config/swaylock/config still wins, since the home paths are searched first.
# Blurred variant of the default wallpaper. swaylock has no blur of its own —
# effect-blur exists only in the swaylock-effects fork — so the blur is baked
# into the image at build time.
image=/usr/share/moonarch/wallpaper-blur.jpg
scaling=fill
font=UbuntuSans Nerd Font
font-size=20
indicator-radius=100
indicator-thickness=8
indicator-caps-lock
show-failed-attempts
# Ring: lavender idle, blue while verifying, red on failure, yellow when cleared
ring-color=b4befe
ring-ver-color=89b4fa
ring-wrong-color=f38ba8
ring-clear-color=f9e2af
ring-caps-lock-color=f9e2af
# Inside of the ring: base with alpha, so the wallpaper stays visible
inside-color=1e1e2ecc
inside-ver-color=1e1e2ecc
inside-wrong-color=1e1e2ecc
inside-clear-color=1e1e2ecc
# Keypress feedback
key-hl-color=a6e3a1
bs-hl-color=f38ba8
caps-lock-key-hl-color=a6e3a1
caps-lock-bs-hl-color=f38ba8
text-color=cdd6f4
text-ver-color=cdd6f4
text-wrong-color=f38ba8
text-clear-color=cdd6f4
text-caps-lock-color=f9e2af
# No separate outline; the ring carries the state color
line-color=00000000
separator-color=00000000
+1 -1
View File
@@ -2,7 +2,7 @@
# ABOUTME: User overrides go in ~/.config/gtk-3.0/settings.ini
[Settings]
gtk-theme-name=Colloid-Grey-Dark-Catppuccin
gtk-theme-name=catppuccin-mocha-lavender-standard+default
gtk-icon-theme-name=Colloid-Grey-Catppuccin-Dark
gtk-font-name=UbuntuSans Nerd Font 11
gtk-cursor-theme-name=Sweet-cursors
+1 -1
View File
@@ -2,7 +2,7 @@
# ABOUTME: User overrides go in ~/.config/gtk-4.0/settings.ini
[Settings]
gtk-theme-name=Colloid-Grey-Dark-Catppuccin
gtk-theme-name=catppuccin-mocha-lavender-standard+default
gtk-icon-theme-name=Colloid-Grey-Catppuccin-Dark
gtk-cursor-theme-name=Sweet-cursors
gtk-cursor-theme-size=24
+34
View File
@@ -0,0 +1,34 @@
# ABOUTME: Moonarch default gtklock configuration.
# ABOUTME: Installed to /etc/xdg/gtklock/config.ini; callers pass -d themselves.
#
# gtklock searches $XDG_CONFIG_HOME/gtklock/config.ini and gtklock/config.ini
# under every $XDG_CONFIG_DIRS entry, so /etc/xdg is enough and this file takes
# effect through the package alone. It goes through the generic defaults/xdg/
# sweep in the PKGBUILD like any other XDG config -- unlike swaylock before it,
# whose sysconfdir was not an XDG path and needed an install line of its own.
#
# Every option here is also a command-line flag; `gtklock --help-config` lists
# them. A user copy in ~/.config/gtklock/config.ini wins over this one.
[main]
# Blurred variant of the default wallpaper. gtklock has no blur of its own --
# GTK3 has no `filter` CSS property at all -- and it takes no screenshot of the
# session, so there is nothing to blur at lock time either way. The blur is
# baked into the image at build time, as it was for swaylock.
background=/usr/share/moonarch/wallpaper-blur.jpg
# Bare names resolve against gtklock's compiled-in module directory, which is
# /usr/lib/gtklock here. playerctl-module is deliberately absent: it needs
# playerctld, which nothing in moonarch starts.
modules=userinfo-module;powerbar-module
# No gtk-theme key on purpose. gtklock is GTK3 and reads the session theme from
# /etc/xdg/gtk-3.0/settings.ini, so the theme name lives in exactly one place.
#
# powerbar needs no configuration: its built-in commands are `systemctl reboot`,
# `systemctl -i poweroff` and `systemctl suspend`.
#
# userinfo takes the avatar from AccountsService, which resolves to ~/.face.
# With no such file it warns once and falls back to avatar-default-symbolic from
# the icon theme; there is no option for the path.
@@ -17,7 +17,7 @@ PopoutPanel {
root.pending = ""
// One process for all five actions: the popout closes on activation, so two
// actions cannot be in flight at once. `swaylock -f` daemonises itself, the
// actions cannot be in flight at once. `gtklock -d` daemonises itself, the
// systemctl and loginctl calls are one-shot.
Process {
id: actionProc
@@ -53,7 +53,7 @@ PopoutPanel {
"label": qsTr("Lock"),
"icon": 0xf033e, // md-lock
"confirm": false,
"cmd": ["swaylock", "-f"]
"cmd": ["gtklock", "-d"]
},
{
"name": "logout",
+5 -5
View File
@@ -2,7 +2,7 @@
# Manages screen dimming, DPMS, lock, and suspend timers
@author "Moonarch"
@description "Idle management for Moonarch (Niri + swaylock)"
@description "Idle management for Moonarch (Niri + gtklock)"
# TIMEOUTS ARE CUMULATIVE, NOT ABSOLUTE.
#
@@ -56,7 +56,7 @@ default:
# Lid actions (laptop only). Locks only; the suspend on lid close comes from
# logind's HandleLidSwitch default, not from here.
lid_close_action "swaylock -f"
lid_close_action "gtklock -d"
lid_open_action ""
# Every binary named in a command below has to be on the PATH of the unit
@@ -80,7 +80,7 @@ default:
# is empty on a desktop, so the step would be a no-op.
lock_screen:
timeout 300 # 5 min idle
command "swaylock"
command "gtklock"
end
dpms:
@@ -103,7 +103,7 @@ default:
lock_screen:
timeout 60 # 6 min idle
command "swaylock"
command "gtklock"
end
dpms:
@@ -127,7 +127,7 @@ default:
lock_screen:
timeout 60 # 2 min idle
command "swaylock"
command "gtklock"
end
dpms:
+9
View File
@@ -5,6 +5,15 @@
# paru
# Theming
# GTK widgets. Maintained by Catppuccin itself; ships the upstream release
# zips, so the theme directory carries the full build name including the
# `+default` tweak marker. NixOS builds the same 1.0.3 from source without
# tweaks and therefore names it without that suffix -- moonix rewrites this
# name when it deploys the settings.ini, and has to keep doing so.
catppuccin-gtk-theme-mocha
# Icons only, despite the name: a split package of colloid-icon-theme-git
# running `install.sh -s catppuccin`. It installs nothing under
# /usr/share/themes, which is why the GTK theme above has to be its own entry.
colloid-catppuccin-theme-git
kvantum-theme-catppuccin-git
+3 -1
View File
@@ -72,7 +72,9 @@ brightnessctl
nwg-look
greetd
greetd-regreet
swaylock
gtklock
gtklock-userinfo-module
gtklock-powerbar-module
polkit-gnome
# File Manager / XDG
-23
View File
@@ -71,27 +71,6 @@ check_user_service() {
fi
}
# swaylock reads ~/.swaylock/config, $XDG_CONFIG_HOME/swaylock/config and
# /etc/swaylock/config, in that order. Moonarch owns the last one, so a copy in
# the home shadows it — silently, and a stale one from the retired seeding drops
# the blurred wallpaper. Report the file that actually wins.
check_swaylock_config() {
local system="/etc/swaylock/config"
local home_cfg
for home_cfg in "$HOME/.swaylock/config" "${XDG_CONFIG_HOME:-$HOME/.config}/swaylock/config"; do
if [[ -f "$home_cfg" ]]; then
warn "swaylock config: $home_cfg shadows $system"
return
fi
done
if [[ -f "$system" ]]; then
pass "swaylock config: $system"
else
fail "swaylock config: $system (missing — swaylock starts unconfigured)"
fi
}
check_config_match() {
local deployed="$1"
local source="$2"
@@ -238,8 +217,6 @@ check_config_match "/etc/greetd/niri-greeter.kdl" "$SRC/greetd/niri-greeter.k
check_config_match "/etc/greetd/regreet.toml" "$SRC/greetd/regreet.toml"
check_config_match "/etc/greetd/regreet.css" "$SRC/greetd/regreet.css"
check_swaylock_config
# --- 5. Helper Scripts ---
section "Helper Scripts"
+1 -4
View File
@@ -87,7 +87,7 @@ fi
# --- User-level GTK4 symlinks for libadwaita apps ---
THEME_NAME="Colloid-Grey-Dark-Catppuccin"
THEME_NAME="catppuccin-mocha-lavender-standard+default"
THEME_GTK4="/usr/share/themes/$THEME_NAME/gtk-4.0"
if [[ -d "$THEME_GTK4" ]]; then
@@ -128,9 +128,6 @@ if [[ ! -f "$HOME/.config/stasis/stasis.rune" && -f /etc/xdg/stasis/stasis.rune
install -Dm644 /etc/xdg/stasis/stasis.rune "$HOME/.config/stasis/stasis.rune"
fi
# swaylock needs no seeding: its config ships to /etc/swaylock/config, which is
# swaylock's own SYSCONFDIR path, so the package alone makes it effective.
# --- Enable systemd user services ---
log "Enabling systemd user services..."