From 02e26930ab8c4fcdea8aafaeb6da84fc7b51a187 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 10:44:56 -0800 Subject: [PATCH 01/24] hypercube packages --- .github/workflows/build-disk.yml | 3 +- .github/workflows/build.yml | 16 +- Containerfile | 15 +- Justfile | 8 +- build_files/base/01-base-system.sh | 98 ++++++++++ build_files/dx/01-dx-tooling.sh | 36 ++++ ...e-branding.sh => 01-hypercube-branding.sh} | 19 +- .../hypercube/01-hypercube-packages.sh | 54 ----- build_files/hypercube/99-tests.sh | 93 ++++++--- build_files/hyprland/01-hyprland-desktop.sh | 87 +++++++++ build_files/shared/build.sh | 39 ++-- build_files/shared/clean-stage.sh | 7 + .../branding/hypercube/branding.desc | 28 +++ .../calamares/branding/hypercube/show.qml | 184 ++++++++++++++++++ iso_files/calamares/modules/bootc-deploy.conf | 12 ++ iso_files/calamares/modules/users.conf | 39 ++++ iso_files/calamares/modules/welcome.conf | 21 ++ iso_files/calamares/settings.conf | 38 ++++ iso_files/configure_live_session.sh | 63 ++++++ iso_files/hide_hyprland_session.sh | 10 - iso_files/livesys-hyprland | 38 ++++ packages/livesys-scripts/livesys-hyprland | 62 ++++++ packages/livesys-scripts/livesys-scripts.spec | 66 +++++++ .../shared/etc/dconf/db/gdm.d/01-hypercube | 18 -- .../dconf/db/local.d/01-hypercube-dark-mode | 9 +- system_files/shared/etc/dconf/profile/gdm | 2 - .../shared/etc/distrobox/distrobox.ini | 11 ++ system_files/shared/etc/greetd/config.toml | 8 + .../shared/usr/share/ublue-os/just/61-dx.just | 98 ++++++++++ 29 files changed, 1027 insertions(+), 155 deletions(-) create mode 100755 build_files/base/01-base-system.sh create mode 100755 build_files/dx/01-dx-tooling.sh rename build_files/hypercube/{00-hypercube-branding.sh => 01-hypercube-branding.sh} (88%) delete mode 100755 build_files/hypercube/01-hypercube-packages.sh create mode 100755 build_files/hyprland/01-hyprland-desktop.sh create mode 100644 iso_files/calamares/branding/hypercube/branding.desc create mode 100644 iso_files/calamares/branding/hypercube/show.qml create mode 100644 iso_files/calamares/modules/bootc-deploy.conf create mode 100644 iso_files/calamares/modules/users.conf create mode 100644 iso_files/calamares/modules/welcome.conf create mode 100644 iso_files/calamares/settings.conf create mode 100755 iso_files/configure_live_session.sh delete mode 100755 iso_files/hide_hyprland_session.sh create mode 100644 iso_files/livesys-hyprland create mode 100644 packages/livesys-scripts/livesys-hyprland create mode 100644 packages/livesys-scripts/livesys-scripts.spec delete mode 100644 system_files/shared/etc/dconf/db/gdm.d/01-hypercube delete mode 100644 system_files/shared/etc/dconf/profile/gdm create mode 100644 system_files/shared/etc/distrobox/distrobox.ini create mode 100644 system_files/shared/etc/greetd/config.toml create mode 100644 system_files/shared/usr/share/ublue-os/just/61-dx.just diff --git a/.github/workflows/build-disk.yml b/.github/workflows/build-disk.yml index 356b1cd..caa016f 100644 --- a/.github/workflows/build-disk.yml +++ b/.github/workflows/build-disk.yml @@ -58,7 +58,8 @@ jobs: image-ref: ${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ matrix.variant.tag }} iso-dest: ${{ github.workspace }}/output.iso builder-distro: fedora - hook-pre-initramfs: ${{ github.workspace }}/iso_files/hide_hyprland_session.sh + livesys: false + hook-post-rootfs: ${{ github.workspace }}/iso_files/configure_live_session.sh - name: Rename ISO and generate checksum id: rename diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 017968b..84a48ad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,12 +14,13 @@ on: workflow_dispatch: env: - IMAGE_DESC: "Hypercube - A Hyprland-focused bootc image built on Bluefin-DX" - IMAGE_KEYWORDS: "bootc,ublue,universal-blue,hyprland,hypercube,wayland" + IMAGE_DESC: "Hypercube - A developer workstation with Hyprland built on Fedora Atomic" + IMAGE_KEYWORDS: "bootc,ublue,universal-blue,hyprland,hypercube,wayland,developer" IMAGE_LOGO_URL: "https://raw.githubusercontent.com/${{ github.repository_owner }}/${{ github.event.repository.name }}/main/branding/hypercube-logo.png" IMAGE_NAME: "${{ github.event.repository.name }}" IMAGE_REGISTRY: "ghcr.io/${{ github.repository_owner }}" DEFAULT_TAG: "latest" + FEDORA_VERSION: "43" concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} @@ -40,10 +41,12 @@ jobs: matrix: variant: - flavor: "main" - base_image: "ghcr.io/ublue-os/bluefin-dx:stable-daily" + source_image: "base" + source_suffix: "-main" tag_suffix: "" - flavor: "nvidia" - base_image: "ghcr.io/ublue-os/bluefin-dx-nvidia:stable-daily" + source_image: "base" + source_suffix: "-nvidia" tag_suffix: "-nvidia" steps: @@ -104,9 +107,12 @@ jobs: tags: ${{ steps.metadata.outputs.tags }} labels: ${{ steps.metadata.outputs.labels }} build-args: | - BASE_IMAGE=${{ matrix.variant.base_image }} + SOURCE_IMAGE=${{ matrix.variant.source_image }} + SOURCE_SUFFIX=${{ matrix.variant.source_suffix }} + FEDORA_VERSION=${{ env.FEDORA_VERSION }} IMAGE_NAME=${{ env.IMAGE_NAME }} IMAGE_VENDOR=${{ github.repository_owner }} + IMAGE_FLAVOR=${{ matrix.variant.flavor }} oci: false - name: Login to GitHub Container Registry diff --git a/Containerfile b/Containerfile index fa4f098..893dfa3 100644 --- a/Containerfile +++ b/Containerfile @@ -1,12 +1,15 @@ -# Hypercube Container Build -# Aligned with Bluefin patterns +# Hypercube v2 Container Build +# Built from ublue-os/base-main (pure Hyprland, no GNOME) # ============================================ # Build Arguments # ============================================ -ARG BASE_IMAGE=ghcr.io/ublue-os/bluefin-dx:stable-daily +ARG SOURCE_IMAGE="base" +ARG SOURCE_SUFFIX="-main" +ARG FEDORA_VERSION="43" ARG IMAGE_NAME=hypercube ARG IMAGE_VENDOR=binarypie-dev +ARG IMAGE_FLAVOR="main" ARG SHA_HEAD_SHORT="" # ============================================ @@ -20,16 +23,20 @@ COPY build_files /build_files # ============================================ # Stage 2: Main Build # ============================================ -FROM ${BASE_IMAGE} +FROM ghcr.io/ublue-os/${SOURCE_IMAGE}${SOURCE_SUFFIX}:${FEDORA_VERSION} # Re-declare ARGs after FROM (they don't persist across stages) ARG IMAGE_NAME ARG IMAGE_VENDOR +ARG IMAGE_FLAVOR ARG SHA_HEAD_SHORT +ARG FEDORA_VERSION # Export build-time environment variables ENV IMAGE_NAME=${IMAGE_NAME} ENV IMAGE_VENDOR=${IMAGE_VENDOR} +ENV IMAGE_FLAVOR=${IMAGE_FLAVOR} +ENV FEDORA_VERSION=${FEDORA_VERSION} # Copy dot_files (config templates) into the image COPY dot_files /usr/share/hypercube/config diff --git a/Justfile b/Justfile index a3e48de..6bbd8c7 100644 --- a/Justfile +++ b/Justfile @@ -157,8 +157,10 @@ build-iso flavor="main": _titanoboa-setup fi # Build ISO with Titanoboa + # livesys=0 skips Fedora livesys scripts (we use Calamares instead) + # hook-post-rootfs sets up live user, Calamares, and auto-login cd _titanoboa - {{ SUDO }} just build "${IMAGE_FULL}" + {{ SUDO }} HOOK_POST_ROOTFS="${PWD}/../iso_files/configure_live_session.sh" just build "${IMAGE_FULL}" livesys=0 # Fix ownership if [[ "${UID}" -gt 0 ]]; then @@ -197,8 +199,10 @@ build-iso-ghcr flavor="main": _titanoboa-setup echo "Building ISO for ${IMAGE_FULL}..." + # livesys=0 skips Fedora livesys scripts (we use Calamares instead) + # hook-post-rootfs sets up live user, Calamares, and auto-login cd _titanoboa - {{ SUDO }} just build "${IMAGE_FULL}" + {{ SUDO }} HOOK_POST_ROOTFS="${PWD}/../iso_files/configure_live_session.sh" just build "${IMAGE_FULL}" livesys=0 if [[ "${UID}" -gt 0 ]]; then {{ SUDO }} chown "${UID}:$(id -g)" -R "${PWD}" diff --git a/build_files/base/01-base-system.sh b/build_files/base/01-base-system.sh new file mode 100755 index 0000000..6eb7926 --- /dev/null +++ b/build_files/base/01-base-system.sh @@ -0,0 +1,98 @@ +#!/bin/bash +# Hypercube Base System +# Installs core system components, display manager (greetd + regreet), and hardware support + +set -ouex pipefail + +echo "Installing Hypercube base system..." + +# Clean DNF cache first +dnf5 -y clean all + +### Display Manager: greetd + tuigreet +# Both are in official Fedora repos +# Note: Can switch to regreet (GTK greeter) when F43 COPR is available +dnf5 -y install \ + greetd \ + greetd-selinux \ + tuigreet + +### Desktop Portals & Integration +dnf5 -y install \ + xdg-desktop-portal \ + xdg-desktop-portal-gtk \ + xdg-user-dirs \ + xdg-utils + +### Credential & Secret Storage +dnf5 -y install \ + gnome-keyring \ + seahorse + +### Audio (Pipewire should be in base, but ensure full stack) +dnf5 -y install \ + pipewire \ + pipewire-pulseaudio \ + pipewire-alsa \ + wireplumber + +### Networking +dnf5 -y install \ + NetworkManager \ + NetworkManager-wifi \ + NetworkManager-bluetooth \ + network-manager-applet + +### Bluetooth +dnf5 -y install \ + bluez \ + bluez-tools + +### Power Management +dnf5 -y install \ + power-profiles-daemon \ + upower + +### Fonts (base set - more can be added) +dnf5 -y install \ + google-noto-fonts-common \ + google-noto-sans-fonts \ + google-noto-serif-fonts \ + google-noto-sans-mono-fonts \ + google-noto-emoji-fonts \ + fontawesome-fonts-all \ + jetbrains-mono-fonts-all + +### Utilities +dnf5 -y install \ + wl-clipboard \ + xdg-utils \ + polkit \ + dbus-daemon + +### File Management +dnf5 -y install \ + nautilus \ + file-roller \ + gvfs \ + gvfs-mtp \ + gvfs-gphoto2 \ + gvfs-smb + +### Create greeter user for greetd +# greetd runs the greeter as this user +if ! id -u greeter &>/dev/null; then + useradd -r -M -s /usr/bin/nologin greeter +fi + +### Enable services +systemctl enable greetd.service +systemctl enable NetworkManager.service +systemctl enable bluetooth.service +systemctl enable power-profiles-daemon.service + +### Disable services we don't need +systemctl disable gdm.service 2>/dev/null || true +systemctl disable sddm.service 2>/dev/null || true + +echo "Hypercube base system installed successfully" diff --git a/build_files/dx/01-dx-tooling.sh b/build_files/dx/01-dx-tooling.sh new file mode 100755 index 0000000..b619c75 --- /dev/null +++ b/build_files/dx/01-dx-tooling.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Hypercube DX (Developer Experience) Tooling +# Installs Distrobox, container tools, and dev utilities + +set -ouex pipefail + +echo "Installing DX tooling..." + +### Distrobox - Container-based dev environments +dnf5 -y install distrobox + +### Container tools (Podman is in base-main, add full stack) +dnf5 -y install \ + podman \ + podman-compose \ + buildah \ + skopeo + +### Podman Desktop - GUI for containers and Kubernetes +# Installed via Flatpak for automatic updates +flatpak install -y flathub io.podman_desktop.PodmanDesktop + +### Additional dev utilities +dnf5 -y install \ + just \ + direnv \ + openssl \ + openssh-clients \ + rsync \ + wget \ + curl \ + unzip \ + zip \ + tar + +echo "DX tooling installed successfully" diff --git a/build_files/hypercube/00-hypercube-branding.sh b/build_files/hypercube/01-hypercube-branding.sh similarity index 88% rename from build_files/hypercube/00-hypercube-branding.sh rename to build_files/hypercube/01-hypercube-branding.sh index 4162d8d..07ea007 100755 --- a/build_files/hypercube/00-hypercube-branding.sh +++ b/build_files/hypercube/01-hypercube-branding.sh @@ -9,7 +9,7 @@ IMAGE_NAME="${IMAGE_NAME:-hypercube}" IMAGE_VENDOR="${IMAGE_VENDOR:-binarypie-dev}" IMAGE_FLAVOR="${IMAGE_FLAVOR:-main}" FEDORA_VERSION="${FEDORA_VERSION:-$(rpm -E %fedora)}" -BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-bluefin-dx}" +BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-base-main}" # Create image-info.json mkdir -p /usr/share/hypercube @@ -26,7 +26,7 @@ cat > /usr/share/hypercube/image-info.json << EOF EOF # Modify /usr/lib/os-release for Hypercube branding -# Keep Bluefin as ID_LIKE since we inherit from it +# No longer inheriting from Bluefin - built from base-main if [ -f /usr/lib/os-release ]; then # Set NAME to Hypercube sed -i "s/^NAME=.*/NAME=\"Hypercube\"/" /usr/lib/os-release @@ -34,14 +34,14 @@ if [ -f /usr/lib/os-release ]; then # Update PRETTY_NAME sed -i "s/^PRETTY_NAME=.*/PRETTY_NAME=\"Hypercube ${FEDORA_VERSION} (Fedora-based)\"/" /usr/lib/os-release - # Set ID to hypercube, keep fedora and bluefin as ID_LIKE + # Set ID to hypercube, keep fedora as ID_LIKE sed -i "s/^ID=.*/ID=hypercube/" /usr/lib/os-release - # Update ID_LIKE to include both fedora and bluefin + # Update ID_LIKE to fedora (no longer inheriting from Bluefin) if grep -q "^ID_LIKE=" /usr/lib/os-release; then - sed -i "s/^ID_LIKE=.*/ID_LIKE=\"bluefin fedora\"/" /usr/lib/os-release + sed -i "s/^ID_LIKE=.*/ID_LIKE=\"fedora\"/" /usr/lib/os-release else - echo 'ID_LIKE="bluefin fedora"' >> /usr/lib/os-release + echo 'ID_LIKE="fedora"' >> /usr/lib/os-release fi # Set VARIANT_ID @@ -100,11 +100,10 @@ if [ -d /usr/share/plymouth/themes/hypercube ]; then echo "Plymouth theme set to hypercube" fi -### GDM Login Screen Branding -# Compile dconf database for GDM logo -if [ -d /etc/dconf/db/gdm.d ]; then +### dconf database update (for any remaining dconf settings) +if [ -d /etc/dconf/db ]; then dconf update - echo "GDM dconf database updated" + echo "dconf database updated" fi echo "Hypercube branding applied successfully" diff --git a/build_files/hypercube/01-hypercube-packages.sh b/build_files/hypercube/01-hypercube-packages.sh deleted file mode 100755 index 9ce7931..0000000 --- a/build_files/hypercube/01-hypercube-packages.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# Hypercube Package Installation -# Installs Hyprland compositor stack, CLI tools, terminals, and editors - -set -ouex pipefail - -echo "Installing Hypercube packages..." - -# Clean DNF cache first -dnf5 -y clean all - -### Compositor / Hyprland Stack -dnf5 -y copr enable sdegler/hyprland -dnf5 -y install \ - hyprland \ - hyprland-contrib \ - hyprland-plugins \ - hyprland-qtutils \ - hyprpaper \ - hyprpicker \ - hypridle \ - hyprshot \ - hyprlock \ - hyprpolkitagent \ - pyprland \ - waybar-git \ - xdg-desktop-portal-hyprland - -### CLI Tools (skip packages already in bluefin-dx) -# Note: starship is already installed in bluefin-dx -dnf5 -y install \ - fd-find \ - qt6ct - -### Lazygit from COPR -dnf5 -y copr enable atim/lazygit -dnf5 -y install lazygit - -### Quickshell - Application Launcher, Notifications, OSD -dnf5 -y copr enable errornointernet/quickshell -dnf5 -y install quickshell - -### Terminals -dnf5 -y copr enable wezfurlong/wezterm-nightly -dnf5 -y install wezterm - -dnf5 -y copr enable scottames/ghostty -dnf5 -y install ghostty - -### Editor -dnf5 -y copr enable agriffis/neovim-nightly -dnf5 -y install neovim python3-neovim - -echo "Hypercube packages installed successfully" diff --git a/build_files/hypercube/99-tests.sh b/build_files/hypercube/99-tests.sh index 0cf354b..47349d5 100755 --- a/build_files/hypercube/99-tests.sh +++ b/build_files/hypercube/99-tests.sh @@ -8,51 +8,84 @@ echo "Running Hypercube validation tests..." ### Check critical packages are installed REQUIRED_PACKAGES=( - "hyprland" - "hyprlock" - "hypridle" - "quickshell" - "wezterm" - "ghostty" - "neovim" - "lazygit" + # Display manager + "greetd" + "tuigreet" + # Hyprland stack + "hyprland" + "hyprlock" + "hypridle" + "quickshell" + # Terminals + "wezterm" + "ghostty" + # Dev tools + "neovim" + "lazygit" + "fish" + "starship" + # DX tooling + "distrobox" + "podman" ) for pkg in "${REQUIRED_PACKAGES[@]}"; do - if ! rpm -q "$pkg" &>/dev/null; then - echo "ERROR: Required package '$pkg' is not installed!" - exit 1 - fi - echo " OK: $pkg installed" + if ! rpm -q "$pkg" &>/dev/null; then + echo "ERROR: Required package '$pkg' is not installed!" + exit 1 + fi + echo " OK: $pkg installed" done ### Check critical files exist REQUIRED_FILES=( - "/usr/share/hypercube/image-info.json" - "/usr/lib/environment.d/60-hypercube-xdg.conf" - "/usr/bin/nvimd" - "/etc/fish/config.fish" - "/usr/share/hypercube/config/starship/starship.toml" - "/usr/share/themes/Tokyonight-Dark/gtk-3.0/gtk.css" - "/usr/share/icons/Tokyonight-Dark/index.theme" - "/usr/share/plymouth/themes/hypercube/hypercube.plymouth" - "/usr/share/pixmaps/hypercube-logo.png" - "/usr/share/backgrounds/hypercube/background.png" + # Branding + "/usr/share/hypercube/image-info.json" + "/usr/lib/environment.d/60-hypercube-xdg.conf" + # greetd + "/etc/greetd/config.toml" + # Config files + "/usr/bin/nvimd" + "/etc/fish/config.fish" + "/usr/share/hypercube/config/starship/starship.toml" + # Theming + "/usr/share/themes/Tokyonight-Dark/gtk-3.0/gtk.css" + "/usr/share/icons/Tokyonight-Dark/index.theme" + "/usr/share/plymouth/themes/hypercube/hypercube.plymouth" + "/usr/share/pixmaps/hypercube-logo.png" + "/usr/share/backgrounds/hypercube/background.png" + # DX config + "/etc/distrobox/distrobox.ini" + "/usr/share/ublue-os/just/61-dx.just" ) for file in "${REQUIRED_FILES[@]}"; do - if [ ! -e "$file" ]; then - echo "ERROR: Required file '$file' does not exist!" - exit 1 - fi - echo " OK: $file exists" + if [ ! -e "$file" ]; then + echo "ERROR: Required file '$file' does not exist!" + exit 1 + fi + echo " OK: $file exists" done ### Check os-release branding if ! grep -q "ID=hypercube" /usr/lib/os-release; then - echo "ERROR: os-release branding not applied!" - exit 1 + echo "ERROR: os-release branding not applied!" + exit 1 fi echo " OK: os-release branding applied" +### Check services are enabled +REQUIRED_SERVICES=( + "greetd.service" + "NetworkManager.service" +) + +for svc in "${REQUIRED_SERVICES[@]}"; do + if ! systemctl is-enabled "$svc" &>/dev/null; then + echo "ERROR: Required service '$svc' is not enabled!" + exit 1 + fi + echo " OK: $svc enabled" +done + echo "All Hypercube validation tests passed!" diff --git a/build_files/hyprland/01-hyprland-desktop.sh b/build_files/hyprland/01-hyprland-desktop.sh new file mode 100755 index 0000000..14dd61c --- /dev/null +++ b/build_files/hyprland/01-hyprland-desktop.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# Hypercube Hyprland Desktop Stack +# Installs Hyprland compositor, tools, terminals, and editors + +set -ouex pipefail + +echo "Installing Hyprland desktop stack..." + +### Compositor / Hyprland Stack +dnf5 -y copr enable sdegler/hyprland +dnf5 -y install \ + hyprland \ + hyprland-contrib \ + hyprland-plugins \ + hyprland-qtutils \ + hyprpaper \ + hyprpicker \ + hypridle \ + hyprshot \ + hyprlock \ + hyprpolkitagent \ + pyprland \ + waybar-git \ + xdg-desktop-portal-hyprland + +### Quickshell - Application Launcher, Notifications, OSD +dnf5 -y copr enable errornointernet/quickshell +dnf5 -y install quickshell + +### CLI Tools - Official Fedora repos +dnf5 -y install \ + fd-find \ + fzf \ + ripgrep \ + bat \ + zoxide \ + htop \ + btop \ + git \ + jq \ + yq \ + tmux \ + qt6ct + +### CLI Tools - From COPRs (not in official F43 repos) +# eza - modern ls replacement +dnf5 -y copr enable alternateved/eza +dnf5 -y install eza + +# starship - cross-shell prompt +dnf5 -y copr enable atim/starship +dnf5 -y install starship + +# git-delta - better git diff +dnf5 -y copr enable gourlaysama/git-delta || true +dnf5 -y install git-delta || true + +### Fish Shell (set as default) +# Note: fisher (plugin manager) removed - starship handles prompt, fish has good built-in completions +dnf5 -y install fish + +### Lazygit from COPR +dnf5 -y copr enable atim/lazygit +dnf5 -y install lazygit + +### Terminals +dnf5 -y copr enable wezfurlong/wezterm-nightly +dnf5 -y install wezterm + +dnf5 -y copr enable scottames/ghostty +dnf5 -y install ghostty + +### Editor +dnf5 -y copr enable agriffis/neovim-nightly +dnf5 -y install neovim python3-neovim + +### Image/Media Viewers +dnf5 -y install \ + imv \ + mpv + +### Screenshot/Screen Recording (hyprshot handles most, but add deps) +dnf5 -y install \ + grim \ + slurp + +echo "Hyprland desktop stack installed successfully" diff --git a/build_files/shared/build.sh b/build_files/shared/build.sh index 9cb8e61..a70a0f4 100755 --- a/build_files/shared/build.sh +++ b/build_files/shared/build.sh @@ -1,11 +1,11 @@ #!/bin/bash -# Hypercube Build Orchestrator +# Hypercube v2 Build Orchestrator # Main build script that coordinates all build steps set -ouex pipefail echo "========================================" -echo "Starting Hypercube Build" +echo "Starting Hypercube v2 Build" echo "========================================" ### Rsync system files to root filesystem @@ -13,15 +13,30 @@ echo "Installing system files..." # Note: We don't use --ignore-existing so our files override base image files rsync -rlpvh /ctx/system_files/shared/ / -### Run hypercube build scripts in order -echo "Running build scripts..." -for script in /ctx/build_files/hypercube/*.sh; do - if [[ -f "$script" && -x "$script" ]]; then - echo "" - echo "========================================" - echo "Running: $(basename "$script")" - echo "========================================" - "$script" +### Run build scripts in order from each phase directory +# Phase 1: Base system (greetd, portals, hardware) +# Phase 2: Hyprland desktop +# Phase 3: DX tooling +# Phase 4: Hypercube theming/branding + +BUILD_DIRS=( + "/ctx/build_files/base" + "/ctx/build_files/hyprland" + "/ctx/build_files/dx" + "/ctx/build_files/hypercube" +) + +for build_dir in "${BUILD_DIRS[@]}"; do + if [[ -d "$build_dir" ]]; then + for script in "$build_dir"/*.sh; do + if [[ -f "$script" && -x "$script" ]]; then + echo "" + echo "========================================" + echo "Running: $(basename "$build_dir")/$(basename "$script")" + echo "========================================" + "$script" + fi + done fi done @@ -34,5 +49,5 @@ echo "========================================" echo "" echo "========================================" -echo "Hypercube Build Complete!" +echo "Hypercube v2 Build Complete!" echo "========================================" diff --git a/build_files/shared/clean-stage.sh b/build_files/shared/clean-stage.sh index 65ce81d..5f0e771 100755 --- a/build_files/shared/clean-stage.sh +++ b/build_files/shared/clean-stage.sh @@ -8,6 +8,8 @@ echo "Disabling COPR repositories..." # Disable all COPR repos that were enabled during build # This ensures the final image doesn't have external repos enabled + +# Hyprland COPRs dnf5 -y copr disable sdegler/hyprland || true dnf5 -y copr disable errornointernet/quickshell || true dnf5 -y copr disable wezfurlong/wezterm-nightly || true @@ -15,6 +17,11 @@ dnf5 -y copr disable scottames/ghostty || true dnf5 -y copr disable agriffis/neovim-nightly || true dnf5 -y copr disable atim/lazygit || true +# CLI Tools COPRs +dnf5 -y copr disable alternateved/eza || true +dnf5 -y copr disable atim/starship || true +dnf5 -y copr disable gourlaysama/git-delta || true + echo "Cleaning package caches..." dnf5 -y clean all diff --git a/iso_files/calamares/branding/hypercube/branding.desc b/iso_files/calamares/branding/hypercube/branding.desc new file mode 100644 index 0000000..58c24cc --- /dev/null +++ b/iso_files/calamares/branding/hypercube/branding.desc @@ -0,0 +1,28 @@ +--- +componentName: hypercube + +strings: + productName: Hypercube + shortProductName: Hypercube + version: 1.0 + shortVersion: 1.0 + versionedName: Hypercube 1.0 + shortVersionedName: Hypercube 1.0 + bootloaderEntryName: Hypercube + productUrl: https://github.com/binarypie-dev/hypercube + supportUrl: https://github.com/binarypie-dev/hypercube/issues + knownIssuesUrl: https://github.com/binarypie-dev/hypercube/issues + releaseNotesUrl: https://github.com/binarypie-dev/hypercube/releases + +images: + productLogo: "hypercube-logo.png" + productIcon: "hypercube-logo.png" + productWelcome: "hypercube-welcome.png" + +slideshow: "show.qml" + +style: + sidebarBackground: "#1a1b26" + sidebarText: "#c0caf5" + sidebarTextSelect: "#7aa2f7" + sidebarTextHighlight: "#bb9af7" diff --git a/iso_files/calamares/branding/hypercube/show.qml b/iso_files/calamares/branding/hypercube/show.qml new file mode 100644 index 0000000..2c5a72d --- /dev/null +++ b/iso_files/calamares/branding/hypercube/show.qml @@ -0,0 +1,184 @@ +/* Hypercube Calamares Slideshow */ + +import QtQuick 2.15 +import calamares.slideshow 1.0 + +Presentation { + id: presentation + + Timer { + interval: 5000 + running: true + repeat: true + onTriggered: presentation.goToNextSlide() + } + + Slide { + Rectangle { + anchors.fill: parent + color: "#1a1b26" + + Column { + anchors.centerIn: parent + spacing: 30 + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Welcome to Hypercube" + font.pixelSize: 32 + font.bold: true + color: "#c0caf5" + } + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "A developer-focused workstation with Hyprland" + font.pixelSize: 18 + color: "#a9b1d6" + } + } + } + } + + Slide { + Rectangle { + anchors.fill: parent + color: "#1a1b26" + + Column { + anchors.centerIn: parent + spacing: 20 + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Hyprland Desktop" + font.pixelSize: 28 + font.bold: true + color: "#7aa2f7" + } + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Modern, tiling Wayland compositor" + font.pixelSize: 16 + color: "#a9b1d6" + } + + Column { + anchors.horizontalCenter: parent.horizontalCenter + spacing: 8 + + Text { text: "• Smooth animations and effects"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Dynamic tiling and workspaces"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Waybar status bar"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Quickshell launcher"; color: "#c0caf5"; font.pixelSize: 14 } + } + } + } + } + + Slide { + Rectangle { + anchors.fill: parent + color: "#1a1b26" + + Column { + anchors.centerIn: parent + spacing: 20 + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Developer Experience" + font.pixelSize: 28 + font.bold: true + color: "#bb9af7" + } + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Everything you need to be productive" + font.pixelSize: 16 + color: "#a9b1d6" + } + + Column { + anchors.horizontalCenter: parent.horizontalCenter + spacing: 8 + + Text { text: "• Distrobox for isolated dev environments"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Homebrew via bluefin-cli container"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Docker & Podman container runtimes"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• kubectl, kind, helm for Kubernetes"; color: "#c0caf5"; font.pixelSize: 14 } + } + } + } + } + + Slide { + Rectangle { + anchors.fill: parent + color: "#1a1b26" + + Column { + anchors.centerIn: parent + spacing: 20 + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Modern Tooling" + font.pixelSize: 28 + font.bold: true + color: "#9ece6a" + } + + Column { + anchors.horizontalCenter: parent.horizontalCenter + spacing: 8 + + Text { text: "• Ghostty & WezTerm terminals"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Neovim with nightly builds"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Fish shell with Starship prompt"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Lazygit for git workflows"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• ripgrep, fd, eza, bat, zoxide"; color: "#c0caf5"; font.pixelSize: 14 } + } + } + } + } + + Slide { + Rectangle { + anchors.fill: parent + color: "#1a1b26" + + Column { + anchors.centerIn: parent + spacing: 20 + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Atomic & Reliable" + font.pixelSize: 28 + font.bold: true + color: "#f7768e" + } + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: "Built on Fedora Atomic (bootc)" + font.pixelSize: 16 + color: "#a9b1d6" + } + + Column { + anchors.horizontalCenter: parent.horizontalCenter + spacing: 8 + + Text { text: "• Immutable base system"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Atomic updates with rollback"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Container-native workflow"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Always recoverable"; color: "#c0caf5"; font.pixelSize: 14 } + } + } + } + } +} diff --git a/iso_files/calamares/modules/bootc-deploy.conf b/iso_files/calamares/modules/bootc-deploy.conf new file mode 100644 index 0000000..1634c50 --- /dev/null +++ b/iso_files/calamares/modules/bootc-deploy.conf @@ -0,0 +1,12 @@ +# Hypercube bootc Deploy Module Configuration +# Deploys the bootc image to the target system + +# The container image to deploy +# This will be read from the running system +imageRef: "" + +# Use the image from the currently running system +useCurrentImage: true + +# Target root for installation +targetRoot: "" diff --git a/iso_files/calamares/modules/users.conf b/iso_files/calamares/modules/users.conf new file mode 100644 index 0000000..06b0189 --- /dev/null +++ b/iso_files/calamares/modules/users.conf @@ -0,0 +1,39 @@ +# Hypercube Users Module Configuration + +defaultGroups: + - name: wheel + must_exist: true + system: true + - name: video + must_exist: false + system: true + - name: render + must_exist: false + system: true + - name: input + must_exist: false + system: true + +autologinGroup: autologin + +doAutologin: false + +sudoersGroup: wheel + +sudoersConfigureWithGroup: true + +setRootPassword: false + +doReusePassword: true + +passwordRequirements: + minLength: 8 + maxLength: -1 + +allowWeakPasswords: false +allowWeakPasswordsDefault: false + +userShell: /usr/bin/fish + +setHostname: EtcFile +writeHostsFile: true diff --git a/iso_files/calamares/modules/welcome.conf b/iso_files/calamares/modules/welcome.conf new file mode 100644 index 0000000..eb8c813 --- /dev/null +++ b/iso_files/calamares/modules/welcome.conf @@ -0,0 +1,21 @@ +# Hypercube Welcome Module Configuration + +showSupportUrl: true +showKnownIssuesUrl: true +showReleaseNotesUrl: true + +requirements: + requiredStorage: 20 + requiredRam: 4 + internetCheckUrl: https://github.com + check: + - storage + - ram + - root + required: + - storage + - ram + - root + +geoip: + style: none diff --git a/iso_files/calamares/settings.conf b/iso_files/calamares/settings.conf new file mode 100644 index 0000000..918882e --- /dev/null +++ b/iso_files/calamares/settings.conf @@ -0,0 +1,38 @@ +# Hypercube Calamares Settings +# Configuration for the bootc-based installer + +modules-search: [ local, /usr/lib/calamares/modules ] + +sequence: + - show: + - welcome + - locale + - keyboard + - partition + - users + - summary + - exec: + - partition + - mount + - bootc-deploy + - users + - displaymanager + - hwclock + - umount + - show: + - finished + +branding: hypercube + +prompt-install: true + +dont-chroot: false + +oem-setup: false + +disable-cancel: false +disable-cancel-during-exec: true + +hide-back-and-next-during-exec: true + +quit-at-end: false diff --git a/iso_files/configure_live_session.sh b/iso_files/configure_live_session.sh new file mode 100755 index 0000000..83459c4 --- /dev/null +++ b/iso_files/configure_live_session.sh @@ -0,0 +1,63 @@ +#!/bin/bash +set -euxo pipefail + +# Hypercube ISO Live Session Setup +# Since livesys-scripts doesn't support Hyprland yet, we do the setup manually +# +# NOTE: This script runs inside titanoboa's chroot with livesys=0 +# +# TODO: Once https://pagure.io/livesys-scripts merges Hyprland support, +# we can remove this and use livesys=1 + +echo "Setting up Hypercube live session..." + +### Install livesys-scripts (we'll run the Hyprland session setup manually) +dnf5 -y install livesys-scripts + +### Configure livesys for Hyprland +sed -i 's/^livesys_session=.*/livesys_session=hyprland/' /etc/sysconfig/livesys + +### Install Hyprland session file for livesys-scripts +mkdir -p /usr/libexec/livesys/sessions.d +cat > /usr/libexec/livesys/sessions.d/livesys-hyprland << 'SESSION_EOF' +#!/bin/sh +# +# livesys-hyprland: hyprland specific setup for livesys +# SPDX-License-Identifier: GPL-3.0-or-later +# + +HYPRLAND_SESSION_FILE="hyprland.desktop" + +# set up autologin for user liveuser using greetd +if [ -f /etc/greetd/config.toml ]; then + cat > /etc/greetd/config.toml << GREETD_EOF +[terminal] +vt = 1 + +[default_session] +command = "Hyprland" +user = "liveuser" +GREETD_EOF +fi + +# Show harddisk install on the desktop +if [ -f /usr/share/applications/liveinst.desktop ]; then + sed -i -e 's/NoDisplay=true/NoDisplay=false/' /usr/share/applications/liveinst.desktop +fi +mkdir -p /home/liveuser/Desktop +SESSION_EOF + +chmod +x /usr/libexec/livesys/sessions.d/livesys-hyprland + +### Enable livesys services +systemctl enable livesys.service livesys-late.service + +### Create livesys-session-extra tmpfiles config +echo "C /var/lib/livesys/livesys-session-extra 0755 root root - /usr/share/factory/var/lib/livesys/livesys-session-extra" > \ + /usr/lib/tmpfiles.d/livesys-session-extra.conf + +### Mark this as a live session +mkdir -p /var/lib/hypercube +touch /var/lib/hypercube/live-session + +echo "Hypercube live session setup complete" diff --git a/iso_files/hide_hyprland_session.sh b/iso_files/hide_hyprland_session.sh deleted file mode 100755 index 59aa508..0000000 --- a/iso_files/hide_hyprland_session.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -euxo pipefail - -# Hide Hyprland session so livesys detects GNOME for the live session -# After install, the full image with Hyprland session will be deployed -# This runs before rootfs-install-livesys-scripts -if [ -f /usr/share/wayland-sessions/hyprland.desktop ]; then - mv /usr/share/wayland-sessions/hyprland.desktop /usr/share/wayland-sessions/hyprland.desktop.hidden - echo "Hyprland session hidden - livesys will detect GNOME instead" -fi diff --git a/iso_files/livesys-hyprland b/iso_files/livesys-hyprland new file mode 100644 index 0000000..ac8974d --- /dev/null +++ b/iso_files/livesys-hyprland @@ -0,0 +1,38 @@ +#!/bin/sh +# +# livesys-hyprland: hyprland specific setup for livesys +# SPDX-License-Identifier: GPL-3.0-or-later +# + +HYPRLAND_SESSION_FILE="hyprland.desktop" + +# set up autologin for user liveuser +if [ -f /etc/greetd/config.toml ]; then + # Use greetd for Hyprland + cat > /etc/greetd/config.toml << GREETD_EOF +[terminal] +vt = 1 + +[default_session] +command = "Hyprland" +user = "liveuser" +GREETD_EOF +elif [ -f /etc/sddm.conf ]; then + sed -i 's/^#User=.*/User=liveuser/' /etc/sddm.conf + sed -i "s/^#Session=.*/Session=${HYPRLAND_SESSION_FILE}/" /etc/sddm.conf +else + cat > /etc/sddm.conf << SDDM_EOF +[Autologin] +User=liveuser +Session=${HYPRLAND_SESSION_FILE} +SDDM_EOF +fi + +# Show harddisk install on the desktop +if [ -f /usr/share/applications/liveinst.desktop ]; then + sed -i -e 's/NoDisplay=true/NoDisplay=false/' /usr/share/applications/liveinst.desktop +fi +mkdir -p /home/liveuser/Desktop + +# echoing type liveinst to start the installer +echo "echo 'Please type liveinst and press Enter to start the installer'" >> /home/liveuser/.bashrc diff --git a/packages/livesys-scripts/livesys-hyprland b/packages/livesys-scripts/livesys-hyprland new file mode 100644 index 0000000..b68643c --- /dev/null +++ b/packages/livesys-scripts/livesys-hyprland @@ -0,0 +1,62 @@ +#!/bin/sh +# +# livesys-hyprland: hyprland specific setup for livesys +# SPDX-License-Identifier: GPL-3.0-or-later +# + +HYPRLAND_SESSION_FILE="hyprland.desktop" + +# set up autologin for user liveuser +# Support greetd, GDM, and SDDM + +if [ -f /etc/greetd/config.toml ]; then + # greetd (common for Hyprland setups) + cat > /etc/greetd/config.toml << GREETD_EOF +[terminal] +vt = 1 + +[default_session] +command = "Hyprland" +user = "liveuser" +GREETD_EOF + +elif [ -f /etc/gdm/custom.conf ]; then + # GDM + sed -i 's/^\[daemon\]/[daemon]\nAutomaticLoginEnable=True\nAutomaticLogin=liveuser/' /etc/gdm/custom.conf + # Set default session for GDM + mkdir -p /var/lib/AccountsService/users + cat > /var/lib/AccountsService/users/liveuser << GDM_USER_EOF +[User] +Session=${HYPRLAND_SESSION_FILE} +XSession=${HYPRLAND_SESSION_FILE} +SystemAccount=false +GDM_USER_EOF + +elif [ -f /etc/sddm.conf ]; then + # SDDM (existing config) + sed -i 's/^#User=.*/User=liveuser/' /etc/sddm.conf + sed -i "s/^#Session=.*/Session=${HYPRLAND_SESSION_FILE}/" /etc/sddm.conf + +else + # SDDM (create new config) + cat > /etc/sddm.conf << SDDM_EOF +[Autologin] +User=liveuser +Session=${HYPRLAND_SESSION_FILE} +SDDM_EOF +fi + +# Show harddisk install on the desktop +if [ -f /usr/share/applications/liveinst.desktop ]; then + sed -i -e 's/NoDisplay=true/NoDisplay=false/' /usr/share/applications/liveinst.desktop +fi +mkdir -p /home/liveuser/Desktop + +# echoing type liveinst to start the installer +echo "echo 'Please type liveinst and press Enter to start the installer'" >> /home/liveuser/.bashrc + +# use hyprland configuration files for live environment +if [ "$(ls /usr/share/hypr/config.live.d/*.conf 2>/dev/null)" ]; then + mkdir -p /home/liveuser/.config/hypr/ + ln -sf -t /home/liveuser/.config/hypr /usr/share/hypr/config.live.d/*.conf +fi diff --git a/packages/livesys-scripts/livesys-scripts.spec b/packages/livesys-scripts/livesys-scripts.spec new file mode 100644 index 0000000..61f63ba --- /dev/null +++ b/packages/livesys-scripts/livesys-scripts.spec @@ -0,0 +1,66 @@ +Name: livesys-scripts +Version: 0.9.1 +Release: 1.hypercube%{?dist} +Summary: Scripts for auto-configuring live media during boot (with Hyprland support) + +License: GPL-3.0-or-later +URL: https://pagure.io/fork/binarypie/livesys-scripts +Source: https://pagure.io/fork/binarypie/livesys-scripts/archive/main/%{name}-main.tar.gz + +BuildRequires: systemd-rpm-macros +BuildRequires: make + +BuildArch: noarch + +# This package provides livesys-scripts with Hyprland support +Provides: livesys-scripts = %{version}-%{release} +Obsoletes: livesys-scripts < %{version}-%{release} + +%description +Scripts for auto-configuring live media during boot. +This version includes Hyprland session support. + + +%prep +%autosetup -n %{name}-main -p1 + + +%build +# Nothing to do + +%install +%make_install + +# Make ghost files +mkdir -p %{buildroot}%{_sharedstatedir}/livesys +touch %{buildroot}%{_sharedstatedir}/livesys/livesys-session-extra +touch %{buildroot}%{_sharedstatedir}/livesys/livesys-session-late-extra + + +%preun +%systemd_preun livesys.service livesys-late.service + + +%post +%systemd_post livesys.service livesys-late.service + + +%postun +%systemd_postun livesys.service livesys-late.service + + +%files +%license COPYING +%doc README.md +%config(noreplace) %{_sysconfdir}/sysconfig/livesys +%{_libexecdir}/livesys/ +%{_unitdir}/livesys* +%dir %{_sharedstatedir}/livesys +%ghost %{_sharedstatedir}/livesys/livesys-session-extra +%ghost %{_sharedstatedir}/livesys/livesys-session-late-extra + + +%changelog +* Mon Dec 16 2024 Hypercube - 0.9.1-1.hypercube +- Add Hyprland session support +- Based on upstream 0.9.1 diff --git a/system_files/shared/etc/dconf/db/gdm.d/01-hypercube b/system_files/shared/etc/dconf/db/gdm.d/01-hypercube deleted file mode 100644 index 4fa4003..0000000 --- a/system_files/shared/etc/dconf/db/gdm.d/01-hypercube +++ /dev/null @@ -1,18 +0,0 @@ -[org/gnome/login-screen] -disable-user-list=false - -[org/gnome/desktop/interface] -color-scheme='prefer-dark' - -[org/gnome/desktop/screensaver] -picture-uri='file:///usr/share/backgrounds/hypercube/background.png' -picture-options='zoom' -primary-color='#1a1b26' -secondary-color='#1a1b26' - -[org/gnome/desktop/background] -picture-uri='file:///usr/share/backgrounds/hypercube/background.png' -picture-uri-dark='file:///usr/share/backgrounds/hypercube/background.png' -picture-options='zoom' -primary-color='#1a1b26' -secondary-color='#1a1b26' diff --git a/system_files/shared/etc/dconf/db/local.d/01-hypercube-dark-mode b/system_files/shared/etc/dconf/db/local.d/01-hypercube-dark-mode index 45883e7..1caee5a 100644 --- a/system_files/shared/etc/dconf/db/local.d/01-hypercube-dark-mode +++ b/system_files/shared/etc/dconf/db/local.d/01-hypercube-dark-mode @@ -1,5 +1,5 @@ # Hypercube Settings -# System-wide defaults for GNOME desktop +# System-wide defaults for GTK applications running under Hyprland [org/gnome/desktop/interface] color-scheme='prefer-dark' @@ -7,9 +7,4 @@ gtk-theme='Tokyonight-Dark-BL' icon-theme='Tokyonight-Dark' cursor-theme='Adwaita' -[org/gnome/desktop/wm/preferences] -theme='Tokyonight-Dark-BL' - -[org/gnome/desktop/input-sources] -# XKB options: Caps Lock as Ctrl, swap Alt and Super -xkb-options=['caps:ctrl_modifier', 'altwin:swap_alt_win'] +# Note: XKB options are now configured in Hyprland (hyprland.conf) diff --git a/system_files/shared/etc/dconf/profile/gdm b/system_files/shared/etc/dconf/profile/gdm deleted file mode 100644 index e4ac220..0000000 --- a/system_files/shared/etc/dconf/profile/gdm +++ /dev/null @@ -1,2 +0,0 @@ -user-db:user -system-db:gdm diff --git a/system_files/shared/etc/distrobox/distrobox.ini b/system_files/shared/etc/distrobox/distrobox.ini new file mode 100644 index 0000000..c274dad --- /dev/null +++ b/system_files/shared/etc/distrobox/distrobox.ini @@ -0,0 +1,11 @@ +# Hypercube Distrobox Configuration +# Pre-configured containers for development + +[bluefin-cli] +image=ghcr.io/ublue-os/bluefin-cli:latest +pull=true +init=false +start_now=false +# Homebrew and common CLI tools pre-installed +# Access via: distrobox enter bluefin-cli +# Or use the 'brew' alias configured in fish diff --git a/system_files/shared/etc/greetd/config.toml b/system_files/shared/etc/greetd/config.toml new file mode 100644 index 0000000..b047317 --- /dev/null +++ b/system_files/shared/etc/greetd/config.toml @@ -0,0 +1,8 @@ +[terminal] +# The VT to run the greeter on +vt = 1 + +[default_session] +# Run tuigreet with Hyprland as the default session +command = "tuigreet --remember --remember-session --time --greeting 'Welcome to Hypercube' --asterisks --cmd Hyprland" +user = "greeter" diff --git a/system_files/shared/usr/share/ublue-os/just/61-dx.just b/system_files/shared/usr/share/ublue-os/just/61-dx.just new file mode 100644 index 0000000..ab1283b --- /dev/null +++ b/system_files/shared/usr/share/ublue-os/just/61-dx.just @@ -0,0 +1,98 @@ +# Hypercube DX (Developer Experience) Commands + +# Enter the bluefin-cli container (Homebrew environment) +brew: + #!/usr/bin/bash + set -euo pipefail + + # Check if bluefin-cli container exists + if ! distrobox list | grep -q "bluefin-cli"; then + echo "Creating bluefin-cli container..." + distrobox assemble create --file /etc/distrobox/distrobox.ini + fi + + distrobox enter bluefin-cli + +# Run a brew command directly without entering the container +brew-run *args: + #!/usr/bin/bash + set -euo pipefail + + # Check if bluefin-cli container exists + if ! distrobox list | grep -q "bluefin-cli"; then + echo "Creating bluefin-cli container..." + distrobox assemble create --file /etc/distrobox/distrobox.ini + fi + + distrobox enter bluefin-cli -- brew {{ args }} + +# Create distrobox containers from config +distrobox-assemble: + #!/usr/bin/bash + set -euo pipefail + + echo "Creating distrobox containers from /etc/distrobox/distrobox.ini..." + distrobox assemble create --file /etc/distrobox/distrobox.ini + echo "" + echo "Containers created. Use 'distrobox list' to see them." + +# List all distrobox containers +distrobox-list: + distrobox list + +# Create a new dev container with common tools +distrobox-dev name: + #!/usr/bin/bash + set -euo pipefail + + echo "Creating development container: {{ name }}" + distrobox create --name "{{ name }}" --image ghcr.io/ublue-os/bluefin-cli:latest + echo "" + echo "Container created. Enter with: distrobox enter {{ name }}" + +# Create a Fedora container +distrobox-fedora name: + #!/usr/bin/bash + set -euo pipefail + + echo "Creating Fedora container: {{ name }}" + distrobox create --name "{{ name }}" --image registry.fedoraproject.org/fedora:latest + echo "" + echo "Container created. Enter with: distrobox enter {{ name }}" + +# Create an Ubuntu container +distrobox-ubuntu name: + #!/usr/bin/bash + set -euo pipefail + + echo "Creating Ubuntu container: {{ name }}" + distrobox create --name "{{ name }}" --image docker.io/library/ubuntu:latest + echo "" + echo "Container created. Enter with: distrobox enter {{ name }}" + +# Create an Arch Linux container +distrobox-arch name: + #!/usr/bin/bash + set -euo pipefail + + echo "Creating Arch Linux container: {{ name }}" + distrobox create --name "{{ name }}" --image docker.io/library/archlinux:latest + echo "" + echo "Container created. Enter with: distrobox enter {{ name }}" + +# Show developer environment status +dx-status: + #!/usr/bin/bash + set -euo pipefail + + echo "Hypercube DX Status" + echo "===================" + echo "" + + echo "Container Runtimes:" + echo -n " Podman: " + podman --version 2>/dev/null || echo "not found" + echo "" + + echo "Distrobox Containers:" + distrobox list 2>/dev/null || echo " (none)" From fe1ef9061db87bef058eb94ac547e354e7439c0c Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 11:44:35 -0800 Subject: [PATCH 02/24] copr stuff --- build_files/hyprland/01-hyprland-desktop.sh | 50 ++---- build_files/shared/clean-stage.sh | 14 +- packages/aquamarine/aquamarine.spec | 61 ++++++++ packages/eza/eza.spec | 55 +++++++ packages/ghostty/ghostty.spec | 86 +++++++++++ packages/hyprcursor/hyprcursor.spec | 55 +++++++ packages/hyprgraphics/hyprgraphics.spec | 64 ++++++++ packages/hypridle/hypridle.spec | 68 +++++++++ .../hyprland-protocols.spec | 40 +++++ .../hyprland-qt-support.spec | 42 +++++ packages/hyprland/hyprland.spec | 143 ++++++++++++++++++ packages/hyprlang/hyprlang.spec | 53 +++++++ packages/hyprlock/hyprlock.spec | 72 +++++++++ packages/hyprpaper/hyprpaper.spec | 56 +++++++ packages/hyprpolkitagent/hyprpolkitagent.spec | 53 +++++++ packages/hyprutils/hyprutils.spec | 52 +++++++ .../hyprwayland-scanner.spec | 44 ++++++ packages/lazygit/lazygit.spec | 36 +++++ packages/livesys-scripts/livesys-hyprland | 62 -------- packages/livesys-scripts/livesys-scripts.spec | 4 +- packages/neovim/neovim.spec | 69 +++++++++ packages/quickshell/quickshell.spec | 79 ++++++++++ packages/starship/starship.spec | 50 ++++++ .../xdg-desktop-portal-hyprland.spec | 73 +++++++++ 24 files changed, 1269 insertions(+), 112 deletions(-) create mode 100644 packages/aquamarine/aquamarine.spec create mode 100644 packages/eza/eza.spec create mode 100644 packages/ghostty/ghostty.spec create mode 100644 packages/hyprcursor/hyprcursor.spec create mode 100644 packages/hyprgraphics/hyprgraphics.spec create mode 100644 packages/hypridle/hypridle.spec create mode 100644 packages/hyprland-protocols/hyprland-protocols.spec create mode 100644 packages/hyprland-qt-support/hyprland-qt-support.spec create mode 100644 packages/hyprland/hyprland.spec create mode 100644 packages/hyprlang/hyprlang.spec create mode 100644 packages/hyprlock/hyprlock.spec create mode 100644 packages/hyprpaper/hyprpaper.spec create mode 100644 packages/hyprpolkitagent/hyprpolkitagent.spec create mode 100644 packages/hyprutils/hyprutils.spec create mode 100644 packages/hyprwayland-scanner/hyprwayland-scanner.spec create mode 100644 packages/lazygit/lazygit.spec delete mode 100644 packages/livesys-scripts/livesys-hyprland create mode 100644 packages/neovim/neovim.spec create mode 100644 packages/quickshell/quickshell.spec create mode 100644 packages/starship/starship.spec create mode 100644 packages/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland.spec diff --git a/build_files/hyprland/01-hyprland-desktop.sh b/build_files/hyprland/01-hyprland-desktop.sh index 14dd61c..99989e0 100755 --- a/build_files/hyprland/01-hyprland-desktop.sh +++ b/build_files/hyprland/01-hyprland-desktop.sh @@ -6,25 +6,20 @@ set -ouex pipefail echo "Installing Hyprland desktop stack..." -### Compositor / Hyprland Stack -dnf5 -y copr enable sdegler/hyprland +### Enable Hypercube COPR (our self-maintained packages) +dnf5 -y copr enable binarypie/hypercube + +### Compositor / Hyprland Stack (from Hypercube COPR) dnf5 -y install \ hyprland \ - hyprland-contrib \ - hyprland-plugins \ - hyprland-qtutils \ + hyprland-uwsm \ hyprpaper \ - hyprpicker \ hypridle \ - hyprshot \ hyprlock \ hyprpolkitagent \ - pyprland \ - waybar-git \ xdg-desktop-portal-hyprland -### Quickshell - Application Launcher, Notifications, OSD -dnf5 -y copr enable errornointernet/quickshell +### Quickshell - Application Launcher, Notifications, OSD (from Hypercube COPR) dnf5 -y install quickshell ### CLI Tools - Official Fedora repos @@ -42,36 +37,19 @@ dnf5 -y install \ tmux \ qt6ct -### CLI Tools - From COPRs (not in official F43 repos) -# eza - modern ls replacement -dnf5 -y copr enable alternateved/eza -dnf5 -y install eza - -# starship - cross-shell prompt -dnf5 -y copr enable atim/starship -dnf5 -y install starship - -# git-delta - better git diff -dnf5 -y copr enable gourlaysama/git-delta || true -dnf5 -y install git-delta || true +### CLI Tools - From Hypercube COPR +dnf5 -y install \ + eza \ + starship \ + lazygit ### Fish Shell (set as default) -# Note: fisher (plugin manager) removed - starship handles prompt, fish has good built-in completions dnf5 -y install fish -### Lazygit from COPR -dnf5 -y copr enable atim/lazygit -dnf5 -y install lazygit - -### Terminals -dnf5 -y copr enable wezfurlong/wezterm-nightly -dnf5 -y install wezterm - -dnf5 -y copr enable scottames/ghostty +### Terminal - Ghostty (from Hypercube COPR) dnf5 -y install ghostty -### Editor -dnf5 -y copr enable agriffis/neovim-nightly +### Editor - Neovim (from Hypercube COPR) dnf5 -y install neovim python3-neovim ### Image/Media Viewers @@ -79,7 +57,7 @@ dnf5 -y install \ imv \ mpv -### Screenshot/Screen Recording (hyprshot handles most, but add deps) +### Screenshot/Screen Recording dnf5 -y install \ grim \ slurp diff --git a/build_files/shared/clean-stage.sh b/build_files/shared/clean-stage.sh index 5f0e771..1a170b2 100755 --- a/build_files/shared/clean-stage.sh +++ b/build_files/shared/clean-stage.sh @@ -9,18 +9,8 @@ echo "Disabling COPR repositories..." # Disable all COPR repos that were enabled during build # This ensures the final image doesn't have external repos enabled -# Hyprland COPRs -dnf5 -y copr disable sdegler/hyprland || true -dnf5 -y copr disable errornointernet/quickshell || true -dnf5 -y copr disable wezfurlong/wezterm-nightly || true -dnf5 -y copr disable scottames/ghostty || true -dnf5 -y copr disable agriffis/neovim-nightly || true -dnf5 -y copr disable atim/lazygit || true - -# CLI Tools COPRs -dnf5 -y copr disable alternateved/eza || true -dnf5 -y copr disable atim/starship || true -dnf5 -y copr disable gourlaysama/git-delta || true +# Hypercube COPR (our self-maintained packages) +dnf5 -y copr disable binarypie/hypercube || true echo "Cleaning package caches..." dnf5 -y clean all diff --git a/packages/aquamarine/aquamarine.spec b/packages/aquamarine/aquamarine.spec new file mode 100644 index 0000000..e32d876 --- /dev/null +++ b/packages/aquamarine/aquamarine.spec @@ -0,0 +1,61 @@ +Name: aquamarine +Version: 0.10.0 +Release: 1%{?dist} +Summary: A very light linux rendering backend library + +License: BSD-3-Clause +URL: https://github.com/hyprwm/aquamarine +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: mesa-libEGL-devel +BuildRequires: pkgconfig(gbm) +BuildRequires: pkgconfig(hwdata) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(hyprwayland-scanner) +BuildRequires: pkgconfig(libdisplay-info) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libinput) +BuildRequires: pkgconfig(libseat) +BuildRequires: pkgconfig(libudev) +BuildRequires: pkgconfig(pixman-1) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-protocols) + +%description +%{summary}. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Development files for %{name}. + +%prep +%autosetup -p1 + +%build +%cmake -DCMAKE_BUILD_TYPE=Release +%cmake_build + +%install +%cmake_install + +%files +%license LICENSE +%doc README.md +%{_libdir}/lib%{name}.so.%{version} +%{_libdir}/lib%{name}.so.9 + +%files devel +%{_includedir}/%{name}/ +%{_libdir}/lib%{name}.so +%{_libdir}/pkgconfig/%{name}.pc + +%changelog +* Mon Dec 16 2024 Hypercube - 0.10.0-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/eza/eza.spec b/packages/eza/eza.spec new file mode 100644 index 0000000..fd7106e --- /dev/null +++ b/packages/eza/eza.spec @@ -0,0 +1,55 @@ +Name: eza +Version: 0.20.21 +Release: 1%{?dist} +Summary: Modern replacement for ls + +License: EUPL-1.2 +URL: https://github.com/eza-community/eza +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +BuildRequires: cargo +BuildRequires: rust +BuildRequires: gcc +BuildRequires: pandoc +BuildRequires: git + +%description +eza is a modern replacement for the venerable file-listing command-line program +ls that ships with Unix and Linux operating systems, giving it more features +and better defaults. + +%prep +%autosetup -n %{name}-%{version} + +%build +cargo build --release --locked + +%install +install -Dpm 0755 target/release/%{name} %{buildroot}%{_bindir}/%{name} + +# Generate and install man pages +mkdir -p %{buildroot}%{_mandir}/man1 +mkdir -p %{buildroot}%{_mandir}/man5 +pandoc --standalone -f markdown -t man man/eza.1.md -o %{buildroot}%{_mandir}/man1/eza.1 +pandoc --standalone -f markdown -t man man/eza_colors.5.md -o %{buildroot}%{_mandir}/man5/eza_colors.5 +pandoc --standalone -f markdown -t man man/eza_colors-explanation.5.md -o %{buildroot}%{_mandir}/man5/eza_colors-explanation.5 + +# Install shell completions +install -Dpm 0644 completions/bash/%{name} %{buildroot}%{_datadir}/bash-completion/completions/%{name} +install -Dpm 0644 completions/zsh/_%{name} %{buildroot}%{_datadir}/zsh/site-functions/_%{name} +install -Dpm 0644 completions/fish/%{name}.fish %{buildroot}%{_datadir}/fish/vendor_completions.d/%{name}.fish + +%files +%license LICENCE +%doc README.md CHANGELOG.md +%{_bindir}/%{name} +%{_mandir}/man1/eza.1* +%{_mandir}/man5/eza_colors.5* +%{_mandir}/man5/eza_colors-explanation.5* +%{_datadir}/bash-completion/completions/%{name} +%{_datadir}/zsh/site-functions/_%{name} +%{_datadir}/fish/vendor_completions.d/%{name}.fish + +%changelog +* Mon Dec 16 2024 Hypercube - 0.20.21-1 +- Initial package for Hypercube diff --git a/packages/ghostty/ghostty.spec b/packages/ghostty/ghostty.spec new file mode 100644 index 0000000..e1869be --- /dev/null +++ b/packages/ghostty/ghostty.spec @@ -0,0 +1,86 @@ +Name: ghostty +Version: 1.2.3 +Release: 1%{?dist} +Summary: Fast, feature-rich, cross-platform terminal emulator + +License: MIT +URL: https://github.com/ghostty-org/ghostty +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +# Ghostty requires Zig 0.15.2 which is not in Fedora repos +# We download the official binary +%global zig_version 0.15.0 +%global zig_arch x86_64 + +BuildRequires: gcc +BuildRequires: git +BuildRequires: pkg-config +BuildRequires: fontconfig-devel +BuildRequires: freetype-devel +BuildRequires: gtk4-devel +BuildRequires: libadwaita-devel +BuildRequires: libX11-devel +BuildRequires: libXcursor-devel +BuildRequires: libXrandr-devel +BuildRequires: pandoc +BuildRequires: bzip2-devel +BuildRequires: oniguruma-devel +BuildRequires: lz4-devel +BuildRequires: zstd-devel +BuildRequires: libpng-devel + +Requires: fontconfig +Requires: freetype +Requires: gtk4 +Requires: libadwaita + +%description +Ghostty is a terminal emulator that differentiates itself by being both +incredibly fast and feature-rich. It's built with GPU acceleration, +native platform feel, and a focus on performance. + +%prep +%autosetup -n %{name}-%{version} + +# Download Zig +curl -L -o zig.tar.xz https://ziglang.org/download/%{zig_version}/zig-linux-%{zig_arch}-%{zig_version}.tar.xz +tar xf zig.tar.xz +export PATH="$PWD/zig-linux-%{zig_arch}-%{zig_version}:$PATH" + +# Fetch dependencies for offline build +./nix/build-support/fetch-zig-cache.sh + +%build +export PATH="$PWD/zig-linux-%{zig_arch}-%{zig_version}:$PATH" +zig build \ + --prefix %{_prefix} \ + --system \ + -Doptimize=ReleaseFast \ + -Dcpu=baseline \ + -Dpie=true + +%install +export PATH="$PWD/zig-linux-%{zig_arch}-%{zig_version}:$PATH" +DESTDIR=%{buildroot} zig build install \ + --prefix %{_prefix} \ + --system \ + -Doptimize=ReleaseFast \ + -Dcpu=baseline \ + -Dpie=true + +%files +%license LICENSE +%doc README.md +%{_bindir}/%{name} +%{_datadir}/applications/%{name}.desktop +%{_datadir}/icons/hicolor/*/apps/%{name}.* +%{_datadir}/%{name}/ +%{_datadir}/bash-completion/completions/%{name} +%{_datadir}/zsh/site-functions/_%{name} +%{_datadir}/fish/vendor_completions.d/%{name}.fish +%{_mandir}/man1/%{name}.1* +%{_mandir}/man5/%{name}.5* + +%changelog +* Mon Dec 16 2024 Hypercube - 1.2.3-1 +- Initial package for Hypercube diff --git a/packages/hyprcursor/hyprcursor.spec b/packages/hyprcursor/hyprcursor.spec new file mode 100644 index 0000000..2e92628 --- /dev/null +++ b/packages/hyprcursor/hyprcursor.spec @@ -0,0 +1,55 @@ +Name: hyprcursor +Version: 0.1.13 +Release: 1%{?dist} +Summary: The hyprland cursor format, library and utilities + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprcursor +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(librsvg-2.0) +BuildRequires: pkgconfig(libzip) +BuildRequires: pkgconfig(tomlplusplus) + +%description +%{summary}. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Development files for %{name}. + +%prep +%autosetup -p1 + +%build +%cmake -DCMAKE_BUILD_TYPE=Release +%cmake_build + +%install +%cmake_install + +%files +%license LICENSE +%doc README.md +%{_bindir}/hyprcursor-util +%{_libdir}/lib%{name}.so.%{version} +%{_libdir}/lib%{name}.so.0 + +%files devel +%{_includedir}/%{name}.hpp +%{_includedir}/%{name}/ +%{_libdir}/lib%{name}.so +%{_libdir}/pkgconfig/%{name}.pc + +%changelog +* Mon Dec 16 2024 Hypercube - 0.1.13-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprgraphics/hyprgraphics.spec b/packages/hyprgraphics/hyprgraphics.spec new file mode 100644 index 0000000..00f8351 --- /dev/null +++ b/packages/hyprgraphics/hyprgraphics.spec @@ -0,0 +1,64 @@ +Name: hyprgraphics +Version: 0.2.0 +Release: 1%{?dist} +Summary: Hyprland graphics / resource utilities + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprgraphics +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(libjpeg) +BuildRequires: pkgconfig(libjxl_cms) +BuildRequires: pkgconfig(libjxl_threads) +BuildRequires: pkgconfig(libjxl) +BuildRequires: pkgconfig(libmagic) +BuildRequires: pkgconfig(libwebp) +BuildRequires: pkgconfig(pixman-1) +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(pangocairo) +BuildRequires: pkgconfig(libheif) +BuildRequires: pkgconfig(librsvg-2.0) + +%description +%{summary}. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Development files for %{name}. + +%prep +%autosetup -p1 + +%build +%cmake -DCMAKE_BUILD_TYPE=Release +%cmake_build + +%install +%cmake_install + +%check +%ctest + +%files +%license LICENSE +%doc README.md +%{_libdir}/lib%{name}.so.1 +%{_libdir}/lib%{name}.so.%{version} + +%files devel +%{_includedir}/%{name}/ +%{_libdir}/lib%{name}.so +%{_libdir}/pkgconfig/%{name}.pc + +%changelog +* Mon Dec 16 2024 Hypercube - 0.2.0-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hypridle/hypridle.spec b/packages/hypridle/hypridle.spec new file mode 100644 index 0000000..ddd283d --- /dev/null +++ b/packages/hypridle/hypridle.spec @@ -0,0 +1,68 @@ +%global sdbus_version 2.1.0 + +Name: hypridle +Version: 0.1.7 +Release: 1%{?dist} +Summary: Hyprland's idle daemon + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hypridle +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Source1: https://github.com/Kistler-Group/sdbus-cpp/archive/v%{sdbus_version}/sdbus-%{sdbus_version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: systemd-rpm-macros +BuildRequires: cmake(hyprwayland-scanner) +BuildRequires: pkgconfig(hyprland-protocols) +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(systemd) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-protocols) + +%description +%{summary}. + +%prep +%autosetup -p1 -a1 + +%build +pushd sdbus-cpp-%{sdbus_version} +%cmake \ + -DCMAKE_INSTALL_PREFIX=%{_builddir}/sdbus \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF +%cmake_build +cmake --install %{__cmake_builddir} +popd +export PKG_CONFIG_PATH=%{_builddir}/sdbus/lib64/pkgconfig + +%cmake +%cmake_build + +%install +%cmake_install +rm %{buildroot}%{_datadir}/hypr/hypridle.conf + +%files +%license LICENSE +%doc README.md assets/example.conf +%{_bindir}/%{name} +%{_userunitdir}/%{name}.service + +%post +%systemd_user_post %{name}.service + +%preun +%systemd_user_preun %{name}.service + +%postun +%systemd_user_postun %{name}.service + +%changelog +* Mon Dec 16 2024 Hypercube - 0.1.7-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprland-protocols/hyprland-protocols.spec b/packages/hyprland-protocols/hyprland-protocols.spec new file mode 100644 index 0000000..4aa901f --- /dev/null +++ b/packages/hyprland-protocols/hyprland-protocols.spec @@ -0,0 +1,40 @@ +Name: hyprland-protocols +Version: 0.7.0 +Release: 1%{?dist} +Summary: Wayland protocol extensions for Hyprland +BuildArch: noarch + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprland-protocols +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +BuildRequires: meson + +%description +%{summary}. + +%package devel +Summary: Wayland protocol extensions for Hyprland + +%description devel +%{summary}. + +%prep +%autosetup -p1 + +%build +%meson +%meson_build + +%install +%meson_install + +%files devel +%license LICENSE +%doc README.md +%{_datadir}/pkgconfig/%{name}.pc +%{_datadir}/%{name}/ + +%changelog +* Mon Dec 16 2024 Hypercube - 0.7.0-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprland-qt-support/hyprland-qt-support.spec b/packages/hyprland-qt-support/hyprland-qt-support.spec new file mode 100644 index 0000000..67ae2e9 --- /dev/null +++ b/packages/hyprland-qt-support/hyprland-qt-support.spec @@ -0,0 +1,42 @@ +Name: hyprland-qt-support +Version: 0.1.0 +Release: 1%{?dist} +Summary: A Qt6 Qml style provider for hypr* apps + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprland-qt-support +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: qt6-rpm-macros +BuildRequires: cmake(Qt6Quick) +BuildRequires: cmake(Qt6QuickControls2) +BuildRequires: cmake(Qt6Qml) +BuildRequires: pkgconfig(hyprlang) + +%description +%{summary}. + +%prep +%autosetup -p1 + +%build +%cmake -DINSTALL_QMLDIR=%{_qt6_qmldir} +%cmake_build + +%install +%cmake_install + +%files +%license LICENSE +%doc README.md +%{_libdir}/libhyprland-quick-style-impl.so +%{_libdir}/libhyprland-quick-style.so +%{_qt6_qmldir}/org/hyprland/ + +%changelog +* Mon Dec 16 2024 Hypercube - 0.1.0-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprland/hyprland.spec b/packages/hyprland/hyprland.spec new file mode 100644 index 0000000..f4ddc03 --- /dev/null +++ b/packages/hyprland/hyprland.spec @@ -0,0 +1,143 @@ +Name: hyprland +Version: 0.52.2 +Release: 1%{?dist} +Summary: Dynamic tiling Wayland compositor that doesn't sacrifice on its looks + +License: BSD-3-Clause AND BSD-2-Clause AND HPND-sell-variant AND LGPL-2.1-or-later +URL: https://github.com/hyprwm/Hyprland +Source0: %{url}/releases/download/v%{version}/source-v%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: meson +BuildRequires: glaze-static +BuildRequires: pkgconfig(aquamarine) +BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(egl) +BuildRequires: pkgconfig(gbm) +BuildRequires: pkgconfig(gio-2.0) +BuildRequires: pkgconfig(glesv2) +BuildRequires: pkgconfig(hwdata) +BuildRequires: pkgconfig(hyprcursor) +BuildRequires: pkgconfig(hyprgraphics) +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(hyprwayland-scanner) +BuildRequires: pkgconfig(libdisplay-info) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libinput) >= 1.28 +BuildRequires: pkgconfig(libliftoff) +BuildRequires: pkgconfig(libseat) +BuildRequires: pkgconfig(libudev) +BuildRequires: pkgconfig(pango) +BuildRequires: pkgconfig(pangocairo) +BuildRequires: pkgconfig(pixman-1) +BuildRequires: pkgconfig(re2) +BuildRequires: pkgconfig(systemd) +BuildRequires: pkgconfig(tomlplusplus) +BuildRequires: pkgconfig(uuid) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-protocols) >= 1.45 +BuildRequires: pkgconfig(wayland-scanner) +BuildRequires: pkgconfig(wayland-server) +BuildRequires: pkgconfig(xcb-composite) +BuildRequires: pkgconfig(xcb-dri3) +BuildRequires: pkgconfig(xcb-errors) +BuildRequires: pkgconfig(xcb-ewmh) +BuildRequires: pkgconfig(xcb-icccm) +BuildRequires: pkgconfig(xcb-present) +BuildRequires: pkgconfig(xcb-render) +BuildRequires: pkgconfig(xcb-renderutil) +BuildRequires: pkgconfig(xcb-res) +BuildRequires: pkgconfig(xcb-shm) +BuildRequires: pkgconfig(xcb-util) +BuildRequires: pkgconfig(xcb-xfixes) +BuildRequires: pkgconfig(xcb-xinput) +BuildRequires: pkgconfig(xcb) +BuildRequires: pkgconfig(xcursor) +BuildRequires: pkgconfig(xkbcommon) +BuildRequires: pkgconfig(xwayland) + +Requires: xorg-x11-server-Xwayland%{?_isa} +Requires: aquamarine%{?_isa} >= 0.9.2 +Requires: hyprcursor%{?_isa} >= 0.1.13 +Requires: hyprgraphics%{?_isa} >= 0.1.6 +Requires: hyprlang%{?_isa} >= 0.6.3 +Requires: hyprutils%{?_isa} >= 0.8.4 + +Recommends: ghostty +Recommends: playerctl +Recommends: brightnessctl +Recommends: mesa-dri-drivers +Recommends: polkit +Recommends: %{name}-uwsm +Recommends: (qt5-qtwayland if qt5-qtbase-gui) +Recommends: (qt6-qtwayland if qt6-qtbase-gui) + +%description +Hyprland is a dynamic tiling Wayland compositor that doesn't sacrifice +on its looks. It supports multiple layouts, fancy effects, has a +very flexible IPC model allowing for a lot of customization, a powerful +plugin system and more. + +%package uwsm +Summary: Files for a uwsm-managed session +Requires: uwsm + +%description uwsm +Files for a uwsm-managed session. + +%package devel +Summary: Header and protocol files for %{name} +License: BSD-3-Clause +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: cpio +Requires: git-core +Requires: pkgconfig(xkbcommon) + +%description devel +%{summary}. + +%prep +%autosetup -n hyprland-source -N + +cp -p subprojects/hyprland-protocols/LICENSE LICENSE-hyprland-protocols +cp -p subprojects/udis86/LICENSE LICENSE-udis86 + +%build +%cmake \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DNO_TESTS=TRUE \ + -DBUILD_TESTING=FALSE +%cmake_build + +%install +%cmake_install + +%files +%license LICENSE LICENSE-udis86 LICENSE-hyprland-protocols +%{_bindir}/[Hh]yprland +%{_bindir}/hyprctl +%{_bindir}/hyprpm +%{_datadir}/hypr/ +%{_datadir}/wayland-sessions/hyprland.desktop +%{_datadir}/xdg-desktop-portal/hyprland-portals.conf +%{_mandir}/man1/hyprctl.1* +%{_mandir}/man1/Hyprland.1* +%{_datadir}/bash-completion/completions/hypr* +%{_datadir}/fish/vendor_completions.d/hypr*.fish +%{_datadir}/zsh/site-functions/_hypr* + +%files uwsm +%{_datadir}/wayland-sessions/hyprland-uwsm.desktop + +%files devel +%{_datadir}/pkgconfig/hyprland.pc +%{_includedir}/hyprland/ + +%changelog +* Mon Dec 16 2024 Hypercube - 0.52.2-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprlang/hyprlang.spec b/packages/hyprlang/hyprlang.spec new file mode 100644 index 0000000..030dcb0 --- /dev/null +++ b/packages/hyprlang/hyprlang.spec @@ -0,0 +1,53 @@ +Name: hyprlang +Version: 0.6.4 +Release: 1%{?dist} +Summary: The official implementation library for the hypr config language + +License: LGPL-3.0-only +URL: https://github.com/hyprwm/hyprlang +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: pkgconfig(hyprutils) + +%description +%{summary}. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Development files for %{name}. + +%prep +%autosetup -p1 +sed 's/.*/%{version}/' -i VERSION + +%build +%cmake +%cmake_build + +%install +%cmake_install + +%check +%ctest + +%files +%license LICENSE +%doc README.md +%{_libdir}/libhyprlang.so.2 +%{_libdir}/libhyprlang.so.%{version} + +%files devel +%{_includedir}/hyprlang.hpp +%{_libdir}/libhyprlang.so +%{_libdir}/pkgconfig/hyprlang.pc + +%changelog +* Mon Dec 16 2024 Hypercube - 0.6.4-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprlock/hyprlock.spec b/packages/hyprlock/hyprlock.spec new file mode 100644 index 0000000..7e554ec --- /dev/null +++ b/packages/hyprlock/hyprlock.spec @@ -0,0 +1,72 @@ +%global sdbus_version 2.1.0 + +Name: hyprlock +Version: 0.9.2 +Release: 1%{?dist} +Summary: Hyprland's GPU-accelerated screen locking utility + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprlock +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Source1: https://github.com/Kistler-Group/sdbus-cpp/archive/v%{sdbus_version}/sdbus-%{sdbus_version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: cmake(hyprwayland-scanner) +BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(egl) +BuildRequires: pkgconfig(gbm) +BuildRequires: pkgconfig(hyprgraphics) +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(opengl) +BuildRequires: pkgconfig(pam) +BuildRequires: pkgconfig(pangocairo) +BuildRequires: pkgconfig(systemd) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-egl) +BuildRequires: pkgconfig(wayland-protocols) +BuildRequires: pkgconfig(xkbcommon) + +Provides: bundled(sdbus-cpp) = %{sdbus_version} + +%description +%{summary}. + +%prep +%autosetup -p1 +mkdir -p subprojects/sdbus-cpp +tar -xf %{SOURCE1} -C subprojects/sdbus-cpp --strip=1 + +%build +pushd subprojects/sdbus-cpp +%cmake \ + -DCMAKE_INSTALL_PREFIX=%{_builddir}/sdbus \ + -DCMAKE_BUILD_TYPE=Release \ + -DSDBUSCPP_BUILD_DOCS=OFF \ + -DBUILD_SHARED_LIBS=OFF +%cmake_build +cmake --install %{_vpath_builddir} +popd +export PKG_CONFIG_PATH=%{_builddir}/sdbus/%{_lib}/pkgconfig + +%cmake -DCMAKE_BUILD_TYPE=Release +%cmake_build + +%install +%cmake_install +rm %{buildroot}%{_datadir}/hypr/%{name}.conf + +%files +%license LICENSE +%doc README.md assets/example.conf +%{_bindir}/%{name} +%config(noreplace) %{_sysconfdir}/pam.d/%{name} + +%changelog +* Mon Dec 16 2024 Hypercube - 0.9.2-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprpaper/hyprpaper.spec b/packages/hyprpaper/hyprpaper.spec new file mode 100644 index 0000000..6a41b09 --- /dev/null +++ b/packages/hyprpaper/hyprpaper.spec @@ -0,0 +1,56 @@ +Name: hyprpaper +Version: 0.7.6 +Release: 1%{?dist} +Summary: Blazing fast wayland wallpaper utility with IPC controls + +License: BSD-3-Clause AND HPND-sell-variant +URL: https://github.com/hyprwm/hyprpaper +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: systemd-rpm-macros +BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(glesv2) +BuildRequires: pkgconfig(hyprgraphics) +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(hyprwayland-scanner) +BuildRequires: pkgconfig(libmagic) +BuildRequires: pkgconfig(pango) +BuildRequires: pkgconfig(pangocairo) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-protocols) + +%description +Hyprpaper is a blazing fast wallpaper utility for Hyprland with the ability +to dynamically change wallpapers through sockets. It will work on all +wlroots-based compositors, though. + +%prep +%autosetup -p1 + +%build +%cmake +%cmake_build + +%install +%cmake_install + +%post +%systemd_user_post %{name}.service + +%preun +%systemd_user_preun %{name}.service + +%files +%license LICENSE +%doc README.md +%{_bindir}/%{name} +%{_userunitdir}/%{name}.service + +%changelog +* Mon Dec 16 2024 Hypercube - 0.7.6-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprpolkitagent/hyprpolkitagent.spec b/packages/hyprpolkitagent/hyprpolkitagent.spec new file mode 100644 index 0000000..0766788 --- /dev/null +++ b/packages/hyprpolkitagent/hyprpolkitagent.spec @@ -0,0 +1,53 @@ +Name: hyprpolkitagent +Version: 0.1.3 +Release: 1%{?dist} +Summary: A simple polkit authentication agent for Hyprland + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprpolkitagent +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: desktop-file-utils +BuildRequires: gcc-c++ +BuildRequires: systemd-rpm-macros +BuildRequires: cmake(Qt6Quick) +BuildRequires: cmake(Qt6QuickControls2) +BuildRequires: cmake(Qt6Widgets) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(polkit-agent-1) +BuildRequires: pkgconfig(polkit-qt6-1) + +Requires: hyprland-qt-support%{?_isa} + +%description +A simple polkit authentication agent for Hyprland, written in QT/QML. + +%prep +%autosetup -p1 + +%build +%cmake +%cmake_build + +%install +%cmake_install + +%post +%systemd_user_post %{name}.service + +%preun +%systemd_user_preun %{name}.service + +%files +%license LICENSE +%doc README.md +%{_datadir}/dbus-1/services/org.hyprland.%{name}.service +%{_libexecdir}/%{name} +%{_userunitdir}/%{name}.service + +%changelog +* Mon Dec 16 2024 Hypercube - 0.1.3-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprutils/hyprutils.spec b/packages/hyprutils/hyprutils.spec new file mode 100644 index 0000000..22b7813 --- /dev/null +++ b/packages/hyprutils/hyprutils.spec @@ -0,0 +1,52 @@ +Name: hyprutils +Version: 0.10.0 +Release: 1%{?dist} +Summary: Hyprland utilities library used across the ecosystem + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprutils +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: pkgconfig(pixman-1) + +%description +%{summary}. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Development files for %{name}. + +%prep +%autosetup -p1 + +%build +%cmake +%cmake_build + +%install +%cmake_install + +%check +%ctest + +%files +%license LICENSE +%doc README.md +%{_libdir}/lib%{name}.so.%{version} +%{_libdir}/lib%{name}.so.9 + +%files devel +%{_includedir}/%{name}/ +%{_libdir}/lib%{name}.so +%{_libdir}/pkgconfig/%{name}.pc + +%changelog +* Mon Dec 16 2024 Hypercube - 0.10.0-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprwayland-scanner/hyprwayland-scanner.spec b/packages/hyprwayland-scanner/hyprwayland-scanner.spec new file mode 100644 index 0000000..149689e --- /dev/null +++ b/packages/hyprwayland-scanner/hyprwayland-scanner.spec @@ -0,0 +1,44 @@ +Name: hyprwayland-scanner +Version: 0.4.5 +Release: 1%{?dist} +Summary: A Hyprland implementation of wayland-scanner, in and for C++ + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprwayland-scanner +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: cmake(pugixml) +BuildRequires: gcc-c++ + +%description +%{summary}. + +%package devel +Summary: A Hyprland implementation of wayland-scanner, in and for C++ + +%description devel +%{summary}. + +%prep +%autosetup -p1 + +%build +%cmake +%cmake_build + +%install +%cmake_install + +%files devel +%license LICENSE +%doc README.md +%{_bindir}/%{name} +%{_libdir}/pkgconfig/%{name}.pc +%{_libdir}/cmake/%{name}/ + +%changelog +* Mon Dec 16 2024 Hypercube - 0.4.5-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/lazygit/lazygit.spec b/packages/lazygit/lazygit.spec new file mode 100644 index 0000000..1ba11b6 --- /dev/null +++ b/packages/lazygit/lazygit.spec @@ -0,0 +1,36 @@ +Name: lazygit +Version: 0.57.0 +Release: 1%{?dist} +Summary: Simple terminal UI for git commands + +License: MIT +URL: https://github.com/jesseduffield/lazygit +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +BuildRequires: golang >= 1.21 +BuildRequires: git + +%description +A simple terminal UI for git commands. Lazygit makes it easier to add files, +resolve merge conflicts, checkout recent branches, scroll through logs/diffs +and more. It's designed to make git less painful. + +%prep +%autosetup -n %{name}-%{version} + +%build +export GOFLAGS="-buildmode=pie -trimpath" +export LDFLAGS="-X main.version=%{version} -X main.buildSource=rpm" +go build -ldflags "${LDFLAGS}" -o %{name} + +%install +install -Dpm 0755 %{name} %{buildroot}%{_bindir}/%{name} + +%files +%license LICENSE +%doc README.md +%{_bindir}/%{name} + +%changelog +* Mon Dec 16 2024 Hypercube - 0.57.0-1 +- Initial package for Hypercube diff --git a/packages/livesys-scripts/livesys-hyprland b/packages/livesys-scripts/livesys-hyprland deleted file mode 100644 index b68643c..0000000 --- a/packages/livesys-scripts/livesys-hyprland +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh -# -# livesys-hyprland: hyprland specific setup for livesys -# SPDX-License-Identifier: GPL-3.0-or-later -# - -HYPRLAND_SESSION_FILE="hyprland.desktop" - -# set up autologin for user liveuser -# Support greetd, GDM, and SDDM - -if [ -f /etc/greetd/config.toml ]; then - # greetd (common for Hyprland setups) - cat > /etc/greetd/config.toml << GREETD_EOF -[terminal] -vt = 1 - -[default_session] -command = "Hyprland" -user = "liveuser" -GREETD_EOF - -elif [ -f /etc/gdm/custom.conf ]; then - # GDM - sed -i 's/^\[daemon\]/[daemon]\nAutomaticLoginEnable=True\nAutomaticLogin=liveuser/' /etc/gdm/custom.conf - # Set default session for GDM - mkdir -p /var/lib/AccountsService/users - cat > /var/lib/AccountsService/users/liveuser << GDM_USER_EOF -[User] -Session=${HYPRLAND_SESSION_FILE} -XSession=${HYPRLAND_SESSION_FILE} -SystemAccount=false -GDM_USER_EOF - -elif [ -f /etc/sddm.conf ]; then - # SDDM (existing config) - sed -i 's/^#User=.*/User=liveuser/' /etc/sddm.conf - sed -i "s/^#Session=.*/Session=${HYPRLAND_SESSION_FILE}/" /etc/sddm.conf - -else - # SDDM (create new config) - cat > /etc/sddm.conf << SDDM_EOF -[Autologin] -User=liveuser -Session=${HYPRLAND_SESSION_FILE} -SDDM_EOF -fi - -# Show harddisk install on the desktop -if [ -f /usr/share/applications/liveinst.desktop ]; then - sed -i -e 's/NoDisplay=true/NoDisplay=false/' /usr/share/applications/liveinst.desktop -fi -mkdir -p /home/liveuser/Desktop - -# echoing type liveinst to start the installer -echo "echo 'Please type liveinst and press Enter to start the installer'" >> /home/liveuser/.bashrc - -# use hyprland configuration files for live environment -if [ "$(ls /usr/share/hypr/config.live.d/*.conf 2>/dev/null)" ]; then - mkdir -p /home/liveuser/.config/hypr/ - ln -sf -t /home/liveuser/.config/hypr /usr/share/hypr/config.live.d/*.conf -fi diff --git a/packages/livesys-scripts/livesys-scripts.spec b/packages/livesys-scripts/livesys-scripts.spec index 61f63ba..5a6e614 100644 --- a/packages/livesys-scripts/livesys-scripts.spec +++ b/packages/livesys-scripts/livesys-scripts.spec @@ -4,8 +4,8 @@ Release: 1.hypercube%{?dist} Summary: Scripts for auto-configuring live media during boot (with Hyprland support) License: GPL-3.0-or-later -URL: https://pagure.io/fork/binarypie/livesys-scripts -Source: https://pagure.io/fork/binarypie/livesys-scripts/archive/main/%{name}-main.tar.gz +URL: https://github.com/binarypie-dev/livesys-scripts +Source: https://github.com/binarypie-dev/livesys-scripts/archive/refs/heads/main.tar.gz BuildRequires: systemd-rpm-macros BuildRequires: make diff --git a/packages/neovim/neovim.spec b/packages/neovim/neovim.spec new file mode 100644 index 0000000..e73341d --- /dev/null +++ b/packages/neovim/neovim.spec @@ -0,0 +1,69 @@ +Name: neovim +Version: 0.11.5 +Release: 1%{?dist} +Summary: Vim-fork focused on extensibility and usability + +License: Apache-2.0 AND Vim +URL: https://github.com/neovim/neovim +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +BuildRequires: cmake >= 3.16 +BuildRequires: ninja-build +BuildRequires: gcc +BuildRequires: make +BuildRequires: gettext +BuildRequires: glibc-gconv-extra +BuildRequires: git +BuildRequires: unzip + +# Runtime dependencies +Requires: lua +Requires: python3-neovim + +%description +Neovim is a refactor, and sometimes redactor, in the tradition of Vim (which +itself derives from Stevie). It is not a rewrite but a continuation and +extension of Vim. Many clones and derivatives exist, some very clever - but +none are Vim. Neovim is built for users who want the good parts of Vim, and +more. + +%package -n python3-neovim +Summary: Python client for Neovim +BuildArch: noarch +Requires: python3 +Requires: python3-msgpack +Requires: python3-greenlet + +%description -n python3-neovim +Python client library for Neovim, enabling Python plugins and remote +communication with Neovim instances. + +%prep +%autosetup -n %{name}-%{version} + +%build +%cmake \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=%{_prefix} + +%cmake_build + +%install +%cmake_install + +# Desktop file and icons are installed by cmake + +%files +%license LICENSE.txt +%doc README.md CONTRIBUTING.md +%{_bindir}/nvim +%{_datadir}/nvim/ +%{_datadir}/applications/nvim.desktop +%{_datadir}/icons/hicolor/*/apps/nvim.* +%{_datadir}/locale/*/LC_MESSAGES/nvim.mo +%{_mandir}/man1/nvim.1* + +%changelog +* Mon Dec 16 2024 Hypercube - 0.11.5-1 +- Initial package for Hypercube diff --git a/packages/quickshell/quickshell.spec b/packages/quickshell/quickshell.spec new file mode 100644 index 0000000..c6b7f30 --- /dev/null +++ b/packages/quickshell/quickshell.spec @@ -0,0 +1,79 @@ +Name: quickshell +Version: 0.2.1 +Release: 1%{?dist} +Summary: Flexible QtQuick based desktop shell toolkit + +License: LGPL-3.0-or-later +URL: https://github.com/quickshell-mirror/quickshell +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +BuildRequires: cmake +BuildRequires: ninja-build +BuildRequires: gcc-c++ +BuildRequires: pkg-config +BuildRequires: qt6-qtbase-devel >= 6.6.0 +BuildRequires: qt6-qtdeclarative-devel +BuildRequires: qt6-qtshadertools-devel +BuildRequires: qt6-qtsvg-devel +BuildRequires: qt6-qtwayland-devel +BuildRequires: spirv-tools-devel +BuildRequires: cli11-devel + +# Wayland support +BuildRequires: wayland-devel +BuildRequires: wayland-protocols-devel + +# X11 support +BuildRequires: libxcb-devel + +# Audio/PipeWire +BuildRequires: pipewire-devel + +# DBus +BuildRequires: qt6-qtbase-private-devel + +# Optional dependencies +BuildRequires: jemalloc-devel +BuildRequires: pam-devel +BuildRequires: polkit-devel +BuildRequires: glib2-devel +BuildRequires: libdrm-devel +BuildRequires: mesa-libgbm-devel + +Requires: qt6-qtbase >= 6.6.0 +Requires: qt6-qtdeclarative +Requires: qt6-qtwayland +Requires: qt6-qtsvg + +%description +Quickshell is a toolkit for constructing desktop components like status bars, +widgets, and lockscreens using QtQuick on Wayland compositors or window +managers. It supports Hyprland, Sway, and other Wayland compositors. + +%prep +%autosetup -n %{name}-%{version} + +%build +%cmake \ + -GNinja \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DWAYLAND=ON \ + -DX11=ON \ + -DPIPEWIRE=ON \ + -DHYPRLAND=ON \ + -DI3=ON \ + -DCRASH_REPORTER=OFF + +%cmake_build + +%install +%cmake_install + +%files +%license LICENSE LICENSE.GPL +%doc README.md +%{_bindir}/%{name} + +%changelog +* Mon Dec 16 2024 Hypercube - 0.2.1-1 +- Initial package for Hypercube diff --git a/packages/starship/starship.spec b/packages/starship/starship.spec new file mode 100644 index 0000000..a2d4735 --- /dev/null +++ b/packages/starship/starship.spec @@ -0,0 +1,50 @@ +Name: starship +Version: 1.24.1 +Release: 1%{?dist} +Summary: Minimal, blazing-fast, and infinitely customizable prompt for any shell + +License: ISC +URL: https://github.com/starship/starship +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +BuildRequires: cargo +BuildRequires: rust +BuildRequires: gcc +BuildRequires: cmake +BuildRequires: openssl-devel +BuildRequires: zlib-devel + +%description +Starship is the minimal, blazing-fast, and infinitely customizable prompt for +any shell! The prompt shows information you need while you're working, while +staying sleek and out of the way. It works with Bash, Zsh, Fish, PowerShell, +Ion, Elvish, Tcsh, Xonsh, Nushell, and Cmd. + +%prep +%autosetup -n %{name}-%{version} + +%build +cargo build --release --locked + +%install +install -Dpm 0755 target/release/%{name} %{buildroot}%{_bindir}/%{name} + +# Generate and install shell completions +mkdir -p %{buildroot}%{_datadir}/bash-completion/completions +mkdir -p %{buildroot}%{_datadir}/zsh/site-functions +mkdir -p %{buildroot}%{_datadir}/fish/vendor_completions.d +target/release/%{name} completions bash > %{buildroot}%{_datadir}/bash-completion/completions/%{name} +target/release/%{name} completions zsh > %{buildroot}%{_datadir}/zsh/site-functions/_%{name} +target/release/%{name} completions fish > %{buildroot}%{_datadir}/fish/vendor_completions.d/%{name}.fish + +%files +%license LICENSE +%doc README.md CHANGELOG.md +%{_bindir}/%{name} +%{_datadir}/bash-completion/completions/%{name} +%{_datadir}/zsh/site-functions/_%{name} +%{_datadir}/fish/vendor_completions.d/%{name}.fish + +%changelog +* Mon Dec 16 2024 Hypercube - 1.24.1-1 +- Initial package for Hypercube diff --git a/packages/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland.spec b/packages/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland.spec new file mode 100644 index 0000000..958d3c9 --- /dev/null +++ b/packages/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland.spec @@ -0,0 +1,73 @@ +%global sdbus_version 2.1.0 + +Name: xdg-desktop-portal-hyprland +Epoch: 1 +Version: 1.3.11 +Release: 1%{?dist} +Summary: xdg-desktop-portal backend for hyprland + +License: BSD-3-Clause +URL: https://github.com/hyprwm/xdg-desktop-portal-hyprland +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Source1: https://github.com/Kistler-Group/sdbus-cpp/archive/v%{sdbus_version}/sdbus-%{sdbus_version}.tar.gz + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: systemd-rpm-macros +BuildRequires: pkgconfig(gbm) +BuildRequires: pkgconfig(hyprland-protocols) +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(hyprwayland-scanner) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libpipewire-0.3) +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(Qt6Widgets) +BuildRequires: pkgconfig(systemd) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-protocols) +BuildRequires: pkgconfig(wayland-scanner) + +Requires: dbus +Requires: grim +Requires: xdg-desktop-portal +Requires: slurp +Requires: qt6-qtwayland + +Enhances: hyprland +Supplements: hyprland + +Provides: bundled(sdbus-cpp) = %{sdbus_version} + +%description +%{summary}. + +%prep +%autosetup -p1 +tar -xf %{SOURCE1} -C subprojects/sdbus-cpp --strip=1 + +%build +%cmake -DBUILD_SHARED_LIBS:BOOL=OFF -DCMAKE_BUILD_TYPE=Release +%cmake_build + +%install +%cmake_install + +%post +%systemd_user_post %{name}.service + +%preun +%systemd_user_preun %{name}.service + +%files +%license LICENSE +%doc README.md +%{_bindir}/hyprland-share-picker +%{_datadir}/dbus-1/services/org.freedesktop.impl.portal.desktop.hyprland.service +%{_datadir}/xdg-desktop-portal/portals/hyprland.portal +%{_libexecdir}/%{name} +%{_userunitdir}/%{name}.service + +%changelog +* Mon Dec 16 2024 Hypercube - 1.3.11-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) From 2fe7d54fc48f3524f4490b1b1f59e6508269e219 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 12:20:29 -0800 Subject: [PATCH 03/24] updated versions --- packages/hyprgraphics/hyprgraphics.spec | 7 +++++-- packages/hyprlang/hyprlang.spec | 5 ++++- packages/hyprutils/hyprutils.spec | 7 +++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/hyprgraphics/hyprgraphics.spec b/packages/hyprgraphics/hyprgraphics.spec index 00f8351..569cb23 100644 --- a/packages/hyprgraphics/hyprgraphics.spec +++ b/packages/hyprgraphics/hyprgraphics.spec @@ -1,5 +1,5 @@ Name: hyprgraphics -Version: 0.2.0 +Version: 0.4.0 Release: 1%{?dist} Summary: Hyprland graphics / resource utilities @@ -51,7 +51,7 @@ Development files for %{name}. %files %license LICENSE %doc README.md -%{_libdir}/lib%{name}.so.1 +%{_libdir}/lib%{name}.so.3 %{_libdir}/lib%{name}.so.%{version} %files devel @@ -60,5 +60,8 @@ Development files for %{name}. %{_libdir}/pkgconfig/%{name}.pc %changelog +* Mon Dec 16 2024 Hypercube - 0.4.0-1 +- Update to 0.4.0 + * Mon Dec 16 2024 Hypercube - 0.2.0-1 - Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprlang/hyprlang.spec b/packages/hyprlang/hyprlang.spec index 030dcb0..7969725 100644 --- a/packages/hyprlang/hyprlang.spec +++ b/packages/hyprlang/hyprlang.spec @@ -1,5 +1,5 @@ Name: hyprlang -Version: 0.6.4 +Version: 0.6.7 Release: 1%{?dist} Summary: The official implementation library for the hypr config language @@ -49,5 +49,8 @@ sed 's/.*/%{version}/' -i VERSION %{_libdir}/pkgconfig/hyprlang.pc %changelog +* Mon Dec 16 2024 Hypercube - 0.6.7-1 +- Update to 0.6.7 + * Mon Dec 16 2024 Hypercube - 0.6.4-1 - Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprutils/hyprutils.spec b/packages/hyprutils/hyprutils.spec index 22b7813..b783a37 100644 --- a/packages/hyprutils/hyprutils.spec +++ b/packages/hyprutils/hyprutils.spec @@ -1,5 +1,5 @@ Name: hyprutils -Version: 0.10.0 +Version: 0.11.0 Release: 1%{?dist} Summary: Hyprland utilities library used across the ecosystem @@ -40,7 +40,7 @@ Development files for %{name}. %license LICENSE %doc README.md %{_libdir}/lib%{name}.so.%{version} -%{_libdir}/lib%{name}.so.9 +%{_libdir}/lib%{name}.so.10 %files devel %{_includedir}/%{name}/ @@ -48,5 +48,8 @@ Development files for %{name}. %{_libdir}/pkgconfig/%{name}.pc %changelog +* Mon Dec 16 2024 Hypercube - 0.11.0-1 +- Update to 0.11.0 (adds cli/Logger.hpp needed by aquamarine) + * Mon Dec 16 2024 Hypercube - 0.10.0-1 - Initial package for Hypercube (based on sdegler/hyprland COPR) From d6311677e899019b717cbb56f7bd7503e4ebb11b Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 12:32:45 -0800 Subject: [PATCH 04/24] Fix qt build for hyprland --- packages/hyprland-qt-support/hyprland-qt-support.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hyprland-qt-support/hyprland-qt-support.spec b/packages/hyprland-qt-support/hyprland-qt-support.spec index 67ae2e9..7111c7a 100644 --- a/packages/hyprland-qt-support/hyprland-qt-support.spec +++ b/packages/hyprland-qt-support/hyprland-qt-support.spec @@ -24,7 +24,7 @@ BuildRequires: pkgconfig(hyprlang) %autosetup -p1 %build -%cmake -DINSTALL_QMLDIR=%{_qt6_qmldir} +%cmake -DINSTALL_QMLDIR=%{_qt6_qmldir} -DCMAKE_INSTALL_LIBDIR=%{_libdir} %cmake_build %install From 0994f2edaf38c72ff0a788535591299ff0cb4106 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 12:35:52 -0800 Subject: [PATCH 05/24] Add Glaze for hyprland --- packages/glaze/glaze.spec | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 packages/glaze/glaze.spec diff --git a/packages/glaze/glaze.spec b/packages/glaze/glaze.spec new file mode 100644 index 0000000..df3a902 --- /dev/null +++ b/packages/glaze/glaze.spec @@ -0,0 +1,50 @@ +%global debug_package %{nil} + +Name: glaze +Version: 6.1.0 +Release: 1%{?dist} +Summary: Extremely fast, in memory, JSON and interface library for modern C++ + +License: MIT +URL: https://github.com/stephenberry/glaze +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ + +%description +Glaze is an extremely fast, in memory, JSON and interface library for modern C++. + +%package devel +Summary: Development files for %{name} +BuildArch: noarch +Provides: %{name}-static = %{version}-%{release} + +%description devel +Development files for %{name}. Glaze is a header-only library. + +%prep +%autosetup -p1 + +%build +%cmake \ + -Dglaze_INSTALL_CMAKEDIR=%{_datadir}/cmake/%{name} \ + -Dglaze_DISABLE_SIMD_WHEN_SUPPORTED:BOOL=ON \ + -Dglaze_DEVELOPER_MODE:BOOL=OFF \ + -Dglaze_ENABLE_FUZZING:BOOL=OFF +%cmake_build + +%install +%cmake_install + +%files devel +%license LICENSE +%doc README.md +%{_datadir}/cmake/%{name}/ +%{_includedir}/%{name}/ + +%changelog +* Mon Dec 16 2024 Hypercube - 6.1.0-1 +- Initial package for Hypercube (based on sdegler/hyprland COPR) From c23c3f9fe343ce9de5b0d613766a4a47a21c311d Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 12:49:10 -0800 Subject: [PATCH 06/24] Update starship build --- packages/starship/starship.spec | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/starship/starship.spec b/packages/starship/starship.spec index a2d4735..bd61920 100644 --- a/packages/starship/starship.spec +++ b/packages/starship/starship.spec @@ -7,12 +7,12 @@ License: ISC URL: https://github.com/starship/starship Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz -BuildRequires: cargo -BuildRequires: rust +BuildRequires: cargo >= 1.80 +BuildRequires: rust >= 1.80 BuildRequires: gcc -BuildRequires: cmake -BuildRequires: openssl-devel -BuildRequires: zlib-devel +BuildRequires: cmake3 +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(zlib) %description Starship is the minimal, blazing-fast, and infinitely customizable prompt for @@ -24,18 +24,24 @@ Ion, Elvish, Tcsh, Xonsh, Nushell, and Cmd. %autosetup -n %{name}-%{version} %build -cargo build --release --locked +# Build handled in install %install -install -Dpm 0755 target/release/%{name} %{buildroot}%{_bindir}/%{name} +export CARGO_PROFILE_RELEASE_BUILD_OVERRIDE_OPT_LEVEL=3 +export CMAKE=cmake3 +RUSTFLAGS='-C strip=symbols' cargo install --root=%{buildroot}%{_prefix} --path=. # Generate and install shell completions mkdir -p %{buildroot}%{_datadir}/bash-completion/completions mkdir -p %{buildroot}%{_datadir}/zsh/site-functions mkdir -p %{buildroot}%{_datadir}/fish/vendor_completions.d -target/release/%{name} completions bash > %{buildroot}%{_datadir}/bash-completion/completions/%{name} -target/release/%{name} completions zsh > %{buildroot}%{_datadir}/zsh/site-functions/_%{name} -target/release/%{name} completions fish > %{buildroot}%{_datadir}/fish/vendor_completions.d/%{name}.fish +%{buildroot}%{_bindir}/%{name} completions bash > %{buildroot}%{_datadir}/bash-completion/completions/%{name} +%{buildroot}%{_bindir}/%{name} completions zsh > %{buildroot}%{_datadir}/zsh/site-functions/_%{name} +%{buildroot}%{_bindir}/%{name} completions fish > %{buildroot}%{_datadir}/fish/vendor_completions.d/%{name}.fish + +# Remove .crates.toml and .crates2.json created by cargo install +rm -f %{buildroot}%{_prefix}/.crates.toml +rm -f %{buildroot}%{_prefix}/.crates2.json %files %license LICENSE From 25bfcb0a2abd59839536088df92656779c365fcc Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:01:59 -0800 Subject: [PATCH 07/24] Use official neovim --- build_files/hyprland/01-hyprland-desktop.sh | 3 +- packages/neovim/neovim.spec | 69 --------------------- 2 files changed, 2 insertions(+), 70 deletions(-) delete mode 100644 packages/neovim/neovim.spec diff --git a/build_files/hyprland/01-hyprland-desktop.sh b/build_files/hyprland/01-hyprland-desktop.sh index 99989e0..8348790 100755 --- a/build_files/hyprland/01-hyprland-desktop.sh +++ b/build_files/hyprland/01-hyprland-desktop.sh @@ -49,7 +49,8 @@ dnf5 -y install fish ### Terminal - Ghostty (from Hypercube COPR) dnf5 -y install ghostty -### Editor - Neovim (from Hypercube COPR) +### Editor - Neovim nightly (from agriffis COPR) +dnf5 -y copr enable agriffis/neovim-nightly dnf5 -y install neovim python3-neovim ### Image/Media Viewers diff --git a/packages/neovim/neovim.spec b/packages/neovim/neovim.spec deleted file mode 100644 index e73341d..0000000 --- a/packages/neovim/neovim.spec +++ /dev/null @@ -1,69 +0,0 @@ -Name: neovim -Version: 0.11.5 -Release: 1%{?dist} -Summary: Vim-fork focused on extensibility and usability - -License: Apache-2.0 AND Vim -URL: https://github.com/neovim/neovim -Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz - -BuildRequires: cmake >= 3.16 -BuildRequires: ninja-build -BuildRequires: gcc -BuildRequires: make -BuildRequires: gettext -BuildRequires: glibc-gconv-extra -BuildRequires: git -BuildRequires: unzip - -# Runtime dependencies -Requires: lua -Requires: python3-neovim - -%description -Neovim is a refactor, and sometimes redactor, in the tradition of Vim (which -itself derives from Stevie). It is not a rewrite but a continuation and -extension of Vim. Many clones and derivatives exist, some very clever - but -none are Vim. Neovim is built for users who want the good parts of Vim, and -more. - -%package -n python3-neovim -Summary: Python client for Neovim -BuildArch: noarch -Requires: python3 -Requires: python3-msgpack -Requires: python3-greenlet - -%description -n python3-neovim -Python client library for Neovim, enabling Python plugins and remote -communication with Neovim instances. - -%prep -%autosetup -n %{name}-%{version} - -%build -%cmake \ - -GNinja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=%{_prefix} - -%cmake_build - -%install -%cmake_install - -# Desktop file and icons are installed by cmake - -%files -%license LICENSE.txt -%doc README.md CONTRIBUTING.md -%{_bindir}/nvim -%{_datadir}/nvim/ -%{_datadir}/applications/nvim.desktop -%{_datadir}/icons/hicolor/*/apps/nvim.* -%{_datadir}/locale/*/LC_MESSAGES/nvim.mo -%{_mandir}/man1/nvim.1* - -%changelog -* Mon Dec 16 2024 Hypercube - 0.11.5-1 -- Initial package for Hypercube From 4cc4df26d5df9a2a31a53c85562d4fe87e57d46b Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:06:19 -0800 Subject: [PATCH 08/24] Fix eza and lazygit --- packages/eza/eza.spec | 32 ++++++++++++++++++-------------- packages/lazygit/lazygit.spec | 9 ++++++--- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/eza/eza.spec b/packages/eza/eza.spec index fd7106e..76ef7ee 100644 --- a/packages/eza/eza.spec +++ b/packages/eza/eza.spec @@ -1,3 +1,7 @@ +# NOTE: This package requires "Enable internet access during builds" in COPR settings + +%global debug_package %{nil} + Name: eza Version: 0.20.21 Release: 1%{?dist} @@ -9,9 +13,7 @@ Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: cargo BuildRequires: rust -BuildRequires: gcc BuildRequires: pandoc -BuildRequires: git %description eza is a modern replacement for the venerable file-listing command-line program @@ -22,30 +24,32 @@ and better defaults. %autosetup -n %{name}-%{version} %build +export RUSTFLAGS="%{build_rustflags}" cargo build --release --locked %install -install -Dpm 0755 target/release/%{name} %{buildroot}%{_bindir}/%{name} +install -Dpm 0755 target/release/%{name} -t %{buildroot}%{_bindir}/ # Generate and install man pages -mkdir -p %{buildroot}%{_mandir}/man1 -mkdir -p %{buildroot}%{_mandir}/man5 -pandoc --standalone -f markdown -t man man/eza.1.md -o %{buildroot}%{_mandir}/man1/eza.1 -pandoc --standalone -f markdown -t man man/eza_colors.5.md -o %{buildroot}%{_mandir}/man5/eza_colors.5 -pandoc --standalone -f markdown -t man man/eza_colors-explanation.5.md -o %{buildroot}%{_mandir}/man5/eza_colors-explanation.5 +mkdir -p target/man +for page in eza.1 eza_colors.5 eza_colors-explanation.5; do + sed "s/\$version/v%{version}/g" "man/${page}.md" | pandoc --standalone -f markdown -t man > "target/man/${page}" +done +install -Dpm 0644 target/man/eza.1 -t %{buildroot}/%{_mandir}/man1/ +install -Dpm 0644 target/man/eza_colors.5 -t %{buildroot}/%{_mandir}/man5/ +install -Dpm 0644 target/man/eza_colors-explanation.5 -t %{buildroot}/%{_mandir}/man5/ # Install shell completions -install -Dpm 0644 completions/bash/%{name} %{buildroot}%{_datadir}/bash-completion/completions/%{name} -install -Dpm 0644 completions/zsh/_%{name} %{buildroot}%{_datadir}/zsh/site-functions/_%{name} -install -Dpm 0644 completions/fish/%{name}.fish %{buildroot}%{_datadir}/fish/vendor_completions.d/%{name}.fish +install -Dpm 0644 completions/bash/%{name} -t %{buildroot}/%{_datadir}/bash-completion/completions/ +install -Dpm 0644 completions/zsh/_%{name} -t %{buildroot}/%{_datadir}/zsh/site-functions/ +install -Dpm 0644 completions/fish/%{name}.fish -t %{buildroot}/%{_datadir}/fish/vendor_completions.d/ %files -%license LICENCE +%license LICENSE.txt %doc README.md CHANGELOG.md %{_bindir}/%{name} %{_mandir}/man1/eza.1* -%{_mandir}/man5/eza_colors.5* -%{_mandir}/man5/eza_colors-explanation.5* +%{_mandir}/man5/eza_colors* %{_datadir}/bash-completion/completions/%{name} %{_datadir}/zsh/site-functions/_%{name} %{_datadir}/fish/vendor_completions.d/%{name}.fish diff --git a/packages/lazygit/lazygit.spec b/packages/lazygit/lazygit.spec index 1ba11b6..5e92145 100644 --- a/packages/lazygit/lazygit.spec +++ b/packages/lazygit/lazygit.spec @@ -1,3 +1,8 @@ +# NOTE: This package requires "Enable internet access during builds" in COPR settings +# because go needs to download dependencies + +%global debug_package %{nil} + Name: lazygit Version: 0.57.0 Release: 1%{?dist} @@ -19,9 +24,7 @@ and more. It's designed to make git less painful. %autosetup -n %{name}-%{version} %build -export GOFLAGS="-buildmode=pie -trimpath" -export LDFLAGS="-X main.version=%{version} -X main.buildSource=rpm" -go build -ldflags "${LDFLAGS}" -o %{name} +go build -ldflags "-X main.version=%{version}" -o %{name} %install install -Dpm 0755 %{name} %{buildroot}%{_bindir}/%{name} From 869daf526e8981094d3a0bcf1927819f33e86d63 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:09:18 -0800 Subject: [PATCH 09/24] Fix ghostty --- packages/ghostty/ghostty.spec | 104 ++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/packages/ghostty/ghostty.spec b/packages/ghostty/ghostty.spec index e1869be..9806783 100644 --- a/packages/ghostty/ghostty.spec +++ b/packages/ghostty/ghostty.spec @@ -1,85 +1,89 @@ +# NOTE: This package requires "Enable internet access during builds" in COPR settings + Name: ghostty Version: 1.2.3 Release: 1%{?dist} -Summary: Fast, feature-rich, cross-platform terminal emulator +Summary: Fast, feature-rich, and cross-platform terminal emulator License: MIT URL: https://github.com/ghostty-org/ghostty Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz -# Ghostty requires Zig 0.15.2 which is not in Fedora repos -# We download the official binary -%global zig_version 0.15.0 -%global zig_arch x86_64 +ExclusiveArch: x86_64 aarch64 -BuildRequires: gcc -BuildRequires: git -BuildRequires: pkg-config +BuildRequires: blueprint-compiler BuildRequires: fontconfig-devel BuildRequires: freetype-devel +BuildRequires: glib2-devel BuildRequires: gtk4-devel +BuildRequires: gtk4-layer-shell-devel +BuildRequires: harfbuzz-devel BuildRequires: libadwaita-devel -BuildRequires: libX11-devel -BuildRequires: libXcursor-devel -BuildRequires: libXrandr-devel -BuildRequires: pandoc -BuildRequires: bzip2-devel -BuildRequires: oniguruma-devel -BuildRequires: lz4-devel -BuildRequires: zstd-devel BuildRequires: libpng-devel +BuildRequires: oniguruma-devel +BuildRequires: pandoc-cli +BuildRequires: pixman-devel +BuildRequires: pkg-config +BuildRequires: wayland-protocols-devel +BuildRequires: zig +BuildRequires: zlib-ng-devel Requires: fontconfig Requires: freetype +Requires: glib2 Requires: gtk4 +Requires: harfbuzz Requires: libadwaita +Requires: libpng +Requires: oniguruma +Requires: pixman +Requires: zlib-ng %description Ghostty is a terminal emulator that differentiates itself by being both -incredibly fast and feature-rich. It's built with GPU acceleration, -native platform feel, and a focus on performance. +fast and feature-rich. It uses platform-native UI and GPU acceleration. %prep -%autosetup -n %{name}-%{version} - -# Download Zig -curl -L -o zig.tar.xz https://ziglang.org/download/%{zig_version}/zig-linux-%{zig_arch}-%{zig_version}.tar.xz -tar xf zig.tar.xz -export PATH="$PWD/zig-linux-%{zig_arch}-%{zig_version}:$PATH" - -# Fetch dependencies for offline build -./nix/build-support/fetch-zig-cache.sh +%setup -q -n %{name}-%{version} %build -export PATH="$PWD/zig-linux-%{zig_arch}-%{zig_version}:$PATH" -zig build \ - --prefix %{_prefix} \ - --system \ +DESTDIR=%{buildroot} zig build \ + --summary all \ + --prefix "%{_prefix}" \ + -Dversion-string=%{version}-%{release} \ -Doptimize=ReleaseFast \ -Dcpu=baseline \ - -Dpie=true + -Dpie=true \ + -Demit-docs -%install -export PATH="$PWD/zig-linux-%{zig_arch}-%{zig_version}:$PATH" -DESTDIR=%{buildroot} zig build install \ - --prefix %{_prefix} \ - --system \ - -Doptimize=ReleaseFast \ - -Dcpu=baseline \ - -Dpie=true +# Remove terminfo that conflicts with ncurses +rm -f "%{buildroot}%{_datadir}/terminfo/g/ghostty" %files %license LICENSE -%doc README.md -%{_bindir}/%{name} -%{_datadir}/applications/%{name}.desktop -%{_datadir}/icons/hicolor/*/apps/%{name}.* -%{_datadir}/%{name}/ -%{_datadir}/bash-completion/completions/%{name} -%{_datadir}/zsh/site-functions/_%{name} -%{_datadir}/fish/vendor_completions.d/%{name}.fish -%{_mandir}/man1/%{name}.1* -%{_mandir}/man5/%{name}.5* +%{_bindir}/ghostty +%{_datadir}/applications/com.mitchellh.ghostty.desktop +%{_datadir}/bash-completion/completions/ghostty.bash +%{_datadir}/bat/syntaxes/ghostty.sublime-syntax +%{_datadir}/fish/vendor_completions.d/ghostty.fish +%{_datadir}/ghostty/ +%{_datadir}/icons/hicolor/*/apps/com.mitchellh.ghostty.png +%{_datadir}/kio/servicemenus/com.mitchellh.ghostty.desktop +%{_datadir}/man/man1/ghostty.1* +%{_datadir}/man/man5/ghostty.5* +%{_datadir}/nautilus-python/extensions/ghostty.py +%{_datadir}/nvim/site/compiler/ghostty.vim +%{_datadir}/nvim/site/ftdetect/ghostty.vim +%{_datadir}/nvim/site/ftplugin/ghostty.vim +%{_datadir}/nvim/site/syntax/ghostty.vim +%{_datadir}/vim/vimfiles/compiler/ghostty.vim +%{_datadir}/vim/vimfiles/ftdetect/ghostty.vim +%{_datadir}/vim/vimfiles/ftplugin/ghostty.vim +%{_datadir}/vim/vimfiles/syntax/ghostty.vim +%{_datadir}/zsh/site-functions/_ghostty +%{_datadir}/dbus-1/services/com.mitchellh.ghostty.service +%{_datadir}/locale/*/LC_MESSAGES/com.mitchellh.ghostty.mo +%{_datadir}/metainfo/com.mitchellh.ghostty.metainfo.xml %changelog * Mon Dec 16 2024 Hypercube - 1.2.3-1 From 8f10c69e3267980a74ac33ae68e06675c8673127 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:13:38 -0800 Subject: [PATCH 10/24] Fix quickshell --- packages/quickshell/quickshell.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/quickshell/quickshell.spec b/packages/quickshell/quickshell.spec index c6b7f30..790fc00 100644 --- a/packages/quickshell/quickshell.spec +++ b/packages/quickshell/quickshell.spec @@ -70,9 +70,11 @@ managers. It supports Hyprland, Sway, and other Wayland compositors. %cmake_install %files -%license LICENSE LICENSE.GPL +%license LICENSE LICENSE-GPL %doc README.md %{_bindir}/%{name} +%{_datadir}/applications/org.quickshell.desktop +%{_datadir}/icons/hicolor/scalable/apps/org.quickshell.svg %changelog * Mon Dec 16 2024 Hypercube - 0.2.1-1 From 9c595633dec9b2e466faadccf16c80ba24c54c8a Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:15:59 -0800 Subject: [PATCH 11/24] Fix starship --- packages/starship/starship.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/starship/starship.spec b/packages/starship/starship.spec index bd61920..f2669e4 100644 --- a/packages/starship/starship.spec +++ b/packages/starship/starship.spec @@ -1,3 +1,5 @@ +%global debug_package %{nil} + Name: starship Version: 1.24.1 Release: 1%{?dist} From bb00e8920fdf8cd7865e215b9a79b5e28f6612fa Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:20:55 -0800 Subject: [PATCH 12/24] Build ghostty from git --- packages/ghostty/ghostty.spec | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/ghostty/ghostty.spec b/packages/ghostty/ghostty.spec index 9806783..984d74e 100644 --- a/packages/ghostty/ghostty.spec +++ b/packages/ghostty/ghostty.spec @@ -1,13 +1,18 @@ # NOTE: This package requires "Enable internet access during builds" in COPR settings +# Building from main branch commit that supports zig 0.15.2 (Fedora 43) + +%global commit ab3a3805aa2db46eafc8c7a497df24665fa5e21b +%global shortcommit %(c=%{commit}; echo ${c:0:7}) +%global commitdate 20251216 Name: ghostty -Version: 1.2.3 +Version: 1.2.3^%{commitdate}git%{shortcommit} Release: 1%{?dist} Summary: Fast, feature-rich, and cross-platform terminal emulator License: MIT URL: https://github.com/ghostty-org/ghostty -Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Source0: %{url}/archive/%{commit}/%{name}-%{shortcommit}.tar.gz ExclusiveArch: x86_64 aarch64 @@ -44,10 +49,10 @@ Ghostty is a terminal emulator that differentiates itself by being both fast and feature-rich. It uses platform-native UI and GPU acceleration. %prep -%setup -q -n %{name}-%{version} +%setup -q -n %{name}-%{commit} %build -DESTDIR=%{buildroot} zig build \ +zig build \ --summary all \ --prefix "%{_prefix}" \ -Dversion-string=%{version}-%{release} \ @@ -56,6 +61,15 @@ DESTDIR=%{buildroot} zig build \ -Dpie=true \ -Demit-docs +%install +DESTDIR=%{buildroot} zig build install \ + --prefix "%{_prefix}" \ + -Dversion-string=%{version}-%{release} \ + -Doptimize=ReleaseFast \ + -Dcpu=baseline \ + -Dpie=true \ + -Demit-docs + # Remove terminfo that conflicts with ncurses rm -f "%{buildroot}%{_datadir}/terminfo/g/ghostty" From 3f894c5c1772e4602e3fd17338f61da7a50417e6 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:24:40 -0800 Subject: [PATCH 13/24] Remove lazy lock from source control --- .gitignore | 1 + dot_files/nvim/lazy-lock.json | 50 ----------------------------------- 2 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 dot_files/nvim/lazy-lock.json diff --git a/.gitignore b/.gitignore index ab799f8..6d1319f 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ _vm_build/ # ISO files *.iso result-iso/ +dot_files/nvim/lazy-lock.json diff --git a/dot_files/nvim/lazy-lock.json b/dot_files/nvim/lazy-lock.json deleted file mode 100644 index 26890c0..0000000 --- a/dot_files/nvim/lazy-lock.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "LazyVim": { "branch": "main", "commit": "28db03f958d58dfff3c647ce28fdc1cb88ac158d" }, - "SchemaStore.nvim": { "branch": "main", "commit": "e9c00ea7813006dfa29f35c174f83f0184d45a93" }, - "augment.vim": { "branch": "main", "commit": "97418c9dfc1918fa9bdd23863ea3d2e49130727f" }, - "blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" }, - "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, - "catppuccin": { "branch": "main", "commit": "ce4a8e0d5267e67056f9f4dcf6cb1d0933c8ca00" }, - "claudecode.nvim": { "branch": "main", "commit": "1552086ebcce9f4a2ea3b9793018a884d6b60169" }, - "conform.nvim": { "branch": "master", "commit": "4993e07fac6679d0a5005aa7499e0bad2bd39f19" }, - "crates.nvim": { "branch": "main", "commit": "ac9fa498a9edb96dc3056724ff69d5f40b898453" }, - "dial.nvim": { "branch": "master", "commit": "f97c0c7fa7d5111bc04a91d0f693900fb2d95861" }, - "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, - "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, - "gitsigns.nvim": { "branch": "main", "commit": "5813e4878748805f1518cee7abb50fd7205a3a48" }, - "grug-far.nvim": { "branch": "main", "commit": "b58b2d65863f4ebad88b10a1ddd519e5380466e0" }, - "helm-ls.nvim": { "branch": "main", "commit": "d6f3a8d4ad59b4f54cd734267dfb5411679ea608" }, - "inc-rename.nvim": { "branch": "main", "commit": "2597bccb57d1b570fbdbd4adf88b955f7ade715b" }, - "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, - "lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" }, - "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, - "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "0b9bb925c000ae649ff7e7149c8cd00031f4b539" }, - "mason.nvim": { "branch": "main", "commit": "57e5a8addb8c71fb063ee4acda466c7cf6ad2800" }, - "mini.ai": { "branch": "main", "commit": "bfb26d9072670c3aaefab0f53024b2f3729c8083" }, - "mini.hipatterns": { "branch": "main", "commit": "add8d8abad602787377ec5d81f6b248605828e0f" }, - "mini.icons": { "branch": "main", "commit": "ff2e4f1d29f659cc2bad0f9256f2f6195c6b2428" }, - "mini.pairs": { "branch": "main", "commit": "472ec50092a3314ec285d2db2baa48602d71fe93" }, - "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, - "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, - "nvim-lint": { "branch": "master", "commit": "d1118791070d090777398792a73032a0ca5c79ff" }, - "nvim-lspconfig": { "branch": "master", "commit": "effe4bf2e1afb881ea67291c648b68dd3dfc927a" }, - "nvim-treesitter": { "branch": "main", "commit": "e527584cf8508b2f99f127c2a20f93237e8fcf83" }, - "nvim-treesitter-textobjects": { "branch": "main", "commit": "dfbf9596f8aa8b4bed5301647485594ff7252955" }, - "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, - "persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" }, - "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, - "render-markdown.nvim": { "branch": "main", "commit": "6e0e8902dac70fecbdd8ce557d142062a621ec38" }, - "rustaceanvim": { "branch": "master", "commit": "6c3785d6a230bec63f70c98bf8e2842bed924245" }, - "smear-cursor.nvim": { "branch": "main", "commit": "c85bdbb25db096fbcf616bc4e1357bd61fe2c199" }, - "snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" }, - "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, - "tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" }, - "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, - "ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" }, - "vim-dadbod": { "branch": "master", "commit": "e95afed23712f969f83b4857a24cf9d59114c2e6" }, - "vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" }, - "vim-dadbod-ui": { "branch": "master", "commit": "48c4f271da13d380592f4907e2d1d5558044e4e5" }, - "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }, - "yanky.nvim": { "branch": "main", "commit": "04fc42b94305d94948c9c197f679336668af3292" } -} From 06a42aba17a38b15ccb95d3329df796e68fddbae Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:30:40 -0800 Subject: [PATCH 14/24] Remove wezterm --- CONTRIBUTING.md | 3 +- README.md | 6 +- build_files/hypercube/03-hypercube-configs.sh | 16 - build_files/hypercube/99-tests.sh | 1 - dot_files/fish/config.fish | 2 - dot_files/ghostty/config | 8 +- dot_files/nvim/README.md | 2 +- dot_files/wezterm/wezterm.lua | 241 ------------- .../calamares/branding/hypercube/show.qml | 2 +- packages/README.md | 331 ++++++++++++++++++ .../usr/share/ublue-os/just/60-custom.just | 18 - 11 files changed, 340 insertions(+), 290 deletions(-) delete mode 100644 dot_files/wezterm/wezterm.lua create mode 100644 packages/README.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 49eb64b..ed4279d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,8 +37,7 @@ hypercube/ │ ├── nvim/ # Neovim/LazyVim setup │ ├── qt6ct/ # Qt6 theming │ ├── quickshell/ # App launcher -│ ├── starship/ # Shell prompt -│ └── wezterm/ # WezTerm terminal +│ └── starship/ # Shell prompt │ ├── system_files/ # System-level files │ └── shared/ diff --git a/README.md b/README.md index 5dabc9b..f3b1514 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Pre-configured and ready to use: - **Neovim** (nightly) with LazyVim, LSP, and language support - **Lazygit** for interactive Git operations - **Fish** shell with Starship prompt -- **Ghostty** & **WezTerm** GPU-accelerated terminals +- **Ghostty** GPU-accelerated terminal - **Quickshell** application launcher and system controls ### Consistent Theming @@ -99,7 +99,7 @@ On top of Bluefin-DX, Hypercube adds: | Category | Packages | |----------|----------| | Compositor | Hyprland, Hyprlock, Hypridle, Hyprpaper, Hyprshot | -| Terminals | Ghostty, WezTerm | +| Terminals | Ghostty | | Editor | Neovim (nightly) | | Git Tools | Lazygit | | Launcher | Quickshell | @@ -112,7 +112,7 @@ All configurations live in `/usr/share/hypercube/config/` and can be overridden - Fish shell with vim mode and Starship prompt - Hyprland with vim-style navigation - Neovim with LazyVim distribution -- Ghostty and WezTerm with Tokyo Night colors +- Ghostty with Tokyo Night colors - GTK/Qt theming with dark mode ## Documentation diff --git a/build_files/hypercube/03-hypercube-configs.sh b/build_files/hypercube/03-hypercube-configs.sh index 28e810a..5e7cdaf 100755 --- a/build_files/hypercube/03-hypercube-configs.sh +++ b/build_files/hypercube/03-hypercube-configs.sh @@ -42,22 +42,6 @@ config-file = /usr/share/hypercube/config/ghostty/config # Your customizations below: EOF -### Wezterm terminal - stub that sources system config -# Users can customize by modifying the config table after dofile() -mkdir -p /etc/skel/.config/wezterm -cat > /etc/skel/.config/wezterm/wezterm.lua << 'EOF' --- Hypercube Wezterm Configuration --- System defaults are loaded below. Add your customizations after this line. --- To replace defaults entirely, remove the dofile line and start fresh. - -local config = dofile("/usr/share/hypercube/config/wezterm/wezterm.lua") - --- Your customizations below: --- Example: config.font_size = 14 - -return config -EOF - ### GTK theme settings - install to /etc/xdg/ for system-wide defaults # Users can override by creating ~/.config/gtk-3.0/settings.ini install -Dm644 "${CONFIG_DIR}/gtk-3.0/settings.ini" /etc/xdg/gtk-3.0/settings.ini diff --git a/build_files/hypercube/99-tests.sh b/build_files/hypercube/99-tests.sh index 47349d5..ab09139 100755 --- a/build_files/hypercube/99-tests.sh +++ b/build_files/hypercube/99-tests.sh @@ -17,7 +17,6 @@ REQUIRED_PACKAGES=( "hypridle" "quickshell" # Terminals - "wezterm" "ghostty" # Dev tools "neovim" diff --git a/dot_files/fish/config.fish b/dot_files/fish/config.fish index f68dab3..e0f9bb1 100644 --- a/dot_files/fish/config.fish +++ b/dot_files/fish/config.fish @@ -21,8 +21,6 @@ if status is-interactive fish_add_path $HOME/Code/flutter/bin fish_add_path $HOME/go/bin - # Alias - alias wezterm 'flatpak run org.wezfurlong.wezterm' end ### bling.fish source start diff --git a/dot_files/ghostty/config b/dot_files/ghostty/config index f420681..317b638 100644 --- a/dot_files/ghostty/config +++ b/dot_files/ghostty/config @@ -1,4 +1,4 @@ -# Ghostty keybindings matching WezTerm config +# Ghostty keybindings with tmux-style leader key # Leader key is CTRL+a (simulated via prefix since Linux doesn't support global leader) # ---------------------------------------------------------------- @@ -96,8 +96,7 @@ keybind = ctrl+a>w=toggle_tab_overview # Create a new tab keybind = ctrl+a>c=new_tab -# Rename current tab (Ghostty doesn't support this natively, but we can use new_tab as closest) -# Note: ctrl+a>, is for rename in WezTerm but Ghostty doesn't have direct rename support +# Rename current tab # Move to next/previous tab keybind = ctrl+a>n=next_tab @@ -142,8 +141,7 @@ keybind = ctrl+a>l=goto_split:right keybind = ctrl+a>k=goto_split:top keybind = ctrl+a>j=goto_split:bottom -# Pane resizing (ctrl+a>r enters resize mode, then h/j/k/l to resize) -# Note: Ghostty doesn't have key tables/modes like WezTerm, so we use direct bindings +# Pane resizing (ctrl+a>r then h/j/k/l to resize) keybind = ctrl+a>r>h=resize_split:left,10 keybind = ctrl+a>r>l=resize_split:right,10 keybind = ctrl+a>r>k=resize_split:up,10 diff --git a/dot_files/nvim/README.md b/dot_files/nvim/README.md index f3e528c..625556b 100644 --- a/dot_files/nvim/README.md +++ b/dot_files/nvim/README.md @@ -84,7 +84,7 @@ The container mounts your local directories: ### Clipboard Support -The container uses OSC 52 for clipboard integration, which works with modern terminals like Ghostty, Kitty, WezTerm, and others that support OSC 52 escape sequences. +The container uses OSC 52 for clipboard integration, which works with modern terminals like Ghostty, Kitty, and others that support OSC 52 escape sequences. ## Plugins diff --git a/dot_files/wezterm/wezterm.lua b/dot_files/wezterm/wezterm.lua deleted file mode 100644 index 629a5ea..0000000 --- a/dot_files/wezterm/wezterm.lua +++ /dev/null @@ -1,241 +0,0 @@ -local wezterm = require("wezterm") -local config = wezterm.config_builder() -local act = wezterm.action - -config.color_scheme = "Tokyo Night" -config.font = wezterm.font("JetBrains Mono") -config.window_decorations = "NONE" -config.font_size = 13.0 -config.pane_focus_follows_mouse = false -config.tab_bar_at_bottom = true -config.automatically_reload_config = true -config.show_tab_index_in_tab_bar = false -config.tab_max_width = 32 - -config.use_fancy_tab_bar = false -config.show_new_tab_button_in_tab_bar = false -config.show_tab_index_in_tab_bar = false -config.hide_tab_bar_if_only_one_tab = true -config.max_fps = 120 - --- Pane border colors matching Tokyo Night theme -config.inactive_pane_hsb = { - saturation = 0.9, - brightness = 0.6, -} - --- The filled in variant of the < symbol -local SOLID_LEFT_ARROW = wezterm.nerdfonts.ple_ice_waveform_mirrored - --- The filled in variant of the > symbol -local SOLID_RIGHT_ARROW = wezterm.nerdfonts.ple_ice_waveform - --- This function returns the suggested title for a tab. --- It prefers the title that was set via `tab:set_title()` --- or `wezterm cli set-tab-title`, but falls back to the --- title of the active pane in that tab. -function tab_title(tab_info) - local title = tab_info.tab_title - -- if the tab title is explicitly set, take that - if title and #title > 0 then - return title - end - -- Otherwise, use the title from the active pane - -- in that tab - return tab_info.active_pane.title -end - -wezterm.on("format-tab-title", function(tab, tabs, panes, config, hover, max_width) - local edge_background = "#1a1b26" - local background = "#1a1b26" - local foreground = "#565f89" - - if tab.is_active then - background = "#24283b" - foreground = "#bb9af7" - elseif hover then - background = "#24283b" - end - - local edge_foreground = background - - local title = tab_title(tab) - - -- ensure that the titles fit in the available space, - -- and that we have room for the edges. - title = wezterm.truncate_right(title, max_width - 4) - - return { - { Background = { Color = edge_background } }, - { Foreground = { Color = edge_foreground } }, - { Text = SOLID_LEFT_ARROW }, - { Background = { Color = background } }, - { Foreground = { Color = foreground } }, - { Text = " " .. title .. " " }, - { Background = { Color = edge_background } }, - { Foreground = { Color = edge_foreground } }, - { Text = SOLID_RIGHT_ARROW }, - } -end) - -config.leader = { - key = "a", - mods = "CTRL", - timeout_milliseconds = 2000, -} - --- Custom key bindings -config.keys = { - { - key = "Enter", - mods = "ALT", - action = act.DisableDefaultAssignment, - }, - - -- Copy mode - { - key = "[", - mods = "LEADER", - action = act.ActivateCopyMode, - }, - - -- ---------------------------------------------------------------- - -- TABS - -- - -- Where possible, I'm using the same combinations as I would in tmux - -- ---------------------------------------------------------------- - - -- Show tab navigator; similar to listing panes in tmux - { - key = "w", - mods = "LEADER", - action = act.ShowTabNavigator, - }, - -- Create a tab (alternative to Ctrl-Shift-Tab) - { - key = "c", - mods = "LEADER", - action = act.SpawnTab("CurrentPaneDomain"), - }, - -- Rename current tab; analagous to command in tmux - { - key = ",", - mods = "LEADER", - action = act.PromptInputLine({ - description = "Enter new name for tab", - action = wezterm.action_callback(function(window, pane, line) - if line then - window:active_tab():set_title(line) - end - end), - }), - }, - -- Move to next/previous TAB - { - key = "n", - mods = "LEADER", - action = act.ActivateTabRelative(1), - }, - { - key = "p", - mods = "LEADER", - action = act.ActivateTabRelative(-1), - }, - -- Close tab - { - key = "&", - mods = "LEADER|SHIFT", - action = act.CloseCurrentTab({ confirm = true }), - }, - - -- ---------------------------------------------------------------- - -- PANES - -- - -- These are great and get me most of the way to replacing tmux - -- entirely, particularly as you can use "wezterm ssh" to ssh to another - -- server, and still retain Wezterm as your terminal there. - -- ---------------------------------------------------------------- - - -- -- Vertical split - { - -- | - key = "|", - mods = "LEADER|SHIFT", - action = act.SplitPane({ - direction = "Right", - size = { Percent = 50 }, - }), - }, - -- Horizontal split - { - -- - - key = "-", - mods = "LEADER", - action = act.SplitPane({ - direction = "Down", - size = { Percent = 50 }, - }), - }, - - -- Close/kill active pane - { - key = "x", - mods = "LEADER", - action = act.CloseCurrentPane({ confirm = true }), - }, - -- Swap active pane with another one - - { - key = "{", - mods = "LEADER|SHIFT", - action = act.PaneSelect({ mode = "SwapWithActiveKeepFocus" }), - }, - -- Zoom current pane (toggle) - { - key = "z", - mods = "LEADER", - action = act.TogglePaneZoomState, - }, - { - key = "f", - mods = "ALT", - action = act.TogglePaneZoomState, - }, - -- Move to next/previous pane - { - key = ";", - mods = "LEADER", - action = act.ActivatePaneDirection("Prev"), - }, - { - key = "o", - mods = "LEADER", - action = act.ActivatePaneDirection("Next"), - }, - - { key = "h", mods = "LEADER", action = act.ActivatePaneDirection("Left") }, - { key = "l", mods = "LEADER", action = act.ActivatePaneDirection("Right") }, - { key = "k", mods = "LEADER", action = act.ActivatePaneDirection("Up") }, - { key = "j", mods = "LEADER", action = act.ActivatePaneDirection("Down") }, - - { - key = "r", - mods = "LEADER", - action = act.ActivateKeyTable({ - name = "resize_pane", - one_shot = false, - }), - }, -} - -config.key_tables = { - resize_pane = { - { key = "h", action = act.AdjustPaneSize({ "Left", 1 }) }, - { key = "l", action = act.AdjustPaneSize({ "Right", 1 }) }, - { key = "k", action = act.AdjustPaneSize({ "Up", 1 }) }, - { key = "j", action = act.AdjustPaneSize({ "Down", 1 }) }, - { key = "Escape", action = "PopKeyTable" }, - }, -} - -return config diff --git a/iso_files/calamares/branding/hypercube/show.qml b/iso_files/calamares/branding/hypercube/show.qml index 2c5a72d..5a013ba 100644 --- a/iso_files/calamares/branding/hypercube/show.qml +++ b/iso_files/calamares/branding/hypercube/show.qml @@ -135,7 +135,7 @@ Presentation { anchors.horizontalCenter: parent.horizontalCenter spacing: 8 - Text { text: "• Ghostty & WezTerm terminals"; color: "#c0caf5"; font.pixelSize: 14 } + Text { text: "• Ghostty terminal"; color: "#c0caf5"; font.pixelSize: 14 } Text { text: "• Neovim with nightly builds"; color: "#c0caf5"; font.pixelSize: 14 } Text { text: "• Fish shell with Starship prompt"; color: "#c0caf5"; font.pixelSize: 14 } Text { text: "• Lazygit for git workflows"; color: "#c0caf5"; font.pixelSize: 14 } diff --git a/packages/README.md b/packages/README.md new file mode 100644 index 0000000..8461b25 --- /dev/null +++ b/packages/README.md @@ -0,0 +1,331 @@ +# Hypercube COPR Package Setup Guide + +This document lists all packages to configure in the `binarypie/hypercube` COPR repository. + +## COPR Repository Settings + +- **Project Name**: `hypercube` +- **Chroot Targets**: `fedora-43-x86_64` +- **Build Method**: SCM (Source Control Management) + +--- + +## Package Definitions + +For each package, use these settings in COPR: + +- **Type**: SCM +- **Clone URL**: `https://github.com/binarypie-dev/hypercube.git` +- **Committish**: `main` +- **Subdir**: (as listed below) +- **Spec File**: (as listed below) +- **SCM Type**: git + +--- + +## Priority 1: Hyprland Core Libraries + +These must be built first as other packages depend on them. + +### 1. hyprutils + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprutils` | +| Spec File | `hyprutils.spec` | +| Version | 0.11.0 | +| Dependencies | None (base library) | + +--- + +### 2. hyprlang + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprlang` | +| Spec File | `hyprlang.spec` | +| Version | 0.6.7 | +| Dependencies | hyprutils | + +--- + +### 3. hyprwayland-scanner + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprwayland-scanner` | +| Spec File | `hyprwayland-scanner.spec` | +| Version | 0.4.5 | +| Dependencies | None | + +--- + +### 4. hyprgraphics + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprgraphics` | +| Spec File | `hyprgraphics.spec` | +| Version | 0.4.0 | +| Dependencies | hyprutils | + +--- + +### 5. hyprcursor + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprcursor` | +| Spec File | `hyprcursor.spec` | +| Version | 0.1.13 | +| Dependencies | hyprlang | + +--- + +### 6. hyprland-protocols + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprland-protocols` | +| Spec File | `hyprland-protocols.spec` | +| Version | 0.7.0 | +| Dependencies | None | + +--- + +### 7. aquamarine + +| Setting | Value | +|---------|-------| +| Subdir | `packages/aquamarine` | +| Spec File | `aquamarine.spec` | +| Version | 0.10.0 | +| Dependencies | hyprutils, hyprwayland-scanner | + +--- + +### 8. hyprland-qt-support + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprland-qt-support` | +| Spec File | `hyprland-qt-support.spec` | +| Version | 0.1.0 | +| Dependencies | hyprlang | + +--- + +### 9. glaze + +| Setting | Value | +|---------|-------| +| Subdir | `packages/glaze` | +| Spec File | `glaze.spec` | +| Version | 6.1.0 | +| Dependencies | None (header-only library) | +| Notes | Provides glaze-static for hyprland | + +--- + +## Priority 2: Hyprland Compositor & Tools + +Build after core libraries are available. + +### 10. hyprland + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprland` | +| Spec File | `hyprland.spec` | +| Version | 0.52.2 | +| Dependencies | aquamarine, hyprcursor, hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 11. hyprlock + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprlock` | +| Spec File | `hyprlock.spec` | +| Version | 0.9.2 | +| Dependencies | hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 12. hypridle + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hypridle` | +| Spec File | `hypridle.spec` | +| Version | 0.1.7 | +| Dependencies | hyprland-protocols, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 13. hyprpaper + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprpaper` | +| Spec File | `hyprpaper.spec` | +| Version | 0.7.6 | +| Dependencies | hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 14. xdg-desktop-portal-hyprland + +| Setting | Value | +|---------|-------| +| Subdir | `packages/xdg-desktop-portal-hyprland` | +| Spec File | `xdg-desktop-portal-hyprland.spec` | +| Version | 1.3.11 | +| Dependencies | hyprland-protocols, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 15. hyprpolkitagent + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprpolkitagent` | +| Spec File | `hyprpolkitagent.spec` | +| Version | 0.1.3 | +| Dependencies | hyprutils, hyprland-qt-support | + +--- + +## Priority 3: CLI Tools + +These have no hyprland dependencies and can be built in parallel. + +### 16. eza + +| Setting | Value | +|---------|-------| +| Subdir | `packages/eza` | +| Spec File | `eza.spec` | +| Version | 0.20.21 | +| Dependencies | None | + +--- + +### 17. starship + +| Setting | Value | +|---------|-------| +| Subdir | `packages/starship` | +| Spec File | `starship.spec` | +| Version | 1.24.1 | +| Dependencies | None | + +--- + +### 18. lazygit + +| Setting | Value | +|---------|-------| +| Subdir | `packages/lazygit` | +| Spec File | `lazygit.spec` | +| Version | 0.57.0 | +| Dependencies | None | + +--- + +### 19. ghostty + +| Setting | Value | +|---------|-------| +| Subdir | `packages/ghostty` | +| Spec File | `ghostty.spec` | +| Version | 1.2.3^git (main branch) | +| Dependencies | None | +| Notes | Building from main branch for zig 0.15.2 compatibility | + +--- + +### 20. quickshell + +| Setting | Value | +|---------|-------| +| Subdir | `packages/quickshell` | +| Spec File | `quickshell.spec` | +| Version | 0.2.1 | +| Dependencies | None | + +--- + +### 21. livesys-scripts + +| Setting | Value | +|---------|-------| +| Subdir | `packages/livesys-scripts` | +| Spec File | `livesys-scripts.spec` | +| Version | 0.9.1 | +| Dependencies | None | +| Notes | Source is from Pagure fork, not GitHub | + +--- + +## Build Order Summary + +To ensure dependencies are satisfied, build in this order: + +**Batch 1** (no dependencies): +1. hyprutils +2. hyprwayland-scanner +3. hyprland-protocols +4. glaze +5. eza +6. starship +7. lazygit +8. ghostty +9. quickshell +10. livesys-scripts + +**Batch 2** (depends on Batch 1): +1. hyprlang (needs hyprutils) +2. hyprgraphics (needs hyprutils) +3. aquamarine (needs hyprutils, hyprwayland-scanner) + +**Batch 3** (depends on Batch 2): +1. hyprcursor (needs hyprlang) +2. hyprland-qt-support (needs hyprlang) + +**Batch 4** (depends on Batch 3): +1. hyprland (needs aquamarine, hyprcursor, hyprgraphics, hyprlang, hyprutils, glaze) +2. hyprlock (needs hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner) +3. hypridle (needs hyprland-protocols, hyprlang, hyprutils, hyprwayland-scanner) +4. hyprpaper (needs hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner) +5. xdg-desktop-portal-hyprland (needs hyprland-protocols, hyprlang, hyprutils, hyprwayland-scanner) +6. hyprpolkitagent (needs hyprutils, hyprland-qt-support) + +--- + +## Quick Reference Table + +| # | Package | Subdir | Spec File | Version | +|---|---------|--------|-----------|---------| +| 1 | hyprutils | `packages/hyprutils` | `hyprutils.spec` | 0.11.0 | +| 2 | hyprlang | `packages/hyprlang` | `hyprlang.spec` | 0.6.7 | +| 3 | hyprwayland-scanner | `packages/hyprwayland-scanner` | `hyprwayland-scanner.spec` | 0.4.5 | +| 4 | hyprgraphics | `packages/hyprgraphics` | `hyprgraphics.spec` | 0.4.0 | +| 5 | hyprcursor | `packages/hyprcursor` | `hyprcursor.spec` | 0.1.13 | +| 6 | hyprland-protocols | `packages/hyprland-protocols` | `hyprland-protocols.spec` | 0.7.0 | +| 7 | aquamarine | `packages/aquamarine` | `aquamarine.spec` | 0.10.0 | +| 8 | hyprland-qt-support | `packages/hyprland-qt-support` | `hyprland-qt-support.spec` | 0.1.0 | +| 9 | glaze | `packages/glaze` | `glaze.spec` | 6.1.0 | +| 10 | hyprland | `packages/hyprland` | `hyprland.spec` | 0.52.2 | +| 11 | hyprlock | `packages/hyprlock` | `hyprlock.spec` | 0.9.2 | +| 12 | hypridle | `packages/hypridle` | `hypridle.spec` | 0.1.7 | +| 13 | hyprpaper | `packages/hyprpaper` | `hyprpaper.spec` | 0.7.6 | +| 14 | xdg-desktop-portal-hyprland | `packages/xdg-desktop-portal-hyprland` | `xdg-desktop-portal-hyprland.spec` | 1.3.11 | +| 15 | hyprpolkitagent | `packages/hyprpolkitagent` | `hyprpolkitagent.spec` | 0.1.3 | +| 16 | eza | `packages/eza` | `eza.spec` | 0.20.21 | +| 17 | starship | `packages/starship` | `starship.spec` | 1.24.1 | +| 18 | lazygit | `packages/lazygit` | `lazygit.spec` | 0.57.0 | +| 19 | ghostty | `packages/ghostty` | `ghostty.spec` | 1.2.3^git | +| 20 | quickshell | `packages/quickshell` | `quickshell.spec` | 0.2.1 | +| 21 | livesys-scripts | `packages/livesys-scripts` | `livesys-scripts.spec` | 0.9.1 | diff --git a/system_files/shared/usr/share/ublue-os/just/60-custom.just b/system_files/shared/usr/share/ublue-os/just/60-custom.just index 3d6aed2..98b6691 100644 --- a/system_files/shared/usr/share/ublue-os/just/60-custom.just +++ b/system_files/shared/usr/share/ublue-os/just/60-custom.just @@ -14,7 +14,6 @@ hypercube-config-reset: echo "" echo "Configs that will be reset:" echo " - Ghostty (~/.config/ghostty/)" - echo " - Wezterm (~/.config/wezterm/)" echo "" echo "You can restore your old configs from the backup directory at any time." echo "" @@ -49,7 +48,6 @@ hypercube-config-reset: # Backup existing configs backup_and_reset "ghostty" "Ghostty" - backup_and_reset "wezterm" "Wezterm" echo "" echo "Creating Hypercube config stubs..." @@ -67,22 +65,6 @@ config-file = /usr/share/hypercube/config/ghostty/config EOF echo " Created Ghostty config stub" - # Create Wezterm stub - mkdir -p "$HOME/.config/wezterm" - cat > "$HOME/.config/wezterm/wezterm.lua" << 'EOF' --- Hypercube Wezterm Configuration --- System defaults are loaded below. Add your customizations after this line. --- To replace defaults entirely, remove the dofile line and start fresh. - -local config = dofile("/usr/share/hypercube/config/wezterm/wezterm.lua") - --- Your customizations below: --- Example: config.font_size = 14 - -return config -EOF - echo " Created Wezterm config stub" - echo "" echo "Done! Your old configs have been backed up to:" echo " $BACKUP_DIR" From ac9af23b0cb33b05f25bb47d996759169a6ed940 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:34:31 -0800 Subject: [PATCH 15/24] Install ghostty from copr --- build_files/hyprland/01-hyprland-desktop.sh | 3 +- packages/ghostty/ghostty.spec | 104 -------------------- 2 files changed, 2 insertions(+), 105 deletions(-) delete mode 100644 packages/ghostty/ghostty.spec diff --git a/build_files/hyprland/01-hyprland-desktop.sh b/build_files/hyprland/01-hyprland-desktop.sh index 8348790..183cdab 100755 --- a/build_files/hyprland/01-hyprland-desktop.sh +++ b/build_files/hyprland/01-hyprland-desktop.sh @@ -46,7 +46,8 @@ dnf5 -y install \ ### Fish Shell (set as default) dnf5 -y install fish -### Terminal - Ghostty (from Hypercube COPR) +### Terminal - Ghostty (from scottames COPR) +dnf5 -y copr enable scottames/ghostty dnf5 -y install ghostty ### Editor - Neovim nightly (from agriffis COPR) diff --git a/packages/ghostty/ghostty.spec b/packages/ghostty/ghostty.spec deleted file mode 100644 index 984d74e..0000000 --- a/packages/ghostty/ghostty.spec +++ /dev/null @@ -1,104 +0,0 @@ -# NOTE: This package requires "Enable internet access during builds" in COPR settings -# Building from main branch commit that supports zig 0.15.2 (Fedora 43) - -%global commit ab3a3805aa2db46eafc8c7a497df24665fa5e21b -%global shortcommit %(c=%{commit}; echo ${c:0:7}) -%global commitdate 20251216 - -Name: ghostty -Version: 1.2.3^%{commitdate}git%{shortcommit} -Release: 1%{?dist} -Summary: Fast, feature-rich, and cross-platform terminal emulator - -License: MIT -URL: https://github.com/ghostty-org/ghostty -Source0: %{url}/archive/%{commit}/%{name}-%{shortcommit}.tar.gz - -ExclusiveArch: x86_64 aarch64 - -BuildRequires: blueprint-compiler -BuildRequires: fontconfig-devel -BuildRequires: freetype-devel -BuildRequires: glib2-devel -BuildRequires: gtk4-devel -BuildRequires: gtk4-layer-shell-devel -BuildRequires: harfbuzz-devel -BuildRequires: libadwaita-devel -BuildRequires: libpng-devel -BuildRequires: oniguruma-devel -BuildRequires: pandoc-cli -BuildRequires: pixman-devel -BuildRequires: pkg-config -BuildRequires: wayland-protocols-devel -BuildRequires: zig -BuildRequires: zlib-ng-devel - -Requires: fontconfig -Requires: freetype -Requires: glib2 -Requires: gtk4 -Requires: harfbuzz -Requires: libadwaita -Requires: libpng -Requires: oniguruma -Requires: pixman -Requires: zlib-ng - -%description -Ghostty is a terminal emulator that differentiates itself by being both -fast and feature-rich. It uses platform-native UI and GPU acceleration. - -%prep -%setup -q -n %{name}-%{commit} - -%build -zig build \ - --summary all \ - --prefix "%{_prefix}" \ - -Dversion-string=%{version}-%{release} \ - -Doptimize=ReleaseFast \ - -Dcpu=baseline \ - -Dpie=true \ - -Demit-docs - -%install -DESTDIR=%{buildroot} zig build install \ - --prefix "%{_prefix}" \ - -Dversion-string=%{version}-%{release} \ - -Doptimize=ReleaseFast \ - -Dcpu=baseline \ - -Dpie=true \ - -Demit-docs - -# Remove terminfo that conflicts with ncurses -rm -f "%{buildroot}%{_datadir}/terminfo/g/ghostty" - -%files -%license LICENSE -%{_bindir}/ghostty -%{_datadir}/applications/com.mitchellh.ghostty.desktop -%{_datadir}/bash-completion/completions/ghostty.bash -%{_datadir}/bat/syntaxes/ghostty.sublime-syntax -%{_datadir}/fish/vendor_completions.d/ghostty.fish -%{_datadir}/ghostty/ -%{_datadir}/icons/hicolor/*/apps/com.mitchellh.ghostty.png -%{_datadir}/kio/servicemenus/com.mitchellh.ghostty.desktop -%{_datadir}/man/man1/ghostty.1* -%{_datadir}/man/man5/ghostty.5* -%{_datadir}/nautilus-python/extensions/ghostty.py -%{_datadir}/nvim/site/compiler/ghostty.vim -%{_datadir}/nvim/site/ftdetect/ghostty.vim -%{_datadir}/nvim/site/ftplugin/ghostty.vim -%{_datadir}/nvim/site/syntax/ghostty.vim -%{_datadir}/vim/vimfiles/compiler/ghostty.vim -%{_datadir}/vim/vimfiles/ftdetect/ghostty.vim -%{_datadir}/vim/vimfiles/ftplugin/ghostty.vim -%{_datadir}/vim/vimfiles/syntax/ghostty.vim -%{_datadir}/zsh/site-functions/_ghostty -%{_datadir}/dbus-1/services/com.mitchellh.ghostty.service -%{_datadir}/locale/*/LC_MESSAGES/com.mitchellh.ghostty.mo -%{_datadir}/metainfo/com.mitchellh.ghostty.metainfo.xml - -%changelog -* Mon Dec 16 2024 Hypercube - 1.2.3-1 -- Initial package for Hypercube From 5c49ede3bcbe649eba77f844bca134a76e6217fe Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 13:37:38 -0800 Subject: [PATCH 16/24] Add qs to quickshell --- packages/quickshell/quickshell.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/quickshell/quickshell.spec b/packages/quickshell/quickshell.spec index 790fc00..5a81a89 100644 --- a/packages/quickshell/quickshell.spec +++ b/packages/quickshell/quickshell.spec @@ -73,6 +73,7 @@ managers. It supports Hyprland, Sway, and other Wayland compositors. %license LICENSE LICENSE-GPL %doc README.md %{_bindir}/%{name} +%{_bindir}/qs %{_datadir}/applications/org.quickshell.desktop %{_datadir}/icons/hicolor/scalable/apps/org.quickshell.svg From 095aa4945cef8856745c80ced0a9cc8c9d5d1972 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 14:11:39 -0800 Subject: [PATCH 17/24] Add UWSM --- packages/README.md | 74 +++++++++++++++++++++--------------- packages/uwsm/uwsm.spec | 83 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 30 deletions(-) create mode 100644 packages/uwsm/uwsm.spec diff --git a/packages/README.md b/packages/README.md index 8461b25..a7c6a4b 100644 --- a/packages/README.md +++ b/packages/README.md @@ -127,11 +127,23 @@ These must be built first as other packages depend on them. --- +### 10. uwsm + +| Setting | Value | +|---------|-------| +| Subdir | `packages/uwsm` | +| Spec File | `uwsm.spec` | +| Version | 0.23.3 | +| Dependencies | None (Python-based, uses system packages) | +| Notes | Universal Wayland Session Manager, required by hyprland-uwsm subpackage | + +--- + ## Priority 2: Hyprland Compositor & Tools Build after core libraries are available. -### 10. hyprland +### 11. hyprland | Setting | Value | |---------|-------| @@ -142,7 +154,7 @@ Build after core libraries are available. --- -### 11. hyprlock +### 12. hyprlock | Setting | Value | |---------|-------| @@ -153,7 +165,7 @@ Build after core libraries are available. --- -### 12. hypridle +### 13. hypridle | Setting | Value | |---------|-------| @@ -164,7 +176,7 @@ Build after core libraries are available. --- -### 13. hyprpaper +### 14. hyprpaper | Setting | Value | |---------|-------| @@ -175,7 +187,7 @@ Build after core libraries are available. --- -### 14. xdg-desktop-portal-hyprland +### 15. xdg-desktop-portal-hyprland | Setting | Value | |---------|-------| @@ -186,7 +198,7 @@ Build after core libraries are available. --- -### 15. hyprpolkitagent +### 16. hyprpolkitagent | Setting | Value | |---------|-------| @@ -201,7 +213,7 @@ Build after core libraries are available. These have no hyprland dependencies and can be built in parallel. -### 16. eza +### 17. eza | Setting | Value | |---------|-------| @@ -212,7 +224,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 17. starship +### 18. starship | Setting | Value | |---------|-------| @@ -223,7 +235,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 18. lazygit +### 19. lazygit | Setting | Value | |---------|-------| @@ -234,7 +246,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 19. ghostty +### 20. ghostty | Setting | Value | |---------|-------| @@ -246,7 +258,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 20. quickshell +### 21. quickshell | Setting | Value | |---------|-------| @@ -257,7 +269,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 21. livesys-scripts +### 22. livesys-scripts | Setting | Value | |---------|-------| @@ -278,12 +290,13 @@ To ensure dependencies are satisfied, build in this order: 2. hyprwayland-scanner 3. hyprland-protocols 4. glaze -5. eza -6. starship -7. lazygit -8. ghostty -9. quickshell -10. livesys-scripts +5. uwsm +6. eza +7. starship +8. lazygit +9. ghostty +10. quickshell +11. livesys-scripts **Batch 2** (depends on Batch 1): 1. hyprlang (needs hyprutils) @@ -317,15 +330,16 @@ To ensure dependencies are satisfied, build in this order: | 7 | aquamarine | `packages/aquamarine` | `aquamarine.spec` | 0.10.0 | | 8 | hyprland-qt-support | `packages/hyprland-qt-support` | `hyprland-qt-support.spec` | 0.1.0 | | 9 | glaze | `packages/glaze` | `glaze.spec` | 6.1.0 | -| 10 | hyprland | `packages/hyprland` | `hyprland.spec` | 0.52.2 | -| 11 | hyprlock | `packages/hyprlock` | `hyprlock.spec` | 0.9.2 | -| 12 | hypridle | `packages/hypridle` | `hypridle.spec` | 0.1.7 | -| 13 | hyprpaper | `packages/hyprpaper` | `hyprpaper.spec` | 0.7.6 | -| 14 | xdg-desktop-portal-hyprland | `packages/xdg-desktop-portal-hyprland` | `xdg-desktop-portal-hyprland.spec` | 1.3.11 | -| 15 | hyprpolkitagent | `packages/hyprpolkitagent` | `hyprpolkitagent.spec` | 0.1.3 | -| 16 | eza | `packages/eza` | `eza.spec` | 0.20.21 | -| 17 | starship | `packages/starship` | `starship.spec` | 1.24.1 | -| 18 | lazygit | `packages/lazygit` | `lazygit.spec` | 0.57.0 | -| 19 | ghostty | `packages/ghostty` | `ghostty.spec` | 1.2.3^git | -| 20 | quickshell | `packages/quickshell` | `quickshell.spec` | 0.2.1 | -| 21 | livesys-scripts | `packages/livesys-scripts` | `livesys-scripts.spec` | 0.9.1 | +| 10 | uwsm | `packages/uwsm` | `uwsm.spec` | 0.23.3 | +| 11 | hyprland | `packages/hyprland` | `hyprland.spec` | 0.52.2 | +| 12 | hyprlock | `packages/hyprlock` | `hyprlock.spec` | 0.9.2 | +| 13 | hypridle | `packages/hypridle` | `hypridle.spec` | 0.1.7 | +| 14 | hyprpaper | `packages/hyprpaper` | `hyprpaper.spec` | 0.7.6 | +| 15 | xdg-desktop-portal-hyprland | `packages/xdg-desktop-portal-hyprland` | `xdg-desktop-portal-hyprland.spec` | 1.3.11 | +| 16 | hyprpolkitagent | `packages/hyprpolkitagent` | `hyprpolkitagent.spec` | 0.1.3 | +| 17 | eza | `packages/eza` | `eza.spec` | 0.20.21 | +| 18 | starship | `packages/starship` | `starship.spec` | 1.24.1 | +| 19 | lazygit | `packages/lazygit` | `lazygit.spec` | 0.57.0 | +| 20 | ghostty | `packages/ghostty` | `ghostty.spec` | 1.2.3^git | +| 21 | quickshell | `packages/quickshell` | `quickshell.spec` | 0.2.1 | +| 22 | livesys-scripts | `packages/livesys-scripts` | `livesys-scripts.spec` | 0.9.1 | diff --git a/packages/uwsm/uwsm.spec b/packages/uwsm/uwsm.spec new file mode 100644 index 0000000..1defefb --- /dev/null +++ b/packages/uwsm/uwsm.spec @@ -0,0 +1,83 @@ +Name: uwsm +Version: 0.23.3 +Release: 1%{?dist} +Summary: Universal Wayland Session Manager + +License: MIT +URL: https://github.com/Vladimir-csp/uwsm +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +BuildArch: noarch + +BuildRequires: desktop-file-utils +BuildRequires: meson +BuildRequires: python-rpm-macros +BuildRequires: python3 +BuildRequires: python3-dbus +BuildRequires: python3-pyxdg +BuildRequires: scdoc +BuildRequires: systemd-rpm-macros + +Requires: python3 +Requires: python3-dbus +Requires: python3-pyxdg +Requires: util-linux + +Recommends: /usr/bin/notify-send +Recommends: /usr/bin/whiptail +Recommends: wofi + +%description +Wraps standalone Wayland compositors into a set of Systemd units on the fly. +This provides robust session management including environment, XDG autostart +support, bi-directional binding with login session, and clean shutdown. +For compositors this is an opportunity to offload Systemd integration and +session/XDG autostart management in Systemd-managed environments. + +%prep +%autosetup -p1 + +%build +%meson -Duuctl=enabled -Dfumon=enabled -Duwsm-app=enabled +%meson_build + +%install +%meson_install +%py_byte_compile %{python3} %{buildroot}%{_datadir}/%{name}/modules + +%check +desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop + +%post +%systemd_user_post fumon.service + +%preun +%systemd_user_preun fumon.service + +%postun +%systemd_user_postun fumon.service + +%files +%doc %{_docdir}/%{name}/ +%license LICENSE +%{_bindir}/%{name} +%{_bindir}/%{name}-app +%{_bindir}/%{name}-terminal +%{_bindir}/%{name}-terminal-scope +%{_bindir}/%{name}-terminal-service +%{_bindir}/fumon +%{_bindir}/uuctl +%{_datadir}/%{name}/ +%{_datadir}/applications/uuctl.desktop +%{_mandir}/man1/%{name}.1.* +%{_mandir}/man1/fumon.1.* +%{_mandir}/man1/uuctl.1.* +%{_mandir}/man1/uwsm-app.1.* +%{_mandir}/man3/%{name}-plugins.3.* +%{_userunitdir}/fumon.service +%{_userunitdir}/*-graphical.slice +%{_userunitdir}/wayland-*.service +%{_userunitdir}/wayland-*.target + +%changelog +* Mon Dec 16 2024 Hypercube - 0.23.3-1 +- Initial package for Hypercube (based on solopasha/hyprland COPR) From 99203e1a8517837559b3dfeb83830f2c352a2209 Mon Sep 17 00:00:00 2001 From: binarypie Date: Tue, 16 Dec 2025 16:18:40 -0800 Subject: [PATCH 18/24] Added hyprland support to Titanoboa --- .github/workflows/build-disk.yml | 7 ++-- Justfile | 35 +++++++++++----- flatpaks/system-flatpaks.list | 1 + iso_files/configure_live_session.sh | 63 ----------------------------- 4 files changed, 30 insertions(+), 76 deletions(-) create mode 100644 flatpaks/system-flatpaks.list delete mode 100755 iso_files/configure_live_session.sh diff --git a/.github/workflows/build-disk.yml b/.github/workflows/build-disk.yml index caa016f..74d4956 100644 --- a/.github/workflows/build-disk.yml +++ b/.github/workflows/build-disk.yml @@ -53,13 +53,14 @@ jobs: - name: Build ISO id: build - uses: ublue-os/titanoboa@main + uses: binarypie-dev/titanoboa@main with: image-ref: ${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ matrix.variant.tag }} iso-dest: ${{ github.workspace }}/output.iso builder-distro: fedora - livesys: false - hook-post-rootfs: ${{ github.workspace }}/iso_files/configure_live_session.sh + livesys: true + livesys-repo: binarypie/hypercube + flatpaks-list: ${{ github.workspace }}/flatpaks/system-flatpaks.list - name: Rename ISO and generate checksum id: rename diff --git a/Justfile b/Justfile index 6bbd8c7..3e3d5bf 100644 --- a/Justfile +++ b/Justfile @@ -1,11 +1,10 @@ # Hypercube Build System -# Aligned with Bluefin patterns for consistency # Configuration export repo_organization := env("REPO_ORGANIZATION", "binarypie-dev") export image_name := env("IMAGE_NAME", "hypercube") -export base_image := env("BASE_IMAGE", "ghcr.io/ublue-os/bluefin-dx") -export base_image_nvidia := env("BASE_IMAGE_NVIDIA", "ghcr.io/ublue-os/bluefin-dx-nvidia") +export base_image := env("BASE_IMAGE", "ghcr.io/ublue-os/base-main") +export base_image_nvidia := env("BASE_IMAGE_NVIDIA", "ghcr.io/ublue-os/base-nvidia") export default_tag := env("DEFAULT_TAG", "stable-daily") # Runtime detection @@ -117,7 +116,7 @@ _titanoboa-setup: git -C _titanoboa pull --ff-only || true else echo "Cloning Titanoboa..." - git clone --depth 1 "https://github.com/ublue-os/titanoboa.git" _titanoboa + git clone --depth 1 "https://github.com/binarypie-dev/titanoboa.git" _titanoboa fi # Patch Titanoboa to use --policy=missing for local image builds sed -i 's/PODMAN }} pull /PODMAN }} pull --policy=missing /' _titanoboa/Justfile @@ -157,10 +156,18 @@ build-iso flavor="main": _titanoboa-setup fi # Build ISO with Titanoboa - # livesys=0 skips Fedora livesys scripts (we use Calamares instead) - # hook-post-rootfs sets up live user, Calamares, and auto-login + # livesys=1 enables livesys-scripts from binarypie/hypercube COPR (includes Hyprland support) + # Parameters (positional): image livesys flatpaks_file compression extra_kargs container_image polkit livesys_repo cd _titanoboa - {{ SUDO }} HOOK_POST_ROOTFS="${PWD}/../iso_files/configure_live_session.sh" just build "${IMAGE_FULL}" livesys=0 + {{ SUDO }} just build \ + "${IMAGE_FULL}" \ + 1 \ + "${PWD}/../flatpaks/system-flatpaks.list" \ + squashfs \ + NONE \ + "${IMAGE_FULL}" \ + 1 \ + binarypie/hypercube # Fix ownership if [[ "${UID}" -gt 0 ]]; then @@ -199,10 +206,18 @@ build-iso-ghcr flavor="main": _titanoboa-setup echo "Building ISO for ${IMAGE_FULL}..." - # livesys=0 skips Fedora livesys scripts (we use Calamares instead) - # hook-post-rootfs sets up live user, Calamares, and auto-login + # livesys=1 enables livesys-scripts from binarypie/hypercube COPR (includes Hyprland support) + # Parameters (positional): image livesys flatpaks_file compression extra_kargs container_image polkit livesys_repo cd _titanoboa - {{ SUDO }} HOOK_POST_ROOTFS="${PWD}/../iso_files/configure_live_session.sh" just build "${IMAGE_FULL}" livesys=0 + {{ SUDO }} just build \ + "${IMAGE_FULL}" \ + 1 \ + "${PWD}/../flatpaks/system-flatpaks.list" \ + squashfs \ + NONE \ + "${IMAGE_FULL}" \ + 1 \ + binarypie/hypercube if [[ "${UID}" -gt 0 ]]; then {{ SUDO }} chown "${UID}:$(id -g)" -R "${PWD}" diff --git a/flatpaks/system-flatpaks.list b/flatpaks/system-flatpaks.list new file mode 100644 index 0000000..0c5aeec --- /dev/null +++ b/flatpaks/system-flatpaks.list @@ -0,0 +1 @@ +# Hypercube System Flatpaks diff --git a/iso_files/configure_live_session.sh b/iso_files/configure_live_session.sh deleted file mode 100755 index 83459c4..0000000 --- a/iso_files/configure_live_session.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -set -euxo pipefail - -# Hypercube ISO Live Session Setup -# Since livesys-scripts doesn't support Hyprland yet, we do the setup manually -# -# NOTE: This script runs inside titanoboa's chroot with livesys=0 -# -# TODO: Once https://pagure.io/livesys-scripts merges Hyprland support, -# we can remove this and use livesys=1 - -echo "Setting up Hypercube live session..." - -### Install livesys-scripts (we'll run the Hyprland session setup manually) -dnf5 -y install livesys-scripts - -### Configure livesys for Hyprland -sed -i 's/^livesys_session=.*/livesys_session=hyprland/' /etc/sysconfig/livesys - -### Install Hyprland session file for livesys-scripts -mkdir -p /usr/libexec/livesys/sessions.d -cat > /usr/libexec/livesys/sessions.d/livesys-hyprland << 'SESSION_EOF' -#!/bin/sh -# -# livesys-hyprland: hyprland specific setup for livesys -# SPDX-License-Identifier: GPL-3.0-or-later -# - -HYPRLAND_SESSION_FILE="hyprland.desktop" - -# set up autologin for user liveuser using greetd -if [ -f /etc/greetd/config.toml ]; then - cat > /etc/greetd/config.toml << GREETD_EOF -[terminal] -vt = 1 - -[default_session] -command = "Hyprland" -user = "liveuser" -GREETD_EOF -fi - -# Show harddisk install on the desktop -if [ -f /usr/share/applications/liveinst.desktop ]; then - sed -i -e 's/NoDisplay=true/NoDisplay=false/' /usr/share/applications/liveinst.desktop -fi -mkdir -p /home/liveuser/Desktop -SESSION_EOF - -chmod +x /usr/libexec/livesys/sessions.d/livesys-hyprland - -### Enable livesys services -systemctl enable livesys.service livesys-late.service - -### Create livesys-session-extra tmpfiles config -echo "C /var/lib/livesys/livesys-session-extra 0755 root root - /usr/share/factory/var/lib/livesys/livesys-session-extra" > \ - /usr/lib/tmpfiles.d/livesys-session-extra.conf - -### Mark this as a live session -mkdir -p /var/lib/hypercube -touch /var/lib/hypercube/live-session - -echo "Hypercube live session setup complete" From 4623547818ff2ab93c024efaeb66f2405efd6596 Mon Sep 17 00:00:00 2001 From: binarypie Date: Thu, 18 Dec 2025 14:31:15 -0800 Subject: [PATCH 19/24] Required packages --- .../hyprland-guiutils/hyprland-guiutils.spec | 48 ++++++++++++++ packages/hyprtoolkit/hyprtoolkit.spec | 65 +++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 packages/hyprland-guiutils/hyprland-guiutils.spec create mode 100644 packages/hyprtoolkit/hyprtoolkit.spec diff --git a/packages/hyprland-guiutils/hyprland-guiutils.spec b/packages/hyprland-guiutils/hyprland-guiutils.spec new file mode 100644 index 0000000..2e8b30d --- /dev/null +++ b/packages/hyprland-guiutils/hyprland-guiutils.spec @@ -0,0 +1,48 @@ +Name: hyprland-guiutils +Version: 0.2.0 +Release: 1%{?dist} +Summary: Hyprland GUI utilities (successor to hyprland-qtutils) + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprland-guiutils +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(hyprtoolkit) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(pixman-1) +BuildRequires: pkgconfig(xkbcommon) + +Requires: hyprtoolkit%{?_isa} + +%description +%{summary}. Includes utilities: dialog, donate-screen, run, update-screen, +and welcome. + +%prep +%autosetup -p1 + +%build +%cmake -DCMAKE_BUILD_TYPE=Release +%cmake_build + +%install +%cmake_install + +%files +%license LICENSE +%doc README.md +%{_bindir}/hyprland-dialog +%{_bindir}/hyprland-donate-screen +%{_bindir}/hyprland-run +%{_bindir}/hyprland-update-screen +%{_bindir}/hyprland-welcome + +%changelog +* Wed Dec 18 2024 Hypercube - 0.2.0-1 +- Initial package for Hypercube diff --git a/packages/hyprtoolkit/hyprtoolkit.spec b/packages/hyprtoolkit/hyprtoolkit.spec new file mode 100644 index 0000000..1174a61 --- /dev/null +++ b/packages/hyprtoolkit/hyprtoolkit.spec @@ -0,0 +1,65 @@ +Name: hyprtoolkit +Version: 0.4.1 +Release: 1%{?dist} +Summary: A modern C++ Wayland-native GUI toolkit + +License: BSD-3-Clause +URL: https://github.com/hyprwm/hyprtoolkit +Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz + +ExcludeArch: %{ix86} + +BuildRequires: cmake +BuildRequires: gcc-c++ +BuildRequires: mesa-libGLES-devel +BuildRequires: pkgconfig(aquamarine) +BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(egl) +BuildRequires: pkgconfig(gbm) +BuildRequires: pkgconfig(hyprgraphics) +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(hyprwayland-scanner) +BuildRequires: pkgconfig(iniparser) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(pango) +BuildRequires: pkgconfig(pangocairo) +BuildRequires: pkgconfig(pixman-1) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-protocols) +BuildRequires: pkgconfig(xkbcommon) + +%description +%{summary}. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +Development files for %{name}. + +%prep +%autosetup -p1 + +%build +%cmake -DCMAKE_BUILD_TYPE=Release +%cmake_build + +%install +%cmake_install + +%files +%license LICENSE +%doc README.md +%{_libdir}/lib%{name}.so.0 +%{_libdir}/lib%{name}.so.%{version} + +%files devel +%{_includedir}/%{name}/ +%{_libdir}/lib%{name}.so +%{_libdir}/pkgconfig/%{name}.pc + +%changelog +* Wed Dec 18 2024 Hypercube - 0.4.1-1 +- Initial package for Hypercube From e4c5fdb4bfab9d1dd74cb63e020f16b4a5975464 Mon Sep 17 00:00:00 2001 From: binarypie Date: Thu, 18 Dec 2025 14:42:04 -0800 Subject: [PATCH 20/24] Updated hyprtoolkit build --- packages/hyprtoolkit/hyprtoolkit.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hyprtoolkit/hyprtoolkit.spec b/packages/hyprtoolkit/hyprtoolkit.spec index 1174a61..14d3937 100644 --- a/packages/hyprtoolkit/hyprtoolkit.spec +++ b/packages/hyprtoolkit/hyprtoolkit.spec @@ -52,7 +52,7 @@ Development files for %{name}. %files %license LICENSE %doc README.md -%{_libdir}/lib%{name}.so.0 +%{_libdir}/lib%{name}.so.4 %{_libdir}/lib%{name}.so.%{version} %files devel From 94afa667db515219c34ddc68fb5cb5f7e09d683a Mon Sep 17 00:00:00 2001 From: binarypie Date: Thu, 18 Dec 2025 14:51:15 -0800 Subject: [PATCH 21/24] Updated gui utils --- packages/hyprland-guiutils/hyprland-guiutils.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/hyprland-guiutils/hyprland-guiutils.spec b/packages/hyprland-guiutils/hyprland-guiutils.spec index 2e8b30d..c882b3d 100644 --- a/packages/hyprland-guiutils/hyprland-guiutils.spec +++ b/packages/hyprland-guiutils/hyprland-guiutils.spec @@ -11,6 +11,7 @@ ExcludeArch: %{ix86} BuildRequires: cmake BuildRequires: gcc-c++ +BuildRequires: pkgconfig(aquamarine) BuildRequires: pkgconfig(hyprlang) BuildRequires: pkgconfig(hyprtoolkit) BuildRequires: pkgconfig(hyprutils) From 0e12f806a1c68b6926defa7db29aca7bfe3748e9 Mon Sep 17 00:00:00 2001 From: binarypie Date: Thu, 18 Dec 2025 14:53:27 -0800 Subject: [PATCH 22/24] updated readme --- packages/README.md | 54 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/packages/README.md b/packages/README.md index a7c6a4b..dfe20db 100644 --- a/packages/README.md +++ b/packages/README.md @@ -209,11 +209,35 @@ Build after core libraries are available. --- +### 17. hyprtoolkit + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprtoolkit` | +| Spec File | `hyprtoolkit.spec` | +| Version | 0.4.1 | +| Dependencies | aquamarine, hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner | +| Notes | Modern C++ Wayland-native GUI toolkit for Hyprland utilities | + +--- + +### 18. hyprland-guiutils + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprland-guiutils` | +| Spec File | `hyprland-guiutils.spec` | +| Version | 0.2.0 | +| Dependencies | aquamarine, hyprtoolkit, hyprlang, hyprutils | +| Notes | Successor to hyprland-qtutils. Provides dialog, donate-screen, run, update-screen, welcome utilities | + +--- + ## Priority 3: CLI Tools These have no hyprland dependencies and can be built in parallel. -### 17. eza +### 19. eza | Setting | Value | |---------|-------| @@ -224,7 +248,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 18. starship +### 20. starship | Setting | Value | |---------|-------| @@ -235,7 +259,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 19. lazygit +### 21. lazygit | Setting | Value | |---------|-------| @@ -246,7 +270,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 20. ghostty +### 22. ghostty | Setting | Value | |---------|-------| @@ -258,7 +282,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 21. quickshell +### 23. quickshell | Setting | Value | |---------|-------| @@ -269,7 +293,7 @@ These have no hyprland dependencies and can be built in parallel. --- -### 22. livesys-scripts +### 24. livesys-scripts | Setting | Value | |---------|-------| @@ -314,6 +338,10 @@ To ensure dependencies are satisfied, build in this order: 4. hyprpaper (needs hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner) 5. xdg-desktop-portal-hyprland (needs hyprland-protocols, hyprlang, hyprutils, hyprwayland-scanner) 6. hyprpolkitagent (needs hyprutils, hyprland-qt-support) +7. hyprtoolkit (needs aquamarine, hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner) + +**Batch 5** (depends on Batch 4): +1. hyprland-guiutils (needs aquamarine, hyprtoolkit, hyprlang, hyprutils) --- @@ -337,9 +365,11 @@ To ensure dependencies are satisfied, build in this order: | 14 | hyprpaper | `packages/hyprpaper` | `hyprpaper.spec` | 0.7.6 | | 15 | xdg-desktop-portal-hyprland | `packages/xdg-desktop-portal-hyprland` | `xdg-desktop-portal-hyprland.spec` | 1.3.11 | | 16 | hyprpolkitagent | `packages/hyprpolkitagent` | `hyprpolkitagent.spec` | 0.1.3 | -| 17 | eza | `packages/eza` | `eza.spec` | 0.20.21 | -| 18 | starship | `packages/starship` | `starship.spec` | 1.24.1 | -| 19 | lazygit | `packages/lazygit` | `lazygit.spec` | 0.57.0 | -| 20 | ghostty | `packages/ghostty` | `ghostty.spec` | 1.2.3^git | -| 21 | quickshell | `packages/quickshell` | `quickshell.spec` | 0.2.1 | -| 22 | livesys-scripts | `packages/livesys-scripts` | `livesys-scripts.spec` | 0.9.1 | +| 17 | hyprtoolkit | `packages/hyprtoolkit` | `hyprtoolkit.spec` | 0.4.1 | +| 18 | hyprland-guiutils | `packages/hyprland-guiutils` | `hyprland-guiutils.spec` | 0.2.0 | +| 19 | eza | `packages/eza` | `eza.spec` | 0.20.21 | +| 20 | starship | `packages/starship` | `starship.spec` | 1.24.1 | +| 21 | lazygit | `packages/lazygit` | `lazygit.spec` | 0.57.0 | +| 22 | ghostty | `packages/ghostty` | `ghostty.spec` | 1.2.3^git | +| 23 | quickshell | `packages/quickshell` | `quickshell.spec` | 0.2.1 | +| 24 | livesys-scripts | `packages/livesys-scripts` | `livesys-scripts.spec` | 0.9.1 | From 854aabaf005da9348b3a8ac1c7f399f9f3b7f018 Mon Sep 17 00:00:00 2001 From: binarypie Date: Thu, 18 Dec 2025 14:55:02 -0800 Subject: [PATCH 23/24] add graphics to gui utils --- packages/hyprland-guiutils/hyprland-guiutils.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/hyprland-guiutils/hyprland-guiutils.spec b/packages/hyprland-guiutils/hyprland-guiutils.spec index c882b3d..f93d4db 100644 --- a/packages/hyprland-guiutils/hyprland-guiutils.spec +++ b/packages/hyprland-guiutils/hyprland-guiutils.spec @@ -12,6 +12,7 @@ ExcludeArch: %{ix86} BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: pkgconfig(aquamarine) +BuildRequires: pkgconfig(hyprgraphics) BuildRequires: pkgconfig(hyprlang) BuildRequires: pkgconfig(hyprtoolkit) BuildRequires: pkgconfig(hyprutils) From 37966bd02d48f6cfce90de219dd86d3d0beec3fa Mon Sep 17 00:00:00 2001 From: binarypie Date: Thu, 18 Dec 2025 14:57:57 -0800 Subject: [PATCH 24/24] all the dependencies --- packages/hyprland-guiutils/hyprland-guiutils.spec | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/hyprland-guiutils/hyprland-guiutils.spec b/packages/hyprland-guiutils/hyprland-guiutils.spec index f93d4db..fe306bd 100644 --- a/packages/hyprland-guiutils/hyprland-guiutils.spec +++ b/packages/hyprland-guiutils/hyprland-guiutils.spec @@ -11,13 +11,22 @@ ExcludeArch: %{ix86} BuildRequires: cmake BuildRequires: gcc-c++ +BuildRequires: mesa-libGLES-devel BuildRequires: pkgconfig(aquamarine) +BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(egl) +BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(hyprgraphics) BuildRequires: pkgconfig(hyprlang) BuildRequires: pkgconfig(hyprtoolkit) BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(iniparser) BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(pango) +BuildRequires: pkgconfig(pangocairo) BuildRequires: pkgconfig(pixman-1) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-protocols) BuildRequires: pkgconfig(xkbcommon) Requires: hyprtoolkit%{?_isa}