114 Commits

Author SHA1 Message Date
89c3a9261e feat: add cursor-theme to GTK4 defaults for greeter
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
GTK3 defaults already had gtk-cursor-theme-name + size; GTK4 did not. Moongreet (GTK4) under greetd therefore fell back to the default cursor even with XCURSOR_THEME set on cage. Add the two lines so GTK4 apps pick up Sweet-cursors from system defaults before any window is created.
2026-04-24 10:53:26 +02:00
e4ea267b6b feat: set cursor theme in moongreet config for greeter
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Moongreet v0.9.0 reads cursor-theme/cursor-size from its TOML config
because GTK4 under greetd does not honour XCURSOR_THEME. Ship the
Sweet-cursors setting here so the greeter renders the intended cursor
on a fresh install without needing the env-prefix hack in greetd.
2026-04-24 08:57:28 +02:00
8485a63ab7 fix(moonup): read prompts from /dev/tty, robust GUI pause
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Pacman/paru can drain or close stdin, so after the first interactive step
the EXIT trap's pause was silently skipped (the `-t 0` check failed) and
every subsequent confirm() prompt hit EOF — which with `[[ -z $response ]]`
auto-accepted, letting install/remove actions run unattended.

- _pause_on_exit: drop the `-t 0` guard and read from /dev/tty
- confirm(): read from /dev/tty so EOF on stdin can't masquerade as "yes"
- Move the trap installation above the gettext i18n init so an early
  failure (e.g. missing gettext) still triggers the pause message.
2026-04-23 08:08:52 +02:00
6e14258ad9 fix(doctor): drop obsolete paru repo check, cover walker + nautilus
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
The `[moonarch-pkgbuilds]` paru-repo check was a false failure: that
mechanism was retired on 2026-04-20 and the install hook strips the
legacy paru.conf section on upgrade.

Audit of the rest of the doctor surfaced two related gaps — the
user-services loop skipped `walker.service` and `nautilus.service`,
even though moonarch-git ships both and enables them via
graphical-session.target.wants. Added them to the loop and filled in
the missing `wlsunset` in the CLAUDE.md listing.
2026-04-22 08:56:23 +02:00
9432bc4831 fix(post-install): seed stasis config into user home
Stasis ignores /etc/xdg/ and only reads ~/.config/stasis/stasis.rune
(primary) or /etc/stasis/stasis.rune (fallback). On first start with no
user config it writes its own hardcoded default, so Moonarch's tuned
idle plans were never active on fresh installs.

Seed the template from /etc/xdg/stasis/stasis.rune into the user home
before stasis ever starts, only if the user file is missing. See
DECISIONS.md for verification against upstream v1.1.0.
2026-04-22 08:49:04 +02:00
373bfd4a9b fix(moonup): keep terminal open on errors via EXIT trap
The previous end-of-script `read` never ran when `set -e` aborted mid-way
(pacman conflict, paru failure, Ctrl+C), so foot closed on errors —
exactly when the user most needs to see the output.

Move the pause into a trap on EXIT, gated by `MOONUP_WAIT=1` so CLI use
stays non-interactive. Waybar on-click now sets the env var.
2026-04-22 08:23:25 +02:00
c2cee85488 chore: drop moongreet polkit rule, now shipped by moongreet-git
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
The rule was never installed by any PKGBUILD from this repo anyway.
Moved to moongreet/config/polkit/ in v0.8.3 where it belongs — moonarch
should not own greeter-specific auth rules.
2026-04-21 09:12:11 +02:00
971a6eb577 refactor(install): restore fresh-install flow, drop transform.sh and personas
Long-standing gaps in post-install.sh plus cleanup:

- post-install.sh:18 was `sudo pacman -S paru` on the wrong
  assumption paru had landed in [extra]. Verified: paru/paru-bin
  are AUR-only. Restored the original git-clone + makepkg
  bootstrap, added the rust buildep that archinstall does not
  pull in.
- post-install.sh never installed AUR extras — walker, elephant,
  waypaper, stasis, themes all silently skipped. Now pulls
  packages/aur.txt after moonarch-git.
- packages/official.txt: drop glab, go, npm (unused) and rustup
  (only needed for the paru build, handled imperatively now).
- packages/aur.txt: add walker-bin (was missing entirely).
- transform.sh + legacy update.sh shim removed — transform was
  never used in practice.
- Apollo persona block out of CLAUDE.md, prior DECISIONS entries
  rewritten from Apollo/Ragnar to ClaudeCode.
- README Transform section and scripts/ listing trimmed.
- lib.sh ABOUTME updated — only post-install.sh sources it now.
2026-04-21 09:04:23 +02:00
0a38347cb9 feat(install): registry-only path, drop paru --pkgbuilds from setup
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
post-install.sh and transform.sh no longer write paru.conf entries for
the PKGBUILD repo — the Arch registry is the single source of truth.
pacman -Sy + paru -S moonarch-git now suffices. See DECISIONS.md.
2026-04-20 14:20:02 +02:00
f4f6ede2a7 feat: i18n moonarch-update via pacman gettext + inline DE
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Prompts and log lines now follow the user's LANG. Reuses pacman's
gettext catalog for strings with matching upstream msgids
(Proceed with installation?, [Y/n], Starting full system upgrade...,
Do you want to remove these packages?). Moonarch-specific strings
go through an inline _t "en" "de" helper keyed off ${LANG%%.*}.

confirm() switches to pacman-style: :: prefix, default Y, accepts
y/Y/j/J. No PKGBUILD change — gettext ships with base.
2026-04-19 15:47:28 +02:00
ee85b87d3a fix: signal waybar after wlsunset starts to update nightlight icon
Waybar starts before wlsunset (due to ExecStartPre sleep) and only
checks the service status once. ExecStartPost sends SIGRTMIN+11 so
waybar refreshes the nightlight module after wlsunset is ready.
2026-04-16 10:36:05 +02:00
fcac91b540 fix: add polkit rule to allow greeter user to reboot and shutdown
The greetd greeter session is inactive in logind, so polkit defaults
require admin authentication for power actions. This rule grants the
greeter user permission for reboot and power-off without authentication.
2026-04-15 14:23:49 +02:00
324dda0548 fix: remove fixed notification popup height to prevent scrollbar
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
notification-window-height was set to 150px, causing long notifications
to be clipped with a scrollbar. Set to -1 (compositor-managed) so popups
adapt to content height.
2026-04-15 14:08:53 +02:00
0433f08f08 feat: manage wlsunset via systemd user service
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 4s
Move nightlight from niri spawn-at-startup to a systemd user service
with After=kanshi.service to ensure all outputs are configured before
wlsunset starts. Toggle now uses enable/disable --now for persistent
state across reboots.
2026-04-14 17:42:24 +02:00
9bc753e092 fix: use niri include instead of copying system config to user dir
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
transform.sh was hard-copying /etc/xdg/niri/config.kdl to ~/.config/niri/,
causing the user config to go stale after system updates. Now seeds a minimal
user config with `include "/etc/xdg/niri/config.kdl"` so system defaults
always stay current and users can add overrides below the include.
2026-04-11 21:03:42 +02:00
a360d12bde fix: reduce swaync notification size and cap popup height
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Smaller font (14px → 12px), smaller icon (64px → 36px via CSS variable),
and notification-window-height limit (150px) to prevent oversized popups
from long notification bodies.
2026-04-10 16:15:48 +02:00
97e4b81930 docs: add moonarch-doctor and shorthand aliases to README and CLAUDE.md
Some checks failed
Update PKGBUILD version / update-pkgver (push) Failing after 3s
2026-04-10 08:21:38 +02:00
b8753bf84f fix: remove docker from defaults, fix cliphist-image ordering cycle
Docker is a dev dependency, not a desktop environment default. Remove
from package list, archinstall config, services and README.

Fix systemd ordering cycle that prevented cliphist-image from starting:
cliphist-text had After=graphical-session.target which combined with
PartOf= and cliphist-image's After=cliphist-text created a cycle.
2026-04-10 08:18:55 +02:00
a55c7ea9d1 feat: add moonarch-doctor system health checker
Diagnostic script that verifies services, configs, packages and paths
against the expected moonarch system state. Reports pass/fail/warn with
colored output and summary. Deployed as moonarch-doctor (alias: moondoc).
2026-04-10 08:18:45 +02:00
ab066724f0 fix: keep terminal open after moonarch-update completes
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Add "press any key" prompt when running interactively (stdin is a TTY).
Remove dead wrapper in defaults/bin/ that was overwritten by PKGBUILD.
2026-04-10 07:33:46 +02:00
2363e76b4a feat: add moonarch-waybar config merger wrapper
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 4s
Waybar's include directive cannot merge arrays, making per-machine
module customization impossible without duplicating the entire config.

moonarch-waybar merges an optional ~/.config/waybar/userconfig with
the system config, supporting prepend/append on module arrays and
object merge for module definitions. Generates user style.css with
@import of system styles on first run.

System waybar config converted from JSONC to valid JSON for jq
compatibility. Niri startup and hotkey updated to use the wrapper.
2026-04-09 17:04:24 +02:00
4dd8aae2f0 fix: change drawer transition direction for sound and brightness groups
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Open drawers to the right instead of left, matching their position
on the right side of the bar.
2026-04-09 12:15:59 +02:00
47ae8d5d51 docs: add wlsunset nightlight to README
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Add nightlight scripts to project structure, wlsunset to startup
sequence diagram, and Night Light entry to component choice table.
2026-04-09 12:10:05 +02:00
4c609135e9 feat: add wlsunset nightlight toggle with Waybar module
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Add blue light filter support via wlsunset, toggleable through a Waybar
module in the brightness group. Nightlight icon is the primary element,
backlight slider expands on click.

- Add wlsunset package to official.txt
- Add moonarch-nightlight toggle script (kill/restart wlsunset)
- Add moonarch-waybar-nightlight status script (JSON output)
- Add custom/nightlight module to group/brightness in Waybar config
- Add Catppuccin Yellow highlight for active nightlight state
- Add wlsunset autostart in Niri config (5000K night temperature)
2026-04-09 12:08:35 +02:00
f6869c9cea fix: detect implicitly installed packages in moonarch-update
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Use pacman -Qq (all installed) instead of -Qqe (explicit only) so
packages installed as dependencies are not falsely reported as missing.
2026-04-09 11:47:51 +02:00
48b0de071e feat: add brightness slider to Waybar backlight module
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Wrap backlight in a drawer group with backlight/slider, mirroring the
existing sound group pattern. Slider appears on hover/click.
2026-04-09 11:43:36 +02:00
b6beabe500 feat: add moonarch-update wrapper for interactive system updates
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Wraps paru in a script that waits for keypress after completion,
preventing foot from closing immediately. Used as Waybar on-click
action for the updates module.
2026-04-09 11:34:11 +02:00
8ddbb23851 feat: add waybar module for package update notifications
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Add moonarch-waybar-updates script that checks for available updates
from both official repos (checkupdates) and AUR (paru -Qua). Uses a
cache mechanism to avoid excessive mirror hits while still detecting
freshly installed updates within 60 seconds.
2026-04-09 10:54:49 +02:00
46ba8365db feat: style taskbar active state with bottom border indicator
Add a visible bottom border to the active taskbar button for clear
focus indication. Reserve border space on all buttons with a transparent
border to prevent icon shifting on state changes.
2026-04-09 06:35:57 +02:00
d815e21b1d feat: prepare CSS to hide empty battery group (Waybar PR #4941)
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
2026-04-08 17:01:19 +02:00
6d3a7c8d72 feat: enable always-center-single-column in niri layout
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
2026-04-08 14:10:26 +02:00
ac2b210a1f fix: audit remediation — security, quality and performance fixes
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
- CI Dockerfile: verify act_runner SHA256, restrict sudoers to safe
  pacman arguments (S-C1, S-C2)
- cliphist: split into cliphist-text + cliphist-image services with
  Type=simple for proper PID tracking and restart (Q-C3)
- batsaver-toggle: validate sysfs input as numeric, check state file
  write (Q-C2, S-W2)
- udev battery rule: add ACTION=="add" filter to avoid firing on
  every battery event (Q-W3)
- cpugov: replace eval with direct expansion, switch waybar module
  to signal-based updates, send SIGRTMIN+10 after toggle (Q-W1,
  S-W1, P-W4)
- Remove docker group auto-assignment from install scripts (S-I1)
2026-04-08 11:45:56 +02:00
e1e80ca414 fix: rename battery group to avoid CSS ID conflict, clean up waybar styles
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
group/battery shared its CSS ID (#battery) with the battery module,
causing padding overrides to affect the group box instead of just the
module. Renamed to group/bat. Moved cpugov into indicators group.
Reorganized style.css sections for clarity.
2026-04-08 10:45:34 +02:00
579a948449 feat: add battery conservation mode with Waybar toggle
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Laptops with charge_control_end_threshold support get a click-to-toggle
on the battery module (80% ↔ 100%). A ♥ icon appears when conservation
is active, hidden when inactive. State persists across reboots via
systemd oneshot service. udev rule grants wheel group write access
so no sudo is needed for toggling.
2026-04-08 09:55:46 +02:00
6a258151fa fix: show bluetooth icon instead of status text in Waybar
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
The bluetooth module displayed " {status}" (icon + text like
"on"/"off") which was inconsistent with other icon-only modules.
2026-04-07 17:28:15 +02:00
037d311607 refactor: clean up Waybar styles, remove user-defaults mechanism
- Remove defaults/user/ and the user-defaults copy loop from
  post-install.sh and transform.sh — Waybar falls back to
  /etc/xdg/waybar/ via XDG spec, no provisioning needed.
- Remove USER_DEFAULTS constant from lib.sh.
- Clean up style.css: remove dead selectors (#net, #cava,
  #custom-updates, #custom-notification), commented-out blocks,
  empty rules, duplicate properties, and hardcoded hex color.
- Restructure module styling: generic top-level box via
  > widget > *, group children reset via widget widget > *,
  explicit exceptions for workspaces/taskbar/window.
- Normalize section comments and whitespace.
- Update README to remove user/waybar/ from project structure.
2026-04-07 17:27:47 +02:00
2b8e40f37f docs: update README and DECISIONS for Walker moonarch theme
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
2026-04-07 13:13:44 +02:00
ef8ff7099f feat: rename Walker theme to moonarch, add explicit Catppuccin colors
Rename gtk-inherit theme to moonarch with fixed Colloid-Grey-Dark-
Catppuccin color definitions. Reduces border brightness and shadow
weight for a subtler appearance.

Closes #3
2026-04-07 13:11:06 +02:00
7a2b1ece05 docs: update README and DECISIONS for archinstall v4 and kanshi fixes 2026-04-07 12:24:07 +02:00
62495d8e3d fix: prevent kanshi config from breaking wdisplays-persistent
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Remove ABOUTME comments from kanshi default config — they broke
the profile parser in wdisplays-persistent store.c, preventing
config saves. Also skip kanshi in transform.sh when user profiles
already exist, since display layouts are machine-specific.
2026-04-07 12:23:06 +02:00
76f5602b47 Migrate archinstall config to v4 format
archinstall v4.1 introduced new canonical key names. Update
user_configuration.json to the current schema:
- audio_config → nested under app_config
- bootloader → bootloader_config with explicit uki flag
- gfx_driver value updated to "All open-source (default)"
- custom-commands → custom_commands (underscore)
2026-04-07 11:56:01 +02:00
466ba773dc docs: fix remaining stale references in README and CLAUDE.md
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
- scripts/: replace update.sh with moonarch-update, fix description
- Update section: remove stale "syncs repo, deploys XDG" claim
- User services: add stasis to table
- CLAUDE.md: mention systemd user services in defaults/ description
2026-04-07 11:37:44 +02:00
9f994d03fb docs: update README for swaync, cliphist service, /usr/bin paths
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
- dunst → swaync throughout
- Clipboard section: cliphist + Walker, wiped on session start
- Helper scripts: /usr/local/bin → /usr/bin (package-managed)
- User services: moved to /etc/systemd/user/, added cliphist/nautilus
- Startup diagram: swaync, nm-applet, systemd services listed
- moonarch-dnd removed (dunst-specific)
2026-04-07 11:34:30 +02:00
80c395fc14 feat: add cliphist service, move user services to /etc/systemd/user/
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
- Add cliphist.service that wipes clipboard history on session start
  (crash-safe: cleans up at next boot, not at shutdown)
- Move kanshi, walker, nautilus services from ~/.config/systemd/user/
  to /etc/systemd/user/ (system-level defaults, consistent with
  moonarch's config philosophy)
- Remove cliphist spawn-sh-at-startup from niri config (managed by
  systemd service now)
- Add cliphist to USER_SERVICES in post-install.sh and transform.sh

Closes #1
2026-04-07 11:27:49 +02:00
25baf88a2a fix: move paru repo config into moonarch.install to break bootstrap loop
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
The paru PKGBUILD repo config was only set up by post-install.sh and
transform.sh. If the config was missing on an existing system,
moonarch-git couldn't update — the fix required the package that
delivers the fix.

Now moonarch.install sets up the config on every install/upgrade.
post-install.sh keeps it for first-time bootstrap (before moonarch-git
exists). transform.sh no longer manages it.
2026-04-07 11:11:58 +02:00
29550b8a14 fix: audit remediation — 6 fixes across quality, performance, security
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Q-01: Fix broken upower regex in moonarch-btnote (lookaheads never matched)
Q-02: Fix transform.sh paru repo section name ([moonarch] → [moonarch-pkgbuilds]),
      config path (~/.config → /etc), and partial sync (-Sy → -Syu)
Q-03: Add missing stasis package to aur.txt (idle management broken on fresh install)
S-01: Switch CI git clones from HTTP to HTTPS (MITM risk in Docker network)
S-02: Restrict CI builder sudo to /usr/bin/pacman only
P-01: Refactor moonarch-waybar-gpustat — remove while loop, use jq --arg style
2026-04-07 10:50:57 +02:00
27247a4ffb fix: remove duplicate VPN notifications from moonarch-vpn
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
nm-applet already sends notifications for VPN state changes.
The script's own notify-send calls caused duplicates on every toggle.

Closes #4
2026-04-07 10:19:41 +02:00
fdedc8071f Add nautilus preload service for faster file manager startup
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
xdg-open ~ (Super+E) cold-starts Nautilus every time, causing
noticeable delay. A GApplication service keeps Nautilus warm in the
background so subsequent opens are near-instant. Follows the same
pattern as the existing walker.service.

Closes #2
2026-04-07 09:03:18 +02:00
0fba63571c fix: harden GPG key import with fingerprint verification and cleanup
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
The registry signing key was imported without verifying its fingerprint,
allowing a MITM or compromised server to inject a rogue key. Now checks
the downloaded key against a pinned fingerprint before import. Also adds
trap EXIT for tempfile cleanup and rejects empty curl responses.
2026-04-06 23:08:01 +02:00
23a14e95d5 fix: enable stasis idle manager in user services
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
stasis ships its own systemd user service but was missing from the
USER_SERVICES array in both post-install and transform scripts.
2026-04-06 22:55:33 +02:00