aboutsummaryrefslogtreecommitdiffstats
path: root/config/hypr/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'config/hypr/scripts')
-rwxr-xr-xconfig/hypr/scripts/AirplaneMode.sh7
-rwxr-xr-xconfig/hypr/scripts/Animations.sh7
-rwxr-xr-xconfig/hypr/scripts/Battery.sh7
-rwxr-xr-xconfig/hypr/scripts/Brightness.sh7
-rwxr-xr-xconfig/hypr/scripts/BrightnessKbd.sh7
-rwxr-xr-xconfig/hypr/scripts/ChangeBlur.sh7
-rwxr-xr-xconfig/hypr/scripts/ChangeLayout.sh133
-rwxr-xr-xconfig/hypr/scripts/ClipManager.sh7
-rwxr-xr-xconfig/hypr/scripts/DarkLight.sh15
-rwxr-xr-xconfig/hypr/scripts/Distro_update.sh7
-rwxr-xr-xconfig/hypr/scripts/Dropterminal.sh207
-rwxr-xr-xconfig/hypr/scripts/ExternalBrightness.sh103
-rwxr-xr-xconfig/hypr/scripts/Float-all-Windows.sh10
-rwxr-xr-xconfig/hypr/scripts/GameMode.sh15
-rwxr-xr-xconfig/hypr/scripts/Ghostty_themes.sh129
-rwxr-xr-xconfig/hypr/scripts/Hypridle.sh7
-rwxr-xr-xconfig/hypr/scripts/Hyprsunset.sh6
-rwxr-xr-xconfig/hypr/scripts/KeyBinds.sh7
-rwxr-xr-xconfig/hypr/scripts/KeyHints.sh11
-rwxr-xr-xconfig/hypr/scripts/KeybindsLayoutInit.sh17
-rwxr-xr-xconfig/hypr/scripts/KeyboardLayout.sh7
-rwxr-xr-xconfig/hypr/scripts/KillActiveProcess.sh7
-rwxr-xr-xconfig/hypr/scripts/Kitty_themes.sh15
-rwxr-xr-xconfig/hypr/scripts/KooLsDotsUpdate.sh7
-rwxr-xr-xconfig/hypr/scripts/Kool_Quick_Settings.sh9
-rwxr-xr-xconfig/hypr/scripts/LockScreen.sh7
-rwxr-xr-xconfig/hypr/scripts/MediaCtrl.sh7
-rwxr-xr-xconfig/hypr/scripts/MonitorProfiles.sh7
-rwxr-xr-xconfig/hypr/scripts/OverviewToggle.sh7
-rwxr-xr-xconfig/hypr/scripts/Polkit-NixOS.sh26
-rwxr-xr-xconfig/hypr/scripts/Polkit.sh42
-rwxr-xr-xconfig/hypr/scripts/PortalHyprland.sh7
-rwxr-xr-xconfig/hypr/scripts/PortalHyprlandUbuntu.sh24
-rwxr-xr-xconfig/hypr/scripts/PortalHyprlandUbuntu2604.sh15
-rwxr-xr-xconfig/hypr/scripts/Refresh.sh32
-rwxr-xr-xconfig/hypr/scripts/RefreshNoWaybar.sh10
-rwxr-xr-xconfig/hypr/scripts/RofiEmoji.sh7
-rwxr-xr-xconfig/hypr/scripts/RofiSearch.sh7
-rwxr-xr-xconfig/hypr/scripts/RofiThemeSelector-modified.sh7
-rwxr-xr-xconfig/hypr/scripts/RofiThemeSelector.sh7
-rwxr-xr-xconfig/hypr/scripts/ScreenShot.sh24
-rwxr-xr-xconfig/hypr/scripts/Sounds.sh52
-rwxr-xr-xconfig/hypr/scripts/Tak0-Autodispatch.sh7
-rwxr-xr-xconfig/hypr/scripts/Tak0-Per-Window-Switch.sh6
-rwxr-xr-xconfig/hypr/scripts/ThemeChanger.sh6
-rwxr-xr-xconfig/hypr/scripts/Toggle-Active-Window-Audio.sh6
-rwxr-xr-xconfig/hypr/scripts/Toggle-weather-waybar-units.sh6
-rwxr-xr-xconfig/hypr/scripts/TouchPad.sh7
-rwxr-xr-xconfig/hypr/scripts/UptimeNixOS.sh6
-rwxr-xr-xconfig/hypr/scripts/UserConfigsSwitcher.sh7
-rwxr-xr-xconfig/hypr/scripts/Volume.sh7
-rwxr-xr-xconfig/hypr/scripts/WallpaperCmd.sh31
-rwxr-xr-xconfig/hypr/scripts/WallpaperDaemon.sh66
-rwxr-xr-xconfig/hypr/scripts/WallustSwww.sh119
-rwxr-xr-xconfig/hypr/scripts/WaybarCava.sh6
-rwxr-xr-xconfig/hypr/scripts/WaybarLayout.sh7
-rwxr-xr-xconfig/hypr/scripts/WaybarScripts.sh7
-rwxr-xr-xconfig/hypr/scripts/WaybarStyles.sh7
-rwxr-xr-xconfig/hypr/scripts/Wlogout.sh7
-rwxr-xr-xconfig/hypr/scripts/build-awww.sh209
-rwxr-xr-xconfig/hypr/scripts/disable.cpu.turbo.sh63
-rwxr-xr-xconfig/hypr/scripts/fastfetch-wrapper.sh24
-rwxr-xr-xconfig/hypr/scripts/hyprshot.sh7
-rwxr-xr-xconfig/hypr/scripts/install-uv.sh6
-rwxr-xr-xconfig/hypr/scripts/keybinds_parser.py6
-rwxr-xr-xconfig/hypr/scripts/rofi-emacs-keybinds13
-rwxr-xr-xconfig/hypr/scripts/rofi-ssh-menu.sh117
-rwxr-xr-xconfig/hypr/scripts/sddm_wallpaper.sh7
-rwxr-xr-xconfig/hypr/scripts/set-default-thunar-terminal.sh148
-rwxr-xr-xconfig/hypr/scripts/update_WindowRules.sh6
70 files changed, 1741 insertions, 222 deletions
diff --git a/config/hypr/scripts/AirplaneMode.sh b/config/hypr/scripts/AirplaneMode.sh
index ba692f98..21aa04a8 100755
--- a/config/hypr/scripts/AirplaneMode.sh
+++ b/config/hypr/scripts/AirplaneMode.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Airplane Mode. Turning on or off all wifi using rfkill.
notif="$HOME/.config/swaync/images/ja.png"
diff --git a/config/hypr/scripts/Animations.sh b/config/hypr/scripts/Animations.sh
index ff3a6e45..5fb77750 100755
--- a/config/hypr/scripts/Animations.sh
+++ b/config/hypr/scripts/Animations.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For applying Animations from different users
# Check if rofi is already running
diff --git a/config/hypr/scripts/Battery.sh b/config/hypr/scripts/Battery.sh
index 2baed6ca..c42a4dac 100755
--- a/config/hypr/scripts/Battery.sh
+++ b/config/hypr/scripts/Battery.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
for i in {0..3}; do
if [ -f /sys/class/power_supply/BAT$i/capacity ]; then
battery_level=$(cat /sys/class/power_supply/BAT$i/status)
diff --git a/config/hypr/scripts/Brightness.sh b/config/hypr/scripts/Brightness.sh
index e0091417..bf0f4bf1 100755
--- a/config/hypr/scripts/Brightness.sh
+++ b/config/hypr/scripts/Brightness.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for Monitor backlights (if supported) using brightnessctl
iDIR="$HOME/.config/swaync/icons"
diff --git a/config/hypr/scripts/BrightnessKbd.sh b/config/hypr/scripts/BrightnessKbd.sh
index f9015fe0..5bd09a78 100755
--- a/config/hypr/scripts/BrightnessKbd.sh
+++ b/config/hypr/scripts/BrightnessKbd.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for keyboard backlights (if supported) using brightnessctl
iDIR="$HOME/.config/swaync/icons"
diff --git a/config/hypr/scripts/ChangeBlur.sh b/config/hypr/scripts/ChangeBlur.sh
index 084af2cb..10b5914e 100755
--- a/config/hypr/scripts/ChangeBlur.sh
+++ b/config/hypr/scripts/ChangeBlur.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for changing blurs on the fly
notif="$HOME/.config/swaync/images"
diff --git a/config/hypr/scripts/ChangeLayout.sh b/config/hypr/scripts/ChangeLayout.sh
index 499fa1e2..f52d783f 100755
--- a/config/hypr/scripts/ChangeLayout.sh
+++ b/config/hypr/scripts/ChangeLayout.sh
@@ -1,39 +1,112 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
-# for changing Hyprland Layouts (Master or Dwindle) on the fly
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# for changing Hyprland Layouts (master, dwindle, scrolling, monocle) on the fly
notif="$HOME/.config/swaync/images/ja.png"
-LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g')
+layouts=(master dwindle scrolling monocle)
-# Reverse layout value to reuse toggle logic. So layouts don't get swapped initially.
-if [ "$1" = "init" ]; then
- if [ "$LAYOUT" = "master" ]; then
- LAYOUT="dwindle"
- else
- LAYOUT="master"
- fi
-fi
+get_layout() {
+ hyprctl -j getoption general:layout | jq -r '.str'
+}
-case $LAYOUT in
-"master")
- hyprctl keyword general:layout dwindle
- hyprctl keyword unbind SUPER,J
- hyprctl keyword unbind SUPER,K
- hyprctl keyword bind SUPER,J,cyclenext
- hyprctl keyword bind SUPER,K,cyclenext,prev
- hyprctl keyword bind SUPER,O,togglesplit
- notify-send -e -u low -i "$notif" " Dwindle Layout"
- ;;
-"dwindle")
- hyprctl keyword general:layout master
- hyprctl keyword unbind SUPER,J
- hyprctl keyword unbind SUPER,K
+next_layout() {
+ local current="$1"
+ local i
+ for i in "${!layouts[@]}"; do
+ if [[ "${layouts[i]}" == "$current" ]]; then
+ echo "${layouts[((i + 1) % ${#layouts[@]})]}"
+ return
+ fi
+ done
+ echo "${layouts[0]}"
+}
+
+set_layout() {
+ local target="$1"
+
+ hyprctl keyword general:layout "$target"
+ hyprctl keyword unbind SUPER,j
+ hyprctl keyword unbind SUPER,k
+ hyprctl keyword unbind SUPER,left
+ hyprctl keyword unbind SUPER,right
+ hyprctl keyword unbind SUPER,up
+ hyprctl keyword unbind SUPER,down
hyprctl keyword unbind SUPER,O
- hyprctl keyword bind SUPER,J,layoutmsg,cyclenext
- hyprctl keyword bind SUPER,K,layoutmsg,cycleprev
- notify-send -e -u low -i "$notif" " Master Layout"
- ;;
-*) ;;
+ hyprctl keyword unbind SUPER_SHIFT,M
+
+ case "$target" in
+ "dwindle")
+ hyprctl keyword bind SUPER,j,cyclenext
+ hyprctl keyword bind SUPER,k,cyclenext,prev
+ hyprctl keyword bind SUPER,left,cyclenext,prev
+ hyprctl keyword bind SUPER,up,cyclenext,prev
+ hyprctl keyword bind SUPER,right,cyclenext
+ hyprctl keyword bind SUPER,down,cyclenext
+ hyprctl keyword bind SUPER,O,layoutmsg,togglesplit
+ notify-send -e -u low -i "$notif" " Dwindle Layout"
+ ;;
+ "scrolling")
+ hyprctl keyword bind SUPER,j,cyclenext
+ hyprctl keyword bind SUPER,k,cyclenext,prev
+ hyprctl keyword bind SUPER,left,cyclenext,prev
+ hyprctl keyword bind SUPER,up,cyclenext,prev
+ hyprctl keyword bind SUPER,right,cyclenext
+ hyprctl keyword bind SUPER,down,cyclenext
+ notify-send -e -u low -i "$notif" " Scrolling Layout"
+ ;;
+ "monocle")
+ hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,left,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,up,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,right,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER,down,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER_SHIFT,M,layoutmsg,swapnext
+ notify-send -e -u low -i "$notif" " Monocle Layout"
+ ;;
+ "master")
+ hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,left,movefocus,l
+ hyprctl keyword bind SUPER,right,movefocus,r
+ hyprctl keyword bind SUPER,up,movefocus,u
+ hyprctl keyword bind SUPER,down,movefocus,d
+ notify-send -e -u low -i "$notif" " Master Layout"
+ ;;
+ *)
+ hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,left,movefocus,l
+ hyprctl keyword bind SUPER,right,movefocus,r
+ hyprctl keyword bind SUPER,up,movefocus,u
+ hyprctl keyword bind SUPER,down,movefocus,d
+ echo "Unknown layout: $target" >&2
+ return 1
+ ;;
+ esac
+}
+current="$(get_layout)"
+arg="${1:-toggle}"
+
+case "$arg" in
+init)
+ set_layout "$current"
+ ;;
+toggle|next)
+ set_layout "$(next_layout "$current")"
+ ;;
+master|dwindle|scrolling|monocle)
+ set_layout "$arg"
+ ;;
+*)
+ echo "Usage: $(basename "$0") [toggle|next|init|master|dwindle|scrolling|monocle]" >&2
+ exit 1
+ ;;
esac
diff --git a/config/hypr/scripts/ClipManager.sh b/config/hypr/scripts/ClipManager.sh
index d08fd8f4..e3fbd066 100755
--- a/config/hypr/scripts/ClipManager.sh
+++ b/config/hypr/scripts/ClipManager.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Clipboard Manager. This script uses cliphist, rofi, and wl-copy.
# Variables
diff --git a/config/hypr/scripts/DarkLight.sh b/config/hypr/scripts/DarkLight.sh
index 62bad62b..5b1cc3e7 100755
--- a/config/hypr/scripts/DarkLight.sh
+++ b/config/hypr/scripts/DarkLight.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-## /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For Dark and Light switching
# Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate directories
@@ -12,6 +17,8 @@ hypr_config_path="$HOME/.config/hypr"
swaync_style="$HOME/.config/swaync/style.css"
ags_style="$HOME/.config/ags/user/style.css"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
+# shellcheck source=/dev/null
+. "$SCRIPTSDIR/WallpaperCmd.sh"
notif="$HOME/.config/swaync/images/bell.png"
wallust_rofi="$HOME/.config/wallust/templates/colors-rofi.rasi"
@@ -31,11 +38,11 @@ for pid in waybar rofi swaync ags swaybg; do
done
-# Initialize swww if needed
-swww query || swww-daemon --format xrgb
+# Initialize wallpaper daemon if needed
+"$WWW_CMD" query || "$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}"
# Set swww options
-swww="swww img"
+swww="$WWW_CMD img"
effect="--transition-bezier .43,1.19,1,.4 --transition-fps 60 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2"
# Determine current theme mode
diff --git a/config/hypr/scripts/Distro_update.sh b/config/hypr/scripts/Distro_update.sh
index b4b8e90c..b9bcae71 100755
--- a/config/hypr/scripts/Distro_update.sh
+++ b/config/hypr/scripts/Distro_update.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Simple bash script to check and will try to update your system
# Local Paths
diff --git a/config/hypr/scripts/Dropterminal.sh b/config/hypr/scripts/Dropterminal.sh
index 2a9eb5b1..81c0f157 100755
--- a/config/hypr/scripts/Dropterminal.sh
+++ b/config/hypr/scripts/Dropterminal.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
#
# Made and brought to by Kiran George
# /* -- ✨ https://github.com/SherLock707 ✨ -- */ ##
@@ -12,7 +17,13 @@
DEBUG=false
SPECIAL_WS="special:scratchpad"
+SPECIAL_NAME="${SPECIAL_WS#special:}"
ADDR_FILE="/tmp/dropdown_terminal_addr"
+STATE_FILE="/tmp/dropdown_terminal_state"
+LOCK_FILE="/tmp/dropdown_terminal_lock"
+LAST_TOGGLE_FILE="/tmp/dropdown_terminal_last_toggle"
+MIN_TOGGLE_INTERVAL_MS=250
+DROPDOWN_KITTY_CLASS="kitty-dropterm"
# Dropdown size and position configuration (percentages)
WIDTH_PERCENT=65 # Width as percentage of screen width
@@ -31,12 +42,63 @@ if [ "$1" = "-d" ]; then
fi
TERMINAL_CMD="$1"
+if [[ "$TERMINAL_CMD" == kitty* ]] && [[ "$TERMINAL_CMD" != *"--class"* ]] && [[ "$TERMINAL_CMD" != *"--name"* ]] && [[ "$TERMINAL_CMD" != *"--app-id"* ]]; then
+ TERMINAL_CMD="$TERMINAL_CMD --class $DROPDOWN_KITTY_CLASS"
+fi
+
+# Ensure only one instance runs at a time (prevents overlapping animations)
+exec 9>"$LOCK_FILE"
+flock -n 9 || exit 0
+
+# Debounce rapid toggles
+now_ms=""
+if date +%s%3N >/dev/null 2>&1; then
+ now_ms=$(date +%s%3N)
+else
+ now_ms=$(( $(date +%s) * 1000 ))
+fi
+if [ -f "$LAST_TOGGLE_FILE" ]; then
+ last_ms=$(cat "$LAST_TOGGLE_FILE" 2>/dev/null || echo 0)
+ if [ -n "$last_ms" ] && [ "$last_ms" -ge 0 ] 2>/dev/null; then
+ delta_ms=$((now_ms - last_ms))
+ if [ "$delta_ms" -lt "$MIN_TOGGLE_INTERVAL_MS" ] 2>/dev/null; then
+ if [ "$DEBUG" = true ]; then
+ echo "Toggle debounced (${delta_ms}ms < ${MIN_TOGGLE_INTERVAL_MS}ms)" >&2
+ fi
+ exit 0
+ fi
+ fi
+fi
+echo "$now_ms" >"$LAST_TOGGLE_FILE"
# Debug echo function
debug_echo() {
if [ "$DEBUG" = true ]; then
- echo "$@"
+ echo "$@" >&2
+ fi
+}
+
+# Resolve terminal address, recovering by class if needed
+resolve_terminal_address() {
+ local addr
+ addr=$(get_terminal_address)
+ if [ -n "$addr" ] && window_exists "$addr"; then
+ echo "$addr"
+ return 0
+ fi
+
+ local recovered
+ recovered=$(find_terminal_by_class)
+ if [ -n "$recovered" ] && [ "$recovered" != "null" ]; then
+ local mon_name
+ mon_name=$(get_monitor_info | awk '{print $6}')
+ echo "$recovered $mon_name" >"$ADDR_FILE"
+ echo "$recovered"
+ return 0
fi
+
+ rm -f "$ADDR_FILE"
+ return 1
}
# Validate input
@@ -62,6 +124,28 @@ get_window_geometry() {
hyprctl clients -j | jq -r --arg ADDR "$addr" '.[] | select(.address == $ADDR) | "\(.at[0]) \(.at[1]) \(.size[0]) \(.size[1])"'
}
+# Function to check if window is currently hidden off-screen
+window_is_hidden() {
+ local addr="$1"
+ local y
+ y=$(hyprctl clients -j 2>/dev/null | jq -r --arg ADDR "$addr" '.[] | select(.address == $ADDR) | .at[1]' 2>/dev/null)
+ if [[ "$y" =~ ^-?[0-9]+$ ]] && [ "$y" -lt 0 ]; then
+ return 0
+ fi
+ return 1
+}
+
+# State helpers
+get_hidden_state() {
+ if [ -f "$STATE_FILE" ]; then
+ cat "$STATE_FILE" 2>/dev/null
+ fi
+}
+
+set_hidden_state() {
+ echo "$1" >"$STATE_FILE"
+}
+
# Function to animate window slide down (show)
animate_slide_down() {
local addr="$1"
@@ -121,7 +205,30 @@ animate_slide_up() {
# Function to get monitor info including scale and name of focused monitor
get_monitor_info() {
- local monitor_data=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x) \(.y) \(.width) \(.height) \(.scale) \(.name)"')
+ local monitor_data
+ monitor_data=$(hyprctl monitors -j 2>/dev/null | jq -er 'map(select(.focused == true)) | .[0] | "\(.x) \(.y) \(.width) \(.height) \(.scale) \(.name)"' 2>/dev/null) || monitor_data=""
+ if [ -z "$monitor_data" ]; then
+ # Fallback for older Hyprland without -j support
+ monitor_data=$(hyprctl monitors 2>/dev/null | awk '
+ /^Monitor / {name=$2; sub(/\(.*/, "", name); x=y=w=h=scale=""; focused="no"}
+ / at / {
+ # e.g. "1920x1080@74.97300 at 0x0"
+ split($1, res, "x"); w=res[1]; split(res[2], tmp, "@"); h=tmp[1]
+ split($4, pos, "x"); x=pos[1]; y=pos[2]
+ }
+ /scale:/ {scale=$2}
+ /focused:/ {focused=$2}
+ /^$/ {
+ if (focused=="yes" && x!="" && y!="" && w!="" && h!="" && scale!="" && name!="") {
+ print x, y, w, h, scale, name; exit
+ }
+ }
+ END {
+ if (focused=="yes" && x!="" && y!="" && w!="" && h!="" && scale!="" && name!="") {
+ print x, y, w, h, scale, name
+ }
+ }')
+ fi
if [ -z "$monitor_data" ] || [[ "$monitor_data" =~ ^null ]]; then
debug_echo "Error: Could not get focused monitor information"
return 1
@@ -129,6 +236,7 @@ get_monitor_info() {
echo "$monitor_data"
}
+
# Function to calculate dropdown position with proper scaling and centering
calculate_dropdown_position() {
local monitor_info=$(get_monitor_info)
@@ -148,6 +256,13 @@ calculate_dropdown_position() {
debug_echo "Monitor info: x=$mon_x, y=$mon_y, width=$mon_width, height=$mon_height, scale=$mon_scale"
+ # Validate numeric fields
+ if ! [[ "$mon_x" =~ ^-?[0-9]+$ && "$mon_y" =~ ^-?[0-9]+$ && "$mon_width" =~ ^[0-9]+$ && "$mon_height" =~ ^[0-9]+$ ]]; then
+ debug_echo "Invalid monitor info format, using fallback values"
+ echo "100 100 800 600 fallback-monitor"
+ return 1
+ fi
+
# Validate scale value and provide fallback
if [ -z "$mon_scale" ] || [ "$mon_scale" = "null" ] || [ "$mon_scale" = "0" ]; then
debug_echo "Invalid scale value, using 1.0 as fallback"
@@ -207,6 +322,12 @@ get_terminal_address() {
fi
}
+# Try to find an existing dropdown terminal by class (kitty only)
+find_terminal_by_class() {
+ hyprctl clients -j 2>/dev/null | jq -r --arg CLASS "$DROPDOWN_KITTY_CLASS" \
+ '.[] | select(.class == $CLASS) | .address' | head -1
+}
+
# Function to get stored monitor name
get_terminal_monitor() {
if [ -f "$ADDR_FILE" ] && [ -s "$ADDR_FILE" ]; then
@@ -218,22 +339,48 @@ get_terminal_monitor() {
terminal_exists() {
local addr=$(get_terminal_address)
if [ -n "$addr" ]; then
- hyprctl clients -j | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1
+ hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1
else
return 1
fi
}
-# Function to check if terminal is in special workspace
-terminal_in_special() {
- local addr=$(get_terminal_address)
+# Function to check if a window address exists
+window_exists() {
+ local addr="$1"
+ if [ -n "$addr" ]; then
+ hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1
+ else
+ return 1
+ fi
+}
+
+
+# Function to check if window is pinned
+window_is_pinned() {
+ local addr="$1"
if [ -n "$addr" ]; then
- hyprctl clients -j | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR and .workspace.name == "special:scratchpad")' >/dev/null 2>&1
+ hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" '.[] | select(.address == $ADDR) | .pinned == true' >/dev/null 2>&1
else
return 1
fi
}
+# Ensure pin state without toggling unexpectedly
+ensure_pinned() {
+ local addr="$1"
+ if ! window_is_pinned "$addr"; then
+ hyprctl dispatch pin "address:$addr" >/dev/null 2>&1
+ fi
+}
+
+ensure_unpinned() {
+ local addr="$1"
+ if window_is_pinned "$addr"; then
+ hyprctl dispatch pin "address:$addr" >/dev/null 2>&1
+ fi
+}
+
# Function to spawn terminal and capture its address
spawn_terminal() {
debug_echo "Creating new dropdown terminal with command: $TERMINAL_CMD"
@@ -288,12 +435,13 @@ spawn_terminal() {
# Small delay to ensure it's properly in special workspace
sleep 0.2
-
- # Now bring it back with the same animation as subsequent shows
- # Use movetoworkspacesilent to avoid affecting workspace history
+ # Move to current workspace but start hidden off-screen
hyprctl dispatch movetoworkspacesilent "$CURRENT_WS,address:$new_addr"
- hyprctl dispatch pin "address:$new_addr"
- animate_slide_down "$new_addr" "$target_x" "$target_y" "$width" "$height"
+ ensure_pinned "$new_addr"
+ hyprctl dispatch resizewindowpixel "exact $width $height,address:$new_addr" >/dev/null 2>&1
+ local off_y=$((target_y - height - 200))
+ hyprctl dispatch movewindowpixel "exact $target_x $off_y,address:$new_addr" >/dev/null 2>&1
+ set_hidden_state "hidden"
return 0
fi
@@ -303,8 +451,9 @@ spawn_terminal() {
}
# Main logic
-if terminal_exists; then
- TERMINAL_ADDR=$(get_terminal_address)
+TERMINAL_ADDR=$(resolve_terminal_address)
+
+if [ -n "$TERMINAL_ADDR" ]; then
debug_echo "Found existing terminal: $TERMINAL_ADDR"
focused_monitor=$(get_monitor_info | awk '{print $6}')
dropdown_monitor=$(get_terminal_monitor)
@@ -324,8 +473,9 @@ if terminal_exists; then
echo "$TERMINAL_ADDR $monitor_name" >"$ADDR_FILE"
fi
- if terminal_in_special; then
- debug_echo "Bringing terminal from scratchpad with slide down animation"
+ hidden_state=$(get_hidden_state)
+ if [ "$hidden_state" = "hidden" ] || [ -z "$hidden_state" ] || window_is_hidden "$TERMINAL_ADDR"; then
+ debug_echo "Bringing terminal from hidden position with slide down animation"
# Calculate target position
pos_info=$(calculate_dropdown_position)
@@ -334,17 +484,16 @@ if terminal_exists; then
width=$(echo $pos_info | cut -d' ' -f3)
height=$(echo $pos_info | cut -d' ' -f4)
- # Use movetoworkspacesilent to avoid affecting workspace history
- hyprctl dispatch movetoworkspacesilent "$CURRENT_WS,address:$TERMINAL_ADDR"
- hyprctl dispatch pin "address:$TERMINAL_ADDR"
+ ensure_pinned "$TERMINAL_ADDR"
# Set size and animate slide down
hyprctl dispatch resizewindowpixel "exact $width $height,address:$TERMINAL_ADDR"
animate_slide_down "$TERMINAL_ADDR" "$target_x" "$target_y" "$width" "$height"
hyprctl dispatch focuswindow "address:$TERMINAL_ADDR"
+ set_hidden_state "shown"
else
- debug_echo "Hiding terminal to scratchpad with slide up animation"
+ debug_echo "Hiding terminal off-screen with slide up animation"
# Get current geometry for animation
geometry=$(get_window_geometry "$TERMINAL_ADDR")
@@ -359,14 +508,16 @@ if terminal_exists; then
# Animate slide up first
animate_slide_up "$TERMINAL_ADDR" "$curr_x" "$curr_y" "$curr_width" "$curr_height"
- # Small delay then move to special workspace and unpin
- sleep 0.1
- hyprctl dispatch pin "address:$TERMINAL_ADDR" # Unpin (toggle)
- hyprctl dispatch movetoworkspacesilent "$SPECIAL_WS,address:$TERMINAL_ADDR"
+ # Move off-screen after animation
+ off_y=$((curr_y - curr_height - 200))
+ hyprctl dispatch movewindowpixel "exact $curr_x $off_y,address:$TERMINAL_ADDR" >/dev/null 2>&1
+ ensure_unpinned "$TERMINAL_ADDR"
+ set_hidden_state "hidden"
else
- debug_echo "Could not get window geometry, moving to scratchpad without animation"
- hyprctl dispatch pin "address:$TERMINAL_ADDR"
- hyprctl dispatch movetoworkspacesilent "$SPECIAL_WS,address:$TERMINAL_ADDR"
+ debug_echo "Could not get window geometry, moving off-screen without animation"
+ hyprctl dispatch movewindowpixel "exact 0 -1000,address:$TERMINAL_ADDR" >/dev/null 2>&1
+ ensure_unpinned "$TERMINAL_ADDR"
+ set_hidden_state "hidden"
fi
fi
else
diff --git a/config/hypr/scripts/ExternalBrightness.sh b/config/hypr/scripts/ExternalBrightness.sh
new file mode 100755
index 00000000..29c1b238
--- /dev/null
+++ b/config/hypr/scripts/ExternalBrightness.sh
@@ -0,0 +1,103 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# External monitor brightness via ddcutil
+
+set -u
+
+step=10
+vcp_code=10
+
+usage() {
+ cat <<'EOF'
+Usage: ExternalBrightness.sh [--get|--inc|--dec|--set N] [--display N]
+Env:
+ DDCUTIL_DISPLAY Optional display number passed to ddcutil --display
+ DDCUTIL_OPTS Extra options passed to ddcutil (e.g. "--sleep-multiplier 0.2")
+EOF
+}
+
+ddcutil_cmd() {
+ local display_arg=()
+ local display="${DDCUTIL_DISPLAY:-}"
+ if [[ -n "${display}" ]]; then
+ display_arg+=(--display "${display}")
+ fi
+ ddcutil ${DDCUTIL_OPTS:-} "${display_arg[@]}" "$@"
+}
+
+get_brightness() {
+ # Example output: "VCP code 0x10 (Brightness): current value = 50, max value = 100"
+ local line
+ if ! line="$(ddcutil_cmd getvcp "${vcp_code}" 2>/dev/null | tail -n 1)"; then
+ return 1
+ fi
+ local current max
+ current="$(printf "%s" "${line}" | sed -n 's/.*current value = \([0-9]\+\).*/\1/p')"
+ max="$(printf "%s" "${line}" | sed -n 's/.*max value = \([0-9]\+\).*/\1/p')"
+ [[ -n "${current}" && -n "${max}" ]] || return 1
+ printf "%s %s\n" "${current}" "${max}"
+}
+
+set_brightness() {
+ local value="$1"
+ ddcutil_cmd setvcp "${vcp_code}" "${value}" >/dev/null 2>&1
+}
+
+json_output() {
+ local current max percent icon
+ if ! read -r current max < <(get_brightness); then
+ printf '{"text":"ķ°ƒœ N/A","tooltip":"External brightness unavailable (load i2c-dev, allow i2c access)","class":"brightness-external-off"}\n'
+ return 0
+ fi
+ percent=$(( current * 100 / max ))
+ if (( percent >= 80 )); then
+ icon="ķ°ƒ "
+ elif (( percent >= 60 )); then
+ icon="ķ°ƒŸ"
+ elif (( percent >= 40 )); then
+ icon="ķ°ƒž"
+ elif (( percent >= 20 )); then
+ icon="ķ°ƒ"
+ else
+ icon=""
+ fi
+ printf '{"text":"%s %s%%","tooltip":"External display brightness: %s%%","class":"brightness-external"}\n' "${icon}" "${percent}" "${percent}"
+}
+
+case "${1:-}" in
+ --get|"")
+ json_output
+ ;;
+ --inc|--dec)
+ read -r current max < <(get_brightness) || exit 1
+ delta=$step
+ [[ "$1" == "--dec" ]] && delta=$(( -step ))
+ new=$(( current + delta ))
+ (( new < 5 )) && new=5
+ (( new > max )) && new="${max}"
+ set_brightness "${new}"
+ json_output
+ ;;
+ --set)
+ [[ -n "${2:-}" ]] || { usage; exit 1; }
+ set_brightness "${2}"
+ json_output
+ ;;
+ --display)
+ [[ -n "${2:-}" ]] || { usage; exit 1; }
+ DDCUTIL_DISPLAY="${2}" shift 2
+ "${0}" "${@:-"--get"}"
+ ;;
+ -h|--help)
+ usage
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+esac
diff --git a/config/hypr/scripts/Float-all-Windows.sh b/config/hypr/scripts/Float-all-Windows.sh
new file mode 100755
index 00000000..e658cabb
--- /dev/null
+++ b/config/hypr/scripts/Float-all-Windows.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+
+ws=$(hyprctl activeworkspace -j | jq -r .id)
+hyprctl clients -j | jq -r --arg ws "$ws" '.[] | select(.workspace.id == ($ws|tonumber)) | .address' | xargs -r -I {} hyprctl dispatch togglefloating address:{}
diff --git a/config/hypr/scripts/GameMode.sh b/config/hypr/scripts/GameMode.sh
index a28a27fb..9c5b8264 100755
--- a/config/hypr/scripts/GameMode.sh
+++ b/config/hypr/scripts/GameMode.sh
@@ -1,9 +1,16 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Game Mode. Turning off all animations
notif="$HOME/.config/swaync/images/ja.png"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
+# shellcheck source=/dev/null
+. "$SCRIPTSDIR/WallpaperCmd.sh"
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
@@ -17,13 +24,13 @@ if [ "$HYPRGAMEMODE" = 1 ] ; then
keyword general:border_size 1;\
keyword decoration:rounding 0"
- hyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$"
- swww kill
+\thyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$"
+ "$WWW_CMD" kill
notify-send -e -u low -i "$notif" " Gamemode:" " enabled"
sleep 0.1
exit
else
- swww-daemon --format xrgb && swww img "$HOME/.config/rofi/.current_wallpaper" &
+\t"$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" && "$WWW_CMD" img "$HOME/.config/rofi/.current_wallpaper" &
sleep 0.1
${SCRIPTSDIR}/WallustSwww.sh
sleep 0.5
diff --git a/config/hypr/scripts/Ghostty_themes.sh b/config/hypr/scripts/Ghostty_themes.sh
new file mode 100755
index 00000000..a69f246e
--- /dev/null
+++ b/config/hypr/scripts/Ghostty_themes.sh
@@ -0,0 +1,129 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Ghostty theme selector
+
+config_file="$HOME/.config/ghostty/config"
+iDIR="$HOME/.config/swaync/images"
+rofi_theme_primary="$HOME/.config/rofi/config-ghostty-theme.rasi"
+rofi_theme_fallback="$HOME/.config/rofi/config-edit.rasi"
+
+notify_user() {
+ local icon="$1"
+ local title="$2"
+ local body="$3"
+ if [[ -n "$icon" && -f "$icon" ]]; then
+ notify-send -u low -i "$icon" "$title" "$body"
+ else
+ notify-send -u low "$title" "$body"
+ fi
+}
+
+if [[ ! -f "$config_file" ]]; then
+ notify_user "$iDIR/error.png" "Ghostty Theme" "Config not found: $config_file"
+ exit 1
+fi
+
+rofi_config_args=()
+if [[ -f "$rofi_theme_primary" ]]; then
+ rofi_config_args=(-config "$rofi_theme_primary")
+elif [[ -f "$rofi_theme_fallback" ]]; then
+ rofi_config_args=(-config "$rofi_theme_fallback")
+fi
+
+current_theme=$(
+ awk -F'=' '/^[[:space:]]*theme[[:space:]]*=/ {
+ val=$2
+ sub(/^[[:space:]]+/, "", val)
+ sub(/[[:space:]]+$/, "", val)
+ gsub(/^"|"$/, "", val)
+ print val
+ exit
+ }' "$config_file"
+)
+
+mapfile -t available_theme_names < <(
+ awk -F'=' '/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/ {
+ val=$2
+ sub(/^[[:space:]]+/, "", val)
+ sub(/[[:space:]]+$/, "", val)
+ gsub(/^"|"$/, "", val)
+ print val
+ }' "$config_file"
+)
+
+if [[ ${#available_theme_names[@]} -eq 0 ]]; then
+ notify_user "$iDIR/error.png" "Ghostty Theme" "No commented themes found in $config_file"
+ exit 1
+fi
+
+menu_entries=()
+if [[ -n "$current_theme" ]]; then
+ menu_entries+=("Current: $current_theme")
+fi
+for t in "${available_theme_names[@]}"; do
+ menu_entries+=("$t")
+done
+
+choice=$(
+ printf "%s\n" "${menu_entries[@]}" |
+ rofi -i -dmenu -p "Ghostty Theme" "${rofi_config_args[@]}" -mesg "Select a theme to apply"
+)
+
+[[ -z "$choice" ]] && exit 0
+
+if [[ "$choice" == "Current: "* ]]; then
+ exit 0
+fi
+
+selected_theme="$choice"
+
+if [[ -n "$current_theme" && "$selected_theme" == "$current_theme" ]]; then
+ exit 0
+fi
+
+format_theme_value() {
+ if [[ "$1" =~ [[:space:]] ]]; then
+ printf "\"%s\"" "$1"
+ else
+ printf "%s" "$1"
+ fi
+}
+
+selected_formatted=$(format_theme_value "$selected_theme")
+
+tmp_file=$(mktemp)
+awk -v selected="$selected_theme" -v selected_formatted="$selected_formatted" '
+function trim(s) { sub(/^[[:space:]]+/, "", s); sub(/[[:space:]]+$/, "", s); return s }
+function strip_quotes(s) { gsub(/^"|"$/, "", s); return s }
+{
+ line=$0
+ if ($0 ~ /^[[:space:]]*theme[[:space:]]*=/) {
+ sub(/^[[:space:]]*theme[[:space:]]*=/, "#theme =", line)
+ print line
+ next
+ }
+ if ($0 ~ /^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/) {
+ val=$0
+ sub(/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=[[:space:]]*/, "", val)
+ val=trim(val)
+ val=strip_quotes(val)
+ if (val == selected) {
+ print "theme = " selected_formatted
+ next
+ }
+ }
+ print $0
+}' "$config_file" > "$tmp_file"
+
+mv "$tmp_file" "$config_file"
+
+pkill -SIGUSR2 ghostty >/dev/null 2>&1 || true
+
+notify_user "$iDIR/ja.png" "Ghostty Theme Applied" "$selected_theme"
+
+exit 0
diff --git a/config/hypr/scripts/Hypridle.sh b/config/hypr/scripts/Hypridle.sh
index 4bf6a985..240fec3e 100755
--- a/config/hypr/scripts/Hypridle.sh
+++ b/config/hypr/scripts/Hypridle.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This is for custom version of waybar idle_inhibitor which activates / deactivates hypridle instead
PROCESS="hypridle"
diff --git a/config/hypr/scripts/Hyprsunset.sh b/config/hypr/scripts/Hyprsunset.sh
index 4a2b52f4..52140728 100755
--- a/config/hypr/scripts/Hyprsunset.sh
+++ b/config/hypr/scripts/Hyprsunset.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -euo pipefail
# Hyprsunset toggle + Waybar status helper
diff --git a/config/hypr/scripts/KeyBinds.sh b/config/hypr/scripts/KeyBinds.sh
index 341f104f..69111047 100755
--- a/config/hypr/scripts/KeyBinds.sh
+++ b/config/hypr/scripts/KeyBinds.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# searchable enabled keybinds using rofi (supports bindd descriptions)
# kill yad to not interfere with this binds
diff --git a/config/hypr/scripts/KeyHints.sh b/config/hypr/scripts/KeyHints.sh
index 3916a925..f00837d3 100755
--- a/config/hypr/scripts/KeyHints.sh
+++ b/config/hypr/scripts/KeyHints.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# GDK BACKEND. Change to either wayland or x11 if having issues
BACKEND=wayland
@@ -40,8 +45,8 @@ GDK_BACKEND=$BACKEND yad \
" ALT mouse scroll up/down " "Desktop Zoom" "Desktop Magnifier" \
" Alt V" "Clipboard Manager" "(cliphist)" \
" W" "Choose wallpaper" "(Wallpaper Menu)" \
-" Shift W" "Choose wallpaper effects" "(imagemagick + swww)" \
-"CTRL ALT W" "Random wallpaper" "(via swww)" \
+" Shift W" "Choose wallpaper effects" "(imagemagick + awww)" \
+"CTRL ALT W" "Random wallpaper" "(via awww)" \
" CTRL ALT B" "Hide/UnHide Waybar" "waybar" \
" CTRL B" "Choose waybar styles" "(waybar styles)" \
" ALT B" "Choose waybar layout" "(waybar layout)" \
diff --git a/config/hypr/scripts/KeybindsLayoutInit.sh b/config/hypr/scripts/KeybindsLayoutInit.sh
index 80bee9d6..f47197af 100755
--- a/config/hypr/scripts/KeybindsLayoutInit.sh
+++ b/config/hypr/scripts/KeybindsLayoutInit.sh
@@ -1,14 +1,19 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Initialize J/K keybinds so they always cycle windows globally (no layout-specific behavior)
# This avoids double-actions when layouts change.
set -euo pipefail
# Always reset and bind SUPER+J/K the same way on startup
-hyprctl keyword unbind SUPER,J || true
-hyprctl keyword unbind SUPER,K || true
+hyprctl keyword unbind SUPER,j || true
+hyprctl keyword unbind SUPER,k || true
-# Cycle windows globally: J = next, K = previous
-hyprctl keyword bind SUPER,J,cyclenext
-hyprctl keyword bind SUPER,K,cyclenext,prev
+# Cycle windows globally
+hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
+hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
diff --git a/config/hypr/scripts/KeyboardLayout.sh b/config/hypr/scripts/KeyboardLayout.sh
index 926514dd..fe092e7f 100755
--- a/config/hypr/scripts/KeyboardLayout.sh
+++ b/config/hypr/scripts/KeyboardLayout.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This is for changing kb_layouts. Set kb_layouts in "$HOME/.config/hypr/UserConfigs/UserSettings.conf"
notif_icon="$HOME/.config/swaync/images/ja.png"
diff --git a/config/hypr/scripts/KillActiveProcess.sh b/config/hypr/scripts/KillActiveProcess.sh
index ff0628b2..66d6b009 100755
--- a/config/hypr/scripts/KillActiveProcess.sh
+++ b/config/hypr/scripts/KillActiveProcess.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Copied from Discord post. Thanks to @Zorg
diff --git a/config/hypr/scripts/Kitty_themes.sh b/config/hypr/scripts/Kitty_themes.sh
index 8bc6e0f0..3183b20b 100755
--- a/config/hypr/scripts/Kitty_themes.sh
+++ b/config/hypr/scripts/Kitty_themes.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */  #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Kitty Themes Source https://github.com/dexpota/kitty-themes #
# Define directories and variables
@@ -23,6 +28,8 @@ apply_kitty_theme_to_config() {
fi
local theme_file_path_to_apply
if [ "$theme_name_to_apply" = "Set by wallpaper" ]; then
+ theme_file_path_to_apply="$kitty_themes_DiR/01-Wallust.conf"
+ elif [ "$theme_name_to_apply" = "Default no color" ]; then
theme_file_path_to_apply="$kitty_themes_DiR/00-Default.conf"
else
theme_file_path_to_apply="$kitty_themes_DiR/$theme_name_to_apply.conf"
@@ -80,7 +87,7 @@ fi
original_kitty_config_content_backup=$(cat "$kitty_config")
mapfile -t available_theme_names < <(find "$kitty_themes_DiR" -maxdepth 1 -name "*.conf" -type f -printf "%f\n" | sed 's/\.conf$//' | grep -v -E '^(00-Default|01-Wallust)$' | sort)
-available_theme_names=("Set by wallpaper" "${available_theme_names[@]}")
+available_theme_names=("Set by wallpaper" "Default no color" "${available_theme_names[@]}")
if [ ${#available_theme_names[@]} -eq 0 ]; then
notify_user "$iDIR/error.png" "No Kitty Themes" "No .conf files found in $kitty_themes_DiR."
@@ -89,8 +96,10 @@ fi
current_selection_index=0
current_active_theme_name=$(awk -F'include ./kitty-themes/|\\.conf' '/^[[:space:]]*include \\.\/kitty-themes\/.*\\.conf/{print $2; exit}' "$kitty_config")
-if [ "$current_active_theme_name" = "00-Default" ]; then
+if [ "$current_active_theme_name" = "01-Wallust" ]; then
current_active_theme_name="Set by wallpaper"
+elif [ "$current_active_theme_name" = "00-Default" ]; then
+ current_active_theme_name="Default no color"
fi
if [ -n "$current_active_theme_name" ]; then
diff --git a/config/hypr/scripts/KooLsDotsUpdate.sh b/config/hypr/scripts/KooLsDotsUpdate.sh
index 8ed50f27..887993a5 100755
--- a/config/hypr/scripts/KooLsDotsUpdate.sh
+++ b/config/hypr/scripts/KooLsDotsUpdate.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# simple bash script to check if update is available by comparing local version and github version
# Local Paths
diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh
index 5081fe72..fcd04998 100755
--- a/config/hypr/scripts/Kool_Quick_Settings.sh
+++ b/config/hypr/scripts/Kool_Quick_Settings.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Rofi menu for KooL Hyprland Quick Settings (SUPER SHIFT E)
# Updated for UserConfigs/configs separation
@@ -193,6 +198,7 @@ Edit System Default Settings
--- UTILITIES ---
Set SDDM Wallpaper
Choose Kitty Terminal Theme
+Choose Ghostty Terminal Theme
Configure Monitors (nwg-displays)
Configure Workspace Rules (nwg-displays)
GTK Settings (nwg-look)
@@ -230,6 +236,7 @@ main() {
"Edit System Default Settings") file="$configs/SystemSettings.conf" ;;
"Set SDDM Wallpaper") $scriptsDir/sddm_wallpaper.sh --normal ;;
"Choose Kitty Terminal Theme") $scriptsDir/Kitty_themes.sh ;;
+ "Choose Ghostty Terminal Theme") $scriptsDir/Ghostty_themes.sh ;;
"Configure Monitors (nwg-displays)")
if ! command -v nwg-displays &>/dev/null; then
notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install nwg-displays first"
diff --git a/config/hypr/scripts/LockScreen.sh b/config/hypr/scripts/LockScreen.sh
index 548a7652..a7b27ad9 100755
--- a/config/hypr/scripts/LockScreen.sh
+++ b/config/hypr/scripts/LockScreen.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For Hyprlock
#pidof hyprlock || hyprlock -q
diff --git a/config/hypr/scripts/MediaCtrl.sh b/config/hypr/scripts/MediaCtrl.sh
index b49a967b..aeabcac9 100755
--- a/config/hypr/scripts/MediaCtrl.sh
+++ b/config/hypr/scripts/MediaCtrl.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Playerctl
music_icon="$HOME/.config/swaync/icons/music.png"
diff --git a/config/hypr/scripts/MonitorProfiles.sh b/config/hypr/scripts/MonitorProfiles.sh
index 62213490..78825986 100755
--- a/config/hypr/scripts/MonitorProfiles.sh
+++ b/config/hypr/scripts/MonitorProfiles.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For applying Pre-configured Monitor Profiles
# Check if rofi is already running
diff --git a/config/hypr/scripts/OverviewToggle.sh b/config/hypr/scripts/OverviewToggle.sh
index 3fe9ba96..719788da 100755
--- a/config/hypr/scripts/OverviewToggle.sh
+++ b/config/hypr/scripts/OverviewToggle.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Overview toggle wrapper - tries Quickshell first, falls back to AGS
set -euo pipefail
diff --git a/config/hypr/scripts/Polkit-NixOS.sh b/config/hypr/scripts/Polkit-NixOS.sh
index 925deab5..c1e6e0a2 100755
--- a/config/hypr/scripts/Polkit-NixOS.sh
+++ b/config/hypr/scripts/Polkit-NixOS.sh
@@ -1,6 +1,26 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
-# For NixOS starting of polkit-gnome. Dec 2023, the settings stated in NixOS wiki does not work so have to manual start it
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# For NixOS starting of polkit agents. Prefer xfce4-polkit, fallback to polkit-gnome.
+
+# Find all xfce4-polkit executables in the Nix store
+xfce_polkit_paths=$(find /nix/store -name 'xfce4-polkit' -type f 2>/dev/null)
+
+for xfce_polkit_path in $xfce_polkit_paths; do
+ # Extract the directory containing the executable
+ xfce_polkit_dir=$(dirname "$xfce_polkit_path")
+
+ # Check if the executable is valid and exists
+ if [ -x "$xfce_polkit_dir/xfce4-polkit" ]; then
+ # Start the xfce4-polkit Authentication Agent
+ "$xfce_polkit_dir/xfce4-polkit" &
+ exit 0
+ fi
+done
# Find all polkit-gnome executables in the Nix store
polkit_gnome_paths=$(find /nix/store -name 'polkit-gnome-authentication-agent-1' -type f 2>/dev/null)
@@ -18,4 +38,4 @@ for polkit_gnome_path in $polkit_gnome_paths; do
done
# If no valid executable is found, report an error
-echo "No valid Polkit-GNOME Authentication Agent executable found." \ No newline at end of file
+echo "No valid polkit authentication agent executable found."
diff --git a/config/hypr/scripts/Polkit.sh b/config/hypr/scripts/Polkit.sh
index 9db94d89..768747ab 100755
--- a/config/hypr/scripts/Polkit.sh
+++ b/config/hypr/scripts/Polkit.sh
@@ -1,19 +1,47 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This script starts the first available Polkit agent from a list of possible locations
+# Avoid duplicate agents (common with UWSM/session autostart)
+if pgrep -u "$UID" -f 'xfce-polkit|polkit-gnome-authentication-agent-1|polkit-kde-authentication-agent-1|polkit-mate-authentication-agent-1|mate-polkit|hyprpolkitagent' >/dev/null 2>&1; then
+ echo "Polkit agent already running. Skipping start."
+ exit 0
+fi
+
+# Ensure Qt apps default to Wayland in a Wayland session
+if [ -n "${WAYLAND_DISPLAY:-}" ] && [ -z "${QT_QPA_PLATFORM:-}" ]; then
+ export QT_QPA_PLATFORM=wayland
+fi
-# List of potential Polkit agent file paths
+# Avoid KDE polkit agent crashing if Kvantum QML module is missing
+if [ -z "${QT_QUICK_CONTROLS_STYLE:-}" ]; then
+ export QT_QUICK_CONTROLS_STYLE=Basic
+fi
+if [ -z "${QT_STYLE_OVERRIDE:-}" ]; then
+ export QT_STYLE_OVERRIDE=Fusion
+fi
+
+# List of potential Polkit agent file paths (preferred order)
polkit=(
+ "/usr/bin/xfce-polkit"
+ "/usr/lib/xfce4/polkit-agent/xfce-polkit"
+ "/usr/libexec/xfce-polkit"
"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
- "/usr/libexec/hyprpolkitagent"
- "/usr/lib/hyprpolkitagent"
- "/usr/lib/hyprpolkitagent/hyprpolkitagent"
- "/usr/lib/polkit-kde-authentication-agent-1"
"/usr/lib/polkit-gnome-authentication-agent-1"
"/usr/libexec/polkit-gnome-authentication-agent-1"
"/usr/libexec/polkit-mate-authentication-agent-1"
- "/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1"
+ "/usr/lib/polkit-mate/polkit-mate-authentication-agent-1"
+ "/usr/bin/polkit-mate-authentication-agent-1"
"/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1"
+ "/usr/lib/polkit-kde-authentication-agent-1"
+ "/usr/libexec/polkit-kde-authentication-agent-1"
+ "/usr/libexec/hyprpolkitagent"
+ "/usr/lib/hyprpolkitagent"
+ "/usr/lib/hyprpolkitagent/hyprpolkitagent"
)
executed=false
diff --git a/config/hypr/scripts/PortalHyprland.sh b/config/hypr/scripts/PortalHyprland.sh
index 79b1bb96..243ee2e8 100755
--- a/config/hypr/scripts/PortalHyprland.sh
+++ b/config/hypr/scripts/PortalHyprland.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For manually starting xdg-desktop-portal-hyprland
set -euo pipefail
diff --git a/config/hypr/scripts/PortalHyprlandUbuntu.sh b/config/hypr/scripts/PortalHyprlandUbuntu.sh
new file mode 100755
index 00000000..86e1a6d3
--- /dev/null
+++ b/config/hypr/scripts/PortalHyprlandUbuntu.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Ubuntu-based workaround: start portals manually before waybar.
+
+set -euo pipefail
+
+if [[ -r /etc/os-release ]]; then
+ # shellcheck disable=SC1091
+ . /etc/os-release
+ if [[ "${ID:-}" == "ubuntu" \
+ || "${ID:-}" == "linuxmint" \
+ || "${ID:-}" == "zorin" \
+ || "${ID:-}" == "rhino" \
+ || "${ID_LIKE:-}" == *ubuntu* ]]; then
+ if [[ -x "$HOME/.config/hypr/scripts/PortalHyprland.sh" ]]; then
+ "$HOME/.config/hypr/scripts/PortalHyprland.sh"
+ fi
+ fi
+fi
diff --git a/config/hypr/scripts/PortalHyprlandUbuntu2604.sh b/config/hypr/scripts/PortalHyprlandUbuntu2604.sh
deleted file mode 100755
index 5cb3c01b..00000000
--- a/config/hypr/scripts/PortalHyprlandUbuntu2604.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
-# Ubuntu 26.04 workaround: start portals manually before waybar.
-
-set -euo pipefail
-
-if [[ -r /etc/os-release ]]; then
- # shellcheck disable=SC1091
- . /etc/os-release
- if [[ "${ID:-}" == "ubuntu" && "${VERSION_ID:-}" == "26.04" ]]; then
- if [[ -x "$HOME/.config/hypr/scripts/PortalHyprland.sh" ]]; then
- "$HOME/.config/hypr/scripts/PortalHyprland.sh"
- fi
- fi
-fi
diff --git a/config/hypr/scripts/Refresh.sh b/config/hypr/scripts/Refresh.sh
index 95248b35..03f55fa0 100755
--- a/config/hypr/scripts/Refresh.sh
+++ b/config/hypr/scripts/Refresh.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Scripts for refreshing ags, waybar, rofi, swaync, wallust
SCRIPTSDIR=$HOME/.config/hypr/scripts
@@ -14,8 +19,8 @@ file_exists() {
fi
}
-# Kill already running processes
-_ps=(waybar rofi swaync ags)
+# Kill already running processes (exclude waybar to avoid double reloads)
+_ps=(rofi swaync ags)
for _prs in "${_ps[@]}"; do
if pidof "${_prs}" >/dev/null; then
pkill "${_prs}"
@@ -25,10 +30,6 @@ done
# Clean up any Waybar-spawned cava instances (unique temp conf names)
pkill -f 'waybar-cava\..*\.conf' 2>/dev/null || true
-# added since wallust sometimes not applying
-killall -SIGUSR2 waybar
-# Added sleep for GameMode causing multiple waybar
-sleep 0.1
# quit ags & relaunch ags
#ags -q && ags &
@@ -36,15 +37,22 @@ sleep 0.1
# quit quickshell & relaunch quickshell
#pkill qs && qs &
-# some process to kill
-for pid in $(pidof waybar rofi swaync ags swaybg); do
+# some process to kill (exclude waybar to avoid restart loops)
+for pid in $(pidof rofi swaync ags swaybg); do
kill -SIGUSR1 "$pid"
sleep 0.1
done
-#Restart waybar
-sleep 0.1
-waybar &
+# Reload or start waybar once
+if pidof waybar >/dev/null; then
+ if command -v waybar-msg >/dev/null 2>&1; then
+ waybar-msg cmd reload >/dev/null 2>&1 || true
+ else
+ killall -SIGUSR2 waybar 2>/dev/null || true
+ fi
+else
+ waybar &
+fi
# relaunch swaync
sleep 0.3
diff --git a/config/hypr/scripts/RefreshNoWaybar.sh b/config/hypr/scripts/RefreshNoWaybar.sh
index afbda1f2..f5d564ac 100755
--- a/config/hypr/scripts/RefreshNoWaybar.sh
+++ b/config/hypr/scripts/RefreshNoWaybar.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Modified version of Refresh.sh but waybar wont refresh
# Used by automatic wallpaper change
@@ -31,9 +36,6 @@ done
# quit quickshell & relaunch quickshell
#pkill qs && qs &
-# Wallust refresh (synchronous to ensure colors are ready)
-${SCRIPTSDIR}/WallustSwww.sh
-sleep 0.2
# reload swaync
swaync-client --reload-config
diff --git a/config/hypr/scripts/RofiEmoji.sh b/config/hypr/scripts/RofiEmoji.sh
index a21c2374..539a03b6 100755
--- a/config/hypr/scripts/RofiEmoji.sh
+++ b/config/hypr/scripts/RofiEmoji.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Variables
rofi_theme="$HOME/.config/rofi/config-emoji.rasi"
diff --git a/config/hypr/scripts/RofiSearch.sh b/config/hypr/scripts/RofiSearch.sh
index d7dd5726..42b54d75 100755
--- a/config/hypr/scripts/RofiSearch.sh
+++ b/config/hypr/scripts/RofiSearch.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For Searching via web browsers
# Define the path to the config file
diff --git a/config/hypr/scripts/RofiThemeSelector-modified.sh b/config/hypr/scripts/RofiThemeSelector-modified.sh
index de3ebf4a..535b7313 100755
--- a/config/hypr/scripts/RofiThemeSelector-modified.sh
+++ b/config/hypr/scripts/RofiThemeSelector-modified.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# A modified version of Rofi-Theme-Selector, concentrating only on ~/.local and also, applying only 10 @themes in ~/.config/rofi/config.rasi
# as opposed to continous adding of //@theme
diff --git a/config/hypr/scripts/RofiThemeSelector.sh b/config/hypr/scripts/RofiThemeSelector.sh
index 66327d09..db723b6f 100755
--- a/config/hypr/scripts/RofiThemeSelector.sh
+++ b/config/hypr/scripts/RofiThemeSelector.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */  #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Rofi Themes - Script to preview and apply themes by live-reloading the config.
# --- Configuration ---
diff --git a/config/hypr/scripts/ScreenShot.sh b/config/hypr/scripts/ScreenShot.sh
index b12c08f0..baad89a1 100755
--- a/config/hypr/scripts/ScreenShot.sh
+++ b/config/hypr/scripts/ScreenShot.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Screenshots scripts
# variables
@@ -25,7 +30,7 @@ notify_cmd_NOT="notify-send -u low -i ${iDoR}/note.png "
notify_view() {
if [[ "$1" == "active" ]]; then
if [[ -e "${active_window_path}" ]]; then
- "${sDIR}/Sounds.sh" --screenshot
+ "${sDIR}/Sounds.sh" --screenshot >/dev/null 2>&1 &
resp=$(timeout 5 ${notify_cmd_shot_win} " Screenshot of:" " ${active_window_class} Saved.")
case "$resp" in
action1)
@@ -37,11 +42,11 @@ notify_view() {
esac
else
${notify_cmd_NOT} " Screenshot of:" " ${active_window_class} NOT Saved."
- "${sDIR}/Sounds.sh" --error
+ "${sDIR}/Sounds.sh" --error >/dev/null 2>&1 &
fi
elif [[ "$1" == "swappy" ]]; then
- "${sDIR}/Sounds.sh" --screenshot
+ "${sDIR}/Sounds.sh" --screenshot >/dev/null 2>&1 &
resp=$(${notify_cmd_shot} " Screenshot:" " Captured by Swappy")
case "$resp" in
action1)
@@ -55,7 +60,7 @@ notify_view() {
else
local check_file="${dir}/${file}"
if [[ -e "$check_file" ]]; then
- "${sDIR}/Sounds.sh" --screenshot
+ "${sDIR}/Sounds.sh" --screenshot >/dev/null 2>&1 &
resp=$(timeout 5 ${notify_cmd_shot} " Screenshot" " Saved")
case "$resp" in
action1)
@@ -67,7 +72,7 @@ notify_view() {
esac
else
${notify_cmd_NOT} " Screenshot" " NOT Saved"
- "${sDIR}/Sounds.sh" --error
+ "${sDIR}/Sounds.sh" --error >/dev/null 2>&1 &
fi
fi
}
@@ -83,14 +88,12 @@ countdown() {
# take shots
shotnow() {
cd ${dir} && grim - | tee "$file" | wl-copy
- sleep 2
notify_view
}
shot5() {
countdown '5'
sleep 1 && cd ${dir} && grim - | tee "$file" | wl-copy
- sleep 1
notify_view
}
@@ -125,7 +128,6 @@ shotactive() {
active_window_path="${dir}/${active_window_file}"
hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - "${active_window_path}"
- sleep 1
notify_view "active"
}
@@ -156,10 +158,10 @@ elif [[ "$1" == "--area" ]]; then
shotarea
elif [[ "$1" == "--active" ]]; then
shotactive
-elif [[ "$1" == "--swappy" ]]; then
+elif [[ "$1" == "--swappy" || "$1" == "--swapp" || "$1" == "--swap" ]]; then
shotswappy
else
- echo -e "Available Options : --now --in5 --in10 --win --area --active --swappy"
+ echo -e "Available Options : --now --in5 --in10 --win --area --active --swappy (--swapp/--swap)"
fi
exit 0
diff --git a/config/hypr/scripts/Sounds.sh b/config/hypr/scripts/Sounds.sh
index 7c0bf57c..3af4944f 100755
--- a/config/hypr/scripts/Sounds.sh
+++ b/config/hypr/scripts/Sounds.sh
@@ -1,10 +1,16 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This script is used to play system sounds.
# Script is used by Volume.Sh and ScreenShots.sh
theme="freedesktop" # Set the theme for the system sounds.
mute=false # Set to true to mute the system sounds.
+directSoundDir="$HOME/.config/hypr/sounds"
# Mute individual sounds here.
muteScreenshots=false
@@ -20,16 +26,19 @@ if [[ "$1" == "--screenshot" ]]; then
if [[ "$muteScreenshots" = true ]]; then
exit 0
fi
+ directSound="$directSoundDir/screenshot.ogg"
soundoption="screen-capture.*"
elif [[ "$1" == "--volume" ]]; then
if [[ "$muteVolume" = true ]]; then
exit 0
fi
+ directSound="$directSoundDir/volume.ogg"
soundoption="audio-volume-change.*"
elif [[ "$1" == "--error" ]]; then
if [[ "$muteScreenshots" = true ]]; then
exit 0
fi
+ directSound="$directSoundDir/error.ogg"
soundoption="dialog-error.*"
else
echo -e "Available sounds: --screenshot, --volume, --error"
@@ -57,6 +66,29 @@ fi
iTheme=$(cat "$sDIR/index.theme" | grep -i "inherits" | cut -d "=" -f 2)
iDIR="$sDIR/../$iTheme"
+# Helper to play in the background (fast return).
+play_sound() {
+ if command -v paplay >/dev/null 2>&1; then
+ paplay "$1" >/dev/null 2>&1 &
+ exit 0
+ fi
+ if command -v pw-play >/dev/null 2>&1; then
+ pw-play "$1" >/dev/null 2>&1 &
+ exit 0
+ fi
+ if command -v aplay >/dev/null 2>&1; then
+ aplay "$1" >/dev/null 2>&1 &
+ exit 0
+ fi
+ echo "Error: No suitable audio player found. Install paplay (pulseaudio-utils) or PipeWire/ALSA tools."
+ exit 1
+}
+
+# If a direct sound file exists, play it immediately to avoid lookup delay.
+if [[ -n "$directSound" && -f "$directSound" ]]; then
+ play_sound "$directSound"
+fi
+
# Find the sound file and play it.
sound_file=$(find -L $sDIR/stereo -name "$soundoption" -print -quit)
if ! test -f "$sound_file"; then
@@ -72,19 +104,5 @@ if ! test -f "$sound_file"; then
fi
fi
fi
-
-# Play the sound: prefer PipeWire, then PulseAudio, then ALSA
-if command -v pw-play >/dev/null 2>&1; then
- pw-play "$sound_file" && exit 0
-fi
-
-if command -v paplay >/dev/null 2>&1; then
- paplay "$sound_file" && exit 0
-fi
-
-if command -v aplay >/dev/null 2>&1; then
- aplay "$sound_file" && exit 0
-fi
-
-echo "Error: No suitable audio player (pw-play/paplay/aplay) found."
-exit 1
+# Play the sound (background for quick return).
+play_sound "$sound_file"
diff --git a/config/hypr/scripts/Tak0-Autodispatch.sh b/config/hypr/scripts/Tak0-Autodispatch.sh
index 6ed7ec13..034a6402 100755
--- a/config/hypr/scripts/Tak0-Autodispatch.sh
+++ b/config/hypr/scripts/Tak0-Autodispatch.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# ─────────────────────────────────────────────────────────────────────────────
# Tak0-Autodispatch.sh
# ─────────────────────────────────────────────────────────────────────────────
diff --git a/config/hypr/scripts/Tak0-Per-Window-Switch.sh b/config/hypr/scripts/Tak0-Per-Window-Switch.sh
index 3ba2c7af..04baebe0 100755
--- a/config/hypr/scripts/Tak0-Per-Window-Switch.sh
+++ b/config/hypr/scripts/Tak0-Per-Window-Switch.sh
@@ -1,3 +1,9 @@
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
##################################################################
# #
# #
diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh
index 19ee3298..b41738f6 100755
--- a/config/hypr/scripts/ThemeChanger.sh
+++ b/config/hypr/scripts/ThemeChanger.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -euo pipefail
# SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com
diff --git a/config/hypr/scripts/Toggle-Active-Window-Audio.sh b/config/hypr/scripts/Toggle-Active-Window-Audio.sh
index 4d9bcd33..f32ded0e 100755
--- a/config/hypr/scripts/Toggle-Active-Window-Audio.sh
+++ b/config/hypr/scripts/Toggle-Active-Window-Audio.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -euo pipefail
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
diff --git a/config/hypr/scripts/Toggle-weather-waybar-units.sh b/config/hypr/scripts/Toggle-weather-waybar-units.sh
index 4007536c..abc089ff 100755
--- a/config/hypr/scripts/Toggle-weather-waybar-units.sh
+++ b/config/hypr/scripts/Toggle-weather-waybar-units.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Toggle waybar-weather units between metric and imperial
CONFIG_FILE="$HOME/.config/waybar-weather/config.toml"
diff --git a/config/hypr/scripts/TouchPad.sh b/config/hypr/scripts/TouchPad.sh
index 56506382..1042a652 100755
--- a/config/hypr/scripts/TouchPad.sh
+++ b/config/hypr/scripts/TouchPad.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For disabling touchpad.
# Edit the Touchpad_Device on ~/.config/hypr/UserConfigs/Laptops.conf according to your system
# use hyprctl devices to get your system touchpad device name
diff --git a/config/hypr/scripts/UptimeNixOS.sh b/config/hypr/scripts/UptimeNixOS.sh
index 654ae2c8..5c3085b1 100755
--- a/config/hypr/scripts/UptimeNixOS.sh
+++ b/config/hypr/scripts/UptimeNixOS.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script parses /proc/uptime to get the system uptime
# and prints it in a human-readable format
# This is a workaround for system where `uptime` command is taken from coreutils
diff --git a/config/hypr/scripts/UserConfigsSwitcher.sh b/config/hypr/scripts/UserConfigsSwitcher.sh
index ac44b4bc..7d9968a6 100755
--- a/config/hypr/scripts/UserConfigsSwitcher.sh
+++ b/config/hypr/scripts/UserConfigsSwitcher.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script to manage UserConfigs and UserConfigsBak
HYPR_CONFIG_DIR="$HOME/.config/hypr"
diff --git a/config/hypr/scripts/Volume.sh b/config/hypr/scripts/Volume.sh
index 41e474d0..dec7837c 100755
--- a/config/hypr/scripts/Volume.sh
+++ b/config/hypr/scripts/Volume.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Scripts for volume controls for audio and mic
iDIR="$HOME/.config/swaync/icons"
diff --git a/config/hypr/scripts/WallpaperCmd.sh b/config/hypr/scripts/WallpaperCmd.sh
new file mode 100755
index 00000000..0191ee14
--- /dev/null
+++ b/config/hypr/scripts/WallpaperCmd.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Wallpaper command selector (awww preferred, swww fallback)
+
+if command -v awww >/dev/null 2>&1; then
+ WWW_CMD="awww"
+ WWW_DAEMON="awww-daemon"
+ WWW_CACHE_DIR="$HOME/.cache/awww"
+ WWW_DAEMON_ARGS=()
+ WWW_MIGRATION_MARKER="$WWW_CACHE_DIR/.cache_cleared"
+else
+ WWW_CMD="swww"
+ WWW_DAEMON="swww-daemon"
+ WWW_CACHE_DIR="$HOME/.cache/swww"
+ WWW_DAEMON_ARGS=(--format xrgb)
+fi
+# One-time cache clear when migrating from swww to awww
+if [ "$WWW_CMD" = "awww" ]; then
+ mkdir -p "$WWW_CACHE_DIR"
+ if [ ! -f "$WWW_MIGRATION_MARKER" ]; then
+ awww clear-cache >/dev/null 2>&1 || true
+ touch "$WWW_MIGRATION_MARKER"
+ fi
+fi
+
+export WWW_CMD WWW_DAEMON WWW_CACHE_DIR WWW_DAEMON_ARGS WWW_MIGRATION_MARKER
diff --git a/config/hypr/scripts/WallpaperDaemon.sh b/config/hypr/scripts/WallpaperDaemon.sh
new file mode 100755
index 00000000..fc7f71c0
--- /dev/null
+++ b/config/hypr/scripts/WallpaperDaemon.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Start wallpaper daemon, preferring awww with swww fallback
+
+SCRIPTSDIR="$HOME/.config/hypr/scripts"
+# shellcheck source=/dev/null
+. "$SCRIPTSDIR/WallpaperCmd.sh"
+
+if command -v "$WWW_DAEMON" >/dev/null 2>&1 && command -v "$WWW_CMD" >/dev/null 2>&1; then
+ "$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" &
+fi
+
+# Give the daemon a moment to become ready
+for _ in {1..20}; do
+ "$WWW_CMD" query >/dev/null 2>&1 && break
+ sleep 0.1
+done
+
+wallpaper_link="$HOME/.config/rofi/.current_wallpaper"
+wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
+wallpaper_path=""
+
+# Prefer the symlink target if it's valid
+if [ -L "$wallpaper_link" ]; then
+ resolved="$(readlink -f "$wallpaper_link")"
+ if [ -n "$resolved" ] && [ -f "$resolved" ]; then
+ wallpaper_path="$resolved"
+ fi
+fi
+
+# Fall back to link file or copied current wallpaper
+if [ -z "$wallpaper_path" ] && [ -f "$wallpaper_link" ]; then
+ wallpaper_path="$wallpaper_link"
+fi
+if [ -z "$wallpaper_path" ] && [ -f "$wallpaper_current" ]; then
+ wallpaper_path="$wallpaper_current"
+fi
+
+# Last resort: use cached swww/awww wallpaper paths
+if [ -z "$wallpaper_path" ]; then
+ for cache_dir in "$HOME/.cache/awww" "$HOME/.cache/swww"; do
+ [ -d "$cache_dir" ] || continue
+ for cache_file in "$cache_dir"/*; do
+ [ -f "$cache_file" ] || continue
+ candidate="$(awk 'NF && $0 !~ /^filter/ {print; exit}' "$cache_file")"
+ if [ -n "$candidate" ] && [ -f "$candidate" ]; then
+ wallpaper_path="$candidate"
+ break
+ fi
+ done
+ [ -n "$wallpaper_path" ] && break
+ done
+fi
+
+if [ -n "$wallpaper_path" ] && [ -f "$wallpaper_path" ]; then
+ if ! "$WWW_CMD" img "$wallpaper_path" >/dev/null 2>&1; then
+ # Retry once after a short delay
+ sleep 0.3
+ "$WWW_CMD" img "$wallpaper_path" >/dev/null 2>&1 &
+ fi
+fi
diff --git a/config/hypr/scripts/WallustSwww.sh b/config/hypr/scripts/WallustSwww.sh
index 1f0f50c7..9df3ed61 100755
--- a/config/hypr/scripts/WallustSwww.sh
+++ b/config/hypr/scripts/WallustSwww.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Wallust: derive colors from the current wallpaper and update templates
# Usage: WallustSwww.sh [absolute_path_to_wallpaper]
@@ -7,7 +12,15 @@ set -euo pipefail
# Inputs and paths
passed_path="${1:-}"
-cache_dir="$HOME/.cache/swww/"
+if command -v awww >/dev/null 2>&1; then
+ WWW="awww"
+ cache_dir="$HOME/.cache/awww/"
+ cache_dir_fallback="$HOME/.cache/swww/"
+else
+ WWW="swww"
+ cache_dir="$HOME/.cache/swww/"
+ cache_dir_fallback="$HOME/.cache/awww/"
+fi
rofi_link="$HOME/.config/rofi/.current_wallpaper"
wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
read_cached_wallpaper() {
@@ -19,7 +32,7 @@ read_cached_wallpaper() {
read_wallpaper_from_query() {
local monitor="$1"
- swww query | awk -v mon="$monitor" '
+ $WWW query | awk -v mon="$monitor" '
/^Monitor/ {
cur=$2
gsub(":", "", cur)
@@ -46,17 +59,21 @@ wallpaper_path=""
if [[ -n "$passed_path" && -f "$passed_path" ]]; then
wallpaper_path="$passed_path"
else
- # Try to read from swww cache for the focused monitor, with a short retry loop
+ # Try to read from awww/swww cache for the focused monitor, with a short retry loop
current_monitor="$(get_focused_monitor)"
cache_file="$cache_dir$current_monitor"
+ alt_cache_file="${cache_dir_fallback}${current_monitor}"
- # Wait briefly for swww to write its cache after an image change
+ # Wait briefly for awww/swww to write its cache after an image change
for i in {1..10}; do
- if [[ -f "$cache_file" ]]; then
+ if [[ -f "$cache_file" || -f "$alt_cache_file" ]]; then
break
fi
sleep 0.1
done
+ if [[ ! -f "$cache_file" && -f "$alt_cache_file" ]]; then
+ cache_file="$alt_cache_file"
+ fi
if [[ -f "$cache_file" ]]; then
# The first non-filter line is the original wallpaper path
@@ -111,9 +128,28 @@ wallust run -s "$wallpaper_path" || true
wallust_targets=(
"$HOME/.config/waybar/wallust/colors-waybar.css"
"$HOME/.config/rofi/wallust/colors-rofi.rasi"
+ "$HOME/.config/hypr/wallust/wallust-hyprland.conf"
)
wait_for_templates "$start_ts" "${wallust_targets[@]}" || true
+# Normalize Rofi selection colors to a brighter accent and readable foreground
+rofi_colors="$HOME/.config/rofi/wallust/colors-rofi.rasi"
+if [ -f "$rofi_colors" ]; then
+ accent_hex=$(sed -n 's/^\s*color13:\s*\(#[0-9A-Fa-f]\{6\}\).*/\1/p' "$rofi_colors" | head -n1)
+ [ -z "$accent_hex" ] && accent_hex=$(sed -n 's/^\s*color12:\s*\(#[0-9A-Fa-f]\{6\}\).*/\1/p' "$rofi_colors" | head -n1)
+ fg_hex=$(sed -n 's/^\s*foreground:\s*\(#[0-9A-Fa-f]\{6\}\).*/\1/p' "$rofi_colors" | head -n1)
+ if [ -n "$accent_hex" ]; then
+ sed -i -E "s|^(\s*selected-normal-background:\s*).*$|\1$accent_hex;|" "$rofi_colors"
+ sed -i -E "s|^(\s*selected-active-background:\s*).*$|\1$accent_hex;|" "$rofi_colors"
+ sed -i -E "s|^(\s*selected-urgent-background:\s*).*$|\1$accent_hex;|" "$rofi_colors"
+ fi
+ if [ -n "$fg_hex" ]; then
+ sed -i -E "s|^(\s*selected-normal-foreground:\s*).*$|\1$fg_hex;|" "$rofi_colors"
+ sed -i -E "s|^(\s*selected-active-foreground:\s*).*$|\1$fg_hex;|" "$rofi_colors"
+ sed -i -E "s|^(\s*selected-urgent-foreground:\s*).*$|\1$fg_hex;|" "$rofi_colors"
+ fi
+fi
+
# Run kitty-only wallust config to keep terminal palette separate
run_wallust_with_config() {
local cfg="$1"
@@ -125,43 +161,42 @@ run_wallust_with_config() {
}
kitty_cfg="$HOME/.config/wallust/wallust-kitty.toml"
-if [ -f "$kitty_cfg" ]; then
- kitty_ts=$(date +%s)
- run_wallust_with_config "$kitty_cfg"
- wait_for_templates "$kitty_ts" "$HOME/.config/kitty/kitty-themes/01-Wallust.conf" || true
-fi
-
-# Reload kitty colors when wallpaper-based theme is active
-kitty_wallust_theme="$HOME/.config/kitty/kitty-themes/01-Wallust.conf"
-if [ -s "$kitty_wallust_theme" ]; then
- if command -v kitty >/dev/null 2>&1; then
- kitty @ load-config >/dev/null 2>&1 || true
- kitty @ set-colors --all --configured "$kitty_wallust_theme" >/dev/null 2>&1 || true
+(
+ if [ -f "$kitty_cfg" ]; then
+ kitty_ts=$(date +%s)
+ run_wallust_with_config "$kitty_cfg"
+ wait_for_templates "$kitty_ts" "$HOME/.config/kitty/kitty-themes/01-Wallust.conf" || true
fi
- if pidof kitty >/dev/null 2>&1; then
- for pid in $(pidof kitty); do
- kill -SIGUSR1 "$pid" 2>/dev/null || true
- done
- fi
-fi
-# Normalize Ghostty palette syntax in case ':' was used by older files
-if [ -f "$HOME/.config/ghostty/wallust.conf" ]; then
- sed -i -E 's/^(\s*palette\s*=\s*)([0-9]{1,2}):/\1\2=/' "$HOME/.config/ghostty/wallust.conf" 2>/dev/null || true
-fi
+ # Reload kitty colors when wallpaper-based theme is active
+ kitty_wallust_theme="$HOME/.config/kitty/kitty-themes/01-Wallust.conf"
+ if [ -s "$kitty_wallust_theme" ]; then
+ if command -v kitty >/dev/null 2>&1; then
+ kitty @ load-config >/dev/null 2>&1 || true
+ kitty @ set-colors --all --configured "$kitty_wallust_theme" >/dev/null 2>&1 || true
+ fi
+ if pidof kitty >/dev/null 2>&1; then
+ for pid in $(pidof kitty); do
+ kill -SIGUSR1 "$pid" 2>/dev/null || true
+ done
+ fi
+ fi
-# Light wait for Ghostty colors file to be present then signal Ghostty to reload (SIGUSR2)
-for _ in 1 2 3; do
- [ -s "$HOME/.config/ghostty/wallust.conf" ] && break
- sleep 0.1
-done
-if pidof ghostty >/dev/null; then
- for pid in $(pidof ghostty); do kill -SIGUSR2 "$pid" 2>/dev/null || true; done
-fi
+ # Normalize Ghostty palette syntax in case ':' was used by older files
+ if [ -f "$HOME/.config/ghostty/wallust.conf" ]; then
+ sed -i -E 's/^(\s*palette\s*=\s*)([0-9]{1,2}):/\1\2=/' "$HOME/.config/ghostty/wallust.conf" 2>/dev/null || true
+ fi
-# Prompt Waybar to reload colors
-if command -v waybar-msg >/dev/null 2>&1; then
- waybar-msg cmd reload >/dev/null 2>&1 || true
-elif pidof waybar >/dev/null; then
- killall -SIGUSR2 waybar 2>/dev/null || true
-fi
+ # Light wait for Ghostty colors file to be present then signal Ghostty to reload (SIGUSR2)
+ for _ in 1 2 3; do
+ [ -s "$HOME/.config/ghostty/wallust.conf" ] && break
+ sleep 0.1
+ done
+ if pidof ghostty >/dev/null; then
+ for pid in $(pidof ghostty); do kill -SIGUSR2 "$pid" 2>/dev/null || true; done
+ fi
+ # Reload Hyprland so new border colors from wallust-hyprland.conf take effect
+ if command -v hyprctl >/dev/null 2>&1; then
+ hyprctl reload >/dev/null 2>&1 || true
+ fi
+) >/dev/null 2>&1 &
diff --git a/config/hypr/scripts/WaybarCava.sh b/config/hypr/scripts/WaybarCava.sh
index 98db60dd..2295f0ab 100755
--- a/config/hypr/scripts/WaybarCava.sh
+++ b/config/hypr/scripts/WaybarCava.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# WaybarCava.sh — safer single-instance handling, cleanup, and robustness
# Original concept by LinuxBeginnings; this variant focuses on lifecycle hardening.
diff --git a/config/hypr/scripts/WaybarLayout.sh b/config/hypr/scripts/WaybarLayout.sh
index 247ccf78..66d45a07 100755
--- a/config/hypr/scripts/WaybarLayout.sh
+++ b/config/hypr/scripts/WaybarLayout.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for waybar layout or configs
IFS=$'\n\t'
diff --git a/config/hypr/scripts/WaybarScripts.sh b/config/hypr/scripts/WaybarScripts.sh
index 142b548d..afb55712 100755
--- a/config/hypr/scripts/WaybarScripts.sh
+++ b/config/hypr/scripts/WaybarScripts.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This file used on waybar modules sourcing defaults set in $HOME/.config/hypr/UserConfigs/01-UserDefaults.conf
# Define the path to the config file
diff --git a/config/hypr/scripts/WaybarStyles.sh b/config/hypr/scripts/WaybarStyles.sh
index 2ed8bf26..611e0a12 100755
--- a/config/hypr/scripts/WaybarStyles.sh
+++ b/config/hypr/scripts/WaybarStyles.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for waybar styles
IFS=$'\n\t'
diff --git a/config/hypr/scripts/Wlogout.sh b/config/hypr/scripts/Wlogout.sh
index e33222cc..973c5704 100755
--- a/config/hypr/scripts/Wlogout.sh
+++ b/config/hypr/scripts/Wlogout.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# wlogout (Power, Screen Lock, Suspend, etc)
# Set variables for parameters. First numbers corresponts to Monitor Resolution
diff --git a/config/hypr/scripts/build-awww.sh b/config/hypr/scripts/build-awww.sh
new file mode 100755
index 00000000..c59c34c0
--- /dev/null
+++ b/config/hypr/scripts/build-awww.sh
@@ -0,0 +1,209 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+RED="\033[0;31m"
+GREEN="\033[0;32m"
+YELLOW="\033[1;33m"
+BLUE="\033[0;34m"
+NC="\033[0m"
+
+ICON_OK="✅"
+ICON_WARN="âš ī¸"
+ICON_ERR="❌"
+ICON_INFO="â„šī¸"
+
+fail() {
+ printf "${RED}${ICON_ERR} %s${NC}\n" "$1" >&2
+ exit 1
+}
+
+info() {
+ printf "${BLUE}${ICON_INFO} %s${NC}\n" "$1"
+}
+
+warn() {
+ printf "${YELLOW}${ICON_WARN} %s${NC}\n" "$1"
+}
+
+ok() {
+ printf "${GREEN}${ICON_OK} %s${NC}\n" "$1"
+}
+
+trap 'fail "Script failed at line $LINENO."' ERR
+
+if [[ ! -t 0 ]]; then
+ fail "This script requires an interactive terminal. Run it directly in a terminal (e.g. ./build-awww.sh)."
+fi
+
+info "Starting awww installer..."
+
+if command -v awww >/dev/null 2>&1; then
+ ok "awww is already installed. Nothing to do."
+ exit 0
+fi
+
+if ! command -v git >/dev/null 2>&1; then
+ fail "git is required but not installed."
+fi
+
+detect_distro() {
+ if [[ -r /etc/os-release ]]; then
+ # shellcheck disable=SC1091
+ . /etc/os-release
+ echo "${ID:-}"
+ return
+ fi
+ echo ""
+}
+
+prompt_confirm_distro() {
+ local detected="$1"
+ local choice=""
+ if [[ -n "$detected" ]]; then
+ printf "${BLUE}${ICON_INFO} Detected distro: %s${NC}\n" "$detected" >/dev/tty
+ printf "Confirm? (Y/y to confirm, N/n to choose, Q/q to quit): " >/dev/tty
+ read -r choice </dev/tty
+ case "$choice" in
+ [Yy]) echo "$detected"; return ;;
+ [Qq]) exit 0 ;;
+ [Nn]) ;;
+ *) warn "Invalid choice, continuing to manual selection." ;;
+ esac
+ fi
+ echo "Supported distros:"
+ echo " 1) debian"
+ echo " 2) ubuntu"
+ echo " 3) arch"
+ echo " 4) opensuse"
+ echo " 5) fedora"
+ echo " 6) gentoo"
+ printf "Select your distro (1-6) or Q/q to quit: " >/dev/tty
+ read -r choice </dev/tty
+ read -r choice
+ case "$choice" in
+ 1) echo "debian" ;;
+ 2) echo "ubuntu" ;;
+ 3) echo "arch" ;;
+ 4) echo "opensuse" ;;
+ 5) echo "fedora" ;;
+ 6) echo "gentoo" ;;
+ [Qq]) exit 0 ;;
+ *) fail "Invalid selection." ;;
+ esac
+}
+
+distro="$(prompt_confirm_distro "$(detect_distro)")"
+
+install_deps_debian_ubuntu() {
+ local missing=()
+ for pkg in pkg-config liblz4-dev; do
+ dpkg -s "$pkg" >/dev/null 2>&1 || missing+=("$pkg")
+ done
+ if (( ${#missing[@]} )); then
+ info "Installing deps: ${missing[*]}"
+ sudo apt update
+ sudo apt install -y "${missing[@]}"
+ else
+ ok "All required deps already installed."
+ fi
+}
+
+install_deps_fedora() {
+ local missing=()
+ for pkg in wayland-protocols lz4-devel wayland-devel; do
+ rpm -q "$pkg" >/dev/null 2>&1 || missing+=("$pkg")
+ done
+ if (( ${#missing[@]} )); then
+ info "Installing deps: ${missing[*]}"
+ sudo dnf install -y "${missing[@]}"
+ else
+ ok "All required deps already installed."
+ fi
+}
+
+install_deps_opensuse() {
+ local missing=()
+ for pkg in pkg-config liblz4-devel; do
+ rpm -q "$pkg" >/dev/null 2>&1 || missing+=("$pkg")
+ done
+ if (( ${#missing[@]} )); then
+ info "Installing deps: ${missing[*]}"
+ sudo zypper install -y "${missing[@]}"
+ else
+ ok "All required deps already installed."
+ fi
+}
+
+install_deps_arch() {
+ local missing=()
+ for pkg in pkgconf lz4 wayland-protocols; do
+ pacman -Qi "$pkg" >/dev/null 2>&1 || missing+=("$pkg")
+ done
+ if (( ${#missing[@]} )); then
+ info "Installing deps: ${missing[*]}"
+ sudo pacman -S --needed --noconfirm "${missing[@]}"
+ else
+ ok "All required deps already installed."
+ fi
+}
+
+ensure_cargo() {
+ if command -v cargo >/dev/null 2>&1; then
+ ok "cargo is available."
+ return
+ fi
+ case "$distro" in
+ debian|ubuntu|fedora|opensuse)
+ info "Installing Rust toolchain via rustup..."
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
+ # shellcheck disable=SC1091
+ source "$HOME/.cargo/env"
+ ;;
+ arch)
+ info "Installing Rust toolchain..."
+ sudo pacman -S --needed --noconfirm rust
+ ;;
+ gentoo)
+ ;;
+ *)
+ fail "Unknown distro for cargo install."
+ ;;
+ esac
+ command -v cargo >/dev/null 2>&1 || fail "cargo is still not available."
+}
+
+case "$distro" in
+ debian) install_deps_debian_ubuntu ;;
+ ubuntu) install_deps_debian_ubuntu ;;
+ fedora) install_deps_fedora ;;
+ opensuse) install_deps_opensuse ;;
+ arch) install_deps_arch ;;
+ gentoo)
+ info "Installing awww via Portage..."
+ sudo emerge gui-apps/awww
+ ok "awww installed successfully."
+ exit 0
+ ;;
+ *) fail "Unsupported distro: $distro" ;;
+esac
+
+ensure_cargo
+
+info "Cloning or updating awww..."
+cd "$HOME"
+if [[ -d awww/.git ]]; then
+ git -C awww pull --rebase
+else
+ git clone https://codeberg.org/LGFae/awww.git
+fi
+
+cd "$HOME/awww"
+info "Building awww..."
+cargo build --release
+
+info "Installing binaries..."
+sudo install -vDm755 target/release/awww -t /usr/bin/
+sudo install -vDm755 target/release/awww-daemon -t /usr/bin/
+sudo install -vDm644 completions/_awww -t /usr/share/zsh/site-functions/
+
+ok "awww installed successfully."
diff --git a/config/hypr/scripts/disable.cpu.turbo.sh b/config/hypr/scripts/disable.cpu.turbo.sh
new file mode 100755
index 00000000..dafee76b
--- /dev/null
+++ b/config/hypr/scripts/disable.cpu.turbo.sh
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+require_root() {
+ if [[ ${EUID} -ne 0 ]]; then
+ exec sudo -- "$0" "$@"
+ fi
+}
+
+write_sysfs() {
+ local path="$1"
+ local value="$2"
+ if [[ -w "$path" ]]; then
+ printf '%s' "$value" >"$path"
+ return 0
+ fi
+ return 1
+}
+
+require_root "$@"
+
+changed=0
+
+# Intel P-State turbo control
+if [[ -e /sys/devices/system/cpu/intel_pstate/no_turbo ]]; then
+ if write_sysfs /sys/devices/system/cpu/intel_pstate/no_turbo 1; then
+ changed=1
+ fi
+fi
+
+# Generic cpufreq boost control (AMD/Intel)
+if [[ -e /sys/devices/system/cpu/cpufreq/boost ]]; then
+ if write_sysfs /sys/devices/system/cpu/cpufreq/boost 0; then
+ changed=1
+ fi
+fi
+
+# Prefer a quieter governor if available
+for gov in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
+ if [[ -w "$gov" ]]; then
+ current=$(cat "$gov")
+ if [[ "$current" != "powersave" ]] && grep -q powersave "${gov%/*}/scaling_available_governors"; then
+ printf '%s' powersave >"$gov"
+ changed=1
+ fi
+ fi
+done
+
+# Lower energy/performance preference if supported
+for epp in /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference; do
+ if [[ -w "$epp" ]]; then
+ printf '%s' power >"$epp" 2>/dev/null || true
+ changed=1
+ fi
+done
+
+if [[ $changed -eq 1 ]]; then
+ echo "CPU turbo/boost disabled and power-saving preferences applied."
+ exit 0
+fi
+
+echo "No writable turbo/boost controls found. Check kernel driver support."
+exit 1
diff --git a/config/hypr/scripts/fastfetch-wrapper.sh b/config/hypr/scripts/fastfetch-wrapper.sh
new file mode 100755
index 00000000..ad5f7873
--- /dev/null
+++ b/config/hypr/scripts/fastfetch-wrapper.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+# 1. Get the specific ID and the "ID_LIKE" family
+source /etc/os-release
+SPECIFIC_ID=$ID
+FAMILY_ID=$ID_LIKE
+
+# 2. Define your asset directory
+ASSET_DIR="$HOME/.config/fastfetch/images"
+
+# 3. Selection Logic
+if [ -f "$ASSET_DIR/$SPECIFIC_ID.png" ]; then
+ # Use exact match if available (e.g., soplos.png)
+ SELECTED_LOGO="$ASSET_DIR/$SPECIFIC_ID.png"
+elif [ -n "$FAMILY_ID" ] && [ -f "$ASSET_DIR/${FAMILY_ID%% *}.png" ]; then
+ # Fallback to family (e.g., debian.png) - takes the first word of ID_LIKE
+ SELECTED_LOGO="$ASSET_DIR/${FAMILY_ID%% *}.png"
+else
+ # Let fastfetch handle it natively if no custom image found
+ fastfetch
+ exit 0
+fi
+
+fastfetch --kitty "$SELECTED_LOGO"
diff --git a/config/hypr/scripts/hyprshot.sh b/config/hypr/scripts/hyprshot.sh
index 0fb976fa..0e97d15b 100755
--- a/config/hypr/scripts/hyprshot.sh
+++ b/config/hypr/scripts/hyprshot.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -e
function Help() {
diff --git a/config/hypr/scripts/install-uv.sh b/config/hypr/scripts/install-uv.sh
index 3582a78e..da4b2d86 100755
--- a/config/hypr/scripts/install-uv.sh
+++ b/config/hypr/scripts/install-uv.sh
@@ -1,2 +1,8 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
curl -LsSf https://astral.sh/uv/install.sh | sh
diff --git a/config/hypr/scripts/keybinds_parser.py b/config/hypr/scripts/keybinds_parser.py
index d12e3854..5b75d81c 100755
--- a/config/hypr/scripts/keybinds_parser.py
+++ b/config/hypr/scripts/keybinds_parser.py
@@ -1,4 +1,10 @@
#!/usr/bin/env python3
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
import sys
import re
import os
diff --git a/config/hypr/scripts/rofi-emacs-keybinds b/config/hypr/scripts/rofi-emacs-keybinds
new file mode 100755
index 00000000..bee1a54d
--- /dev/null
+++ b/config/hypr/scripts/rofi-emacs-keybinds
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+set -u
+set -o pipefail
+
+ROFI_CONFIG="${HOME}/.config/rofi/config-emacs-keybinds.rasi"
+CACHE_FILE="${HOME}/.cache/rofi-emacs-keybinds.txt"
+
+if [[ ! -s "${CACHE_FILE}" ]]; then
+ notify-send "Rofi Emacs Keybinds" "Keybind cache missing. In Emacs, run: M-x rofi-emacs-keybinds-refresh"
+ exit 1
+fi
+
+rofi -dmenu -i -p "Emacs Keybinds" -config "${ROFI_CONFIG}" < "${CACHE_FILE}"
diff --git a/config/hypr/scripts/rofi-ssh-menu.sh b/config/hypr/scripts/rofi-ssh-menu.sh
new file mode 100755
index 00000000..d1640c66
--- /dev/null
+++ b/config/hypr/scripts/rofi-ssh-menu.sh
@@ -0,0 +1,117 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Rofi SSH menu - list SSH hosts from ~/.ssh/config and connect.
+
+set -euo pipefail
+
+SSH_CONFIG="${HOME}/.ssh/config"
+ROFI_CONFIG="${HOME}/.config/rofi/config.rasi"
+MSG='Select a host to connect via SSH'
+
+notify() {
+ if command -v notify-send >/dev/null 2>&1; then
+ notify-send -u low "Rofi SSH" "$1"
+ else
+ printf '%s\n' "$1" >&2
+ fi
+}
+
+if [[ ! -f "${SSH_CONFIG}" ]]; then
+ notify "SSH config not found: ${SSH_CONFIG}"
+ exit 1
+fi
+
+# Build list: host|user|hostname
+host_entries="$(
+ awk '
+ function is_wildcard(h) { return (h ~ /[*?]/ || h ~ /^!/); }
+ function remember_hosts(list, i, n, h) {
+ delete current
+ n = split(list, parts, /[ \t]+/)
+ for (i = 1; i <= n; i++) {
+ h = parts[i]
+ if (h == "") continue
+ if (is_wildcard(h)) continue
+ current[h] = 1
+ if (!(h in seen)) {
+ seen[h] = 1
+ order[++count] = h
+ }
+ }
+ }
+ {
+ sub(/[ \t]*#.*/, "", $0)
+ if ($0 ~ /^[ \t]*$/) next
+ if ($1 == "Host") {
+ $1 = ""
+ sub(/^[ \t]+/, "", $0)
+ remember_hosts($0)
+ next
+ }
+ if ($1 == "HostName") {
+ for (h in current) hostname[h] = $2
+ next
+ }
+ if ($1 == "User") {
+ for (h in current) user[h] = $2
+ next
+ }
+ }
+ END {
+ for (i = 1; i <= count; i++) {
+ h = order[i]
+ print h "|" (h in user ? user[h] : "") "|" (h in hostname ? hostname[h] : "")
+ }
+ }
+ ' "${SSH_CONFIG}"
+)"
+
+if [[ -z "${host_entries}" ]]; then
+ notify "No SSH hosts found in ${SSH_CONFIG}"
+ exit 1
+fi
+
+menu_entries="$(
+ while IFS='|' read -r host user hostname; do
+ [[ -n "${host}" ]] || continue
+ [[ -n "${user}" ]] || user="${USER}"
+ [[ -n "${hostname}" ]] || hostname="${host}"
+ printf '%s | %s@%s\n' "${host}" "${user}" "${hostname}"
+ done <<< "${host_entries}"
+)"
+
+# Close any existing rofi before launching
+if pgrep -x "rofi" >/dev/null 2>&1; then
+ pkill rofi
+fi
+
+selection="$(printf '%s\n' "${menu_entries}" | rofi -dmenu -i -p "SSH" -mesg "${MSG}" -config "${ROFI_CONFIG}")"
+
+if [[ -z "${selection}" ]]; then
+ exit 0
+fi
+
+selected_host="${selection%% | *}"
+if [[ -z "${selected_host}" ]]; then
+ exit 0
+fi
+
+if command -v kitty >/dev/null 2>&1; then
+ exec kitty --title "SSH ${selected_host}" sh -lc "ssh ${selected_host}"
+fi
+
+if command -v ghostty >/dev/null 2>&1; then
+ exec ghostty -e sh -lc "ssh ${selected_host}"
+fi
+
+if command -v alacritty >/dev/null 2>&1; then
+ exec alacritty -e sh -lc "ssh ${selected_host}"
+fi
+
+notify "No supported terminal found (kitty, ghostty, alacritty). Unable to start SSH session."
+exit 1
diff --git a/config/hypr/scripts/sddm_wallpaper.sh b/config/hypr/scripts/sddm_wallpaper.sh
index 26f6c613..deee938c 100755
--- a/config/hypr/scripts/sddm_wallpaper.sh
+++ b/config/hypr/scripts/sddm_wallpaper.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- đŸ’Ģ https://github.com/LinuxBeginnings đŸ’Ģ ---- */
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# SDDM Wallpaper and Wallust Colors Setter
# for the upcoming changes on the simple_sddm_theme
diff --git a/config/hypr/scripts/set-default-thunar-terminal.sh b/config/hypr/scripts/set-default-thunar-terminal.sh
new file mode 100755
index 00000000..fd50eb6c
--- /dev/null
+++ b/config/hypr/scripts/set-default-thunar-terminal.sh
@@ -0,0 +1,148 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+#
+setup_default_terminal() {
+ echo "Setting kitty as the default terminal for Thunar and CLI apps..."
+
+ # 1. Configure XFCE/Exo (Thunar's primary helper)
+ # This handles "Open Terminal Here" and "Open with [CLI App]"
+ HELPER_DIR="$HOME/.config/xfce4"
+ mkdir -p "$HELPER_DIR"
+ KITTY_PATH="$(command -v kitty 2>/dev/null || true)"
+ if [ -z "$KITTY_PATH" ]; then
+ echo "Warning: kitty not found in PATH. Thunar may report no terminal available."
+ fi
+ # Prefer exo-preferred-applications when available (XFCE/Thunar)
+ if command -v exo-preferred-applications >/dev/null 2>&1; then
+ exo-preferred-applications --set TerminalEmulator kitty >/dev/null 2>&1 || true
+ fi
+
+ # Ensure helpers.rc exists and has a [Default] section
+ if [ ! -f "$HELPER_DIR/helpers.rc" ]; then
+ printf "[Default]\n" >"$HELPER_DIR/helpers.rc"
+ elif ! grep -q '^\[Default\]$' "$HELPER_DIR/helpers.rc"; then
+ printf "[Default]\n%s" "$(cat "$HELPER_DIR/helpers.rc")" >"$HELPER_DIR/helpers.rc"
+ fi
+
+ # Update TerminalEmulator entry in [Default] section
+ if grep -q '^TerminalEmulator=' "$HELPER_DIR/helpers.rc"; then
+ sed -i 's|^TerminalEmulator=.*|TerminalEmulator=kitty|' "$HELPER_DIR/helpers.rc"
+ else
+ sed -i '/^\[Default\]$/a TerminalEmulator=kitty' "$HELPER_DIR/helpers.rc"
+ fi
+ # Set a full path if available (GUI PATH can differ)
+ if [ -n "$KITTY_PATH" ]; then
+ if grep -q '^TerminalEmulatorPath=' "$HELPER_DIR/helpers.rc"; then
+ sed -i "s|^TerminalEmulatorPath=.*|TerminalEmulatorPath=$KITTY_PATH|" "$HELPER_DIR/helpers.rc"
+ else
+ sed -i "/^\[Default\]$/a TerminalEmulatorPath=$KITTY_PATH" "$HELPER_DIR/helpers.rc"
+ fi
+ fi
+
+ # 2. Create a User-Level "xterm" Shim
+ # Many older .desktop files and scripts have 'xterm' hardcoded.
+ # By placing this in ~/.local/bin, we intercept those calls.
+ BIN_DIR="$HOME/.local/bin"
+ mkdir -p "$BIN_DIR"
+ if ! printf "%s" "$PATH" | tr ':' '\n' | grep -qx "$BIN_DIR"; then
+ echo "Warning: $BIN_DIR is not in PATH for this session. GUI apps may still use /usr/bin/xterm."
+ fi
+
+ cat <<EOF >"$BIN_DIR/xterm"
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+#
+# Shim to redirect xterm calls to kitty
+# Resolves Open with (vim/neovim/etc) opening in xterm
+args=()
+pass_through=()
+while [ \$# -gt 0 ]; do
+ case "\$1" in
+ -e)
+ shift
+ if [ \$# -gt 0 ]; then
+ pass_through+=("\$@")
+ fi
+ break
+ ;;
+ -T|-title|-geometry|-bg|-fg|-fs|-fa|-fn)
+ # Skip common xterm-only flags and their values
+ shift
+ [ \$# -gt 0 ] && shift
+ ;;
+ -class|-name)
+ shift
+ [ \$# -gt 0 ] && shift
+ ;;
+ -hold|-ls|-sb|-sk|-sr|-s)
+ # Ignore boolean flags that kitty doesn't understand
+ shift
+ ;;
+ *)
+ args+=("\$1")
+ shift
+ ;;
+ esac
+done
+
+if [ \${#pass_through[@]} -gt 0 ]; then
+ exec kitty "\${args[@]}" -- "\${pass_through[@]}"
+else
+ exec kitty "\${args[@]}"
+fi
+EOF
+ chmod +x "$BIN_DIR/xterm"
+
+ # 3. Update GLib/GIO Default Terminal (for GNOME-based backends)
+ # Some distros use gsettings to define the terminal schema.
+ if command -v gsettings >/dev/null 2>&1; then
+ gsettings set org.gnome.desktop.default-applications.terminal exec 'kitty' 2>/dev/null || true
+ fi
+
+ # 4. Refresh Mime Database
+ # Ensures Thunar sees the changes to terminal handling immediately.
+ if command -v update-desktop-database >/dev/null 2>&1; then
+ update-desktop-database ~/.local/share/applications 2>/dev/null || true
+ fi
+
+ # 5. Hide Kitty URL Handler from "Open With"
+ # Prevents Kitty URL handler from showing up for text files.
+ USER_APP_DIR="$HOME/.local/share/applications"
+ mkdir -p "$USER_APP_DIR"
+ KITTY_URL_HANDLER=""
+ for dir in $XDG_DATA_DIRS /usr/local/share /usr/share; do
+ [ -z "$dir" ] && continue
+ if [ -f "$dir/applications/kitty-url-handler.desktop" ]; then
+ KITTY_URL_HANDLER="$dir/applications/kitty-url-handler.desktop"
+ break
+ fi
+ done
+
+ if [ -n "$KITTY_URL_HANDLER" ]; then
+ cp "$KITTY_URL_HANDLER" "$USER_APP_DIR/kitty-url-handler.desktop"
+ if grep -q '^NoDisplay=' "$USER_APP_DIR/kitty-url-handler.desktop"; then
+ sed -i 's|^NoDisplay=.*|NoDisplay=true|' "$USER_APP_DIR/kitty-url-handler.desktop"
+ else
+ printf "\nNoDisplay=true\n" >>"$USER_APP_DIR/kitty-url-handler.desktop"
+ fi
+ if grep -q '^Hidden=' "$USER_APP_DIR/kitty-url-handler.desktop"; then
+ sed -i 's|^Hidden=.*|Hidden=true|' "$USER_APP_DIR/kitty-url-handler.desktop"
+ else
+ printf "Hidden=true\n" >>"$USER_APP_DIR/kitty-url-handler.desktop"
+ fi
+ fi
+
+ echo "Default terminal set to kitty successfully."
+}
+
+setup_default_terminal
diff --git a/config/hypr/scripts/update_WindowRules.sh b/config/hypr/scripts/update_WindowRules.sh
index 8b4262ba..c8d236c4 100755
--- a/config/hypr/scripts/update_WindowRules.sh
+++ b/config/hypr/scripts/update_WindowRules.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script to update WindowRules config if Hyprland version is >= 0.53
CONFIGS_DIR="$HOME/.config/hypr/configs"
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage