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

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)
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:

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

View File

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

View File

@ -11,20 +11,61 @@ mkdir -p "$LOG_DIR"
TS=$(date +%F-%H%M%S)
SUMMARY_LOG="$LOG_DIR/refresh-tags-$TS.log"
usage() {
cat <<'EOF'
refresh-hypr-tags.sh
Refresh hypr-tags.env with latest GitHub release tags.
Usage:
./refresh-hypr-tags.sh
FORCE=1 ./refresh-hypr-tags.sh
./refresh-hypr-tags.sh --force-update
./refresh-hypr-tags.sh --get-latest
Notes:
- By default, only updates keys set to auto/latest (or unset).
- Use FORCE=1 or --force-update to override pinned values.
EOF
}
# Arg parsing (minimal/backwards compatible)
FORCE=${FORCE:-0}
for arg in "$@"; do
case "$arg" in
-h|--help)
usage
exit 0
;;
--force-update|--force)
FORCE=1
;;
# Alias for user ergonomics; refresh always checks latest tags.
--get-latest|--fetch-latest)
:
;;
*)
echo "[WARN] Unknown argument ignored: $arg" | tee -a "$SUMMARY_LOG"
;;
esac
done
# Ensure tags file exists
if [[ ! -f "$TAGS_FILE" ]]; then
cat > "$TAGS_FILE" <<'EOF'
HYPRLAND_TAG=v0.51.1
AQUAMARINE_TAG=v0.9.3
HYPRUTILS_TAG=v0.8.2
HYPRLANG_TAG=v0.6.4
HYPRGRAPHICS_TAG=v0.1.5
# Default Hyprland stack versions
HYPRLAND_TAG=v0.53.1
AQUAMARINE_TAG=v0.10.0
HYPRUTILS_TAG=v0.11.0
HYPRLANG_TAG=v0.6.8
HYPRGRAPHICS_TAG=v0.5.0
HYPRTOOLKIT_TAG=v0.4.1
HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_PROTOCOLS_TAG=v0.7.0
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.4
HYPRWIRE_TAG=auto
WAYLAND_PROTOCOLS_TAG=1.45
HYPRLAND_QTUTILS_TAG=v0.1.5
HYPRLAND_GUIUTILS_TAG=v0.2.0
HYPRWIRE_TAG=v0.2.1
WAYLAND_PROTOCOLS_TAG=1.46
EOF
fi
@ -38,16 +79,19 @@ if ! command -v curl >/dev/null 2>&1; then
fi
# Map of env var -> repo
# (Some modules may not publish GitHub releases; in that case the tag may not refresh.)
declare -A repos=(
[HYPRLAND_TAG]="hyprwm/Hyprland"
[AQUAMARINE_TAG]="hyprwm/aquamarine"
[HYPRUTILS_TAG]="hyprwm/hyprutils"
[HYPRLANG_TAG]="hyprwm/hyprlang"
[HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics"
[HYPRTOOLKIT_TAG]="hyprwm/hyprtoolkit"
[HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner"
[HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols"
[HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support"
[HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils"
[HYPRLAND_GUIUTILS_TAG]="hyprwm/hyprland-guiutils"
[HYPRWIRE_TAG]="hyprwm/hyprwire"
)
@ -59,13 +103,18 @@ while IFS='=' read -r k v; do
done < "$TAGS_FILE"
# Fetch latest, but only update keys set to 'auto' or 'latest' unless forced
FORCE=${FORCE:-0}
changes=()
for key in "${!repos[@]}"; do
repo="${repos[$key]}"
url="https://api.github.com/repos/$repo/releases/latest"
echo "[INFO] Checking latest tag for $repo" | tee -a "$SUMMARY_LOG"
body=$(curl -fsSL "$url" || true)
# Be resilient to transient GitHub API errors (e.g. 5xx).
body=$(curl -fsSL \
--retry 3 --retry-all-errors --retry-delay 1 \
-H 'Accept: application/vnd.github+json' \
"$url" || true)
[[ -z "$body" ]] && { echo "[WARN] Empty response for $repo" | tee -a "$SUMMARY_LOG"; continue; }
if command -v jq >/dev/null 2>&1; then
tag=$(printf '%s' "$body" | jq -r '.tag_name // empty')

View File

@ -65,6 +65,12 @@ ONLY_LIST=""
SKIP_LIST=""
SET_ARGS=()
# Trixie compatibility mode
# - auto: enable on Debian trixie (useful for toolchain/library shims)
# - on: force enable via --build-trixie
# - off: force disable via --no-trixie
TRIXIE_MODE="auto"
usage() {
# Print the header comments (quick reference) followed by explicit flags overview
sed -n '2,140p' "$0" | sed -n '/^# /p' | sed 's/^# \{0,1\}//'
@ -85,6 +91,8 @@ Options:
--via-helper Use dry-run-build.sh to summarize a dry-run
--minimal Build minimal stack before hyprland
--no-fetch Do not auto-fetch tags on install
--build-trixie Force Debian 13 (trixie) compatibility mode (enables needed shims)
--no-trixie Disable trixie compatibility mode
--set K=V [...] Set one or more tags (e.g., HYPRLAND=v0.53.0)
EOF
}
@ -93,16 +101,18 @@ ensure_tags_file() {
if [[ ! -f "$TAGS_FILE" ]]; then
echo "[INFO] Creating default tags file: $TAGS_FILE" | tee -a "$SUMMARY_LOG"
cat >"$TAGS_FILE" <<'EOF'
HYPRLAND_TAG=v0.50.1
AQUAMARINE_TAG=v0.9.2
HYPRUTILS_TAG=v0.8.2
HYPRLANG_TAG=v0.6.4
HYPRGRAPHICS_TAG=v0.1.5
# Default Hyprland stack versions
# (You can override any of these via --set or by editing hypr-tags.env.)
HYPRLAND_TAG=v0.53.1
AQUAMARINE_TAG=v0.10.0
HYPRUTILS_TAG=v0.11.0
HYPRLANG_TAG=v0.6.8
HYPRGRAPHICS_TAG=v0.5.0
HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_PROTOCOLS_TAG=v0.7.0
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.4
HYPRWIRE_TAG=auto
HYPRLAND_QTUTILS_TAG=v0.1.5
HYPRWIRE_TAG=v0.2.1
EOF
fi
}
@ -281,6 +291,20 @@ run_stack() {
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH:-}"
# Auto-detect Debian trixie unless explicitly overridden.
if [[ "$TRIXIE_MODE" == "auto" ]] && [[ -f /etc/os-release ]]; then
# shellcheck disable=SC1091
. /etc/os-release || true
if [[ "${ID:-}" == "debian" ]] && [[ "${VERSION_CODENAME:-}" == "trixie" ]]; then
TRIXIE_MODE="on"
fi
fi
if [[ "$TRIXIE_MODE" == "on" ]]; then
export HYPR_BUILD_TRIXIE=1
else
export HYPR_BUILD_TRIXIE=0
fi
# Propagate system/bundled selection to hyprland.sh
if [[ $USE_SYSTEM_LIBS -eq 1 ]]; then
export USE_SYSTEM_HYPRLIBS=1
@ -496,13 +520,33 @@ 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
{
printf "\nSummary:\n"
for mod in "${modules[@]}"; do
@ -568,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