Compare commits

...

4 Commits

Author SHA1 Message Date
Don Williams
c2a7c16cf4 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
2026-01-10 00:49:05 -05:00
Don Williams
1681658de3 Fixed hyprland 0.53 build for trixie found bug in xdph script
On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprland.sh
	modified:   xdph.sh
	modified:   ../install.sh
	modified:   ../update-hyprland.sh
2026-01-10 00:18:44 -05:00
Don Williams
de128b6fd4 Added selectable shim for hyprwire to allow building on trixie
On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprwire.sh
2026-01-09 23:38:09 -05:00
Don Williams
8e507a9fec Fixing build scrpt to work onm debian stable
On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/hyprland-guiutils.sh
2026-01-09 23:14:35 -05:00
13 changed files with 632 additions and 150 deletions

View File

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

View File

@ -6,13 +6,15 @@ 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. [Gestión Central de Versiones](#gestión-central-de-versiones) 3. [Referencia de Flags](#referencia-de-flags)
4. [Métodos de Instalación](#métodos-de-instalación) 4. [Modo de Compatibilidad Debian 13 (Trixie)](#modo-de-compatibilidad-debian-13-trixie)
5. [Flujos de Actualización](#flujos-de-actualización) 5. [Gestión Central de Versiones](#gestión-central-de-versiones)
6. [Pruebas con Dry-Run](#pruebas-con-dry-run) 6. [Métodos de Instalación](#métodos-de-instalación)
7. [Gestión de Logs](#gestión-de-logs) 7. [Flujos de Actualización](#flujos-de-actualización)
8. [Uso Avanzado](#uso-avanzado) 8. [Pruebas con Dry-Run](#pruebas-con-dry-run)
9. [Solución de Problemas](#solución-de-problemas) 9. [Gestión de Logs](#gestión-de-logs)
10. [Uso Avanzado](#uso-avanzado)
11. [Solución de Problemas](#solución-de-problemas)
## Resumen ## Resumen
@ -27,6 +29,7 @@ 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
@ -36,48 +39,126 @@ 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.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.6.4 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.4 HYPRLAND_QTUTILS_TAG=v0.1.5
WAYLAND_PROTOCOLS_TAG=1.45 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 ### 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
@ -85,6 +166,7 @@ WAYLAND_PROTOCOLS_TAG=1.45
## 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
@ -92,17 +174,20 @@ 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
@ -112,6 +197,7 @@ 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
@ -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 ### 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
@ -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 #### 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
@ -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. 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
@ -180,13 +270,17 @@ 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
``` ```
@ -194,6 +288,7 @@ 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
@ -226,6 +321,7 @@ 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
@ -233,7 +329,9 @@ 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
@ -243,6 +341,7 @@ 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
@ -255,8 +354,10 @@ 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
@ -267,6 +368,7 @@ 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
@ -275,6 +377,7 @@ 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
@ -282,6 +385,7 @@ 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
@ -296,6 +400,7 @@ 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:-}"
@ -303,6 +408,7 @@ 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"
@ -312,6 +418,7 @@ 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
@ -327,6 +434,7 @@ 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
@ -343,9 +451,11 @@ 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
@ -358,9 +468,11 @@ 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
@ -370,9 +482,11 @@ 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
@ -384,6 +498,7 @@ 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
@ -393,6 +508,7 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
``` ```
2. **Verificar entorno**: 2. **Verificar entorno**:
```bash ```bash
# Ver etiquetas actuales # Ver etiquetas actuales
cat hypr-tags.env cat hypr-tags.env
@ -402,6 +518,7 @@ git ls-remote --tags https://github.com/hyprwm/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
@ -420,6 +537,7 @@ 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
@ -431,6 +549,7 @@ 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,13 +6,15 @@ 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. [Central Version Management](#central-version-management) 3. [Flags Reference](#flags-reference)
4. [Installation Methods](#installation-methods) 4. [Debian 13 (Trixie) Compatibility Mode](#debian-13-trixie-compatibility-mode)
5. [Upgrade Workflows](#upgrade-workflows) 5. [Central Version Management](#central-version-management)
6. [Dry-Run Testing](#dry-run-testing) 6. [Installation Methods](#installation-methods)
7. [Log Management](#log-management) 7. [Upgrade Workflows](#upgrade-workflows)
8. [Advanced Usage](#advanced-usage) 8. [Dry-Run Testing](#dry-run-testing)
9. [Troubleshooting](#troubleshooting) 9. [Log Management](#log-management)
10. [Advanced Usage](#advanced-usage)
11. [Troubleshooting](#troubleshooting)
## Overview ## Overview
@ -27,6 +29,7 @@ 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
@ -36,48 +39,126 @@ 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.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.6.4 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.4 HYPRLAND_QTUTILS_TAG=v0.1.5
WAYLAND_PROTOCOLS_TAG=1.45 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 ### 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
@ -85,6 +166,7 @@ WAYLAND_PROTOCOLS_TAG=1.45
## 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
@ -92,17 +174,20 @@ 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
@ -112,6 +197,7 @@ 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
@ -124,6 +210,7 @@ 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
@ -133,12 +220,14 @@ 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
@ -171,6 +260,7 @@ 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
@ -180,13 +270,17 @@ 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
``` ```
@ -194,6 +288,7 @@ 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
@ -226,6 +321,7 @@ 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
@ -233,7 +329,9 @@ 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
@ -243,6 +341,7 @@ 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
@ -255,8 +354,10 @@ 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
@ -267,6 +368,7 @@ 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
@ -275,6 +377,7 @@ 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
@ -282,6 +385,7 @@ 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
@ -296,6 +400,7 @@ 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:-}"
@ -303,6 +408,7 @@ 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"
@ -312,6 +418,7 @@ 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
@ -327,6 +434,7 @@ 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
@ -343,9 +451,11 @@ 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
@ -358,9 +468,11 @@ 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
@ -370,9 +482,11 @@ 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
@ -384,6 +498,7 @@ 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
@ -393,6 +508,7 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
``` ```
2. **Verify environment**: 2. **Verify environment**:
```bash ```bash
# Check current tags # Check current tags
cat hypr-tags.env cat hypr-tags.env
@ -402,6 +518,7 @@ git ls-remote --tags https://github.com/hyprwm/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
@ -420,6 +537,7 @@ 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
@ -431,6 +549,7 @@ 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:

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: At this time Debian 13 (Trixie) can't compile v0.52.2+ > Note: Newer Hyprland versions (0.53.x+) may require compatibility shims on Debian 13 (Trixie).
> Debian Testing and SID can > 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 - 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,14 +2,17 @@
# 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_TAG=v0.52.2 # Hyprland 0.53.x stack (includes hyprwire)
HYPRLAND_TAG=v0.53.1
AQUAMARINE_TAG=v0.10.0 AQUAMARINE_TAG=v0.10.0
HYPRUTILS_TAG=v0.10.4 HYPRUTILS_TAG=v0.11.0
HYPRLANG_TAG=v0.6.7 HYPRLANG_TAG=v0.6.8
HYPRGRAPHICS_TAG=v0.4.0 HYPRGRAPHICS_TAG=v0.5.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

View File

@ -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

View File

@ -72,7 +72,14 @@ 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
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build # Prefer /usr/local Hypr* libs so we don't accidentally link against copies in /lib.
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,6 +118,16 @@ 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,10 +12,33 @@ 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 # Dry-run support + shim controls
DO_INSTALL=1 DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then FORCE_SHIM=0
NO_SHIM=0
for arg in "$@"; do
case "$arg" in
--dry-run)
DO_INSTALL=0 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
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
@ -48,30 +71,71 @@ 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
# Temporary compatibility shim for compilers/libstdc++ without std::vector::append_range # Decide whether we need the append_range compatibility shim.
# On Debian 13 (trixie), libstdc++ typically lacks std::vector::append_range, so we patch.
# 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' 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
PATCH_FILES=$(grep -RIl --exclude-dir=.git 'append_range\(' . || true) # Replace X.(.|->)append_range(Y) -> APPEND_RANGE(X, Y) only where it appears
if [ -n "$PATCH_FILES" ]; then PATCH_FILES=$(grep -RIl --exclude-dir=.git -F 'append_range(' . || true)
# Replace LHS .append_range(arg...) with APPEND_RANGE(LHS, arg...) if [ -n "$PATCH_FILES" ]; then
# 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 '\.\s*append_range\s*\(' $PATCH_FILES || true) REMAIN=$(grep -RIn --exclude-dir=.git -E '(\.|->)[[:space:]]*append_range[[:space:]]*\(' $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
fi fi
# Absolute path for forced include # Absolute path for forced include
APPEND_HDR="$(pwd)/append_range_compat.hpp" 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 -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
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,6 +29,7 @@ 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"
@ -62,7 +63,8 @@ if git clone --recursive -b $tag "https://github.com/hyprwm/xdg-desktop-portal-h
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
mv $MLOG ../Install-Logs/ || true # Move the additional logs to Install-Logs directory
[ -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,6 +105,60 @@ 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"
@ -269,7 +323,13 @@ 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
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 else
echo "Failed to make script '$script' executable." | tee -a "$LOG" echo "Failed to make script '$script' executable." | tee -a "$LOG"
fi fi
@ -323,9 +383,9 @@ load_preset() {
fi fi
} }
# Check if --preset argument is passed # Check if --preset argument is passed (order-independent)
if [[ "$1" == "--preset" && -n "$2" ]]; then if [ -n "${PRESET_FILE:-}" ]; then
load_preset "$2" load_preset "$PRESET_FILE"
fi fi
# List of services to check for active login managers # List of services to check for active login managers
@ -558,6 +618,14 @@ 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,20 +11,61 @@ 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'
HYPRLAND_TAG=v0.51.1 # Default Hyprland stack versions
AQUAMARINE_TAG=v0.9.3 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
HYPRTOOLKIT_TAG=v0.4.1
HYPRWAYLAND_SCANNER_TAG=v0.4.5 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_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.4 HYPRLAND_QTUTILS_TAG=v0.1.5
HYPRWIRE_TAG=auto HYPRLAND_GUIUTILS_TAG=v0.2.0
WAYLAND_PROTOCOLS_TAG=1.45 HYPRWIRE_TAG=v0.2.1
WAYLAND_PROTOCOLS_TAG=1.46
EOF EOF
fi fi
@ -38,16 +79,19 @@ 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"
) )
@ -59,13 +103,18 @@ 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,6 +65,12 @@ 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\}//'
@ -85,6 +91,8 @@ 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
} }
@ -93,16 +101,18 @@ 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'
HYPRLAND_TAG=v0.50.1 # Default Hyprland stack versions
AQUAMARINE_TAG=v0.9.2 # (You can override any of these via --set or by editing hypr-tags.env.)
HYPRUTILS_TAG=v0.8.2 HYPRLAND_TAG=v0.53.1
HYPRLANG_TAG=v0.6.4 AQUAMARINE_TAG=v0.10.0
HYPRGRAPHICS_TAG=v0.1.5 HYPRUTILS_TAG=v0.11.0
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.6.4 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.4 HYPRLAND_QTUTILS_TAG=v0.1.5
HYPRWIRE_TAG=auto HYPRWIRE_TAG=v0.2.1
EOF EOF
fi fi
} }
@ -281,6 +291,20 @@ 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
@ -496,13 +520,33 @@ 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"; 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 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 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
@ -568,6 +612,14 @@ 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