feat: Hyprland 0.51.x upgrade tooling, central tags, docs update

Introduce focused Hyprland stack upgrade tooling and improve install
ordering for 0.51.x, with centralized version management and detailed
documentation for upgrading from 0.49/0.50.x to 0.51.1.

New scripts and modules
- update-hyprland.sh: Manage the Hyprland stack with:
  - --install / --dry-run build modes
  - --only and --skip for selective components
  - --with-deps to (re)install build deps
  - --set {KEY=TAG} and --restore tag backup support
  - --fetch-latest to pull latest GitHub release tags
  - --via-helper to delegate summary-only dry-runs
- dry-run-build.sh: Compile-only helper with summary output
- install-scripts/wayland-protocols-src.sh: Build wayland-protocols from
  source (>= 1.45) to satisfy Hyprland 0.51.x requirements

Core features
- Centralized tag management via hypr-tags.env; tags exported to all
  modules. Environment overrides remain first priority.
- Automatic dependency ordering for Hyprland 0.51.x:
  wayland-protocols-src → hyprland-protocols → hyprutils → hyprlang →
  aquamarine → hyprland
- Optional auto-fetch of latest tags on install runs that include
  hyprland (can be disabled via --no-fetch)
- Selective updates for targeted components and skip lists
- Dry-run mode to validate builds without installing

Installer integration
- install.sh reads hypr-tags.env and optionally refreshes tags.
- Ensures wayland-protocols-src is built before Hyprland.
- Maintains robust sequencing for the Hyprland stack.

Docs
- Debian-Hyprland-Install-Upgrade.md and .es.md:
  - Add explicit section: Upgrade 0.49/0.50.x → 0.51.1
  - Recommend: `./update-hyprland.sh --install --only hyprland`
  - Provide optional `--with-deps` and `--dry-run` flows
  - Add quick link anchor under Upgrade Workflows
- Clarify that full install via install.sh is not required for this
  upgrade unless optional modules need refresh or recovering from a
  partial/failed setup

Usage highlights
- Pin and upgrade to 0.51.1:
  ./update-hyprland.sh --set HYPRLAND=v0.51.1
  ./update-hyprland.sh --install --only hyprland
- Optional:
  ./update-hyprland.sh --with-deps --install --only hyprland
  ./update-hyprland.sh --dry-run --only hyprland

Notes
- Target OS remains Debian Trixie/SID; run as sudo-capable user (not
  root); ensure deb-src entries are enabled.
This commit is contained in:
Don Williams 2025-10-09 16:51:11 -04:00
parent 5a156b1b91
commit d298480443
5 changed files with 482 additions and 342 deletions

View File

@ -110,6 +110,8 @@ Ahora, este método automáticamente:
## Flujos de Actualización ## Flujos de Actualización
Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x--0511)
### 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
@ -152,6 +154,31 @@ Ahora, este método automáticamente:
./update-hyprland.sh --install --only hyprland,aquamarine ./update-hyprland.sh --install --only hyprland,aquamarine
``` ```
### Actualización: 0.49/0.50.x ➜ 0.51.1
Si actualmente estás en Hyprland 0.49 o 0.50.x, puedes actualizar directamente a 0.51.1 sin una reinstalación completa.
Ruta recomendada:
```bash
# Asegura que hypr-tags.env apunte a la versión objetivo (omitir si ya es v0.51.1)
./update-hyprland.sh --set HYPRLAND=v0.51.1
# Actualiza Hyprland (los prerrequisitos se incluyen y ordenan automáticamente)
./update-hyprland.sh --install --only hyprland
```
Notas:
- El comando garantiza y ejecuta, según sea necesario: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine y luego hyprland.
- No es necesario usar install.sh para esta actualización, a menos que también quieras instalar/actualizar módulos opcionales (p. ej., SDDM, Bluetooth, Thunar, AGS, dotfiles) o estés recuperándote de una instalación fallida/parcial.
- Opcional: agrega --with-deps para reinstalar dependencias primero:
```bash
./update-hyprland.sh --with-deps --install --only hyprland
```
- Puedes hacer un dry-run primero para validar:
```bash
./update-hyprland.sh --dry-run --only hyprland
```
## Pruebas con Dry-Run ## Pruebas con Dry-Run
### ¿Por qué usar Dry-Run? ### ¿Por qué usar Dry-Run?

View File

@ -110,6 +110,8 @@ This method now automatically:
## Upgrade Workflows ## Upgrade Workflows
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
@ -152,6 +154,31 @@ This method now automatically:
./update-hyprland.sh --install --only hyprland,aquamarine ./update-hyprland.sh --install --only hyprland,aquamarine
``` ```
### Upgrade: 0.49/0.50.x ➜ 0.51.1
If youre currently on Hyprland 0.49 or 0.50.x, you can upgrade directly to 0.51.1 without a full reinstall.
Recommended path:
```bash
# Ensure hypr-tags.env pins the target version (skip if already v0.51.1)
./update-hyprland.sh --set HYPRLAND=v0.51.1
# Upgrade Hyprland (prerequisites are auto-included and ordered)
./update-hyprland.sh --install --only hyprland
```
Notes:
- The command will automatically ensure and run, as needed: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine, then hyprland.
- Full install via install.sh is not required for this upgrade unless you also want to install/refresh optional modules (e.g., SDDM, Bluetooth, Thunar, AGS, dotfiles) or youre recovering from a failed/partial setup.
- Optional: add --with-deps to re-run dependency installation first:
```bash
./update-hyprland.sh --with-deps --install --only hyprland
```
- You can dry-run first to validate:
```bash
./update-hyprland.sh --dry-run --only hyprland
```
## Dry-Run Testing ## Dry-Run Testing
### Why Use Dry-Run? ### Why Use Dry-Run?

View File

@ -3,7 +3,8 @@
# Hyprland-Dots to download a specific release # # Hyprland-Dots to download a specific release #
# Define the specific release version to download # Define the specific release version to download
specific_version="v2.3.3-Deb-Untu-Hyprland-0.41.2" specific_version="v2.3.16"
#specific_version="v2.3.3-Deb-Untu-Hyprland-0.41.2"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##

View File

@ -22,13 +22,13 @@ RESET="$(tput sgr0)"
# Function to print colorful text # Function to print colorful text
print_color() { print_color() {
printf "%b%s%b\n" "$1" "$2" "$RESET" printf "%b%s%b\n" "$1" "$2" "$RESET"
} l
# Warning: End of Life Support # Warning: End of Life Support
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}
print_color $YELLOW " print_color $YELLOW "
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
KooL's Debian - Hyprland July 2025 Update KooL's Debian - Hyprland October 2025 Update
Most Hyprland packages are built from Source Most Hyprland packages are built from Source
@ -40,9 +40,11 @@ print_color $YELLOW "
However, do note that it is downloaded from each individual releases. You can set versions by editing the scripts However, do note that it is downloaded from each individual releases. You can set versions by editing the scripts
located install-scripts directory. located install-scripts directory.
These packages are NOT updated automatically. You need to manually update it yourself These packages are NOT updated automatically.
BE WARNED!!!!! Installation may take longer!! See the HOWTO documentation on how to get next release of Hyprland installed
BE WARNED!!!!! Installation will take longer!!
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
@ -52,9 +54,6 @@ print_color $YELLOW "
█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
Debian is not my main Distro. As stated above, Most Hyprland and dependencies as built from release.
I cannot monitor the updates or changes. If there are new versions, please submit an Merge Request for any updates.
Thank you! Thank you!
" "
@ -120,10 +119,10 @@ echo -e "\e[35m
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
# Welcome message using whiptail (for displaying information) # Welcome message using whiptail (for displaying information)
whiptail --title "KooL Debian-Hyprland Trixie-SID (2025) Install Script" \ whiptail --title "KooL Debian-Hyprland Trixie+ (2025) Install Script" \
--msgbox "Welcome to KooL Debian-Hyprland Trixie-SID (2025) Install Script!!!\n\n\ --msgbox "Welcome to KooL Debian-Hyprland Trixie+ (2025) Install Script!!!\n\n\
ATTENTION: Run a full system update and Reboot first !!! (Highly Recommended)\n\n\ ATTENTION: Run a full system update and Reboot first !!! (Highly Recommended)\n\n\
NOTE: If you are installing on a VM, ensure to enable 3D acceleration else 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 if the user wants to proceed # Ask if the user wants to proceed

View File

@ -63,7 +63,7 @@ usage() {
ensure_tags_file() { 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 HYPRLAND_TAG=v0.50.1
AQUAMARINE_TAG=v0.9.2 AQUAMARINE_TAG=v0.9.2
HYPRUTILS_TAG=v0.8.2 HYPRUTILS_TAG=v0.8.2
@ -101,20 +101,20 @@ set_tags_from_args() {
while IFS='=' read -r k v; do while IFS='=' read -r k v; do
[[ -z "$k" || "$k" =~ ^# ]] && continue [[ -z "$k" || "$k" =~ ^# ]] && continue
map[$k]="$v" map[$k]="$v"
done < "$TAGS_FILE" done <"$TAGS_FILE"
for kv in "${SET_ARGS[@]}"; do for kv in "${SET_ARGS[@]}"; do
key="${kv%%=*}" key="${kv%%=*}"
val="${kv#*=}" val="${kv#*=}"
case "$key" in case "$key" in
HYPRLAND|hyprland) key=HYPRLAND_TAG ;; HYPRLAND | hyprland) key=HYPRLAND_TAG ;;
AQUAMARINE|aquamarine) key=AQUAMARINE_TAG ;; AQUAMARINE | aquamarine) key=AQUAMARINE_TAG ;;
HYPRUTILS|hyprutils) key=HYPRUTILS_TAG ;; HYPRUTILS | hyprutils) key=HYPRUTILS_TAG ;;
HYPRLANG|hyprlang) key=HYPRLANG_TAG ;; HYPRLANG | hyprlang) key=HYPRLANG_TAG ;;
HYPRGRAPHICS|hyprgraphics) key=HYPRGRAPHICS_TAG ;; HYPRGRAPHICS | hyprgraphics) key=HYPRGRAPHICS_TAG ;;
HYPRWAYLAND_SCANNER|hyprwayland-scanner|hyprwayland_scanner) key=HYPRWAYLAND_SCANNER_TAG ;; HYPRWAYLAND_SCANNER | hyprwayland-scanner | hyprwayland_scanner) key=HYPRWAYLAND_SCANNER_TAG ;;
HYPRLAND_PROTOCOLS|hyprland-protocols|hyprland_protocols) key=HYPRLAND_PROTOCOLS_TAG ;; HYPRLAND_PROTOCOLS | hyprland-protocols | hyprland_protocols) key=HYPRLAND_PROTOCOLS_TAG ;;
HYPRLAND_QT_SUPPORT|hyprland-qt-support|hyprland_qt_support) key=HYPRLAND_QT_SUPPORT_TAG ;; HYPRLAND_QT_SUPPORT | hyprland-qt-support | hyprland_qt_support) key=HYPRLAND_QT_SUPPORT_TAG ;;
HYPRLAND_QTUTILS|hyprland-qtutils|hyprland_qtutils) key=HYPRLAND_QTUTILS_TAG ;; HYPRLAND_QTUTILS | hyprland-qtutils | hyprland_qtutils) key=HYPRLAND_QTUTILS_TAG ;;
esac esac
map[$key]="$val" map[$key]="$val"
done done
@ -122,7 +122,7 @@ set_tags_from_args() {
for k in "${!map[@]}"; do for k in "${!map[@]}"; do
echo "$k=${map[$k]}" echo "$k=${map[$k]}"
done | sort done | sort
} > "$TAGS_FILE" } >"$TAGS_FILE"
echo "[INFO] Updated $TAGS_FILE with provided tags" | tee -a "$SUMMARY_LOG" echo "[INFO] Updated $TAGS_FILE with provided tags" | tee -a "$SUMMARY_LOG"
} }
@ -142,7 +142,7 @@ fetch_latest_tags() {
while IFS='=' read -r k v; do while IFS='=' read -r k v; do
[[ -z "$k" || "$k" =~ ^# ]] && continue [[ -z "$k" || "$k" =~ ^# ]] && continue
existing[$k]="$v" existing[$k]="$v"
done < "$TAGS_FILE" done <"$TAGS_FILE"
declare -A repos=( declare -A repos=(
[HYPRLAND_TAG]="hyprwm/Hyprland" [HYPRLAND_TAG]="hyprwm/Hyprland"
@ -184,7 +184,7 @@ fetch_latest_tags() {
while IFS='=' read -r k v; do while IFS='=' read -r k v; do
[[ -z "$k" || "$k" =~ ^# ]] && continue [[ -z "$k" || "$k" =~ ^# ]] && continue
map[$k]="$v" map[$k]="$v"
done < "$TAGS_FILE" done <"$TAGS_FILE"
for k in "${!tags[@]}"; do for k in "${!tags[@]}"; do
# Only override if pinned value is 'auto' or 'latest' # Only override if pinned value is 'auto' or 'latest'
@ -197,7 +197,7 @@ fetch_latest_tags() {
for k in "${!map[@]}"; do for k in "${!map[@]}"; do
echo "$k=${map[$k]}" echo "$k=${map[$k]}"
done | sort done | sort
} > "$TAGS_FILE" } >"$TAGS_FILE"
echo "[INFO] Refreshed tags written to $TAGS_FILE" | tee -a "$SUMMARY_LOG" echo "[INFO] Refreshed tags written to $TAGS_FILE" | tee -a "$SUMMARY_LOG"
} }
@ -207,7 +207,7 @@ run_stack() {
# shellcheck disable=SC1090 # shellcheck disable=SC1090
source "$TAGS_FILE" source "$TAGS_FILE"
# Export tags so child scripts inherit them # Export tags so child scripts inherit them
export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG HYPRWAYLAND_SCANNER_TAG HYPRLAND_PROTOCOLS_TAG HYPRLAND_QT_SUPPORT_TAG HYPRLAND_QTUTILS_TAG WAYLAND_PROTOCOLS_TAG export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG HYPRWAYLAND_SCANNER_TAG HYPRLAND_PROTOCOLS_TAG HYPRLAND_QT_SUPPORT_TAG HYPRLAND_QTUTILS_TAG WAYLAND_PROTOCOLS_TAG
# Optionally install dependencies (not dry-run) # Optionally install dependencies (not dry-run)
if [[ $WITH_DEPS -eq 1 ]]; then if [[ $WITH_DEPS -eq 1 ]]; then
@ -221,17 +221,20 @@ export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG H
# Build module list based on --only/--skip # Build module list based on --only/--skip
local modules local modules
if [[ -n "$ONLY_LIST" ]]; then if [[ -n "$ONLY_LIST" ]]; then
IFS=',' read -r -a modules <<< "$ONLY_LIST" IFS=',' read -r -a modules <<<"$ONLY_LIST"
else else
modules=("${DEFAULT_MODULES[@]}") modules=("${DEFAULT_MODULES[@]}")
fi fi
if [[ -n "$SKIP_LIST" ]]; then if [[ -n "$SKIP_LIST" ]]; then
IFS=',' read -r -a _skips <<< "$SKIP_LIST" IFS=',' read -r -a _skips <<<"$SKIP_LIST"
local filtered=() local filtered=()
for m in "${modules[@]}"; do for m in "${modules[@]}"; do
local skip_it=0 local skip_it=0
for s in "${_skips[@]}"; do for s in "${_skips[@]}"; do
[[ "$m" == "$s" ]] && { skip_it=1; break; } [[ "$m" == "$s" ]] && {
skip_it=1
break
}
done done
[[ $skip_it -eq 0 ]] && filtered+=("$m") [[ $skip_it -eq 0 ]] && filtered+=("$m")
done done
@ -276,50 +279,96 @@ export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG H
local inserted_wp=0 inserted_hlprot=0 inserted_utils=0 inserted_lang=0 inserted_aqua=0 local inserted_wp=0 inserted_hlprot=0 inserted_utils=0 inserted_lang=0 inserted_aqua=0
for m in "${modules[@]}"; do for m in "${modules[@]}"; do
if [[ "$m" == "wayland-protocols-src" ]]; then if [[ "$m" == "wayland-protocols-src" ]]; then
if [[ $inserted_wp -eq 0 ]]; then tmp+=("wayland-protocols-src"); inserted_wp=1; fi if [[ $inserted_wp -eq 0 ]]; then
tmp+=("wayland-protocols-src")
inserted_wp=1
fi
elif [[ "$m" == "hyprland-protocols" ]]; then elif [[ "$m" == "hyprland-protocols" ]]; then
if [[ $inserted_hlprot -eq 0 ]]; then if [[ $inserted_hlprot -eq 0 ]]; then
# ensure wayland-protocols-src before hyprland-protocols # ensure wayland-protocols-src before hyprland-protocols
if [[ $inserted_wp -eq 0 ]]; then tmp+=("wayland-protocols-src"); inserted_wp=1; fi if [[ $inserted_wp -eq 0 ]]; then
tmp+=("hyprland-protocols"); inserted_hlprot=1 tmp+=("wayland-protocols-src")
inserted_wp=1
fi
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi fi
elif [[ "$m" == "hyprutils" ]]; then elif [[ "$m" == "hyprutils" ]]; then
if [[ $inserted_utils -eq 0 ]]; then if [[ $inserted_utils -eq 0 ]]; then
# ensure protocols before utils # ensure protocols before utils
if [[ $inserted_wp -eq 0 ]]; then tmp+=("wayland-protocols-src"); inserted_wp=1; fi if [[ $inserted_wp -eq 0 ]]; then
if [[ $inserted_hlprot -eq 0 ]]; then tmp+=("hyprland-protocols"); inserted_hlprot=1; fi tmp+=("wayland-protocols-src")
tmp+=("hyprutils"); inserted_utils=1 inserted_wp=1
fi
if [[ $inserted_hlprot -eq 0 ]]; then
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi
tmp+=("hyprutils")
inserted_utils=1
fi fi
elif [[ "$m" == "hyprlang" ]]; then elif [[ "$m" == "hyprlang" ]]; then
if [[ $inserted_lang -eq 0 ]]; then if [[ $inserted_lang -eq 0 ]]; then
# ensure utils before lang # ensure utils before lang
if [[ $inserted_utils -eq 0 ]]; then if [[ $inserted_utils -eq 0 ]]; then
if [[ $inserted_wp -eq 0 ]]; then tmp+=("wayland-protocols-src"); inserted_wp=1; fi if [[ $inserted_wp -eq 0 ]]; then
if [[ $inserted_hlprot -eq 0 ]]; then tmp+=("hyprland-protocols"); inserted_hlprot=1; fi tmp+=("wayland-protocols-src")
tmp+=("hyprutils"); inserted_utils=1 inserted_wp=1
fi fi
tmp+=("hyprlang"); inserted_lang=1 if [[ $inserted_hlprot -eq 0 ]]; then
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi
tmp+=("hyprutils")
inserted_utils=1
fi
tmp+=("hyprlang")
inserted_lang=1
fi fi
elif [[ "$m" == "aquamarine" ]]; then elif [[ "$m" == "aquamarine" ]]; then
if [[ $inserted_aqua -eq 0 ]]; then if [[ $inserted_aqua -eq 0 ]]; then
# ensure lang before aquamarine # ensure lang before aquamarine
if [[ $inserted_lang -eq 0 ]]; then if [[ $inserted_lang -eq 0 ]]; then
if [[ $inserted_utils -eq 0 ]]; then if [[ $inserted_utils -eq 0 ]]; then
if [[ $inserted_wp -eq 0 ]]; then tmp+=("wayland-protocols-src"); inserted_wp=1; fi if [[ $inserted_wp -eq 0 ]]; then
if [[ $inserted_hlprot -eq 0 ]]; then tmp+=("hyprland-protocols"); inserted_hlprot=1; fi tmp+=("wayland-protocols-src")
tmp+=("hyprutils"); inserted_utils=1 inserted_wp=1
fi fi
tmp+=("hyprlang"); inserted_lang=1 if [[ $inserted_hlprot -eq 0 ]]; then
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi fi
tmp+=("aquamarine"); inserted_aqua=1 tmp+=("hyprutils")
inserted_utils=1
fi
tmp+=("hyprlang")
inserted_lang=1
fi
tmp+=("aquamarine")
inserted_aqua=1
fi fi
elif [[ "$m" == "hyprland" ]]; then elif [[ "$m" == "hyprland" ]]; then
# ensure all prerequisites already present # ensure all prerequisites already present
if [[ $inserted_wp -eq 0 ]]; then tmp+=("wayland-protocols-src"); inserted_wp=1; fi if [[ $inserted_wp -eq 0 ]]; then
if [[ $inserted_hlprot -eq 0 ]]; then tmp+=("hyprland-protocols"); inserted_hlprot=1; fi tmp+=("wayland-protocols-src")
if [[ $inserted_utils -eq 0 ]]; then tmp+=("hyprutils"); inserted_utils=1; fi inserted_wp=1
if [[ $inserted_lang -eq 0 ]]; then tmp+=("hyprlang"); inserted_lang=1; fi fi
if [[ $inserted_aqua -eq 0 ]]; then tmp+=("aquamarine"); inserted_aqua=1; fi if [[ $inserted_hlprot -eq 0 ]]; then
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi
if [[ $inserted_utils -eq 0 ]]; then
tmp+=("hyprutils")
inserted_utils=1
fi
if [[ $inserted_lang -eq 0 ]]; then
tmp+=("hyprlang")
inserted_lang=1
fi
if [[ $inserted_aqua -eq 0 ]]; then
tmp+=("aquamarine")
inserted_aqua=1
fi
tmp+=("hyprland") tmp+=("hyprland")
else else
tmp+=("$m") tmp+=("$m")
@ -334,7 +383,11 @@ export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG H
for mod in "${modules[@]}"; do for mod in "${modules[@]}"; do
local script="$REPO_ROOT/install-scripts/$mod.sh" local script="$REPO_ROOT/install-scripts/$mod.sh"
echo "\n=== $mod ===" | tee -a "$SUMMARY_LOG" echo "\n=== $mod ===" | tee -a "$SUMMARY_LOG"
[[ -f "$script" ]] || { echo "[WARN] Missing $script" | tee -a "$SUMMARY_LOG"; results[$mod]="MISSING"; continue; } [[ -f "$script" ]] || {
echo "[WARN] Missing $script" | tee -a "$SUMMARY_LOG"
results[$mod]="MISSING"
continue
}
chmod +x "$script" || true chmod +x "$script" || true
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"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi
@ -362,16 +415,46 @@ export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG H
# Parse args # Parse args
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case "$1" in case "$1" in
-h|--help) usage; exit 0 ;; -h | --help)
--with-deps) WITH_DEPS=1; shift ;; usage
--dry-run) DO_DRY_RUN=1; shift ;; exit 0
--install) DO_INSTALL=1; shift ;; ;;
--fetch-latest) FETCH_LATEST=1; shift ;; --with-deps)
--restore) RESTORE=1; shift ;; WITH_DEPS=1
--via-helper) VIA_HELPER=1; shift ;; shift
--no-fetch) NO_FETCH=1; shift ;; ;;
--only) ONLY_LIST=${2:-}; shift 2 ;; --dry-run)
--skip) SKIP_LIST=${2:-}; shift 2 ;; DO_DRY_RUN=1
shift
;;
--install)
DO_INSTALL=1
shift
;;
--fetch-latest)
FETCH_LATEST=1
shift
;;
--restore)
RESTORE=1
shift
;;
--via-helper)
VIA_HELPER=1
shift
;;
--no-fetch)
NO_FETCH=1
shift
;;
--only)
ONLY_LIST=${2:-}
shift 2
;;
--skip)
SKIP_LIST=${2:-}
shift 2
;;
--set) --set)
shift shift
while [[ $# -gt 0 && "$1" != --* ]]; do while [[ $# -gt 0 && "$1" != --* ]]; do
@ -379,7 +462,10 @@ while [[ $# -gt 0 ]]; do
shift shift
done done
;; ;;
*) echo "Unknown argument: $1"; exit 2 ;; *)
echo "Unknown argument: $1"
exit 2
;;
esac esac
done done
@ -416,7 +502,7 @@ if [[ $VIA_HELPER -eq 1 ]]; then
fi fi
# shellcheck disable=SC1090 # shellcheck disable=SC1090
source "$TAGS_FILE" source "$TAGS_FILE"
export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG HYPRWAYLAND_SCANNER_TAG HYPRLAND_PROTOCOLS_TAG HYPRLAND_QT_SUPPORT_TAG HYPRLAND_QTUTILS_TAG WAYLAND_PROTOCOLS_TAG export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG HYPRWAYLAND_SCANNER_TAG HYPRLAND_PROTOCOLS_TAG HYPRLAND_QT_SUPPORT_TAG HYPRLAND_QTUTILS_TAG WAYLAND_PROTOCOLS_TAG
helper="$REPO_ROOT/dry-run-build.sh" helper="$REPO_ROOT/dry-run-build.sh"
if [[ ! -x "$helper" ]]; then if [[ ! -x "$helper" ]]; then
echo "[ERROR] dry-run-build.sh not found or not executable at $helper" | tee -a "$SUMMARY_LOG" echo "[ERROR] dry-run-build.sh not found or not executable at $helper" | tee -a "$SUMMARY_LOG"