83 Commits

Author SHA1 Message Date
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
52a49bfcc3 Fix swaync fullscreen background by raising CSS priority to user level
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
libadwaita overrides application-level CSS, causing a visible
background behind the control center overlay. Setting cssPriority
to "user" ensures custom styles take precedence.
2026-04-02 12:03:04 +02:00
047ff53091 fix: remove -- from nmcli calls in moonarch-vpn
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
nmcli 1.56 treats -- as a connection name instead of end-of-options,
causing "Unknown connection --" errors when toggling VPN connections.
2026-04-02 10:23:55 +02:00
24b81df63c Add rebuild-detector to system packages
Detects AUR packages broken by shared library upgrades (Python, OpenSSL,
etc.) so they can be rebuilt promptly after system updates.
2026-04-02 10:20:04 +02:00
1004a0b986 Fix paru PKGBUILD repo name collision with pacman registry
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Both the pacman package registry and the paru PKGBUILD repo used
[moonarch] as section name, causing paru to fail resolving PKGBUILD
upgrade targets against the wrong repo. Renamed PKGBUILD repo to
[moonarch-pkgbuilds] and moved config from ~/.config/paru/paru.conf
to system-wide /etc/paru.conf.
2026-04-02 08:52:26 +02:00
ba4a413097 Move GTK theme from moongreet config to system-wide gtk-4.0 settings
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
Remove gtk-theme from moongreet.toml and set gtk-theme-name and
gtk-icon-theme-name in /etc/xdg/gtk-4.0/settings.ini instead.
2026-04-02 08:27:56 +02:00
cf9eae1edc Fix swaync theme to use upstream compiled CSS from catppuccin/swaync v1.0.1
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Hand-converted @define-color CSS was not rendering correctly.
Replaced with pre-built release CSS, accent changed from Blue
to Lavender (#b4befe), font set to UbuntuSans Nerd Font.
2026-04-01 19:11:31 +02:00
8faca0ed48 Add gtk-theme to moongreet config for greeter session
The greeter runs as the greeter user, so user-level gsettings
don't apply. Explicit gtk-theme ensures Colloid-Grey-Dark-Catppuccin
is used in the login screen.
2026-04-01 18:50:23 +02:00
7f06c8e501 Add Moonarch package registry setup with signed packages
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 1s
Import Gitea Arch registry key dynamically and configure pacman
with SigLevel = Required DatabaseOptional. Key ID is extracted
from the downloaded key file to avoid hardcoding.
2026-04-01 18:09:10 +02:00
93ff264824 Add custom Arch-based act_runner image
Runner based on archlinux:base-devel with git, curl, makepkg.
Runs as non-root builder user so makepkg works natively without
permission workarounds. Registration data stored in /data volume.
2026-04-01 18:09:09 +02:00
d4eec1c506 Add custom Arch-based act_runner image, revert workflow workaround
The runner image is now built on archlinux:base-devel with git,
curl, makepkg and a non-root builder user baked in. This removes
the need for per-workflow pacman installs and enables host mode.
2026-04-01 18:09:09 +02:00
6b21b6d50c Fix CI: install git in Arch container for update-pkgver
The runner now uses docker mode with archlinux:base-devel which
does not include git by default.
2026-04-01 18:09:09 +02:00
997f7d90a0 Fix swaync notification icon size in waybar
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Remove explicit 16pt Pango span wrapper so the icon inherits
the default waybar font size, matching all other modules.
2026-04-01 15:31:27 +02:00
3673b22009 Add CI workflow to auto-update pkgver in moonarch-pkgbuilds
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 2s
Same pattern as moongreet/moonlock/moonset — pushes to main
trigger a pkgver bump so paru detects updates.
2026-04-01 14:59:33 +02:00
7f509eff95 Add swaync notification widget to waybar, remove dunst remnants
custom/notification (swaync-client) was defined but not in the
module list. Replaces the removed custom/dnd (dunstctl) slot.
2026-04-01 14:44:27 +02:00
8c7e9407c6 Replace dunst with swaync for fractional scaling support
Dunst lacks wp_fractional_scale_v1, causing jagged font rendering
on external monitors in mixed-DPI setups (laptop 2.5x + externals 1x).
swaync (GTK4) handles fractional scaling natively.

Style based on catppuccin/swaync with Lavender accent.
2026-04-01 14:41:42 +02:00
7cd34f2ace Swap moonset and keyboard-shortcuts-inhibit keybindings
Mod+Escape is more intuitive for the session/power menu,
Super+Alt+L moves to keyboard shortcuts inhibit toggle.
2026-04-01 14:41:36 +02:00
aa1567487f Add OpenMoji emoji font to AUR package list 2026-03-31 12:49:59 +02:00
5b37bfe525 Pin linux-zen kernel in archinstall config, add quiet boot param
- Set kernels to linux-zen in user_configuration.json to skip
  interactive kernel selection during install
- Add post-install step to append quiet to non-fallback systemd-boot
  entries for clean boot output
2026-03-31 11:17:36 +02:00
1e19f08776 fix: shell script quoting and argument injection hardening
Audit fixes for command injection risks in helper scripts:
- moonarch-cpugov: eval for quoted COMMANDS expansion (pkexec context)
- moonarch-btnote: while+read with process substitution, quoted vars
- moonarch-vpn: -- guard before connection name in nmcli calls
- post-install.sh: else-logging when USER_DEFAULTS dir missing
2026-03-31 11:06:14 +02:00
491a3cd3e2 Fix xdg-desktop-portal-gtk spam in greeter session
The greeter's niri session triggered D-Bus activation of
xdg-desktop-portal-gtk, which failed 17x on every boot because
WAYLAND_DISPLAY is not set in the greeter's D-Bus scope.
Setting GTK_USE_PORTAL=0 prevents GTK from requesting portal
services the greeter does not need.
2026-03-31 10:35:37 +02:00
077e852b3b Use system zsh plugins, remove redundant waybar network modules
- Source zsh-autosuggestions and zsh-syntax-highlighting from
  /usr/share/zsh/plugins/ instead of oh-my-zsh custom dir
- Add both as official packages
- Remove waybar network and custom/vpn modules (nm-applet covers this)
- Move tray from modules-left to first position in modules-right
2026-03-31 10:27:53 +02:00
ca7f9bb79e Remove non-existent walker providers, add nirisessions set
Remove prefixes and actions for providers not installed as
elephant packages: windows, symbols, websearch, archlinuxpkgs.
Add provider set for nirisessions.
2026-03-31 09:58:13 +02:00
f2a28f8577 docs: fix README, remove gtklock and wlogout remnants
README: fix keybind (wlogout → moonset), remove gtklock from project
structure, correct package counts, remove nonexistent install-themes.sh,
mark update.sh as legacy wrapper.
Remove gtklock packages (5) and wlogout from package lists.
Remove defaults/xdg/gtklock/ config directory.
Remove stale foot/waybar overrides from transform.sh.
2026-03-31 09:36:20 +02:00
684d54e0c2 Deploy moonarch config overrides for walker, foot, and waybar
These configs are owned by their respective packages in /etc/xdg/ so
the XDG copy loop installs the package defaults instead of ours.
Overwrite with moonarch versions from /usr/share/moonarch/ after the
loop.
2026-03-30 23:45:52 +02:00
3acb71a210 Fix GTK4 theme comment to match Grey accent 2026-03-30 23:34:26 +02:00
4eca6190f2 Remove packages from aur.txt that are hard deps of moonarch-git
walker-bin, elephant-bin, stasis, colloid-catppuccin-gtk-theme-git,
and waypaper are already pulled in as dependencies of moonarch-git.
Duplicating them in aur.txt caused package conflicts during transform.
2026-03-30 23:09:36 +02:00
c011672bc2 Install packages from package lists in transform script
The pre-flight summary already computed missing packages but never
installed them. Now installs both official and AUR packages after
moonarch-git.
2026-03-30 23:03:58 +02:00
9dde069e3e Replace timeshift with snapper + snap-pac for btrfs snapshots
snap-pac provides automatic pre/post snapshots on pacman transactions
via pacman hook.
2026-03-30 22:59:46 +02:00
f5d199fa5a Fix foot terminal font: use monospace variant of UbuntuSans NF 2026-03-30 22:56:33 +02:00
59a0e500f2 Fix transform failing on root-owned XDG config dirs
cp -r from /etc/xdg/ preserved root ownership on directories,
causing rm -rf to fail on subsequent runs. Add --no-preserve=ownership
to cp and escalated rm fallback for existing root-owned dirs.
2026-03-30 22:49:42 +02:00
65e2e54024 Remove custom cd function from default zshrc
Overriding a builtin like cd causes issues with tooling and
scripts that expect standard cd behavior.
2026-03-30 22:40:53 +02:00