swaylock never reads /etc/xdg/, so the config is installed explicitly to
/etc/swaylock/config — its SYSCONFDIR path — instead of going through the
generic defaults/xdg/ sweep. The home seeding drops out; pre_upgrade
retires the pristine copies it left behind (cmp against the still-old
/etc/xdg file, so an edited copy survives) and clears a manually deployed
/etc/swaylock/config that pacman would refuse to overwrite.
wallpaper-blur.jpg ships next to the plain wallpaper as the lock screen
background.
The power menu is a Quickshell popout now, which retired moonset and
with it the last caller of moonlock. Only sweet-cursors is left from the
own registry. pkgrel 19 to trigger the build.
Drops the moongreet dependency and adds the two upstream packages, so
pacman lets moongreet go on the clients. moonlock stays: moonset spawns
it by name.
The reference configs deployed into /etc/greetd/ are now regreet.toml and
regreet.css. post_install seeds ~/.config/swaylock/config, pre_upgrade
rewrites moonlock to swaylock -f in stasis configs that were seeded
before — that file is never overwritten, so an existing install would
otherwise keep calling a package on its way out.
The moongreet and moonlock PKGBUILD directories stay: the CI only builds
what changed, and deleting them would break the build step's cd.
moonarch-camera.service switches all cameras off on boot. System units are
installed file by file here, so a new one needs its own install line; the
enable is hardware-gated in post_install, like the batsaver service.
The four moonarch-camera-* scripts and the quickshell components need no
packaging change — they are covered by the defaults/bin glob and the
defaults/xdg find loop.
quickshell becomes the default bar + notification daemon in the moonarch
session. The bar config ships automatically via the generic defaults/xdg
install loop; only the runtime package needs pulling in as a dependency.
Waybar + swaync stay in depends (kept as reserves, not removed).
Moonarch configures the Sweet-cursors theme in six places — greeter
(moongreet.toml, niri-greeter.kdl) and desktop (niri config.kdl, GTK 3/4
settings.ini) — but never declared the package that ships the theme.
On a fresh install the cursor theme was absent system-wide, so Niri and
GTK fell back to the default cursor; it only worked where sweet-cursors
happened to be present (e.g. installed into a user home).
sweet-cursors-git provides 'sweet-cursors'; listing it ensures the theme
is installed system-wide for both the greeter user and the desktop user.
The blanket WantedBy-symlink loop installed a global-scope link for
wlsunset, which meant `systemctl --user disable` (the waybar nightlight
toggle's mechanism) could never persist — systemd warned about exactly
this scope mismatch on every disable. Filter survived reboots even when
the user turned it off.
PKGBUILD now skips wlsunset; moonarch.install drops the legacy symlink
on upgrade. pkgrel bumped so installed systems pick up the fix.
Pre-bump to match moonarch HEAD ahead of push so pkgver-bot detects
"already up to date" and skips a redundant build trigger. Without
this, pushing moonarch first would push another pkgver-bump commit
here and re-trigger build-and-publish a second time.
The udev rule for charge_control_end_threshold permissions has been
removed in moonarch (commit 952776c). The toggle now dispatches a
pkexec helper instead. PKGBUILD no longer needs to install the rule.
The pkgver bump in this PKGBUILD will be picked up automatically by
pkgver-bot on the next moonarch push.
Run 107's clear loop on sweet-cursors deleted the just-uploaded moongreet-git versions. Track per-package "just built" version and skip it in the DELETE loop. Add .type=="arch" jq filter as defense-in-depth.
Run 108 hit a verified global OOM (constraint=CONSTRAINT_NONE) when cargo -j2 ran two parallel rustc workers on a host with 1.6 GiB available. -j1 halves the peak. 4 GiB swapfile added on host as additional buffer; this changes the build pipeline as the second layer.
Run 106 hung the host before I/O caps were in place. act_runner now has 30 MB/s + 500 IOPS hard limits via blkio_config; this commit retriggers the build that failed mid-compile.
Local AUR/older builds outsort the registry versions on pacman vercmp:
- sweet-cursors-git: paru-built r445 (Gigas002/Sweet#cursors) > registry
r1 (our snapshot fork). Snapshot stays frozen by design.
- moongreet-git: pre-rollback 0.10.0 > current 0.8.6 (upstream tag
history continued at 0.8.4–0.8.6 on top of an earlier 0.10.0 line).
epoch=1 on both, pkgrel bumped to retrigger CI. Also extends .gitignore
to cover the remaining makepkg bare-clone dirs (moongreet, moonlock,
moonset, sshfs_connect) that weren't listed before.
Initial sshfsc-git build (run #150, 2026-04-19) failed with
'go: command not found' — at that point the workflow did not yet
install makedepends. Workflow now reads makedepends from PKGBUILD
and installs them via pacman before makepkg, so a fresh trigger
should succeed.
Install mpv.conf straight to /etc/mpv/mpv.conf in package(), remove
the /usr/share/moonarch/mpv/ staging and the post_install copy.
modernz.conf is no longer shipped — overrides moved into mpv.conf
via script-opts-append.
Stages defaults/etc/mpv/ to /usr/share/moonarch/mpv/ and copies
mpv.conf + modernz.conf into /etc/mpv/ on install. modernz.conf
deliberately overwrites the AUR default from mpv-modernz-git.
pkgrel bumped to 11.
The compose mount `./runner-cargo-target:/cache/target` already
persists the target dir. Set CARGO_HOME to a subdir of that mount so
the downloaded-crates index + git cache survive too — otherwise every
build re-fetches every dep. No server-side compose change needed.
The previous CARGO_BUILD_JOBS=1 + nice + ionice throttling rested on an
assumed OOM diagnosis for run 86 (2026-04-23) that was never confirmed
via dmesg/journalctl. Build times tripled for no verified reason.
Remove the throttle; if a real OOM is captured in the future, re-add
limits with actual evidence.
The act_runner exports CARGO_TARGET_DIR=/cache/target for cache
persistence, but the three Rust-app PKGBUILDs hardcoded
target/release/<bin>. Run 87 compiled 8 min then failed at
install stage. Use ${CARGO_TARGET_DIR:-target} so both CI and
local makepkg work.
Parallel Rust builds have OOM-killed the Gitea host twice
(2026-04-20, 2026-04-23 run 86). Force CARGO_BUILD_JOBS=1,
MAKEFLAGS=-j1, and wrap makepkg with nice+ionice so the
act_runner can't drown the shared host.
moongreet/moonlock/moonset link against gtk4 headers at build time.
The CI workflow runs `makepkg -sfd` and only installs makedepends
explicitly — with gtk4 listed only in depends, the build container
had no cairo.pc / gtk4.pc and cairo-sys-rs failed to find the
system library. Add gtk4, gtk4-layer-shell, pkgconf (plus
gtk-session-lock + pam for moonlock) to makedepends.
This previously only worked because repeated `makepkg -s` runs
left the libs installed in the act_runner container filesystem.
Recreating the runner today exposed the latent gap.
Ships config/polkit/50-moongreet-power.rules (new in moongreet v0.8.3)
to /usr/share/polkit-1/rules.d/ so the greeter user can reboot and
power off without authentication.
Reset pkgrel to 1 — the pkgver bump to 0.8.3 will be picked up by
pkgver-bot after the moongreet tag is pushed.
Promote moongreet-git/moonlock-git/moonset-git and ~30 Arch-repo
essentials (networkmanager, bluez, wlsunset, xwayland-satellite,
file-manager stack, portals, zsh plugins, CLI tools, neovim, git,
ufw, fwupd, etc.) from optdepends (or absent) to hard depends.
Previously a fresh `paru -S moonarch-git` installed the configs but
none of the packages they depend on, producing a non-functional
Moonarch — no greeter, no lockscreen, no launcher, no network stack.
AUR packages cannot be hard depends (pacman cannot resolve AUR),
so they remain in moonarch's packages/aur.txt and post-install.sh
pulls them explicitly. optdepends trimmed to real extras —
docker, rustup (for dev), waterfox.
The moonarch.install hook used to ensure /etc/paru.conf had Mode = arp
and a [moonarch-pkgbuilds] section. Both exist to let paru resolve
moonarch packages from a PKGBUILD repo — a second mechanism parallel
to the Arch registry, redundant now that the registry DB is stable.
Hook now strips the legacy config on next upgrade. Bump pkgrel so every
installed system picks up the cleanup.
README now describes the Gitea Arch registry path as the canonical
install/update mechanism — the paru --pkgbuilds fallback is no longer
advertised to users. Adds troubleshooting for missing updates (check
the repo DB directly) and file conflicts.
DECISIONS.md records why the build-and-publish workflow now wipes all
existing versions before upload, and why three packages had to be
re-registered manually.
Gitea's Arch registry doesn't regenerate the repo DB on pkgver change —
old entries linger as zombies (e.g. moonarch-git r99 stuck in moonarch.db
even though only r105 exists as a package). List all versions of each
built package and DELETE them before the upload so the DB gets rebuilt
cleanly. Bump moonarch-git pkgrel to force a rebuild and exercise the fix.
curl -sf was silencing upload errors: r105 was 'Published' six times
in a row but never landed in the registry. Capture the HTTP status
and abort on non-2xx so the run goes red and the response body shows
up in the log.
moonarch-git's runtime depends include AUR-only packages (stasis,
auto-cpufreq, ttf-ubuntusans-nerd) that plain pacman cannot resolve,
so `makepkg -s` fails with "Could not resolve all dependencies" —
even though those runtime deps aren't needed to build the package.
Extract makedepends from PKGBUILD, install them targeted (cargo/go
for Rust and Go packages; empty for moonarch-git), then run makepkg
with -d so it skips the full dep check. Rust packages still get their
compiler, moonarch-git builds without needing the AUR world.
PKGBUILDs with options=('debug') produce a main + -debug split pair.
The previous `ls -t | head -1` only uploaded one, and which one won
was mtime-dependent. Loop over all *.pkg.tar.zst and parse pkgname
per file (so -debug gets its own registry entry).
Previous -Syu triggered a full system upgrade inside the runner
container, which together with the concurrent Rust build saturated
the shared host and took Gitea down. -Sy just refreshes the package
DB, which is all makepkg -s actually needs to resolve current deps.
Runner container has a cached pacman DB that lists package versions
already rotated off the mirrors, causing 404s when makepkg -s tries
to pull makedepends (gtk4, mesa, llvm-libs). Sync the DB first.
makepkg -sfd skipped dependency checks, preventing `-s` from pulling
in rust/cargo (moonlock/moongreet/moonset) and go (sshfsc). Builds
failed with `cargo: command not found`. Remove `-d`; `-s` now installs
makedepends via pacman before the build.
Walker theme files at /etc/xdg/walker/themes/moonarch/ were deployed
manually before the package owned them, causing pacman file conflicts
on upgrade. pre_upgrade hook now removes untracked files so pacman
can take ownership cleanly.
Add udev rule and systemd service to PKGBUILD. Create /var/lib/moonarch
state directory and enable batsaver restore service on laptops in the
post-install hook.
The user-defaults mechanism (copying template files to ~/.config/)
was removed from moonarch. Waybar falls back to /etc/xdg/ via XDG
spec — no provisioning needed.
- PKGBUILD installs services directly to /etc/systemd/user/ and creates
WantedBy symlinks (no manual systemctl --user enable needed)
- Install hook cleans up legacy user-level service files from
~/.config/systemd/user/
transform.sh previously wrote [moonarch] to ~/.config/paru/paru.conf.
This silently overrides the system-level /etc/paru.conf, breaking
package resolution for moongreet-git, moonlock-git, moonset-git.
Ensures paru can find moongreet-git, moonlock-git, moonset-git on
every install/upgrade. Breaks the bootstrap loop where moonarch-git
couldn't update itself because the paru config it delivers was missing.
Triggers on PKGBUILD changes (from pkgver-bot commits).
Builds the changed package with makepkg and uploads the
.pkg.tar.zst to the Gitea Arch Package Registry.
AUR packages can't be resolved by pacman when moonarch-git is
installed from the Gitea Package Registry. Move them to optdepends
since they're managed separately via packages/aur.txt.
swaync config files conflict with the swaync system package —
deploy via .install hook like foot and waybar configs.
walker owns /etc/xdg/walker/config.toml and overwrites it on every
update. Instead of fighting for that path, deploy our config override
to user homes (~/.config/walker/) via the .install hook where XDG
lookup finds it first. Also fix stale rofi dependency → walker + elephant.
moonarch-git packages all desktop environment defaults (XDG configs,
helper scripts, zsh config, wallpaper) for pacman-managed deployment.
Includes moonarch-update for simplified system maintenance.
sweet-cursors-git packages the Sweet cursor theme separately.
--locked is unreliable for -git packages where Cargo.lock may diverge
from the latest source. Also documents the required paru -Sy --pkgbuilds
step and common error resolutions.
Add PKGBUILDs for moonset-git, moonlock-git, and moongreet-git.
Intended as a paru custom AUR source for easy installation of
all Moonarch components via `paru -S moonset-git`.