diff --git a/.github/workflows/build-disk.yml b/.github/workflows/build-disk.yml index 356b1cd..74d4956 100644 --- a/.github/workflows/build-disk.yml +++ b/.github/workflows/build-disk.yml @@ -53,12 +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 - hook-pre-initramfs: ${{ github.workspace }}/iso_files/hide_hyprland_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/.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/.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/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/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..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,8 +156,18 @@ build-iso flavor="main": _titanoboa-setup fi # Build ISO with Titanoboa + # 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 }} just build "${IMAGE_FULL}" + {{ 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 @@ -197,8 +206,18 @@ build-iso-ghcr flavor="main": _titanoboa-setup echo "Building ISO for ${IMAGE_FULL}..." + # 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 }} just build "${IMAGE_FULL}" + {{ 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/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/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/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 0cf354b..ab09139 100755 --- a/build_files/hypercube/99-tests.sh +++ b/build_files/hypercube/99-tests.sh @@ -8,51 +8,83 @@ 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 + "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..183cdab --- /dev/null +++ b/build_files/hyprland/01-hyprland-desktop.sh @@ -0,0 +1,67 @@ +#!/bin/bash +# Hypercube Hyprland Desktop Stack +# Installs Hyprland compositor, tools, terminals, and editors + +set -ouex pipefail + +echo "Installing Hyprland desktop stack..." + +### Enable Hypercube COPR (our self-maintained packages) +dnf5 -y copr enable binarypie/hypercube + +### Compositor / Hyprland Stack (from Hypercube COPR) +dnf5 -y install \ + hyprland \ + hyprland-uwsm \ + hyprpaper \ + hypridle \ + hyprlock \ + hyprpolkitagent \ + xdg-desktop-portal-hyprland + +### Quickshell - Application Launcher, Notifications, OSD (from Hypercube COPR) +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 Hypercube COPR +dnf5 -y install \ + eza \ + starship \ + lazygit + +### Fish Shell (set as default) +dnf5 -y install fish + +### Terminal - Ghostty (from scottames COPR) +dnf5 -y copr enable scottames/ghostty +dnf5 -y install ghostty + +### Editor - Neovim nightly (from agriffis COPR) +dnf5 -y copr enable agriffis/neovim-nightly +dnf5 -y install neovim python3-neovim + +### Image/Media Viewers +dnf5 -y install \ + imv \ + mpv + +### Screenshot/Screen Recording +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..1a170b2 100755 --- a/build_files/shared/clean-stage.sh +++ b/build_files/shared/clean-stage.sh @@ -8,12 +8,9 @@ echo "Disabling COPR repositories..." # Disable all COPR repos that were enabled during build # This ensures the final image doesn't have external repos enabled -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 + +# Hypercube COPR (our self-maintained packages) +dnf5 -y copr disable binarypie/hypercube || true echo "Cleaning package caches..." dnf5 -y clean all 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/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" } -} 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/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/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..5a013ba --- /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 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 } + 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/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/README.md b/packages/README.md new file mode 100644 index 0000000..dfe20db --- /dev/null +++ b/packages/README.md @@ -0,0 +1,375 @@ +# 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 | + +--- + +### 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. + +### 11. hyprland + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprland` | +| Spec File | `hyprland.spec` | +| Version | 0.52.2 | +| Dependencies | aquamarine, hyprcursor, hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 12. hyprlock + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprlock` | +| Spec File | `hyprlock.spec` | +| Version | 0.9.2 | +| Dependencies | hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 13. hypridle + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hypridle` | +| Spec File | `hypridle.spec` | +| Version | 0.1.7 | +| Dependencies | hyprland-protocols, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 14. hyprpaper + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprpaper` | +| Spec File | `hyprpaper.spec` | +| Version | 0.7.6 | +| Dependencies | hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner | + +--- + +### 15. 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 | + +--- + +### 16. hyprpolkitagent + +| Setting | Value | +|---------|-------| +| Subdir | `packages/hyprpolkitagent` | +| Spec File | `hyprpolkitagent.spec` | +| Version | 0.1.3 | +| Dependencies | hyprutils, hyprland-qt-support | + +--- + +### 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. + +### 19. eza + +| Setting | Value | +|---------|-------| +| Subdir | `packages/eza` | +| Spec File | `eza.spec` | +| Version | 0.20.21 | +| Dependencies | None | + +--- + +### 20. starship + +| Setting | Value | +|---------|-------| +| Subdir | `packages/starship` | +| Spec File | `starship.spec` | +| Version | 1.24.1 | +| Dependencies | None | + +--- + +### 21. lazygit + +| Setting | Value | +|---------|-------| +| Subdir | `packages/lazygit` | +| Spec File | `lazygit.spec` | +| Version | 0.57.0 | +| Dependencies | None | + +--- + +### 22. 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 | + +--- + +### 23. quickshell + +| Setting | Value | +|---------|-------| +| Subdir | `packages/quickshell` | +| Spec File | `quickshell.spec` | +| Version | 0.2.1 | +| Dependencies | None | + +--- + +### 24. 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. uwsm +6. eza +7. starship +8. lazygit +9. ghostty +10. quickshell +11. 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) +7. hyprtoolkit (needs aquamarine, hyprgraphics, hyprlang, hyprutils, hyprwayland-scanner) + +**Batch 5** (depends on Batch 4): +1. hyprland-guiutils (needs aquamarine, hyprtoolkit, hyprlang, hyprutils) + +--- + +## 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 | 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 | 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 | 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..76ef7ee --- /dev/null +++ b/packages/eza/eza.spec @@ -0,0 +1,59 @@ +# 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} +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: pandoc + +%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 +export RUSTFLAGS="%{build_rustflags}" +cargo build --release --locked + +%install +install -Dpm 0755 target/release/%{name} -t %{buildroot}%{_bindir}/ + +# Generate and install man pages +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} -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 LICENSE.txt +%doc README.md CHANGELOG.md +%{_bindir}/%{name} +%{_mandir}/man1/eza.1* +%{_mandir}/man5/eza_colors* +%{_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/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) 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..569cb23 --- /dev/null +++ b/packages/hyprgraphics/hyprgraphics.spec @@ -0,0 +1,67 @@ +Name: hyprgraphics +Version: 0.4.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.3 +%{_libdir}/lib%{name}.so.%{version} + +%files devel +%{_includedir}/%{name}/ +%{_libdir}/lib%{name}.so +%{_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/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-guiutils/hyprland-guiutils.spec b/packages/hyprland-guiutils/hyprland-guiutils.spec new file mode 100644 index 0000000..fe306bd --- /dev/null +++ b/packages/hyprland-guiutils/hyprland-guiutils.spec @@ -0,0 +1,59 @@ +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: 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} + +%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/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..7111c7a --- /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} -DCMAKE_INSTALL_LIBDIR=%{_libdir} +%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..7969725 --- /dev/null +++ b/packages/hyprlang/hyprlang.spec @@ -0,0 +1,56 @@ +Name: hyprlang +Version: 0.6.7 +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.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/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/hyprtoolkit/hyprtoolkit.spec b/packages/hyprtoolkit/hyprtoolkit.spec new file mode 100644 index 0000000..14d3937 --- /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.4 +%{_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 diff --git a/packages/hyprutils/hyprutils.spec b/packages/hyprutils/hyprutils.spec new file mode 100644 index 0000000..b783a37 --- /dev/null +++ b/packages/hyprutils/hyprutils.spec @@ -0,0 +1,55 @@ +Name: hyprutils +Version: 0.11.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.10 + +%files devel +%{_includedir}/%{name}/ +%{_libdir}/lib%{name}.so +%{_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) 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..5e92145 --- /dev/null +++ b/packages/lazygit/lazygit.spec @@ -0,0 +1,39 @@ +# 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} +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 +go build -ldflags "-X main.version=%{version}" -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-scripts.spec b/packages/livesys-scripts/livesys-scripts.spec new file mode 100644 index 0000000..5a6e614 --- /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://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 + +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/packages/quickshell/quickshell.spec b/packages/quickshell/quickshell.spec new file mode 100644 index 0000000..5a81a89 --- /dev/null +++ b/packages/quickshell/quickshell.spec @@ -0,0 +1,82 @@ +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} +%{_bindir}/qs +%{_datadir}/applications/org.quickshell.desktop +%{_datadir}/icons/hicolor/scalable/apps/org.quickshell.svg + +%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..f2669e4 --- /dev/null +++ b/packages/starship/starship.spec @@ -0,0 +1,58 @@ +%global debug_package %{nil} + +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 >= 1.80 +BuildRequires: rust >= 1.80 +BuildRequires: gcc +BuildRequires: cmake3 +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(zlib) + +%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 +# Build handled in install + +%install +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 +%{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 +%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/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) 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) 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/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" 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)"