mirror of
https://github.com/JaKooLit/Debian-Hyprland.git
synced 2026-02-05 01:30:13 +01:00
Compare commits
41 Commits
main
...
Debian-Hyp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
47145301fe | ||
|
|
c2a7c16cf4 | ||
|
|
1681658de3 | ||
|
|
de128b6fd4 | ||
|
|
8e507a9fec | ||
|
|
131fc3b370 | ||
|
|
8d2d0587ba | ||
|
|
7afba04e3a | ||
|
|
7434ceac25 | ||
|
|
e2010617a5 | ||
|
|
0bdf84c919 | ||
|
|
55df84a03a | ||
|
|
370f7de9e4 | ||
|
|
178285a759 | ||
|
|
118d1509bb | ||
|
|
fd832ef277 | ||
|
|
eef41a7104 | ||
|
|
b4095e471e | ||
|
|
90c393ecd8 | ||
|
|
31c19f6364 | ||
|
|
92156e9103 | ||
|
|
b2170cb081 | ||
|
|
a8f6e3c530 | ||
|
|
89a837d3c7 | ||
|
|
ef0224a2b6 | ||
|
|
8c922dddef | ||
|
|
f3725662ba | ||
|
|
2357e80e00 | ||
|
|
b1cca5a898 | ||
|
|
87a35febca | ||
|
|
f1bec15eb1 | ||
|
|
bb53e1a32e | ||
|
|
8826595926 | ||
|
|
90dc9c7883 | ||
|
|
b14bb03c0f | ||
|
|
37a7652ccf | ||
|
|
9044cc4986 | ||
|
|
d9ca7dabf2 | ||
|
|
c22055e60a | ||
|
|
09ab32b96f | ||
|
|
a7c6d8da50 |
@ -1,14 +1,26 @@
|
||||
## CHANGELOGS
|
||||
## CHANGELOG
|
||||
|
||||
## 02 January 2026
|
||||
|
||||
### > Note: Support for Hyprland v0.53.1 is now available for Debian Stable (Trixie)
|
||||
|
||||
### > At this time it should be considered BETA, not for production use
|
||||
|
||||
### > Testing with NVIDIA has not yet been done
|
||||
|
||||
### > Only Intel, AMD, and in VMs
|
||||
|
||||
- Updated:
|
||||
- `update-hyprland.sh` pinned to v0.52.2
|
||||
- Currently only Debian testing and SID branches build v0.53+
|
||||
- Added `--force-update` to refresh the pacakge versions if pinned
|
||||
- This is only for debian testing+ versions
|
||||
- Default Hyprland stack versions now target 0.53.1 (see `hypr-tags.env`)
|
||||
- Added trixie compatibility mode flags:
|
||||
- `--build-trixie` / `--no-trixie` (auto-detected on Debian 13)
|
||||
- Added `--force-update` to refresh pinned package versions
|
||||
- `update-hyprland.sh` added `-/--help`
|
||||
- documentation for updating hyprland
|
||||
- Documentation for updating hyprland
|
||||
- Added:
|
||||
- Version refresh improvements for `refresh-hypr-tags.sh` (accepts `--get-latest`, retries transient GitHub errors)
|
||||
- Fixed:
|
||||
- `--force-update` implies `--fetch-latest`
|
||||
|
||||
## 10 December 2025
|
||||
|
||||
@ -6,13 +6,15 @@ Esta guía cubre los flujos de instalación y actualización mejorados para el p
|
||||
|
||||
1. [Resumen](#resumen)
|
||||
2. [Nuevas Funciones](#nuevas-funciones)
|
||||
3. [Gestión Central de Versiones](#gestión-central-de-versiones)
|
||||
4. [Métodos de Instalación](#métodos-de-instalación)
|
||||
5. [Flujos de Actualización](#flujos-de-actualización)
|
||||
6. [Pruebas con Dry-Run](#pruebas-con-dry-run)
|
||||
7. [Gestión de Logs](#gestión-de-logs)
|
||||
8. [Uso Avanzado](#uso-avanzado)
|
||||
9. [Solución de Problemas](#solución-de-problemas)
|
||||
3. [Referencia de Flags](#referencia-de-flags)
|
||||
4. [Modo de Compatibilidad Debian 13 (Trixie)](#modo-de-compatibilidad-debian-13-trixie)
|
||||
5. [Gestión Central de Versiones](#gestión-central-de-versiones)
|
||||
6. [Métodos de Instalación](#métodos-de-instalación)
|
||||
7. [Flujos de Actualización](#flujos-de-actualización)
|
||||
8. [Pruebas con Dry-Run](#pruebas-con-dry-run)
|
||||
9. [Gestión de Logs](#gestión-de-logs)
|
||||
10. [Uso Avanzado](#uso-avanzado)
|
||||
11. [Solución de Problemas](#solución-de-problemas)
|
||||
|
||||
## Resumen
|
||||
|
||||
@ -27,6 +29,7 @@ El proyecto Debian-Hyprland ahora incluye herramientas de automatización y gest
|
||||
## Nuevas Funciones
|
||||
|
||||
### install.sh mejorado
|
||||
|
||||
El script original ahora:
|
||||
|
||||
- **Unifica versiones**: Lee `hypr-tags.env` y exporta variables de versión a todos los módulos
|
||||
@ -36,48 +39,126 @@ El script original ahora:
|
||||
### Nuevos Scripts
|
||||
|
||||
#### update-hyprland.sh
|
||||
|
||||
Herramienta enfocada para gestionar y compilar solo el stack de Hyprland:
|
||||
|
||||
```bash
|
||||
chmod +x ./update-hyprland.sh
|
||||
./update-hyprland.sh --help # Ver todas las opciones
|
||||
```
|
||||
|
||||
Flags clave:
|
||||
|
||||
- --fetch-latest: obtiene las últimas etiquetas desde GitHub
|
||||
- --force-update: sobrescribe valores fijados en hypr-tags.env (equivalente a FORCE=1)
|
||||
- --dry-run / --install: solo compilar o compilar+instalar
|
||||
- --only / --skip: limitar qué módulos se ejecutan
|
||||
- --build-trixie / --no-trixie: habilita/deshabilita el modo de compatibilidad Debian 13 (auto-detectado por defecto)
|
||||
|
||||
#### dry-run-build.sh
|
||||
|
||||
Herramienta de pruebas que compila componentes sin instalarlos:
|
||||
|
||||
```bash
|
||||
chmod +x ./dry-run-build.sh
|
||||
./dry-run-build.sh --help # Ver todas las opciones
|
||||
```
|
||||
|
||||
#### wayland-protocols-src.sh
|
||||
|
||||
Módulo que compila wayland-protocols desde el origen para satisfacer los requisitos de Hyprland 0.51.x.
|
||||
|
||||
## Referencia de Flags
|
||||
|
||||
Este repo incluye varios "flags de control" que afectan cómo se compila/instala el stack.
|
||||
|
||||
### Flags de update-hyprland.sh
|
||||
|
||||
- `--install` / `--dry-run`: compilar+instalar vs solo compilar
|
||||
- `--only <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
|
||||
|
||||
### hypr-tags.env
|
||||
|
||||
Archivo con etiquetas de versión para todos los componentes de Hyprland:
|
||||
|
||||
```bash
|
||||
# Versiones actuales (ejemplo)
|
||||
HYPRLAND_TAG=v0.51.1
|
||||
AQUAMARINE_TAG=v0.9.3
|
||||
HYPRUTILS_TAG=v0.8.2
|
||||
HYPRLANG_TAG=v0.6.4
|
||||
HYPRGRAPHICS_TAG=v0.1.5
|
||||
HYPRLAND_TAG=v0.53.1
|
||||
AQUAMARINE_TAG=v0.10.0
|
||||
HYPRUTILS_TAG=v0.11.0
|
||||
HYPRLANG_TAG=v0.6.8
|
||||
HYPRGRAPHICS_TAG=v0.5.0
|
||||
HYPRTOOLKIT_TAG=v0.4.1
|
||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.6.4
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.4
|
||||
WAYLAND_PROTOCOLS_TAG=1.45
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||
HYPRLAND_GUIUTILS_TAG=v0.2.0
|
||||
HYPRWIRE_TAG=v0.2.1
|
||||
WAYLAND_PROTOCOLS_TAG=1.46
|
||||
```
|
||||
|
||||
### Refrescar etiquetas (últimas releases)
|
||||
|
||||
Puedes refrescar `hypr-tags.env` a las últimas etiquetas publicadas en GitHub:
|
||||
|
||||
```bash
|
||||
# Actualiza solo claves en auto/latest (o sin valor)
|
||||
./refresh-hypr-tags.sh --get-latest
|
||||
|
||||
# Forzar sobrescritura de valores fijados
|
||||
FORCE=1 ./refresh-hypr-tags.sh --get-latest
|
||||
# o
|
||||
./refresh-hypr-tags.sh --force-update
|
||||
```
|
||||
|
||||
### Prioridad de Sobrescritura de Versiones
|
||||
|
||||
1. Variables de entorno (exportadas)
|
||||
2. Valores en el archivo `hypr-tags.env`
|
||||
3. Valores por defecto en cada módulo
|
||||
@ -85,6 +166,7 @@ WAYLAND_PROTOCOLS_TAG=1.45
|
||||
## Métodos de Instalación
|
||||
|
||||
### Método 1: Instalación Completa Original
|
||||
|
||||
```bash
|
||||
# Instalación estándar con todos los componentes
|
||||
chmod +x install.sh
|
||||
@ -92,17 +174,20 @@ chmod +x install.sh
|
||||
```
|
||||
|
||||
Ahora, este método automáticamente:
|
||||
|
||||
- Carga versiones desde `hypr-tags.env`
|
||||
- Instala wayland-protocols desde el origen antes de Hyprland
|
||||
- Mantiene el orden correcto de dependencias
|
||||
|
||||
### Método 2: Solo el Stack de Hyprland
|
||||
|
||||
```bash
|
||||
# Instala solo Hyprland y componentes esenciales
|
||||
./update-hyprland.sh --install
|
||||
```
|
||||
|
||||
### Método 3: Instalación Nueva con Últimas Versiones
|
||||
|
||||
```bash
|
||||
# Obtiene últimas versiones de GitHub e instala
|
||||
./update-hyprland.sh --fetch-latest --install
|
||||
@ -112,6 +197,7 @@ Ahora, este método automáticamente:
|
||||
```
|
||||
|
||||
### Método 4: Instalación con Preset
|
||||
|
||||
```bash
|
||||
# Usa un preset para elecciones automáticas
|
||||
./install.sh --preset ./preset.sh
|
||||
@ -124,6 +210,7 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x-
|
||||
### Actualizar a la Última Versión de Hyprland
|
||||
|
||||
#### Opción A: Descubrimiento Automático
|
||||
|
||||
```bash
|
||||
# Obtiene las últimas etiquetas e instala (respeta versiones fijadas en hypr-tags.env)
|
||||
./update-hyprland.sh --fetch-latest --install
|
||||
@ -133,12 +220,14 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x-
|
||||
```
|
||||
|
||||
#### Opción B: Versión Específica
|
||||
|
||||
```bash
|
||||
# Establece una versión específica de Hyprland
|
||||
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
|
||||
```
|
||||
|
||||
#### Opción C: Probar Antes de Instalar
|
||||
|
||||
```bash
|
||||
# Prueba la compilación primero, luego instala si es exitoso
|
||||
./update-hyprland.sh --fetch-latest --dry-run
|
||||
@ -171,6 +260,7 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x-
|
||||
Si actualmente estás en Hyprland 0.49 o 0.50.x, puedes actualizar directamente a 0.51.1 sin una reinstalación completa.
|
||||
|
||||
Ruta recomendada:
|
||||
|
||||
```bash
|
||||
# Asegura que hypr-tags.env apunte a la versión objetivo (omitir si ya es v0.51.1)
|
||||
./update-hyprland.sh --set HYPRLAND=v0.51.1
|
||||
@ -180,13 +270,17 @@ Ruta recomendada:
|
||||
```
|
||||
|
||||
Notas:
|
||||
|
||||
- El comando garantiza y ejecuta, según sea necesario: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine y luego hyprland.
|
||||
- No es necesario usar install.sh para esta actualización, a menos que también quieras instalar/actualizar módulos opcionales (p. ej., SDDM, Bluetooth, Thunar, AGS, dotfiles) o estés recuperándote de una instalación fallida/parcial.
|
||||
- Opcional: agrega --with-deps para reinstalar dependencias primero:
|
||||
|
||||
```bash
|
||||
./update-hyprland.sh --with-deps --install --only hyprland
|
||||
```
|
||||
|
||||
- Puedes hacer un dry-run primero para validar:
|
||||
|
||||
```bash
|
||||
./update-hyprland.sh --dry-run --only hyprland
|
||||
```
|
||||
@ -194,6 +288,7 @@ Notas:
|
||||
## Pruebas con Dry-Run
|
||||
|
||||
### ¿Por qué usar Dry-Run?
|
||||
|
||||
- Probar compatibilidad de compilación antes de instalar
|
||||
- Validar combinaciones de versiones
|
||||
- Depurar problemas de compilación sin cambios en el sistema
|
||||
@ -226,6 +321,7 @@ Notas:
|
||||
```
|
||||
|
||||
### Limitaciones de Dry-Run
|
||||
|
||||
- **Las dependencias se instalan**: apt se ejecuta para asegurar la compilación
|
||||
- **Requisitos de pkg-config**: Algunos componentes necesitan requisitos instalados en el sistema
|
||||
- **Sin cambios en el sistema**: No instala archivos en /usr/local o /usr
|
||||
@ -233,7 +329,9 @@ Notas:
|
||||
## Gestión de Logs
|
||||
|
||||
### Ubicación de Logs
|
||||
|
||||
Todas las actividades de construcción generan logs con sello de tiempo en:
|
||||
|
||||
```
|
||||
Install-Logs/
|
||||
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Log principal de instalación
|
||||
@ -243,6 +341,7 @@ Install-Logs/
|
||||
```
|
||||
|
||||
### Análisis de Logs
|
||||
|
||||
```bash
|
||||
# Ver el log de instalación más reciente
|
||||
ls -t Install-Logs/*.log | head -1 | xargs less
|
||||
@ -255,8 +354,10 @@ cat Install-Logs/build-dry-run-*.log
|
||||
```
|
||||
|
||||
### Retención de Logs
|
||||
|
||||
- Los logs se acumulan con el tiempo para referencia histórica
|
||||
- Se recomienda limpieza manual periódica:
|
||||
|
||||
```bash
|
||||
# Mantener solo logs de los últimos 30 días
|
||||
find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||
@ -267,6 +368,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||
### Gestión de Versiones
|
||||
|
||||
#### Forzar la Actualización de Todas las Etiquetas
|
||||
|
||||
```bash
|
||||
# Sobrescribe valores fijados en hypr-tags.env con las últimas versiones
|
||||
./update-hyprland.sh --fetch-latest --force-update --dry-run
|
||||
@ -275,6 +377,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||
```
|
||||
|
||||
#### Copia de Seguridad y Restauración
|
||||
|
||||
```bash
|
||||
# Las etiquetas se respaldan automáticamente cuando cambian
|
||||
# Restaurar la copia más reciente
|
||||
@ -282,6 +385,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||
```
|
||||
|
||||
#### Múltiples Conjuntos de Versiones
|
||||
|
||||
```bash
|
||||
# Guardar configuración actual
|
||||
cp hypr-tags.env hypr-tags-stable.env
|
||||
@ -296,6 +400,7 @@ cp hypr-tags-stable.env hypr-tags.env
|
||||
### Integración con el Entorno
|
||||
|
||||
#### PKG_CONFIG_PATH personalizado
|
||||
|
||||
```bash
|
||||
# Asegurar que /usr/local tenga prioridad
|
||||
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
||||
@ -303,6 +408,7 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PK
|
||||
```
|
||||
|
||||
#### Compilaciones en Paralelo
|
||||
|
||||
```bash
|
||||
# Controlar el paralelismo (por defecto: todos los núcleos)
|
||||
export MAKEFLAGS="-j4"
|
||||
@ -312,6 +418,7 @@ export MAKEFLAGS="-j4"
|
||||
### Flujo de Trabajo de Desarrollo
|
||||
|
||||
#### Probar Nuevos Lanzamientos
|
||||
|
||||
```bash
|
||||
# 1. Crear entorno de pruebas
|
||||
cp hypr-tags.env hypr-tags.backup
|
||||
@ -327,6 +434,7 @@ cp hypr-tags.env hypr-tags.backup
|
||||
```
|
||||
|
||||
#### Desarrollo de Componentes
|
||||
|
||||
```bash
|
||||
# Solo instalar dependencias
|
||||
./update-hyprland.sh --with-deps --dry-run
|
||||
@ -343,9 +451,11 @@ tail -f Install-Logs/install-*hyprland*.log
|
||||
### Problemas Comunes
|
||||
|
||||
#### Falla de Configuración con CMake
|
||||
|
||||
**Síntomas**: "Package dependency requirement not satisfied"
|
||||
|
||||
**Soluciones**:
|
||||
|
||||
```bash
|
||||
# Instalar requisitos faltantes
|
||||
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
|
||||
@ -358,9 +468,11 @@ rm -rf hyprland aquamarine hyprutils hyprlang
|
||||
```
|
||||
|
||||
#### Errores de Compilación
|
||||
|
||||
**Síntomas**: "too many errors emitted"
|
||||
|
||||
**Soluciones**:
|
||||
|
||||
```bash
|
||||
# Actualizar dependencias núcleo primero
|
||||
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
|
||||
@ -370,9 +482,11 @@ grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log
|
||||
```
|
||||
|
||||
#### Etiqueta No Encontrada
|
||||
|
||||
**Síntomas**: "Remote branch X not found"
|
||||
|
||||
**Soluciones**:
|
||||
|
||||
```bash
|
||||
# Ver etiquetas disponibles
|
||||
git ls-remote --tags https://github.com/hyprwm/Hyprland
|
||||
@ -384,31 +498,34 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
|
||||
### Pasos de Depuración
|
||||
|
||||
1. **Verificar compatibilidad del sistema**:
|
||||
```bash
|
||||
# Verificar versión de Debian
|
||||
cat /etc/os-release
|
||||
|
||||
# Asegurar deb-src habilitado
|
||||
grep -E "^deb-src" /etc/apt/sources.list
|
||||
```
|
||||
|
||||
```bash
|
||||
# Verificar versión de Debian
|
||||
cat /etc/os-release
|
||||
|
||||
# Asegurar deb-src habilitado
|
||||
grep -E "^deb-src" /etc/apt/sources.list
|
||||
```
|
||||
|
||||
2. **Verificar entorno**:
|
||||
```bash
|
||||
# Ver etiquetas actuales
|
||||
cat hypr-tags.env
|
||||
|
||||
# Probar dry-run primero
|
||||
./update-hyprland.sh --dry-run --only hyprland
|
||||
```
|
||||
|
||||
```bash
|
||||
# Ver etiquetas actuales
|
||||
cat hypr-tags.env
|
||||
|
||||
# Probar dry-run primero
|
||||
./update-hyprland.sh --dry-run --only hyprland
|
||||
```
|
||||
|
||||
3. **Analizar logs**:
|
||||
```bash
|
||||
# Errores más recientes
|
||||
grep -i "error\|fail" Install-Logs/*.log | tail -20
|
||||
|
||||
# Problemas por módulo
|
||||
ls -la Install-Logs/install-*[component]*.log
|
||||
```
|
||||
|
||||
```bash
|
||||
# Errores más recientes
|
||||
grep -i "error\|fail" Install-Logs/*.log | tail -20
|
||||
|
||||
# Problemas por módulo
|
||||
ls -la Install-Logs/install-*[component]*.log
|
||||
```
|
||||
|
||||
### Obtener Ayuda
|
||||
|
||||
@ -420,6 +537,7 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
|
||||
## Migración desde Versiones Previas
|
||||
|
||||
### Instalaciones Existentes
|
||||
|
||||
Las nuevas herramientas funcionan junto a instalaciones existentes:
|
||||
|
||||
```bash
|
||||
@ -431,6 +549,7 @@ Las nuevas herramientas funcionan junto a instalaciones existentes:
|
||||
```
|
||||
|
||||
### Convertir a Gestión por Etiquetas
|
||||
|
||||
```bash
|
||||
# Las versiones actuales se guardan en hypr-tags.env automáticamente
|
||||
# Verificar con:
|
||||
|
||||
@ -6,13 +6,15 @@ This guide covers the enhanced installation and upgrade workflows for KooL's Deb
|
||||
|
||||
1. [Overview](#overview)
|
||||
2. [New Features](#new-features)
|
||||
3. [Central Version Management](#central-version-management)
|
||||
4. [Installation Methods](#installation-methods)
|
||||
5. [Upgrade Workflows](#upgrade-workflows)
|
||||
6. [Dry-Run Testing](#dry-run-testing)
|
||||
7. [Log Management](#log-management)
|
||||
8. [Advanced Usage](#advanced-usage)
|
||||
9. [Troubleshooting](#troubleshooting)
|
||||
3. [Flags Reference](#flags-reference)
|
||||
4. [Debian 13 (Trixie) Compatibility Mode](#debian-13-trixie-compatibility-mode)
|
||||
5. [Central Version Management](#central-version-management)
|
||||
6. [Installation Methods](#installation-methods)
|
||||
7. [Upgrade Workflows](#upgrade-workflows)
|
||||
8. [Dry-Run Testing](#dry-run-testing)
|
||||
9. [Log Management](#log-management)
|
||||
10. [Advanced Usage](#advanced-usage)
|
||||
11. [Troubleshooting](#troubleshooting)
|
||||
|
||||
## Overview
|
||||
|
||||
@ -27,6 +29,7 @@ The Debian-Hyprland project now includes enhanced automation and management tool
|
||||
## New Features
|
||||
|
||||
### Enhanced install.sh
|
||||
|
||||
The original install.sh script now includes:
|
||||
|
||||
- **Tag consistency**: Reads `hypr-tags.env` and exports version variables to all modules
|
||||
@ -36,48 +39,126 @@ The original install.sh script now includes:
|
||||
### New Scripts
|
||||
|
||||
#### update-hyprland.sh
|
||||
|
||||
A focused tool for managing and building just the Hyprland stack:
|
||||
|
||||
```bash
|
||||
chmod +x ./update-hyprland.sh
|
||||
./update-hyprland.sh --help # View all options
|
||||
```
|
||||
|
||||
Key flags:
|
||||
|
||||
- --fetch-latest: pull latest release tags from GitHub
|
||||
- --force-update: override pinned values in hypr-tags.env (equivalent to FORCE=1)
|
||||
- --dry-run / --install: compile-only or compile+install
|
||||
- --only / --skip: limit which modules run
|
||||
- --build-trixie / --no-trixie: enable/disable Debian 13 (trixie) compatibility mode (auto-detected by default)
|
||||
|
||||
#### dry-run-build.sh
|
||||
|
||||
A testing tool that compiles components without installing:
|
||||
|
||||
```bash
|
||||
chmod +x ./dry-run-build.sh
|
||||
./dry-run-build.sh --help # View all options
|
||||
```
|
||||
|
||||
#### wayland-protocols-src.sh
|
||||
|
||||
A new module that builds wayland-protocols from source to satisfy Hyprland 0.51.x requirements.
|
||||
|
||||
## Flags Reference
|
||||
|
||||
This repo provides several "control flags" that affect how the stack is built. These are intentionally consistent across tools.
|
||||
|
||||
### update-hyprland.sh flags
|
||||
|
||||
- `--install` / `--dry-run`: compile+install vs compile-only
|
||||
- `--only <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
|
||||
|
||||
### hypr-tags.env
|
||||
|
||||
This file contains version tags for all Hyprland components:
|
||||
|
||||
```bash
|
||||
# Current versions (example)
|
||||
HYPRLAND_TAG=v0.51.1
|
||||
AQUAMARINE_TAG=v0.9.3
|
||||
HYPRUTILS_TAG=v0.8.2
|
||||
HYPRLANG_TAG=v0.6.4
|
||||
HYPRGRAPHICS_TAG=v0.1.5
|
||||
HYPRLAND_TAG=v0.53.1
|
||||
AQUAMARINE_TAG=v0.10.0
|
||||
HYPRUTILS_TAG=v0.11.0
|
||||
HYPRLANG_TAG=v0.6.8
|
||||
HYPRGRAPHICS_TAG=v0.5.0
|
||||
HYPRTOOLKIT_TAG=v0.4.1
|
||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.6.4
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.4
|
||||
WAYLAND_PROTOCOLS_TAG=1.45
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||
HYPRLAND_GUIUTILS_TAG=v0.2.0
|
||||
HYPRWIRE_TAG=v0.2.1
|
||||
WAYLAND_PROTOCOLS_TAG=1.46
|
||||
```
|
||||
|
||||
### Refreshing tags (latest releases)
|
||||
|
||||
You can refresh `hypr-tags.env` to the latest GitHub release tags:
|
||||
|
||||
```bash
|
||||
# Update only keys set to auto/latest (or unset)
|
||||
./refresh-hypr-tags.sh --get-latest
|
||||
|
||||
# Force-override pinned keys
|
||||
FORCE=1 ./refresh-hypr-tags.sh --get-latest
|
||||
# or
|
||||
./refresh-hypr-tags.sh --force-update
|
||||
```
|
||||
|
||||
### Version Override Priority
|
||||
|
||||
1. Environment variables (exported)
|
||||
2. hypr-tags.env file values
|
||||
3. Default hardcoded values in each module
|
||||
@ -85,6 +166,7 @@ WAYLAND_PROTOCOLS_TAG=1.45
|
||||
## Installation Methods
|
||||
|
||||
### Method 1: Original Full Installation
|
||||
|
||||
```bash
|
||||
# Standard installation with all components
|
||||
chmod +x install.sh
|
||||
@ -92,17 +174,20 @@ chmod +x install.sh
|
||||
```
|
||||
|
||||
This method now automatically:
|
||||
|
||||
- Loads versions from `hypr-tags.env`
|
||||
- Installs wayland-protocols from source before Hyprland
|
||||
- Maintains proper dependency ordering
|
||||
|
||||
### Method 2: Hyprland Stack Only
|
||||
|
||||
```bash
|
||||
# Install only Hyprland and essential components
|
||||
./update-hyprland.sh --install
|
||||
```
|
||||
|
||||
### Method 3: Fresh Installation with Latest Versions
|
||||
|
||||
```bash
|
||||
# Fetch latest GitHub releases and install
|
||||
./update-hyprland.sh --fetch-latest --install
|
||||
@ -112,6 +197,7 @@ This method now automatically:
|
||||
```
|
||||
|
||||
### Method 4: Preset-Based Installation
|
||||
|
||||
```bash
|
||||
# Use preset file for automated choices
|
||||
./install.sh --preset ./preset.sh
|
||||
@ -124,6 +210,7 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
|
||||
### Upgrading to Latest Hyprland Release
|
||||
|
||||
#### Option A: Automatic Discovery
|
||||
|
||||
```bash
|
||||
# Fetch latest tags and install (respects pins in hypr-tags.env)
|
||||
./update-hyprland.sh --fetch-latest --install
|
||||
@ -133,12 +220,14 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
|
||||
```
|
||||
|
||||
#### Option B: Specific Version
|
||||
|
||||
```bash
|
||||
# Set specific Hyprland version
|
||||
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
|
||||
```
|
||||
|
||||
#### Option C: Test Before Installing
|
||||
|
||||
```bash
|
||||
# Test compilation first, then install if successful
|
||||
./update-hyprland.sh --fetch-latest --dry-run
|
||||
@ -171,6 +260,7 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
|
||||
If you’re currently on Hyprland 0.49 or 0.50.x, you can upgrade directly to 0.51.1 without a full reinstall.
|
||||
|
||||
Recommended path:
|
||||
|
||||
```bash
|
||||
# Ensure hypr-tags.env pins the target version (skip if already v0.51.1)
|
||||
./update-hyprland.sh --set HYPRLAND=v0.51.1
|
||||
@ -180,13 +270,17 @@ Recommended path:
|
||||
```
|
||||
|
||||
Notes:
|
||||
|
||||
- The command will automatically ensure and run, as needed: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine, then hyprland.
|
||||
- Full install via install.sh is not required for this upgrade unless you also want to install/refresh optional modules (e.g., SDDM, Bluetooth, Thunar, AGS, dotfiles) or you’re recovering from a failed/partial setup.
|
||||
- Optional: add --with-deps to re-run dependency installation first:
|
||||
|
||||
```bash
|
||||
./update-hyprland.sh --with-deps --install --only hyprland
|
||||
```
|
||||
|
||||
- You can dry-run first to validate:
|
||||
|
||||
```bash
|
||||
./update-hyprland.sh --dry-run --only hyprland
|
||||
```
|
||||
@ -194,6 +288,7 @@ Notes:
|
||||
## Dry-Run Testing
|
||||
|
||||
### Why Use Dry-Run?
|
||||
|
||||
- Test compilation compatibility before installing
|
||||
- Validate version combinations
|
||||
- Debug build issues without system changes
|
||||
@ -226,6 +321,7 @@ Notes:
|
||||
```
|
||||
|
||||
### Dry-Run Limitations
|
||||
|
||||
- **Dependencies still install**: apt operations run to ensure compilation succeeds
|
||||
- **pkg-config requirements**: Some components need system-installed prerequisites
|
||||
- **No system changes**: No files installed to /usr/local or /usr
|
||||
@ -233,7 +329,9 @@ Notes:
|
||||
## Log Management
|
||||
|
||||
### Log Location
|
||||
|
||||
All build activities generate timestamped logs in:
|
||||
|
||||
```
|
||||
Install-Logs/
|
||||
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Main install log
|
||||
@ -243,6 +341,7 @@ Install-Logs/
|
||||
```
|
||||
|
||||
### Log Analysis
|
||||
|
||||
```bash
|
||||
# View most recent install log
|
||||
ls -t Install-Logs/*.log | head -1 | xargs less
|
||||
@ -255,8 +354,10 @@ cat Install-Logs/build-dry-run-*.log
|
||||
```
|
||||
|
||||
### Log Retention
|
||||
|
||||
- Logs accumulate over time for historical reference
|
||||
- Manual cleanup recommended periodically:
|
||||
|
||||
```bash
|
||||
# Keep only logs from last 30 days
|
||||
find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||
@ -267,6 +368,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||
### Tag Management
|
||||
|
||||
#### Force Update All Tags
|
||||
|
||||
```bash
|
||||
# Override pinned values in hypr-tags.env to the latest releases
|
||||
./update-hyprland.sh --fetch-latest --force-update --dry-run
|
||||
@ -275,6 +377,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||
```
|
||||
|
||||
#### Backup and Restore
|
||||
|
||||
```bash
|
||||
# Tags are automatically backed up on changes
|
||||
# Restore most recent backup
|
||||
@ -282,6 +385,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||
```
|
||||
|
||||
#### Multiple Version Sets
|
||||
|
||||
```bash
|
||||
# Save current configuration
|
||||
cp hypr-tags.env hypr-tags-stable.env
|
||||
@ -296,6 +400,7 @@ cp hypr-tags-stable.env hypr-tags.env
|
||||
### Environment Integration
|
||||
|
||||
#### Custom PKG_CONFIG_PATH
|
||||
|
||||
```bash
|
||||
# Ensure /usr/local takes precedence
|
||||
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
||||
@ -303,6 +408,7 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PK
|
||||
```
|
||||
|
||||
#### Parallel Builds
|
||||
|
||||
```bash
|
||||
# Control build parallelism (default: all cores)
|
||||
export MAKEFLAGS="-j4"
|
||||
@ -312,6 +418,7 @@ export MAKEFLAGS="-j4"
|
||||
### Development Workflow
|
||||
|
||||
#### Testing New Releases
|
||||
|
||||
```bash
|
||||
# 1. Create test environment
|
||||
cp hypr-tags.env hypr-tags.backup
|
||||
@ -327,6 +434,7 @@ cp hypr-tags.env hypr-tags.backup
|
||||
```
|
||||
|
||||
#### Component Development
|
||||
|
||||
```bash
|
||||
# Install dependencies only
|
||||
./update-hyprland.sh --with-deps --dry-run
|
||||
@ -343,9 +451,11 @@ tail -f Install-Logs/install-*hyprland*.log
|
||||
### Common Issues
|
||||
|
||||
#### CMake Configuration Fails
|
||||
|
||||
**Symptoms**: "Package dependency requirement not satisfied"
|
||||
|
||||
**Solutions**:
|
||||
|
||||
```bash
|
||||
# Install missing prerequisites
|
||||
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
|
||||
@ -358,9 +468,11 @@ rm -rf hyprland aquamarine hyprutils hyprlang
|
||||
```
|
||||
|
||||
#### Compilation Errors
|
||||
|
||||
**Symptoms**: "too many errors emitted"
|
||||
|
||||
**Solutions**:
|
||||
|
||||
```bash
|
||||
# Update core dependencies first
|
||||
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
|
||||
@ -370,9 +482,11 @@ grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log
|
||||
```
|
||||
|
||||
#### Tag Not Found
|
||||
|
||||
**Symptoms**: "Remote branch X not found"
|
||||
|
||||
**Solutions**:
|
||||
|
||||
```bash
|
||||
# Check available tags
|
||||
git ls-remote --tags https://github.com/hyprwm/Hyprland
|
||||
@ -384,31 +498,34 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
|
||||
### Debug Steps
|
||||
|
||||
1. **Check system compatibility**:
|
||||
```bash
|
||||
# Verify Debian version
|
||||
cat /etc/os-release
|
||||
|
||||
# Ensure deb-src enabled
|
||||
grep -E "^deb-src" /etc/apt/sources.list
|
||||
```
|
||||
|
||||
```bash
|
||||
# Verify Debian version
|
||||
cat /etc/os-release
|
||||
|
||||
# Ensure deb-src enabled
|
||||
grep -E "^deb-src" /etc/apt/sources.list
|
||||
```
|
||||
|
||||
2. **Verify environment**:
|
||||
```bash
|
||||
# Check current tags
|
||||
cat hypr-tags.env
|
||||
|
||||
# Test dry-run first
|
||||
./update-hyprland.sh --dry-run --only hyprland
|
||||
```
|
||||
|
||||
```bash
|
||||
# Check current tags
|
||||
cat hypr-tags.env
|
||||
|
||||
# Test dry-run first
|
||||
./update-hyprland.sh --dry-run --only hyprland
|
||||
```
|
||||
|
||||
3. **Analyze logs**:
|
||||
```bash
|
||||
# Most recent errors
|
||||
grep -i "error\|fail" Install-Logs/*.log | tail -20
|
||||
|
||||
# Module-specific issues
|
||||
ls -la Install-Logs/install-*[component]*.log
|
||||
```
|
||||
|
||||
```bash
|
||||
# Most recent errors
|
||||
grep -i "error\|fail" Install-Logs/*.log | tail -20
|
||||
|
||||
# Module-specific issues
|
||||
ls -la Install-Logs/install-*[component]*.log
|
||||
```
|
||||
|
||||
### Getting Help
|
||||
|
||||
@ -420,6 +537,7 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
|
||||
## Migration from Previous Versions
|
||||
|
||||
### Existing Installations
|
||||
|
||||
The new tools work alongside existing installations:
|
||||
|
||||
```bash
|
||||
@ -431,6 +549,7 @@ The new tools work alongside existing installations:
|
||||
```
|
||||
|
||||
### Converting to Tag Management
|
||||
|
||||
```bash
|
||||
# Current versions are saved to hypr-tags.env automatically
|
||||
# Verify with:
|
||||
@ -440,4 +559,4 @@ cat hypr-tags.env
|
||||
./update-hyprland.sh --set HYPRLAND=v0.51.1
|
||||
```
|
||||
|
||||
The enhanced workflow provides better control, testing capabilities, and automation while maintaining full compatibility with the original installation process.
|
||||
The enhanced workflow provides better control, testing capabilities, and automation while maintaining full compatibility with the original installation process.
|
||||
|
||||
@ -89,9 +89,9 @@ sudo nano /etc/apt/sources.list
|
||||
- 10 October 2025 Update!
|
||||
- Hyprland-Debian nows builds 0.51.1 from source!
|
||||
- The installer now can be used to install newer releases later
|
||||
- If you are currently running 0.49, or 0.50, you can upgrade to 0.51.1
|
||||
> Note: At this time Debian 13 (Trixie) can't compile v0.52.2+
|
||||
> Debian Testing and SID can
|
||||
- If you are currently running 0.49, or 0.50, you can upgrade to 0.51.1
|
||||
> Note: Newer Hyprland versions (0.53.x+) may require compatibility shims on Debian 13 (Trixie).
|
||||
> Use the provided update/install scripts with `--build-trixie` if needed.
|
||||
- You do not have to re-install everything, but re-running `install.sh` works also
|
||||
- Instructions are available in English and Spanish
|
||||
|
||||
|
||||
@ -134,11 +134,16 @@ done
|
||||
|
||||
# Summary
|
||||
{
|
||||
echo "\nSummary (dry-run):"
|
||||
printf "\nSummary (dry-run):\n"
|
||||
for mod in "${MODULES[@]}"; do
|
||||
printf "%-24s %s\n" "$mod" "${RESULTS[$mod]:-SKIPPED}"
|
||||
done
|
||||
echo "\nLogs: individual module logs are under Install-Logs/. This summary: $SUMMARY_LOG"
|
||||
# Show current tag values to make changes visible during dry-runs
|
||||
if [[ -f "$REPO_ROOT/hypr-tags.env" ]]; then
|
||||
printf "\nCurrent versions (from %s):\n" "$REPO_ROOT/hypr-tags.env"
|
||||
grep -E '^[A-Z0-9_]+=' "$REPO_ROOT/hypr-tags.env" | sort
|
||||
fi
|
||||
printf "\nLogs: individual module logs are under Install-Logs/. This summary: %s\n" "$SUMMARY_LOG"
|
||||
} | tee -a "$SUMMARY_LOG"
|
||||
|
||||
# Exit non-zero if any FAIL occurred
|
||||
|
||||
@ -2,14 +2,17 @@
|
||||
# You can edit these values or let update-hyprland.sh manage them.
|
||||
# Each module script reads its TAG from these environment variables if set.
|
||||
|
||||
HYPRLAND_TAG=v0.52.2
|
||||
# Hyprland 0.53.x stack (includes hyprwire)
|
||||
HYPRLAND_TAG=v0.53.1
|
||||
AQUAMARINE_TAG=v0.10.0
|
||||
HYPRUTILS_TAG=v0.10.4
|
||||
HYPRLANG_TAG=v0.6.7
|
||||
HYPRGRAPHICS_TAG=v0.4.0
|
||||
HYPRUTILS_TAG=v0.11.0
|
||||
HYPRLANG_TAG=v0.6.8
|
||||
HYPRGRAPHICS_TAG=v0.5.0
|
||||
HYPRTOOLKIT_TAG=v0.4.1
|
||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||
HYPRLAND_GUIUTILS_TAG=v0.2.0
|
||||
HYPRWIRE_TAG=v0.2.1
|
||||
WAYLAND_PROTOCOLS_TAG=1.46
|
||||
|
||||
@ -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
|
||||
@ -72,7 +72,14 @@ fi
|
||||
printf "${INFO} Installing ${YELLOW}hyprland-guiutils $tag${RESET} ...\n"
|
||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-guiutils.git; then
|
||||
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`
|
||||
if [ $DO_INSTALL -eq 1 ]; then
|
||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
||||
|
||||
@ -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
|
||||
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
|
||||
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
|
||||
|
||||
@ -12,10 +12,33 @@ if [ -z "${HYPRWIRE_TAG:-}" ]; then
|
||||
fi
|
||||
if [ -n "${HYPRWIRE_TAG:-}" ]; then tag="$HYPRWIRE_TAG"; fi
|
||||
|
||||
# Dry-run support
|
||||
# Dry-run support + shim controls
|
||||
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
|
||||
;;
|
||||
# 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."
|
||||
fi
|
||||
|
||||
@ -48,30 +71,71 @@ fi
|
||||
if git clone --recursive -b "$tag" https://github.com/hyprwm/hyprwire.git; then
|
||||
cd hyprwire || exit 1
|
||||
|
||||
# Temporary compatibility shim for compilers/libstdc++ without std::vector::append_range
|
||||
cat > append_range_compat.hpp <<'EOF'
|
||||
# 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'
|
||||
#pragma once
|
||||
#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
|
||||
# Replace X.append_range(Y) -> APPEND_RANGE(X, Y) only where it appears
|
||||
PATCH_FILES=$(grep -RIl --exclude-dir=.git 'append_range\(' . || true)
|
||||
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)
|
||||
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
|
||||
REMAIN=$(grep -RIn --exclude-dir=.git '\.\s*append_range\s*\(' $PATCH_FILES || true)
|
||||
if [ -n "$REMAIN" ]; then
|
||||
echo "[WARN] Some append_range() calls remain unpatched:" >&2
|
||||
echo "$REMAIN" >&2
|
||||
|
||||
# Replace X.(.|->)append_range(Y) -> APPEND_RANGE(X, Y) only where it appears
|
||||
PATCH_FILES=$(grep -RIl --exclude-dir=.git -F 'append_range(' . || true)
|
||||
if [ -n "$PATCH_FILES" ]; then
|
||||
# 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'
|
||||
# Show any remaining occurrences
|
||||
REMAIN=$(grep -RIn --exclude-dir=.git -E '(\.|->)[[:space:]]*append_range[[:space:]]*\(' $PATCH_FILES || true)
|
||||
if [ -n "$REMAIN" ]; then
|
||||
echo "[WARN] Some append_range() calls remain unpatched:" >&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
|
||||
|
||||
# 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)"
|
||||
if [ $DO_INSTALL -eq 1 ]; then
|
||||
if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then
|
||||
|
||||
@ -29,6 +29,7 @@ if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||
fi
|
||||
|
||||
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
|
||||
[[ -f "/usr/lib/xdg-desktop-portal-hyprland" ]] && sudo rm "/usr/lib/xdg-desktop-portal-hyprland"
|
||||
@ -58,11 +59,12 @@ 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 --build build
|
||||
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
|
||||
echo -e "${ERROR} Installation failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||
fi
|
||||
mv $MLOG ../Install-Logs/ || true
|
||||
# Move the additional logs to Install-Logs directory
|
||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/ || true
|
||||
cd ..
|
||||
else
|
||||
echo -e "${ERROR} Download failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||
|
||||
76
install.sh
76
install.sh
@ -105,6 +105,60 @@ if is_ubuntu; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Debian Trixie compatibility mode
|
||||
# Some Hypr* components need source-level shims on Debian 13 (trixie) toolchains.
|
||||
# Default: auto-detect via /etc/os-release
|
||||
# Overrides:
|
||||
# --build-trixie / --no-trixie
|
||||
# HYPR_BUILD_TRIXIE=1|0 (env)
|
||||
TRIXIE_MODE="auto"
|
||||
PRESET_FILE=""
|
||||
|
||||
# Parse a small set of supported CLI args (order-independent)
|
||||
# NOTE: install.sh historically used "$1"/"$2" for --preset; this keeps that working.
|
||||
args=("$@")
|
||||
for ((i=0; i<${#args[@]}; i++)); do
|
||||
case "${args[$i]}" in
|
||||
--build-trixie)
|
||||
TRIXIE_MODE="on"
|
||||
;;
|
||||
--no-trixie)
|
||||
TRIXIE_MODE="off"
|
||||
;;
|
||||
--preset)
|
||||
if [ $((i+1)) -lt ${#args[@]} ]; then
|
||||
PRESET_FILE="${args[$((i+1))]}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# If env explicitly sets HYPR_BUILD_TRIXIE, honor it.
|
||||
if [ -n "${HYPR_BUILD_TRIXIE+x}" ]; then
|
||||
if [ "${HYPR_BUILD_TRIXIE}" = "1" ]; then
|
||||
TRIXIE_MODE="on"
|
||||
elif [ "${HYPR_BUILD_TRIXIE}" = "0" ]; then
|
||||
TRIXIE_MODE="off"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Resolve auto-detection
|
||||
if [ "$TRIXIE_MODE" = "auto" ]; then
|
||||
HYPR_BUILD_TRIXIE=0
|
||||
if [ -f /etc/os-release ]; then
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/os-release || true
|
||||
if [ "${ID:-}" = "debian" ] && [ "${VERSION_CODENAME:-}" = "trixie" ]; then
|
||||
HYPR_BUILD_TRIXIE=1
|
||||
fi
|
||||
fi
|
||||
elif [ "$TRIXIE_MODE" = "on" ]; then
|
||||
HYPR_BUILD_TRIXIE=1
|
||||
else
|
||||
HYPR_BUILD_TRIXIE=0
|
||||
fi
|
||||
export HYPR_BUILD_TRIXIE
|
||||
|
||||
# install whiptails if detected not installed. Necessary for this version
|
||||
if ! command -v whiptail >/dev/null; then
|
||||
echo "${NOTE} - whiptail is not installed. Installing..." | tee -a "$LOG"
|
||||
@ -269,7 +323,13 @@ execute_script() {
|
||||
if [ -f "$script_path" ]; then
|
||||
chmod +x "$script_path"
|
||||
if [ -x "$script_path" ]; then
|
||||
env "$script_path"
|
||||
# Pass --build-trixie to all module scripts when in trixie compatibility mode.
|
||||
# Scripts that don't care should simply ignore unknown args.
|
||||
if [ "${HYPR_BUILD_TRIXIE:-0}" = "1" ]; then
|
||||
env HYPR_BUILD_TRIXIE=1 "$script_path" --build-trixie
|
||||
else
|
||||
env HYPR_BUILD_TRIXIE=0 "$script_path"
|
||||
fi
|
||||
else
|
||||
echo "Failed to make script '$script' executable." | tee -a "$LOG"
|
||||
fi
|
||||
@ -323,9 +383,9 @@ load_preset() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if --preset argument is passed
|
||||
if [[ "$1" == "--preset" && -n "$2" ]]; then
|
||||
load_preset "$2"
|
||||
# Check if --preset argument is passed (order-independent)
|
||||
if [ -n "${PRESET_FILE:-}" ]; then
|
||||
load_preset "$PRESET_FILE"
|
||||
fi
|
||||
|
||||
# List of services to check for active login managers
|
||||
@ -558,6 +618,14 @@ else
|
||||
execute_script "hypridle.sh"
|
||||
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 "waybar-git.sh" only if waybar on repo is old
|
||||
|
||||
|
||||
@ -11,20 +11,61 @@ mkdir -p "$LOG_DIR"
|
||||
TS=$(date +%F-%H%M%S)
|
||||
SUMMARY_LOG="$LOG_DIR/refresh-tags-$TS.log"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
refresh-hypr-tags.sh
|
||||
Refresh hypr-tags.env with latest GitHub release tags.
|
||||
|
||||
Usage:
|
||||
./refresh-hypr-tags.sh
|
||||
FORCE=1 ./refresh-hypr-tags.sh
|
||||
./refresh-hypr-tags.sh --force-update
|
||||
./refresh-hypr-tags.sh --get-latest
|
||||
|
||||
Notes:
|
||||
- By default, only updates keys set to auto/latest (or unset).
|
||||
- Use FORCE=1 or --force-update to override pinned values.
|
||||
EOF
|
||||
}
|
||||
|
||||
# Arg parsing (minimal/backwards compatible)
|
||||
FORCE=${FORCE:-0}
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
--force-update|--force)
|
||||
FORCE=1
|
||||
;;
|
||||
# Alias for user ergonomics; refresh always checks latest tags.
|
||||
--get-latest|--fetch-latest)
|
||||
:
|
||||
;;
|
||||
*)
|
||||
echo "[WARN] Unknown argument ignored: $arg" | tee -a "$SUMMARY_LOG"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Ensure tags file exists
|
||||
if [[ ! -f "$TAGS_FILE" ]]; then
|
||||
cat > "$TAGS_FILE" <<'EOF'
|
||||
HYPRLAND_TAG=v0.51.1
|
||||
AQUAMARINE_TAG=v0.9.3
|
||||
HYPRUTILS_TAG=v0.8.2
|
||||
HYPRLANG_TAG=v0.6.4
|
||||
HYPRGRAPHICS_TAG=v0.1.5
|
||||
# Default Hyprland stack versions
|
||||
HYPRLAND_TAG=v0.53.1
|
||||
AQUAMARINE_TAG=v0.10.0
|
||||
HYPRUTILS_TAG=v0.11.0
|
||||
HYPRLANG_TAG=v0.6.8
|
||||
HYPRGRAPHICS_TAG=v0.5.0
|
||||
HYPRTOOLKIT_TAG=v0.4.1
|
||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.6.4
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.4
|
||||
HYPRWIRE_TAG=auto
|
||||
WAYLAND_PROTOCOLS_TAG=1.45
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||
HYPRLAND_GUIUTILS_TAG=v0.2.0
|
||||
HYPRWIRE_TAG=v0.2.1
|
||||
WAYLAND_PROTOCOLS_TAG=1.46
|
||||
EOF
|
||||
fi
|
||||
|
||||
@ -38,16 +79,19 @@ if ! command -v curl >/dev/null 2>&1; then
|
||||
fi
|
||||
|
||||
# Map of env var -> repo
|
||||
# (Some modules may not publish GitHub releases; in that case the tag may not refresh.)
|
||||
declare -A repos=(
|
||||
[HYPRLAND_TAG]="hyprwm/Hyprland"
|
||||
[AQUAMARINE_TAG]="hyprwm/aquamarine"
|
||||
[HYPRUTILS_TAG]="hyprwm/hyprutils"
|
||||
[HYPRLANG_TAG]="hyprwm/hyprlang"
|
||||
[HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics"
|
||||
[HYPRTOOLKIT_TAG]="hyprwm/hyprtoolkit"
|
||||
[HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner"
|
||||
[HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols"
|
||||
[HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support"
|
||||
[HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils"
|
||||
[HYPRLAND_GUIUTILS_TAG]="hyprwm/hyprland-guiutils"
|
||||
[HYPRWIRE_TAG]="hyprwm/hyprwire"
|
||||
)
|
||||
|
||||
@ -59,12 +103,18 @@ while IFS='=' read -r k v; do
|
||||
done < "$TAGS_FILE"
|
||||
|
||||
# Fetch latest, but only update keys set to 'auto' or 'latest' unless forced
|
||||
FORCE=${FORCE:-0}
|
||||
changes=()
|
||||
for key in "${!repos[@]}"; do
|
||||
repo="${repos[$key]}"
|
||||
url="https://api.github.com/repos/$repo/releases/latest"
|
||||
echo "[INFO] Checking latest tag for $repo" | tee -a "$SUMMARY_LOG"
|
||||
body=$(curl -fsSL "$url" || true)
|
||||
|
||||
# Be resilient to transient GitHub API errors (e.g. 5xx).
|
||||
body=$(curl -fsSL \
|
||||
--retry 3 --retry-all-errors --retry-delay 1 \
|
||||
-H 'Accept: application/vnd.github+json' \
|
||||
"$url" || true)
|
||||
|
||||
[[ -z "$body" ]] && { echo "[WARN] Empty response for $repo" | tee -a "$SUMMARY_LOG"; continue; }
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
tag=$(printf '%s' "$body" | jq -r '.tag_name // empty')
|
||||
@ -78,12 +128,30 @@ for key in "${!repos[@]}"; do
|
||||
existing="${cur[$key]:-}"
|
||||
if [[ $FORCE -eq 1 ]] || [[ "$existing" =~ ^(auto|latest)$ ]] || [[ -z "$existing" ]]; then
|
||||
cur[$key]="$tag"
|
||||
if [[ "$existing" != "$tag" ]]; then
|
||||
changes+=("$key: $existing -> $tag")
|
||||
fi
|
||||
echo "[OK] $key := $tag" | tee -a "$SUMMARY_LOG"
|
||||
else
|
||||
echo "[SKIP] $key pinned ($existing), not overriding" | tee -a "$SUMMARY_LOG"
|
||||
fi
|
||||
done
|
||||
|
||||
# Show change summary and prompt before writing (interactive only)
|
||||
if [[ -t 0 && ${#changes[@]} -gt 0 ]]; then
|
||||
printf "\nPlanned tag updates (refresh-hypr-tags.sh):\n" | tee -a "$SUMMARY_LOG"
|
||||
printf "%s\n" "${changes[@]}" | tee -a "$SUMMARY_LOG"
|
||||
printf "\nProceed with writing updated tags to %s? [Y/n]: " "$TAGS_FILE"
|
||||
read -r ans || true
|
||||
ans=${ans:-Y}
|
||||
case "$ans" in
|
||||
[nN]|[nN][oO])
|
||||
echo "[INFO] User aborted tag update; leaving $TAGS_FILE unchanged." | tee -a "$SUMMARY_LOG"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Write back
|
||||
{
|
||||
for k in "${!cur[@]}"; do
|
||||
@ -91,4 +159,4 @@ done
|
||||
done | sort
|
||||
} > "$TAGS_FILE"
|
||||
|
||||
echo "[OK] Refreshed tags written to $TAGS_FILE" | tee -a "$SUMMARY_LOG"
|
||||
echo "[OK] Refreshed tags written to $TAGS_FILE" | tee -a "$SUMMARY_LOG"
|
||||
|
||||
@ -65,6 +65,12 @@ ONLY_LIST=""
|
||||
SKIP_LIST=""
|
||||
SET_ARGS=()
|
||||
|
||||
# Trixie compatibility mode
|
||||
# - auto: enable on Debian trixie (useful for toolchain/library shims)
|
||||
# - on: force enable via --build-trixie
|
||||
# - off: force disable via --no-trixie
|
||||
TRIXIE_MODE="auto"
|
||||
|
||||
usage() {
|
||||
# Print the header comments (quick reference) followed by explicit flags overview
|
||||
sed -n '2,140p' "$0" | sed -n '/^# /p' | sed 's/^# \{0,1\}//'
|
||||
@ -85,6 +91,8 @@ Options:
|
||||
--via-helper Use dry-run-build.sh to summarize a dry-run
|
||||
--minimal Build minimal stack before hyprland
|
||||
--no-fetch Do not auto-fetch tags on install
|
||||
--build-trixie Force Debian 13 (trixie) compatibility mode (enables needed shims)
|
||||
--no-trixie Disable trixie compatibility mode
|
||||
--set K=V [...] Set one or more tags (e.g., HYPRLAND=v0.53.0)
|
||||
EOF
|
||||
}
|
||||
@ -93,16 +101,18 @@ ensure_tags_file() {
|
||||
if [[ ! -f "$TAGS_FILE" ]]; then
|
||||
echo "[INFO] Creating default tags file: $TAGS_FILE" | tee -a "$SUMMARY_LOG"
|
||||
cat >"$TAGS_FILE" <<'EOF'
|
||||
HYPRLAND_TAG=v0.50.1
|
||||
AQUAMARINE_TAG=v0.9.2
|
||||
HYPRUTILS_TAG=v0.8.2
|
||||
HYPRLANG_TAG=v0.6.4
|
||||
HYPRGRAPHICS_TAG=v0.1.5
|
||||
# Default Hyprland stack versions
|
||||
# (You can override any of these via --set or by editing hypr-tags.env.)
|
||||
HYPRLAND_TAG=v0.53.1
|
||||
AQUAMARINE_TAG=v0.10.0
|
||||
HYPRUTILS_TAG=v0.11.0
|
||||
HYPRLANG_TAG=v0.6.8
|
||||
HYPRGRAPHICS_TAG=v0.5.0
|
||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.6.4
|
||||
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.4
|
||||
HYPRWIRE_TAG=auto
|
||||
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||
HYPRWIRE_TAG=v0.2.1
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
@ -160,6 +170,8 @@ set_tags_from_args() {
|
||||
fetch_latest_tags() {
|
||||
ensure_tags_file
|
||||
backup_tags
|
||||
CHANGES_FILE="$LOG_DIR/update-delta-$TS.log"
|
||||
: >"$CHANGES_FILE"
|
||||
|
||||
# Require curl; jq is preferred. Fallback to grep/sed if jq is missing.
|
||||
if ! command -v curl >/dev/null 2>&1; then
|
||||
@ -217,6 +229,8 @@ fetch_latest_tags() {
|
||||
map[$k]="$v"
|
||||
done <"$TAGS_FILE"
|
||||
|
||||
# Build a list of changes (old -> new) according to override rules
|
||||
changes=()
|
||||
for k in "${!tags[@]}"; do
|
||||
if [[ $FORCE_UPDATE -eq 1 ]]; then
|
||||
# Force override regardless of current value (matches FORCE=1 behavior in refresh-hypr-tags.sh)
|
||||
@ -229,6 +243,27 @@ fetch_latest_tags() {
|
||||
fi
|
||||
done
|
||||
|
||||
# Interactive confirmation before writing, if we have a TTY
|
||||
if [[ -t 0 && ${#changes[@]} -gt 0 ]]; then
|
||||
printf "\nPlanned tag updates (update-hyprland.sh):\n" | tee -a "$SUMMARY_LOG"
|
||||
printf "%s\n" "${changes[@]}" | tee -a "$SUMMARY_LOG" | tee -a "$CHANGES_FILE"
|
||||
printf "\nProceed with writing updated tags to %s? [Y/n]: " "$TAGS_FILE"
|
||||
read -r ans || true
|
||||
ans=${ans:-Y}
|
||||
case "$ans" in
|
||||
[nN]|[nN][oO])
|
||||
echo "[INFO] User aborted tag update; leaving $TAGS_FILE unchanged." | tee -a "$SUMMARY_LOG"
|
||||
# restore original copy
|
||||
latest_bak=$(ls -1t "$TAGS_FILE".bak-* 2>/dev/null | head -n1 || true)
|
||||
[[ -n "$latest_bak" ]] && cp "$latest_bak" "$TAGS_FILE"
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
else
|
||||
# non-interactive: still record changes
|
||||
printf "%s\n" "${changes[@]}" >>"$CHANGES_FILE" || true
|
||||
fi
|
||||
|
||||
{
|
||||
for k in "${!map[@]}"; do
|
||||
echo "$k=${map[$k]}"
|
||||
@ -256,6 +291,20 @@ run_stack() {
|
||||
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
||||
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH:-}"
|
||||
|
||||
# Auto-detect Debian trixie unless explicitly overridden.
|
||||
if [[ "$TRIXIE_MODE" == "auto" ]] && [[ -f /etc/os-release ]]; then
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/os-release || true
|
||||
if [[ "${ID:-}" == "debian" ]] && [[ "${VERSION_CODENAME:-}" == "trixie" ]]; then
|
||||
TRIXIE_MODE="on"
|
||||
fi
|
||||
fi
|
||||
if [[ "$TRIXIE_MODE" == "on" ]]; then
|
||||
export HYPR_BUILD_TRIXIE=1
|
||||
else
|
||||
export HYPR_BUILD_TRIXIE=0
|
||||
fi
|
||||
|
||||
# Propagate system/bundled selection to hyprland.sh
|
||||
if [[ $USE_SYSTEM_LIBS -eq 1 ]]; then
|
||||
export USE_SYSTEM_HYPRLIBS=1
|
||||
@ -471,19 +520,49 @@ run_stack() {
|
||||
continue
|
||||
}
|
||||
chmod +x "$script" || true
|
||||
|
||||
# Extra args for module scripts
|
||||
# Most scripts ignore unknown flags, so this is safe and lets us add future
|
||||
# trixie-specific shims without changing update-hyprland.sh again.
|
||||
extra_args=()
|
||||
if [[ "${HYPR_BUILD_TRIXIE:-0}" == "1" ]]; then
|
||||
extra_args+=("--build-trixie")
|
||||
fi
|
||||
|
||||
if [[ $DO_DRY_RUN -eq 1 ]]; then
|
||||
if DRY_RUN=1 "$script"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi
|
||||
if DRY_RUN=1 "$script" "${extra_args[@]}"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi
|
||||
else
|
||||
if "$script"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi
|
||||
if "$script" "${extra_args[@]}"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi
|
||||
fi
|
||||
done
|
||||
|
||||
# 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
|
||||
|
||||
{
|
||||
echo "\nSummary:"
|
||||
printf "\nSummary:\n"
|
||||
for mod in "${modules[@]}"; do
|
||||
printf "%-24s %s\n" "$mod" "${results[$mod]:-SKIPPED}"
|
||||
done
|
||||
echo "\nLogs under: $LOG_DIR. This run: $SUMMARY_LOG"
|
||||
# Show updated versions (final tag values)
|
||||
if [[ -f "$TAGS_FILE" ]]; then
|
||||
printf "\nUpdated versions (from %s):\n" "$TAGS_FILE"
|
||||
grep -E '^[A-Z0-9_]+=' "$TAGS_FILE" | sort
|
||||
fi
|
||||
# Include change list if present
|
||||
if [[ -f "$LOG_DIR/update-delta-$TS.log" ]]; then
|
||||
printf "\nChanges applied this run:\n"
|
||||
cat "$LOG_DIR/update-delta-$TS.log"
|
||||
fi
|
||||
printf "\nLogs under: %s. This run: %s\n" "$LOG_DIR" "$SUMMARY_LOG"
|
||||
} | tee -a "$SUMMARY_LOG"
|
||||
|
||||
# Non-zero on any FAILs
|
||||
@ -533,6 +612,14 @@ while [[ $# -gt 0 ]]; do
|
||||
NO_FETCH=1
|
||||
shift
|
||||
;;
|
||||
--build-trixie)
|
||||
TRIXIE_MODE="on"
|
||||
shift
|
||||
;;
|
||||
--no-trixie)
|
||||
TRIXIE_MODE="off"
|
||||
shift
|
||||
;;
|
||||
--only)
|
||||
ONLY_LIST=${2:-}
|
||||
shift 2
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user