mirror of
https://github.com/JaKooLit/Debian-Hyprland.git
synced 2026-02-05 09:40:14 +01:00
Compare commits
10 Commits
Debian-Hyp
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a3fbdaa15 | ||
|
|
2a01d9b65f | ||
|
|
886f22ede3 | ||
|
|
6d8fe7f359 | ||
|
|
d9f4a876da | ||
|
|
a6f603cf5a | ||
|
|
42cd493027 | ||
|
|
6ccabc5e19 | ||
|
|
2c8986ac5e | ||
|
|
030198fb6e |
@ -1,14 +1,68 @@
|
|||||||
## CHANGELOGS
|
## CHANGELOG
|
||||||
|
|
||||||
|
## 27 January 2026
|
||||||
|
|
||||||
|
### Fixed build issue with Debian stable (trixie)
|
||||||
|
|
||||||
|
- All references to `Nix::`, `Nix.hpp`, `Nix.cpp`, `--no-nixgl`, and `nixGL` in the built Hyprland sources are removed via assets/0002-start-hyprland-no-nixgl.patch.
|
||||||
|
- The patch:
|
||||||
|
- Drops the Nix include and logic from `start/src/core/Instance.cpp`, `start/src/core/State.hpp`, and `start/src/main.cpp`.
|
||||||
|
- Removes the `--no-nixgl` flag and the Nix environment checks.
|
||||||
|
- Now `start-hyprland` starts `Hyprland` directly, with no `nixGL` wrapper or Nix environment inspection.
|
||||||
|
|
||||||
|
## 24 January 2026
|
||||||
|
|
||||||
|
- Updated Hyprland version to v0.53.3
|
||||||
|
- Fixes `hyprpm` issues
|
||||||
|
- All other packages remain at the same version
|
||||||
|
|
||||||
|
## 23 January 2026
|
||||||
|
|
||||||
|
- New layout for building Hyprland Source
|
||||||
|
- The `build` directory will hold the source and compiler output
|
||||||
|
- Now you can just remove the build directory after install
|
||||||
|
- Updated the default Hyprland version to `v0.53.2`
|
||||||
|
- Updated the documentation on the new directory layout
|
||||||
|
- Fixed issue of Fastfetch reading old hyprland version file
|
||||||
|
|
||||||
|
## 21 January 2026
|
||||||
|
|
||||||
|
### Important Note for Debian `Trixie` users.
|
||||||
|
|
||||||
|
- If you later upgrade Debian to `Forky` or `SID` you **MUST** recompile Hyprland!!
|
||||||
|
- Run `update-hyprland --install --with-deps`
|
||||||
|
- Reboot after
|
||||||
|
- Failure to do so will prevent Hyprland from starting
|
||||||
|
- You will be returned to the login manager
|
||||||
|
|
||||||
|
## 15 January 2026
|
||||||
|
|
||||||
|
- Updated README
|
||||||
|
- Added not about not supporting `Kali` Linux
|
||||||
|
- Update info on NVIDIA GPUs
|
||||||
|
- Cleaning up some formatting
|
||||||
|
|
||||||
## 02 January 2026
|
## 02 January 2026
|
||||||
|
|
||||||
|
### > Note: Support for Hyprland v0.53.2 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:
|
- Updated:
|
||||||
- `update-hyprland.sh` pinned to v0.52.2
|
- Default Hyprland stack versions now target 0.53.2 (see `hypr-tags.env`)
|
||||||
- Currently only Debian testing and SID branches build v0.53+
|
- Added trixie compatibility mode flags:
|
||||||
- Added `--force-update` to refresh the pacakge versions if pinned
|
- `--build-trixie` / `--no-trixie` (auto-detected on Debian 13)
|
||||||
- This is only for debian testing+ versions
|
- Added `--force-update` to refresh pinned package versions
|
||||||
- `update-hyprland.sh` added `-/--help`
|
- `update-hyprland.sh` added `-/--help`
|
||||||
- documentation for updating hyprland
|
- Documentation for updating hyprland
|
||||||
|
- Added:
|
||||||
|
- Version refresh improvements for `refresh-hypr-tags.sh` (accepts `--get-latest`, retries transient GitHub errors)
|
||||||
|
- Fixed:
|
||||||
|
- `--force-update` implies `--fetch-latest`
|
||||||
|
|
||||||
## 10 December 2025
|
## 10 December 2025
|
||||||
|
|
||||||
81
CODE_OF_CONDUCT.es.md
Normal file
81
CODE_OF_CONDUCT.es.md
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
# Código de Conducta del Pacto del Colaborador
|
||||||
|
|
||||||
|
[Ver versión en inglés](./CODE_OF_CONDUCT.md)
|
||||||
|
|
||||||
|
## Nuestro compromiso
|
||||||
|
|
||||||
|
Nosotros, como miembros, contribuyentes y líderes, nos comprometemos a hacer que la participación en nuestra comunidad sea una experiencia libre de acoso para todas las personas, sin distinción de edad, complexión, discapacidad visible o invisible, etnia, características sexuales, identidad y expresión de género, nivel de experiencia, educación, situación socioeconómica, nacionalidad, apariencia personal, raza, religión, orientación o identidad sexual.
|
||||||
|
|
||||||
|
Nos comprometemos a actuar e interactuar de maneras que contribuyan a una comunidad abierta, acogedora, diversa, inclusiva y saludable.
|
||||||
|
|
||||||
|
## Nuestros estándares
|
||||||
|
|
||||||
|
Ejemplos de comportamiento que contribuye a un entorno positivo para nuestra comunidad incluyen:
|
||||||
|
|
||||||
|
- Demostrar empatía y amabilidad hacia otras personas.
|
||||||
|
- Ser respetuoso con opiniones, puntos de vista y experiencias que difieran de las nuestras.
|
||||||
|
- Dar y aceptar con gracia retroalimentación constructiva.
|
||||||
|
- Asumir la responsabilidad y disculparse ante quienes se vean afectados por nuestros errores, y aprender de la experiencia.
|
||||||
|
- Centrarse en lo que es mejor no solo para nosotros como individuos, sino para la comunidad en su conjunto.
|
||||||
|
|
||||||
|
Ejemplos de comportamiento inaceptable incluyen:
|
||||||
|
|
||||||
|
- El uso de lenguaje o imágenes sexualizadas, y cualquier tipo de atención o insinuación sexual.
|
||||||
|
- Troleo, comentarios insultantes o despectivos, y ataques personales o políticos.
|
||||||
|
- Acoso público o privado.
|
||||||
|
- Publicación de información privada de otras personas, como direcciones físicas o de correo electrónico, sin su permiso explícito.
|
||||||
|
- Otra conducta que, razonablemente, pudiera considerarse inapropiada en un entorno profesional.
|
||||||
|
|
||||||
|
## Responsabilidades de cumplimiento
|
||||||
|
|
||||||
|
Los líderes de la comunidad son responsables de aclarar y hacer cumplir nuestros estándares de comportamiento aceptable y tomarán medidas correctivas apropiadas y justas en respuesta a cualquier comportamiento que consideren inapropiado, amenazante, ofensivo o dañino.
|
||||||
|
|
||||||
|
Los líderes de la comunidad tienen el derecho y la responsabilidad de eliminar, editar o rechazar comentarios, confirmaciones de cambios (commits), código, ediciones del wiki, incidencias y otras contribuciones que no estén alineadas con este Código de Conducta, y comunicarán los motivos de las decisiones de moderación cuando corresponda.
|
||||||
|
|
||||||
|
## Alcance
|
||||||
|
|
||||||
|
Este Código de Conducta se aplica a todos los espacios de la comunidad y también cuando una persona representa oficialmente a la comunidad en espacios públicos. Ejemplos de representar a nuestra comunidad incluyen usar una dirección de correo electrónico oficial, publicar a través de una cuenta oficial en redes sociales o actuar como representante designado en un evento en línea o presencial.
|
||||||
|
|
||||||
|
## Cumplimiento
|
||||||
|
|
||||||
|
Los casos de comportamiento abusivo, acosador o de otra forma inaceptable pueden ser reportados a los líderes de la comunidad responsables del cumplimiento en mail[at]ml4w.com. Todas las quejas serán revisadas e investigadas de manera rápida y justa.
|
||||||
|
|
||||||
|
Todos los líderes de la comunidad están obligados a respetar la privacidad y seguridad de quien reporte cualquier incidente.
|
||||||
|
|
||||||
|
## Guías de aplicación
|
||||||
|
|
||||||
|
Los líderes de la comunidad seguirán estas Guías de Impacto Comunitario para determinar las consecuencias por cualquier acción que consideren en violación de este Código de Conducta:
|
||||||
|
|
||||||
|
### 1. Corrección
|
||||||
|
|
||||||
|
Impacto comunitario: Uso de lenguaje inapropiado u otro comportamiento considerado no profesional o no bienvenido en la comunidad.
|
||||||
|
|
||||||
|
Consecuencia: Una advertencia privada y por escrito de parte de los líderes de la comunidad, brindando claridad sobre la naturaleza de la violación y una explicación de por qué el comportamiento fue inapropiado. Se puede solicitar una disculpa pública.
|
||||||
|
|
||||||
|
### 2. Advertencia
|
||||||
|
|
||||||
|
Impacto comunitario: Una violación por un incidente único o una serie de acciones.
|
||||||
|
|
||||||
|
Consecuencia: Una advertencia con consecuencias para comportamientos continuados. Ninguna interacción con las personas involucradas, incluida la interacción no solicitada con quienes hacen cumplir el Código de Conducta, por un período de tiempo especificado. Esto incluye evitar interacciones en espacios de la comunidad así como en canales externos como redes sociales. Violaciones a estos términos pueden llevar a una suspensión temporal o permanente.
|
||||||
|
|
||||||
|
### 3. Suspensión temporal
|
||||||
|
|
||||||
|
Impacto comunitario: Una violación grave de los estándares de la comunidad, incluido el comportamiento inapropiado sostenido.
|
||||||
|
|
||||||
|
Consecuencia: Una suspensión temporal de cualquier tipo de interacción o comunicación pública con la comunidad por un período de tiempo especificado. No se permite interacción pública o privada con las personas involucradas, incluida la interacción no solicitada con quienes hacen cumplir el Código de Conducta, durante este período. Violar estos términos puede llevar a una suspensión permanente.
|
||||||
|
|
||||||
|
### 4. Suspensión permanente
|
||||||
|
|
||||||
|
Impacto comunitario: Demostrar un patrón de violación de los estándares de la comunidad, incluido el comportamiento inapropiado sostenido, acoso a una persona o agresión o desprecio hacia clases de individuos.
|
||||||
|
|
||||||
|
Consecuencia: Suspensión permanente de cualquier tipo de interacción pública dentro de la comunidad.
|
||||||
|
|
||||||
|
## Atribución
|
||||||
|
|
||||||
|
Este Código de Conducta está adaptado del [Contributor Covenant][homepage], versión 2.0, disponible en https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||||
|
|
||||||
|
Las Guías de Impacto Comunitario se inspiraron en la [escala de aplicación del código de conducta de Mozilla](https://github.com/mozilla/diversity).
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
Para respuestas a preguntas comunes sobre este código de conducta, vea las preguntas frecuentes en https://www.contributor-covenant.org/faq. Traducciones disponibles en https://www.contributor-covenant.org/translations.
|
||||||
148
COMMIT_MESSAGE_GUIDELINES.es.md
Normal file
148
COMMIT_MESSAGE_GUIDELINES.es.md
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
# Guía para Mensajes de Commit
|
||||||
|
|
||||||
|
[Ver versión en inglés](./COMMIT_MESSAGE_GUIDELINES.md)
|
||||||
|
|
||||||
|
Un buen mensaje de commit debe ser descriptivo y aportar contexto sobre los cambios realizados. Esto facilita entender y revisar los cambios en el futuro.
|
||||||
|
|
||||||
|
## Recomendaciones
|
||||||
|
|
||||||
|
- Empieza con un resumen breve de los cambios del commit.
|
||||||
|
- Usa el modo imperativo en el resumen, como si dieras una instrucción. Por ejemplo, "Add feature" en lugar de "Added feature".
|
||||||
|
- Proporciona detalles adicionales en el cuerpo del mensaje, si es necesario: motivo del cambio, impacto, dependencias añadidas o eliminadas, etc.
|
||||||
|
- Mantén cada línea en 72 caracteres o menos para que sea fácil de leer en la salida de `git log`.
|
||||||
|
|
||||||
|
### Ejemplos de buenos mensajes
|
||||||
|
|
||||||
|
- "Add authentication feature for user login"
|
||||||
|
- "Fix bug causing application to crash on startup"
|
||||||
|
- "Update documentation for API endpoints"
|
||||||
|
|
||||||
|
Recordatorio: escribir mensajes de commit descriptivos ahorra tiempo en el futuro y ayuda a otras personas a entender los cambios hechos al código.
|
||||||
|
|
||||||
|
## Tipos de commit
|
||||||
|
|
||||||
|
A continuación, una lista (ampliable) de tipos de commit que puedes usar:
|
||||||
|
|
||||||
|
`feat`: Añade una característica nueva al proyecto
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
feat: Add multi-image upload support
|
||||||
|
```
|
||||||
|
|
||||||
|
`fix`: Corrige un error o problema en el proyecto
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
fix: Fix bug causing application to crash on startup
|
||||||
|
```
|
||||||
|
|
||||||
|
`docs`: Cambios en documentación
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
docs: Update documentation for API endpoints
|
||||||
|
```
|
||||||
|
|
||||||
|
`style`: Cambios cosméticos o de formato (colores, formateo de código, etc.)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
style: Update colors and formatting
|
||||||
|
```
|
||||||
|
|
||||||
|
`refactor`: Cambios internos que no alteran el comportamiento, pero mejoran calidad/mantenibilidad
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
refactor: Remove unused code
|
||||||
|
```
|
||||||
|
|
||||||
|
`test`: Añadir o modificar tests
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
test: Add tests for new feature
|
||||||
|
```
|
||||||
|
|
||||||
|
`chore`: Cambios que no encajan en otras categorías (actualizar dependencias, configurar build, etc.)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
chore: Update dependencies
|
||||||
|
```
|
||||||
|
|
||||||
|
`perf`: Mejoras de rendimiento
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
perf: Improve performance of image processing
|
||||||
|
```
|
||||||
|
|
||||||
|
`security`: Aborda temas de seguridad
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
security: Update dependencies to address security issues
|
||||||
|
```
|
||||||
|
|
||||||
|
`merge`: Fusiones de ramas
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
merge: Merge branch 'feature/branch-name' into develop
|
||||||
|
```
|
||||||
|
|
||||||
|
`revert`: Revertir un commit previo
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
revert: Revert "Add feature"
|
||||||
|
```
|
||||||
|
|
||||||
|
`build`: Cambios en el sistema de build o dependencias
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
build: Update dependencies
|
||||||
|
```
|
||||||
|
|
||||||
|
`ci`: Cambios en la integración continua (CI)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
ci: Update CI configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
`config`: Cambios en archivos de configuración
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
config: Update configuration files
|
||||||
|
```
|
||||||
|
|
||||||
|
`deploy`: Cambios en el proceso de despliegue
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
deploy: Update deployment scripts
|
||||||
|
```
|
||||||
|
|
||||||
|
`init`: Inicialización de repositorio o proyecto
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
init: Initialize project
|
||||||
|
```
|
||||||
|
|
||||||
|
`move`: Mover archivos o directorios
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
move: Move files to new directory
|
||||||
|
```
|
||||||
|
|
||||||
|
`rename`: Renombrar archivos o directorios
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
rename: Rename files
|
||||||
|
```
|
||||||
|
|
||||||
|
`remove`: Eliminar archivos o directorios
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
remove: Remove files
|
||||||
|
```
|
||||||
|
|
||||||
|
`update`: Actualización de código, dependencias u otros componentes
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
update: Update code
|
||||||
|
```
|
||||||
|
|
||||||
|
Estos son solo ejemplos; puedes definir tipos personalizados si los usas de forma consistente y con mensajes claros y descriptivos.
|
||||||
|
|
||||||
|
**Importante:** Si planeas usar un tipo de commit personalizado que no esté en la lista, añádelo aquí para que otras personas lo entiendan también. Crea un pull request para incluirlo en este archivo.
|
||||||
58
CONTRIBUTING.es.md
Normal file
58
CONTRIBUTING.es.md
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# Guía para Contribuir a KooL Hyprland Projects (Debian)
|
||||||
|
|
||||||
|
[Ver versión en inglés](./CONTRIBUTING.md)
|
||||||
|
|
||||||
|
¡Gracias por tu interés en contribuir! Aceptamos correcciones de errores, nuevas características, mejoras de documentación y otras mejoras generales.
|
||||||
|
|
||||||
|
## Primeros pasos
|
||||||
|
|
||||||
|
1. Haz un fork del repositorio (rama `development`) en tu cuenta de GitHub.
|
||||||
|
- Botón **Fork** o [enlace directo](https://github.com/JaKooLit/Debian-Hyprland/fork).
|
||||||
|
- Desmarca la opción de copiar solo la rama `main` para incluir `development` y otras ramas.
|
||||||
|
|
||||||
|
2. Clona tu fork en tu equipo:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone --depth=1 -b development https://github.com/JaKooLit/Debian-Hyprland.git
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Crea una rama para tus cambios:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout -b tu-rama
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Realiza tus cambios y crea un commit con mensaje descriptivo (sigue la [guía de commits](./COMMIT_MESSAGE_GUIDELINES.md)):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git commit -m "feat: add a new feature"
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Sube tu rama a tu fork:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git push origin tu-rama
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Abre un **pull request** contra `development`.
|
||||||
|
- Usa la [plantilla de PR](https://github.com/JaKooLit/Debian-Hyprland/blob/main/.github/PULL_REQUEST_TEMPLATE.md) y añade etiquetas relevantes.
|
||||||
|
|
||||||
|
## Directrices
|
||||||
|
|
||||||
|
- Sigue el estilo de código del proyecto.
|
||||||
|
- Actualiza la documentación cuando sea necesario.
|
||||||
|
- Añade tests si aplica y verifica que pasen.
|
||||||
|
- Mantén el PR enfocado; evita cambios no relacionados.
|
||||||
|
- Revisa estos archivos útiles:
|
||||||
|
- [bug.yml](https://github.com/JaKooLit/Debian-Hyprland/blob/main/.github/ISSUE_TEMPLATE/bug.yml)
|
||||||
|
- [feature.yml](https://github.com/JaKooLit/Debian-Hyprland/blob/main/.github/ISSUE_TEMPLATE/feature.yml)
|
||||||
|
- [documentation-update.yml](https://github.com/JaKooLit/Debian-Hyprland/blob/main/.github/ISSUE_TEMPLATE/documentation-update.yml)
|
||||||
|
- [PULL_REQUEST_TEMPLATE.md](https://github.com/JaKooLit/Debian-Hyprland/blob/main/.github/PULL_REQUEST_TEMPLATE.md)
|
||||||
|
- [COMMIT_MESSAGE_GUIDELINES.md](./COMMIT_MESSAGE_GUIDELINES.md)
|
||||||
|
- [CONTRIBUTING.md](./CONTRIBUTING.md)
|
||||||
|
- [LICENSE](https://github.com/JaKooLit/Debian-Hyprland/blob/main/LICENSE.md)
|
||||||
|
- [README.md](https://github.com/JaKooLit/Debian-Hyprland/blob/main/README.md)
|
||||||
|
|
||||||
|
## Contacto
|
||||||
|
|
||||||
|
Para preguntas, usa [GitHub Discussions](https://github.com/JaKooLit/Debian-Hyprland/discussions) o el [Servidor de Discord](https://discord.gg/kool-tech-world).
|
||||||
@ -6,13 +6,15 @@ Esta guía cubre los flujos de instalación y actualización mejorados para el p
|
|||||||
|
|
||||||
1. [Resumen](#resumen)
|
1. [Resumen](#resumen)
|
||||||
2. [Nuevas Funciones](#nuevas-funciones)
|
2. [Nuevas Funciones](#nuevas-funciones)
|
||||||
3. [Gestión Central de Versiones](#gestión-central-de-versiones)
|
3. [Referencia de Flags](#referencia-de-flags)
|
||||||
4. [Métodos de Instalación](#métodos-de-instalación)
|
4. [Modo de Compatibilidad Debian 13 (Trixie)](#modo-de-compatibilidad-debian-13-trixie)
|
||||||
5. [Flujos de Actualización](#flujos-de-actualización)
|
5. [Gestión Central de Versiones](#gestión-central-de-versiones)
|
||||||
6. [Pruebas con Dry-Run](#pruebas-con-dry-run)
|
6. [Métodos de Instalación](#métodos-de-instalación)
|
||||||
7. [Gestión de Logs](#gestión-de-logs)
|
7. [Flujos de Actualización](#flujos-de-actualización)
|
||||||
8. [Uso Avanzado](#uso-avanzado)
|
8. [Pruebas con Dry-Run](#pruebas-con-dry-run)
|
||||||
9. [Solución de Problemas](#solución-de-problemas)
|
9. [Gestión de Logs](#gestión-de-logs)
|
||||||
|
10. [Uso Avanzado](#uso-avanzado)
|
||||||
|
11. [Solución de Problemas](#solución-de-problemas)
|
||||||
|
|
||||||
## Resumen
|
## Resumen
|
||||||
|
|
||||||
@ -27,6 +29,7 @@ El proyecto Debian-Hyprland ahora incluye herramientas de automatización y gest
|
|||||||
## Nuevas Funciones
|
## Nuevas Funciones
|
||||||
|
|
||||||
### install.sh mejorado
|
### install.sh mejorado
|
||||||
|
|
||||||
El script original ahora:
|
El script original ahora:
|
||||||
|
|
||||||
- **Unifica versiones**: Lee `hypr-tags.env` y exporta variables de versión a todos los módulos
|
- **Unifica versiones**: Lee `hypr-tags.env` y exporta variables de versión a todos los módulos
|
||||||
@ -36,48 +39,126 @@ El script original ahora:
|
|||||||
### Nuevos Scripts
|
### Nuevos Scripts
|
||||||
|
|
||||||
#### update-hyprland.sh
|
#### update-hyprland.sh
|
||||||
|
|
||||||
Herramienta enfocada para gestionar y compilar solo el stack de Hyprland:
|
Herramienta enfocada para gestionar y compilar solo el stack de Hyprland:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x ./update-hyprland.sh
|
chmod +x ./update-hyprland.sh
|
||||||
./update-hyprland.sh --help # Ver todas las opciones
|
./update-hyprland.sh --help # Ver todas las opciones
|
||||||
```
|
```
|
||||||
|
|
||||||
Flags clave:
|
Flags clave:
|
||||||
|
|
||||||
- --fetch-latest: obtiene las últimas etiquetas desde GitHub
|
- --fetch-latest: obtiene las últimas etiquetas desde GitHub
|
||||||
- --force-update: sobrescribe valores fijados en hypr-tags.env (equivalente a FORCE=1)
|
- --force-update: sobrescribe valores fijados en hypr-tags.env (equivalente a FORCE=1)
|
||||||
- --dry-run / --install: solo compilar o compilar+instalar
|
- --dry-run / --install: solo compilar o compilar+instalar
|
||||||
- --only / --skip: limitar qué módulos se ejecutan
|
- --only / --skip: limitar qué módulos se ejecutan
|
||||||
|
- --build-trixie / --no-trixie: habilita/deshabilita el modo de compatibilidad Debian 13 (auto-detectado por defecto)
|
||||||
|
|
||||||
#### dry-run-build.sh
|
#### dry-run-build.sh
|
||||||
|
|
||||||
Herramienta de pruebas que compila componentes sin instalarlos:
|
Herramienta de pruebas que compila componentes sin instalarlos:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x ./dry-run-build.sh
|
chmod +x ./dry-run-build.sh
|
||||||
./dry-run-build.sh --help # Ver todas las opciones
|
./dry-run-build.sh --help # Ver todas las opciones
|
||||||
```
|
```
|
||||||
|
|
||||||
#### wayland-protocols-src.sh
|
#### wayland-protocols-src.sh
|
||||||
|
|
||||||
Módulo que compila wayland-protocols desde el origen para satisfacer los requisitos de Hyprland 0.51.x.
|
Módulo que compila wayland-protocols desde el origen para satisfacer los requisitos de Hyprland 0.51.x.
|
||||||
|
|
||||||
|
## Referencia de Flags
|
||||||
|
|
||||||
|
Este repo incluye varios "flags de control" que afectan cómo se compila/instala el stack.
|
||||||
|
|
||||||
|
### Flags de update-hyprland.sh
|
||||||
|
|
||||||
|
- `--install` / `--dry-run`: compilar+instalar vs solo compilar
|
||||||
|
- `--only <lista>` / `--skip <lista>`: ejecutar solo un subconjunto de módulos
|
||||||
|
- `--fetch-latest`: consulta GitHub Releases y refresca etiquetas
|
||||||
|
- `--force-update`: sobrescribe valores fijados en `hypr-tags.env` (equivalente a `FORCE=1`)
|
||||||
|
- `--build-trixie` / `--no-trixie`: habilita/deshabilita modo de compatibilidad Debian 13
|
||||||
|
|
||||||
|
Notas:
|
||||||
|
- Cuando el modo trixie está habilitado, `update-hyprland.sh` exporta `HYPR_BUILD_TRIXIE=1` y reenvía `--build-trixie` a los scripts de módulos.
|
||||||
|
|
||||||
|
### Flags de install.sh
|
||||||
|
|
||||||
|
- `--preset <archivo>`: ejecutar con elecciones predefinidas
|
||||||
|
- `--build-trixie` / `--no-trixie`: habilita/deshabilita modo de compatibilidad Debian 13
|
||||||
|
|
||||||
|
También puedes forzar por variable de entorno:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
HYPR_BUILD_TRIXIE=1 ./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flags de refresh-hypr-tags.sh
|
||||||
|
|
||||||
|
- `--get-latest`: refresca etiquetas a las últimas releases de GitHub (alias)
|
||||||
|
- `--force-update`: forzar sobrescritura de valores fijados
|
||||||
|
|
||||||
|
Equivalente con variable de entorno:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
FORCE=1 ./refresh-hypr-tags.sh --get-latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Modo de Compatibilidad Debian 13 (Trixie)
|
||||||
|
|
||||||
|
Versiones nuevas de Hyprland (0.53.x+) pueden requerir shims de compatibilidad en Debian 13 (trixie) debido a diferencias del toolchain/stdlib.
|
||||||
|
|
||||||
|
- Por defecto es **auto-detectado** (vía `/etc/os-release`): si `ID=debian` y `VERSION_CODENAME=trixie`, el modo se habilita.
|
||||||
|
- Puedes forzarlo ON/OFF:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Forzar ON
|
||||||
|
./update-hyprland.sh --build-trixie --install
|
||||||
|
|
||||||
|
# Forzar OFF
|
||||||
|
./update-hyprland.sh --no-trixie --install
|
||||||
|
```
|
||||||
|
|
||||||
## Gestión Central de Versiones
|
## Gestión Central de Versiones
|
||||||
|
|
||||||
### hypr-tags.env
|
### hypr-tags.env
|
||||||
|
|
||||||
Archivo con etiquetas de versión para todos los componentes de Hyprland:
|
Archivo con etiquetas de versión para todos los componentes de Hyprland:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Versiones actuales (ejemplo)
|
# Versiones actuales (ejemplo)
|
||||||
HYPRLAND_TAG=v0.51.1
|
HYPRLAND_TAG=v0.53.2
|
||||||
AQUAMARINE_TAG=v0.9.3
|
AQUAMARINE_TAG=v0.10.0
|
||||||
HYPRUTILS_TAG=v0.8.2
|
HYPRUTILS_TAG=v0.11.0
|
||||||
HYPRLANG_TAG=v0.6.4
|
HYPRLANG_TAG=v0.6.8
|
||||||
HYPRGRAPHICS_TAG=v0.1.5
|
HYPRGRAPHICS_TAG=v0.5.0
|
||||||
|
HYPRTOOLKIT_TAG=v0.4.1
|
||||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||||
HYPRLAND_PROTOCOLS_TAG=v0.6.4
|
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||||
HYPRLAND_QTUTILS_TAG=v0.1.4
|
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||||
WAYLAND_PROTOCOLS_TAG=1.45
|
HYPRLAND_GUIUTILS_TAG=v0.2.0
|
||||||
|
HYPRWIRE_TAG=v0.2.1
|
||||||
|
WAYLAND_PROTOCOLS_TAG=1.46
|
||||||
|
```
|
||||||
|
|
||||||
|
### Refrescar etiquetas (últimas releases)
|
||||||
|
|
||||||
|
Puedes refrescar `hypr-tags.env` a las últimas etiquetas publicadas en GitHub:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Actualiza solo claves en auto/latest (o sin valor)
|
||||||
|
./refresh-hypr-tags.sh --get-latest
|
||||||
|
|
||||||
|
# Forzar sobrescritura de valores fijados
|
||||||
|
FORCE=1 ./refresh-hypr-tags.sh --get-latest
|
||||||
|
# o
|
||||||
|
./refresh-hypr-tags.sh --force-update
|
||||||
```
|
```
|
||||||
|
|
||||||
### Prioridad de Sobrescritura de Versiones
|
### Prioridad de Sobrescritura de Versiones
|
||||||
|
|
||||||
1. Variables de entorno (exportadas)
|
1. Variables de entorno (exportadas)
|
||||||
2. Valores en el archivo `hypr-tags.env`
|
2. Valores en el archivo `hypr-tags.env`
|
||||||
3. Valores por defecto en cada módulo
|
3. Valores por defecto en cada módulo
|
||||||
@ -85,6 +166,7 @@ WAYLAND_PROTOCOLS_TAG=1.45
|
|||||||
## Métodos de Instalación
|
## Métodos de Instalación
|
||||||
|
|
||||||
### Método 1: Instalación Completa Original
|
### Método 1: Instalación Completa Original
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Instalación estándar con todos los componentes
|
# Instalación estándar con todos los componentes
|
||||||
chmod +x install.sh
|
chmod +x install.sh
|
||||||
@ -92,17 +174,20 @@ chmod +x install.sh
|
|||||||
```
|
```
|
||||||
|
|
||||||
Ahora, este método automáticamente:
|
Ahora, este método automáticamente:
|
||||||
|
|
||||||
- Carga versiones desde `hypr-tags.env`
|
- Carga versiones desde `hypr-tags.env`
|
||||||
- Instala wayland-protocols desde el origen antes de Hyprland
|
- Instala wayland-protocols desde el origen antes de Hyprland
|
||||||
- Mantiene el orden correcto de dependencias
|
- Mantiene el orden correcto de dependencias
|
||||||
|
|
||||||
### Método 2: Solo el Stack de Hyprland
|
### Método 2: Solo el Stack de Hyprland
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Instala solo Hyprland y componentes esenciales
|
# Instala solo Hyprland y componentes esenciales
|
||||||
./update-hyprland.sh --install
|
./update-hyprland.sh --install
|
||||||
```
|
```
|
||||||
|
|
||||||
### Método 3: Instalación Nueva con Últimas Versiones
|
### Método 3: Instalación Nueva con Últimas Versiones
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Obtiene últimas versiones de GitHub e instala
|
# Obtiene últimas versiones de GitHub e instala
|
||||||
./update-hyprland.sh --fetch-latest --install
|
./update-hyprland.sh --fetch-latest --install
|
||||||
@ -112,6 +197,7 @@ Ahora, este método automáticamente:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Método 4: Instalación con Preset
|
### Método 4: Instalación con Preset
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Usa un preset para elecciones automáticas
|
# Usa un preset para elecciones automáticas
|
||||||
./install.sh --preset ./preset.sh
|
./install.sh --preset ./preset.sh
|
||||||
@ -124,6 +210,7 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x-
|
|||||||
### Actualizar a la Última Versión de Hyprland
|
### Actualizar a la Última Versión de Hyprland
|
||||||
|
|
||||||
#### Opción A: Descubrimiento Automático
|
#### Opción A: Descubrimiento Automático
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Obtiene las últimas etiquetas e instala (respeta versiones fijadas en hypr-tags.env)
|
# Obtiene las últimas etiquetas e instala (respeta versiones fijadas en hypr-tags.env)
|
||||||
./update-hyprland.sh --fetch-latest --install
|
./update-hyprland.sh --fetch-latest --install
|
||||||
@ -133,12 +220,14 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x-
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Opción B: Versión Específica
|
#### Opción B: Versión Específica
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Establece una versión específica de Hyprland
|
# Establece una versión específica de Hyprland
|
||||||
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
|
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Opción C: Probar Antes de Instalar
|
#### Opción C: Probar Antes de Instalar
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Prueba la compilación primero, luego instala si es exitoso
|
# Prueba la compilación primero, luego instala si es exitoso
|
||||||
./update-hyprland.sh --fetch-latest --dry-run
|
./update-hyprland.sh --fetch-latest --dry-run
|
||||||
@ -171,6 +260,7 @@ Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x-
|
|||||||
Si actualmente estás en Hyprland 0.49 o 0.50.x, puedes actualizar directamente a 0.51.1 sin una reinstalación completa.
|
Si actualmente estás en Hyprland 0.49 o 0.50.x, puedes actualizar directamente a 0.51.1 sin una reinstalación completa.
|
||||||
|
|
||||||
Ruta recomendada:
|
Ruta recomendada:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Asegura que hypr-tags.env apunte a la versión objetivo (omitir si ya es v0.51.1)
|
# Asegura que hypr-tags.env apunte a la versión objetivo (omitir si ya es v0.51.1)
|
||||||
./update-hyprland.sh --set HYPRLAND=v0.51.1
|
./update-hyprland.sh --set HYPRLAND=v0.51.1
|
||||||
@ -180,13 +270,17 @@ Ruta recomendada:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Notas:
|
Notas:
|
||||||
|
|
||||||
- El comando garantiza y ejecuta, según sea necesario: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine y luego hyprland.
|
- El comando garantiza y ejecuta, según sea necesario: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine y luego hyprland.
|
||||||
- No es necesario usar install.sh para esta actualización, a menos que también quieras instalar/actualizar módulos opcionales (p. ej., SDDM, Bluetooth, Thunar, AGS, dotfiles) o estés recuperándote de una instalación fallida/parcial.
|
- No es necesario usar install.sh para esta actualización, a menos que también quieras instalar/actualizar módulos opcionales (p. ej., SDDM, Bluetooth, Thunar, AGS, dotfiles) o estés recuperándote de una instalación fallida/parcial.
|
||||||
- Opcional: agrega --with-deps para reinstalar dependencias primero:
|
- Opcional: agrega --with-deps para reinstalar dependencias primero:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./update-hyprland.sh --with-deps --install --only hyprland
|
./update-hyprland.sh --with-deps --install --only hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
- Puedes hacer un dry-run primero para validar:
|
- Puedes hacer un dry-run primero para validar:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./update-hyprland.sh --dry-run --only hyprland
|
./update-hyprland.sh --dry-run --only hyprland
|
||||||
```
|
```
|
||||||
@ -194,6 +288,7 @@ Notas:
|
|||||||
## Pruebas con Dry-Run
|
## Pruebas con Dry-Run
|
||||||
|
|
||||||
### ¿Por qué usar Dry-Run?
|
### ¿Por qué usar Dry-Run?
|
||||||
|
|
||||||
- Probar compatibilidad de compilación antes de instalar
|
- Probar compatibilidad de compilación antes de instalar
|
||||||
- Validar combinaciones de versiones
|
- Validar combinaciones de versiones
|
||||||
- Depurar problemas de compilación sin cambios en el sistema
|
- Depurar problemas de compilación sin cambios en el sistema
|
||||||
@ -226,14 +321,31 @@ Notas:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Limitaciones de Dry-Run
|
### Limitaciones de Dry-Run
|
||||||
|
|
||||||
- **Las dependencias se instalan**: apt se ejecuta para asegurar la compilación
|
- **Las dependencias se instalan**: apt se ejecuta para asegurar la compilación
|
||||||
- **Requisitos de pkg-config**: Algunos componentes necesitan requisitos instalados en el sistema
|
- **Requisitos de pkg-config**: Algunos componentes necesitan requisitos instalados en el sistema
|
||||||
- **Sin cambios en el sistema**: No instala archivos en /usr/local o /usr
|
- **Sin cambios en el sistema**: No instala archivos en /usr/local o /usr
|
||||||
|
|
||||||
## Gestión de Logs
|
## Gestión de Logs
|
||||||
|
## Artefactos de Build y Limpieza
|
||||||
|
|
||||||
|
Todas las fuentes descargadas y salidas de compilación ahora viven en `~/Debian-Hyprland/build/`:
|
||||||
|
|
||||||
|
- **Fuentes:** `build/src/<proyecto>`
|
||||||
|
- **Salida de build:** `build/<proyecto>`
|
||||||
|
|
||||||
|
Esto mantiene el repositorio limpio. Para eliminar todos los artefactos de compilación:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rm -rf ~/Debian-Hyprland/build
|
||||||
|
```
|
||||||
|
|
||||||
|
Nota: Esto solo elimina artefactos de compilación y fuentes descargadas; no desinstala nada del sistema.
|
||||||
|
|
||||||
### Ubicación de Logs
|
### Ubicación de Logs
|
||||||
|
|
||||||
Todas las actividades de construcción generan logs con sello de tiempo en:
|
Todas las actividades de construcción generan logs con sello de tiempo en:
|
||||||
|
|
||||||
```
|
```
|
||||||
Install-Logs/
|
Install-Logs/
|
||||||
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Log principal de instalación
|
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Log principal de instalación
|
||||||
@ -243,6 +355,7 @@ Install-Logs/
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Análisis de Logs
|
### Análisis de Logs
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ver el log de instalación más reciente
|
# Ver el log de instalación más reciente
|
||||||
ls -t Install-Logs/*.log | head -1 | xargs less
|
ls -t Install-Logs/*.log | head -1 | xargs less
|
||||||
@ -255,8 +368,10 @@ cat Install-Logs/build-dry-run-*.log
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Retención de Logs
|
### Retención de Logs
|
||||||
|
|
||||||
- Los logs se acumulan con el tiempo para referencia histórica
|
- Los logs se acumulan con el tiempo para referencia histórica
|
||||||
- Se recomienda limpieza manual periódica:
|
- Se recomienda limpieza manual periódica:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Mantener solo logs de los últimos 30 días
|
# Mantener solo logs de los últimos 30 días
|
||||||
find Install-Logs/ -name "*.log" -mtime +30 -delete
|
find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||||
@ -267,6 +382,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
|||||||
### Gestión de Versiones
|
### Gestión de Versiones
|
||||||
|
|
||||||
#### Forzar la Actualización de Todas las Etiquetas
|
#### Forzar la Actualización de Todas las Etiquetas
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Sobrescribe valores fijados en hypr-tags.env con las últimas versiones
|
# Sobrescribe valores fijados en hypr-tags.env con las últimas versiones
|
||||||
./update-hyprland.sh --fetch-latest --force-update --dry-run
|
./update-hyprland.sh --fetch-latest --force-update --dry-run
|
||||||
@ -275,6 +391,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Copia de Seguridad y Restauración
|
#### Copia de Seguridad y Restauración
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Las etiquetas se respaldan automáticamente cuando cambian
|
# Las etiquetas se respaldan automáticamente cuando cambian
|
||||||
# Restaurar la copia más reciente
|
# Restaurar la copia más reciente
|
||||||
@ -282,6 +399,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Múltiples Conjuntos de Versiones
|
#### Múltiples Conjuntos de Versiones
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Guardar configuración actual
|
# Guardar configuración actual
|
||||||
cp hypr-tags.env hypr-tags-stable.env
|
cp hypr-tags.env hypr-tags-stable.env
|
||||||
@ -296,6 +414,7 @@ cp hypr-tags-stable.env hypr-tags.env
|
|||||||
### Integración con el Entorno
|
### Integración con el Entorno
|
||||||
|
|
||||||
#### PKG_CONFIG_PATH personalizado
|
#### PKG_CONFIG_PATH personalizado
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Asegurar que /usr/local tenga prioridad
|
# Asegurar que /usr/local tenga prioridad
|
||||||
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
||||||
@ -303,6 +422,7 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PK
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Compilaciones en Paralelo
|
#### Compilaciones en Paralelo
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Controlar el paralelismo (por defecto: todos los núcleos)
|
# Controlar el paralelismo (por defecto: todos los núcleos)
|
||||||
export MAKEFLAGS="-j4"
|
export MAKEFLAGS="-j4"
|
||||||
@ -312,6 +432,7 @@ export MAKEFLAGS="-j4"
|
|||||||
### Flujo de Trabajo de Desarrollo
|
### Flujo de Trabajo de Desarrollo
|
||||||
|
|
||||||
#### Probar Nuevos Lanzamientos
|
#### Probar Nuevos Lanzamientos
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Crear entorno de pruebas
|
# 1. Crear entorno de pruebas
|
||||||
cp hypr-tags.env hypr-tags.backup
|
cp hypr-tags.env hypr-tags.backup
|
||||||
@ -327,6 +448,7 @@ cp hypr-tags.env hypr-tags.backup
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Desarrollo de Componentes
|
#### Desarrollo de Componentes
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Solo instalar dependencias
|
# Solo instalar dependencias
|
||||||
./update-hyprland.sh --with-deps --dry-run
|
./update-hyprland.sh --with-deps --dry-run
|
||||||
@ -343,9 +465,11 @@ tail -f Install-Logs/install-*hyprland*.log
|
|||||||
### Problemas Comunes
|
### Problemas Comunes
|
||||||
|
|
||||||
#### Falla de Configuración con CMake
|
#### Falla de Configuración con CMake
|
||||||
|
|
||||||
**Síntomas**: "Package dependency requirement not satisfied"
|
**Síntomas**: "Package dependency requirement not satisfied"
|
||||||
|
|
||||||
**Soluciones**:
|
**Soluciones**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Instalar requisitos faltantes
|
# Instalar requisitos faltantes
|
||||||
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
|
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
|
||||||
@ -358,9 +482,11 @@ rm -rf hyprland aquamarine hyprutils hyprlang
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Errores de Compilación
|
#### Errores de Compilación
|
||||||
|
|
||||||
**Síntomas**: "too many errors emitted"
|
**Síntomas**: "too many errors emitted"
|
||||||
|
|
||||||
**Soluciones**:
|
**Soluciones**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Actualizar dependencias núcleo primero
|
# Actualizar dependencias núcleo primero
|
||||||
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
|
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
|
||||||
@ -370,9 +496,11 @@ grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Etiqueta No Encontrada
|
#### Etiqueta No Encontrada
|
||||||
|
|
||||||
**Síntomas**: "Remote branch X not found"
|
**Síntomas**: "Remote branch X not found"
|
||||||
|
|
||||||
**Soluciones**:
|
**Soluciones**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ver etiquetas disponibles
|
# Ver etiquetas disponibles
|
||||||
git ls-remote --tags https://github.com/hyprwm/Hyprland
|
git ls-remote --tags https://github.com/hyprwm/Hyprland
|
||||||
@ -384,31 +512,34 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
|
|||||||
### Pasos de Depuración
|
### Pasos de Depuración
|
||||||
|
|
||||||
1. **Verificar compatibilidad del sistema**:
|
1. **Verificar compatibilidad del sistema**:
|
||||||
```bash
|
|
||||||
# Verificar versión de Debian
|
|
||||||
cat /etc/os-release
|
|
||||||
|
|
||||||
# Asegurar deb-src habilitado
|
```bash
|
||||||
grep -E "^deb-src" /etc/apt/sources.list
|
# Verificar versión de Debian
|
||||||
```
|
cat /etc/os-release
|
||||||
|
|
||||||
|
# Asegurar deb-src habilitado
|
||||||
|
grep -E "^deb-src" /etc/apt/sources.list
|
||||||
|
```
|
||||||
|
|
||||||
2. **Verificar entorno**:
|
2. **Verificar entorno**:
|
||||||
```bash
|
|
||||||
# Ver etiquetas actuales
|
|
||||||
cat hypr-tags.env
|
|
||||||
|
|
||||||
# Probar dry-run primero
|
```bash
|
||||||
./update-hyprland.sh --dry-run --only hyprland
|
# Ver etiquetas actuales
|
||||||
```
|
cat hypr-tags.env
|
||||||
|
|
||||||
|
# Probar dry-run primero
|
||||||
|
./update-hyprland.sh --dry-run --only hyprland
|
||||||
|
```
|
||||||
|
|
||||||
3. **Analizar logs**:
|
3. **Analizar logs**:
|
||||||
```bash
|
|
||||||
# Errores más recientes
|
|
||||||
grep -i "error\|fail" Install-Logs/*.log | tail -20
|
|
||||||
|
|
||||||
# Problemas por módulo
|
```bash
|
||||||
ls -la Install-Logs/install-*[component]*.log
|
# 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
|
### Obtener Ayuda
|
||||||
|
|
||||||
@ -420,6 +551,7 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
|
|||||||
## Migración desde Versiones Previas
|
## Migración desde Versiones Previas
|
||||||
|
|
||||||
### Instalaciones Existentes
|
### Instalaciones Existentes
|
||||||
|
|
||||||
Las nuevas herramientas funcionan junto a instalaciones existentes:
|
Las nuevas herramientas funcionan junto a instalaciones existentes:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -431,6 +563,7 @@ Las nuevas herramientas funcionan junto a instalaciones existentes:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Convertir a Gestión por Etiquetas
|
### Convertir a Gestión por Etiquetas
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Las versiones actuales se guardan en hypr-tags.env automáticamente
|
# Las versiones actuales se guardan en hypr-tags.env automáticamente
|
||||||
# Verificar con:
|
# Verificar con:
|
||||||
|
|||||||
@ -6,13 +6,15 @@ This guide covers the enhanced installation and upgrade workflows for KooL's Deb
|
|||||||
|
|
||||||
1. [Overview](#overview)
|
1. [Overview](#overview)
|
||||||
2. [New Features](#new-features)
|
2. [New Features](#new-features)
|
||||||
3. [Central Version Management](#central-version-management)
|
3. [Flags Reference](#flags-reference)
|
||||||
4. [Installation Methods](#installation-methods)
|
4. [Debian 13 (Trixie) Compatibility Mode](#debian-13-trixie-compatibility-mode)
|
||||||
5. [Upgrade Workflows](#upgrade-workflows)
|
5. [Central Version Management](#central-version-management)
|
||||||
6. [Dry-Run Testing](#dry-run-testing)
|
6. [Installation Methods](#installation-methods)
|
||||||
7. [Log Management](#log-management)
|
7. [Upgrade Workflows](#upgrade-workflows)
|
||||||
8. [Advanced Usage](#advanced-usage)
|
8. [Dry-Run Testing](#dry-run-testing)
|
||||||
9. [Troubleshooting](#troubleshooting)
|
9. [Log Management](#log-management)
|
||||||
|
10. [Advanced Usage](#advanced-usage)
|
||||||
|
11. [Troubleshooting](#troubleshooting)
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
@ -27,6 +29,7 @@ The Debian-Hyprland project now includes enhanced automation and management tool
|
|||||||
## New Features
|
## New Features
|
||||||
|
|
||||||
### Enhanced install.sh
|
### Enhanced install.sh
|
||||||
|
|
||||||
The original install.sh script now includes:
|
The original install.sh script now includes:
|
||||||
|
|
||||||
- **Tag consistency**: Reads `hypr-tags.env` and exports version variables to all modules
|
- **Tag consistency**: Reads `hypr-tags.env` and exports version variables to all modules
|
||||||
@ -36,48 +39,126 @@ The original install.sh script now includes:
|
|||||||
### New Scripts
|
### New Scripts
|
||||||
|
|
||||||
#### update-hyprland.sh
|
#### update-hyprland.sh
|
||||||
|
|
||||||
A focused tool for managing and building just the Hyprland stack:
|
A focused tool for managing and building just the Hyprland stack:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x ./update-hyprland.sh
|
chmod +x ./update-hyprland.sh
|
||||||
./update-hyprland.sh --help # View all options
|
./update-hyprland.sh --help # View all options
|
||||||
```
|
```
|
||||||
|
|
||||||
Key flags:
|
Key flags:
|
||||||
|
|
||||||
- --fetch-latest: pull latest release tags from GitHub
|
- --fetch-latest: pull latest release tags from GitHub
|
||||||
- --force-update: override pinned values in hypr-tags.env (equivalent to FORCE=1)
|
- --force-update: override pinned values in hypr-tags.env (equivalent to FORCE=1)
|
||||||
- --dry-run / --install: compile-only or compile+install
|
- --dry-run / --install: compile-only or compile+install
|
||||||
- --only / --skip: limit which modules run
|
- --only / --skip: limit which modules run
|
||||||
|
- --build-trixie / --no-trixie: enable/disable Debian 13 (trixie) compatibility mode (auto-detected by default)
|
||||||
|
|
||||||
#### dry-run-build.sh
|
#### dry-run-build.sh
|
||||||
|
|
||||||
A testing tool that compiles components without installing:
|
A testing tool that compiles components without installing:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x ./dry-run-build.sh
|
chmod +x ./dry-run-build.sh
|
||||||
./dry-run-build.sh --help # View all options
|
./dry-run-build.sh --help # View all options
|
||||||
```
|
```
|
||||||
|
|
||||||
#### wayland-protocols-src.sh
|
#### wayland-protocols-src.sh
|
||||||
|
|
||||||
A new module that builds wayland-protocols from source to satisfy Hyprland 0.51.x requirements.
|
A new module that builds wayland-protocols from source to satisfy Hyprland 0.51.x requirements.
|
||||||
|
|
||||||
|
## Flags Reference
|
||||||
|
|
||||||
|
This repo provides several "control flags" that affect how the stack is built. These are intentionally consistent across tools.
|
||||||
|
|
||||||
|
### update-hyprland.sh flags
|
||||||
|
|
||||||
|
- `--install` / `--dry-run`: compile+install vs compile-only
|
||||||
|
- `--only <list>` / `--skip <list>`: run a subset of modules
|
||||||
|
- `--fetch-latest`: query GitHub Releases and refresh tags
|
||||||
|
- `--force-update`: override pinned values in `hypr-tags.env` (equivalent to `FORCE=1`)
|
||||||
|
- `--build-trixie` / `--no-trixie`: enable/disable Debian 13 compatibility mode
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- When trixie mode is enabled, `update-hyprland.sh` exports `HYPR_BUILD_TRIXIE=1` and forwards `--build-trixie` to module scripts.
|
||||||
|
|
||||||
|
### install.sh flags
|
||||||
|
|
||||||
|
- `--preset <file>`: run unattended-ish using preset choices
|
||||||
|
- `--build-trixie` / `--no-trixie`: enable/disable Debian 13 compatibility mode
|
||||||
|
|
||||||
|
You can also force via env:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
HYPR_BUILD_TRIXIE=1 ./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### refresh-hypr-tags.sh flags
|
||||||
|
|
||||||
|
- `--get-latest`: refresh tags to latest GitHub releases (alias; refresh always checks latest)
|
||||||
|
- `--force-update`: force-override pinned values
|
||||||
|
|
||||||
|
Equivalent env form:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
FORCE=1 ./refresh-hypr-tags.sh --get-latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Debian 13 (Trixie) Compatibility Mode
|
||||||
|
|
||||||
|
Newer Hyprland versions (0.53.x+) may require source-level compatibility shims on Debian 13 (trixie) due to toolchain / standard-library feature gaps.
|
||||||
|
|
||||||
|
- Default behavior is **auto-detect** (via `/etc/os-release`): if `ID=debian` and `VERSION_CODENAME=trixie`, compatibility mode turns on.
|
||||||
|
- You can force it on/off:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Force ON
|
||||||
|
./update-hyprland.sh --build-trixie --install
|
||||||
|
|
||||||
|
# Force OFF
|
||||||
|
./update-hyprland.sh --no-trixie --install
|
||||||
|
```
|
||||||
|
|
||||||
## Central Version Management
|
## Central Version Management
|
||||||
|
|
||||||
### hypr-tags.env
|
### hypr-tags.env
|
||||||
|
|
||||||
This file contains version tags for all Hyprland components:
|
This file contains version tags for all Hyprland components:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Current versions (example)
|
# Current versions (example)
|
||||||
HYPRLAND_TAG=v0.51.1
|
HYPRLAND_TAG=v0.53.2
|
||||||
AQUAMARINE_TAG=v0.9.3
|
AQUAMARINE_TAG=v0.10.0
|
||||||
HYPRUTILS_TAG=v0.8.2
|
HYPRUTILS_TAG=v0.11.0
|
||||||
HYPRLANG_TAG=v0.6.4
|
HYPRLANG_TAG=v0.6.8
|
||||||
HYPRGRAPHICS_TAG=v0.1.5
|
HYPRGRAPHICS_TAG=v0.5.0
|
||||||
|
HYPRTOOLKIT_TAG=v0.4.1
|
||||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||||
HYPRLAND_PROTOCOLS_TAG=v0.6.4
|
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||||
HYPRLAND_QTUTILS_TAG=v0.1.4
|
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||||
WAYLAND_PROTOCOLS_TAG=1.45
|
HYPRLAND_GUIUTILS_TAG=v0.2.0
|
||||||
|
HYPRWIRE_TAG=v0.2.1
|
||||||
|
WAYLAND_PROTOCOLS_TAG=1.46
|
||||||
|
```
|
||||||
|
|
||||||
|
### Refreshing tags (latest releases)
|
||||||
|
|
||||||
|
You can refresh `hypr-tags.env` to the latest GitHub release tags:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Update only keys set to auto/latest (or unset)
|
||||||
|
./refresh-hypr-tags.sh --get-latest
|
||||||
|
|
||||||
|
# Force-override pinned keys
|
||||||
|
FORCE=1 ./refresh-hypr-tags.sh --get-latest
|
||||||
|
# or
|
||||||
|
./refresh-hypr-tags.sh --force-update
|
||||||
```
|
```
|
||||||
|
|
||||||
### Version Override Priority
|
### Version Override Priority
|
||||||
|
|
||||||
1. Environment variables (exported)
|
1. Environment variables (exported)
|
||||||
2. hypr-tags.env file values
|
2. hypr-tags.env file values
|
||||||
3. Default hardcoded values in each module
|
3. Default hardcoded values in each module
|
||||||
@ -85,6 +166,7 @@ WAYLAND_PROTOCOLS_TAG=1.45
|
|||||||
## Installation Methods
|
## Installation Methods
|
||||||
|
|
||||||
### Method 1: Original Full Installation
|
### Method 1: Original Full Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Standard installation with all components
|
# Standard installation with all components
|
||||||
chmod +x install.sh
|
chmod +x install.sh
|
||||||
@ -92,17 +174,20 @@ chmod +x install.sh
|
|||||||
```
|
```
|
||||||
|
|
||||||
This method now automatically:
|
This method now automatically:
|
||||||
|
|
||||||
- Loads versions from `hypr-tags.env`
|
- Loads versions from `hypr-tags.env`
|
||||||
- Installs wayland-protocols from source before Hyprland
|
- Installs wayland-protocols from source before Hyprland
|
||||||
- Maintains proper dependency ordering
|
- Maintains proper dependency ordering
|
||||||
|
|
||||||
### Method 2: Hyprland Stack Only
|
### Method 2: Hyprland Stack Only
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install only Hyprland and essential components
|
# Install only Hyprland and essential components
|
||||||
./update-hyprland.sh --install
|
./update-hyprland.sh --install
|
||||||
```
|
```
|
||||||
|
|
||||||
### Method 3: Fresh Installation with Latest Versions
|
### Method 3: Fresh Installation with Latest Versions
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Fetch latest GitHub releases and install
|
# Fetch latest GitHub releases and install
|
||||||
./update-hyprland.sh --fetch-latest --install
|
./update-hyprland.sh --fetch-latest --install
|
||||||
@ -112,6 +197,7 @@ This method now automatically:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Method 4: Preset-Based Installation
|
### Method 4: Preset-Based Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Use preset file for automated choices
|
# Use preset file for automated choices
|
||||||
./install.sh --preset ./preset.sh
|
./install.sh --preset ./preset.sh
|
||||||
@ -124,6 +210,7 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
|
|||||||
### Upgrading to Latest Hyprland Release
|
### Upgrading to Latest Hyprland Release
|
||||||
|
|
||||||
#### Option A: Automatic Discovery
|
#### Option A: Automatic Discovery
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Fetch latest tags and install (respects pins in hypr-tags.env)
|
# Fetch latest tags and install (respects pins in hypr-tags.env)
|
||||||
./update-hyprland.sh --fetch-latest --install
|
./update-hyprland.sh --fetch-latest --install
|
||||||
@ -133,12 +220,14 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Option B: Specific Version
|
#### Option B: Specific Version
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Set specific Hyprland version
|
# Set specific Hyprland version
|
||||||
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
|
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Option C: Test Before Installing
|
#### Option C: Test Before Installing
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Test compilation first, then install if successful
|
# Test compilation first, then install if successful
|
||||||
./update-hyprland.sh --fetch-latest --dry-run
|
./update-hyprland.sh --fetch-latest --dry-run
|
||||||
@ -171,6 +260,7 @@ Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
|
|||||||
If you’re currently on Hyprland 0.49 or 0.50.x, you can upgrade directly to 0.51.1 without a full reinstall.
|
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:
|
Recommended path:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ensure hypr-tags.env pins the target version (skip if already v0.51.1)
|
# Ensure hypr-tags.env pins the target version (skip if already v0.51.1)
|
||||||
./update-hyprland.sh --set HYPRLAND=v0.51.1
|
./update-hyprland.sh --set HYPRLAND=v0.51.1
|
||||||
@ -180,13 +270,17 @@ Recommended path:
|
|||||||
```
|
```
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
- The command will automatically ensure and run, as needed: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine, then hyprland.
|
- The command will automatically ensure and run, as needed: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine, then hyprland.
|
||||||
- Full install via install.sh is not required for this upgrade unless you also want to install/refresh optional modules (e.g., SDDM, Bluetooth, Thunar, AGS, dotfiles) or you’re recovering from a failed/partial setup.
|
- Full install via install.sh is not required for this upgrade unless you also want to install/refresh optional modules (e.g., SDDM, Bluetooth, Thunar, AGS, dotfiles) or you’re recovering from a failed/partial setup.
|
||||||
- Optional: add --with-deps to re-run dependency installation first:
|
- Optional: add --with-deps to re-run dependency installation first:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./update-hyprland.sh --with-deps --install --only hyprland
|
./update-hyprland.sh --with-deps --install --only hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
- You can dry-run first to validate:
|
- You can dry-run first to validate:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./update-hyprland.sh --dry-run --only hyprland
|
./update-hyprland.sh --dry-run --only hyprland
|
||||||
```
|
```
|
||||||
@ -194,6 +288,7 @@ Notes:
|
|||||||
## Dry-Run Testing
|
## Dry-Run Testing
|
||||||
|
|
||||||
### Why Use Dry-Run?
|
### Why Use Dry-Run?
|
||||||
|
|
||||||
- Test compilation compatibility before installing
|
- Test compilation compatibility before installing
|
||||||
- Validate version combinations
|
- Validate version combinations
|
||||||
- Debug build issues without system changes
|
- Debug build issues without system changes
|
||||||
@ -226,14 +321,31 @@ Notes:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Dry-Run Limitations
|
### Dry-Run Limitations
|
||||||
|
|
||||||
- **Dependencies still install**: apt operations run to ensure compilation succeeds
|
- **Dependencies still install**: apt operations run to ensure compilation succeeds
|
||||||
- **pkg-config requirements**: Some components need system-installed prerequisites
|
- **pkg-config requirements**: Some components need system-installed prerequisites
|
||||||
- **No system changes**: No files installed to /usr/local or /usr
|
- **No system changes**: No files installed to /usr/local or /usr
|
||||||
|
|
||||||
## Log Management
|
## Log Management
|
||||||
|
## Build Artifacts & Cleanup
|
||||||
|
|
||||||
|
All source clones and build outputs now live under `~/Debian-Hyprland/build/`:
|
||||||
|
|
||||||
|
- **Sources:** `build/src/<project>`
|
||||||
|
- **Build output:** `build/<project>`
|
||||||
|
|
||||||
|
This keeps the repo root clean. To remove all build artifacts:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rm -rf ~/Debian-Hyprland/build
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: This only removes build artifacts and downloaded sources; it does not uninstall anything from your system.
|
||||||
|
|
||||||
### Log Location
|
### Log Location
|
||||||
|
|
||||||
All build activities generate timestamped logs in:
|
All build activities generate timestamped logs in:
|
||||||
|
|
||||||
```
|
```
|
||||||
Install-Logs/
|
Install-Logs/
|
||||||
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Main install log
|
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Main install log
|
||||||
@ -243,6 +355,7 @@ Install-Logs/
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Log Analysis
|
### Log Analysis
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# View most recent install log
|
# View most recent install log
|
||||||
ls -t Install-Logs/*.log | head -1 | xargs less
|
ls -t Install-Logs/*.log | head -1 | xargs less
|
||||||
@ -255,8 +368,10 @@ cat Install-Logs/build-dry-run-*.log
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Log Retention
|
### Log Retention
|
||||||
|
|
||||||
- Logs accumulate over time for historical reference
|
- Logs accumulate over time for historical reference
|
||||||
- Manual cleanup recommended periodically:
|
- Manual cleanup recommended periodically:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Keep only logs from last 30 days
|
# Keep only logs from last 30 days
|
||||||
find Install-Logs/ -name "*.log" -mtime +30 -delete
|
find Install-Logs/ -name "*.log" -mtime +30 -delete
|
||||||
@ -267,6 +382,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
|||||||
### Tag Management
|
### Tag Management
|
||||||
|
|
||||||
#### Force Update All Tags
|
#### Force Update All Tags
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Override pinned values in hypr-tags.env to the latest releases
|
# Override pinned values in hypr-tags.env to the latest releases
|
||||||
./update-hyprland.sh --fetch-latest --force-update --dry-run
|
./update-hyprland.sh --fetch-latest --force-update --dry-run
|
||||||
@ -275,6 +391,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Backup and Restore
|
#### Backup and Restore
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Tags are automatically backed up on changes
|
# Tags are automatically backed up on changes
|
||||||
# Restore most recent backup
|
# Restore most recent backup
|
||||||
@ -282,6 +399,7 @@ find Install-Logs/ -name "*.log" -mtime +30 -delete
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Multiple Version Sets
|
#### Multiple Version Sets
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Save current configuration
|
# Save current configuration
|
||||||
cp hypr-tags.env hypr-tags-stable.env
|
cp hypr-tags.env hypr-tags-stable.env
|
||||||
@ -296,6 +414,7 @@ cp hypr-tags-stable.env hypr-tags.env
|
|||||||
### Environment Integration
|
### Environment Integration
|
||||||
|
|
||||||
#### Custom PKG_CONFIG_PATH
|
#### Custom PKG_CONFIG_PATH
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ensure /usr/local takes precedence
|
# Ensure /usr/local takes precedence
|
||||||
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
||||||
@ -303,6 +422,7 @@ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PK
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Parallel Builds
|
#### Parallel Builds
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Control build parallelism (default: all cores)
|
# Control build parallelism (default: all cores)
|
||||||
export MAKEFLAGS="-j4"
|
export MAKEFLAGS="-j4"
|
||||||
@ -312,6 +432,7 @@ export MAKEFLAGS="-j4"
|
|||||||
### Development Workflow
|
### Development Workflow
|
||||||
|
|
||||||
#### Testing New Releases
|
#### Testing New Releases
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Create test environment
|
# 1. Create test environment
|
||||||
cp hypr-tags.env hypr-tags.backup
|
cp hypr-tags.env hypr-tags.backup
|
||||||
@ -327,6 +448,7 @@ cp hypr-tags.env hypr-tags.backup
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Component Development
|
#### Component Development
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install dependencies only
|
# Install dependencies only
|
||||||
./update-hyprland.sh --with-deps --dry-run
|
./update-hyprland.sh --with-deps --dry-run
|
||||||
@ -343,9 +465,11 @@ tail -f Install-Logs/install-*hyprland*.log
|
|||||||
### Common Issues
|
### Common Issues
|
||||||
|
|
||||||
#### CMake Configuration Fails
|
#### CMake Configuration Fails
|
||||||
|
|
||||||
**Symptoms**: "Package dependency requirement not satisfied"
|
**Symptoms**: "Package dependency requirement not satisfied"
|
||||||
|
|
||||||
**Solutions**:
|
**Solutions**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install missing prerequisites
|
# Install missing prerequisites
|
||||||
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
|
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
|
||||||
@ -358,9 +482,11 @@ rm -rf hyprland aquamarine hyprutils hyprlang
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Compilation Errors
|
#### Compilation Errors
|
||||||
|
|
||||||
**Symptoms**: "too many errors emitted"
|
**Symptoms**: "too many errors emitted"
|
||||||
|
|
||||||
**Solutions**:
|
**Solutions**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Update core dependencies first
|
# Update core dependencies first
|
||||||
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
|
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
|
||||||
@ -370,9 +496,11 @@ grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### Tag Not Found
|
#### Tag Not Found
|
||||||
|
|
||||||
**Symptoms**: "Remote branch X not found"
|
**Symptoms**: "Remote branch X not found"
|
||||||
|
|
||||||
**Solutions**:
|
**Solutions**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check available tags
|
# Check available tags
|
||||||
git ls-remote --tags https://github.com/hyprwm/Hyprland
|
git ls-remote --tags https://github.com/hyprwm/Hyprland
|
||||||
@ -384,31 +512,34 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
|
|||||||
### Debug Steps
|
### Debug Steps
|
||||||
|
|
||||||
1. **Check system compatibility**:
|
1. **Check system compatibility**:
|
||||||
```bash
|
|
||||||
# Verify Debian version
|
|
||||||
cat /etc/os-release
|
|
||||||
|
|
||||||
# Ensure deb-src enabled
|
```bash
|
||||||
grep -E "^deb-src" /etc/apt/sources.list
|
# Verify Debian version
|
||||||
```
|
cat /etc/os-release
|
||||||
|
|
||||||
|
# Ensure deb-src enabled
|
||||||
|
grep -E "^deb-src" /etc/apt/sources.list
|
||||||
|
```
|
||||||
|
|
||||||
2. **Verify environment**:
|
2. **Verify environment**:
|
||||||
```bash
|
|
||||||
# Check current tags
|
|
||||||
cat hypr-tags.env
|
|
||||||
|
|
||||||
# Test dry-run first
|
```bash
|
||||||
./update-hyprland.sh --dry-run --only hyprland
|
# Check current tags
|
||||||
```
|
cat hypr-tags.env
|
||||||
|
|
||||||
|
# Test dry-run first
|
||||||
|
./update-hyprland.sh --dry-run --only hyprland
|
||||||
|
```
|
||||||
|
|
||||||
3. **Analyze logs**:
|
3. **Analyze logs**:
|
||||||
```bash
|
|
||||||
# Most recent errors
|
|
||||||
grep -i "error\|fail" Install-Logs/*.log | tail -20
|
|
||||||
|
|
||||||
# Module-specific issues
|
```bash
|
||||||
ls -la Install-Logs/install-*[component]*.log
|
# Most recent errors
|
||||||
```
|
grep -i "error\|fail" Install-Logs/*.log | tail -20
|
||||||
|
|
||||||
|
# Module-specific issues
|
||||||
|
ls -la Install-Logs/install-*[component]*.log
|
||||||
|
```
|
||||||
|
|
||||||
### Getting Help
|
### Getting Help
|
||||||
|
|
||||||
@ -420,6 +551,7 @@ git ls-remote --tags https://github.com/hyprwm/Hyprland
|
|||||||
## Migration from Previous Versions
|
## Migration from Previous Versions
|
||||||
|
|
||||||
### Existing Installations
|
### Existing Installations
|
||||||
|
|
||||||
The new tools work alongside existing installations:
|
The new tools work alongside existing installations:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -431,6 +563,7 @@ The new tools work alongside existing installations:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Converting to Tag Management
|
### Converting to Tag Management
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Current versions are saved to hypr-tags.env automatically
|
# Current versions are saved to hypr-tags.env automatically
|
||||||
# Verify with:
|
# Verify with:
|
||||||
|
|||||||
62
README.md
62
README.md
@ -13,6 +13,14 @@
|
|||||||
<br/>
|
<br/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
## IMPORTANT note for Debian `Trixie` users
|
||||||
|
|
||||||
|
> If you later update Debian to `Forky` or `SID` you **MUST** recompile Hyprland!!
|
||||||
|
> Run `update-hyprland.sh --install --with-deps`
|
||||||
|
> Reboot afterwards
|
||||||
|
> Failure to do so will prevent Hyprland from starting under `Forky` or `SID`
|
||||||
|
> It will return to the login manager
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<br>
|
<br>
|
||||||
<a href="#-announcement-"><kbd> <br> Read this First <br> </kbd></a>  
|
<a href="#-announcement-"><kbd> <br> Read this First <br> </kbd></a>  
|
||||||
@ -35,7 +43,7 @@
|
|||||||
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki"><kbd> <br> Wiki <br> </kbd></a>  
|
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki"><kbd> <br> Wiki <br> </kbd></a>  
|
||||||
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds"><kbd> <br> Keybinds <br> </kbd></a>  
|
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds"><kbd> <br> Keybinds <br> </kbd></a>  
|
||||||
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki/FAQ"><kbd> <br> FAQ <br> </kbd></a>  
|
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki/FAQ"><kbd> <br> FAQ <br> </kbd></a>  
|
||||||
<a href="https://discord.gg/kool-tech-world"><kbd> <br> Discord <br> </kbd></a>
|
<a href="https://discord.gg/RZJgC7KAKm"><kbd> <br> Discord <br> </kbd></a>
|
||||||
</div><br>
|
</div><br>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@ -70,34 +78,54 @@
|
|||||||
|
|
||||||
#### ⚠️ Pre-requisites and VERY Important
|
#### ⚠️ Pre-requisites and VERY Important
|
||||||
|
|
||||||
- Do not run this installer as sudo or as root
|
> Note: At this time `Kali` Linux is not supported.
|
||||||
- This Installer requires a user with a priviledge to install packages
|
> A number of users have reported issues installing and using the Dotfiles
|
||||||
- Needs a Debian 13 Trixie or greater. As it needs newer wayland packages!
|
|
||||||
- edit your `/etc/apt/sources.list` and **remove** `#` on lines with `deb-src` to enable source packaging else will not install properly especially Hyprland
|
- Do not run this installer with `sudo` or as `root`
|
||||||
|
- This Installer requires a user with a `sudo` privileges to install packages
|
||||||
|
- Debian 13 Trixie or greater. For the correct `GCC` compiler and libs
|
||||||
|
- Edit your `/etc/apt/sources.list` and **remove** `#` on lines with `deb-src` to enable source packaging else will not install properly especially Hyprland
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo nano /etc/apt/sources.list
|
sudo nano /etc/apt/sources.list
|
||||||
```
|
```
|
||||||
|
|
||||||
- delete # on the lines with 'deb-src'
|
- Delete `#` on the lines with `deb-src`
|
||||||
- ensure to allow to install non-free drivers especially for users with NVIDIA gpus. You can also install non-free drivers if required. Edit install-scripts/nvidia.sh and change the nvidia stuff's if required
|
- Make sure to install `non-free` repository especially for users with NVIDIA GPUs. You can also install non-free drivers if required.
|
||||||
|
- Edit `install-scripts/nvidia.sh` and change the NVIDIA settings if required
|
||||||
|
|
||||||
|
> Note: For users with newer NVIDIA GPUs, especially, RTX5000 series, we strongly suggest you manually install the current `open` drivers for NVIDIA
|
||||||
|
> Not install them from Jak's Debian install script
|
||||||
|
|
||||||
### 🪧🪧🪧 ANNOUNCEMENT 🪧🪧🪧
|
### 🪧🪧🪧 ANNOUNCEMENT 🪧🪧🪧
|
||||||
|
|
||||||
[Debian-Hyprland Changelogs](https://github.com/JaKooLit/Debian-Hyprland/blob/main/CHANGELOGS.md)
|
[Debian-Hyprland Changelogs](https://github.com/JaKooLit/Debian-Hyprland/blob/main/CHANGELOGS.md)
|
||||||
|
|
||||||
|
- 10 January 2026 Update!
|
||||||
|
- Debian now builds Hyprland v0.53.2!
|
||||||
|
- This requires the just released `Debian-Hyprland v2.9.4` installer
|
||||||
|
- Debian 13 (`Trixie`, aka `Stable`)
|
||||||
|
- While it does now support v0.53.2
|
||||||
|
- At this time it should not be used for production
|
||||||
|
- Testing is on going but NVIDIA GPUs have not been tested
|
||||||
|
- Intel, AMD, and in VMs only so far
|
||||||
|
- Debian Testing (`Forky`) and Unstable (`SID`) - Build and run Hyprland v0.53.2 without issue
|
||||||
|
|
||||||
- 10 October 2025 Update!
|
- 10 October 2025 Update!
|
||||||
- Hyprland-Debian nows builds 0.51.1 from source!
|
- Hyprland-Debian nows builds 0.51.1 from source!
|
||||||
- The installer now can be used to install newer releases later
|
- The installer now can be used to install newer releases later
|
||||||
- If you are currently running 0.49, or 0.50, you can upgrade to 0.51.1
|
- If you are currently running 0.49, or 0.50, you can upgrade to 0.51.1 > Note: Newer Hyprland versions (0.53.x+) may require compatibility shims on Debian 13 (Trixie). > Use the provided update/install scripts with `--build-trixie` if needed.
|
||||||
> Note: At this time Debian 13 (Trixie) can't compile v0.52.2+
|
|
||||||
> Debian Testing and SID can
|
|
||||||
- You do not have to re-install everything, but re-running `install.sh` works also
|
- You do not have to re-install everything, but re-running `install.sh` works also
|
||||||
- Instructions are available in English and Spanish
|
- Instructions are available in English and Spanish
|
||||||
|
|
||||||
#### ✨ Some notes on this installer / Prerequisites
|
#### ✨ Some notes on this installer / Prerequisites
|
||||||
|
|
||||||
- Recommend to install SDDM. Apart from GDM and SDDM, any other Login Manager may not work nor launch Hyprland. However, hyprland can be launched through tty by type Hyprland
|
- Recommend installing SDDM. Apart from GDM and SDDM, other Login Managers may not launch `Hyprland`.
|
||||||
|
- yprland can be launched through tty by typing:
|
||||||
|
- Prior to Hyprland v0.53.x `Hyprland` or `hyprland`
|
||||||
|
- After Hyprland v0.53.x you must use `start-hyprland`
|
||||||
|
- Otherwise will generate and error at start up.
|
||||||
|
- You might need to update the login manager if not using SDDM or GDM
|
||||||
- 🕯️ network-manager-gnome (nm-applet) _has been removed_ from the packages to install. This is because it is known to restart the networkmanager causing issues in the installation process. After you boot up, inorder to get the network-manager applet, install network-manager-gnome. `sudo apt install network-manager-gnome` See below if your network or wifi became unmanaged after installation
|
- 🕯️ network-manager-gnome (nm-applet) _has been removed_ from the packages to install. This is because it is known to restart the networkmanager causing issues in the installation process. After you boot up, inorder to get the network-manager applet, install network-manager-gnome. `sudo apt install network-manager-gnome` See below if your network or wifi became unmanaged after installation
|
||||||
|
|
||||||
### 🚩 changing login manager to SDDM
|
### 🚩 changing login manager to SDDM
|
||||||
@ -189,7 +217,9 @@ chmod +x install.sh
|
|||||||
|
|
||||||
**Most common question I got is, Hey Ja, Why the heck it is taking long time to install? Other distro like Arch its only a minute or two. Why here takes like forever?!?!?**
|
**Most common question I got is, Hey Ja, Why the heck it is taking long time to install? Other distro like Arch its only a minute or two. Why here takes like forever?!?!?**
|
||||||
|
|
||||||
- Well, most of the core packages are downloaded and Build and compiled from _SOURCE_. Unlike Other distros, they already have prepacked binary that can just download and install.
|
- Most of the core packages are downloaded, some have to be compiled from source.
|
||||||
|
- Unlike Other distros, these packages already have prepacked binary that can just download and install.
|
||||||
|
- This adds to the install time
|
||||||
|
|
||||||
## 🛎 **_DEBIAN Hyprland Dots UPDATING NOTES_**
|
## 🛎 **_DEBIAN Hyprland Dots UPDATING NOTES_**
|
||||||
|
|
||||||
@ -207,7 +237,7 @@ Head over to wiki Link [`WIKI`](https://github.com/JaKooLit/Hyprland-Dots/wiki)
|
|||||||
Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds)
|
Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds)
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> KooL Hyprland has a searchable keybind function via rofi. (SUPER SHIFT K) or right click the `HINTS` waybar button
|
> KooL Hyprland has a searchable keybind rofi menu. (`SUPER SHIFT K`) or right click the `HINTS` waybar button
|
||||||
|
|
||||||
#### 🙋 👋 Having issues or questions?
|
#### 🙋 👋 Having issues or questions?
|
||||||
|
|
||||||
@ -221,7 +251,9 @@ Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds)
|
|||||||
- `./install-scripts/sddm.sh` - to reinstall sddm
|
- `./install-scripts/sddm.sh` - to reinstall sddm
|
||||||
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> DO NOT CD into install-scripts directory as script as it will fail. Scripts are designed to ran outside install-scripts directory for installation logging purposes.
|
> DO NOT CD into `install-scripts` directory to run any of those scripts
|
||||||
|
> The scripts are designed to ran outside `install-scripts` directory.
|
||||||
|
> If you do the scripts will fail.
|
||||||
|
|
||||||
#### 🛣️ Roadmap
|
#### 🛣️ Roadmap
|
||||||
|
|
||||||
@ -240,7 +272,7 @@ log into your account
|
|||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
- add "env = WLR_DRM_DEVICES,/dev/dri/cardX" to the ENVvariables config `~/.config/hypr/UserConfigs/ENVariables.conf` ; X being where the symlink of the gpu points to
|
- add `env = WLR_DRM_DEVICES,/dev/dri/cardX` to the ENVvariables config `~/.config/hypr/UserConfigs/ENVariables.conf` ; X being where the symlink of the gpu points to
|
||||||
|
|
||||||
- more info from the hyprland wiki [`Hyprland Wiki Link`](https://wiki.hyprland.org/FAQ/#my-external-monitor-is-blank--doesnt-render--receives-no-signal-laptop)
|
- more info from the hyprland wiki [`Hyprland Wiki Link`](https://wiki.hyprland.org/FAQ/#my-external-monitor-is-blank--doesnt-render--receives-no-signal-laptop)
|
||||||
|
|
||||||
|
|||||||
91
assets/0002-start-hyprland-no-nixgl.patch
Normal file
91
assets/0002-start-hyprland-no-nixgl.patch
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
diff --git a/start/src/core/Instance.cpp b/start/src/core/Instance.cpp
|
||||||
|
index 2f5007b..8c6c73c 100644
|
||||||
|
--- a/start/src/core/Instance.cpp
|
||||||
|
+++ b/start/src/core/Instance.cpp
|
||||||
|
@@ -1,8 +1,6 @@
|
||||||
|
#include "Instance.hpp"
|
||||||
|
#include "State.hpp"
|
||||||
|
#include "../helpers/Logger.hpp"
|
||||||
|
-#include "../helpers/Nix.hpp"
|
||||||
|
-
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <sys/poll.h>
|
||||||
|
@@ -54,13 +52,7 @@ void CHyprlandInstance::runHyprlandThread(bool safeMode) {
|
||||||
|
int sig = SIGKILL;
|
||||||
|
procctl(P_PID, getpid(), PROC_PDEATHSIG_CTL, &sig);
|
||||||
|
#endif
|
||||||
|
-
|
||||||
|
- if (Nix::shouldUseNixGL()) {
|
||||||
|
- argsStd.insert(argsStd.begin(), g_state->customPath.value_or("Hyprland"));
|
||||||
|
- args.insert(args.begin(), strdup(argsStd.front().c_str()));
|
||||||
|
- execvp("nixGL", args.data());
|
||||||
|
- } else
|
||||||
|
- execvp(g_state->customPath.value_or("Hyprland").c_str(), args.data());
|
||||||
|
+ execvp(g_state->customPath.value_or("Hyprland").c_str(), args.data());
|
||||||
|
|
||||||
|
g_logger->log(Hyprutils::CLI::LOG_ERR, "fork(): execvp failed: {}", strerror(errno));
|
||||||
|
std::fflush(stdout);
|
||||||
|
diff --git a/start/src/core/State.hpp b/start/src/core/State.hpp
|
||||||
|
index d00a175..6cf73a9 100644
|
||||||
|
--- a/start/src/core/State.hpp
|
||||||
|
+++ b/start/src/core/State.hpp
|
||||||
|
@@ -8,7 +8,6 @@
|
||||||
|
struct SState {
|
||||||
|
std::span<const char*> rawArgvNoBinPath;
|
||||||
|
std::optional<std::string> customPath;
|
||||||
|
- bool noNixGl = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline UP<SState> g_state = makeUnique<SState>();
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/start/src/main.cpp b/start/src/main.cpp
|
||||||
|
index e73fcfa..30e68f0 100644
|
||||||
|
--- a/start/src/main.cpp
|
||||||
|
+++ b/start/src/main.cpp
|
||||||
|
@@ -3,7 +3,6 @@
|
||||||
|
#include <print>
|
||||||
|
|
||||||
|
#include "helpers/Logger.hpp"
|
||||||
|
-#include "helpers/Nix.hpp"
|
||||||
|
#include "core/State.hpp"
|
||||||
|
#include "core/Instance.hpp"
|
||||||
|
|
||||||
|
@@ -21,7 +20,6 @@ Any arguments after -- are passed to Hyprland. For Hyprland help, run start-hypr
|
||||||
|
|
||||||
|
Additional arguments for start-hyprland:
|
||||||
|
--path [path] -> Override Hyprland path
|
||||||
|
- --no-nixgl -> Force disable nixGL
|
||||||
|
)#";
|
||||||
|
|
||||||
|
//
|
||||||
|
@@ -74,28 +72,13 @@ int main(int argc, const char** argv, const char** envp) {
|
||||||
|
|
||||||
|
g_state->customPath = argv[++i];
|
||||||
|
continue;
|
||||||
|
- }
|
||||||
|
- if (arg == "--no-nixgl") {
|
||||||
|
- g_state->noNixGl = true;
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
+ } }
|
||||||
|
|
||||||
|
if (startArgv != -1)
|
||||||
|
g_state->rawArgvNoBinPath = std::span<const char*>{argv + startArgv, argc - startArgv};
|
||||||
|
|
||||||
|
if (!g_state->rawArgvNoBinPath.empty())
|
||||||
|
g_logger->log(Hyprutils::CLI::LOG_WARN, "Arguments after -- are passed to Hyprland");
|
||||||
|
-
|
||||||
|
- // check if our environment is OK
|
||||||
|
- if (const auto RET = Nix::nixEnvironmentOk(); !RET) {
|
||||||
|
- g_logger->log(Hyprutils::CLI::LOG_ERR, "Nix environment check failed:\n{}", RET.error());
|
||||||
|
- return 1;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (Nix::shouldUseNixGL())
|
||||||
|
- g_logger->log(Hyprutils::CLI::LOG_DEBUG, "Hyprland was compiled with Nix - will use nixGL");
|
||||||
|
-
|
||||||
|
bool safeMode = false;
|
||||||
|
while (true) {
|
||||||
|
g_instance = makeUnique<CHyprlandInstance>();
|
||||||
@ -134,11 +134,16 @@ done
|
|||||||
|
|
||||||
# Summary
|
# Summary
|
||||||
{
|
{
|
||||||
echo "\nSummary (dry-run):"
|
printf "\nSummary (dry-run):\n"
|
||||||
for mod in "${MODULES[@]}"; do
|
for mod in "${MODULES[@]}"; do
|
||||||
printf "%-24s %s\n" "$mod" "${RESULTS[$mod]:-SKIPPED}"
|
printf "%-24s %s\n" "$mod" "${RESULTS[$mod]:-SKIPPED}"
|
||||||
done
|
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"
|
} | tee -a "$SUMMARY_LOG"
|
||||||
|
|
||||||
# Exit non-zero if any FAIL occurred
|
# Exit non-zero if any FAIL occurred
|
||||||
|
|||||||
@ -1,15 +1,13 @@
|
|||||||
# Central tag overrides for the Hyprland stack
|
|
||||||
# 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
|
|
||||||
AQUAMARINE_TAG=v0.10.0
|
AQUAMARINE_TAG=v0.10.0
|
||||||
HYPRUTILS_TAG=v0.10.4
|
HYPRGRAPHICS_TAG=v0.5.0
|
||||||
HYPRLANG_TAG=v0.6.7
|
HYPRLAND_GUIUTILS_TAG=v0.2.1
|
||||||
HYPRGRAPHICS_TAG=v0.4.0
|
|
||||||
HYPRTOOLKIT_TAG=v0.4.1
|
|
||||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
|
||||||
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||||
HYPRLAND_GUIUTILS_TAG=v0.2.0
|
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||||
|
HYPRLAND_TAG=v0.53.3
|
||||||
|
HYPRLANG_TAG=v0.6.8
|
||||||
|
HYPRTOOLKIT_TAG=v0.5.3
|
||||||
|
HYPRUTILS_TAG=v0.11.0
|
||||||
|
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||||
|
HYPRWIRE_TAG=v0.2.1
|
||||||
WAYLAND_PROTOCOLS_TAG=1.46
|
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
|
|
||||||
@ -25,6 +25,12 @@ if [ ! -d Install-Logs ]; then
|
|||||||
mkdir Install-Logs
|
mkdir Install-Logs
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Shared build output root (override with BUILD_ROOT env)
|
||||||
|
BUILD_ROOT="${BUILD_ROOT:-$PWD/build}"
|
||||||
|
mkdir -p "$BUILD_ROOT"
|
||||||
|
SRC_ROOT="${SRC_ROOT:-$BUILD_ROOT/src}"
|
||||||
|
mkdir -p "$SRC_ROOT"
|
||||||
|
|
||||||
# Show progress function
|
# Show progress function
|
||||||
show_progress() {
|
show_progress() {
|
||||||
local pid=$1
|
local pid=$1
|
||||||
|
|||||||
@ -95,8 +95,9 @@ sudo npm install --global typescript 2>&1 | tee -a "$LOG"
|
|||||||
# ags v1
|
# ags v1
|
||||||
printf "${NOTE} Install and Compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}..\n"
|
printf "${NOTE} Install and Compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}..\n"
|
||||||
|
|
||||||
# Remove previous sources (both legacy "ags" and tagged "ags_v1.9.0")
|
# Remove previous sources (both legacy "ags" and tagged "ags_v1.9.0") under build/src
|
||||||
for SRC_DIR in "ags" "ags_v1.9.0"; do
|
for OLD in "ags" "ags_v1.9.0"; do
|
||||||
|
SRC_DIR="$SRC_ROOT/$OLD"
|
||||||
if [ -d "$SRC_DIR" ]; then
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing %s directory...\\n" "$SRC_DIR"
|
printf "${NOTE} Removing existing %s directory...\\n" "$SRC_DIR"
|
||||||
rm -rf "$SRC_DIR"
|
rm -rf "$SRC_DIR"
|
||||||
@ -107,11 +108,14 @@ printf "\n%.0s" {1..1}
|
|||||||
printf "${INFO} Kindly Standby...cloning and compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}...\n"
|
printf "${INFO} Kindly Standby...cloning and compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}...\n"
|
||||||
printf "\n%.0s" {1..1}
|
printf "\n%.0s" {1..1}
|
||||||
# Clone repository with the specified tag and capture git output into MLOG
|
# Clone repository with the specified tag and capture git output into MLOG
|
||||||
if git clone --depth=1 https://github.com/JaKooLit/ags_v1.9.0.git; then
|
SRC_DIR="$SRC_ROOT/ags_v1.9.0"
|
||||||
cd ags_v1.9.0 || exit 1
|
if git clone --depth=1 https://github.com/JaKooLit/ags_v1.9.0.git "$SRC_DIR"; then
|
||||||
|
cd "$SRC_DIR" || exit 1
|
||||||
|
BUILD_DIR="$BUILD_ROOT/ags_v1.9.0"
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
npm install
|
npm install
|
||||||
meson setup build
|
meson setup "$BUILD_DIR"
|
||||||
if sudo meson install -C build 2>&1 | tee -a "$MLOG"; then
|
if sudo meson install -C "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
|
||||||
printf "\n${OK} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "\n${OK} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
|
|
||||||
# Patch installed AGS launchers to ensure GI typelibs in /usr/local/lib are discoverable in GJS ESM
|
# Patch installed AGS launchers to ensure GI typelibs in /usr/local/lib are discoverable in GJS ESM
|
||||||
@ -203,11 +207,11 @@ WRAP
|
|||||||
echo -e "\n${ERROR} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Installation failed\n " 2>&1 | tee -a "$MLOG"
|
echo -e "\n${ERROR} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Installation failed\n " 2>&1 | tee -a "$MLOG"
|
||||||
fi
|
fi
|
||||||
# Move logs to Install-Logs directory
|
# Move logs to Install-Logs directory
|
||||||
mv "$MLOG" ../Install-Logs/ || true
|
mv "$MLOG" "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "\n${ERROR} Failed to download ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Please check your connection\n" 2>&1 | tee -a "$LOG"
|
echo -e "\n${ERROR} Failed to download ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Please check your connection\n" 2>&1 | tee -a "$LOG"
|
||||||
mv "$MLOG" ../Install-Logs/ || true
|
mv "$MLOG" "$PARENT_DIR/Install-Logs/" || true
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@ -41,19 +41,22 @@ MLOG="install-$(date +%d-%H%M%S)_aquamarine.log"
|
|||||||
# Installation of dependencies
|
# Installation of dependencies
|
||||||
printf "\n%s - Installing ${YELLOW}aquamarine dependencies${RESET} .... \n" "${INFO}"
|
printf "\n%s - Installing ${YELLOW}aquamarine dependencies${RESET} .... \n" "${INFO}"
|
||||||
|
|
||||||
# Check if aquamarinedirectory exists and remove it
|
# Check if aquamarinedirectory exists and remove it (under build/src)
|
||||||
if [ -d "aquamarine" ]; then
|
SRC_DIR="$SRC_ROOT/aquamarine"
|
||||||
rm -rf "aquamarine"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${INFO} Installing ${YELLOW}aquamarine $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}aquamarine $tag${RESET} ...\n"
|
||||||
if git clone --recursive -b "$tag" https://github.com/hyprwm/aquamarine.git; then
|
if git clone --recursive -b "$tag" https://github.com/hyprwm/aquamarine.git "$SRC_DIR"; then
|
||||||
cd aquamarine || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
|
BUILD_DIR="$BUILD_ROOT/aquamarine"
|
||||||
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
mkdir -p "$BUILD_DIR"
|
||||||
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${MAGENTA}aquamarine $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}aquamarine $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}aquamarine $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}aquamarine $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
@ -62,7 +65,7 @@ if git clone --recursive -b "$tag" https://github.com/hyprwm/aquamarine.git; the
|
|||||||
echo "${NOTE} DRY RUN: Skipping installation of aquamarine $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of aquamarine $tag."
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}aquamarine $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}aquamarine $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -24,15 +24,16 @@ fi
|
|||||||
# Check if Hyprland-Dots exists
|
# Check if Hyprland-Dots exists
|
||||||
printf "${NOTE} Cloning and Installing ${SKY_BLUE}KooL's Hyprland Dots for Debian${RESET}....\n"
|
printf "${NOTE} Cloning and Installing ${SKY_BLUE}KooL's Hyprland Dots for Debian${RESET}....\n"
|
||||||
|
|
||||||
# Check if Hyprland-Dots exists
|
# Check if Hyprland-Dots exists (under build/src)
|
||||||
if [ -d Hyprland-Dots-Debian ]; then
|
SRC_DIR="$SRC_ROOT/Hyprland-Dots-Debian"
|
||||||
cd Hyprland-Dots-Debian
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
cd "$SRC_DIR"
|
||||||
git stash && git pull
|
git stash && git pull
|
||||||
chmod +x copy.sh
|
chmod +x copy.sh
|
||||||
./copy.sh
|
./copy.sh
|
||||||
else
|
else
|
||||||
if git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots Hyprland-Dots-Debian; then
|
if git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots "$SRC_DIR"; then
|
||||||
cd Hyprland-Dots-Debian || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
chmod +x copy.sh
|
chmod +x copy.sh
|
||||||
./copy.sh
|
./copy.sh
|
||||||
else
|
else
|
||||||
|
|||||||
@ -29,18 +29,19 @@ for PKG1 in "${engine[@]}"; do
|
|||||||
install_package "$PKG1" "$LOG"
|
install_package "$PKG1" "$LOG"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Check if the directory exists and delete it if present
|
# Check if the directory exists and delete it if present (under build/src)
|
||||||
if [ -d "GTK-themes-icons" ]; then
|
SRC_DIR="$SRC_ROOT/GTK-themes-icons"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
echo "$NOTE GTK themes and Icons directory exist..deleting..." 2>&1 | tee -a "$LOG"
|
echo "$NOTE GTK themes and Icons directory exist..deleting..." 2>&1 | tee -a "$LOG"
|
||||||
rm -rf "GTK-themes-icons" 2>&1 | tee -a "$LOG"
|
rm -rf "$SRC_DIR" 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "$NOTE Cloning ${SKY_BLUE}GTK themes and Icons${RESET} repository..." 2>&1 | tee -a "$LOG"
|
echo "$NOTE Cloning ${SKY_BLUE}GTK themes and Icons${RESET} repository..." 2>&1 | tee -a "$LOG"
|
||||||
if git clone --depth=1 https://github.com/JaKooLit/GTK-themes-icons.git ; then
|
if git clone --depth=1 https://github.com/JaKooLit/GTK-themes-icons.git "$SRC_DIR"; then
|
||||||
cd GTK-themes-icons
|
cd "$SRC_DIR"
|
||||||
chmod +x auto-extract.sh
|
chmod +x auto-extract.sh
|
||||||
./auto-extract.sh
|
./auto-extract.sh
|
||||||
cd ..
|
cd "$PARENT_DIR"
|
||||||
echo "$OK Extracted GTK Themes & Icons to ~/.icons & ~/.themes directories" 2>&1 | tee -a "$LOG"
|
echo "$OK Extracted GTK Themes & Icons to ~/.icons & ~/.themes directories" 2>&1 | tee -a "$LOG"
|
||||||
else
|
else
|
||||||
echo "$ERROR Download failed for GTK themes and Icons.." 2>&1 | tee -a "$LOG"
|
echo "$ERROR Download failed for GTK themes and Icons.." 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -45,25 +45,28 @@ for PKG1 in "${cursor[@]}"; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Check if hyprcursor folder exists and remove it
|
# Check if hyprcursor folder exists and remove it (under build/src)
|
||||||
if [ -d "hyprcursor" ]; then
|
SRC_DIR="$SRC_ROOT/hyprcursor"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing hyprcursor folder...\n"
|
printf "${NOTE} Removing existing hyprcursor folder...\n"
|
||||||
rm -rf "hyprcursor"
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${NOTE} Installing hyprcursor...\n"
|
printf "${NOTE} Installing hyprcursor...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprcursor.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprcursor.git "$SRC_DIR"; then
|
||||||
cd hyprcursor || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
|
BUILD_DIR="$BUILD_ROOT/hyprcursor"
|
||||||
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
mkdir -p "$BUILD_DIR"
|
||||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} hyprcursor installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} hyprcursor installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for hyprcursor." 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for hyprcursor." 2>&1 | tee -a "$MLOG"
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
mv $MLOG ../Install-Logs/ || true
|
mv $MLOG "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for hyprcursor." 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for hyprcursor." 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -53,19 +53,22 @@ for PKG1 in "${hyprgraphics[@]}"; do
|
|||||||
done
|
done
|
||||||
printf "\n%.0s" {1..1}
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
# Check if hyprgraphics directory exists and remove it
|
# Check if hyprgraphics directory exists and remove it (under build/src)
|
||||||
if [ -d "hyprgraphics" ]; then
|
SRC_DIR="$SRC_ROOT/hyprgraphics"
|
||||||
rm -rf "hyprgraphics"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${INFO} Installing ${YELLOW}hyprgraphics $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}hyprgraphics $tag${RESET} ...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprgraphics.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprgraphics.git "$SRC_DIR"; then
|
||||||
cd hyprgraphics || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
|
BUILD_DIR="$BUILD_ROOT/hyprgraphics"
|
||||||
cmake --build ./build --config Release --target hyprgraphics -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
mkdir -p "$BUILD_DIR"
|
||||||
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target hyprgraphics -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${MAGENTA}hyprgraphics $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}hyprgraphics $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}hyprgraphics $graphics${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}hyprgraphics $graphics${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
@ -74,7 +77,7 @@ if git clone --recursive -b $tag https://github.com/hyprwm/hyprgraphics.git; the
|
|||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprgraphics $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprgraphics $tag."
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}hyprgraphics $graphics${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}hyprgraphics $graphics${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -37,24 +37,27 @@ for PKG1 in "${idle[@]}"; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Check if hypridle directory exists and remove it
|
# Check if hypridle directory exists and remove it (under build/src)
|
||||||
if [ -d "hypridle" ]; then
|
SRC_DIR="$SRC_ROOT/hypridle"
|
||||||
rm -rf "hypridle"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${INFO} Installing ${YELLOW}hypridle $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}hypridle $tag${RESET} ...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hypridle.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hypridle.git "$SRC_DIR"; then
|
||||||
cd hypridle || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
|
BUILD_DIR="$BUILD_ROOT/hypridle"
|
||||||
cmake --build ./build --config Release --target hypridle -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
mkdir -p "$BUILD_DIR"
|
||||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target hypridle -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${MAGENTA}hypridle $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}hypridle $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}hypridle $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}hypridle $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
mv $MLOG ../Install-Logs/ || true
|
mv $MLOG "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}hypridle $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}hypridle $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -63,19 +63,29 @@ done
|
|||||||
|
|
||||||
printf "\n%.0s" {1..1}
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
# Check if hyprland-guiutils directory exists and remove it
|
# Check if hyprland-guiutils directory exists and remove it (under build/src)
|
||||||
if [ -d "hyprland-guiutils" ]; then
|
SRC_DIR="$SRC_ROOT/hyprland-guiutils"
|
||||||
rm -rf "hyprland-guiutils"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${INFO} Installing ${YELLOW}hyprland-guiutils $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}hyprland-guiutils $tag${RESET} ...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-guiutils.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-guiutils.git "$SRC_DIR"; then
|
||||||
cd hyprland-guiutils || exit 1
|
cd "$SRC_DIR" || 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.
|
||||||
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
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:-}"
|
||||||
|
|
||||||
|
BUILD_DIR="$BUILD_ROOT/hyprland-guiutils"
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${MAGENTA}hyprland-guiutils $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}hyprland-guiutils $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-guiutils $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-guiutils $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
@ -84,7 +94,7 @@ if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-guiutils.git
|
|||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprland-guiutils $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprland-guiutils $tag."
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-guiutils $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-guiutils $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -41,18 +41,21 @@ MLOG="install-$(date +%d-%H%M%S)_protocols2.log"
|
|||||||
# Installation of dependencies
|
# Installation of dependencies
|
||||||
printf "\n%s - Installing ${YELLOW}hyprland-protocols dependencies${RESET} .... \n" "${INFO}"
|
printf "\n%s - Installing ${YELLOW}hyprland-protocols dependencies${RESET} .... \n" "${INFO}"
|
||||||
|
|
||||||
# Check if hyprland-protocols directory exists and remove it
|
# Check if hyprland-protocols directory exists and remove it (under build/src)
|
||||||
if [ -d "hyprland-protocols" ]; then
|
SRC_DIR="$SRC_ROOT/hyprland-protocols"
|
||||||
rm -rf "hyprland-protocols"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${INFO} Installing ${YELLOW}hyprland-protocols $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}hyprland-protocols $tag${RESET} ...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-protocols.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-protocols.git "$SRC_DIR"; then
|
||||||
cd hyprland-protocols || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
meson setup build
|
BUILD_DIR="$BUILD_ROOT/hyprland-protocols"
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
meson setup "$BUILD_DIR"
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo meson install -C build 2>&1 | tee -a "$MLOG" ; then
|
if sudo meson install -C "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${MAGENTA}hyprland-protocols $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}hyprland-protocols $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-protocols $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-protocols $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
@ -61,7 +64,7 @@ if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-protocols.gi
|
|||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprland-protocols $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprland-protocols $tag."
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-protocols tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-protocols tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -61,19 +61,22 @@ done
|
|||||||
|
|
||||||
printf "\n%.0s" {1..1}
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
# Check if hyprland-qt-support directory exists and remove it
|
# Check if hyprland-qt-support directory exists and remove it (under build/src)
|
||||||
if [ -d "hyprland-qt-support" ]; then
|
SRC_DIR="$SRC_ROOT/hyprland-qt-support"
|
||||||
rm -rf "hyprland-qt-support"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${INFO} Installing ${YELLOW}hyprland-qt-support $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}hyprland-qt-support $tag${RESET} ...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-qt-support.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-qt-support.git "$SRC_DIR"; then
|
||||||
cd hyprland-qt-support || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
|
BUILD_DIR="$BUILD_ROOT/hyprland-qt-support"
|
||||||
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
mkdir -p "$BUILD_DIR"
|
||||||
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${MAGENTA}hyprland-qt-support $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}hyprland-qt-support $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-qt-support $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-qt-support $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
@ -82,7 +85,7 @@ if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-qt-support.g
|
|||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprland-qt-support $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprland-qt-support $tag."
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-qt-support $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-qt-support $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
# Main Hyprland Package#
|
# Main Hyprland Package#
|
||||||
|
|
||||||
#specific branch or release
|
#specific branch or release
|
||||||
tag="v0.53.0"
|
tag="v0.53.3"
|
||||||
# Auto-source centralized tags if env is unset
|
# Auto-source centralized tags if env is unset
|
||||||
if [ -z "${HYPRLAND_TAG:-}" ]; then
|
if [ -z "${HYPRLAND_TAG:-}" ]; then
|
||||||
TAGS_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/hypr-tags.env"
|
TAGS_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/hypr-tags.env"
|
||||||
@ -73,14 +73,17 @@ printf "\n%.0s" {1..1}
|
|||||||
# Clone, build, and install Hyprland using Cmake
|
# Clone, build, and install Hyprland using Cmake
|
||||||
printf "${NOTE} Cloning and Installing ${YELLOW}Hyprland $tag${RESET} ...\n"
|
printf "${NOTE} Cloning and Installing ${YELLOW}Hyprland $tag${RESET} ...\n"
|
||||||
|
|
||||||
# Check if Hyprland folder exists and remove it
|
# Check if Hyprland folder exists and remove it (under build/src)
|
||||||
if [ -d "Hyprland" ]; then
|
SRC_DIR="$SRC_ROOT/Hyprland"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing Hyprland folder...\n"
|
printf "${NOTE} Removing existing Hyprland folder...\n"
|
||||||
rm -rf "Hyprland" 2>&1 | tee -a "$LOG"
|
rm -rf "$SRC_DIR" 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if git clone --recursive -b $tag "https://github.com/hyprwm/Hyprland"; then
|
if git clone --recursive -b $tag "https://github.com/hyprwm/Hyprland" "$SRC_DIR"; then
|
||||||
cd "Hyprland" || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
|
BUILD_DIR="$BUILD_ROOT/hyprland"
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
|
||||||
# Compatibility shim for toolchains without std::vector::{insert_range,append_range}
|
# Compatibility shim for toolchains without std::vector::{insert_range,append_range}
|
||||||
RANGE_HDR="$(pwd)/hypr_range_compat.hpp"
|
RANGE_HDR="$(pwd)/hypr_range_compat.hpp"
|
||||||
@ -118,14 +121,37 @@ EOF
|
|||||||
sed -ri 's|^\s*#embed\s+"\.{0,2}/\.{0,2}/example/hyprland\.conf"\s*$|#include "defaultConfig.bytes.inc"|g' src/config/defaultConfig.hpp || true
|
sed -ri 's|^\s*#embed\s+"\.{0,2}/\.{0,2}/example/hyprland\.conf"\s*$|#include "defaultConfig.bytes.inc"|g' src/config/defaultConfig.hpp || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Compatibility: some toolchains/libstdc++ do not support std::string operator+ with std::string_view.
|
||||||
|
# Hyprland hyprctl uses a std::string_view filename; ensure it is converted explicitly.
|
||||||
|
HYPRCTL_MAIN="$(pwd)/hyprctl/src/main.cpp"
|
||||||
|
if [ -f "$HYPRCTL_MAIN" ] && grep -q "std::string socketPath" "$HYPRCTL_MAIN"; then
|
||||||
|
# Only patch if we see a "+ filename" concatenation.
|
||||||
|
if grep -qE '\+\s*filename\s*;' "$HYPRCTL_MAIN"; then
|
||||||
|
sed -ri 's/\+\s*filename\s*;/+ std::string(filename);/g' "$HYPRCTL_MAIN" || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Apply patch only if it applies cleanly; otherwise skip
|
# Apply patch only if it applies cleanly; otherwise skip
|
||||||
if [ -f ../assets/0001-fix-hyprland-compile-issue.patch ]; then
|
if [ -f "$PARENT_DIR/assets/0001-fix-hyprland-compile-issue.patch" ]; then
|
||||||
if patch -p1 --dry-run <../assets/0001-fix-hyprland-compile-issue.patch >/dev/null 2>&1; then
|
if patch -p1 --dry-run <"$PARENT_DIR/assets/0001-fix-hyprland-compile-issue.patch" >/dev/null 2>&1; then
|
||||||
patch -p1 <../assets/0001-fix-hyprland-compile-issue.patch
|
patch -p1 <"$PARENT_DIR/assets/0001-fix-hyprland-compile-issue.patch"
|
||||||
else
|
else
|
||||||
echo "${NOTE} Hyprland compile patch does not apply on $tag; skipping."
|
echo "${NOTE} Hyprland compile patch does not apply on $tag; skipping."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Optionally strip nixGL/Nix helper logic from start-hyprland (Debian does not need it)
|
||||||
|
if [ -f "$PARENT_DIR/assets/0002-start-hyprland-no-nixgl.patch" ]; then
|
||||||
|
if patch -p1 --dry-run <"$PARENT_DIR/assets/0002-start-hyprland-no-nixgl.patch" >/dev/null 2>&1; then
|
||||||
|
patch -p1 <"$PARENT_DIR/assets/0002-start-hyprland-no-nixgl.patch"
|
||||||
|
else
|
||||||
|
echo "${NOTE} Hyprland start-hyprland nixGL patch does not apply on $tag; skipping."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove Nix helper sources that are no longer used (defensive)
|
||||||
|
rm -f start/src/helpers/Nix.cpp start/src/helpers/Nix.hpp || true
|
||||||
|
|
||||||
# By default, build Hyprland with bundled hyprutils/hyprlang to avoid version mismatches
|
# By default, build Hyprland with bundled hyprutils/hyprlang to avoid version mismatches
|
||||||
# You can force system libs by exporting USE_SYSTEM_HYPRLIBS=1 before running this script.
|
# You can force system libs by exporting USE_SYSTEM_HYPRLIBS=1 before running this script.
|
||||||
USE_SYSTEM=${USE_SYSTEM_HYPRLIBS:-1}
|
USE_SYSTEM=${USE_SYSTEM_HYPRLIBS:-1}
|
||||||
@ -169,19 +195,121 @@ EOF
|
|||||||
-DCMAKE_CXX_FLAGS="-Wno-unknown-warning-option -include ${RANGE_HDR}"
|
-DCMAKE_CXX_FLAGS="-Wno-unknown-warning-option -include ${RANGE_HDR}"
|
||||||
"${SYSTEM_FLAGS[@]}"
|
"${SYSTEM_FLAGS[@]}"
|
||||||
)
|
)
|
||||||
cmake -S . -B build "${CONFIG_FLAGS[@]}"
|
cmake -S . -B "$BUILD_DIR" "${CONFIG_FLAGS[@]}"
|
||||||
cmake --build build -j "$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)"
|
cmake --build "$BUILD_DIR" -j "$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)"
|
||||||
|
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
|
||||||
printf "${OK} ${MAGENTA}Hyprland tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}Hyprland tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
|
|
||||||
|
# Update version header file for tools like fastfetch that read it at runtime
|
||||||
|
printf "${NOTE} Updating system version header for Hyprland...\n"
|
||||||
|
VER_OUTPUT=""
|
||||||
|
if [ -x "$BUILD_DIR/Hyprland" ]; then
|
||||||
|
VER_OUTPUT=$("$BUILD_DIR/Hyprland" --version)
|
||||||
|
elif [ -x "$BUILD_DIR/hyprland" ]; then
|
||||||
|
VER_OUTPUT=$("$BUILD_DIR/hyprland" --version)
|
||||||
|
elif command -v Hyprland >/dev/null 2>&1; then
|
||||||
|
VER_OUTPUT=$(Hyprland --version)
|
||||||
|
elif command -v hyprctl >/dev/null 2>&1; then
|
||||||
|
VER_OUTPUT=$(hyprctl version)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$VER_OUTPUT" ]; then
|
||||||
|
VERSION=$(printf '%s' "$VER_OUTPUT" | head -n1 | awk '{print $2}')
|
||||||
|
COMMIT=$(printf '%s' "$VER_OUTPUT" | grep -oP 'commit \K[a-f0-9]+' | head -1)
|
||||||
|
TAG=$(printf '%s' "$VER_OUTPUT" | grep -oP 'Tag: \K[^,]+' | head -1)
|
||||||
|
COMMIT_DATE=$(printf '%s' "$VER_OUTPUT" | grep -oP '^Date:\s+\K.*' | head -1)
|
||||||
|
COMMITS=$(printf '%s' "$VER_OUTPUT" | grep -oP 'commits:\s*\K[0-9]+' | head -1)
|
||||||
|
DIRTY=$(printf '%s' "$VER_OUTPUT" | grep -qi 'dirty' && echo "dirty" || echo "clean")
|
||||||
|
COMMIT_MSG=$(printf '%s' "$VER_OUTPUT" | head -n1 | sed -n 's/.*(version: \(.*\))\..*/\1/p')
|
||||||
|
|
||||||
|
[ -z "$COMMIT" ] && COMMIT="unknown"
|
||||||
|
[ -z "$TAG" ] && TAG="v$VERSION"
|
||||||
|
[ -z "$COMMIT_DATE" ] && COMMIT_DATE="$(date)"
|
||||||
|
[ -z "$COMMITS" ] && COMMITS="0"
|
||||||
|
[ -z "$COMMIT_MSG" ] && COMMIT_MSG="version: bump"
|
||||||
|
|
||||||
|
# Prefer versions from hyprland --version; fall back to hypr-tags.env values
|
||||||
|
parse_ver() { printf '%s' "$VER_OUTPUT" | grep -m1 "$1:" | grep -oP '\d+\.\d+\.\d+' | head -1; }
|
||||||
|
AQUA_VER=$(parse_ver "Aquamarine")
|
||||||
|
HYPRLANG_VER=$(parse_ver "Hyprlang")
|
||||||
|
HYPRUTILS_VER=$(parse_ver "Hyprutils")
|
||||||
|
HYPRCURSOR_VER=$(parse_ver "Hyprcursor")
|
||||||
|
HYPRGRAPHICS_VER=$(parse_ver "Hyprgraphics")
|
||||||
|
|
||||||
|
[ -z "$AQUA_VER" ] && AQUA_VER="${AQUAMARINE_TAG#v}"
|
||||||
|
[ -z "$HYPRLANG_VER" ] && HYPRLANG_VER="${HYPRLANG_TAG#v}"
|
||||||
|
[ -z "$HYPRUTILS_VER" ] && HYPRUTILS_VER="${HYPRUTILS_TAG#v}"
|
||||||
|
[ -z "$HYPRGRAPHICS_VER" ] && HYPRGRAPHICS_VER="${HYPRGRAPHICS_TAG#v}"
|
||||||
|
[ -z "$HYPRCURSOR_VER" ] && HYPRCURSOR_VER="0.1.13"
|
||||||
|
[ -z "$AQUA_VER" ] && AQUA_VER="0.0.0"
|
||||||
|
[ -z "$HYPRLANG_VER" ] && HYPRLANG_VER="0.0.0"
|
||||||
|
[ -z "$HYPRUTILS_VER" ] && HYPRUTILS_VER="0.0.0"
|
||||||
|
[ -z "$HYPRGRAPHICS_VER" ] && HYPRGRAPHICS_VER="0.0.0"
|
||||||
|
|
||||||
|
# AQUAMARINE_VERSION components
|
||||||
|
AQUA_MAJOR=$(echo "$AQUA_VER" | cut -d. -f1)
|
||||||
|
AQUA_MINOR=$(echo "$AQUA_VER" | cut -d. -f2)
|
||||||
|
AQUA_PATCH=$(echo "$AQUA_VER" | cut -d. -f3)
|
||||||
|
|
||||||
|
# Use printf to safely write the file
|
||||||
|
printf '%s\n' "#pragma once" > /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define GIT_COMMIT_HASH \"$COMMIT\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define GIT_BRANCH \"\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define GIT_COMMIT_MESSAGE \"$COMMIT_MSG\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define GIT_COMMIT_DATE \"$COMMIT_DATE\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define GIT_DIRTY \"$DIRTY\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define GIT_TAG \"$TAG\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define GIT_COMMITS \"$COMMITS\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define AQUAMARINE_VERSION \"$AQUA_VER\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "// clang-format off" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define AQUAMARINE_VERSION_MAJOR $AQUA_MAJOR" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define AQUAMARINE_VERSION_MINOR $AQUA_MINOR" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define AQUAMARINE_VERSION_PATCH $AQUA_PATCH" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "// clang-format on" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define HYPRLANG_VERSION \"$HYPRLANG_VER\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define HYPRUTILS_VERSION \"$HYPRUTILS_VER\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define HYPRCURSOR_VERSION \"$HYPRCURSOR_VER\"" >> /tmp/version_header.h.tmp
|
||||||
|
printf '%s\n' "#define HYPRGRAPHICS_VERSION \"$HYPRGRAPHICS_VER\"" >> /tmp/version_header.h.tmp
|
||||||
|
|
||||||
|
TARGETS=()
|
||||||
|
if [ -f /usr/local/include/hyprland/src/version.h ]; then
|
||||||
|
TARGETS+=(/usr/local/include/hyprland/src/version.h)
|
||||||
|
fi
|
||||||
|
if [ -f /usr/include/hyprland/src/version.h ]; then
|
||||||
|
# If both exist, keep /usr/include in sync to avoid fastfetch mismatch.
|
||||||
|
TARGETS+=(/usr/include/hyprland/src/version.h)
|
||||||
|
fi
|
||||||
|
if [ ${#TARGETS[@]} -eq 0 ]; then
|
||||||
|
# Default to /usr/local if neither header exists yet.
|
||||||
|
TARGETS+=(/usr/local/include/hyprland/src/version.h)
|
||||||
|
fi
|
||||||
|
|
||||||
|
UPDATED=0
|
||||||
|
for tgt in "${TARGETS[@]}"; do
|
||||||
|
if sudo install -d "$(dirname "$tgt")" && sudo cp /tmp/version_header.h.tmp "$tgt" 2>&1 | tee -a "$MLOG"; then
|
||||||
|
UPDATED=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $UPDATED -eq 1 ]; then
|
||||||
|
printf "${OK} System version header updated to $VERSION\n" 2>&1 | tee -a "$MLOG"
|
||||||
|
else
|
||||||
|
printf "${NOTE} Could not update system version header (non-critical)\n" 2>&1 | tee -a "$MLOG"
|
||||||
|
fi
|
||||||
|
rm -f /tmp/version_header.h.tmp
|
||||||
|
else
|
||||||
|
printf "${NOTE} Could not determine Hyprland version output for header update (non-critical)\n" 2>&1 | tee -a "$MLOG"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}Hyprland $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}Hyprland $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "${NOTE} DRY RUN: Skipping installation of Hyprland $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of Hyprland $tag."
|
||||||
fi
|
fi
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}Hyprland $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}Hyprland $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -41,19 +41,22 @@ MLOG="install-$(date +%d-%H%M%S)_hyprlang2.log"
|
|||||||
# Installation of dependencies
|
# Installation of dependencies
|
||||||
printf "\n%s - Installing ${YELLOW}hyprlang dependencies${RESET} .... \n" "${INFO}"
|
printf "\n%s - Installing ${YELLOW}hyprlang dependencies${RESET} .... \n" "${INFO}"
|
||||||
|
|
||||||
# Check if hyprlang directory exists and remove it
|
# Check if hyprlang directory exists and remove it (under build/src)
|
||||||
if [ -d "hyprlang" ]; then
|
SRC_DIR="$SRC_ROOT/hyprlang"
|
||||||
rm -rf "hyprlang"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${INFO} Installing ${YELLOW}hyprlang $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}hyprlang $tag${RESET} ...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprlang.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprlang.git "$SRC_DIR"; then
|
||||||
cd hyprlang || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
|
BUILD_DIR="$BUILD_ROOT/hyprlang"
|
||||||
cmake --build ./build --config Release --target hyprlang -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
mkdir -p "$BUILD_DIR"
|
||||||
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target hyprlang -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${MAGENTA}hyprlang tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}hyprlang tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}hyprlang $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}hyprlang $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
@ -62,7 +65,7 @@ if git clone --recursive -b $tag https://github.com/hyprwm/hyprlang.git; then
|
|||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprlang $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprlang $tag."
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}hyprlang $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}hyprlang $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -46,24 +46,27 @@ for PKG1 in "${build_dep[@]}"; do
|
|||||||
build_dep "$PKG1" "$LOG"
|
build_dep "$PKG1" "$LOG"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Check if hyprlock directory exists and remove it
|
# Check if hyprlock directory exists and remove it (under build/src)
|
||||||
if [ -d "hyprlock" ]; then
|
SRC_DIR="$SRC_ROOT/hyprlock"
|
||||||
rm -rf "hyprlock"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build hyprlock
|
# Clone and build hyprlock
|
||||||
printf "${INFO} Installing ${YELLOW}hyprlock $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}hyprlock $tag${RESET} ...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprlock.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprlock.git "$SRC_DIR"; then
|
||||||
cd hyprlock || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
|
BUILD_DIR="$BUILD_ROOT/hyprlock"
|
||||||
cmake --build ./build --config Release --target hyprlock -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
mkdir -p "$BUILD_DIR"
|
||||||
if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target hyprlock -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
||||||
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${YELLOW}hyprlock $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${YELLOW}hyprlock $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}hyprlock $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}hyprlock $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
mv $MLOG ../Install-Logs/ || true
|
mv $MLOG "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}hyprlock $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}hyprlock $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -43,25 +43,28 @@ for PKG1 in "${polkitagent[@]}"; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Check if hyprpolkitagent folder exists and remove it
|
# Check if hyprpolkitagent folder exists and remove it (under build/src)
|
||||||
if [ -d "hyprpolkitagent" ]; then
|
SRC_DIR="$SRC_ROOT/hyprpolkitagent"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing hyprpolkitagent folder...\n"
|
printf "${NOTE} Removing existing hyprpolkitagent folder...\n"
|
||||||
rm -rf "hyprpolkitagent"
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${NOTE} Installing hyprpolkitagent...\n"
|
printf "${NOTE} Installing hyprpolkitagent...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprpolkitagent.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprpolkitagent.git "$SRC_DIR"; then
|
||||||
cd hyprpolkitagent || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
|
BUILD_DIR="$BUILD_ROOT/hyprpolkitagent"
|
||||||
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
mkdir -p "$BUILD_DIR"
|
||||||
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||||
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} hyprpolkitagent installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} hyprpolkitagent installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for hyprpolkitagent." 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for hyprpolkitagent." 2>&1 | tee -a "$MLOG"
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
mv $MLOG ../Install-Logs/ || true
|
mv $MLOG "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for hyprpolkitagent." 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for hyprpolkitagent." 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -40,18 +40,20 @@ MLOG="install-$(date +%d-%H%M%S)_hyprtoolkit2.log"
|
|||||||
# Clone, build, and install using Cmake
|
# Clone, build, and install using Cmake
|
||||||
printf "${NOTE} Cloning hyprtoolkit...\n"
|
printf "${NOTE} Cloning hyprtoolkit...\n"
|
||||||
|
|
||||||
# Check if hyprtoolkit folder exists and remove it
|
# Check if hyprtoolkit folder exists and remove it (under build/src)
|
||||||
if [ -d "hyprtoolkit" ]; then
|
SRC_DIR="$SRC_ROOT/hyprtoolkit"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing hyprtoolkit folder...\n"
|
printf "${NOTE} Removing existing hyprtoolkit folder...\n"
|
||||||
rm -rf "hyprtoolkit" 2>&1 | tee -a "$LOG"
|
rm -rf "$SRC_DIR" 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
if git clone -b $tag "https://github.com/hyprwm/hyprtoolkit.git" "$SRC_DIR"; then
|
||||||
if git clone -b $tag "https://github.com/hyprwm/hyprtoolkit.git"; then
|
cd "$SRC_DIR" || exit 1
|
||||||
cd "hyprtoolkit" || exit 1
|
BUILD_DIR="$BUILD_ROOT/hyprtoolkit"
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
|
mkdir -p "$BUILD_DIR"
|
||||||
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target all -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
|
||||||
printf "${OK} hyprtoolkit installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} hyprtoolkit installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for hyprtoolkit." 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for hyprtoolkit." 2>&1 | tee -a "$MLOG"
|
||||||
@ -59,7 +61,7 @@ if git clone -b $tag "https://github.com/hyprwm/hyprtoolkit.git"; then
|
|||||||
else
|
else
|
||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprtoolkit $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprtoolkit $tag."
|
||||||
fi
|
fi
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for hyprtoolkit" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for hyprtoolkit" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -43,18 +43,20 @@ MLOG="install-$(date +%d-%H%M%S)_hyprutils2.log"
|
|||||||
# Clone, build, and install using Cmake
|
# Clone, build, and install using Cmake
|
||||||
printf "${NOTE} Cloning hyprutils...\n"
|
printf "${NOTE} Cloning hyprutils...\n"
|
||||||
|
|
||||||
# Check if hyprutils folder exists and remove it
|
# Check if hyprutils folder exists and remove it (under build/src)
|
||||||
if [ -d "hyprutils" ]; then
|
SRC_DIR="$SRC_ROOT/hyprutils"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing hyprutils folder...\n"
|
printf "${NOTE} Removing existing hyprutils folder...\n"
|
||||||
rm -rf "hyprutils" 2>&1 | tee -a "$LOG"
|
rm -rf "$SRC_DIR" 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
if git clone -b $tag "https://github.com/hyprwm/hyprutils.git" "$SRC_DIR"; then
|
||||||
if git clone -b $tag "https://github.com/hyprwm/hyprutils.git"; then
|
cd "$SRC_DIR" || exit 1
|
||||||
cd "hyprutils" || exit 1
|
BUILD_DIR="$BUILD_ROOT/hyprutils"
|
||||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
|
mkdir -p "$BUILD_DIR"
|
||||||
cmake --build ./build --config Release --target all -j$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" --config Release --target all -j$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
|
||||||
printf "${OK} hyprutils installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} hyprutils installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for hyprutils." 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for hyprutils." 2>&1 | tee -a "$MLOG"
|
||||||
@ -62,7 +64,7 @@ if git clone -b $tag "https://github.com/hyprwm/hyprutils.git"; then
|
|||||||
else
|
else
|
||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprutils $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprutils $tag."
|
||||||
fi
|
fi
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for hyprutils" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for hyprutils" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -55,20 +55,23 @@ done
|
|||||||
|
|
||||||
printf "${NOTE} Installing hyprwayland-scanner...\n"
|
printf "${NOTE} Installing hyprwayland-scanner...\n"
|
||||||
|
|
||||||
# Check if hyprwayland-scanner folder exists and remove it
|
# Check if hyprwayland-scanner folder exists and remove it (under build/src)
|
||||||
if [ -d "hyprwayland-scanner" ]; then
|
SRC_DIR="$SRC_ROOT/hyprwayland-scanner"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing hyprwayland-scanner folder...\n"
|
printf "${NOTE} Removing existing hyprwayland-scanner folder...\n"
|
||||||
rm -rf "hyprwayland-scanner"
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build hyprlang
|
# Clone and build hyprlang
|
||||||
printf "${NOTE} Installing hyprwayland-scanner...\n"
|
printf "${NOTE} Installing hyprwayland-scanner...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/hyprwm/hyprwayland-scanner.git; then
|
if git clone --recursive -b $tag https://github.com/hyprwm/hyprwayland-scanner.git "$SRC_DIR"; then
|
||||||
cd hyprwayland-scanner || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake -DCMAKE_INSTALL_PREFIX=/usr -B build
|
BUILD_DIR="$BUILD_ROOT/hyprwayland-scanner"
|
||||||
cmake --build build -j `nproc`
|
mkdir -p "$BUILD_DIR"
|
||||||
|
cmake -DCMAKE_INSTALL_PREFIX=/usr -B "$BUILD_DIR"
|
||||||
|
cmake --build "$BUILD_DIR" -j `nproc`
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} hyprwayland-scanner installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} hyprwayland-scanner installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for hyprwayland-scanner." 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for hyprwayland-scanner." 2>&1 | tee -a "$MLOG"
|
||||||
@ -77,7 +80,7 @@ if git clone --recursive -b $tag https://github.com/hyprwm/hyprwayland-scanner.g
|
|||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprwayland-scanner $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprwayland-scanner $tag."
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for hyprwayland-scanner. Please check log." 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for hyprwayland-scanner. Please check log." 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -12,10 +12,33 @@ if [ -z "${HYPRWIRE_TAG:-}" ]; then
|
|||||||
fi
|
fi
|
||||||
if [ -n "${HYPRWIRE_TAG:-}" ]; then tag="$HYPRWIRE_TAG"; fi
|
if [ -n "${HYPRWIRE_TAG:-}" ]; then tag="$HYPRWIRE_TAG"; fi
|
||||||
|
|
||||||
# Dry-run support
|
# Dry-run support + shim controls
|
||||||
DO_INSTALL=1
|
DO_INSTALL=1
|
||||||
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
|
FORCE_SHIM=0
|
||||||
|
NO_SHIM=0
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--dry-run)
|
||||||
|
DO_INSTALL=0
|
||||||
|
;;
|
||||||
|
# Force the compatibility shim used on Debian 13 (trixie) toolchains.
|
||||||
|
# This is intentionally distro-named so it's obvious what it does for most users.
|
||||||
|
--build-trixie|--force-shim)
|
||||||
|
FORCE_SHIM=1
|
||||||
|
;;
|
||||||
|
# For testing/sid (or any toolchain that supports std::vector::append_range), allow opting out.
|
||||||
|
--no-shim)
|
||||||
|
NO_SHIM=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
|
||||||
DO_INSTALL=0
|
DO_INSTALL=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $DO_INSTALL -eq 0 ]; then
|
||||||
echo "${NOTE} DRY RUN: install step will be skipped."
|
echo "${NOTE} DRY RUN: install step will be skipped."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -38,43 +61,87 @@ MLOG="install-$(date +%d-%H%M%S)_hyprwire2.log"
|
|||||||
|
|
||||||
printf "${NOTE} Installing hyprwire $tag...\n"
|
printf "${NOTE} Installing hyprwire $tag...\n"
|
||||||
|
|
||||||
# Remove existing tree if present
|
# Remove existing tree if present (under build/src)
|
||||||
if [ -d "hyprwire" ]; then
|
SRC_DIR="$SRC_ROOT/hyprwire"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing hyprwire folder...\n"
|
printf "${NOTE} Removing existing hyprwire folder...\n"
|
||||||
rm -rf "hyprwire" 2>&1 | tee -a "$LOG"
|
rm -rf "$SRC_DIR" 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
if git clone --recursive -b "$tag" https://github.com/hyprwm/hyprwire.git; then
|
if git clone --recursive -b "$tag" https://github.com/hyprwm/hyprwire.git "$SRC_DIR"; then
|
||||||
cd hyprwire || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
|
BUILD_DIR="$BUILD_ROOT/hyprwire"
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
|
||||||
# Temporary compatibility shim for compilers/libstdc++ without std::vector::append_range
|
# Decide whether we need the append_range compatibility shim.
|
||||||
cat > append_range_compat.hpp <<'EOF'
|
# 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
|
#pragma once
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#define APPEND_RANGE(vec, ...) (vec).insert((vec).end(), std::begin(__VA_ARGS__), std::end(__VA_ARGS__))
|
|
||||||
|
// Append any begin/end range to a container, supporting temporaries by binding to auto&&.
|
||||||
|
#define APPEND_RANGE(vec, ...) do { \
|
||||||
|
auto&& _r = (__VA_ARGS__); \
|
||||||
|
(vec).insert((vec).end(), std::begin(_r), std::end(_r)); \
|
||||||
|
} while(0)
|
||||||
EOF
|
EOF
|
||||||
# Replace X.append_range(Y) -> APPEND_RANGE(X, Y) only where it appears
|
|
||||||
PATCH_FILES=$(grep -RIl --exclude-dir=.git 'append_range\(' . || true)
|
# Replace X.(.|->)append_range(Y) -> APPEND_RANGE(X, Y) only where it appears
|
||||||
if [ -n "$PATCH_FILES" ]; then
|
PATCH_FILES=$(grep -RIl --exclude-dir=.git -F 'append_range(' . || true)
|
||||||
# Replace LHS .append_range(arg...) with APPEND_RANGE(LHS, arg...)
|
if [ -n "$PATCH_FILES" ]; then
|
||||||
# LHS: identifiers and common member/ptr chains (this->obj, ns::obj.member)
|
# LHS: identifiers and common member/ptr chains (this->obj, ns::obj.member)
|
||||||
echo "$PATCH_FILES" | xargs -r sed -ri 's/([A-Za-z_][A-Za-z0-9_:\->\.]+)\s*\.\s*append_range\s*\(/APPEND_RANGE(\1, /g'
|
echo "$PATCH_FILES" | xargs -r sed -ri 's/([A-Za-z_][A-Za-z0-9_:>.\-]+)\s*(\.|->)\s*append_range\s*\(/APPEND_RANGE(\1, /g'
|
||||||
# Show any remaining occurrences
|
# Show any remaining occurrences
|
||||||
REMAIN=$(grep -RIn --exclude-dir=.git '\.\s*append_range\s*\(' $PATCH_FILES || true)
|
REMAIN=$(grep -RIn --exclude-dir=.git -E '(\.|->)[[:space:]]*append_range[[:space:]]*\(' $PATCH_FILES || true)
|
||||||
if [ -n "$REMAIN" ]; then
|
if [ -n "$REMAIN" ]; then
|
||||||
echo "[WARN] Some append_range() calls remain unpatched:" >&2
|
echo "[WARN] Some append_range() calls remain unpatched:" >&2
|
||||||
echo "$REMAIN" >&2
|
echo "$REMAIN" >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Absolute path for forced include
|
||||||
|
APPEND_HDR="$(pwd)/append_range_compat.hpp"
|
||||||
|
|
||||||
|
cmake -S . -B "$BUILD_DIR" -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_DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_STANDARD=23
|
||||||
fi
|
fi
|
||||||
fi
|
cmake --build "$BUILD_DIR" -j "$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)"
|
||||||
|
|
||||||
# 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 [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} hyprwire $tag installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} hyprwire $tag installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for hyprwire $tag" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for hyprwire $tag" 2>&1 | tee -a "$MLOG"
|
||||||
@ -82,7 +149,7 @@ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
|
|||||||
else
|
else
|
||||||
echo "${NOTE} DRY RUN: Skipping installation of hyprwire $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of hyprwire $tag."
|
||||||
fi
|
fi
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for hyprwire $tag" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for hyprwire $tag" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -117,7 +117,7 @@ done
|
|||||||
# Build Google Breakpad from source if pkg-config 'breakpad' is missing
|
# Build Google Breakpad from source if pkg-config 'breakpad' is missing
|
||||||
if ! pkg-config --exists breakpad; then
|
if ! pkg-config --exists breakpad; then
|
||||||
note "Building Google Breakpad from source..."
|
note "Building Google Breakpad from source..."
|
||||||
BP_DIR="$PARENT_DIR/.thirdparty/breakpad"
|
BP_DIR="$SRC_ROOT/breakpad"
|
||||||
rm -rf "$BP_DIR"
|
rm -rf "$BP_DIR"
|
||||||
mkdir -p "$BP_DIR"
|
mkdir -p "$BP_DIR"
|
||||||
(
|
(
|
||||||
@ -166,7 +166,7 @@ PCEOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone source (prefer upstream forgejo; mirror available at github:quickshell-mirror/quickshell)
|
# Clone source (prefer upstream forgejo; mirror available at github:quickshell-mirror/quickshell)
|
||||||
SRC_DIR="quickshell-src"
|
SRC_DIR="$SRC_ROOT/quickshell-src"
|
||||||
if [ -d "$SRC_DIR" ]; then
|
if [ -d "$SRC_DIR" ]; then
|
||||||
note "Removing existing $SRC_DIR"
|
note "Removing existing $SRC_DIR"
|
||||||
rm -rf "$SRC_DIR"
|
rm -rf "$SRC_DIR"
|
||||||
@ -183,32 +183,33 @@ fi
|
|||||||
# Configure with Ninja; enable RelWithDebInfo, leave features ON (deps installed above)
|
# Configure with Ninja; enable RelWithDebInfo, leave features ON (deps installed above)
|
||||||
CMAKE_FLAGS=(
|
CMAKE_FLAGS=(
|
||||||
-GNinja
|
-GNinja
|
||||||
-B build
|
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||||
-DDISTRIBUTOR="Debian-Hyprland installer"
|
-DDISTRIBUTOR="Debian-Hyprland installer"
|
||||||
)
|
)
|
||||||
|
|
||||||
note "Configuring Quickshell (CMake)..."
|
note "Configuring Quickshell (CMake)..."
|
||||||
# Use explicit source/build dirs and preserve cmake exit code with pipefail
|
# Use explicit source/build dirs and preserve cmake exit code with pipefail
|
||||||
if ! cmake -S . -B build "${CMAKE_FLAGS[@]}" 2>&1 | tee -a "$MLOG"; then
|
BUILD_DIR="$BUILD_ROOT/quickshell"
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
if ! cmake -S . -B "$BUILD_DIR" "${CMAKE_FLAGS[@]}" 2>&1 | tee -a "$MLOG"; then
|
||||||
echo "${ERROR} CMake configure failed. See log: $MLOG" | tee -a "$LOG"
|
echo "${ERROR} CMake configure failed. See log: $MLOG" | tee -a "$LOG"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ensure build files exist before invoking ninja
|
# Ensure build files exist before invoking ninja
|
||||||
if [ ! -f build/build.ninja ]; then
|
if [ ! -f "$BUILD_DIR/build.ninja" ]; then
|
||||||
echo "${ERROR} build/build.ninja not generated; aborting build." | tee -a "$LOG"
|
echo "${ERROR} build/build.ninja not generated; aborting build." | tee -a "$LOG"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
note "Building Quickshell (Ninja)..."
|
note "Building Quickshell (Ninja)..."
|
||||||
if ! cmake --build build 2>&1 | tee -a "$MLOG"; then
|
if ! cmake --build "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
|
||||||
echo "${ERROR} Build failed. See log: $MLOG" | tee -a "$LOG"
|
echo "${ERROR} Build failed. See log: $MLOG" | tee -a "$LOG"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
note "Installing Quickshell..."
|
note "Installing Quickshell..."
|
||||||
if ! sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
|
if ! sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
|
||||||
echo "${ERROR} Installation failed. See log: $MLOG" | tee -a "$LOG"
|
echo "${ERROR} Installation failed. See log: $MLOG" | tee -a "$LOG"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -68,25 +68,29 @@ printf "\n%.0s" {1..2}
|
|||||||
# Clone and build rofi - wayland
|
# Clone and build rofi - wayland
|
||||||
printf "${NOTE} Building and Installing ${SKY_BLUE}rofi-wayland${RESET} $rofi_tag ...\n"
|
printf "${NOTE} Building and Installing ${SKY_BLUE}rofi-wayland${RESET} $rofi_tag ...\n"
|
||||||
|
|
||||||
# Check if rofi directory exists
|
# Check if rofi directory exists (under build/src)
|
||||||
if [ -d "rofi-$rofi_tag" ]; then
|
SRC_DIR="$SRC_ROOT/rofi-$rofi_tag"
|
||||||
rm -rf "rofi-$rofi_tag"
|
TAR_PATH="$SRC_ROOT/rofi-$rofi_tag.tar.gz"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# cloning rofi-wayland
|
# cloning rofi-wayland
|
||||||
printf "${NOTE} Downloading ${YELLOW}rofi-wayland $rofi_tag${RESET} from releases...\n"
|
printf "${NOTE} Downloading ${YELLOW}rofi-wayland $rofi_tag${RESET} from releases...\n"
|
||||||
wget $release_url
|
wget -O "$TAR_PATH" $release_url
|
||||||
|
|
||||||
if [ -f "rofi-$rofi_tag.tar.gz" ]; then
|
if [ -f "$TAR_PATH" ]; then
|
||||||
printf "${OK} ${YELLOW}rofi-wayland $rofi_tag${RESET} downloaded successfully.\n" 2>&1 | tee -a "$LOG"
|
printf "${OK} ${YELLOW}rofi-wayland $rofi_tag${RESET} downloaded successfully.\n" 2>&1 | tee -a "$LOG"
|
||||||
tar xf rofi-$rofi_tag.tar.gz
|
tar -C "$SRC_ROOT" -xf "$TAR_PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd rofi-$rofi_tag || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
|
|
||||||
# Proceed with the installation steps
|
# Proceed with the installation steps
|
||||||
if meson setup build && ninja -C build ; then
|
BUILD_DIR="$BUILD_ROOT/rofi-$rofi_tag"
|
||||||
if sudo ninja -C build install 2>&1 | tee -a "$MLOG"; then
|
mkdir -p "$BUILD_DIR"
|
||||||
|
if meson setup "$BUILD_DIR" && ninja -C "$BUILD_DIR" ; then
|
||||||
|
if sudo ninja -C "$BUILD_DIR" install 2>&1 | tee -a "$MLOG"; then
|
||||||
printf "${OK} rofi-wayland installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} rofi-wayland installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}rofi-wayland $rofi_tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}rofi-wayland $rofi_tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
@ -96,10 +100,10 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Move logs to Install-Logs directory
|
# Move logs to Install-Logs directory
|
||||||
mv "$MLOG" ../Install-Logs/ || true
|
mv "$MLOG" "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd .. || exit 1
|
cd .. || exit 1
|
||||||
|
|
||||||
# clean up
|
# clean up
|
||||||
rm -rf rofi-$rofi_tag.tar.gz
|
rm -rf "$TAR_PATH"
|
||||||
|
|
||||||
printf "\n%.0s" {1..2}
|
printf "\n%.0s" {1..2}
|
||||||
|
|||||||
@ -38,11 +38,13 @@ sudo systemctl enable power-profiles-daemon 2>&1 | tee -a "$LOG"
|
|||||||
install_and_log() {
|
install_and_log() {
|
||||||
local project_name="$1"
|
local project_name="$1"
|
||||||
local git_url="$2"
|
local git_url="$2"
|
||||||
|
local src_dir="$SRC_ROOT/$project_name"
|
||||||
|
|
||||||
printf "${NOTE} Installing $project_name\n"
|
printf "${NOTE} Installing $project_name\n"
|
||||||
|
|
||||||
if git clone "$git_url" "$project_name"; then
|
rm -rf "$src_dir"
|
||||||
cd "$project_name" || exit 1
|
if git clone "$git_url" "$src_dir"; then
|
||||||
|
cd "$src_dir" || exit 1
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 2>&1 | tee -a "$LOG"
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 2>&1 | tee -a "$LOG"
|
||||||
source "$HOME/.cargo/env"
|
source "$HOME/.cargo/env"
|
||||||
make
|
make
|
||||||
@ -58,7 +60,7 @@ install_and_log() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
#moving logs into main install-logs
|
#moving logs into main install-logs
|
||||||
mv $LOG ../Install-Logs/ || true
|
mv $LOG "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd - || exit 1
|
cd - || exit 1
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Cloning $project_name from $git_url failed."
|
echo -e "${ERROR} Cloning $project_name from $git_url failed."
|
||||||
|
|||||||
@ -31,15 +31,16 @@ if [ -d "/usr/share/sddm/themes/$theme_name" ]; then
|
|||||||
echo -e "\e[1A\e[K${OK} - Removed existing $theme_name directory." 2>&1 | tee -a "$LOG"
|
echo -e "\e[1A\e[K${OK} - Removed existing $theme_name directory." 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if $theme_name directory exists in the current directory and remove if it does
|
# Check if $theme_name directory exists in build/src and remove if it does
|
||||||
if [ -d "$theme_name" ]; then
|
SRC_DIR="$SRC_ROOT/$theme_name"
|
||||||
rm -rf "$theme_name"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
echo -e "\e[1A\e[K${OK} - Removed existing $theme_name directory from the current location." 2>&1 | tee -a "$LOG"
|
echo -e "\e[1A\e[K${OK} - Removed existing $theme_name directory from the current location." 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone the repository
|
# Clone the repository
|
||||||
if git clone --depth=1 "$source_theme" "$theme_name"; then
|
if git clone --depth=1 "$source_theme" "$SRC_DIR"; then
|
||||||
if [ ! -d "$theme_name" ]; then
|
if [ ! -d "$SRC_DIR" ]; then
|
||||||
echo "${ERROR} Failed to clone the repository." | tee -a "$LOG"
|
echo "${ERROR} Failed to clone the repository." | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -50,7 +51,7 @@ if git clone --depth=1 "$source_theme" "$theme_name"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Move cloned theme to the themes directory
|
# Move cloned theme to the themes directory
|
||||||
sudo mv "$theme_name" "/usr/share/sddm/themes/$theme_name" 2>&1 | tee -a "$LOG"
|
sudo mv "$SRC_DIR" "/usr/share/sddm/themes/$theme_name" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
# setting up SDDM theme
|
# setting up SDDM theme
|
||||||
sddm_conf="/etc/sddm.conf"
|
sddm_conf="/etc/sddm.conf"
|
||||||
|
|||||||
@ -49,13 +49,14 @@ done
|
|||||||
|
|
||||||
printf "\n%.0s" {1..2}
|
printf "\n%.0s" {1..2}
|
||||||
|
|
||||||
# Check if swww directory exists
|
# Check if swww directory exists (under build/src)
|
||||||
if [ -d "swww" ]; then
|
SRC_DIR="$SRC_ROOT/swww"
|
||||||
cd swww || exit 1
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
cd "$SRC_DIR" || exit 1
|
||||||
git pull origin main 2>&1 | tee -a "$MLOG"
|
git pull origin main 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
if git clone --recursive -b $swww_tag https://github.com/LGFae/swww.git; then
|
if git clone --recursive -b $swww_tag https://github.com/LGFae/swww.git "$SRC_DIR"; then
|
||||||
cd swww || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}swww $swww_tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}swww $swww_tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
exit 1
|
exit 1
|
||||||
@ -94,7 +95,7 @@ sudo mkdir -p /usr/share/zsh/site-functions 2>&1 | tee -a "$MLOG"
|
|||||||
sudo cp -r completions/_swww /usr/share/zsh/site-functions/_swww 2>&1 | tee -a "$MLOG"
|
sudo cp -r completions/_swww /usr/share/zsh/site-functions/_swww 2>&1 | tee -a "$MLOG"
|
||||||
|
|
||||||
# Moving logs into main Install-Logs
|
# Moving logs into main Install-Logs
|
||||||
mv "$MLOG" ../Install-Logs/ || true
|
mv "$MLOG" "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd - || exit 1
|
cd - || exit 1
|
||||||
|
|
||||||
printf "\n%.0s" {1..2}
|
printf "\n%.0s" {1..2}
|
||||||
|
|||||||
@ -39,17 +39,18 @@ MLOG="install-$(date +%d-%H%M%S)_wayland-protocols2.log"
|
|||||||
|
|
||||||
printf "\n%s - Installing ${YELLOW}wayland-protocols (from source)${RESET} .... \n" "${INFO}"
|
printf "\n%s - Installing ${YELLOW}wayland-protocols (from source)${RESET} .... \n" "${INFO}"
|
||||||
|
|
||||||
# Clean previous clone
|
# Clean previous clone (under build/src)
|
||||||
if [ -d "wayland-protocols" ]; then
|
SRC_DIR="$SRC_ROOT/wayland-protocols"
|
||||||
rm -rf "wayland-protocols"
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build (meson)
|
# Clone and build (meson)
|
||||||
# Upstream: https://gitlab.freedesktop.org/wayland/wayland-protocols.git
|
# Upstream: https://gitlab.freedesktop.org/wayland/wayland-protocols.git
|
||||||
printf "${INFO} Installing ${YELLOW}wayland-protocols $tag${RESET} ...\n"
|
printf "${INFO} Installing ${YELLOW}wayland-protocols $tag${RESET} ...\n"
|
||||||
repo_url="https://gitlab.freedesktop.org/wayland/wayland-protocols.git"
|
repo_url="https://gitlab.freedesktop.org/wayland/wayland-protocols.git"
|
||||||
if git clone --depth=1 --filter=blob:none "$repo_url" wayland-protocols; then
|
if git clone --depth=1 --filter=blob:none "$repo_url" "$SRC_DIR"; then
|
||||||
cd wayland-protocols || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
# Fetch tags and attempt to checkout the requested tag, trying both raw and v-prefixed
|
# Fetch tags and attempt to checkout the requested tag, trying both raw and v-prefixed
|
||||||
git fetch --tags --depth=1 >/dev/null 2>&1 || true
|
git fetch --tags --depth=1 >/dev/null 2>&1 || true
|
||||||
checked_out=0
|
checked_out=0
|
||||||
@ -67,10 +68,12 @@ if git clone --depth=1 --filter=blob:none "$repo_url" wayland-protocols; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# Install to /usr/local so pkg-config can prefer it over distro /usr
|
# Install to /usr/local so pkg-config can prefer it over distro /usr
|
||||||
meson setup build --prefix=/usr/local
|
BUILD_DIR="$BUILD_ROOT/wayland-protocols"
|
||||||
meson compile -C build -j"$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)"
|
mkdir -p "$BUILD_DIR"
|
||||||
|
meson setup "$BUILD_DIR" --prefix=/usr/local
|
||||||
|
meson compile -C "$BUILD_DIR" -j"$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)"
|
||||||
if [ $DO_INSTALL -eq 1 ]; then
|
if [ $DO_INSTALL -eq 1 ]; then
|
||||||
if sudo meson install -C build 2>&1 | tee -a "$MLOG" ; then
|
if sudo meson install -C "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} ${MAGENTA}wayland-protocols $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} ${MAGENTA}wayland-protocols $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}wayland-protocols $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}wayland-protocols $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
@ -79,7 +82,7 @@ if git clone --depth=1 --filter=blob:none "$repo_url" wayland-protocols; then
|
|||||||
echo "${NOTE} DRY RUN: Skipping installation of wayland-protocols $tag."
|
echo "${NOTE} DRY RUN: Skipping installation of wayland-protocols $tag."
|
||||||
fi
|
fi
|
||||||
# Move additional logs to Install-Logs directory if they exist
|
# Move additional logs to Install-Logs directory if they exist
|
||||||
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/ || true
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}wayland-protocols $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}wayland-protocols $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -29,6 +29,7 @@ if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
LOG="Install-Logs/install-$(date +%d-%H%M%S)_xdph.log"
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_xdph.log"
|
||||||
|
MLOG="install-$(date +%d-%H%M%S)_xdph2.log"
|
||||||
|
|
||||||
# Check if the file exists and remove it
|
# Check if the file exists and remove it
|
||||||
[[ -f "/usr/lib/xdg-desktop-portal-hyprland" ]] && sudo rm "/usr/lib/xdg-desktop-portal-hyprland"
|
[[ -f "/usr/lib/xdg-desktop-portal-hyprland" ]] && sudo rm "/usr/lib/xdg-desktop-portal-hyprland"
|
||||||
@ -47,22 +48,26 @@ done
|
|||||||
# Clone, build, and install XDPH
|
# Clone, build, and install XDPH
|
||||||
printf "${NOTE} Cloning and Installing ${YELLOW}XDG Desktop Portal Hyprland $tag${RESET} ...\n"
|
printf "${NOTE} Cloning and Installing ${YELLOW}XDG Desktop Portal Hyprland $tag${RESET} ...\n"
|
||||||
|
|
||||||
# Check if xdg-desktop-portal-hyprland folder exists and remove it
|
# Check if xdg-desktop-portal-hyprland folder exists and remove it (under build/src)
|
||||||
if [ -d "xdg-desktop-portal-hyprland" ]; then
|
SRC_DIR="$SRC_ROOT/xdg-desktop-portal-hyprland"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing xdg-desktop-portal-hyprland folder...\n"
|
printf "${NOTE} Removing existing xdg-desktop-portal-hyprland folder...\n"
|
||||||
rm -rf "xdg-desktop-portal-hyprland" 2>&1 | tee -a "$LOG"
|
rm -rf "$SRC_DIR" 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if git clone --recursive -b $tag "https://github.com/hyprwm/xdg-desktop-portal-hyprland.git"; then
|
if git clone --recursive -b $tag "https://github.com/hyprwm/xdg-desktop-portal-hyprland.git" "$SRC_DIR"; then
|
||||||
cd "xdg-desktop-portal-hyprland" || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
cmake -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -B build
|
BUILD_DIR="$BUILD_ROOT/xdg-desktop-portal-hyprland"
|
||||||
cmake --build build
|
mkdir -p "$BUILD_DIR"
|
||||||
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
|
cmake -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -B "$BUILD_DIR"
|
||||||
printf "${OK} ${MAGENTA}xdph $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
cmake --build "$BUILD_DIR"
|
||||||
|
if sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
|
||||||
|
printf "${OK} ${MAGENTA}xdph $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$MLOG"
|
||||||
fi
|
fi
|
||||||
mv $MLOG ../Install-Logs/ || true
|
# Move the additional logs to Install-Logs directory
|
||||||
|
[ -f "$MLOG" ] && mv "$MLOG" "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -40,25 +40,28 @@ for PKG1 in "${xkbcommon[@]}"; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Check if xkbcommon folder exists and remove it
|
# Check if xkbcommon folder exists and remove it (under build/src)
|
||||||
if [ -d "libxkbcommon" ]; then
|
SRC_DIR="$SRC_ROOT/libxkbcommon"
|
||||||
|
if [ -d "$SRC_DIR" ]; then
|
||||||
printf "${NOTE} Removing existing libxkbcommon folder...\n"
|
printf "${NOTE} Removing existing libxkbcommon folder...\n"
|
||||||
rm -rf "libxkbcommon"
|
rm -rf "$SRC_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone and build
|
# Clone and build
|
||||||
printf "${NOTE} Installing xkbcommon...\n"
|
printf "${NOTE} Installing xkbcommon...\n"
|
||||||
if git clone --recursive -b $tag https://github.com/xkbcommon/libxkbcommon.git; then
|
if git clone --recursive -b $tag https://github.com/xkbcommon/libxkbcommon.git "$SRC_DIR"; then
|
||||||
cd libxkbcommon || exit 1
|
cd "$SRC_DIR" || exit 1
|
||||||
meson setup build --libdir=/usr/local/lib
|
BUILD_DIR="$BUILD_ROOT/libxkbcommon"
|
||||||
meson compile -C build
|
mkdir -p "$BUILD_DIR"
|
||||||
if sudo meson install -C build 2>&1 | tee -a "$MLOG" ; then
|
meson setup "$BUILD_DIR" --libdir=/usr/local/lib
|
||||||
|
meson compile -C "$BUILD_DIR"
|
||||||
|
if sudo meson install -C "$BUILD_DIR" 2>&1 | tee -a "$MLOG" ; then
|
||||||
printf "${OK} xkbcommon installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
printf "${OK} xkbcommon installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Installation failed for xkbcommon." 2>&1 | tee -a "$MLOG"
|
echo -e "${ERROR} Installation failed for xkbcommon." 2>&1 | tee -a "$MLOG"
|
||||||
fi
|
fi
|
||||||
#moving the addional logs to Install-Logs directory
|
#moving the addional logs to Install-Logs directory
|
||||||
mv $MLOG ../Install-Logs/ || true
|
mv $MLOG "$PARENT_DIR/Install-Logs/" || true
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e "${ERROR} Download failed for xkbcommon." 2>&1 | tee -a "$LOG"
|
echo -e "${ERROR} Download failed for xkbcommon." 2>&1 | tee -a "$LOG"
|
||||||
|
|||||||
@ -20,11 +20,12 @@ LOG="Install-Logs/install-$(date +%d-%H%M%S)_zsh_pokemon.log"
|
|||||||
|
|
||||||
printf "${INFO} Installing ${SKY_BLUE}Pokemon color scripts${RESET} ..."
|
printf "${INFO} Installing ${SKY_BLUE}Pokemon color scripts${RESET} ..."
|
||||||
|
|
||||||
if [ -d "pokemon-colorscripts" ]; then
|
SRC_DIR="$SRC_ROOT/pokemon-colorscripts"
|
||||||
cd pokemon-colorscripts && git pull && sudo ./install.sh && cd ..
|
if [ -d "$SRC_DIR" ]; then
|
||||||
|
cd "$SRC_DIR" && git pull && sudo ./install.sh && cd ..
|
||||||
else
|
else
|
||||||
git clone --depth=1 https://gitlab.com/phoneybadger/pokemon-colorscripts.git &&
|
git clone --depth=1 https://gitlab.com/phoneybadger/pokemon-colorscripts.git "$SRC_DIR" &&
|
||||||
cd pokemon-colorscripts && sudo ./install.sh && cd ..
|
cd "$SRC_DIR" && sudo ./install.sh && cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if ~/.zshrc exists
|
# Check if ~/.zshrc exists
|
||||||
|
|||||||
268
install.sh
268
install.sh
@ -1,9 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# https://github.com/JaKooLit
|
# https://github.com/JaKooLit
|
||||||
|
|
||||||
# Source location for pre-built Debian packages (can be local or network share)
|
|
||||||
# Set this variable to the path containing .deb files, or leave empty to build from source
|
|
||||||
DEB_PACKAGES_SOURCE="/mnt/nas/Projects/Jak/debian-pkg/build/debs"
|
|
||||||
|
|
||||||
clear
|
clear
|
||||||
|
|
||||||
@ -105,6 +102,60 @@ if is_ubuntu; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Debian Trixie compatibility mode
|
||||||
|
# Some Hypr* components need source-level shims on Debian 13 (trixie) toolchains.
|
||||||
|
# Default: auto-detect via /etc/os-release
|
||||||
|
# Overrides:
|
||||||
|
# --build-trixie / --no-trixie
|
||||||
|
# HYPR_BUILD_TRIXIE=1|0 (env)
|
||||||
|
TRIXIE_MODE="auto"
|
||||||
|
PRESET_FILE=""
|
||||||
|
|
||||||
|
# Parse a small set of supported CLI args (order-independent)
|
||||||
|
# NOTE: install.sh historically used "$1"/"$2" for --preset; this keeps that working.
|
||||||
|
args=("$@")
|
||||||
|
for ((i=0; i<${#args[@]}; i++)); do
|
||||||
|
case "${args[$i]}" in
|
||||||
|
--build-trixie)
|
||||||
|
TRIXIE_MODE="on"
|
||||||
|
;;
|
||||||
|
--no-trixie)
|
||||||
|
TRIXIE_MODE="off"
|
||||||
|
;;
|
||||||
|
--preset)
|
||||||
|
if [ $((i+1)) -lt ${#args[@]} ]; then
|
||||||
|
PRESET_FILE="${args[$((i+1))]}"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# If env explicitly sets HYPR_BUILD_TRIXIE, honor it.
|
||||||
|
if [ -n "${HYPR_BUILD_TRIXIE+x}" ]; then
|
||||||
|
if [ "${HYPR_BUILD_TRIXIE}" = "1" ]; then
|
||||||
|
TRIXIE_MODE="on"
|
||||||
|
elif [ "${HYPR_BUILD_TRIXIE}" = "0" ]; then
|
||||||
|
TRIXIE_MODE="off"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Resolve auto-detection
|
||||||
|
if [ "$TRIXIE_MODE" = "auto" ]; then
|
||||||
|
HYPR_BUILD_TRIXIE=0
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. /etc/os-release || true
|
||||||
|
if [ "${ID:-}" = "debian" ] && [ "${VERSION_CODENAME:-}" = "trixie" ]; then
|
||||||
|
HYPR_BUILD_TRIXIE=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif [ "$TRIXIE_MODE" = "on" ]; then
|
||||||
|
HYPR_BUILD_TRIXIE=1
|
||||||
|
else
|
||||||
|
HYPR_BUILD_TRIXIE=0
|
||||||
|
fi
|
||||||
|
export HYPR_BUILD_TRIXIE
|
||||||
|
|
||||||
# install whiptails if detected not installed. Necessary for this version
|
# install whiptails if detected not installed. Necessary for this version
|
||||||
if ! command -v whiptail >/dev/null; then
|
if ! command -v whiptail >/dev/null; then
|
||||||
echo "${NOTE} - whiptail is not installed. Installing..." | tee -a "$LOG"
|
echo "${NOTE} - whiptail is not installed. Installing..." | tee -a "$LOG"
|
||||||
@ -159,59 +210,6 @@ clean_existing_hyprland() {
|
|||||||
echo "${OK} Cleanup completed" | tee -a "$LOG"
|
echo "${OK} Cleanup completed" | tee -a "$LOG"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to install packages from pre-built .deb files
|
|
||||||
install_from_packages() {
|
|
||||||
echo "${INFO} Installing from pre-built packages at: ${SKY_BLUE}$DEB_PACKAGES_SOURCE${RESET}" | tee -a "$LOG"
|
|
||||||
|
|
||||||
if [ ! -d "$DEB_PACKAGES_SOURCE" ]; then
|
|
||||||
echo "${ERROR} Package source directory not found: $DEB_PACKAGES_SOURCE" | tee -a "$LOG"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local pkg_count=$(find "$DEB_PACKAGES_SOURCE" -name "*.deb" | wc -l)
|
|
||||||
if [ "$pkg_count" -eq 0 ]; then
|
|
||||||
echo "${ERROR} No .deb files found in $DEB_PACKAGES_SOURCE" | tee -a "$LOG"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${INFO} Found ${SKY_BLUE}$pkg_count${RESET} .deb packages" | tee -a "$LOG"
|
|
||||||
|
|
||||||
# Clean up existing installations before installing from packages
|
|
||||||
echo "${CAT} Removing existing Hyprland installations to avoid conflicts..." | tee -a "$LOG"
|
|
||||||
clean_existing_hyprland
|
|
||||||
|
|
||||||
# Update package cache after cleanup
|
|
||||||
echo "${INFO} Updating package cache..." | tee -a "$LOG"
|
|
||||||
sudo apt-get update 2>&1 | tail -3 | tee -a "$LOG"
|
|
||||||
|
|
||||||
# Install core packages only (skip plugins and debug symbols)
|
|
||||||
echo "${INFO} Installing core Hyprland packages (excluding plugins and debug symbols)..." | tee -a "$LOG"
|
|
||||||
|
|
||||||
# Install only essential packages, skip plugins and dbgsym
|
|
||||||
for deb in "$DEB_PACKAGES_SOURCE"/*.deb; do
|
|
||||||
filename=$(basename "$deb")
|
|
||||||
|
|
||||||
# Skip debug symbols and plugins
|
|
||||||
if [[ "$filename" == *"-dbgsym_"* ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [[ "$filename" == "hyprland-plugin-"* ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${INFO} Installing: $filename" | tee -a "$LOG"
|
|
||||||
sudo dpkg -i "$deb" 2>&1 | tee -a "$LOG" || true
|
|
||||||
done
|
|
||||||
|
|
||||||
# Fix any dependency issues
|
|
||||||
echo "${INFO} Fixing any dependency issues..." | tee -a "$LOG"
|
|
||||||
sudo apt-get install -f -y 2>&1 | tail -5 | tee -a "$LOG"
|
|
||||||
|
|
||||||
echo "${OK} Core package installation completed!" | tee -a "$LOG"
|
|
||||||
echo "${NOTE} To install plugins, run: sudo dpkg -i $DEB_PACKAGES_SOURCE/hyprland-plugin-*.deb" | tee -a "$LOG"
|
|
||||||
echo "${NOTE} To install debug symbols, run: sudo dpkg -i $DEB_PACKAGES_SOURCE/*-dbgsym*.deb" | tee -a "$LOG"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Welcome message using whiptail (for displaying information)
|
# Welcome message using whiptail (for displaying information)
|
||||||
whiptail --title "KooL Debian-Hyprland Trixie+ (2025) Install Script" \
|
whiptail --title "KooL Debian-Hyprland Trixie+ (2025) Install Script" \
|
||||||
@ -220,24 +218,8 @@ ATTENTION: Run a full system update and Reboot first !!! (Highly Recommended)\n\
|
|||||||
NOTE: If you are installing on a VM, ensure to enable 3D acceleration otherwise Hyprland may NOT start!" \
|
NOTE: If you are installing on a VM, ensure to enable 3D acceleration otherwise Hyprland may NOT start!" \
|
||||||
15 80
|
15 80
|
||||||
|
|
||||||
# Ask user to choose build method
|
# Ask if the user wants to proceed (source-only build)
|
||||||
build_method="source"
|
proceed_msg="Build method: FROM SOURCE\n\nVERY IMPORTANT!!!\nYou must be able to install from source by uncommenting deb-src on /etc/apt/sources.list else script may fail.\n\nShall we proceed?"
|
||||||
if [ -d "$DEB_PACKAGES_SOURCE" ] && [ "$(find "$DEB_PACKAGES_SOURCE" -name "*.deb" 2>/dev/null | wc -l)" -gt 0 ]; then
|
|
||||||
if whiptail --title "Build Method" \
|
|
||||||
--yesno "Pre-built Hyprland packages are available at:\n$DEB_PACKAGES_SOURCE\n\nWould you like to install from pre-built packages?\n\nSelect YES for faster installation from packages\nSelect NO to build from source (takes longer)" 15 70; then
|
|
||||||
build_method="packages"
|
|
||||||
echo "${OK} Selected build method: ${SKY_BLUE}Pre-built Packages${RESET}" | tee -a "$LOG"
|
|
||||||
else
|
|
||||||
echo "${OK} Selected build method: ${SKY_BLUE}From Source${RESET}" | tee -a "$LOG"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Ask if the user wants to proceed
|
|
||||||
if [ "$build_method" = "packages" ]; then
|
|
||||||
proceed_msg="Build method: PRE-BUILT PACKAGES\n\nThis will install pre-compiled Hyprland packages from the shared location.\n\nShall we proceed?"
|
|
||||||
else
|
|
||||||
proceed_msg="Build method: FROM SOURCE\n\nVERY IMPORTANT!!!\nYou must be able to install from source by uncommenting deb-src on /etc/apt/sources.list else script may fail.\n\nShall we proceed?"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! whiptail --title "Proceed with Installation?" \
|
if ! whiptail --title "Proceed with Installation?" \
|
||||||
--yesno "$proceed_msg" 15 60; then
|
--yesno "$proceed_msg" 15 60; then
|
||||||
@ -269,7 +251,13 @@ execute_script() {
|
|||||||
if [ -f "$script_path" ]; then
|
if [ -f "$script_path" ]; then
|
||||||
chmod +x "$script_path"
|
chmod +x "$script_path"
|
||||||
if [ -x "$script_path" ]; then
|
if [ -x "$script_path" ]; then
|
||||||
env "$script_path"
|
# Pass --build-trixie to all module scripts when in trixie compatibility mode.
|
||||||
|
# Scripts that don't care should simply ignore unknown args.
|
||||||
|
if [ "${HYPR_BUILD_TRIXIE:-0}" = "1" ]; then
|
||||||
|
env HYPR_BUILD_TRIXIE=1 "$script_path" --build-trixie
|
||||||
|
else
|
||||||
|
env HYPR_BUILD_TRIXIE=0 "$script_path"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "Failed to make script '$script' executable." | tee -a "$LOG"
|
echo "Failed to make script '$script' executable." | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
@ -323,9 +311,9 @@ load_preset() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if --preset argument is passed
|
# Check if --preset argument is passed (order-independent)
|
||||||
if [[ "$1" == "--preset" && -n "$2" ]]; then
|
if [ -n "${PRESET_FILE:-}" ]; then
|
||||||
load_preset "$2"
|
load_preset "$PRESET_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# List of services to check for active login managers
|
# List of services to check for active login managers
|
||||||
@ -492,72 +480,68 @@ echo "${INFO} Installing ${SKY_BLUE}necessary fonts...${RESET}" | tee -a "$LOG"
|
|||||||
sleep 1
|
sleep 1
|
||||||
execute_script "fonts.sh"
|
execute_script "fonts.sh"
|
||||||
|
|
||||||
# Build method selection: from source or pre-built packages
|
# Build from source (only method)
|
||||||
if [ "$build_method" = "packages" ]; then
|
# Optional: refresh tags before building the Hyprland stack
|
||||||
echo "${INFO} Installing from ${SKY_BLUE}pre-built packages${RESET}..." | tee -a "$LOG"
|
# Set FETCH_LATEST=1 to opt-in (default is no-refresh to honor pinned tags)
|
||||||
sleep 1
|
if [ "${FETCH_LATEST:-0}" = "1" ] && [ -f ./refresh-hypr-tags.sh ]; then
|
||||||
if install_from_packages; then
|
chmod +x ./refresh-hypr-tags.sh || true
|
||||||
echo "${OK} Pre-built packages installed successfully!" | tee -a "$LOG"
|
./refresh-hypr-tags.sh
|
||||||
else
|
|
||||||
echo "${ERROR} Failed to install pre-built packages. Exiting..." | tee -a "$LOG"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Build from source (original method)
|
|
||||||
# Optional: refresh tags before building the Hyprland stack
|
|
||||||
# Set FETCH_LATEST=1 to opt-in (default is no-refresh to honor pinned tags)
|
|
||||||
if [ "${FETCH_LATEST:-0}" = "1" ] && [ -f ./refresh-hypr-tags.sh ]; then
|
|
||||||
chmod +x ./refresh-hypr-tags.sh || true
|
|
||||||
./refresh-hypr-tags.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${INFO} Installing ${SKY_BLUE}KooL Hyprland packages from source...${RESET}" | tee -a "$LOG"
|
|
||||||
sleep 1
|
|
||||||
execute_script "01-hypr-pkgs.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprutils.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprlang.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprcursor.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprwayland-scanner.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprgraphics.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "aquamarine.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprland-qt-support.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprtoolkit.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprland-guiutils.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprland-protocols.sh"
|
|
||||||
sleep 1
|
|
||||||
# Ensure wayland-protocols (from source) is installed to satisfy Hyprland's >= 1.45 requirement
|
|
||||||
execute_script "wayland-protocols-src.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "xkbcommon.sh"
|
|
||||||
sleep 1
|
|
||||||
# Build hyprwire before Hyprland (required by Hyprland >= 0.53)
|
|
||||||
execute_script "hyprwire.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprland.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprpolkitagent.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "wallust.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "swww.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "rofi-wayland.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hyprlock.sh"
|
|
||||||
sleep 1
|
|
||||||
execute_script "hypridle.sh"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}KooL Hyprland packages from source...${RESET}" | tee -a "$LOG"
|
||||||
|
sleep 1
|
||||||
|
execute_script "01-hypr-pkgs.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprutils.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprlang.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprcursor.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprwayland-scanner.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprgraphics.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "aquamarine.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprland-qt-support.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprtoolkit.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprland-guiutils.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprland-protocols.sh"
|
||||||
|
sleep 1
|
||||||
|
# Ensure wayland-protocols (from source) is installed to satisfy Hyprland's >= 1.45 requirement
|
||||||
|
execute_script "wayland-protocols-src.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "xkbcommon.sh"
|
||||||
|
sleep 1
|
||||||
|
# Build hyprwire before Hyprland (required by Hyprland >= 0.53)
|
||||||
|
execute_script "hyprwire.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprland.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprpolkitagent.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "wallust.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "swww.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "rofi-wayland.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hyprlock.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "hypridle.sh"
|
||||||
|
|
||||||
|
# Ensure /usr/local/lib is in the dynamic linker search path.
|
||||||
|
# Many Hypr* components install shared libraries into /usr/local/lib; without this,
|
||||||
|
# tools like hyprctl can fail to load (e.g. missing libhyprwire.so.*).
|
||||||
|
if ! sudo grep -qxF "/usr/local/lib" /etc/ld.so.conf.d/usr-local.conf 2>/dev/null; then
|
||||||
|
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf.d/usr-local.conf >/dev/null
|
||||||
|
fi
|
||||||
|
sudo ldconfig 2>/dev/null || true
|
||||||
|
|
||||||
#execute_script "imagemagick.sh" #this is for compiling from source. 07 Sep 2024
|
#execute_script "imagemagick.sh" #this is for compiling from source. 07 Sep 2024
|
||||||
# execute_script "waybar-git.sh" only if waybar on repo is old
|
# execute_script "waybar-git.sh" only if waybar on repo is old
|
||||||
|
|
||||||
|
|||||||
@ -11,20 +11,61 @@ mkdir -p "$LOG_DIR"
|
|||||||
TS=$(date +%F-%H%M%S)
|
TS=$(date +%F-%H%M%S)
|
||||||
SUMMARY_LOG="$LOG_DIR/refresh-tags-$TS.log"
|
SUMMARY_LOG="$LOG_DIR/refresh-tags-$TS.log"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
refresh-hypr-tags.sh
|
||||||
|
Refresh hypr-tags.env with latest GitHub release tags.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
./refresh-hypr-tags.sh
|
||||||
|
FORCE=1 ./refresh-hypr-tags.sh
|
||||||
|
./refresh-hypr-tags.sh --force-update
|
||||||
|
./refresh-hypr-tags.sh --get-latest
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- By default, only updates keys set to auto/latest (or unset).
|
||||||
|
- Use FORCE=1 or --force-update to override pinned values.
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Arg parsing (minimal/backwards compatible)
|
||||||
|
FORCE=${FORCE:-0}
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--force-update|--force)
|
||||||
|
FORCE=1
|
||||||
|
;;
|
||||||
|
# Alias for user ergonomics; refresh always checks latest tags.
|
||||||
|
--get-latest|--fetch-latest)
|
||||||
|
:
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "[WARN] Unknown argument ignored: $arg" | tee -a "$SUMMARY_LOG"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
# Ensure tags file exists
|
# Ensure tags file exists
|
||||||
if [[ ! -f "$TAGS_FILE" ]]; then
|
if [[ ! -f "$TAGS_FILE" ]]; then
|
||||||
cat > "$TAGS_FILE" <<'EOF'
|
cat > "$TAGS_FILE" <<'EOF'
|
||||||
HYPRLAND_TAG=v0.51.1
|
# Default Hyprland stack versions
|
||||||
AQUAMARINE_TAG=v0.9.3
|
HYPRLAND_TAG=v0.53.3
|
||||||
HYPRUTILS_TAG=v0.8.2
|
AQUAMARINE_TAG=v0.10.0
|
||||||
HYPRLANG_TAG=v0.6.4
|
HYPRUTILS_TAG=v0.11.0
|
||||||
HYPRGRAPHICS_TAG=v0.1.5
|
HYPRLANG_TAG=v0.6.8
|
||||||
|
HYPRGRAPHICS_TAG=v0.5.0
|
||||||
|
HYPRTOOLKIT_TAG=v0.4.1
|
||||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||||
HYPRLAND_PROTOCOLS_TAG=v0.6.4
|
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||||
HYPRLAND_QTUTILS_TAG=v0.1.4
|
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||||
HYPRWIRE_TAG=auto
|
HYPRLAND_GUIUTILS_TAG=v0.2.0
|
||||||
WAYLAND_PROTOCOLS_TAG=1.45
|
HYPRWIRE_TAG=v0.2.1
|
||||||
|
WAYLAND_PROTOCOLS_TAG=1.46
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -38,16 +79,19 @@ if ! command -v curl >/dev/null 2>&1; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Map of env var -> repo
|
# Map of env var -> repo
|
||||||
|
# (Some modules may not publish GitHub releases; in that case the tag may not refresh.)
|
||||||
declare -A repos=(
|
declare -A repos=(
|
||||||
[HYPRLAND_TAG]="hyprwm/Hyprland"
|
[HYPRLAND_TAG]="hyprwm/Hyprland"
|
||||||
[AQUAMARINE_TAG]="hyprwm/aquamarine"
|
[AQUAMARINE_TAG]="hyprwm/aquamarine"
|
||||||
[HYPRUTILS_TAG]="hyprwm/hyprutils"
|
[HYPRUTILS_TAG]="hyprwm/hyprutils"
|
||||||
[HYPRLANG_TAG]="hyprwm/hyprlang"
|
[HYPRLANG_TAG]="hyprwm/hyprlang"
|
||||||
[HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics"
|
[HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics"
|
||||||
|
[HYPRTOOLKIT_TAG]="hyprwm/hyprtoolkit"
|
||||||
[HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner"
|
[HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner"
|
||||||
[HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols"
|
[HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols"
|
||||||
[HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support"
|
[HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support"
|
||||||
[HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils"
|
[HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils"
|
||||||
|
[HYPRLAND_GUIUTILS_TAG]="hyprwm/hyprland-guiutils"
|
||||||
[HYPRWIRE_TAG]="hyprwm/hyprwire"
|
[HYPRWIRE_TAG]="hyprwm/hyprwire"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -59,12 +103,18 @@ while IFS='=' read -r k v; do
|
|||||||
done < "$TAGS_FILE"
|
done < "$TAGS_FILE"
|
||||||
|
|
||||||
# Fetch latest, but only update keys set to 'auto' or 'latest' unless forced
|
# Fetch latest, but only update keys set to 'auto' or 'latest' unless forced
|
||||||
FORCE=${FORCE:-0}
|
changes=()
|
||||||
for key in "${!repos[@]}"; do
|
for key in "${!repos[@]}"; do
|
||||||
repo="${repos[$key]}"
|
repo="${repos[$key]}"
|
||||||
url="https://api.github.com/repos/$repo/releases/latest"
|
url="https://api.github.com/repos/$repo/releases/latest"
|
||||||
echo "[INFO] Checking latest tag for $repo" | tee -a "$SUMMARY_LOG"
|
echo "[INFO] Checking latest tag for $repo" | tee -a "$SUMMARY_LOG"
|
||||||
body=$(curl -fsSL "$url" || true)
|
|
||||||
|
# Be resilient to transient GitHub API errors (e.g. 5xx).
|
||||||
|
body=$(curl -fsSL \
|
||||||
|
--retry 3 --retry-all-errors --retry-delay 1 \
|
||||||
|
-H 'Accept: application/vnd.github+json' \
|
||||||
|
"$url" || true)
|
||||||
|
|
||||||
[[ -z "$body" ]] && { echo "[WARN] Empty response for $repo" | tee -a "$SUMMARY_LOG"; continue; }
|
[[ -z "$body" ]] && { echo "[WARN] Empty response for $repo" | tee -a "$SUMMARY_LOG"; continue; }
|
||||||
if command -v jq >/dev/null 2>&1; then
|
if command -v jq >/dev/null 2>&1; then
|
||||||
tag=$(printf '%s' "$body" | jq -r '.tag_name // empty')
|
tag=$(printf '%s' "$body" | jq -r '.tag_name // empty')
|
||||||
@ -78,12 +128,30 @@ for key in "${!repos[@]}"; do
|
|||||||
existing="${cur[$key]:-}"
|
existing="${cur[$key]:-}"
|
||||||
if [[ $FORCE -eq 1 ]] || [[ "$existing" =~ ^(auto|latest)$ ]] || [[ -z "$existing" ]]; then
|
if [[ $FORCE -eq 1 ]] || [[ "$existing" =~ ^(auto|latest)$ ]] || [[ -z "$existing" ]]; then
|
||||||
cur[$key]="$tag"
|
cur[$key]="$tag"
|
||||||
|
if [[ "$existing" != "$tag" ]]; then
|
||||||
|
changes+=("$key: $existing -> $tag")
|
||||||
|
fi
|
||||||
echo "[OK] $key := $tag" | tee -a "$SUMMARY_LOG"
|
echo "[OK] $key := $tag" | tee -a "$SUMMARY_LOG"
|
||||||
else
|
else
|
||||||
echo "[SKIP] $key pinned ($existing), not overriding" | tee -a "$SUMMARY_LOG"
|
echo "[SKIP] $key pinned ($existing), not overriding" | tee -a "$SUMMARY_LOG"
|
||||||
fi
|
fi
|
||||||
done
|
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
|
# Write back
|
||||||
{
|
{
|
||||||
for k in "${!cur[@]}"; do
|
for k in "${!cur[@]}"; do
|
||||||
|
|||||||
@ -65,6 +65,12 @@ ONLY_LIST=""
|
|||||||
SKIP_LIST=""
|
SKIP_LIST=""
|
||||||
SET_ARGS=()
|
SET_ARGS=()
|
||||||
|
|
||||||
|
# Trixie compatibility mode
|
||||||
|
# - auto: enable on Debian trixie (useful for toolchain/library shims)
|
||||||
|
# - on: force enable via --build-trixie
|
||||||
|
# - off: force disable via --no-trixie
|
||||||
|
TRIXIE_MODE="auto"
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
# Print the header comments (quick reference) followed by explicit flags overview
|
# Print the header comments (quick reference) followed by explicit flags overview
|
||||||
sed -n '2,140p' "$0" | sed -n '/^# /p' | sed 's/^# \{0,1\}//'
|
sed -n '2,140p' "$0" | sed -n '/^# /p' | sed 's/^# \{0,1\}//'
|
||||||
@ -85,6 +91,8 @@ Options:
|
|||||||
--via-helper Use dry-run-build.sh to summarize a dry-run
|
--via-helper Use dry-run-build.sh to summarize a dry-run
|
||||||
--minimal Build minimal stack before hyprland
|
--minimal Build minimal stack before hyprland
|
||||||
--no-fetch Do not auto-fetch tags on install
|
--no-fetch Do not auto-fetch tags on install
|
||||||
|
--build-trixie Force Debian 13 (trixie) compatibility mode (enables needed shims)
|
||||||
|
--no-trixie Disable trixie compatibility mode
|
||||||
--set K=V [...] Set one or more tags (e.g., HYPRLAND=v0.53.0)
|
--set K=V [...] Set one or more tags (e.g., HYPRLAND=v0.53.0)
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@ -93,16 +101,18 @@ ensure_tags_file() {
|
|||||||
if [[ ! -f "$TAGS_FILE" ]]; then
|
if [[ ! -f "$TAGS_FILE" ]]; then
|
||||||
echo "[INFO] Creating default tags file: $TAGS_FILE" | tee -a "$SUMMARY_LOG"
|
echo "[INFO] Creating default tags file: $TAGS_FILE" | tee -a "$SUMMARY_LOG"
|
||||||
cat >"$TAGS_FILE" <<'EOF'
|
cat >"$TAGS_FILE" <<'EOF'
|
||||||
HYPRLAND_TAG=v0.50.1
|
# Default Hyprland stack versions
|
||||||
AQUAMARINE_TAG=v0.9.2
|
# (You can override any of these via --set or by editing hypr-tags.env.)
|
||||||
HYPRUTILS_TAG=v0.8.2
|
HYPRLAND_TAG=v0.53.3
|
||||||
HYPRLANG_TAG=v0.6.4
|
AQUAMARINE_TAG=v0.10.0
|
||||||
HYPRGRAPHICS_TAG=v0.1.5
|
HYPRUTILS_TAG=v0.11.0
|
||||||
|
HYPRLANG_TAG=v0.6.8
|
||||||
|
HYPRGRAPHICS_TAG=v0.5.0
|
||||||
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
HYPRWAYLAND_SCANNER_TAG=v0.4.5
|
||||||
HYPRLAND_PROTOCOLS_TAG=v0.6.4
|
HYPRLAND_PROTOCOLS_TAG=v0.7.0
|
||||||
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
|
||||||
HYPRLAND_QTUTILS_TAG=v0.1.4
|
HYPRLAND_QTUTILS_TAG=v0.1.5
|
||||||
HYPRWIRE_TAG=auto
|
HYPRWIRE_TAG=v0.2.1
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -160,6 +170,8 @@ set_tags_from_args() {
|
|||||||
fetch_latest_tags() {
|
fetch_latest_tags() {
|
||||||
ensure_tags_file
|
ensure_tags_file
|
||||||
backup_tags
|
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.
|
# Require curl; jq is preferred. Fallback to grep/sed if jq is missing.
|
||||||
if ! command -v curl >/dev/null 2>&1; then
|
if ! command -v curl >/dev/null 2>&1; then
|
||||||
@ -217,6 +229,8 @@ fetch_latest_tags() {
|
|||||||
map[$k]="$v"
|
map[$k]="$v"
|
||||||
done <"$TAGS_FILE"
|
done <"$TAGS_FILE"
|
||||||
|
|
||||||
|
# Build a list of changes (old -> new) according to override rules
|
||||||
|
changes=()
|
||||||
for k in "${!tags[@]}"; do
|
for k in "${!tags[@]}"; do
|
||||||
if [[ $FORCE_UPDATE -eq 1 ]]; then
|
if [[ $FORCE_UPDATE -eq 1 ]]; then
|
||||||
# Force override regardless of current value (matches FORCE=1 behavior in refresh-hypr-tags.sh)
|
# Force override regardless of current value (matches FORCE=1 behavior in refresh-hypr-tags.sh)
|
||||||
@ -229,6 +243,27 @@ fetch_latest_tags() {
|
|||||||
fi
|
fi
|
||||||
done
|
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
|
for k in "${!map[@]}"; do
|
||||||
echo "$k=${map[$k]}"
|
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 PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
|
||||||
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH:-}"
|
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH:-}"
|
||||||
|
|
||||||
|
# Auto-detect Debian trixie unless explicitly overridden.
|
||||||
|
if [[ "$TRIXIE_MODE" == "auto" ]] && [[ -f /etc/os-release ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. /etc/os-release || true
|
||||||
|
if [[ "${ID:-}" == "debian" ]] && [[ "${VERSION_CODENAME:-}" == "trixie" ]]; then
|
||||||
|
TRIXIE_MODE="on"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ "$TRIXIE_MODE" == "on" ]]; then
|
||||||
|
export HYPR_BUILD_TRIXIE=1
|
||||||
|
else
|
||||||
|
export HYPR_BUILD_TRIXIE=0
|
||||||
|
fi
|
||||||
|
|
||||||
# Propagate system/bundled selection to hyprland.sh
|
# Propagate system/bundled selection to hyprland.sh
|
||||||
if [[ $USE_SYSTEM_LIBS -eq 1 ]]; then
|
if [[ $USE_SYSTEM_LIBS -eq 1 ]]; then
|
||||||
export USE_SYSTEM_HYPRLIBS=1
|
export USE_SYSTEM_HYPRLIBS=1
|
||||||
@ -471,19 +520,49 @@ run_stack() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
chmod +x "$script" || true
|
chmod +x "$script" || true
|
||||||
|
|
||||||
|
# Extra args for module scripts
|
||||||
|
# Most scripts ignore unknown flags, so this is safe and lets us add future
|
||||||
|
# trixie-specific shims without changing update-hyprland.sh again.
|
||||||
|
extra_args=()
|
||||||
|
if [[ "${HYPR_BUILD_TRIXIE:-0}" == "1" ]]; then
|
||||||
|
extra_args+=("--build-trixie")
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ $DO_DRY_RUN -eq 1 ]]; then
|
if [[ $DO_DRY_RUN -eq 1 ]]; then
|
||||||
if DRY_RUN=1 "$script"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi
|
if DRY_RUN=1 "$script" "${extra_args[@]}"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi
|
||||||
else
|
else
|
||||||
if "$script"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi
|
if "$script" "${extra_args[@]}"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Ensure /usr/local/lib is in the dynamic linker search path after installs.
|
||||||
|
# Many Hypr* components install shared libraries into /usr/local/lib; without this,
|
||||||
|
# tools like hyprctl can fail to load (e.g. missing libhyprwire.so.*).
|
||||||
|
if [[ $DO_INSTALL -eq 1 ]]; then
|
||||||
|
echo "[INFO] Ensuring /usr/local/lib is in dynamic linker path" | tee -a "$SUMMARY_LOG"
|
||||||
|
if ! sudo grep -qxF "/usr/local/lib" /etc/ld.so.conf.d/usr-local.conf 2>/dev/null; then
|
||||||
|
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf.d/usr-local.conf >/dev/null
|
||||||
|
fi
|
||||||
|
sudo ldconfig || true
|
||||||
|
fi
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "\nSummary:"
|
printf "\nSummary:\n"
|
||||||
for mod in "${modules[@]}"; do
|
for mod in "${modules[@]}"; do
|
||||||
printf "%-24s %s\n" "$mod" "${results[$mod]:-SKIPPED}"
|
printf "%-24s %s\n" "$mod" "${results[$mod]:-SKIPPED}"
|
||||||
done
|
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"
|
} | tee -a "$SUMMARY_LOG"
|
||||||
|
|
||||||
# Non-zero on any FAILs
|
# Non-zero on any FAILs
|
||||||
@ -533,6 +612,14 @@ while [[ $# -gt 0 ]]; do
|
|||||||
NO_FETCH=1
|
NO_FETCH=1
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
--build-trixie)
|
||||||
|
TRIXIE_MODE="on"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--no-trixie)
|
||||||
|
TRIXIE_MODE="off"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
--only)
|
--only)
|
||||||
ONLY_LIST=${2:-}
|
ONLY_LIST=${2:-}
|
||||||
shift 2
|
shift 2
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user