Compare commits

..

No commits in common. "c2a7c16cf4804f29a859b629be470fd6aac6659b" and "131fc3b37036690ab7a6e156b57bff2aa259dbbc" have entirely different histories.

13 changed files with 150 additions and 632 deletions

View File

@ -3,16 +3,14 @@
## 02 January 2026 ## 02 January 2026
- Updated: - Updated:
- Default Hyprland stack versions now target 0.53.1 (see `hypr-tags.env`) - `update-hyprland.sh` pinned to v0.52.2
- Added trixie compatibility mode flags: - Currently only Debian testing and SID branches build v0.53+
- `--build-trixie` / `--no-trixie` (auto-detected on Debian 13) - Added `--force-update` to refresh the pacakge versions if pinned
- Added `--force-update` to refresh pinned package versions - This is only for debian testing+ versions
- `update-hyprland.sh` added `-/--help` - `update-hyprland.sh` added `-/--help`
- Documentation for updating hyprland - documentation for updating hyprland
- Added: - Added: version update to `refresh-tags` and `update-hyprland` script
- Version refresh improvements for `refresh-hypr-tags.sh` (accepts `--get-latest`, retries transient GitHub errors) - Fixed: `--force-update` implies `--fetch-latest`
- Fixed:
- `--force-update` implies `--fetch-latest`
## 10 December 2025 ## 10 December 2025

View File

@ -6,15 +6,13 @@ Esta guía cubre los flujos de instalación y actualización mejorados para el p
1. [Resumen](#resumen) 1. [Resumen](#resumen)
2. [Nuevas Funciones](#nuevas-funciones) 2. [Nuevas Funciones](#nuevas-funciones)
3. [Referencia de Flags](#referencia-de-flags) 3. [Gestión Central de Versiones](#gestión-central-de-versiones)
4. [Modo de Compatibilidad Debian 13 (Trixie)](#modo-de-compatibilidad-debian-13-trixie) 4. [Métodos de Instalación](#métodos-de-instalación)
5. [Gestión Central de Versiones](#gestión-central-de-versiones) 5. [Flujos de Actualización](#flujos-de-actualización)
6. [Métodos de Instalación](#métodos-de-instalación) 6. [Pruebas con Dry-Run](#pruebas-con-dry-run)
7. [Flujos de Actualización](#flujos-de-actualización) 7. [Gestión de Logs](#gestión-de-logs)
8. [Pruebas con Dry-Run](#pruebas-con-dry-run) 8. [Uso Avanzado](#uso-avanzado)
9. [Gestión de Logs](#gestión-de-logs) 9. [Solución de Problemas](#solución-de-problemas)
10. [Uso Avanzado](#uso-avanzado)
11. [Solución de Problemas](#solución-de-problemas)
## Resumen ## Resumen
@ -29,7 +27,6 @@ El proyecto Debian-Hyprland ahora incluye herramientas de automatización y gest
## Nuevas Funciones ## Nuevas Funciones
### install.sh mejorado ### install.sh mejorado
El script original ahora: El script original ahora:
- **Unifica versiones**: Lee `hypr-tags.env` y exporta variables de versión a todos los módulos - **Unifica versiones**: Lee `hypr-tags.env` y exporta variables de versión a todos los módulos
@ -39,126 +36,48 @@ El script original ahora:
### Nuevos Scripts ### Nuevos Scripts
#### update-hyprland.sh #### update-hyprland.sh
Herramienta enfocada para gestionar y compilar solo el stack de Hyprland: Herramienta enfocada para gestionar y compilar solo el stack de Hyprland:
```bash ```bash
chmod +x ./update-hyprland.sh chmod +x ./update-hyprland.sh
./update-hyprland.sh --help # Ver todas las opciones ./update-hyprland.sh --help # Ver todas las opciones
``` ```
Flags clave: Flags clave:
- --fetch-latest: obtiene las últimas etiquetas desde GitHub - --fetch-latest: obtiene las últimas etiquetas desde GitHub
- --force-update: sobrescribe valores fijados en hypr-tags.env (equivalente a FORCE=1) - --force-update: sobrescribe valores fijados en hypr-tags.env (equivalente a FORCE=1)
- --dry-run / --install: solo compilar o compilar+instalar - --dry-run / --install: solo compilar o compilar+instalar
- --only / --skip: limitar qué módulos se ejecutan - --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 #### dry-run-build.sh
Herramienta de pruebas que compila componentes sin instalarlos: Herramienta de pruebas que compila componentes sin instalarlos:
```bash ```bash
chmod +x ./dry-run-build.sh chmod +x ./dry-run-build.sh
./dry-run-build.sh --help # Ver todas las opciones ./dry-run-build.sh --help # Ver todas las opciones
``` ```
#### wayland-protocols-src.sh #### wayland-protocols-src.sh
Módulo que compila wayland-protocols desde el origen para satisfacer los requisitos de Hyprland 0.51.x. 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 <lista>` / `--skip <lista>`: 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 <archivo>`: 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 ## Gestión Central de Versiones
### hypr-tags.env ### hypr-tags.env
Archivo con etiquetas de versión para todos los componentes de Hyprland: Archivo con etiquetas de versión para todos los componentes de Hyprland:
```bash ```bash
# Versiones actuales (ejemplo) # Versiones actuales (ejemplo)
HYPRLAND_TAG=v0.53.1 HYPRLAND_TAG=v0.51.1
AQUAMARINE_TAG=v0.10.0 AQUAMARINE_TAG=v0.9.3
HYPRUTILS_TAG=v0.11.0 HYPRUTILS_TAG=v0.8.2
HYPRLANG_TAG=v0.6.8 HYPRLANG_TAG=v0.6.4
HYPRGRAPHICS_TAG=v0.5.0 HYPRGRAPHICS_TAG=v0.1.5
HYPRTOOLKIT_TAG=v0.4.1
HYPRWAYLAND_SCANNER_TAG=v0.4.5 HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_QT_SUPPORT_TAG=v0.1.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.5 HYPRLAND_QTUTILS_TAG=v0.1.4
HYPRLAND_GUIUTILS_TAG=v0.2.0 WAYLAND_PROTOCOLS_TAG=1.45
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 ### Prioridad de Sobrescritura de Versiones
1. Variables de entorno (exportadas) 1. Variables de entorno (exportadas)
2. Valores en el archivo `hypr-tags.env` 2. Valores en el archivo `hypr-tags.env`
3. Valores por defecto en cada módulo 3. Valores por defecto en cada módulo
@ -166,7 +85,6 @@ FORCE=1 ./refresh-hypr-tags.sh --get-latest
## Métodos de Instalación ## Métodos de Instalación
### Método 1: Instalación Completa Original ### Método 1: Instalación Completa Original
```bash ```bash
# Instalación estándar con todos los componentes # Instalación estándar con todos los componentes
chmod +x install.sh chmod +x install.sh
@ -174,20 +92,17 @@ chmod +x install.sh
``` ```
Ahora, este método automáticamente: Ahora, este método automáticamente:
- Carga versiones desde `hypr-tags.env` - Carga versiones desde `hypr-tags.env`
- Instala wayland-protocols desde el origen antes de Hyprland - Instala wayland-protocols desde el origen antes de Hyprland
- Mantiene el orden correcto de dependencias - Mantiene el orden correcto de dependencias
### Método 2: Solo el Stack de Hyprland ### Método 2: Solo el Stack de Hyprland
```bash ```bash
# Instala solo Hyprland y componentes esenciales # Instala solo Hyprland y componentes esenciales
./update-hyprland.sh --install ./update-hyprland.sh --install
``` ```
### Método 3: Instalación Nueva con Últimas Versiones ### Método 3: Instalación Nueva con Últimas Versiones
```bash ```bash
# Obtiene últimas versiones de GitHub e instala # Obtiene últimas versiones de GitHub e instala
./update-hyprland.sh --fetch-latest --install ./update-hyprland.sh --fetch-latest --install
@ -197,7 +112,6 @@ Ahora, este método automáticamente:
``` ```
### Método 4: Instalación con Preset ### Método 4: Instalación con Preset
```bash ```bash
# Usa un preset para elecciones automáticas # Usa un preset para elecciones automáticas
./install.sh --preset ./preset.sh ./install.sh --preset ./preset.sh
@ -210,7 +124,6 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x-
### Actualizar a la Última Versión de Hyprland ### Actualizar a la Última Versión de Hyprland
#### Opción A: Descubrimiento Automático #### Opción A: Descubrimiento Automático
```bash ```bash
# Obtiene las últimas etiquetas e instala (respeta versiones fijadas en hypr-tags.env) # Obtiene las últimas etiquetas e instala (respeta versiones fijadas en hypr-tags.env)
./update-hyprland.sh --fetch-latest --install ./update-hyprland.sh --fetch-latest --install
@ -220,14 +133,12 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x-
``` ```
#### Opción B: Versión Específica #### Opción B: Versión Específica
```bash ```bash
# Establece una versión específica de Hyprland # Establece una versión específica de Hyprland
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install ./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
``` ```
#### Opción C: Probar Antes de Instalar #### Opción C: Probar Antes de Instalar
```bash ```bash
# Prueba la compilación primero, luego instala si es exitoso # Prueba la compilación primero, luego instala si es exitoso
./update-hyprland.sh --fetch-latest --dry-run ./update-hyprland.sh --fetch-latest --dry-run
@ -260,7 +171,6 @@ 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. 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: Ruta recomendada:
```bash ```bash
# Asegura que hypr-tags.env apunte a la versión objetivo (omitir si ya es v0.51.1) # 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 ./update-hyprland.sh --set HYPRLAND=v0.51.1
@ -270,17 +180,13 @@ Ruta recomendada:
``` ```
Notas: Notas:
- El comando garantiza y ejecuta, según sea necesario: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine y luego hyprland. - 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. - 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: - Opcional: agrega --with-deps para reinstalar dependencias primero:
```bash ```bash
./update-hyprland.sh --with-deps --install --only hyprland ./update-hyprland.sh --with-deps --install --only hyprland
``` ```
- Puedes hacer un dry-run primero para validar: - Puedes hacer un dry-run primero para validar:
```bash ```bash
./update-hyprland.sh --dry-run --only hyprland ./update-hyprland.sh --dry-run --only hyprland
``` ```
@ -288,7 +194,6 @@ Notas:
## Pruebas con Dry-Run ## Pruebas con Dry-Run
### ¿Por qué usar Dry-Run? ### ¿Por qué usar Dry-Run?
- Probar compatibilidad de compilación antes de instalar - Probar compatibilidad de compilación antes de instalar
- Validar combinaciones de versiones - Validar combinaciones de versiones
- Depurar problemas de compilación sin cambios en el sistema - Depurar problemas de compilación sin cambios en el sistema
@ -321,7 +226,6 @@ Notas:
``` ```
### Limitaciones de Dry-Run ### Limitaciones de Dry-Run
- **Las dependencias se instalan**: apt se ejecuta para asegurar la compilación - **Las dependencias se instalan**: apt se ejecuta para asegurar la compilación
- **Requisitos de pkg-config**: Algunos componentes necesitan requisitos instalados en el sistema - **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 - **Sin cambios en el sistema**: No instala archivos en /usr/local o /usr
@ -329,9 +233,7 @@ Notas:
## Gestión de Logs ## Gestión de Logs
### Ubicación de Logs ### Ubicación de Logs
Todas las actividades de construcción generan logs con sello de tiempo en: Todas las actividades de construcción generan logs con sello de tiempo en:
``` ```
Install-Logs/ Install-Logs/
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Log principal de instalación ├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Log principal de instalación
@ -341,7 +243,6 @@ Install-Logs/
``` ```
### Análisis de Logs ### Análisis de Logs
```bash ```bash
# Ver el log de instalación más reciente # Ver el log de instalación más reciente
ls -t Install-Logs/*.log | head -1 | xargs less ls -t Install-Logs/*.log | head -1 | xargs less
@ -354,10 +255,8 @@ cat Install-Logs/build-dry-run-*.log
``` ```
### Retención de Logs ### Retención de Logs
- Los logs se acumulan con el tiempo para referencia histórica - Los logs se acumulan con el tiempo para referencia histórica
- Se recomienda limpieza manual periódica: - Se recomienda limpieza manual periódica:
```bash ```bash
# Mantener solo logs de los últimos 30 días # Mantener solo logs de los últimos 30 días
find Install-Logs/ -name "*.log" -mtime +30 -delete find Install-Logs/ -name "*.log" -mtime +30 -delete
@ -368,7 +267,6 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
### Gestión de Versiones ### Gestión de Versiones
#### Forzar la Actualización de Todas las Etiquetas #### Forzar la Actualización de Todas las Etiquetas
```bash ```bash
# Sobrescribe valores fijados en hypr-tags.env con las últimas versiones # Sobrescribe valores fijados en hypr-tags.env con las últimas versiones
./update-hyprland.sh --fetch-latest --force-update --dry-run ./update-hyprland.sh --fetch-latest --force-update --dry-run
@ -377,7 +275,6 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
``` ```
#### Copia de Seguridad y Restauración #### Copia de Seguridad y Restauración
```bash ```bash
# Las etiquetas se respaldan automáticamente cuando cambian # Las etiquetas se respaldan automáticamente cuando cambian
# Restaurar la copia más reciente # Restaurar la copia más reciente
@ -385,7 +282,6 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
``` ```
#### Múltiples Conjuntos de Versiones #### Múltiples Conjuntos de Versiones
```bash ```bash
# Guardar configuración actual # Guardar configuración actual
cp hypr-tags.env hypr-tags-stable.env cp hypr-tags.env hypr-tags-stable.env
@ -400,7 +296,6 @@ cp hypr-tags-stable.env hypr-tags.env
### Integración con el Entorno ### Integración con el Entorno
#### PKG_CONFIG_PATH personalizado #### PKG_CONFIG_PATH personalizado
```bash ```bash
# Asegurar que /usr/local tenga prioridad # Asegurar que /usr/local tenga prioridad
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}" export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
@ -408,7 +303,6 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PK
``` ```
#### Compilaciones en Paralelo #### Compilaciones en Paralelo
```bash ```bash
# Controlar el paralelismo (por defecto: todos los núcleos) # Controlar el paralelismo (por defecto: todos los núcleos)
export MAKEFLAGS="-j4" export MAKEFLAGS="-j4"
@ -418,7 +312,6 @@ export MAKEFLAGS="-j4"
### Flujo de Trabajo de Desarrollo ### Flujo de Trabajo de Desarrollo
#### Probar Nuevos Lanzamientos #### Probar Nuevos Lanzamientos
```bash ```bash
# 1. Crear entorno de pruebas # 1. Crear entorno de pruebas
cp hypr-tags.env hypr-tags.backup cp hypr-tags.env hypr-tags.backup
@ -434,7 +327,6 @@ cp hypr-tags.env hypr-tags.backup
``` ```
#### Desarrollo de Componentes #### Desarrollo de Componentes
```bash ```bash
# Solo instalar dependencias # Solo instalar dependencias
./update-hyprland.sh --with-deps --dry-run ./update-hyprland.sh --with-deps --dry-run
@ -451,11 +343,9 @@ tail -f Install-Logs/install-*hyprland*.log
### Problemas Comunes ### Problemas Comunes
#### Falla de Configuración con CMake #### Falla de Configuración con CMake
**Síntomas**: "Package dependency requirement not satisfied" **Síntomas**: "Package dependency requirement not satisfied"
**Soluciones**: **Soluciones**:
```bash ```bash
# Instalar requisitos faltantes # Instalar requisitos faltantes
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang ./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
@ -468,11 +358,9 @@ rm -rf hyprland aquamarine hyprutils hyprlang
``` ```
#### Errores de Compilación #### Errores de Compilación
**Síntomas**: "too many errors emitted" **Síntomas**: "too many errors emitted"
**Soluciones**: **Soluciones**:
```bash ```bash
# Actualizar dependencias núcleo primero # Actualizar dependencias núcleo primero
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang ./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
@ -482,11 +370,9 @@ grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log
``` ```
#### Etiqueta No Encontrada #### Etiqueta No Encontrada
**Síntomas**: "Remote branch X not found" **Síntomas**: "Remote branch X not found"
**Soluciones**: **Soluciones**:
```bash ```bash
# Ver etiquetas disponibles # Ver etiquetas disponibles
git ls-remote --tags https://github.com/hyprwm/Hyprland git ls-remote --tags https://github.com/hyprwm/Hyprland
@ -498,34 +384,31 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
### Pasos de Depuración ### Pasos de Depuración
1. **Verificar compatibilidad del sistema**: 1. **Verificar compatibilidad del sistema**:
```bash
```bash # Verificar versión de Debian
# Verificar versión de Debian cat /etc/os-release
cat /etc/os-release
# Asegurar deb-src habilitado
# Asegurar deb-src habilitado grep -E "^deb-src" /etc/apt/sources.list
grep -E "^deb-src" /etc/apt/sources.list ```
```
2. **Verificar entorno**: 2. **Verificar entorno**:
```bash
```bash # Ver etiquetas actuales
# Ver etiquetas actuales cat hypr-tags.env
cat hypr-tags.env
# Probar dry-run primero
# Probar dry-run primero ./update-hyprland.sh --dry-run --only hyprland
./update-hyprland.sh --dry-run --only hyprland ```
```
3. **Analizar logs**: 3. **Analizar logs**:
```bash
```bash # Errores más recientes
# Errores más recientes grep -i "error\|fail" Install-Logs/*.log | tail -20
grep -i "error\|fail" Install-Logs/*.log | tail -20
# Problemas por módulo
# Problemas por módulo ls -la Install-Logs/install-*[component]*.log
ls -la Install-Logs/install-*[component]*.log ```
```
### Obtener Ayuda ### Obtener Ayuda
@ -537,7 +420,6 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
## Migración desde Versiones Previas ## Migración desde Versiones Previas
### Instalaciones Existentes ### Instalaciones Existentes
Las nuevas herramientas funcionan junto a instalaciones existentes: Las nuevas herramientas funcionan junto a instalaciones existentes:
```bash ```bash
@ -549,7 +431,6 @@ Las nuevas herramientas funcionan junto a instalaciones existentes:
``` ```
### Convertir a Gestión por Etiquetas ### Convertir a Gestión por Etiquetas
```bash ```bash
# Las versiones actuales se guardan en hypr-tags.env automáticamente # Las versiones actuales se guardan en hypr-tags.env automáticamente
# Verificar con: # Verificar con:

View File

@ -6,15 +6,13 @@ This guide covers the enhanced installation and upgrade workflows for KooL's Deb
1. [Overview](#overview) 1. [Overview](#overview)
2. [New Features](#new-features) 2. [New Features](#new-features)
3. [Flags Reference](#flags-reference) 3. [Central Version Management](#central-version-management)
4. [Debian 13 (Trixie) Compatibility Mode](#debian-13-trixie-compatibility-mode) 4. [Installation Methods](#installation-methods)
5. [Central Version Management](#central-version-management) 5. [Upgrade Workflows](#upgrade-workflows)
6. [Installation Methods](#installation-methods) 6. [Dry-Run Testing](#dry-run-testing)
7. [Upgrade Workflows](#upgrade-workflows) 7. [Log Management](#log-management)
8. [Dry-Run Testing](#dry-run-testing) 8. [Advanced Usage](#advanced-usage)
9. [Log Management](#log-management) 9. [Troubleshooting](#troubleshooting)
10. [Advanced Usage](#advanced-usage)
11. [Troubleshooting](#troubleshooting)
## Overview ## Overview
@ -29,7 +27,6 @@ The Debian-Hyprland project now includes enhanced automation and management tool
## New Features ## New Features
### Enhanced install.sh ### Enhanced install.sh
The original install.sh script now includes: The original install.sh script now includes:
- **Tag consistency**: Reads `hypr-tags.env` and exports version variables to all modules - **Tag consistency**: Reads `hypr-tags.env` and exports version variables to all modules
@ -39,126 +36,48 @@ The original install.sh script now includes:
### New Scripts ### New Scripts
#### update-hyprland.sh #### update-hyprland.sh
A focused tool for managing and building just the Hyprland stack: A focused tool for managing and building just the Hyprland stack:
```bash ```bash
chmod +x ./update-hyprland.sh chmod +x ./update-hyprland.sh
./update-hyprland.sh --help # View all options ./update-hyprland.sh --help # View all options
``` ```
Key flags: Key flags:
- --fetch-latest: pull latest release tags from GitHub - --fetch-latest: pull latest release tags from GitHub
- --force-update: override pinned values in hypr-tags.env (equivalent to FORCE=1) - --force-update: override pinned values in hypr-tags.env (equivalent to FORCE=1)
- --dry-run / --install: compile-only or compile+install - --dry-run / --install: compile-only or compile+install
- --only / --skip: limit which modules run - --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 #### dry-run-build.sh
A testing tool that compiles components without installing: A testing tool that compiles components without installing:
```bash ```bash
chmod +x ./dry-run-build.sh chmod +x ./dry-run-build.sh
./dry-run-build.sh --help # View all options ./dry-run-build.sh --help # View all options
``` ```
#### wayland-protocols-src.sh #### wayland-protocols-src.sh
A new module that builds wayland-protocols from source to satisfy Hyprland 0.51.x requirements. 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 <list>` / `--skip <list>`: 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 <file>`: 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 ## Central Version Management
### hypr-tags.env ### hypr-tags.env
This file contains version tags for all Hyprland components: This file contains version tags for all Hyprland components:
```bash ```bash
# Current versions (example) # Current versions (example)
HYPRLAND_TAG=v0.53.1 HYPRLAND_TAG=v0.51.1
AQUAMARINE_TAG=v0.10.0 AQUAMARINE_TAG=v0.9.3
HYPRUTILS_TAG=v0.11.0 HYPRUTILS_TAG=v0.8.2
HYPRLANG_TAG=v0.6.8 HYPRLANG_TAG=v0.6.4
HYPRGRAPHICS_TAG=v0.5.0 HYPRGRAPHICS_TAG=v0.1.5
HYPRTOOLKIT_TAG=v0.4.1
HYPRWAYLAND_SCANNER_TAG=v0.4.5 HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_QT_SUPPORT_TAG=v0.1.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.5 HYPRLAND_QTUTILS_TAG=v0.1.4
HYPRLAND_GUIUTILS_TAG=v0.2.0 WAYLAND_PROTOCOLS_TAG=1.45
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 ### Version Override Priority
1. Environment variables (exported) 1. Environment variables (exported)
2. hypr-tags.env file values 2. hypr-tags.env file values
3. Default hardcoded values in each module 3. Default hardcoded values in each module
@ -166,7 +85,6 @@ FORCE=1 ./refresh-hypr-tags.sh --get-latest
## Installation Methods ## Installation Methods
### Method 1: Original Full Installation ### Method 1: Original Full Installation
```bash ```bash
# Standard installation with all components # Standard installation with all components
chmod +x install.sh chmod +x install.sh
@ -174,20 +92,17 @@ chmod +x install.sh
``` ```
This method now automatically: This method now automatically:
- Loads versions from `hypr-tags.env` - Loads versions from `hypr-tags.env`
- Installs wayland-protocols from source before Hyprland - Installs wayland-protocols from source before Hyprland
- Maintains proper dependency ordering - Maintains proper dependency ordering
### Method 2: Hyprland Stack Only ### Method 2: Hyprland Stack Only
```bash ```bash
# Install only Hyprland and essential components # Install only Hyprland and essential components
./update-hyprland.sh --install ./update-hyprland.sh --install
``` ```
### Method 3: Fresh Installation with Latest Versions ### Method 3: Fresh Installation with Latest Versions
```bash ```bash
# Fetch latest GitHub releases and install # Fetch latest GitHub releases and install
./update-hyprland.sh --fetch-latest --install ./update-hyprland.sh --fetch-latest --install
@ -197,7 +112,6 @@ This method now automatically:
``` ```
### Method 4: Preset-Based Installation ### Method 4: Preset-Based Installation
```bash ```bash
# Use preset file for automated choices # Use preset file for automated choices
./install.sh --preset ./preset.sh ./install.sh --preset ./preset.sh
@ -210,7 +124,6 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
### Upgrading to Latest Hyprland Release ### Upgrading to Latest Hyprland Release
#### Option A: Automatic Discovery #### Option A: Automatic Discovery
```bash ```bash
# Fetch latest tags and install (respects pins in hypr-tags.env) # Fetch latest tags and install (respects pins in hypr-tags.env)
./update-hyprland.sh --fetch-latest --install ./update-hyprland.sh --fetch-latest --install
@ -220,14 +133,12 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
``` ```
#### Option B: Specific Version #### Option B: Specific Version
```bash ```bash
# Set specific Hyprland version # Set specific Hyprland version
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install ./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
``` ```
#### Option C: Test Before Installing #### Option C: Test Before Installing
```bash ```bash
# Test compilation first, then install if successful # Test compilation first, then install if successful
./update-hyprland.sh --fetch-latest --dry-run ./update-hyprland.sh --fetch-latest --dry-run
@ -260,7 +171,6 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
If youre currently on Hyprland 0.49 or 0.50.x, you can upgrade directly to 0.51.1 without a full reinstall. If youre currently on Hyprland 0.49 or 0.50.x, you can upgrade directly to 0.51.1 without a full reinstall.
Recommended path: Recommended path:
```bash ```bash
# Ensure hypr-tags.env pins the target version (skip if already v0.51.1) # Ensure hypr-tags.env pins the target version (skip if already v0.51.1)
./update-hyprland.sh --set HYPRLAND=v0.51.1 ./update-hyprland.sh --set HYPRLAND=v0.51.1
@ -270,17 +180,13 @@ Recommended path:
``` ```
Notes: Notes:
- The command will automatically ensure and run, as needed: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine, then hyprland. - 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 youre recovering from a failed/partial setup. - 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 youre recovering from a failed/partial setup.
- Optional: add --with-deps to re-run dependency installation first: - Optional: add --with-deps to re-run dependency installation first:
```bash ```bash
./update-hyprland.sh --with-deps --install --only hyprland ./update-hyprland.sh --with-deps --install --only hyprland
``` ```
- You can dry-run first to validate: - You can dry-run first to validate:
```bash ```bash
./update-hyprland.sh --dry-run --only hyprland ./update-hyprland.sh --dry-run --only hyprland
``` ```
@ -288,7 +194,6 @@ Notes:
## Dry-Run Testing ## Dry-Run Testing
### Why Use Dry-Run? ### Why Use Dry-Run?
- Test compilation compatibility before installing - Test compilation compatibility before installing
- Validate version combinations - Validate version combinations
- Debug build issues without system changes - Debug build issues without system changes
@ -321,7 +226,6 @@ Notes:
``` ```
### Dry-Run Limitations ### Dry-Run Limitations
- **Dependencies still install**: apt operations run to ensure compilation succeeds - **Dependencies still install**: apt operations run to ensure compilation succeeds
- **pkg-config requirements**: Some components need system-installed prerequisites - **pkg-config requirements**: Some components need system-installed prerequisites
- **No system changes**: No files installed to /usr/local or /usr - **No system changes**: No files installed to /usr/local or /usr
@ -329,9 +233,7 @@ Notes:
## Log Management ## Log Management
### Log Location ### Log Location
All build activities generate timestamped logs in: All build activities generate timestamped logs in:
``` ```
Install-Logs/ Install-Logs/
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Main install log ├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Main install log
@ -341,7 +243,6 @@ Install-Logs/
``` ```
### Log Analysis ### Log Analysis
```bash ```bash
# View most recent install log # View most recent install log
ls -t Install-Logs/*.log | head -1 | xargs less ls -t Install-Logs/*.log | head -1 | xargs less
@ -354,10 +255,8 @@ cat Install-Logs/build-dry-run-*.log
``` ```
### Log Retention ### Log Retention
- Logs accumulate over time for historical reference - Logs accumulate over time for historical reference
- Manual cleanup recommended periodically: - Manual cleanup recommended periodically:
```bash ```bash
# Keep only logs from last 30 days # Keep only logs from last 30 days
find Install-Logs/ -name "*.log" -mtime +30 -delete find Install-Logs/ -name "*.log" -mtime +30 -delete
@ -368,7 +267,6 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
### Tag Management ### Tag Management
#### Force Update All Tags #### Force Update All Tags
```bash ```bash
# Override pinned values in hypr-tags.env to the latest releases # Override pinned values in hypr-tags.env to the latest releases
./update-hyprland.sh --fetch-latest --force-update --dry-run ./update-hyprland.sh --fetch-latest --force-update --dry-run
@ -377,7 +275,6 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
``` ```
#### Backup and Restore #### Backup and Restore
```bash ```bash
# Tags are automatically backed up on changes # Tags are automatically backed up on changes
# Restore most recent backup # Restore most recent backup
@ -385,7 +282,6 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
``` ```
#### Multiple Version Sets #### Multiple Version Sets
```bash ```bash
# Save current configuration # Save current configuration
cp hypr-tags.env hypr-tags-stable.env cp hypr-tags.env hypr-tags-stable.env
@ -400,7 +296,6 @@ cp hypr-tags-stable.env hypr-tags.env
### Environment Integration ### Environment Integration
#### Custom PKG_CONFIG_PATH #### Custom PKG_CONFIG_PATH
```bash ```bash
# Ensure /usr/local takes precedence # Ensure /usr/local takes precedence
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}" export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
@ -408,7 +303,6 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PK
``` ```
#### Parallel Builds #### Parallel Builds
```bash ```bash
# Control build parallelism (default: all cores) # Control build parallelism (default: all cores)
export MAKEFLAGS="-j4" export MAKEFLAGS="-j4"
@ -418,7 +312,6 @@ export MAKEFLAGS="-j4"
### Development Workflow ### Development Workflow
#### Testing New Releases #### Testing New Releases
```bash ```bash
# 1. Create test environment # 1. Create test environment
cp hypr-tags.env hypr-tags.backup cp hypr-tags.env hypr-tags.backup
@ -434,7 +327,6 @@ cp hypr-tags.env hypr-tags.backup
``` ```
#### Component Development #### Component Development
```bash ```bash
# Install dependencies only # Install dependencies only
./update-hyprland.sh --with-deps --dry-run ./update-hyprland.sh --with-deps --dry-run
@ -451,11 +343,9 @@ tail -f Install-Logs/install-*hyprland*.log
### Common Issues ### Common Issues
#### CMake Configuration Fails #### CMake Configuration Fails
**Symptoms**: "Package dependency requirement not satisfied" **Symptoms**: "Package dependency requirement not satisfied"
**Solutions**: **Solutions**:
```bash ```bash
# Install missing prerequisites # Install missing prerequisites
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang ./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
@ -468,11 +358,9 @@ rm -rf hyprland aquamarine hyprutils hyprlang
``` ```
#### Compilation Errors #### Compilation Errors
**Symptoms**: "too many errors emitted" **Symptoms**: "too many errors emitted"
**Solutions**: **Solutions**:
```bash ```bash
# Update core dependencies first # Update core dependencies first
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang ./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
@ -482,11 +370,9 @@ grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log
``` ```
#### Tag Not Found #### Tag Not Found
**Symptoms**: "Remote branch X not found" **Symptoms**: "Remote branch X not found"
**Solutions**: **Solutions**:
```bash ```bash
# Check available tags # Check available tags
git ls-remote --tags https://github.com/hyprwm/Hyprland git ls-remote --tags https://github.com/hyprwm/Hyprland
@ -498,34 +384,31 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
### Debug Steps ### Debug Steps
1. **Check system compatibility**: 1. **Check system compatibility**:
```bash
```bash # Verify Debian version
# Verify Debian version cat /etc/os-release
cat /etc/os-release
# Ensure deb-src enabled
# Ensure deb-src enabled grep -E "^deb-src" /etc/apt/sources.list
grep -E "^deb-src" /etc/apt/sources.list ```
```
2. **Verify environment**: 2. **Verify environment**:
```bash
```bash # Check current tags
# Check current tags cat hypr-tags.env
cat hypr-tags.env
# Test dry-run first
# Test dry-run first ./update-hyprland.sh --dry-run --only hyprland
./update-hyprland.sh --dry-run --only hyprland ```
```
3. **Analyze logs**: 3. **Analyze logs**:
```bash
```bash # Most recent errors
# Most recent errors grep -i "error\|fail" Install-Logs/*.log | tail -20
grep -i "error\|fail" Install-Logs/*.log | tail -20
# Module-specific issues
# Module-specific issues ls -la Install-Logs/install-*[component]*.log
ls -la Install-Logs/install-*[component]*.log ```
```
### Getting Help ### Getting Help
@ -537,7 +420,6 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
## Migration from Previous Versions ## Migration from Previous Versions
### Existing Installations ### Existing Installations
The new tools work alongside existing installations: The new tools work alongside existing installations:
```bash ```bash
@ -549,7 +431,6 @@ The new tools work alongside existing installations:
``` ```
### Converting to Tag Management ### Converting to Tag Management
```bash ```bash
# Current versions are saved to hypr-tags.env automatically # Current versions are saved to hypr-tags.env automatically
# Verify with: # Verify with:
@ -559,4 +440,4 @@ cat hypr-tags.env
./update-hyprland.sh --set HYPRLAND=v0.51.1 ./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. The enhanced workflow provides better control, testing capabilities, and automation while maintaining full compatibility with the original installation process.

View File

@ -89,9 +89,9 @@ sudo nano /etc/apt/sources.list
- 10 October 2025 Update! - 10 October 2025 Update!
- Hyprland-Debian nows builds 0.51.1 from source! - Hyprland-Debian nows builds 0.51.1 from source!
- The installer now can be used to install newer releases later - 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 - 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). > Note: At this time Debian 13 (Trixie) can't compile v0.52.2+
> Use the provided update/install scripts with `--build-trixie` if needed. > Debian Testing and SID can
- You do not have to re-install everything, but re-running `install.sh` works also - You do not have to re-install everything, but re-running `install.sh` works also
- Instructions are available in English and Spanish - Instructions are available in English and Spanish

View File

@ -2,17 +2,14 @@
# You can edit these values or let update-hyprland.sh manage them. # You can edit these values or let update-hyprland.sh manage them.
# Each module script reads its TAG from these environment variables if set. # Each module script reads its TAG from these environment variables if set.
# Hyprland 0.53.x stack (includes hyprwire) HYPRLAND_TAG=v0.52.2
HYPRLAND_TAG=v0.53.1
AQUAMARINE_TAG=v0.10.0 AQUAMARINE_TAG=v0.10.0
HYPRUTILS_TAG=v0.11.0 HYPRUTILS_TAG=v0.10.4
HYPRLANG_TAG=v0.6.8 HYPRLANG_TAG=v0.6.7
HYPRGRAPHICS_TAG=v0.5.0 HYPRGRAPHICS_TAG=v0.4.0
HYPRTOOLKIT_TAG=v0.4.1 HYPRTOOLKIT_TAG=v0.4.1
HYPRWAYLAND_SCANNER_TAG=v0.4.5 HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_PROTOCOLS_TAG=v0.7.0
HYPRLAND_QT_SUPPORT_TAG=v0.1.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.5
HYPRLAND_GUIUTILS_TAG=v0.2.0 HYPRLAND_GUIUTILS_TAG=v0.2.0
HYPRWIRE_TAG=v0.2.1
WAYLAND_PROTOCOLS_TAG=1.46 WAYLAND_PROTOCOLS_TAG=1.46

13
hypr-tags.env-v.053 Normal file
View File

@ -0,0 +1,13 @@
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

View File

@ -72,14 +72,7 @@ fi
printf "${INFO} Installing ${YELLOW}hyprland-guiutils $tag${RESET} ...\n" printf "${INFO} Installing ${YELLOW}hyprland-guiutils $tag${RESET} ...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-guiutils.git; then if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-guiutils.git; then
cd hyprland-guiutils || exit 1 cd hyprland-guiutils || exit 1
# Prefer /usr/local Hypr* libs so we don't accidentally link against copies in /lib. cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH:-}"
export LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH:-}"
export LDFLAGS="-L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,-rpath-link,/usr/local/lib ${LDFLAGS:-}"
export CPPFLAGS="-I/usr/local/include ${CPPFLAGS:-}"
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF` cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
if [ $DO_INSTALL -eq 1 ]; then if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then

View File

@ -118,16 +118,6 @@ EOF
sed -ri 's|^\s*#embed\s+"\.{0,2}/\.{0,2}/example/hyprland\.conf"\s*$|#include "defaultConfig.bytes.inc"|g' src/config/defaultConfig.hpp || true sed -ri 's|^\s*#embed\s+"\.{0,2}/\.{0,2}/example/hyprland\.conf"\s*$|#include "defaultConfig.bytes.inc"|g' src/config/defaultConfig.hpp || true
fi fi
# Compatibility: some toolchains/libstdc++ do not support std::string operator+ with std::string_view.
# Hyprland hyprctl uses a std::string_view filename; ensure it is converted explicitly.
HYPRCTL_MAIN="$(pwd)/hyprctl/src/main.cpp"
if [ -f "$HYPRCTL_MAIN" ] && grep -q "std::string socketPath" "$HYPRCTL_MAIN"; then
# Only patch if we see a "+ filename" concatenation.
if grep -qE '\+\s*filename\s*;' "$HYPRCTL_MAIN"; then
sed -ri 's/\+\s*filename\s*;/+ std::string(filename);/g' "$HYPRCTL_MAIN" || true
fi
fi
# Apply patch only if it applies cleanly; otherwise skip # Apply patch only if it applies cleanly; otherwise skip
if [ -f ../assets/0001-fix-hyprland-compile-issue.patch ]; then if [ -f ../assets/0001-fix-hyprland-compile-issue.patch ]; then
if patch -p1 --dry-run <../assets/0001-fix-hyprland-compile-issue.patch >/dev/null 2>&1; then if patch -p1 --dry-run <../assets/0001-fix-hyprland-compile-issue.patch >/dev/null 2>&1; then

View File

@ -12,33 +12,10 @@ if [ -z "${HYPRWIRE_TAG:-}" ]; then
fi fi
if [ -n "${HYPRWIRE_TAG:-}" ]; then tag="$HYPRWIRE_TAG"; fi if [ -n "${HYPRWIRE_TAG:-}" ]; then tag="$HYPRWIRE_TAG"; fi
# Dry-run support + shim controls # Dry-run support
DO_INSTALL=1 DO_INSTALL=1
FORCE_SHIM=0 if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
NO_SHIM=0
for arg in "$@"; do
case "$arg" in
--dry-run)
DO_INSTALL=0
;;
# Force the compatibility shim used on Debian 13 (trixie) toolchains.
# This is intentionally distro-named so it's obvious what it does for most users.
--build-trixie|--force-shim)
FORCE_SHIM=1
;;
# For testing/sid (or any toolchain that supports std::vector::append_range), allow opting out.
--no-shim)
NO_SHIM=1
;;
esac
done
if [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0 DO_INSTALL=0
fi
if [ $DO_INSTALL -eq 0 ]; then
echo "${NOTE} DRY RUN: install step will be skipped." echo "${NOTE} DRY RUN: install step will be skipped."
fi fi
@ -71,71 +48,30 @@ fi
if git clone --recursive -b "$tag" https://github.com/hyprwm/hyprwire.git; then if git clone --recursive -b "$tag" https://github.com/hyprwm/hyprwire.git; then
cd hyprwire || exit 1 cd hyprwire || exit 1
# Decide whether we need the append_range compatibility shim. # Temporary compatibility shim for compilers/libstdc++ without std::vector::append_range
# On Debian 13 (trixie), libstdc++ typically lacks std::vector::append_range, so we patch. cat > append_range_compat.hpp <<'EOF'
# On newer toolchains (testing/sid), prefer building upstream unmodified.
NEED_SHIM=0
if [ "$NO_SHIM" -eq 1 ]; then
NEED_SHIM=0
elif [ "$FORCE_SHIM" -eq 1 ]; then
NEED_SHIM=1
else
CXX_TEST="${CXX:-c++}"
TMPD="$(mktemp -d)"
cat >"$TMPD/append_range_test.cpp" <<'EOF'
#include <vector>
int main() {
std::vector<unsigned char> v;
v.append_range(std::vector<unsigned char>{1,2,3});
return 0;
}
EOF
if "$CXX_TEST" -std=c++23 -c "$TMPD/append_range_test.cpp" -o /dev/null >/dev/null 2>&1; then
NEED_SHIM=0
else
NEED_SHIM=1
fi
rm -rf "$TMPD"
fi
if [ "$NEED_SHIM" -eq 1 ]; then
echo "${NOTE} Applying append_range compatibility shim (use --no-shim to disable; --build-trixie to force)."
# Temporary compatibility shim for toolchains where libstdc++ lacks std::vector::append_range (C++23 library feature).
# Note: append_range in upstream accepts temporaries (e.g. encodeVarInt(...) returns a temporary vector). To support that,
# we bind the expression to a named auto&& first.
cat > append_range_compat.hpp <<'EOF'
#pragma once #pragma once
#include <iterator> #include <iterator>
#define APPEND_RANGE(vec, ...) (vec).insert((vec).end(), std::begin(__VA_ARGS__), std::end(__VA_ARGS__))
// Append any begin/end range to a container, supporting temporaries by binding to auto&&.
#define APPEND_RANGE(vec, ...) do { \
auto&& _r = (__VA_ARGS__); \
(vec).insert((vec).end(), std::begin(_r), std::end(_r)); \
} while(0)
EOF EOF
# Replace X.append_range(Y) -> APPEND_RANGE(X, Y) only where it appears
# Replace X.(.|->)append_range(Y) -> APPEND_RANGE(X, Y) only where it appears PATCH_FILES=$(grep -RIl --exclude-dir=.git 'append_range\(' . || true)
PATCH_FILES=$(grep -RIl --exclude-dir=.git -F 'append_range(' . || true) if [ -n "$PATCH_FILES" ]; then
if [ -n "$PATCH_FILES" ]; then # Replace LHS .append_range(arg...) with APPEND_RANGE(LHS, arg...)
# LHS: identifiers and common member/ptr chains (this->obj, ns::obj.member) # LHS: identifiers and common member/ptr chains (this->obj, ns::obj.member)
echo "$PATCH_FILES" | xargs -r sed -ri 's/([A-Za-z_][A-Za-z0-9_:>.\-]+)\s*(\.|->)\s*append_range\s*\(/APPEND_RANGE(\1, /g' echo "$PATCH_FILES" | xargs -r sed -ri 's/([A-Za-z_][A-Za-z0-9_:\->\.]+)\s*\.\s*append_range\s*\(/APPEND_RANGE(\1, /g'
# Show any remaining occurrences # Show any remaining occurrences
REMAIN=$(grep -RIn --exclude-dir=.git -E '(\.|->)[[:space:]]*append_range[[:space:]]*\(' $PATCH_FILES || true) REMAIN=$(grep -RIn --exclude-dir=.git '\.\s*append_range\s*\(' $PATCH_FILES || true)
if [ -n "$REMAIN" ]; then if [ -n "$REMAIN" ]; then
echo "[WARN] Some append_range() calls remain unpatched:" >&2 echo "[WARN] Some append_range() calls remain unpatched:" >&2
echo "$REMAIN" >&2 echo "$REMAIN" >&2
fi
fi
# Absolute path for forced include
APPEND_HDR="$(pwd)/append_range_compat.hpp"
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_STANDARD=23 -DCMAKE_CXX_FLAGS="-include ${APPEND_HDR}"
else
echo "${NOTE} Toolchain supports std::vector::append_range; building hyprwire without shim."
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_STANDARD=23
fi fi
fi
# Absolute path for forced include
APPEND_HDR="$(pwd)/append_range_compat.hpp"
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_STANDARD=23 -DCMAKE_CXX_FLAGS="-include ${APPEND_HDR}"
cmake --build build -j "$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)" cmake --build build -j "$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)"
if [ $DO_INSTALL -eq 1 ]; then if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then

View File

@ -29,7 +29,6 @@ if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
fi fi
LOG="Install-Logs/install-$(date +%d-%H%M%S)_xdph.log" LOG="Install-Logs/install-$(date +%d-%H%M%S)_xdph.log"
MLOG="install-$(date +%d-%H%M%S)_xdph2.log"
# Check if the file exists and remove it # Check if the file exists and remove it
[[ -f "/usr/lib/xdg-desktop-portal-hyprland" ]] && sudo rm "/usr/lib/xdg-desktop-portal-hyprland" [[ -f "/usr/lib/xdg-desktop-portal-hyprland" ]] && sudo rm "/usr/lib/xdg-desktop-portal-hyprland"
@ -59,12 +58,11 @@ if git clone --recursive -b $tag "https://github.com/hyprwm/xdg-desktop-portal-h
cmake -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -B build cmake -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -B build
cmake --build build cmake --build build
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
printf "${OK} ${MAGENTA}xdph $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG" printf "${OK} ${MAGENTA}xdph $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else else
echo -e "${ERROR} Installation failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$MLOG" echo -e "${ERROR} Installation failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi fi
# Move the additional logs to Install-Logs directory mv $MLOG ../Install-Logs/ || true
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/ || true
cd .. cd ..
else else
echo -e "${ERROR} Download failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$LOG" echo -e "${ERROR} Download failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$LOG"

View File

@ -105,60 +105,6 @@ if is_ubuntu; then
exit 1 exit 1
fi 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 # install whiptails if detected not installed. Necessary for this version
if ! command -v whiptail >/dev/null; then if ! command -v whiptail >/dev/null; then
echo "${NOTE} - whiptail is not installed. Installing..." | tee -a "$LOG" echo "${NOTE} - whiptail is not installed. Installing..." | tee -a "$LOG"
@ -323,13 +269,7 @@ execute_script() {
if [ -f "$script_path" ]; then if [ -f "$script_path" ]; then
chmod +x "$script_path" chmod +x "$script_path"
if [ -x "$script_path" ]; then if [ -x "$script_path" ]; then
# Pass --build-trixie to all module scripts when in trixie compatibility mode. env "$script_path"
# 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 else
echo "Failed to make script '$script' executable." | tee -a "$LOG" echo "Failed to make script '$script' executable." | tee -a "$LOG"
fi fi
@ -383,9 +323,9 @@ load_preset() {
fi fi
} }
# Check if --preset argument is passed (order-independent) # Check if --preset argument is passed
if [ -n "${PRESET_FILE:-}" ]; then if [[ "$1" == "--preset" && -n "$2" ]]; then
load_preset "$PRESET_FILE" load_preset "$2"
fi fi
# List of services to check for active login managers # List of services to check for active login managers
@ -618,14 +558,6 @@ else
execute_script "hypridle.sh" execute_script "hypridle.sh"
fi fi
# Ensure /usr/local/lib is in the dynamic linker search path.
# Many Hypr* components install shared libraries into /usr/local/lib; without this,
# tools like hyprctl can fail to load (e.g. missing libhyprwire.so.*).
if ! sudo grep -qxF "/usr/local/lib" /etc/ld.so.conf.d/usr-local.conf 2>/dev/null; then
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf.d/usr-local.conf >/dev/null
fi
sudo ldconfig 2>/dev/null || true
#execute_script "imagemagick.sh" #this is for compiling from source. 07 Sep 2024 #execute_script "imagemagick.sh" #this is for compiling from source. 07 Sep 2024
# execute_script "waybar-git.sh" only if waybar on repo is old # execute_script "waybar-git.sh" only if waybar on repo is old

View File

@ -11,61 +11,20 @@ mkdir -p "$LOG_DIR"
TS=$(date +%F-%H%M%S) TS=$(date +%F-%H%M%S)
SUMMARY_LOG="$LOG_DIR/refresh-tags-$TS.log" 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 # Ensure tags file exists
if [[ ! -f "$TAGS_FILE" ]]; then if [[ ! -f "$TAGS_FILE" ]]; then
cat > "$TAGS_FILE" <<'EOF' cat > "$TAGS_FILE" <<'EOF'
# Default Hyprland stack versions HYPRLAND_TAG=v0.51.1
HYPRLAND_TAG=v0.53.1 AQUAMARINE_TAG=v0.9.3
AQUAMARINE_TAG=v0.10.0 HYPRUTILS_TAG=v0.8.2
HYPRUTILS_TAG=v0.11.0 HYPRLANG_TAG=v0.6.4
HYPRLANG_TAG=v0.6.8 HYPRGRAPHICS_TAG=v0.1.5
HYPRGRAPHICS_TAG=v0.5.0
HYPRTOOLKIT_TAG=v0.4.1
HYPRWAYLAND_SCANNER_TAG=v0.4.5 HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_QT_SUPPORT_TAG=v0.1.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.5 HYPRLAND_QTUTILS_TAG=v0.1.4
HYPRLAND_GUIUTILS_TAG=v0.2.0 HYPRWIRE_TAG=auto
HYPRWIRE_TAG=v0.2.1 WAYLAND_PROTOCOLS_TAG=1.45
WAYLAND_PROTOCOLS_TAG=1.46
EOF EOF
fi fi
@ -79,19 +38,16 @@ if ! command -v curl >/dev/null 2>&1; then
fi fi
# Map of env var -> repo # Map of env var -> repo
# (Some modules may not publish GitHub releases; in that case the tag may not refresh.)
declare -A repos=( declare -A repos=(
[HYPRLAND_TAG]="hyprwm/Hyprland" [HYPRLAND_TAG]="hyprwm/Hyprland"
[AQUAMARINE_TAG]="hyprwm/aquamarine" [AQUAMARINE_TAG]="hyprwm/aquamarine"
[HYPRUTILS_TAG]="hyprwm/hyprutils" [HYPRUTILS_TAG]="hyprwm/hyprutils"
[HYPRLANG_TAG]="hyprwm/hyprlang" [HYPRLANG_TAG]="hyprwm/hyprlang"
[HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics" [HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics"
[HYPRTOOLKIT_TAG]="hyprwm/hyprtoolkit"
[HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner" [HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner"
[HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols" [HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols"
[HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support" [HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support"
[HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils" [HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils"
[HYPRLAND_GUIUTILS_TAG]="hyprwm/hyprland-guiutils"
[HYPRWIRE_TAG]="hyprwm/hyprwire" [HYPRWIRE_TAG]="hyprwm/hyprwire"
) )
@ -103,18 +59,13 @@ while IFS='=' read -r k v; do
done < "$TAGS_FILE" done < "$TAGS_FILE"
# Fetch latest, but only update keys set to 'auto' or 'latest' unless forced # Fetch latest, but only update keys set to 'auto' or 'latest' unless forced
FORCE=${FORCE:-0}
changes=() changes=()
for key in "${!repos[@]}"; do for key in "${!repos[@]}"; do
repo="${repos[$key]}" repo="${repos[$key]}"
url="https://api.github.com/repos/$repo/releases/latest" url="https://api.github.com/repos/$repo/releases/latest"
echo "[INFO] Checking latest tag for $repo" | tee -a "$SUMMARY_LOG" 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; } [[ -z "$body" ]] && { echo "[WARN] Empty response for $repo" | tee -a "$SUMMARY_LOG"; continue; }
if command -v jq >/dev/null 2>&1; then if command -v jq >/dev/null 2>&1; then
tag=$(printf '%s' "$body" | jq -r '.tag_name // empty') tag=$(printf '%s' "$body" | jq -r '.tag_name // empty')

View File

@ -65,12 +65,6 @@ ONLY_LIST=""
SKIP_LIST="" SKIP_LIST=""
SET_ARGS=() 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() { usage() {
# Print the header comments (quick reference) followed by explicit flags overview # Print the header comments (quick reference) followed by explicit flags overview
sed -n '2,140p' "$0" | sed -n '/^# /p' | sed 's/^# \{0,1\}//' sed -n '2,140p' "$0" | sed -n '/^# /p' | sed 's/^# \{0,1\}//'
@ -91,8 +85,6 @@ Options:
--via-helper Use dry-run-build.sh to summarize a dry-run --via-helper Use dry-run-build.sh to summarize a dry-run
--minimal Build minimal stack before hyprland --minimal Build minimal stack before hyprland
--no-fetch Do not auto-fetch tags on install --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) --set K=V [...] Set one or more tags (e.g., HYPRLAND=v0.53.0)
EOF EOF
} }
@ -101,18 +93,16 @@ ensure_tags_file() {
if [[ ! -f "$TAGS_FILE" ]]; then if [[ ! -f "$TAGS_FILE" ]]; then
echo "[INFO] Creating default tags file: $TAGS_FILE" | tee -a "$SUMMARY_LOG" echo "[INFO] Creating default tags file: $TAGS_FILE" | tee -a "$SUMMARY_LOG"
cat >"$TAGS_FILE" <<'EOF' cat >"$TAGS_FILE" <<'EOF'
# Default Hyprland stack versions HYPRLAND_TAG=v0.50.1
# (You can override any of these via --set or by editing hypr-tags.env.) AQUAMARINE_TAG=v0.9.2
HYPRLAND_TAG=v0.53.1 HYPRUTILS_TAG=v0.8.2
AQUAMARINE_TAG=v0.10.0 HYPRLANG_TAG=v0.6.4
HYPRUTILS_TAG=v0.11.0 HYPRGRAPHICS_TAG=v0.1.5
HYPRLANG_TAG=v0.6.8
HYPRGRAPHICS_TAG=v0.5.0
HYPRWAYLAND_SCANNER_TAG=v0.4.5 HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.7.0 HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_QT_SUPPORT_TAG=v0.1.0 HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.5 HYPRLAND_QTUTILS_TAG=v0.1.4
HYPRWIRE_TAG=v0.2.1 HYPRWIRE_TAG=auto
EOF EOF
fi fi
} }
@ -291,20 +281,6 @@ run_stack() {
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}" export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_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 # Propagate system/bundled selection to hyprland.sh
if [[ $USE_SYSTEM_LIBS -eq 1 ]]; then if [[ $USE_SYSTEM_LIBS -eq 1 ]]; then
export USE_SYSTEM_HYPRLIBS=1 export USE_SYSTEM_HYPRLIBS=1
@ -520,33 +496,13 @@ run_stack() {
continue continue
} }
chmod +x "$script" || true 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 [[ $DO_DRY_RUN -eq 1 ]]; then
if DRY_RUN=1 "$script" "${extra_args[@]}"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi if DRY_RUN=1 "$script"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi
else else
if "$script" "${extra_args[@]}"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi if "$script"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi
fi fi
done done
# Ensure /usr/local/lib is in the dynamic linker search path after installs.
# Many Hypr* components install shared libraries into /usr/local/lib; without this,
# tools like hyprctl can fail to load (e.g. missing libhyprwire.so.*).
if [[ $DO_INSTALL -eq 1 ]]; then
echo "[INFO] Ensuring /usr/local/lib is in dynamic linker path" | tee -a "$SUMMARY_LOG"
if ! sudo grep -qxF "/usr/local/lib" /etc/ld.so.conf.d/usr-local.conf 2>/dev/null; then
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf.d/usr-local.conf >/dev/null
fi
sudo ldconfig || true
fi
{ {
printf "\nSummary:\n" printf "\nSummary:\n"
for mod in "${modules[@]}"; do for mod in "${modules[@]}"; do
@ -612,14 +568,6 @@ while [[ $# -gt 0 ]]; do
NO_FETCH=1 NO_FETCH=1
shift shift
;; ;;
--build-trixie)
TRIXIE_MODE="on"
shift
;;
--no-trixie)
TRIXIE_MODE="off"
shift
;;
--only) --only)
ONLY_LIST=${2:-} ONLY_LIST=${2:-}
shift 2 shift 2