Compare commits
65 Commits
e62cfe6558
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e3ddf0b98 | |||
| 8684f77627 | |||
| 990b880f1c | |||
| f7c0989bad | |||
| 1d85c5ec73 | |||
| 8d9ab7a997 | |||
| 1ddcda70e3 | |||
| f86d936c9e | |||
| eafe7b6634 | |||
| 9c05e33382 | |||
| db05837b09 | |||
| a930117ec7 | |||
| 4c3b48d73f | |||
| 8aa127cbf0 | |||
| 4fd0310818 | |||
| c68785fc71 | |||
| 5d4ace5cb0 | |||
| ef11bf2891 | |||
| 49ede98393 | |||
| be516cb10a | |||
| b737bc7cee | |||
| e6615bad76 | |||
| 7f7843ec41 | |||
| ba46cd38a3 | |||
| e5ef4fd2a1 | |||
| 7f51eeee0b | |||
| 929e55b300 | |||
| 6b14b98492 | |||
| d144dff496 | |||
| b58181c32b | |||
| 14d4dde898 | |||
| e5186c616f | |||
| 77da854149 | |||
| 0f85c50e6f | |||
| e7398d479e | |||
| 33e61d4df5 | |||
| c6c0bf1552 | |||
| 0d6c35cff8 | |||
| a7d3c4d435 | |||
| 2566c0b44e | |||
| c4f702e3e5 | |||
| bb36df30bc | |||
| 26eac512bf | |||
| 604d80cbe6 | |||
| 5373e651a1 | |||
| 794261488a | |||
| 6dea33bc22 | |||
| 11e8e1355a | |||
| 39b04d3829 | |||
| 5b6f35f480 | |||
| 5b4ad37f6d | |||
| 5633235e57 | |||
| 45d0a67572 | |||
| 6cb544202f | |||
| 8db3a02bc6 | |||
| 5fc1781262 | |||
| cc5cf1c1e1 | |||
| 972c832ec6 | |||
| ce69a3ce73 | |||
| b7a019dfb4 | |||
| 2c776bd38c | |||
| fedc004be7 | |||
| 8d056eac0f | |||
| 07be812dbb | |||
| da1e81aa8d |
@@ -52,6 +52,19 @@ jobs:
|
||||
# shellcheck disable=SC2086
|
||||
sudo pacman -S --needed --noconfirm $MAKEDEPS
|
||||
fi
|
||||
|
||||
# Single-threaded build to keep memory peak below the 8 GiB
|
||||
# host budget. Run 108 (2026-04-28) hit a verified global OOM
|
||||
# (constraint=CONSTRAINT_NONE in journalctl, rustc killed at
|
||||
# 1.7 GiB RSS while host was already at 6.2 GiB used / 1.6 GiB
|
||||
# available). Two parallel rustc workers blow that reserve.
|
||||
# Container-side mem_limit doesn't help because the kill is
|
||||
# global, not cgroup. -j1 halves the peak; act_runner blkio
|
||||
# cap (30 MB/s) protects I/O. Do NOT raise without a wider
|
||||
# memory plan (more host RAM, per-container caps, or larger
|
||||
# swap headroom).
|
||||
export CARGO_BUILD_JOBS=1
|
||||
export MAKEFLAGS="-j1"
|
||||
makepkg -sfd --noconfirm
|
||||
|
||||
# makepkg can emit multiple artifacts per build (main + -debug
|
||||
@@ -67,29 +80,46 @@ jobs:
|
||||
continue
|
||||
fi
|
||||
|
||||
# Collect unique package names (includes split packages like
|
||||
# foo + foo-debug). We delete ALL existing versions of each
|
||||
# before upload: Gitea's Arch registry doesn't fully regenerate
|
||||
# the repo DB on pkgver change — old entries stick around as
|
||||
# zombies and block pacman from seeing updates.
|
||||
# Collect unique package names + the version we just built for
|
||||
# each. We delete only ZOMBIE versions (anything in the registry
|
||||
# for this name that is NOT the version we just built) to clear
|
||||
# the Gitea Arch DB which doesn't evict on pkgver change.
|
||||
#
|
||||
# Run 107 (2026-04-28) showed the previous "delete all versions"
|
||||
# logic killed cross-package state when multiple PKGBUILDs were
|
||||
# built in one run — sweet-cursors's clear loop deleted the
|
||||
# just-uploaded moongreet-git versions. The skip-current-version
|
||||
# logic + .type=="arch" filter prevent that recurrence.
|
||||
declare -A SEEN_NAMES
|
||||
declare -A KEEP_VERS
|
||||
for PKG_FILE in "${PKG_FILES[@]}"; do
|
||||
base="${PKG_FILE%.pkg.tar.zst}"
|
||||
base="${base%-*}"; base="${base%-*}"; base="${base%-*}"
|
||||
SEEN_NAMES["$base"]=1
|
||||
# Strip arch (last -seg), pkgrel (next), pkgver (next) → name.
|
||||
# Keep "$pkgver-$pkgrel" as the full version.
|
||||
arch_stripped="${base%-*}"
|
||||
rel_stripped="${arch_stripped%-*}"
|
||||
ver_stripped="${rel_stripped%-*}"
|
||||
pkg_name="$ver_stripped"
|
||||
full_ver="${arch_stripped#${ver_stripped}-}"
|
||||
SEEN_NAMES["$pkg_name"]=1
|
||||
KEEP_VERS["$pkg_name"]="$full_ver"
|
||||
done
|
||||
|
||||
sudo pacman -S --needed --noconfirm jq
|
||||
|
||||
for PKG_NAME in "${!SEEN_NAMES[@]}"; do
|
||||
echo "==> Clearing existing versions of $PKG_NAME"
|
||||
# Listing API returns every matching package across all types,
|
||||
# so we filter by exact name client-side.
|
||||
KEEP="${KEEP_VERS[$PKG_NAME]}"
|
||||
echo "==> Clearing zombie versions of $PKG_NAME (keep: $KEEP)"
|
||||
VERSIONS=$(curl -s \
|
||||
-H "Authorization: token ${{ secrets.PKG_REGISTRY_TOKEN }}" \
|
||||
"https://gitea.moonarch.de/api/v1/packages/nevaforget?type=arch&q=${PKG_NAME}&page=1&limit=100" \
|
||||
| jq -r --arg n "$PKG_NAME" '.[] | select(.name==$n) | .version')
|
||||
| jq -r --arg n "$PKG_NAME" --arg t "arch" \
|
||||
'.[] | select(.name==$n and .type==$t) | .version')
|
||||
for V in $VERSIONS; do
|
||||
if [ "$V" = "$KEEP" ]; then
|
||||
echo " skip $PKG_NAME@$V (just built)"
|
||||
continue
|
||||
fi
|
||||
echo " delete $PKG_NAME@$V"
|
||||
DEL_CODE=$(curl -s -o /dev/null -w '%{http_code}' -X DELETE \
|
||||
-H "Authorization: token ${{ secrets.PKG_REGISTRY_TOKEN }}" \
|
||||
|
||||
@@ -5,3 +5,7 @@ pkg/
|
||||
# Bare git repos cloned by makepkg
|
||||
moonarch-git/moonarch/
|
||||
sweet-cursors-git/Sweet-cursors/
|
||||
moongreet-git/greetd-moongreet/
|
||||
moonlock-git/moonlock/
|
||||
moonset-git/moonset/
|
||||
sshfsc-git/sshfs_connect/
|
||||
|
||||
@@ -1,5 +1,49 @@
|
||||
# Decisions
|
||||
|
||||
## 2026-06-10 – Rust/Go packages: -git → no-suffix tag-build (match what ships)
|
||||
|
||||
- **Who**: Dominik, ClaudeCode
|
||||
- **Why**: `moonlock-git`/`moongreet-git`/`moonset-git`/`sshfsc-git` carried the `-git` suffix (Arch convention: VCS package, user builds HEAD locally) but the registry ships pre-built binaries — the user never builds. The suffix lied about what is distributed. corsairctl already did it right: no suffix, build from a versioned git tag (`#tag=v$pkgver`) — the official-Arch-repo model (versioned source, built centrally, distributed as binary).
|
||||
- **Tradeoffs**: A `-bin` style (project CI builds the binary, PKGBUILD installs only a release asset) was considered but rejected: it needs new build infra in each project repo, whereas tag-build is the smallest change to the existing two-stage CI and corsairctl already proves the pattern. The build stays in CI (no OOM-relevant change). Downside: per-package `update-pkgver` now reads the latest tag instead of `git describe`.
|
||||
- **How**: In moonarch-pkgbuilds, `git mv <name>-git <name>`; PKGBUILD drops `pkgver()`, sets fixed `pkgver` = latest tag, `source=...#tag=v$pkgver`, `pkgname` without suffix, `pkgrel=1`, plus `replaces=('<name>-git')` + `conflicts=('<name>-git')` for clean client migration on `pacman -Syu`. moongreet keeps `epoch=1` (2026-04-28 rollback) and its install hook. corsairctl added as-is (already tag-style). `moonarch-git` `depends` updated to the new names (pkgrel 12 → 13). Per-project `update-pkgver.yaml` switched to tag-trigger + `git describe --tags --abbrev=0`. Old `-git` registry versions deleted manually (the name change defeats the auto zombie-cleanup). Scope: `sshfsc` deferred (only tag v0.1.0, HEAD 11 commits ahead — needs a fresh tag first); `sweet-cursors` stays `-git` (no version tags upstream).
|
||||
|
||||
## 2026-05-04 – moonarch-git: skip wlsunset in global enable loop
|
||||
|
||||
- **Who**: Dominik, ClaudeCode
|
||||
- **Why**: PKGBUILD's blanket loop over `defaults/etc/systemd/user/*.service` created `/etc/systemd/user/graphical-session.target.wants/wlsunset.service` — a global-scope symlink. The waybar nightlight toggle calls `systemctl --user disable wlsunset`, which only touches user-scope symlinks; the global one persists, so the filter came back on every reboot. Fix coordinates with moonarch repo (post-install.sh and CLAUDE.md updates) — see `moonarch/DECISIONS.md` 2026-05-04 entry.
|
||||
- **Tradeoffs**: A whitelist of services-to-enable (instead of blacklist) would be cleaner long-term, but the project ships exactly one toggle-able user service today; a `skip_enable` array reads more clearly against the existing loop. `pre_upgrade()` cleanup is conservative: removes only the wlsunset wants-symlink, leaves the unit file itself.
|
||||
- **How**: PKGBUILD `package()` — symlink loop now consults `skip_enable=("wlsunset.service")` and skips matching basenames. `moonarch.install` `pre_upgrade()` — deletes pre-existing `/etc/systemd/user/graphical-session.target.wants/wlsunset.service` so installed systems migrate cleanly. `pkgrel` bumped 11 → 12 so existing installs see the fix on next `pacman -Syu`; otherwise the registry would carry a same-versioned package and clients would skip the upgrade.
|
||||
|
||||
## 2026-04-28 – Bump epoch on moongreet-git after upstream version rollback
|
||||
- **Who**: Dominik, ClaudeCode
|
||||
- **Why**: `pacman -Syu` warned that local `moongreet-git 0.10.0.r0.gce9f219-3` is "newer" than the moonarch registry's `0.8.6.r0.gb9b6f50-1`. Cause: `greetd-moongreet` upstream was tagged `v0.9.0` and `v0.10.0` early on, then the tag history continued with `v0.8.4` → `v0.8.5` → `v0.8.6` patches on top — a deliberate downgrade of the version line. `pkgver()` uses `git describe --long --tags`, which now returns `0.8.6.r0.gb9b6f50` at HEAD, but any system that built moongreet before the tag rollback still has the higher-sorting `0.10.0` installed. Without an epoch bump, those systems will never accept the registry's 0.8.x as an upgrade.
|
||||
- **Tradeoffs**: Re-tagging upstream to leapfrog past v0.10.0 (e.g. v0.11.0) would also resolve the mismatch and avoid the epoch — but it would create a fake version that doesn't reflect the actual feature scope, and we'd be permanently chasing the v0.10.0 ghost on every future bump. Epoch is the canonical pacman mechanism for exactly this situation; one-time cost, no upstream lie.
|
||||
- **How**: `epoch=1` added to `moongreet-git/PKGBUILD`, `pkgrel` bumped 3 → 4 to retrigger CI.
|
||||
|
||||
## 2026-04-28 – Bump epoch on sweet-cursors-git to overrule AUR-built local installs
|
||||
- **Who**: Dominik, ClaudeCode
|
||||
- **Why**: `pacman -Syu` warned that local `sweet-cursors-git r445.1d92ac7-1` is "newer" than the moonarch registry's `r1.4b49c35-2`. Cause: our Gitea fork (`nevaforget/Sweet-cursors`) is a one-shot snapshot of `EliverLara/Sweet`'s `kde/cursors/Sweet-cursors/` from 2025-09-28 with a single `init` commit, so `pkgver()` always evaluates to `r1`. The local r445 came from the AUR package by `Gigas002` (source: `github.com/Gigas002/Sweet#cursors`, 445 commits, actively maintained, last cursor change 2026-03-02). Without an epoch bump, vercmp would flag the registry as a downgrade on every system that ever installed via paru/AUR.
|
||||
- **Tradeoffs**: Switching the PKGBUILD source to `Gigas002/Sweet#cursors` would track upstream and avoid the version mismatch entirely, but requires `inkscape` + `xorg-xcursorgen` makedeps and a non-trivial SVG-compile build step in CI. Cursor changes upstream are minimal in practice (one fix in 6 months), so the maintenance value is low. Keeping the snapshot keeps the build trivial and the source tiny — at the cost of being permanently frozen at the September 2025 state. Documented in the fork's README.
|
||||
- **How**: `epoch=1` added to `sweet-cursors-git/PKGBUILD`, `pkgrel` bumped 2 → 3 to retrigger CI. Added `README.md` to the `nevaforget/Sweet-cursors` Gitea repo explaining the snapshot rationale and pointing to `Gigas002/Sweet` for users who want a maintained variant.
|
||||
|
||||
## 2026-04-23 – Rust PKGBUILDs honour CARGO_TARGET_DIR
|
||||
- **Who**: Dominik, ClaudeCode
|
||||
- **Why**: The act_runner container sets `CARGO_TARGET_DIR=/cache/target` (for cross-build cache persistence), but `moongreet-git`/`moonlock-git`/`moonset-git` `package()` hardcoded `target/release/<bin>`. Run 87 compiled for 8 min and then failed at `install: cannot stat 'target/release/moongreet'` because the binary actually lived in `/cache/target/release/`. Silent until today because earlier builds pre-date the env var.
|
||||
- **Tradeoffs**: None meaningful — the fallback `${CARGO_TARGET_DIR:-target}` preserves local `makepkg` builds (no env var → still reads from `./target/`).
|
||||
- **How**: Patched `install -Dm755` in all three Rust-app PKGBUILDs to use `"${CARGO_TARGET_DIR:-target}/release/<bin>"`.
|
||||
|
||||
## 2026-04-23 – Single-threaded, low-priority build in CI to keep the Gitea host alive
|
||||
- **Who**: Dominik, ClaudeCode
|
||||
- **Why**: The act_runner container shares CPU/RAM/I/O with the Gitea host (network-host mode, no resource limits). Parallel Rust builds OOM-kill or thrash the host: run 86 (2026-04-23, moongreet-git 0.8.3.r1) stopped mid-compile at `Compiling gio v0.22.2` with no error, and gitea HTTPS was unreachable for ~11 min. Same pattern on 2026-04-20. Runner-side resource limits would be better, but require host-side config changes; a pipeline-side fix is portable and low-risk.
|
||||
- **Tradeoffs**: Builds are slower — single-threaded cargo compile of a moon* project takes ~2–3× as long. `nice -n 19` + `ionice -c 3` further delay the build when the host is busy, but that's the point. Slow build beats downed host.
|
||||
- **How**: `build-and-publish.yaml` exports `CARGO_BUILD_JOBS=1` and `MAKEFLAGS=-j1` before `makepkg`, and wraps `makepkg` with `nice -n 19 ionice -c 3`. Affects every package build in the matrix.
|
||||
|
||||
## 2026-04-21 – moonarch-git becomes a full meta-package (hard deps on all Arch-repo essentials + own registry siblings)
|
||||
- **Who**: Dominik, ClaudeCode
|
||||
- **Why**: `moonarch-git` listed `moongreet-git`/`moonlock-git`/`moonset-git` only as `optdepends` and omitted most Arch-repo essentials (wlsunset, networkmanager, bluez, xwayland-satellite, file-manager stack, zsh plugins, CLI tools, …) entirely — they lived only in `packages/official.txt`. `paru -S moonarch-git` on a fresh system therefore produced a desktop with no greeter, no lockscreen, no power menu, no nightlight, no network manager, no portals — a non-functional Moonarch. Split source of truth between PKGBUILD deps and txt files caused continuous drift (e.g. walker-bin was missing from both).
|
||||
- **Tradeoffs**: `moonarch-git` is now chunky — installing it pulls ~60 packages (vs ~20 before). Acceptable because this is exactly what every Moonarch system needs; a leaner package just shifted the install work to imperative scripts that silently failed. AUR packages cannot be hard `depends=` (pacman can't resolve AUR), so they stay in `packages/aur.txt` and post-install.sh pulls them explicitly. `optdepends=` was slashed to real extras (docker, rustup for dev, waterfox) — no more mirroring of aur.txt there.
|
||||
- **How**: Added to `depends=`: moongreet-git, moonlock-git, moonset-git, xwayland-satellite, libnotify, foot-terminfo, wlsunset, nwg-look, awww, libpulse, gst-plugin-pipewire, networkmanager + nm-applet + nm-openvpn + openvpn, bluez, gvfs + gvfs-{dnssd,mtp,smb}, udisks2, ntfs-3g, xdg-desktop-portal-{gnome,gtk}, qt6-5compat, zsh-{autosuggestions,syntax-highlighting}, bat, btop, eza, fastfetch, fd, fzf, lazygit, ripgrep, neovim, git, fwupd, ufw. Removed from `optdepends=`: all Moonarch ecosystem packages (now hard deps), all AUR packages (post-install.sh pulls from aur.txt), and already-depended Arch-repo packages. `pkgrel` bumped 9 → 10.
|
||||
|
||||
## 2026-04-20 – Registry is the only install path; drop paru --pkgbuilds
|
||||
- **Who**: Dominik, ClaudeCode
|
||||
- **Why**: Two parallel mechanisms for finding moonarch packages (the Arch registry via `[moonarch]` in `pacman.conf`, and paru's PKGBUILD-repo via `[moonarch-pkgbuilds]` in `paru.conf`) created ambiguous state: `paru -S` resolves from whichever has a matching version first, and diagnostics have to account for both. With the registry DB now stable (see zombie fix below), the PKGBUILD-repo path is redundant.
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
pkgbase = corsairctl
|
||||
pkgdesc = CLI tool for Corsair Bragi-protocol devices (HS80 RGB Wireless, etc.)
|
||||
pkgver = 0.1.2
|
||||
pkgrel = 1
|
||||
url = https://gitea.moonarch.de/nevaforget/corsairctl
|
||||
arch = x86_64
|
||||
license = MIT
|
||||
makedepends = cargo
|
||||
makedepends = pkg-config
|
||||
makedepends = alsa-lib
|
||||
makedepends = hidapi
|
||||
depends = hidapi
|
||||
depends = alsa-lib
|
||||
source = git+https://gitea.moonarch.de/nevaforget/corsairctl.git#tag=v0.1.2
|
||||
sha256sums = SKIP
|
||||
|
||||
pkgname = corsairctl
|
||||
@@ -0,0 +1,33 @@
|
||||
# Maintainer: nevaforget <dom@moonarch.de>
|
||||
pkgname=corsairctl
|
||||
pkgver=0.1.2
|
||||
pkgrel=1
|
||||
pkgdesc='CLI tool for Corsair Bragi-protocol devices (HS80 RGB Wireless, etc.)'
|
||||
arch=('x86_64')
|
||||
url='https://gitea.moonarch.de/nevaforget/corsairctl'
|
||||
license=('MIT')
|
||||
depends=('hidapi' 'alsa-lib')
|
||||
makedepends=('cargo' 'pkg-config' 'alsa-lib' 'hidapi')
|
||||
source=("git+${url}.git#tag=v$pkgver")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
prepare() {
|
||||
cd "$pkgname"
|
||||
export RUSTUP_TOOLCHAIN=stable
|
||||
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$pkgname"
|
||||
export RUSTUP_TOOLCHAIN=stable
|
||||
export CARGO_TARGET_DIR=target
|
||||
cargo build --frozen --release
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$pkgname"
|
||||
install -Dm755 "target/release/$pkgname" "$pkgdir/usr/bin/$pkgname"
|
||||
install -Dm755 "scripts/corsairctl-waybar.sh" "$pkgdir/usr/bin/corsairctl-waybar"
|
||||
install -Dm644 "udev/99-corsair.rules" "$pkgdir/usr/lib/udev/rules.d/99-corsair.rules"
|
||||
install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
pkgbase = moonarch-git
|
||||
pkgdesc = Moonarch desktop environment defaults — Niri, Waybar, Catppuccin Mocha
|
||||
pkgver = r125.dbc2997
|
||||
pkgrel = 13
|
||||
url = https://gitea.moonarch.de/nevaforget/moonarch
|
||||
install = moonarch.install
|
||||
arch = any
|
||||
license = MIT
|
||||
makedepends = git
|
||||
depends = moongreet
|
||||
depends = moonlock
|
||||
depends = moonset
|
||||
depends = niri
|
||||
depends = xwayland-satellite
|
||||
depends = greetd
|
||||
depends = waybar
|
||||
depends = swaync
|
||||
depends = libnotify
|
||||
depends = foot
|
||||
depends = foot-terminfo
|
||||
depends = cliphist
|
||||
depends = wl-clipboard
|
||||
depends = kanshi
|
||||
depends = wlsunset
|
||||
depends = nwg-look
|
||||
depends = brightnessctl
|
||||
depends = awww
|
||||
depends = pipewire
|
||||
depends = pipewire-alsa
|
||||
depends = pipewire-jack
|
||||
depends = pipewire-pulse
|
||||
depends = wireplumber
|
||||
depends = libpulse
|
||||
depends = alsa-utils
|
||||
depends = pavucontrol
|
||||
depends = gst-plugin-pipewire
|
||||
depends = networkmanager
|
||||
depends = network-manager-applet
|
||||
depends = networkmanager-openvpn
|
||||
depends = openvpn
|
||||
depends = bluez
|
||||
depends = bluez-utils
|
||||
depends = gvfs
|
||||
depends = gvfs-dnssd
|
||||
depends = gvfs-mtp
|
||||
depends = gvfs-smb
|
||||
depends = udisks2
|
||||
depends = ntfs-3g
|
||||
depends = xdg-desktop-portal-gnome
|
||||
depends = xdg-desktop-portal-gtk
|
||||
depends = qt6-5compat
|
||||
depends = ttf-ubuntusans-nerd
|
||||
depends = zsh
|
||||
depends = zsh-autosuggestions
|
||||
depends = zsh-syntax-highlighting
|
||||
depends = bat
|
||||
depends = btop
|
||||
depends = eza
|
||||
depends = fastfetch
|
||||
depends = fd
|
||||
depends = fzf
|
||||
depends = jq
|
||||
depends = lazygit
|
||||
depends = ripgrep
|
||||
depends = neovim
|
||||
depends = git
|
||||
depends = fwupd
|
||||
depends = ufw
|
||||
depends = polkit-gnome
|
||||
depends = upower
|
||||
optdepends = docker: container runtime
|
||||
optdepends = docker-compose: multi-container orchestration
|
||||
optdepends = rustup: Rust toolchain manager (development)
|
||||
optdepends = waterfox-bin: web browser
|
||||
provides = moonarch
|
||||
conflicts = moonarch
|
||||
backup = etc/zsh/zshrc.moonarch
|
||||
source = git+https://gitea.moonarch.de/nevaforget/moonarch.git
|
||||
sha256sums = SKIP
|
||||
|
||||
pkgname = moonarch-git
|
||||
+92
-55
@@ -4,8 +4,8 @@
|
||||
# Maintainer: Dominik Kressler
|
||||
|
||||
pkgname=moonarch-git
|
||||
pkgver=r106.0a38347
|
||||
pkgrel=9
|
||||
pkgver=r129.d101b23
|
||||
pkgrel=15
|
||||
pkgdesc="Moonarch desktop environment defaults — Niri, Waybar, Catppuccin Mocha"
|
||||
arch=('any')
|
||||
url="https://gitea.moonarch.de/nevaforget/moonarch"
|
||||
@@ -13,16 +13,25 @@ license=('MIT')
|
||||
install=moonarch.install
|
||||
|
||||
depends=(
|
||||
# Moonarch ecosystem (own registry)
|
||||
'moongreet'
|
||||
'moonlock'
|
||||
'moonset'
|
||||
'sweet-cursors'
|
||||
|
||||
# Compositor & session
|
||||
'niri'
|
||||
'xwayland-satellite'
|
||||
'greetd'
|
||||
|
||||
# Bar & notifications
|
||||
'waybar'
|
||||
'swaync'
|
||||
'libnotify'
|
||||
|
||||
# Terminal
|
||||
'foot'
|
||||
'foot-terminfo'
|
||||
|
||||
# Clipboard
|
||||
'cliphist'
|
||||
@@ -30,71 +39,80 @@ depends=(
|
||||
|
||||
# Display
|
||||
'kanshi'
|
||||
'wlsunset'
|
||||
'nwg-look'
|
||||
'brightnessctl'
|
||||
|
||||
# Wallpaper
|
||||
'awww'
|
||||
|
||||
# Audio
|
||||
'pipewire'
|
||||
'wireplumber'
|
||||
'pipewire-alsa'
|
||||
'pipewire-jack'
|
||||
'pipewire-pulse'
|
||||
'wireplumber'
|
||||
'libpulse'
|
||||
'alsa-utils'
|
||||
'pavucontrol'
|
||||
'gst-plugin-pipewire'
|
||||
|
||||
# Theming
|
||||
'ttf-ubuntusans-nerd'
|
||||
# Network
|
||||
'networkmanager'
|
||||
'network-manager-applet'
|
||||
'networkmanager-openvpn'
|
||||
'openvpn'
|
||||
|
||||
# System utilities referenced by helper scripts
|
||||
'brightnessctl'
|
||||
'jq'
|
||||
'libnotify'
|
||||
'upower'
|
||||
'polkit-gnome'
|
||||
# Bluetooth
|
||||
'bluez'
|
||||
'bluez-utils'
|
||||
|
||||
# File manager & portals
|
||||
'gvfs'
|
||||
'gvfs-dnssd'
|
||||
'gvfs-mtp'
|
||||
'gvfs-smb'
|
||||
'udisks2'
|
||||
'ntfs-3g'
|
||||
'xdg-desktop-portal-gnome'
|
||||
'xdg-desktop-portal-gtk'
|
||||
'qt6-5compat'
|
||||
|
||||
# Theming & fonts
|
||||
'ttf-ubuntusans-nerd'
|
||||
|
||||
# Shell
|
||||
'zsh'
|
||||
'zsh-autosuggestions'
|
||||
'zsh-syntax-highlighting'
|
||||
|
||||
# PipeWire extras for XDG config
|
||||
'pipewire-alsa'
|
||||
'pipewire-jack'
|
||||
'gst-plugin-pipewire'
|
||||
# CLI tools (referenced by zshrc + helper scripts)
|
||||
'bat'
|
||||
'btop'
|
||||
'eza'
|
||||
'fastfetch'
|
||||
'fd'
|
||||
'fzf'
|
||||
'jq'
|
||||
'lazygit'
|
||||
'ripgrep'
|
||||
|
||||
# Editor & VCS
|
||||
'neovim'
|
||||
'git'
|
||||
|
||||
# System
|
||||
'fwupd'
|
||||
'ufw'
|
||||
'polkit-gnome'
|
||||
'upower'
|
||||
)
|
||||
|
||||
optdepends=(
|
||||
# Moonarch ecosystem (install via paru from AUR/local builds)
|
||||
'moongreet-git: greetd greeter'
|
||||
'moonlock-git: Wayland lockscreen'
|
||||
'moonset-git: session power menu'
|
||||
|
||||
# AUR packages (install via paru)
|
||||
'walker-bin: application launcher'
|
||||
'elephant-bin: walker search daemon'
|
||||
'awww: wallpaper daemon (swww alternative)'
|
||||
'waypaper: wallpaper GUI'
|
||||
'stasis: idle manager'
|
||||
'colloid-catppuccin-gtk-theme-git: Catppuccin GTK theme'
|
||||
'sweet-cursors-git: cursor theme'
|
||||
|
||||
# General tools
|
||||
'docker: container runtime'
|
||||
'docker-compose: multi-container orchestration'
|
||||
'neovim: editor (EDITOR in zshrc)'
|
||||
'rustup: Rust toolchain'
|
||||
'git: version control'
|
||||
'lazygit: terminal UI for git'
|
||||
'btop: system monitor'
|
||||
'fastfetch: system info display'
|
||||
'auto-cpufreq: CPU frequency scaling'
|
||||
'ufw: firewall'
|
||||
'timeshift: system snapshots'
|
||||
'fwupd: firmware updates'
|
||||
'rustup: Rust toolchain manager (development)'
|
||||
'waterfox-bin: web browser'
|
||||
'blueberry: bluetooth manager GUI'
|
||||
'nwg-look: GTK settings editor'
|
||||
'wdisplays-persistent-gettext: display configuration GUI'
|
||||
'wl-color-picker: color picker'
|
||||
'waybar-niri-windows-bin: niri window titles for waybar'
|
||||
'waybar-niri-workspaces-enhanced-git: niri workspaces for waybar'
|
||||
'xwayland-satellite: X11 app support'
|
||||
'colloid-catppuccin-theme-git: full Catppuccin GTK+icon theme'
|
||||
)
|
||||
|
||||
makedepends=('git')
|
||||
@@ -178,6 +196,21 @@ package() {
|
||||
install -Dm644 defaults/xdg/swaync/style.css \
|
||||
"$pkgdir/usr/share/moonarch/swaync/style.css"
|
||||
|
||||
# --- mpv config (owned by moonarch-git; ModernZ color overrides via script-opts-append) ---
|
||||
install -Dm644 defaults/etc/mpv/mpv.conf "$pkgdir/etc/mpv/mpv.conf"
|
||||
|
||||
# --- Fontconfig generic-family defaults (owned; number 65 loads after 60-latin to win) ---
|
||||
install -Dm644 defaults/etc/fonts/conf.d/65-moonarch-fonts.conf \
|
||||
"$pkgdir/etc/fonts/conf.d/65-moonarch-fonts.conf"
|
||||
|
||||
# --- xdg-desktop-portal Inhibit override (owned; higher priority than niri's
|
||||
# /usr/share default). xdg-desktop-portal-gtk reports the Inhibit interface
|
||||
# as success even though nothing implements it under Niri, so Firefox/Waterfox
|
||||
# skips the native Wayland idle-inhibit. With no backend the browser falls back
|
||||
# to zwp_idle_inhibit, which Niri honors -> windowed video keeps the screen awake. ---
|
||||
install -Dm644 defaults/etc/xdg-desktop-portal/niri-portals.conf \
|
||||
"$pkgdir/etc/xdg-desktop-portal/niri-portals.conf"
|
||||
|
||||
# --- Reference configs for greetd/moongreet (deployed by .install, not owned) ---
|
||||
install -Dm644 defaults/etc/greetd/config.toml \
|
||||
"$pkgdir/usr/share/moonarch/greetd/config.toml"
|
||||
@@ -189,17 +222,21 @@ package() {
|
||||
# --- Systemd user services -> /etc/systemd/user/ ---
|
||||
install -Dm644 defaults/etc/systemd/user/*.service -t "$pkgdir/etc/systemd/user/"
|
||||
|
||||
# Enable services by creating the WantedBy symlinks directly
|
||||
# Enable services by creating the WantedBy symlinks directly.
|
||||
# Toggle-able services (user-controlled via UI) are skipped here so
|
||||
# `systemctl --user disable` can actually take effect — a global-scope
|
||||
# symlink in /etc/ would override any user-scope disable.
|
||||
install -dm755 "$pkgdir/etc/systemd/user/graphical-session.target.wants"
|
||||
skip_enable=("wlsunset.service")
|
||||
for svc in defaults/etc/systemd/user/*.service; do
|
||||
ln -sf "../$(basename "$svc")" \
|
||||
"$pkgdir/etc/systemd/user/graphical-session.target.wants/$(basename "$svc")"
|
||||
name="$(basename "$svc")"
|
||||
for s in "${skip_enable[@]}"; do
|
||||
[[ "$name" == "$s" ]] && continue 2
|
||||
done
|
||||
ln -sf "../$name" \
|
||||
"$pkgdir/etc/systemd/user/graphical-session.target.wants/$name"
|
||||
done
|
||||
|
||||
# --- udev rules -> /usr/lib/udev/rules.d/ ---
|
||||
install -Dm644 defaults/etc/udev/rules.d/90-moonarch-battery.rules \
|
||||
"$pkgdir/usr/lib/udev/rules.d/90-moonarch-battery.rules"
|
||||
|
||||
# --- Systemd system service (battery conservation restore) -> /usr/lib/systemd/system/ ---
|
||||
install -Dm644 defaults/etc/systemd/system/moonarch-batsaver.service \
|
||||
"$pkgdir/usr/lib/systemd/system/moonarch-batsaver.service"
|
||||
|
||||
@@ -95,6 +95,11 @@ pre_upgrade() {
|
||||
done < /etc/passwd
|
||||
rm -f /etc/systemd/user/graphical-session.target.wants/cliphist.service 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Drop legacy global-scope wlsunset enablement. Nightlight is a toggle —
|
||||
# the global symlink overrode user-scope disable, so the filter survived
|
||||
# reboots even after the user turned it off.
|
||||
rm -f /etc/systemd/user/graphical-session.target.wants/wlsunset.service 2>/dev/null || true
|
||||
}
|
||||
|
||||
post_upgrade() {
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
pkgbase = moongreet-git
|
||||
pkgbase = moongreet
|
||||
pkgdesc = A greetd greeter for Wayland with GTK4 and Layer Shell
|
||||
pkgver = 0.8.3.r0.g48d363b
|
||||
pkgver = 0.10.1
|
||||
pkgrel = 1
|
||||
epoch = 1
|
||||
url = https://gitea.moonarch.de/nevaforget/greetd-moongreet
|
||||
install = moongreet.install
|
||||
arch = x86_64
|
||||
license = MIT
|
||||
makedepends = git
|
||||
makedepends = cargo
|
||||
makedepends = gtk4
|
||||
makedepends = gtk4-layer-shell
|
||||
makedepends = pkgconf
|
||||
depends = gtk4
|
||||
depends = gtk4-layer-shell
|
||||
depends = greetd
|
||||
provides = moongreet
|
||||
conflicts = moongreet
|
||||
source = git+https://gitea.moonarch.de/nevaforget/greetd-moongreet.git
|
||||
conflicts = moongreet-git
|
||||
replaces = moongreet-git
|
||||
source = git+https://gitea.moonarch.de/nevaforget/greetd-moongreet.git#tag=v0.10.1
|
||||
sha256sums = SKIP
|
||||
|
||||
pkgname = moongreet-git
|
||||
pkgname = moongreet
|
||||
@@ -1,11 +1,12 @@
|
||||
# ABOUTME: PKGBUILD for Moongreet — greetd greeter for Wayland.
|
||||
# ABOUTME: Builds from git source with automatic version detection.
|
||||
# ABOUTME: Builds from a versioned git tag.
|
||||
|
||||
# Maintainer: Dominik Kressler
|
||||
|
||||
pkgname=moongreet-git
|
||||
pkgver=0.8.3.r0.g48d363b
|
||||
pkgrel=2
|
||||
pkgname=moongreet
|
||||
epoch=1
|
||||
pkgver=0.10.1
|
||||
pkgrel=1
|
||||
pkgdesc="A greetd greeter for Wayland with GTK4 and Layer Shell"
|
||||
arch=('x86_64')
|
||||
url="https://gitea.moonarch.de/nevaforget/greetd-moongreet"
|
||||
@@ -18,18 +19,16 @@ depends=(
|
||||
makedepends=(
|
||||
'git'
|
||||
'cargo'
|
||||
'gtk4'
|
||||
'gtk4-layer-shell'
|
||||
'pkgconf'
|
||||
)
|
||||
provides=('moongreet')
|
||||
conflicts=('moongreet')
|
||||
replaces=('moongreet-git')
|
||||
conflicts=('moongreet-git')
|
||||
install=moongreet.install
|
||||
source=("git+${url}.git")
|
||||
source=("git+${url}.git#tag=v$pkgver")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
pkgver() {
|
||||
cd "$srcdir/greetd-moongreet"
|
||||
git describe --long --tags | sed 's/^v//;s/-/.r/;s/-/./'
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$srcdir/greetd-moongreet"
|
||||
cargo build --release
|
||||
@@ -37,11 +36,15 @@ build() {
|
||||
|
||||
package() {
|
||||
cd "$srcdir/greetd-moongreet"
|
||||
install -Dm755 target/release/moongreet "$pkgdir/usr/bin/moongreet"
|
||||
install -Dm755 "${CARGO_TARGET_DIR:-target}/release/moongreet" "$pkgdir/usr/bin/moongreet"
|
||||
|
||||
# Greeter config
|
||||
install -Dm644 config/moongreet.toml "$pkgdir/etc/moongreet/moongreet.toml"
|
||||
|
||||
# Polkit rule — allow the greeter user to reboot/power off
|
||||
install -Dm644 config/polkit/50-moongreet-power.rules \
|
||||
"$pkgdir/usr/share/polkit-1/rules.d/50-moongreet-power.rules"
|
||||
|
||||
# Cache directories
|
||||
install -dm700 "$pkgdir/var/cache/moongreet"
|
||||
install -dm700 "$pkgdir/var/cache/moongreet/last-session"
|
||||
@@ -1,21 +1,26 @@
|
||||
pkgbase = moonlock-git
|
||||
pkgbase = moonlock
|
||||
pkgdesc = A secure Wayland lockscreen with GTK4, PAM and fingerprint support
|
||||
pkgver = 0.6.9.r1.g3f4448c
|
||||
pkgrel = 1
|
||||
pkgver = 0.6.19
|
||||
pkgrel = 2
|
||||
url = https://gitea.moonarch.de/nevaforget/moonlock
|
||||
arch = x86_64
|
||||
license = MIT
|
||||
makedepends = git
|
||||
makedepends = cargo
|
||||
makedepends = gtk4
|
||||
makedepends = gtk4-layer-shell
|
||||
makedepends = gtk-session-lock
|
||||
makedepends = pam
|
||||
makedepends = pkgconf
|
||||
depends = gtk4
|
||||
depends = gtk4-layer-shell
|
||||
depends = gtk-session-lock
|
||||
depends = pam
|
||||
depends = systemd-libs
|
||||
optdepends = fprintd: fingerprint authentication support
|
||||
provides = moonlock
|
||||
conflicts = moonlock
|
||||
source = git+https://gitea.moonarch.de/nevaforget/moonlock.git
|
||||
conflicts = moonlock-git
|
||||
replaces = moonlock-git
|
||||
source = git+https://gitea.moonarch.de/nevaforget/moonlock.git#tag=v0.6.17
|
||||
sha256sums = SKIP
|
||||
|
||||
pkgname = moonlock-git
|
||||
pkgname = moonlock
|
||||
@@ -1,11 +1,11 @@
|
||||
# ABOUTME: PKGBUILD for Moonlock — secure Wayland lockscreen.
|
||||
# ABOUTME: Builds from git source with automatic version detection.
|
||||
# ABOUTME: Builds from a versioned git tag.
|
||||
|
||||
# Maintainer: Dominik Kressler
|
||||
|
||||
pkgname=moonlock-git
|
||||
pkgver=0.6.9.r1.g3f4448c
|
||||
pkgrel=5
|
||||
pkgname=moonlock
|
||||
pkgver=0.6.19
|
||||
pkgrel=2
|
||||
pkgdesc="A secure Wayland lockscreen with GTK4, PAM and fingerprint support"
|
||||
arch=('x86_64')
|
||||
url="https://gitea.moonarch.de/nevaforget/moonlock"
|
||||
@@ -20,20 +20,20 @@ depends=(
|
||||
makedepends=(
|
||||
'git'
|
||||
'cargo'
|
||||
'gtk4'
|
||||
'gtk4-layer-shell'
|
||||
'gtk-session-lock'
|
||||
'pam'
|
||||
'pkgconf'
|
||||
)
|
||||
optdepends=(
|
||||
'fprintd: fingerprint authentication support'
|
||||
)
|
||||
provides=('moonlock')
|
||||
conflicts=('moonlock')
|
||||
source=("git+${url}.git")
|
||||
replaces=('moonlock-git')
|
||||
conflicts=('moonlock-git')
|
||||
source=("git+${url}.git#tag=v$pkgver")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
pkgver() {
|
||||
cd "$srcdir/moonlock"
|
||||
git describe --long --tags | sed 's/^v//;s/-/.r/;s/-/./'
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$srcdir/moonlock"
|
||||
cargo build --release
|
||||
@@ -41,7 +41,7 @@ build() {
|
||||
|
||||
package() {
|
||||
cd "$srcdir/moonlock"
|
||||
install -Dm755 target/release/moonlock "$pkgdir/usr/bin/moonlock"
|
||||
install -Dm755 "${CARGO_TARGET_DIR:-target}/release/moonlock" "$pkgdir/usr/bin/moonlock"
|
||||
|
||||
# PAM configuration
|
||||
install -Dm644 config/moonlock-pam "$pkgdir/etc/pam.d/moonlock"
|
||||
@@ -1,17 +1,20 @@
|
||||
pkgbase = moonset-git
|
||||
pkgbase = moonset
|
||||
pkgdesc = A Wayland session power menu with GTK4 and Layer Shell
|
||||
pkgver = 0.8.2.r0.gd030f13
|
||||
pkgver = 0.9.1
|
||||
pkgrel = 1
|
||||
url = https://gitea.moonarch.de/nevaforget/moonset
|
||||
arch = x86_64
|
||||
license = MIT
|
||||
makedepends = git
|
||||
makedepends = cargo
|
||||
makedepends = gtk4
|
||||
makedepends = gtk4-layer-shell
|
||||
makedepends = pkgconf
|
||||
depends = gtk4
|
||||
depends = gtk4-layer-shell
|
||||
provides = moonset
|
||||
conflicts = moonset
|
||||
source = git+https://gitea.moonarch.de/nevaforget/moonset.git
|
||||
conflicts = moonset-git
|
||||
replaces = moonset-git
|
||||
source = git+https://gitea.moonarch.de/nevaforget/moonset.git#tag=v0.8.5
|
||||
sha256sums = SKIP
|
||||
|
||||
pkgname = moonset-git
|
||||
pkgname = moonset
|
||||
@@ -1,11 +1,11 @@
|
||||
# ABOUTME: PKGBUILD for Moonset — Wayland session power menu.
|
||||
# ABOUTME: Builds from git source with automatic version detection.
|
||||
# ABOUTME: Builds from a versioned git tag.
|
||||
|
||||
# Maintainer: Dominik Kressler
|
||||
|
||||
pkgname=moonset-git
|
||||
pkgver=0.8.2.r0.gd030f13
|
||||
pkgrel=2
|
||||
pkgname=moonset
|
||||
pkgver=0.9.1
|
||||
pkgrel=1
|
||||
pkgdesc="A Wayland session power menu with GTK4 and Layer Shell"
|
||||
arch=('x86_64')
|
||||
url="https://gitea.moonarch.de/nevaforget/moonset"
|
||||
@@ -17,17 +17,15 @@ depends=(
|
||||
makedepends=(
|
||||
'git'
|
||||
'cargo'
|
||||
'gtk4'
|
||||
'gtk4-layer-shell'
|
||||
'pkgconf'
|
||||
)
|
||||
provides=('moonset')
|
||||
conflicts=('moonset')
|
||||
source=("git+${url}.git")
|
||||
replaces=('moonset-git')
|
||||
conflicts=('moonset-git')
|
||||
source=("git+${url}.git#tag=v$pkgver")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
pkgver() {
|
||||
cd "$srcdir/moonset"
|
||||
git describe --long --tags | sed 's/^v//;s/-/.r/;s/-/./'
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$srcdir/moonset"
|
||||
cargo build --release
|
||||
@@ -35,7 +33,7 @@ build() {
|
||||
|
||||
package() {
|
||||
cd "$srcdir/moonset"
|
||||
install -Dm755 target/release/moonset "$pkgdir/usr/bin/moonset"
|
||||
install -Dm755 "${CARGO_TARGET_DIR:-target}/release/moonset" "$pkgdir/usr/bin/moonset"
|
||||
|
||||
# Example config
|
||||
install -Dm644 config/moonset.toml "$pkgdir/etc/moonset/moonset.toml.example"
|
||||
@@ -1,6 +1,6 @@
|
||||
pkgbase = sshfsc-git
|
||||
pkgbase = sshfsc
|
||||
pkgdesc = Quickly mount remote systems via SSHFS based on your ssh_config
|
||||
pkgver = 0.1.0.r2.gba89562
|
||||
pkgver = 0.2.0
|
||||
pkgrel = 1
|
||||
url = https://gitea.moonarch.de/nevaforget/sshfs_connect
|
||||
arch = x86_64
|
||||
@@ -8,9 +8,9 @@ pkgbase = sshfsc-git
|
||||
makedepends = git
|
||||
makedepends = go
|
||||
depends = sshfs
|
||||
provides = sshfsc
|
||||
conflicts = sshfsc
|
||||
source = git+https://gitea.moonarch.de/nevaforget/sshfs_connect.git
|
||||
conflicts = sshfsc-git
|
||||
replaces = sshfsc-git
|
||||
source = git+https://gitea.moonarch.de/nevaforget/sshfs_connect.git#tag=v0.2.0
|
||||
sha256sums = SKIP
|
||||
|
||||
pkgname = sshfsc-git
|
||||
pkgname = sshfsc
|
||||
@@ -1,10 +1,10 @@
|
||||
# ABOUTME: PKGBUILD for sshfsc — quick SSHFS mounter driven by ssh_config.
|
||||
# ABOUTME: Builds from git source with automatic version detection.
|
||||
# ABOUTME: Builds from a versioned git tag.
|
||||
|
||||
# Maintainer: Dominik Kressler
|
||||
|
||||
pkgname=sshfsc-git
|
||||
pkgver=0.1.0.r2.gba89562
|
||||
pkgname=sshfsc
|
||||
pkgver=0.2.0
|
||||
pkgrel=1
|
||||
pkgdesc="Quickly mount remote systems via SSHFS based on your ssh_config"
|
||||
arch=('x86_64')
|
||||
@@ -17,16 +17,11 @@ makedepends=(
|
||||
'git'
|
||||
'go'
|
||||
)
|
||||
provides=('sshfsc')
|
||||
conflicts=('sshfsc')
|
||||
source=("git+${url}.git")
|
||||
replaces=('sshfsc-git')
|
||||
conflicts=('sshfsc-git')
|
||||
source=("git+${url}.git#tag=v$pkgver")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
pkgver() {
|
||||
cd "$srcdir/sshfs_connect"
|
||||
git describe --long --tags | sed 's/^v//;s/-/.r/;s/-/./'
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$srcdir/sshfs_connect"
|
||||
export CGO_CPPFLAGS="${CPPFLAGS}"
|
||||
@@ -4,8 +4,9 @@
|
||||
# Maintainer: Dominik Kressler
|
||||
|
||||
pkgname=sweet-cursors-git
|
||||
epoch=1
|
||||
pkgver=r1.4b49c35
|
||||
pkgrel=2
|
||||
pkgrel=4
|
||||
pkgdesc="Sweet cursor theme"
|
||||
arch=('any')
|
||||
url="https://gitea.moonarch.de/nevaforget/Sweet-cursors"
|
||||
|
||||
Reference in New Issue
Block a user