diff --git a/README.md b/README.md index 613593c..28a2f28 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,11 @@ Arch Linux package builds for the Moonarch ecosystem. Use with [paru](https://gi | Package | Description | |---------|-------------| +| `moonarch-git` | Desktop environment defaults (Niri, Waybar, Catppuccin Mocha) | | `moonset-git` | Wayland session power menu | | `moonlock-git` | Wayland lockscreen with PAM and fingerprint support | | `moongreet-git` | greetd greeter for Wayland | +| `sweet-cursors-git` | Sweet cursor theme | ## Setup @@ -30,7 +32,7 @@ This downloads the PKGBUILDs from Gitea. Without this step, paru will not find t ## Install ```bash -paru -S moonset-git moonlock-git moongreet-git +paru -S moonarch-git # pulls in all ecosystem packages as dependencies ``` ## Update diff --git a/moonarch-git/PKGBUILD b/moonarch-git/PKGBUILD new file mode 100644 index 0000000..33c5a8c --- /dev/null +++ b/moonarch-git/PKGBUILD @@ -0,0 +1,172 @@ +# ABOUTME: PKGBUILD for Moonarch — desktop environment defaults for Niri + Catppuccin Mocha. +# ABOUTME: Deploys XDG configs, helper scripts, zsh defaults, wallpaper and moonarch-update. + +# Maintainer: Dominik Kressler + +pkgname=moonarch-git +pkgver=0 +pkgrel=1 +pkgdesc="Moonarch desktop environment defaults — Niri, Waybar, Catppuccin Mocha" +arch=('any') +url="https://gitea.moonarch.de/nevaforget/moonarch" +license=('MIT') +install=moonarch.install + +depends=( + # Compositor & session + 'niri' + 'greetd' + 'moongreet-git' + 'moonlock-git' + 'moonset-git' + + # Bar, launcher, notifications + 'waybar' + 'rofi-lbonn-wayland-git' + 'dunst' + + # Terminal + 'foot' + + # Clipboard + 'cliphist' + 'wl-clipboard' + + # Display & wallpaper + 'kanshi' + 'awww' + 'waypaper' + + # Audio + 'pipewire' + 'wireplumber' + 'pipewire-pulse' + 'alsa-utils' + 'pavucontrol' + + # Idle & lock + 'stasis' + 'gtklock' + 'gtklock-playerctl-module' + 'gtklock-powerbar-module' + 'gtklock-userinfo-module' + 'gtklock-dpms-module' + + # Theming + 'colloid-catppuccin-gtk-theme-git' + 'sweet-cursors-git' + 'ttf-ubuntusans-nerd' + + # System utilities referenced by helper scripts + 'brightnessctl' + 'libnotify' + 'upower' + 'wlogout' + 'polkit-gnome' + 'bluez-utils' + + # Shell + 'zsh' + + # PipeWire extras for XDG config + 'pipewire-alsa' + 'pipewire-jack' + 'gst-plugin-pipewire' +) + +optdepends=( + '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' + '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') +provides=('moonarch') +conflicts=('moonarch') +source=("git+${url}.git") +sha256sums=('SKIP') + +pkgver() { + cd "$srcdir/moonarch" + printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" +} + +package() { + cd "$srcdir/moonarch" + + # --- XDG configs -> /etc/xdg/ --- + local _xdg_src="defaults/xdg" + while IFS= read -r -d '' file; do + local _rel="${file#"$_xdg_src/"}" + if [[ "$file" == *.sh ]]; then + install -Dm755 "$file" "$pkgdir/etc/xdg/$_rel" + else + install -Dm644 "$file" "$pkgdir/etc/xdg/$_rel" + fi + done < <(find "$_xdg_src" -type f -print0) + + # GTK4 theme symlinks (override settings.ini already installed above) + ln -sf /usr/share/themes/Colloid-Catppuccin/gtk-4.0/gtk-dark.css \ + "$pkgdir/etc/xdg/gtk-4.0/gtk.css" + ln -sf /usr/share/themes/Colloid-Catppuccin/gtk-4.0/gtk-dark.css \ + "$pkgdir/etc/xdg/gtk-4.0/gtk-dark.css" + ln -sf /usr/share/themes/Colloid-Catppuccin/gtk-4.0/assets \ + "$pkgdir/etc/xdg/gtk-4.0/assets" + + # --- Helper scripts -> /usr/bin/ --- + install -Dm755 defaults/bin/moonarch-* -t "$pkgdir/usr/bin/" + + # moonarch-update + install -Dm755 scripts/moonarch-update "$pkgdir/usr/bin/moonarch-update" + + # awww compatibility symlinks (waypaper calls swww) + ln -sf /usr/bin/awww "$pkgdir/usr/bin/swww" + ln -sf /usr/bin/awww-daemon "$pkgdir/usr/bin/swww-daemon" + + # --- Zsh config --- + install -Dm644 defaults/shell/zshrc "$pkgdir/etc/zsh/zshrc.moonarch" + + # --- Wallpaper --- + install -Dm644 defaults/backgrounds/wallpaper.jpg \ + "$pkgdir/usr/share/moonarch/wallpaper.jpg" + + # --- Package lists (data files for moonarch-update) --- + install -Dm644 packages/official.txt "$pkgdir/usr/share/moonarch/official.txt" + install -Dm644 packages/aur.txt "$pkgdir/usr/share/moonarch/aur.txt" + + # --- Reference configs for greetd/moongreet (deployed by .install, not owned) --- + install -Dm644 defaults/etc/greetd/config.toml \ + "$pkgdir/usr/share/moonarch/greetd/config.toml" + install -Dm644 defaults/etc/greetd/niri-greeter.kdl \ + "$pkgdir/usr/share/moonarch/greetd/niri-greeter.kdl" + install -Dm644 defaults/etc/moongreet/moongreet.toml \ + "$pkgdir/usr/share/moonarch/moongreet/moongreet.toml" + + # --- User config templates (for post-install.sh / transform.sh) --- + while IFS= read -r -d '' file; do + local _rel="${file#defaults/user/}" + install -Dm644 "$file" "$pkgdir/usr/share/moonarch/user-defaults/$_rel" + done < <(find defaults/user -type f -print0) +} + +backup=( + 'etc/zsh/zshrc.moonarch' +) diff --git a/moonarch-git/moonarch.install b/moonarch-git/moonarch.install new file mode 100644 index 0000000..0ee5739 --- /dev/null +++ b/moonarch-git/moonarch.install @@ -0,0 +1,34 @@ +# ABOUTME: Post-install hooks for moonarch-git package. +# ABOUTME: Handles zsh integration and configs owned by other packages. + +post_install() { + # Zsh integration: source moonarch defaults for users without ~/.zshrc + if ! grep -q "zshrc.moonarch" /etc/zsh/zshrc 2>/dev/null; then + echo '# Moonarch defaults (overridden by ~/.zshrc)' >> /etc/zsh/zshrc + echo '[[ ! -f "$HOME/.zshrc" ]] && source /etc/zsh/zshrc.moonarch' >> /etc/zsh/zshrc + fi + + # Deploy greetd config (file owned by greetd package, overwrite deliberately) + if [ -d /etc/greetd ]; then + cp /usr/share/moonarch/greetd/config.toml /etc/greetd/config.toml + cp /usr/share/moonarch/greetd/niri-greeter.kdl /etc/greetd/niri-greeter.kdl + fi + + # Deploy moongreet config (file owned by moongreet-git, overwrite deliberately) + if [ -d /etc/moongreet ]; then + cp /usr/share/moonarch/moongreet/moongreet.toml /etc/moongreet/moongreet.toml + fi + + # Cleanup legacy /usr/local/bin/ scripts from pre-package installs + rm -f /usr/local/bin/moonarch-* 2>/dev/null || true + rm -f /usr/local/bin/swww /usr/local/bin/swww-daemon 2>/dev/null || true + rm -f /usr/local/bin/moonarch-update 2>/dev/null || true + + echo "==> Moonarch defaults installed." + echo "==> For first-time setup run: /opt/moonarch/scripts/post-install.sh" + echo "==> This enables services, configures firewall, and sets up user defaults." +} + +post_upgrade() { + post_install +} diff --git a/sweet-cursors-git/PKGBUILD b/sweet-cursors-git/PKGBUILD new file mode 100644 index 0000000..a77a91a --- /dev/null +++ b/sweet-cursors-git/PKGBUILD @@ -0,0 +1,28 @@ +# ABOUTME: PKGBUILD for Sweet-cursors — cursor theme from the Sweet project. +# ABOUTME: Installs the cursor theme to /usr/share/icons/Sweet-cursors. + +# Maintainer: Dominik Kressler + +pkgname=sweet-cursors-git +pkgver=0 +pkgrel=1 +pkgdesc="Sweet cursor theme" +arch=('any') +url="https://github.com/EliverLara/Sweet" +license=('GPL3') +makedepends=('git') +provides=('sweet-cursors') +conflicts=('sweet-cursors') +source=("git+${url}.git") +sha256sums=('SKIP') + +pkgver() { + cd "$srcdir/Sweet" + printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" +} + +package() { + cd "$srcdir/Sweet" + install -dm755 "$pkgdir/usr/share/icons" + cp -r kde/cursors/Sweet-cursors "$pkgdir/usr/share/icons/" +}