docs: describe the session that is actually installed
CLAUDE.md and README.md still named Waybar as the bar, Walker as the
launcher and swaync as the notification daemon. quickshell took all three
over in July, and the packages left the lists in 22c2b92, so the docs were
describing a session nobody runs.
Corrected: component table, startup sequence, keybinds, config-override
table and the user-service list in README; the quickshell and Waybar
sections, the battery and nightlight toggles and the fontconfig note in
CLAUDE.md. The Waybar merger section is kept and marked retired -- the
configs and scripts are still shipped.
Two things checked against the source rather than assumed: quickshell is
started by quickshell.service, not spawn-at-startup, and the Alt+W toggle
is already gone from config.kdl. moonarch-waybar-updates stays live --
UpdatesIndicator.qml calls it.
This commit is contained in:
1 parent
22c2b92aee
commit
8f1309c596
2 files changed
+32
-35
No files matched your search
@@ -19,8 +19,8 @@ Reproducible Arch Linux setup based on archinstall + post-install automation.
|
||||
|
||||
## Battery Conservation Mode
|
||||
|
||||
Laptops with `charge_control_end_threshold` support (ThinkPad, Framework, etc.) get a Waybar toggle:
|
||||
- Clicking the battery module toggles the charge limit between 80% and 100%
|
||||
Laptops with `charge_control_end_threshold` support (ThinkPad, Framework, etc.) get a bar toggle (`BatteryPopout.qml`; the Waybar module was the original home):
|
||||
- The toggle switches the charge limit between 80% and 100%
|
||||
- When conservation is active, a ♥ icon appears next to the battery indicator
|
||||
- State is persisted in `/var/lib/moonarch/batsaver-threshold` and restored on boot via a systemd service (`moonarch-batsaver-restore`)
|
||||
- Toggle flow: `moonarch-batsaver-toggle` (user script) reads sysfs, decides 80↔100, calls `pkexec /usr/bin/moonarch-batsaver-apply $NEW` for the privileged sysfs+state write step. Standard pkexec prompt (password once per session cache)
|
||||
@@ -42,7 +42,7 @@ Rationale + measurements: `DECISIONS.md` (2026-07-29).
|
||||
|
||||
## Nightlight (Blue Light Filter)
|
||||
|
||||
Waybar toggle for wlsunset (Wayland-native blue light filter), persistent state via systemd:
|
||||
Bar toggle for wlsunset (Wayland-native blue light filter), persistent state via systemd. The `group/brightness` module below was the Waybar original; the live control is the bar's nightlight indicator:
|
||||
- `wlsunset.service` (systemd user service) with `After=kanshi.service` — starts only once all outputs are configured
|
||||
- **Default OFF** — fresh installs start without the filter. The PKGBUILD deliberately creates NO symlink for `wlsunset` in `/etc/systemd/user/graphical-session.target.wants/`, and post-install.sh does not enable the service.
|
||||
- Clicking the nightlight module in `group/brightness` toggles wlsunset on/off (`enable --now` / `disable --now`)
|
||||
@@ -54,6 +54,8 @@ Waybar toggle for wlsunset (Wayland-native blue light filter), persistent state
|
||||
|
||||
## Waybar Config Merger (moonarch-waybar)
|
||||
|
||||
**Waybar is no longer installed** — it left `packages/official.txt` on 2026-09-14 together with swaync and the two `waybar-niri-*` modules. Everything below describes machinery that is still in the repo and still shipped by the package (`defaults/xdg/waybar/`, `defaults/bin/moonarch-waybar*`), but has nothing to start any more; the Alt+W toggle is already gone from `config.kdl`. It is kept, not maintained. `moonarch-waybar-updates` is the one piece with a live caller (`UpdatesIndicator.qml`).
|
||||
|
||||
Waybar is started via `moonarch-waybar` (not directly). The wrapper merges an optional user config (`~/.config/waybar/userconfig`) with the system config (`/etc/xdg/waybar/config`):
|
||||
- `prepend`/`append` keys in the userconfig extend the `modules-left`/`modules-center`/`modules-right` arrays
|
||||
- All other top-level keys are inserted as module definitions via object merge
|
||||
@@ -65,7 +67,7 @@ Waybar is started via `moonarch-waybar` (not directly). The wrapper merges an op
|
||||
|
||||
## Quickshell Bar
|
||||
|
||||
quickshell is the **default bar and notification daemon**, spawned by niri as `quickshell -c moonarch` (`defaults/xdg/niri/config.kdl`). It is shipped as a **named config** at `/etc/xdg/quickshell/moonarch/` — the officially recommended way to distribute a quickshell config as a distro package (`$XDG_CONFIG_DIRS/quickshell/<name>`). Both Waybar and swaync stay fully installed as **reserves** (no hard deletes) but are no longer autostarted: Waybar toggles via **Alt+W** (`pkill quickshell` ⇄ `moonarch-waybar`, restart is `quickshell -c moonarch`); swaync's `spawn-at-startup` is commented out so it releases `org.freedesktop.Notifications` for quickshell's own `NotificationServer`. To switch back: re-enable swaync's spawn and drop quickshell's `NotifToastHost` from `shell.qml`.
|
||||
quickshell is the **default bar and notification daemon**, started by `quickshell.service` (systemd user unit, so a crash restarts it — `spawn-at-startup` left the session without a bar). It is shipped as a **named config** at `/etc/xdg/quickshell/moonarch/` — the officially recommended way to distribute a quickshell config as a distro package (`$XDG_CONFIG_DIRS/quickshell/<name>`). Waybar and swaync were kept as **reserves** when quickshell took over in July; that ended on 2026-09-14, when both left the package lists. Their configs and scripts are still in the repo and still shipped, and swaync's `spawn-at-startup` is still there commented out — but neither binary is installed, so neither path leads anywhere until the package is put back. The comment stays because `org.freedesktop.Notifications` belongs to quickshell's own `NotificationServer`.
|
||||
|
||||
**Customization = composition, not a toggle layer.** quickshell has no native settings/toggle/override/merge concept ([verified](https://quickshell.org/docs/configuration/intro/)) — a config is composable QML. moonarch ships the widgets as an importable component library; the composition lives in `shell.qml`.
|
||||
|
||||
@@ -156,7 +158,7 @@ System-wide generic-family defaults via `defaults/etc/fonts/conf.d/65-moonarch-f
|
||||
- `sans-serif` → UbuntuSans Nerd Font, `monospace` → UbuntuSansMono Nerd Font
|
||||
- Number **65**: loads after `60-latin.conf`, so the moonarch prefs beat the stock default (Noto/DejaVu). `local.conf` (at 51 via `51-local.conf`) loads too early and is overridden by 60-latin — therefore **do not** use it (it is also reserved for local user overrides).
|
||||
- Aliases need `binding="strong"` — a weak `<prefer>` (fontconfig default) ranks behind the effective generic fallback and does not take effect.
|
||||
- Only applies to apps that use generic families (e.g. Firefox web fallback). moonarch apps (Waybar, foot, GTK, walker, swaync) set the font explicitly.
|
||||
- Only applies to apps that use generic families (e.g. Firefox web fallback). moonarch apps (quickshell, foot, GTK) set the font explicitly.
|
||||
|
||||
## Qt Theming (Catppuccin via Kvantum)
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ configured Niri (scrollable tiling Wayland) system with Catppuccin Mocha theming
|
||||
|
||||
Moonarch combines archinstall for the base system with post-install automation that
|
||||
handles packages, XDG defaults, system services, greeter, idle management, and a
|
||||
Walker launcher with native providers and dmenu-based helper scripts. The result is a complete development/productivity
|
||||
a Quickshell bar that carries the launcher, the notifications and the popouts. The result is a complete development/productivity
|
||||
desktop that can be rebuilt from scratch in minutes.
|
||||
|
||||
## Why These Choices
|
||||
@@ -17,20 +17,20 @@ desktop that can be rebuilt from scratch in minutes.
|
||||
| **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 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). |
|
||||
| **Bar** | [Quickshell](https://quickshell.org/) | Composable QML bar shipped as a named config. Own widgets and popouts for audio, network, bluetooth, battery, brightness, CPU governor, camera, clipboard, calendar and power. Also the notification daemon. |
|
||||
| **Launcher** | Quickshell popout (`LauncherPopout.qml`) | Application launcher over `DesktopEntries`, bound to `Super+Space`. Launches through `app2unit` so each app gets its own systemd scope. Terminal entries go through `app2unit-term`, which needs `xdg-terminal-exec`. |
|
||||
| **Terminal** | [Foot](https://codeberg.org/dnkl/foot) | Fast, minimal Wayland-native terminal. Server mode for instant window spawning. |
|
||||
| **Shell** | Zsh | Programmable completion, FZF integration, syntax highlighting. |
|
||||
| **Audio** | PipeWire | Drop-in replacement for PulseAudio/JACK with lower latency. RNNoise input denoising configured out of the box. |
|
||||
| **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. |
|
||||
| **Notifications** | Quickshell `NotificationServer` | Owns `org.freedesktop.Notifications`; toasts plus a notification popout in the bar. swaync was the previous daemon and was dropped on 2026-09-14. |
|
||||
| **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** | 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. |
|
||||
| **Wallpaper** | [waypaper](https://github.com/anufrievroman/waypaper) + [awww](https://codeberg.org/LGFae/awww) | waypaper provides GUI selection, awww handles animated transitions (60 FPS, 2s crossfade). |
|
||||
| **Night Light** | [wlsunset](https://sr.ht/~kennylevinsen/wlsunset/) | Wayland-native blue light filter via wlr-gamma-control. Toggleable from Waybar brightness group. |
|
||||
| **Night Light** | [wlsunset](https://sr.ht/~kennylevinsen/wlsunset/) | Wayland-native blue light filter via wlr-gamma-control. Toggleable from the bar's nightlight indicator. |
|
||||
| **Firewall** | UFW | Simple deny-incoming/allow-outgoing default. Sane baseline without iptables complexity. |
|
||||
| **AUR Helper** | [paru](https://github.com/Morganamilo/paru) | Rust-based, pacman-compatible. Supports the custom package repo that ships the moonarch package itself. |
|
||||
|
||||
@@ -93,10 +93,9 @@ scripts/
|
||||
defaults/
|
||||
xdg/ System-wide XDG configs (deployed to /etc/xdg/)
|
||||
niri/config.kdl Compositor: layout, keybinds, startup apps
|
||||
waybar/config, style.css Bar: modules, layout, Catppuccin styling
|
||||
walker/config.toml, themes/ Launcher: Walker config + moonarch theme (Catppuccin Mocha)
|
||||
quickshell/moonarch/ Bar: widgets, popouts, theme (QML component library)
|
||||
foot/foot.ini Terminal: font, colors, keybinds
|
||||
swaync/config.json, style.css Notifications: appearance, behavior, MPRIS
|
||||
waybar/, walker/, swaync/ Retired — configs kept, packages no longer installed
|
||||
kanshi/config Display profiles (empty seed, user-configured via wdisplays)
|
||||
stasis/stasis.rune Idle manager: AC/battery power plans
|
||||
pipewire/ Audio: RNNoise input denoising
|
||||
@@ -105,26 +104,23 @@ defaults/
|
||||
gtk-3.0/, gtk-4.0/ GTK theme settings
|
||||
|
||||
bin/ Helper scripts (deployed to /usr/bin/)
|
||||
moonarch-sink-switcher Audio output switcher (walker dmenu + pactl)
|
||||
moonarch-vpn VPN connection manager (walker dmenu + nmcli)
|
||||
moonarch-cpugov Power profile switcher (walker dmenu + powerprofilesctl)
|
||||
moonarch-btnote Bluetooth device battery monitor (upower + notify-send)
|
||||
moonarch-capsnote Caps Lock toggle notification
|
||||
moonarch-waybar-cpugov Waybar module: CPU governor status
|
||||
moonarch-waybar-gpustat Waybar module: GPU utilization
|
||||
moonarch-waybar-hidpp Waybar module: Logitech HID++ device battery
|
||||
moonarch-waybar-batsaver Waybar module: battery conservation mode indicator
|
||||
moonarch-waybar-updates Waybar module: package update checker (repo + AUR)
|
||||
moonarch-waybar-updates Package update checker (repo + AUR); read by the bar's UpdatesIndicator
|
||||
moonarch-batsaver-toggle Toggle battery charge limit (80% ↔ 100%)
|
||||
moonarch-nightlight Toggle wlsunset blue light filter on/off
|
||||
moonarch-waybar-nightlight Waybar module: nightlight status
|
||||
moonarch-camera-list List cameras with their on/off state
|
||||
moonarch-camera-toggle Switch one camera on or off (via pkexec)
|
||||
moonarch-camera-boot Switch all cameras off (run at boot by moonarch-camera.service)
|
||||
moonarch-waybar* Retired with Waybar — wrapper plus the cpugov/gpustat/hidpp/
|
||||
batsaver/nightlight module scripts (moonarch-waybar-updates excepted)
|
||||
moonarch-sink-switcher Retired with walker — dmenu helpers with no dmenu left
|
||||
moonarch-vpn (audio sink, VPN, power profile; the bar's popouts cover all three)
|
||||
moonarch-cpugov
|
||||
|
||||
shell/zshrc Zsh config: prompt, aliases, FZF, completion
|
||||
etc/greetd/ greetd daemon, greeter Niri config, regreet config + CSS
|
||||
etc/systemd/user/ Systemd user services (cliphist, kanshi, walker, nautilus)
|
||||
etc/systemd/user/ Systemd user services (quickshell, cliphist, kanshi, nautilus, wlsunset)
|
||||
etc/systemd/system/ System services (battery conservation restore, camera switch-off on boot)
|
||||
backgrounds/wallpaper.jpg Default wallpaper (shared by desktop, greeter, lock screen)
|
||||
```
|
||||
@@ -137,13 +133,13 @@ greetd ─► niri (greeter instance) ─► regreet ─► user authenticates
|
||||
▼
|
||||
niri (user session)
|
||||
│
|
||||
┌──────────┬────────┬────────┬──────────┐
|
||||
▼ ▼ ▼ ▼ ▼
|
||||
waybar swaync foot waypaper nm-applet wlsunset
|
||||
(bar) (notify) (server) (wallpaper) (VPN) (nightlight)
|
||||
┌────────┬──────────┬──────────┐
|
||||
▼ ▼ ▼ ▼
|
||||
foot waypaper nm-applet polkit agent
|
||||
(server) (wallpaper) (VPN) (auth)
|
||||
|
||||
systemd user services (graphical-session.target):
|
||||
kanshi, cliphist, walker, nautilus
|
||||
quickshell (bar + notifications), kanshi, cliphist, nautilus, wlsunset
|
||||
```
|
||||
|
||||
## Keybinds (Default)
|
||||
@@ -151,7 +147,7 @@ greetd ─► niri (greeter instance) ─► regreet ─► user authenticates
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| `Super+Return` | Open terminal (foot) |
|
||||
| `Super+Space` | App launcher (walker) |
|
||||
| `Super+Space` | App launcher (Quickshell popout) |
|
||||
| `Super+Q` | Close window |
|
||||
| `Super+O` / `Super+Tab` | Overview |
|
||||
| `Super+F` | Maximize column |
|
||||
@@ -163,8 +159,8 @@ greetd ─► niri (greeter instance) ─► regreet ─► user authenticates
|
||||
| `Super+1-9` | Switch workspace |
|
||||
| `Super+C` | Clipboard history |
|
||||
| `Super+E` | File manager |
|
||||
| `Super+A` | Audio control (walker) |
|
||||
| `Super+N` | VPN manager |
|
||||
| `Super+A` | Audio control (Quickshell popout) |
|
||||
| `Super+N` | Network / VPN (Quickshell popout) |
|
||||
| `Mod+M` | Media player (Quickshell popout) |
|
||||
| `Mod+Escape` | Session menu (Quickshell popout) |
|
||||
| `Print` | Screenshot |
|
||||
@@ -178,10 +174,8 @@ All system configs live in `/etc/xdg/` and can be overridden per-user in `~/.con
|
||||
| Component | System Default | User Override |
|
||||
|-----------|---------------|---------------|
|
||||
| Niri | `/etc/xdg/niri/config.kdl` | `~/.config/niri/config.kdl` (includes system config) |
|
||||
| Waybar | `/etc/xdg/waybar/` | `~/.config/waybar/` |
|
||||
| Walker | `/etc/xdg/walker/` | `~/.config/walker/` |
|
||||
| Quickshell | `/etc/xdg/quickshell/moonarch/` | `~/.config/quickshell/moonarch/shell.qml` (copy and recompose) |
|
||||
| Foot | `/etc/xdg/foot/foot.ini` | `~/.config/foot/foot.ini` |
|
||||
| swaync | `/etc/xdg/swaync/` | `~/.config/swaync/` |
|
||||
| kanshi | `/etc/xdg/kanshi/config` | `~/.config/kanshi/config` |
|
||||
| PipeWire | `/etc/xdg/pipewire/` | `~/.config/pipewire/` |
|
||||
| Zsh | `/etc/zsh/zshrc.moonarch` | `~/.zshrc` + `~/.zshrc.d/` |
|
||||
@@ -204,12 +198,13 @@ are part of the system and updated via `paru -Syu`.
|
||||
|
||||
| Service | Purpose |
|
||||
|---------|---------|
|
||||
| quickshell | Bar and notification daemon (restarted on crash) |
|
||||
| cliphist | Clipboard history (wipes on session start, stores in runtime dir) |
|
||||
| kanshi | Dynamic display configuration (auto-switch output profiles on hotplug) |
|
||||
| nautilus | File manager preload (faster first launch) |
|
||||
| stasis | Idle manager (dimming, DPMS, lock, suspend on AC/battery plans) |
|
||||
| wayland-pipewire-idle-inhibit | Holds a Wayland idle-inhibitor while audio plays (keeps screen awake for windowed browser video that stasis skips) |
|
||||
| walker | Walker application launcher (GTK4 service mode for instant startup) |
|
||||
| wlsunset | Blue light filter (off by default; enabled per user) |
|
||||
|
||||
## Moonarch Ecosystem
|
||||
|
||||
|
||||
Reference in new issue
Block a user