From c2a7c16cf4804f29a859b629be470fd6aac6659b Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sat, 10 Jan 2026 00:49:05 -0500 Subject: [PATCH] Major Update Debian trixie 0.53.1 support new build flags Trixie needs small patches to build vs. testing+ Script now detects that. But some debian based distros might mask name There is a flag `--force-trixie` to include the fixes Updated the Install-Upgrade documents with the specifics On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOGS.md modified: Debian-Hyprland-Install-Upgrade.es.md modified: Debian-Hyprland-Install-Upgrade.md modified: README.md modified: hypr-tags.env deleted: hypr-tags.env-v.053 modified: install.sh modified: refresh-hypr-tags.sh modified: update-hyprland.sh --- CHANGELOGS.md | 16 ++- Debian-Hyprland-Install-Upgrade.es.md | 191 ++++++++++++++++++++----- Debian-Hyprland-Install-Upgrade.md | 193 +++++++++++++++++++++----- README.md | 6 +- hypr-tags.env | 11 +- hypr-tags.env-v.053 | 13 -- install.sh | 68 ++++++++- refresh-hypr-tags.sh | 71 ++++++++-- update-hyprland.sh | 61 ++++++-- 9 files changed, 505 insertions(+), 125 deletions(-) delete mode 100644 hypr-tags.env-v.053 diff --git a/CHANGELOGS.md b/CHANGELOGS.md index d0313e1..9034295 100644 --- a/CHANGELOGS.md +++ b/CHANGELOGS.md @@ -3,14 +3,16 @@ ## 02 January 2026 - Updated: - - `update-hyprland.sh` pinned to v0.52.2 - - Currently only Debian testing and SID branches build v0.53+ - - Added `--force-update` to refresh the pacakge versions if pinned - - This is only for debian testing+ versions + - Default Hyprland stack versions now target 0.53.1 (see `hypr-tags.env`) + - Added trixie compatibility mode flags: + - `--build-trixie` / `--no-trixie` (auto-detected on Debian 13) + - Added `--force-update` to refresh pinned package versions - `update-hyprland.sh` added `-/--help` - - documentation for updating hyprland -- Added: version update to `refresh-tags` and `update-hyprland` script -- Fixed: `--force-update` implies `--fetch-latest` + - Documentation for updating hyprland +- Added: + - Version refresh improvements for `refresh-hypr-tags.sh` (accepts `--get-latest`, retries transient GitHub errors) +- Fixed: + - `--force-update` implies `--fetch-latest` ## 10 December 2025 diff --git a/Debian-Hyprland-Install-Upgrade.es.md b/Debian-Hyprland-Install-Upgrade.es.md index 50577c2..af5eb81 100644 --- a/Debian-Hyprland-Install-Upgrade.es.md +++ b/Debian-Hyprland-Install-Upgrade.es.md @@ -6,13 +6,15 @@ Esta guía cubre los flujos de instalación y actualización mejorados para el p 1. [Resumen](#resumen) 2. [Nuevas Funciones](#nuevas-funciones) -3. [Gestión Central de Versiones](#gestión-central-de-versiones) -4. [Métodos de Instalación](#métodos-de-instalación) -5. [Flujos de Actualización](#flujos-de-actualización) -6. [Pruebas con Dry-Run](#pruebas-con-dry-run) -7. [Gestión de Logs](#gestión-de-logs) -8. [Uso Avanzado](#uso-avanzado) -9. [Solución de Problemas](#solución-de-problemas) +3. [Referencia de Flags](#referencia-de-flags) +4. [Modo de Compatibilidad Debian 13 (Trixie)](#modo-de-compatibilidad-debian-13-trixie) +5. [Gestión Central de Versiones](#gestión-central-de-versiones) +6. [Métodos de Instalación](#métodos-de-instalación) +7. [Flujos de Actualización](#flujos-de-actualización) +8. [Pruebas con Dry-Run](#pruebas-con-dry-run) +9. [Gestión de Logs](#gestión-de-logs) +10. [Uso Avanzado](#uso-avanzado) +11. [Solución de Problemas](#solución-de-problemas) ## Resumen @@ -27,6 +29,7 @@ El proyecto Debian-Hyprland ahora incluye herramientas de automatización y gest ## Nuevas Funciones ### install.sh mejorado + El script original ahora: - **Unifica versiones**: Lee `hypr-tags.env` y exporta variables de versión a todos los módulos @@ -36,48 +39,126 @@ El script original ahora: ### Nuevos Scripts #### update-hyprland.sh + Herramienta enfocada para gestionar y compilar solo el stack de Hyprland: + ```bash chmod +x ./update-hyprland.sh ./update-hyprland.sh --help # Ver todas las opciones ``` Flags clave: + - --fetch-latest: obtiene las últimas etiquetas desde GitHub - --force-update: sobrescribe valores fijados en hypr-tags.env (equivalente a FORCE=1) - --dry-run / --install: solo compilar o compilar+instalar - --only / --skip: limitar qué módulos se ejecutan +- --build-trixie / --no-trixie: habilita/deshabilita el modo de compatibilidad Debian 13 (auto-detectado por defecto) #### dry-run-build.sh + Herramienta de pruebas que compila componentes sin instalarlos: + ```bash chmod +x ./dry-run-build.sh ./dry-run-build.sh --help # Ver todas las opciones ``` #### wayland-protocols-src.sh + Módulo que compila wayland-protocols desde el origen para satisfacer los requisitos de Hyprland 0.51.x. +## Referencia de Flags + +Este repo incluye varios "flags de control" que afectan cómo se compila/instala el stack. + +### Flags de update-hyprland.sh + +- `--install` / `--dry-run`: compilar+instalar vs solo compilar +- `--only ` / `--skip `: ejecutar solo un subconjunto de módulos +- `--fetch-latest`: consulta GitHub Releases y refresca etiquetas +- `--force-update`: sobrescribe valores fijados en `hypr-tags.env` (equivalente a `FORCE=1`) +- `--build-trixie` / `--no-trixie`: habilita/deshabilita modo de compatibilidad Debian 13 + +Notas: +- Cuando el modo trixie está habilitado, `update-hyprland.sh` exporta `HYPR_BUILD_TRIXIE=1` y reenvía `--build-trixie` a los scripts de módulos. + +### Flags de install.sh + +- `--preset `: ejecutar con elecciones predefinidas +- `--build-trixie` / `--no-trixie`: habilita/deshabilita modo de compatibilidad Debian 13 + +También puedes forzar por variable de entorno: + +```bash +HYPR_BUILD_TRIXIE=1 ./install.sh +``` + +### Flags de refresh-hypr-tags.sh + +- `--get-latest`: refresca etiquetas a las últimas releases de GitHub (alias) +- `--force-update`: forzar sobrescritura de valores fijados + +Equivalente con variable de entorno: + +```bash +FORCE=1 ./refresh-hypr-tags.sh --get-latest +``` + +## Modo de Compatibilidad Debian 13 (Trixie) + +Versiones nuevas de Hyprland (0.53.x+) pueden requerir shims de compatibilidad en Debian 13 (trixie) debido a diferencias del toolchain/stdlib. + +- Por defecto es **auto-detectado** (vía `/etc/os-release`): si `ID=debian` y `VERSION_CODENAME=trixie`, el modo se habilita. +- Puedes forzarlo ON/OFF: + +```bash +# Forzar ON +./update-hyprland.sh --build-trixie --install + +# Forzar OFF +./update-hyprland.sh --no-trixie --install +``` + ## Gestión Central de Versiones ### hypr-tags.env + Archivo con etiquetas de versión para todos los componentes de Hyprland: ```bash # Versiones actuales (ejemplo) -HYPRLAND_TAG=v0.51.1 -AQUAMARINE_TAG=v0.9.3 -HYPRUTILS_TAG=v0.8.2 -HYPRLANG_TAG=v0.6.4 -HYPRGRAPHICS_TAG=v0.1.5 +HYPRLAND_TAG=v0.53.1 +AQUAMARINE_TAG=v0.10.0 +HYPRUTILS_TAG=v0.11.0 +HYPRLANG_TAG=v0.6.8 +HYPRGRAPHICS_TAG=v0.5.0 +HYPRTOOLKIT_TAG=v0.4.1 HYPRWAYLAND_SCANNER_TAG=v0.4.5 -HYPRLAND_PROTOCOLS_TAG=v0.6.4 +HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0 -HYPRLAND_QTUTILS_TAG=v0.1.4 -WAYLAND_PROTOCOLS_TAG=1.45 +HYPRLAND_QTUTILS_TAG=v0.1.5 +HYPRLAND_GUIUTILS_TAG=v0.2.0 +HYPRWIRE_TAG=v0.2.1 +WAYLAND_PROTOCOLS_TAG=1.46 +``` + +### Refrescar etiquetas (últimas releases) + +Puedes refrescar `hypr-tags.env` a las últimas etiquetas publicadas en GitHub: + +```bash +# Actualiza solo claves en auto/latest (o sin valor) +./refresh-hypr-tags.sh --get-latest + +# Forzar sobrescritura de valores fijados +FORCE=1 ./refresh-hypr-tags.sh --get-latest +# o +./refresh-hypr-tags.sh --force-update ``` ### Prioridad de Sobrescritura de Versiones + 1. Variables de entorno (exportadas) 2. Valores en el archivo `hypr-tags.env` 3. Valores por defecto en cada módulo @@ -85,6 +166,7 @@ WAYLAND_PROTOCOLS_TAG=1.45 ## Métodos de Instalación ### Método 1: Instalación Completa Original + ```bash # Instalación estándar con todos los componentes chmod +x install.sh @@ -92,17 +174,20 @@ chmod +x install.sh ``` Ahora, este método automáticamente: + - Carga versiones desde `hypr-tags.env` - Instala wayland-protocols desde el origen antes de Hyprland - Mantiene el orden correcto de dependencias ### Método 2: Solo el Stack de Hyprland + ```bash # Instala solo Hyprland y componentes esenciales ./update-hyprland.sh --install ``` ### Método 3: Instalación Nueva con Últimas Versiones + ```bash # Obtiene últimas versiones de GitHub e instala ./update-hyprland.sh --fetch-latest --install @@ -112,6 +197,7 @@ Ahora, este método automáticamente: ``` ### Método 4: Instalación con Preset + ```bash # Usa un preset para elecciones automáticas ./install.sh --preset ./preset.sh @@ -124,6 +210,7 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x- ### Actualizar a la Última Versión de Hyprland #### Opción A: Descubrimiento Automático + ```bash # Obtiene las últimas etiquetas e instala (respeta versiones fijadas en hypr-tags.env) ./update-hyprland.sh --fetch-latest --install @@ -133,12 +220,14 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x- ``` #### Opción B: Versión Específica + ```bash # Establece una versión específica de Hyprland ./update-hyprland.sh --set HYPRLAND=v0.51.1 --install ``` #### Opción C: Probar Antes de Instalar + ```bash # Prueba la compilación primero, luego instala si es exitoso ./update-hyprland.sh --fetch-latest --dry-run @@ -171,6 +260,7 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x- Si actualmente estás en Hyprland 0.49 o 0.50.x, puedes actualizar directamente a 0.51.1 sin una reinstalación completa. Ruta recomendada: + ```bash # Asegura que hypr-tags.env apunte a la versión objetivo (omitir si ya es v0.51.1) ./update-hyprland.sh --set HYPRLAND=v0.51.1 @@ -180,13 +270,17 @@ Ruta recomendada: ``` Notas: + - El comando garantiza y ejecuta, según sea necesario: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine y luego hyprland. - No es necesario usar install.sh para esta actualización, a menos que también quieras instalar/actualizar módulos opcionales (p. ej., SDDM, Bluetooth, Thunar, AGS, dotfiles) o estés recuperándote de una instalación fallida/parcial. - Opcional: agrega --with-deps para reinstalar dependencias primero: + ```bash ./update-hyprland.sh --with-deps --install --only hyprland ``` + - Puedes hacer un dry-run primero para validar: + ```bash ./update-hyprland.sh --dry-run --only hyprland ``` @@ -194,6 +288,7 @@ Notas: ## Pruebas con Dry-Run ### ¿Por qué usar Dry-Run? + - Probar compatibilidad de compilación antes de instalar - Validar combinaciones de versiones - Depurar problemas de compilación sin cambios en el sistema @@ -226,6 +321,7 @@ Notas: ``` ### Limitaciones de Dry-Run + - **Las dependencias se instalan**: apt se ejecuta para asegurar la compilación - **Requisitos de pkg-config**: Algunos componentes necesitan requisitos instalados en el sistema - **Sin cambios en el sistema**: No instala archivos en /usr/local o /usr @@ -233,7 +329,9 @@ Notas: ## Gestión de Logs ### Ubicación de Logs + Todas las actividades de construcción generan logs con sello de tiempo en: + ``` Install-Logs/ ├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Log principal de instalación @@ -243,6 +341,7 @@ Install-Logs/ ``` ### Análisis de Logs + ```bash # Ver el log de instalación más reciente ls -t Install-Logs/*.log | head -1 | xargs less @@ -255,8 +354,10 @@ cat Install-Logs/build-dry-run-*.log ``` ### Retención de Logs + - Los logs se acumulan con el tiempo para referencia histórica - Se recomienda limpieza manual periódica: + ```bash # Mantener solo logs de los últimos 30 días find Install-Logs/ -name "*.log" -mtime +30 -delete @@ -267,6 +368,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete ### Gestión de Versiones #### Forzar la Actualización de Todas las Etiquetas + ```bash # Sobrescribe valores fijados en hypr-tags.env con las últimas versiones ./update-hyprland.sh --fetch-latest --force-update --dry-run @@ -275,6 +377,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete ``` #### Copia de Seguridad y Restauración + ```bash # Las etiquetas se respaldan automáticamente cuando cambian # Restaurar la copia más reciente @@ -282,6 +385,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete ``` #### Múltiples Conjuntos de Versiones + ```bash # Guardar configuración actual cp hypr-tags.env hypr-tags-stable.env @@ -296,6 +400,7 @@ cp hypr-tags-stable.env hypr-tags.env ### Integración con el Entorno #### PKG_CONFIG_PATH personalizado + ```bash # Asegurar que /usr/local tenga prioridad export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}" @@ -303,6 +408,7 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PK ``` #### Compilaciones en Paralelo + ```bash # Controlar el paralelismo (por defecto: todos los núcleos) export MAKEFLAGS="-j4" @@ -312,6 +418,7 @@ export MAKEFLAGS="-j4" ### Flujo de Trabajo de Desarrollo #### Probar Nuevos Lanzamientos + ```bash # 1. Crear entorno de pruebas cp hypr-tags.env hypr-tags.backup @@ -327,6 +434,7 @@ cp hypr-tags.env hypr-tags.backup ``` #### Desarrollo de Componentes + ```bash # Solo instalar dependencias ./update-hyprland.sh --with-deps --dry-run @@ -343,9 +451,11 @@ tail -f Install-Logs/install-*hyprland*.log ### Problemas Comunes #### Falla de Configuración con CMake + **Síntomas**: "Package dependency requirement not satisfied" **Soluciones**: + ```bash # Instalar requisitos faltantes ./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang @@ -358,9 +468,11 @@ rm -rf hyprland aquamarine hyprutils hyprlang ``` #### Errores de Compilación + **Síntomas**: "too many errors emitted" **Soluciones**: + ```bash # Actualizar dependencias núcleo primero ./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang @@ -370,9 +482,11 @@ grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log ``` #### Etiqueta No Encontrada + **Síntomas**: "Remote branch X not found" **Soluciones**: + ```bash # Ver etiquetas disponibles git ls-remote --tags https://github.com/hyprwm/Hyprland @@ -384,31 +498,34 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland ### Pasos de Depuración 1. **Verificar compatibilidad del sistema**: - ```bash - # Verificar versión de Debian - cat /etc/os-release - - # Asegurar deb-src habilitado - grep -E "^deb-src" /etc/apt/sources.list - ``` + + ```bash + # Verificar versión de Debian + cat /etc/os-release + + # Asegurar deb-src habilitado + grep -E "^deb-src" /etc/apt/sources.list + ``` 2. **Verificar entorno**: - ```bash - # Ver etiquetas actuales - cat hypr-tags.env - - # Probar dry-run primero - ./update-hyprland.sh --dry-run --only hyprland - ``` + + ```bash + # Ver etiquetas actuales + cat hypr-tags.env + + # Probar dry-run primero + ./update-hyprland.sh --dry-run --only hyprland + ``` 3. **Analizar logs**: - ```bash - # Errores más recientes - grep -i "error\|fail" Install-Logs/*.log | tail -20 - - # Problemas por módulo - ls -la Install-Logs/install-*[component]*.log - ``` + + ```bash + # Errores más recientes + grep -i "error\|fail" Install-Logs/*.log | tail -20 + + # Problemas por módulo + ls -la Install-Logs/install-*[component]*.log + ``` ### Obtener Ayuda @@ -420,6 +537,7 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland ## Migración desde Versiones Previas ### Instalaciones Existentes + Las nuevas herramientas funcionan junto a instalaciones existentes: ```bash @@ -431,6 +549,7 @@ Las nuevas herramientas funcionan junto a instalaciones existentes: ``` ### Convertir a Gestión por Etiquetas + ```bash # Las versiones actuales se guardan en hypr-tags.env automáticamente # Verificar con: diff --git a/Debian-Hyprland-Install-Upgrade.md b/Debian-Hyprland-Install-Upgrade.md index 5cf20c9..612d530 100644 --- a/Debian-Hyprland-Install-Upgrade.md +++ b/Debian-Hyprland-Install-Upgrade.md @@ -6,13 +6,15 @@ This guide covers the enhanced installation and upgrade workflows for KooL's Deb 1. [Overview](#overview) 2. [New Features](#new-features) -3. [Central Version Management](#central-version-management) -4. [Installation Methods](#installation-methods) -5. [Upgrade Workflows](#upgrade-workflows) -6. [Dry-Run Testing](#dry-run-testing) -7. [Log Management](#log-management) -8. [Advanced Usage](#advanced-usage) -9. [Troubleshooting](#troubleshooting) +3. [Flags Reference](#flags-reference) +4. [Debian 13 (Trixie) Compatibility Mode](#debian-13-trixie-compatibility-mode) +5. [Central Version Management](#central-version-management) +6. [Installation Methods](#installation-methods) +7. [Upgrade Workflows](#upgrade-workflows) +8. [Dry-Run Testing](#dry-run-testing) +9. [Log Management](#log-management) +10. [Advanced Usage](#advanced-usage) +11. [Troubleshooting](#troubleshooting) ## Overview @@ -27,6 +29,7 @@ The Debian-Hyprland project now includes enhanced automation and management tool ## New Features ### Enhanced install.sh + The original install.sh script now includes: - **Tag consistency**: Reads `hypr-tags.env` and exports version variables to all modules @@ -36,48 +39,126 @@ The original install.sh script now includes: ### New Scripts #### update-hyprland.sh + A focused tool for managing and building just the Hyprland stack: + ```bash chmod +x ./update-hyprland.sh ./update-hyprland.sh --help # View all options ``` Key flags: + - --fetch-latest: pull latest release tags from GitHub - --force-update: override pinned values in hypr-tags.env (equivalent to FORCE=1) - --dry-run / --install: compile-only or compile+install - --only / --skip: limit which modules run +- --build-trixie / --no-trixie: enable/disable Debian 13 (trixie) compatibility mode (auto-detected by default) #### dry-run-build.sh + A testing tool that compiles components without installing: + ```bash chmod +x ./dry-run-build.sh ./dry-run-build.sh --help # View all options ``` #### wayland-protocols-src.sh + A new module that builds wayland-protocols from source to satisfy Hyprland 0.51.x requirements. +## Flags Reference + +This repo provides several "control flags" that affect how the stack is built. These are intentionally consistent across tools. + +### update-hyprland.sh flags + +- `--install` / `--dry-run`: compile+install vs compile-only +- `--only ` / `--skip `: run a subset of modules +- `--fetch-latest`: query GitHub Releases and refresh tags +- `--force-update`: override pinned values in `hypr-tags.env` (equivalent to `FORCE=1`) +- `--build-trixie` / `--no-trixie`: enable/disable Debian 13 compatibility mode + +Notes: +- When trixie mode is enabled, `update-hyprland.sh` exports `HYPR_BUILD_TRIXIE=1` and forwards `--build-trixie` to module scripts. + +### install.sh flags + +- `--preset `: run unattended-ish using preset choices +- `--build-trixie` / `--no-trixie`: enable/disable Debian 13 compatibility mode + +You can also force via env: + +```bash +HYPR_BUILD_TRIXIE=1 ./install.sh +``` + +### refresh-hypr-tags.sh flags + +- `--get-latest`: refresh tags to latest GitHub releases (alias; refresh always checks latest) +- `--force-update`: force-override pinned values + +Equivalent env form: + +```bash +FORCE=1 ./refresh-hypr-tags.sh --get-latest +``` + +## Debian 13 (Trixie) Compatibility Mode + +Newer Hyprland versions (0.53.x+) may require source-level compatibility shims on Debian 13 (trixie) due to toolchain / standard-library feature gaps. + +- Default behavior is **auto-detect** (via `/etc/os-release`): if `ID=debian` and `VERSION_CODENAME=trixie`, compatibility mode turns on. +- You can force it on/off: + +```bash +# Force ON +./update-hyprland.sh --build-trixie --install + +# Force OFF +./update-hyprland.sh --no-trixie --install +``` + ## Central Version Management ### hypr-tags.env + This file contains version tags for all Hyprland components: ```bash # Current versions (example) -HYPRLAND_TAG=v0.51.1 -AQUAMARINE_TAG=v0.9.3 -HYPRUTILS_TAG=v0.8.2 -HYPRLANG_TAG=v0.6.4 -HYPRGRAPHICS_TAG=v0.1.5 +HYPRLAND_TAG=v0.53.1 +AQUAMARINE_TAG=v0.10.0 +HYPRUTILS_TAG=v0.11.0 +HYPRLANG_TAG=v0.6.8 +HYPRGRAPHICS_TAG=v0.5.0 +HYPRTOOLKIT_TAG=v0.4.1 HYPRWAYLAND_SCANNER_TAG=v0.4.5 -HYPRLAND_PROTOCOLS_TAG=v0.6.4 +HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0 -HYPRLAND_QTUTILS_TAG=v0.1.4 -WAYLAND_PROTOCOLS_TAG=1.45 +HYPRLAND_QTUTILS_TAG=v0.1.5 +HYPRLAND_GUIUTILS_TAG=v0.2.0 +HYPRWIRE_TAG=v0.2.1 +WAYLAND_PROTOCOLS_TAG=1.46 +``` + +### Refreshing tags (latest releases) + +You can refresh `hypr-tags.env` to the latest GitHub release tags: + +```bash +# Update only keys set to auto/latest (or unset) +./refresh-hypr-tags.sh --get-latest + +# Force-override pinned keys +FORCE=1 ./refresh-hypr-tags.sh --get-latest +# or +./refresh-hypr-tags.sh --force-update ``` ### Version Override Priority + 1. Environment variables (exported) 2. hypr-tags.env file values 3. Default hardcoded values in each module @@ -85,6 +166,7 @@ WAYLAND_PROTOCOLS_TAG=1.45 ## Installation Methods ### Method 1: Original Full Installation + ```bash # Standard installation with all components chmod +x install.sh @@ -92,17 +174,20 @@ chmod +x install.sh ``` This method now automatically: + - Loads versions from `hypr-tags.env` - Installs wayland-protocols from source before Hyprland - Maintains proper dependency ordering ### Method 2: Hyprland Stack Only + ```bash # Install only Hyprland and essential components ./update-hyprland.sh --install ``` ### Method 3: Fresh Installation with Latest Versions + ```bash # Fetch latest GitHub releases and install ./update-hyprland.sh --fetch-latest --install @@ -112,6 +197,7 @@ This method now automatically: ``` ### Method 4: Preset-Based Installation + ```bash # Use preset file for automated choices ./install.sh --preset ./preset.sh @@ -124,6 +210,7 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511) ### Upgrading to Latest Hyprland Release #### Option A: Automatic Discovery + ```bash # Fetch latest tags and install (respects pins in hypr-tags.env) ./update-hyprland.sh --fetch-latest --install @@ -133,12 +220,14 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511) ``` #### Option B: Specific Version + ```bash # Set specific Hyprland version ./update-hyprland.sh --set HYPRLAND=v0.51.1 --install ``` #### Option C: Test Before Installing + ```bash # Test compilation first, then install if successful ./update-hyprland.sh --fetch-latest --dry-run @@ -171,6 +260,7 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511) If you’re currently on Hyprland 0.49 or 0.50.x, you can upgrade directly to 0.51.1 without a full reinstall. Recommended path: + ```bash # Ensure hypr-tags.env pins the target version (skip if already v0.51.1) ./update-hyprland.sh --set HYPRLAND=v0.51.1 @@ -180,13 +270,17 @@ Recommended path: ``` Notes: + - The command will automatically ensure and run, as needed: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine, then hyprland. - Full install via install.sh is not required for this upgrade unless you also want to install/refresh optional modules (e.g., SDDM, Bluetooth, Thunar, AGS, dotfiles) or you’re recovering from a failed/partial setup. - Optional: add --with-deps to re-run dependency installation first: + ```bash ./update-hyprland.sh --with-deps --install --only hyprland ``` + - You can dry-run first to validate: + ```bash ./update-hyprland.sh --dry-run --only hyprland ``` @@ -194,6 +288,7 @@ Notes: ## Dry-Run Testing ### Why Use Dry-Run? + - Test compilation compatibility before installing - Validate version combinations - Debug build issues without system changes @@ -226,6 +321,7 @@ Notes: ``` ### Dry-Run Limitations + - **Dependencies still install**: apt operations run to ensure compilation succeeds - **pkg-config requirements**: Some components need system-installed prerequisites - **No system changes**: No files installed to /usr/local or /usr @@ -233,7 +329,9 @@ Notes: ## Log Management ### Log Location + All build activities generate timestamped logs in: + ``` Install-Logs/ ├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Main install log @@ -243,6 +341,7 @@ Install-Logs/ ``` ### Log Analysis + ```bash # View most recent install log ls -t Install-Logs/*.log | head -1 | xargs less @@ -255,8 +354,10 @@ cat Install-Logs/build-dry-run-*.log ``` ### Log Retention + - Logs accumulate over time for historical reference - Manual cleanup recommended periodically: + ```bash # Keep only logs from last 30 days find Install-Logs/ -name "*.log" -mtime +30 -delete @@ -267,6 +368,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete ### Tag Management #### Force Update All Tags + ```bash # Override pinned values in hypr-tags.env to the latest releases ./update-hyprland.sh --fetch-latest --force-update --dry-run @@ -275,6 +377,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete ``` #### Backup and Restore + ```bash # Tags are automatically backed up on changes # Restore most recent backup @@ -282,6 +385,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete ``` #### Multiple Version Sets + ```bash # Save current configuration cp hypr-tags.env hypr-tags-stable.env @@ -296,6 +400,7 @@ cp hypr-tags-stable.env hypr-tags.env ### Environment Integration #### Custom PKG_CONFIG_PATH + ```bash # Ensure /usr/local takes precedence export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}" @@ -303,6 +408,7 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PK ``` #### Parallel Builds + ```bash # Control build parallelism (default: all cores) export MAKEFLAGS="-j4" @@ -312,6 +418,7 @@ export MAKEFLAGS="-j4" ### Development Workflow #### Testing New Releases + ```bash # 1. Create test environment cp hypr-tags.env hypr-tags.backup @@ -327,6 +434,7 @@ cp hypr-tags.env hypr-tags.backup ``` #### Component Development + ```bash # Install dependencies only ./update-hyprland.sh --with-deps --dry-run @@ -343,9 +451,11 @@ tail -f Install-Logs/install-*hyprland*.log ### Common Issues #### CMake Configuration Fails + **Symptoms**: "Package dependency requirement not satisfied" **Solutions**: + ```bash # Install missing prerequisites ./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang @@ -358,9 +468,11 @@ rm -rf hyprland aquamarine hyprutils hyprlang ``` #### Compilation Errors + **Symptoms**: "too many errors emitted" **Solutions**: + ```bash # Update core dependencies first ./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang @@ -370,9 +482,11 @@ grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log ``` #### Tag Not Found + **Symptoms**: "Remote branch X not found" **Solutions**: + ```bash # Check available tags git ls-remote --tags https://github.com/hyprwm/Hyprland @@ -384,31 +498,34 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland ### Debug Steps 1. **Check system compatibility**: - ```bash - # Verify Debian version - cat /etc/os-release - - # Ensure deb-src enabled - grep -E "^deb-src" /etc/apt/sources.list - ``` + + ```bash + # Verify Debian version + cat /etc/os-release + + # Ensure deb-src enabled + grep -E "^deb-src" /etc/apt/sources.list + ``` 2. **Verify environment**: - ```bash - # Check current tags - cat hypr-tags.env - - # Test dry-run first - ./update-hyprland.sh --dry-run --only hyprland - ``` + + ```bash + # Check current tags + cat hypr-tags.env + + # Test dry-run first + ./update-hyprland.sh --dry-run --only hyprland + ``` 3. **Analyze logs**: - ```bash - # Most recent errors - grep -i "error\|fail" Install-Logs/*.log | tail -20 - - # Module-specific issues - ls -la Install-Logs/install-*[component]*.log - ``` + + ```bash + # Most recent errors + grep -i "error\|fail" Install-Logs/*.log | tail -20 + + # Module-specific issues + ls -la Install-Logs/install-*[component]*.log + ``` ### Getting Help @@ -420,6 +537,7 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland ## Migration from Previous Versions ### Existing Installations + The new tools work alongside existing installations: ```bash @@ -431,6 +549,7 @@ The new tools work alongside existing installations: ``` ### Converting to Tag Management + ```bash # Current versions are saved to hypr-tags.env automatically # Verify with: @@ -440,4 +559,4 @@ cat hypr-tags.env ./update-hyprland.sh --set HYPRLAND=v0.51.1 ``` -The enhanced workflow provides better control, testing capabilities, and automation while maintaining full compatibility with the original installation process. \ No newline at end of file +The enhanced workflow provides better control, testing capabilities, and automation while maintaining full compatibility with the original installation process. diff --git a/README.md b/README.md index 63643ca..905101b 100644 --- a/README.md +++ b/README.md @@ -89,9 +89,9 @@ sudo nano /etc/apt/sources.list - 10 October 2025 Update! - Hyprland-Debian nows builds 0.51.1 from source! - The installer now can be used to install newer releases later - - If you are currently running 0.49, or 0.50, you can upgrade to 0.51.1 - > Note: At this time Debian 13 (Trixie) can't compile v0.52.2+ - > Debian Testing and SID can +- If you are currently running 0.49, or 0.50, you can upgrade to 0.51.1 + > Note: Newer Hyprland versions (0.53.x+) may require compatibility shims on Debian 13 (Trixie). + > Use the provided update/install scripts with `--build-trixie` if needed. - You do not have to re-install everything, but re-running `install.sh` works also - Instructions are available in English and Spanish diff --git a/hypr-tags.env b/hypr-tags.env index 81c0404..a3484a6 100644 --- a/hypr-tags.env +++ b/hypr-tags.env @@ -2,14 +2,17 @@ # You can edit these values or let update-hyprland.sh manage them. # Each module script reads its TAG from these environment variables if set. -HYPRLAND_TAG=v0.52.2 +# Hyprland 0.53.x stack (includes hyprwire) +HYPRLAND_TAG=v0.53.1 AQUAMARINE_TAG=v0.10.0 -HYPRUTILS_TAG=v0.10.4 -HYPRLANG_TAG=v0.6.7 -HYPRGRAPHICS_TAG=v0.4.0 +HYPRUTILS_TAG=v0.11.0 +HYPRLANG_TAG=v0.6.8 +HYPRGRAPHICS_TAG=v0.5.0 HYPRTOOLKIT_TAG=v0.4.1 HYPRWAYLAND_SCANNER_TAG=v0.4.5 HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0 +HYPRLAND_QTUTILS_TAG=v0.1.5 HYPRLAND_GUIUTILS_TAG=v0.2.0 +HYPRWIRE_TAG=v0.2.1 WAYLAND_PROTOCOLS_TAG=1.46 diff --git a/hypr-tags.env-v.053 b/hypr-tags.env-v.053 deleted file mode 100644 index e3c4ca3..0000000 --- a/hypr-tags.env-v.053 +++ /dev/null @@ -1,13 +0,0 @@ -AQUAMARINE_TAG=v0.10.0 -HYPRGRAPHICS_TAG=v0.5.0 -HYPRLAND_GUIUTILS_TAG=v0.2.0 -HYPRLAND_PROTOCOLS_TAG=v0.7.0 -HYPRLAND_QT_SUPPORT_TAG=v0.1.0 -HYPRLAND_QTUTILS_TAG=v0.1.5 -HYPRLAND_TAG=v0.53.0 -HYPRLANG_TAG=v0.6.7 -HYPRTOOLKIT_TAG=v0.4.1 -HYPRUTILS_TAG=v0.11.0 -HYPRWAYLAND_SCANNER_TAG=v0.4.5 -HYPRWIRE_TAG=v0.2.1 -WAYLAND_PROTOCOLS_TAG=1.46 diff --git a/install.sh b/install.sh index ae09dfb..a3f22b6 100755 --- a/install.sh +++ b/install.sh @@ -105,6 +105,60 @@ if is_ubuntu; then exit 1 fi +# Debian Trixie compatibility mode +# Some Hypr* components need source-level shims on Debian 13 (trixie) toolchains. +# Default: auto-detect via /etc/os-release +# Overrides: +# --build-trixie / --no-trixie +# HYPR_BUILD_TRIXIE=1|0 (env) +TRIXIE_MODE="auto" +PRESET_FILE="" + +# Parse a small set of supported CLI args (order-independent) +# NOTE: install.sh historically used "$1"/"$2" for --preset; this keeps that working. +args=("$@") +for ((i=0; i<${#args[@]}; i++)); do + case "${args[$i]}" in + --build-trixie) + TRIXIE_MODE="on" + ;; + --no-trixie) + TRIXIE_MODE="off" + ;; + --preset) + if [ $((i+1)) -lt ${#args[@]} ]; then + PRESET_FILE="${args[$((i+1))]}" + fi + ;; + esac +done + +# If env explicitly sets HYPR_BUILD_TRIXIE, honor it. +if [ -n "${HYPR_BUILD_TRIXIE+x}" ]; then + if [ "${HYPR_BUILD_TRIXIE}" = "1" ]; then + TRIXIE_MODE="on" + elif [ "${HYPR_BUILD_TRIXIE}" = "0" ]; then + TRIXIE_MODE="off" + fi +fi + +# Resolve auto-detection +if [ "$TRIXIE_MODE" = "auto" ]; then + HYPR_BUILD_TRIXIE=0 + if [ -f /etc/os-release ]; then + # shellcheck disable=SC1091 + . /etc/os-release || true + if [ "${ID:-}" = "debian" ] && [ "${VERSION_CODENAME:-}" = "trixie" ]; then + HYPR_BUILD_TRIXIE=1 + fi + fi +elif [ "$TRIXIE_MODE" = "on" ]; then + HYPR_BUILD_TRIXIE=1 +else + HYPR_BUILD_TRIXIE=0 +fi +export HYPR_BUILD_TRIXIE + # install whiptails if detected not installed. Necessary for this version if ! command -v whiptail >/dev/null; then echo "${NOTE} - whiptail is not installed. Installing..." | tee -a "$LOG" @@ -269,7 +323,13 @@ execute_script() { if [ -f "$script_path" ]; then chmod +x "$script_path" if [ -x "$script_path" ]; then - env "$script_path" + # Pass --build-trixie to all module scripts when in trixie compatibility mode. + # Scripts that don't care should simply ignore unknown args. + if [ "${HYPR_BUILD_TRIXIE:-0}" = "1" ]; then + env HYPR_BUILD_TRIXIE=1 "$script_path" --build-trixie + else + env HYPR_BUILD_TRIXIE=0 "$script_path" + fi else echo "Failed to make script '$script' executable." | tee -a "$LOG" fi @@ -323,9 +383,9 @@ load_preset() { fi } -# Check if --preset argument is passed -if [[ "$1" == "--preset" && -n "$2" ]]; then - load_preset "$2" +# Check if --preset argument is passed (order-independent) +if [ -n "${PRESET_FILE:-}" ]; then + load_preset "$PRESET_FILE" fi # List of services to check for active login managers diff --git a/refresh-hypr-tags.sh b/refresh-hypr-tags.sh index 9019cb7..fb15654 100755 --- a/refresh-hypr-tags.sh +++ b/refresh-hypr-tags.sh @@ -11,20 +11,61 @@ mkdir -p "$LOG_DIR" TS=$(date +%F-%H%M%S) SUMMARY_LOG="$LOG_DIR/refresh-tags-$TS.log" +usage() { + cat <<'EOF' +refresh-hypr-tags.sh +Refresh hypr-tags.env with latest GitHub release tags. + +Usage: + ./refresh-hypr-tags.sh + FORCE=1 ./refresh-hypr-tags.sh + ./refresh-hypr-tags.sh --force-update + ./refresh-hypr-tags.sh --get-latest + +Notes: + - By default, only updates keys set to auto/latest (or unset). + - Use FORCE=1 or --force-update to override pinned values. +EOF +} + +# Arg parsing (minimal/backwards compatible) +FORCE=${FORCE:-0} +for arg in "$@"; do + case "$arg" in + -h|--help) + usage + exit 0 + ;; + --force-update|--force) + FORCE=1 + ;; + # Alias for user ergonomics; refresh always checks latest tags. + --get-latest|--fetch-latest) + : + ;; + *) + echo "[WARN] Unknown argument ignored: $arg" | tee -a "$SUMMARY_LOG" + ;; + esac +done + # Ensure tags file exists if [[ ! -f "$TAGS_FILE" ]]; then cat > "$TAGS_FILE" <<'EOF' -HYPRLAND_TAG=v0.51.1 -AQUAMARINE_TAG=v0.9.3 -HYPRUTILS_TAG=v0.8.2 -HYPRLANG_TAG=v0.6.4 -HYPRGRAPHICS_TAG=v0.1.5 +# Default Hyprland stack versions +HYPRLAND_TAG=v0.53.1 +AQUAMARINE_TAG=v0.10.0 +HYPRUTILS_TAG=v0.11.0 +HYPRLANG_TAG=v0.6.8 +HYPRGRAPHICS_TAG=v0.5.0 +HYPRTOOLKIT_TAG=v0.4.1 HYPRWAYLAND_SCANNER_TAG=v0.4.5 -HYPRLAND_PROTOCOLS_TAG=v0.6.4 +HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0 -HYPRLAND_QTUTILS_TAG=v0.1.4 -HYPRWIRE_TAG=auto -WAYLAND_PROTOCOLS_TAG=1.45 +HYPRLAND_QTUTILS_TAG=v0.1.5 +HYPRLAND_GUIUTILS_TAG=v0.2.0 +HYPRWIRE_TAG=v0.2.1 +WAYLAND_PROTOCOLS_TAG=1.46 EOF fi @@ -38,16 +79,19 @@ if ! command -v curl >/dev/null 2>&1; then fi # Map of env var -> repo +# (Some modules may not publish GitHub releases; in that case the tag may not refresh.) declare -A repos=( [HYPRLAND_TAG]="hyprwm/Hyprland" [AQUAMARINE_TAG]="hyprwm/aquamarine" [HYPRUTILS_TAG]="hyprwm/hyprutils" [HYPRLANG_TAG]="hyprwm/hyprlang" [HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics" + [HYPRTOOLKIT_TAG]="hyprwm/hyprtoolkit" [HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner" [HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols" [HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support" [HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils" + [HYPRLAND_GUIUTILS_TAG]="hyprwm/hyprland-guiutils" [HYPRWIRE_TAG]="hyprwm/hyprwire" ) @@ -59,13 +103,18 @@ while IFS='=' read -r k v; do done < "$TAGS_FILE" # Fetch latest, but only update keys set to 'auto' or 'latest' unless forced -FORCE=${FORCE:-0} changes=() for key in "${!repos[@]}"; do repo="${repos[$key]}" url="https://api.github.com/repos/$repo/releases/latest" echo "[INFO] Checking latest tag for $repo" | tee -a "$SUMMARY_LOG" - body=$(curl -fsSL "$url" || true) + + # Be resilient to transient GitHub API errors (e.g. 5xx). + body=$(curl -fsSL \ + --retry 3 --retry-all-errors --retry-delay 1 \ + -H 'Accept: application/vnd.github+json' \ + "$url" || true) + [[ -z "$body" ]] && { echo "[WARN] Empty response for $repo" | tee -a "$SUMMARY_LOG"; continue; } if command -v jq >/dev/null 2>&1; then tag=$(printf '%s' "$body" | jq -r '.tag_name // empty') diff --git a/update-hyprland.sh b/update-hyprland.sh index 359ebb7..229dfc3 100755 --- a/update-hyprland.sh +++ b/update-hyprland.sh @@ -65,6 +65,12 @@ ONLY_LIST="" SKIP_LIST="" SET_ARGS=() +# Trixie compatibility mode +# - auto: enable on Debian trixie (useful for toolchain/library shims) +# - on: force enable via --build-trixie +# - off: force disable via --no-trixie +TRIXIE_MODE="auto" + usage() { # Print the header comments (quick reference) followed by explicit flags overview sed -n '2,140p' "$0" | sed -n '/^# /p' | sed 's/^# \{0,1\}//' @@ -85,6 +91,8 @@ Options: --via-helper Use dry-run-build.sh to summarize a dry-run --minimal Build minimal stack before hyprland --no-fetch Do not auto-fetch tags on install + --build-trixie Force Debian 13 (trixie) compatibility mode (enables needed shims) + --no-trixie Disable trixie compatibility mode --set K=V [...] Set one or more tags (e.g., HYPRLAND=v0.53.0) EOF } @@ -93,16 +101,18 @@ ensure_tags_file() { if [[ ! -f "$TAGS_FILE" ]]; then echo "[INFO] Creating default tags file: $TAGS_FILE" | tee -a "$SUMMARY_LOG" cat >"$TAGS_FILE" <<'EOF' -HYPRLAND_TAG=v0.50.1 -AQUAMARINE_TAG=v0.9.2 -HYPRUTILS_TAG=v0.8.2 -HYPRLANG_TAG=v0.6.4 -HYPRGRAPHICS_TAG=v0.1.5 +# Default Hyprland stack versions +# (You can override any of these via --set or by editing hypr-tags.env.) +HYPRLAND_TAG=v0.53.1 +AQUAMARINE_TAG=v0.10.0 +HYPRUTILS_TAG=v0.11.0 +HYPRLANG_TAG=v0.6.8 +HYPRGRAPHICS_TAG=v0.5.0 HYPRWAYLAND_SCANNER_TAG=v0.4.5 -HYPRLAND_PROTOCOLS_TAG=v0.6.4 +HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0 -HYPRLAND_QTUTILS_TAG=v0.1.4 -HYPRWIRE_TAG=auto +HYPRLAND_QTUTILS_TAG=v0.1.5 +HYPRWIRE_TAG=v0.2.1 EOF fi } @@ -281,6 +291,20 @@ run_stack() { export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}" export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH:-}" + # Auto-detect Debian trixie unless explicitly overridden. + if [[ "$TRIXIE_MODE" == "auto" ]] && [[ -f /etc/os-release ]]; then + # shellcheck disable=SC1091 + . /etc/os-release || true + if [[ "${ID:-}" == "debian" ]] && [[ "${VERSION_CODENAME:-}" == "trixie" ]]; then + TRIXIE_MODE="on" + fi + fi + if [[ "$TRIXIE_MODE" == "on" ]]; then + export HYPR_BUILD_TRIXIE=1 + else + export HYPR_BUILD_TRIXIE=0 + fi + # Propagate system/bundled selection to hyprland.sh if [[ $USE_SYSTEM_LIBS -eq 1 ]]; then export USE_SYSTEM_HYPRLIBS=1 @@ -496,10 +520,19 @@ run_stack() { continue } chmod +x "$script" || true + + # Extra args for module scripts + # Most scripts ignore unknown flags, so this is safe and lets us add future + # trixie-specific shims without changing update-hyprland.sh again. + extra_args=() + if [[ "${HYPR_BUILD_TRIXIE:-0}" == "1" ]]; then + extra_args+=("--build-trixie") + fi + if [[ $DO_DRY_RUN -eq 1 ]]; then - if DRY_RUN=1 "$script"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi + if DRY_RUN=1 "$script" "${extra_args[@]}"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi else - if "$script"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi + if "$script" "${extra_args[@]}"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi fi done @@ -579,6 +612,14 @@ while [[ $# -gt 0 ]]; do NO_FETCH=1 shift ;; + --build-trixie) + TRIXIE_MODE="on" + shift + ;; + --no-trixie) + TRIXIE_MODE="off" + shift + ;; --only) ONLY_LIST=${2:-} shift 2