diff options
| author | Don Williams <don.e.williams@gmail.com> | 2025-10-28 17:30:59 -0400 |
|---|---|---|
| committer | Don Williams <don.e.williams@gmail.com> | 2025-10-28 17:30:59 -0400 |
| commit | 758b466c5f2030188d46511b20ad39c6d8b46a0d (patch) | |
| tree | f0c6189bcf1c56f4871756b22f34db8b7f2fbc28 /config/hypr/scripts/ComposeHyprConfigs.sh | |
| parent | dad4a040a85a4b2f5a47fb3f623c6818b924ff79 (diff) | |
Changed /usr/bin/bash to /usr/bin/env bash
On branch development
Your branch is up to date with 'origin/development'.
Changes to be committed:
modified: Distro-Hyprland.sh
modified: config/hypr/UserScripts/RainbowBorders.sh
modified: config/hypr/UserScripts/RofiBeats.sh
modified: config/hypr/UserScripts/RofiCalc.sh
modified: config/hypr/UserScripts/Tak0-Autodispatch.sh
modified: config/hypr/UserScripts/WallpaperAutoChange.sh
modified: config/hypr/UserScripts/WallpaperEffects.sh
modified: config/hypr/UserScripts/WallpaperRandom.sh
modified: config/hypr/UserScripts/WallpaperSelect.sh
modified: config/hypr/UserScripts/Weather.sh
modified: config/hypr/UserScripts/WeatherWrap.sh
modified: config/hypr/UserScripts/ZshChangeTheme.sh
new file: config/hypr/configs/Startup_Apps.conf
new file: config/hypr/configs/WindowRules.conf
modified: config/hypr/hyprland.conf
modified: config/hypr/initial-boot.sh
modified: config/hypr/scripts/AirplaneMode.sh
modified: config/hypr/scripts/Animations.sh
modified: config/hypr/scripts/Battery.sh
modified: config/hypr/scripts/Brightness.sh
modified: config/hypr/scripts/BrightnessKbd.sh
modified: config/hypr/scripts/ChangeBlur.sh
modified: config/hypr/scripts/ChangeLayout.sh
modified: config/hypr/scripts/ClipManager.sh
new file: config/hypr/scripts/ComposeHyprConfigs.sh
modified: config/hypr/scripts/DarkLight.sh
modified: config/hypr/scripts/Distro_update.sh
modified: config/hypr/scripts/Dropterminal.sh
modified: config/hypr/scripts/GameMode.sh
modified: config/hypr/scripts/Hypridle.sh
modified: config/hypr/scripts/KeyBinds.sh
modified: config/hypr/scripts/KeyHints.sh
modified: config/hypr/scripts/KillActiveProcess.sh
modified: config/hypr/scripts/Kitty_themes.sh
modified: config/hypr/scripts/KooLsDotsUpdate.sh
modified: config/hypr/scripts/Kool_Quick_Settings.sh
modified: config/hypr/scripts/LockScreen.sh
modified: config/hypr/scripts/MediaCtrl.sh
modified: config/hypr/scripts/MonitorProfiles.sh
modified: config/hypr/scripts/Polkit-NixOS.sh
modified: config/hypr/scripts/Polkit.sh
modified: config/hypr/scripts/PortalHyprland.sh
modified: config/hypr/scripts/Refresh.sh
modified: config/hypr/scripts/RefreshNoWaybar.sh
modified: config/hypr/scripts/RofiEmoji.sh
modified: config/hypr/scripts/RofiSearch.sh
modified: config/hypr/scripts/RofiThemeSelector-modified.sh
modified: config/hypr/scripts/RofiThemeSelector.sh
modified: config/hypr/scripts/ScreenShot.sh
modified: config/hypr/scripts/Sounds.sh
modified: config/hypr/scripts/SwitchKeyboardLayout.sh
modified: config/hypr/scripts/Tak0-Autodispatch.sh
modified: config/hypr/scripts/TouchPad.sh
modified: config/hypr/scripts/Volume.sh
modified: config/hypr/scripts/WallustSwww.sh
modified: config/hypr/scripts/WaybarLayout.sh
modified: config/hypr/scripts/WaybarScripts.sh
modified: config/hypr/scripts/WaybarStyles.sh
modified: config/hypr/scripts/Wlogout.sh
modified: config/hypr/scripts/sddm_wallpaper.sh
modified: copy.sh
modified: release.sh
modified: upgrade.sh
Diffstat (limited to 'config/hypr/scripts/ComposeHyprConfigs.sh')
| -rw-r--r-- | config/hypr/scripts/ComposeHyprConfigs.sh | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/config/hypr/scripts/ComposeHyprConfigs.sh b/config/hypr/scripts/ComposeHyprConfigs.sh new file mode 100644 index 00000000..55bc3c5c --- /dev/null +++ b/config/hypr/scripts/ComposeHyprConfigs.sh @@ -0,0 +1,109 @@ +#!/usr/bin/env bash +# Compose merged Hyprland configs for Startup_Apps and WindowRules +set -euo pipefail + +BASE_DIR="$HOME/.config/hypr" +BASE_CFG_DIR="$BASE_DIR/configs" +USER_DIR="$BASE_DIR/UserConfigs" +GEN_DIR="$BASE_DIR/generated" + +mkdir -p "$GEN_DIR" + +log() { printf "[compose] %s\n" "$*"; } + +# Trim leading/trailing whitespace +trim() { sed -E 's/^\s+//;s/\s+$//'; } + +# Normalize spaces in a directive line +normalize() { awk '{$1=$1;print}'; } + +# Build merged Startup_Apps.conf +compose_startup_apps() { + local base_file="$BASE_CFG_DIR/Startup_Apps.conf" + local user_file="$USER_DIR/Startup_Apps.conf" + local disable_file="$USER_DIR/Startup_Apps.disable" + local out_file="$GEN_DIR/Startup_Apps.conf" + + : >"$out_file" + + # Header and variable lines come from base + if [[ -f "$base_file" ]]; then + # Copy all non exec-once lines (comments, blanks, variables, etc.) + grep -Ev '^\s*exec-once\s*=' "$base_file" || true >>"$out_file" + fi + + # Collect exec-once commands (the right side of '=') + declare -A cmds=() + + if [[ -f "$base_file" ]]; then + while IFS= read -r line; do + [[ "$line" =~ ^\s*exec-once\s*= ]] || continue + cmd="${line#*=}" + cmd="$(echo "$cmd" | trim)" + cmds["$cmd"]=1 + done <"$base_file" + fi + + if [[ -f "$user_file" ]]; then + while IFS= read -r line; do + [[ "$line" =~ ^\s*exec-once\s*= ]] || continue + cmd="${line#*=}" + cmd="$(echo "$cmd" | trim)" + cmds["$cmd"]=1 + done <"$user_file" + fi + + # Apply disables (exact match of command string) + if [[ -f "$disable_file" ]]; then + while IFS= read -r d; do + d="$(echo "$d" | trim)" + [[ -z "$d" || "$d" =~ ^# ]] && continue + unset 'cmds[$d]' + done <"$disable_file" + fi + + # Emit combined exec-once (stable sort) + for k in "${!cmds[@]}"; do echo "$k"; done | sort -u | while IFS= read -r cmd; do + [[ -z "$cmd" ]] && continue + printf "exec-once = %s\n" "$cmd" >>"$out_file" + done + + log "Wrote $out_file" +} + +# Build merged WindowRules.conf +compose_window_rules() { + local base_file="$BASE_CFG_DIR/WindowRules.conf" + local user_file="$USER_DIR/WindowRules.conf" + local disable_file="$USER_DIR/WindowRules.disable" + local out_file="$GEN_DIR/WindowRules.conf" + + : >"$out_file" + echo "# Generated merged WindowRules" >>"$out_file" + + declare -A rules=() + add_rules() { + local f="$1" + [[ -f "$f" ]] || return 0 + grep -E '^(windowrule|layerrule)\s*=' "$f" | trim | while IFS= read -r r; do + rules["$r"]=1 + done + } + + add_rules "$base_file" + add_rules "$user_file" + + if [[ -f "$disable_file" ]]; then + while IFS= read -r d; do + d="$(echo "$d" | trim)" + [[ -z "$d" || "$d" =~ ^# ]] && continue + unset 'rules[$d]' + done <"$disable_file" + fi + + for r in "${!rules[@]}"; do echo "$r"; done | sort -u >>"$out_file" + log "Wrote $out_file" +} + +compose_startup_apps +compose_window_rules
\ No newline at end of file |
