aboutsummaryrefslogtreecommitdiffstats
path: root/config/hypr/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'config/hypr/scripts')
-rwxr-xr-xconfig/hypr/scripts/ChangeLayout.sh10
-rwxr-xr-xconfig/hypr/scripts/GameMode.sh1
-rwxr-xr-xconfig/hypr/scripts/Hyprsunset.sh22
-rwxr-xr-xconfig/hypr/scripts/KeyBinds.sh95
-rwxr-xr-xconfig/hypr/scripts/KeybindsLayoutInit.sh40
-rwxr-xr-xconfig/hypr/scripts/Kool_Quick_Settings.sh57
-rwxr-xr-xconfig/hypr/scripts/OverviewToggle.sh14
-rwxr-xr-xconfig/hypr/scripts/Refresh.sh33
-rwxr-xr-xconfig/hypr/scripts/UserConfigsSwitcher.sh56
9 files changed, 230 insertions, 98 deletions
diff --git a/config/hypr/scripts/ChangeLayout.sh b/config/hypr/scripts/ChangeLayout.sh
index 78428188..e2436b79 100755
--- a/config/hypr/scripts/ChangeLayout.sh
+++ b/config/hypr/scripts/ChangeLayout.sh
@@ -9,20 +9,14 @@ LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g')
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
+ # SUPER+J/K are global and managed by KeybindsLayoutInit.sh; only manage SUPER+O here
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
+ # Drop togglesplit binding on SUPER+O when switching back to master
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"
;;
*) ;;
diff --git a/config/hypr/scripts/GameMode.sh b/config/hypr/scripts/GameMode.sh
index ec1e541e..59cf7372 100755
--- a/config/hypr/scripts/GameMode.sh
+++ b/config/hypr/scripts/GameMode.sh
@@ -20,6 +20,7 @@ if [ "$HYPRGAMEMODE" = 1 ] ; then
hyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$"
swww 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" &
diff --git a/config/hypr/scripts/Hyprsunset.sh b/config/hypr/scripts/Hyprsunset.sh
index c7c4b395..4a2b52f4 100755
--- a/config/hypr/scripts/Hyprsunset.sh
+++ b/config/hypr/scripts/Hyprsunset.sh
@@ -8,12 +8,12 @@ set -euo pipefail
# - On: sunset icon if available, otherwise a blue sun
#
# Customize via env vars:
-# HYPERSUNSET_TEMP default 4500 (K)
-# HYPERSUNSET_ICON_MODE sunset|blue (default: sunset)
+# HYPRSUNSET_TEMP default 4500 (K)
+# HYPRSUNSET_ICON_MODE sunset|blue (default: sunset)
STATE_FILE="$HOME/.cache/.hyprsunset_state"
-TARGET_TEMP="${HYPERSUNSET_TEMP:-4500}"
-ICON_MODE="${HYPERSUNSET_ICON_MODE:-sunset}"
+TARGET_TEMP="${HYPRSUNSET_TEMP:-4500}"
+ICON_MODE="${HYPRSUNSET_ICON_MODE:-sunset}"
ensure_state() {
[[ -f "$STATE_FILE" ]] || echo "off" > "$STATE_FILE"
@@ -92,8 +92,20 @@ cmd_status() {
printf '{"text":"%s","class":"%s","tooltip":"%s"}\n' "$txt" "$cls" "$tip"
}
+cmd_init() {
+ ensure_state
+ state="$(cat "$STATE_FILE" || echo off)"
+
+ if [[ "$state" == "on" ]]; then
+ if command -v hyprsunset >/dev/null 2>&1; then
+ nohup hyprsunset -t "$TARGET_TEMP" >/dev/null 2>&1 &
+ fi
+ fi
+}
+
case "${1:-}" in
toggle) cmd_toggle ;;
status) cmd_status ;;
- *) echo "usage: $0 [toggle|status]" >&2; exit 2 ;;
+ init) cmd_init ;;
+ *) echo "usage: $0 [toggle|status|init]" >&2; exit 2 ;;
esac
diff --git a/config/hypr/scripts/KeyBinds.sh b/config/hypr/scripts/KeyBinds.sh
index 46953cc5..4158b762 100755
--- a/config/hypr/scripts/KeyBinds.sh
+++ b/config/hypr/scripts/KeyBinds.sh
@@ -21,9 +21,87 @@ msg='☣️ NOTE ☣️: Clicking with Mouse or Pressing ENTER will have NO func
files=("$keybinds_conf" "$user_keybinds_conf")
[[ -f "$laptop_conf" ]] && files+=("$laptop_conf")
-raw_keybinds=$(cat "${files[@]}" 2>/dev/null \
- | grep -E '^[[:space:]]*bind' \
- | sed -E 's/[[:space:]]+#.*$//')
+# Parse binds/unbinds from files, detect overrides, and keep unique effective binds
+declare -A binding_map # combo -> bind line (effective)
+declare -A source_map # combo -> source file
+declare -A user_bind_map # combo -> user bind line
+declare -A unbound_user # combo -> 1 if explicitly unbound in user file
+declare -A seen_any_bind # combo -> 1 if any bind seen (for iteration)
+declare -A default_seen # combo -> 1 if default bind exists
+declare -a missing_unbind_suggestions_arr
+
+normalize_combo() { echo "$1" | sed -E 's/[[:space:]]//g'; }
+
+extract_combo() {
+ # arg: a bind/unbind line; returns "mods,key" via echo
+ local s="$1"
+ s="$(echo "$s" | sed -E 's/[[:space:]]+#.*$//')"
+ if [[ "$s" =~ = ]]; then
+ local rhs="${s#*=}"
+ local mods="$(echo "$rhs" | awk -F',' '{gsub(/^[ \t]+|[ \t]+$/,"",$1); print $1}')"
+ local key="$(echo "$rhs" | awk -F',' '{gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2}')"
+ echo "${mods},${key}"
+ fi
+}
+
+for file in "${files[@]}"; do
+ [[ ! -f "$file" ]] && continue
+ while IFS= read -r line; do
+ [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
+
+ if [[ "$line" =~ ^[[:space:]]*bind[a-z]*[[:space:]]*= ]]; then
+ combo_raw="$(extract_combo "$line")"
+ [[ -z "$combo_raw" ]] && continue
+ combo="$(normalize_combo "$combo_raw")"
+ seen_any_bind["$combo"]=1
+
+ if [[ "$file" != "$user_keybinds_conf" ]]; then
+ default_seen["$combo"]=1
+ fi
+
+ # prefer user bind, else first seen
+ if [[ -z "${source_map[$combo]}" ]]; then
+ binding_map["$combo"]="$line"
+ source_map["$combo"]="$file"
+ fi
+ if [[ "$file" == "$user_keybinds_conf" ]]; then
+ user_bind_map["$combo"]="$line"
+ binding_map["$combo"]="$line"
+ source_map["$combo"]="$file"
+ fi
+
+ elif [[ "$line" =~ ^[[:space:]]*unbind[[:space:]]*= ]]; then
+ combo_raw="$(extract_combo "$line")"
+ [[ -z "$combo_raw" ]] && continue
+ combo="$(normalize_combo "$combo_raw")"
+ if [[ "$file" == "$user_keybinds_conf" ]]; then
+ unbound_user["$combo"]=1
+ fi
+ fi
+ done < "$file"
+done
+
+# Build raw_keybinds for display and collect missing unbind suggestions
+raw_keybinds=""
+for combo in "${!seen_any_bind[@]}"; do
+ eff_line="${binding_map[$combo]}"
+ src="${source_map[$combo]}"
+ [[ -z "$eff_line" ]] && continue
+ raw_keybinds+="$eff_line"$'\n'
+
+ # If user overrides a default but didn't unbind in user file, suggest unbind
+ if [[ "$src" == "$user_keybinds_conf" && -n "${default_seen[$combo]}" && -z "${unbound_user[$combo]}" ]]; then
+ suggest="$(echo "$eff_line" | sed -E 's/^[[:space:]]*bind[a-z]*/unbind/')"
+ missing_unbind_suggestions_arr+=("$suggest")
+ fi
+done
+
+# If there are missing unbinds, write suggestions to a temp file and note in message
+if (( ${#missing_unbind_suggestions_arr[@]} > 0 )); then
+ suggestions_file="$(mktemp -t hypr-unbind-suggestions.XXXX.conf)"
+ printf '%s\n' "${missing_unbind_suggestions_arr[@]}" > "$suggestions_file"
+ msg="$msg | Overrides missing unbind: ${#missing_unbind_suggestions_arr[@]} (suggestions: $suggestions_file)"
+fi
# check for any keybinds to display
if [[ -z "$raw_keybinds" ]]; then
@@ -31,7 +109,7 @@ if [[ -z "$raw_keybinds" ]]; then
exit 1
fi
-# transform into a readable list: MODS+KEY — DESCRIPTION — DISPATCHER [PARAMS]
+# transform into a readable list: MODS+KEY — DESCRIPTION (for bindd) or DISPATCHER [PARAMS] (for bind)
display_keybinds=$(echo "$raw_keybinds" | awk -F'=' '
function trim(s){ gsub(/^[ \t]+|[ \t]+$/,"",s); return s }
/^[[:space:]]*bind/ {
@@ -60,13 +138,8 @@ display_keybinds=$(echo "$raw_keybinds" | awk -F'=' '
combo = (mods && key) ? mods "+" key : (key?key:mods);
- if (desc != "") {
- if (dispatcher != "" && params != "")
- print combo, " — ", desc, " — ", dispatcher, " ", params;
- else if (dispatcher != "")
- print combo, " — ", desc, " — ", dispatcher;
- else
- print combo, " — ", desc;
+ if (hasdesc && desc != "") {
+ print combo, " — ", desc;
} else {
if (dispatcher != "" && params != "")
print combo, " — ", dispatcher, " ", params;
diff --git a/config/hypr/scripts/KeybindsLayoutInit.sh b/config/hypr/scripts/KeybindsLayoutInit.sh
index fd34f90e..0a53eaaf 100755
--- a/config/hypr/scripts/KeybindsLayoutInit.sh
+++ b/config/hypr/scripts/KeybindsLayoutInit.sh
@@ -1,38 +1,14 @@
#!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
-# Initialize J/K keybinds to match the current default layout at startup
+# Initialize J/K keybinds so they always cycle windows globally (no layout-specific behavior)
+# This avoids double-actions when layouts change.
set -euo pipefail
-# Determine current layout (master|dwindle); be robust to null at startup
-LAYOUT=$(hyprctl -j getoption general:layout | jq -r '.str // empty' 2>/dev/null || true)
-if [ -z "${LAYOUT:-}" ]; then
- # Fallback: parse non-JSON output (e.g., "str: dwindle")
- LAYOUT=$(hyprctl getoption general:layout 2>/dev/null | awk -F'str:' 'NF>1 {gsub(/^ +| +$/,"",$2); print $2}')
-fi
-[ -z "${LAYOUT:-}" ] && exit 0
+# Always reset and bind SUPER+J/K the same way on startup
+hyprctl keyword unbind SUPER,J || true
+hyprctl keyword unbind SUPER,K || true
-case "$LAYOUT" in
- master)
- # Ensure master layout-style binds
- hyprctl keyword unbind SUPER,J
- hyprctl keyword unbind SUPER,K
- hyprctl keyword unbind SUPER,O
- hyprctl keyword bind SUPER,J,layoutmsg,cyclenext
- hyprctl keyword bind SUPER,K,layoutmsg,cycleprev
- ;;
- dwindle)
- # Ensure dwindle layout-style binds
- hyprctl keyword unbind SUPER,J
- hyprctl keyword unbind SUPER,K
- hyprctl keyword unbind SUPER,O
- hyprctl keyword bind SUPER,J,cyclenext
- hyprctl keyword bind SUPER,K,cyclenext,prev
- # ensure SUPER+O togglesplit is available on dwindle
- hyprctl keyword bind SUPER,O,togglesplit
- ;;
- *)
- # Do nothing for unexpected values
- :
- ;;
- esac
+# Cycle windows globally: J = next, K = previous
+hyprctl keyword bind SUPER,J,cyclenext
+hyprctl keyword bind SUPER,K,cyclenext,prev
diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh
index 16742492..8ab71ba2 100755
--- a/config/hypr/scripts/Kool_Quick_Settings.sh
+++ b/config/hypr/scripts/Kool_Quick_Settings.sh
@@ -1,6 +1,7 @@
#!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
# Rofi menu for KooL Hyprland Quick Settings (SUPER SHIFT E)
+# Updated for UserConfigs/configs separation
# Modify this config file for default terminal and EDITOR
config_file="$HOME/.config/hypr/UserConfigs/01-UserDefaults.conf"
@@ -19,19 +20,30 @@ iDIR="$HOME/.config/swaync/images"
scriptsDir="$HOME/.config/hypr/scripts"
UserScripts="$HOME/.config/hypr/UserScripts"
+# Function to show info notification
+show_info() {
+ notify-send -i "$iDIR/info.png" "Info" "$1"
+}
+
# Function to display the menu options without numbers
menu() {
cat <<EOF
-view/edit User Defaults
-view/edit ENV variables
-view/edit Window Rules
-view/edit User Keybinds
-view/edit User Settings
-view/edit Startup Apps
-view/edit Decorations
-view/edit Animations
-view/edit Laptop Keybinds
-view/edit Default Keybinds
+--- USER CUSTOMIZATIONS ---
+Edit User Defaults
+Edit User Keybinds
+Edit User ENV variables
+Edit User Startup Apps (overlay)
+Edit User Window Rules (overlay)
+Edit User Settings
+Edit User Decorations
+Edit User Animations
+Edit User Laptop Settings
+--- SYSTEM DEFAULTS ---
+Edit System Default Keybinds
+Edit System Default Startup Apps
+Edit System Default Window Rules
+Edit System Default Settings
+--- UTILITIES ---
Choose Kitty Terminal Theme
Configure Monitors (nwg-displays)
Configure Workspace Rules (nwg-displays)
@@ -53,16 +65,19 @@ main() {
# Map choices to corresponding files
case "$choice" in
- "view/edit User Defaults") file="$UserConfigs/01-UserDefaults.conf" ;;
- "view/edit ENV variables") file="$UserConfigs/ENVariables.conf" ;;
- "view/edit Window Rules") file="$configs/WindowRules.conf" ;;
- "view/edit User Keybinds") file="$UserConfigs/UserKeybinds.conf" ;;
- "view/edit User Settings") file="$UserConfigs/UserSettings.conf" ;;
- "view/edit Startup Apps") file="$configs/Startup_Apps.conf" ;;
- "view/edit Decorations") file="$UserConfigs/UserDecorations.conf" ;;
- "view/edit Animations") file="$UserConfigs/UserAnimations.conf" ;;
- "view/edit Laptop Keybinds") file="$UserConfigs/Laptops.conf" ;;
- "view/edit Default Keybinds") file="$configs/Keybinds.conf" ;;
+ "Edit User Defaults") file="$UserConfigs/01-UserDefaults.conf" ;;
+ "Edit User ENV variables") file="$UserConfigs/ENVariables.conf" ;;
+ "Edit User Keybinds") file="$UserConfigs/UserKeybinds.conf" ;;
+ "Edit User Startup Apps (overlay)") file="$UserConfigs/Startup_Apps.conf" ;;
+ "Edit User Window Rules (overlay)") file="$UserConfigs/WindowRules.conf" ;;
+ "Edit User Settings") file="$configs/SystemSettings.conf"; show_info "Editing default settings. Copy to UserConfigs/UserSettings.conf to override." ;;
+ "Edit User Decorations") file="$UserConfigs/UserDecorations.conf" ;;
+ "Edit User Animations") file="$UserConfigs/UserAnimations.conf" ;;
+ "Edit User Laptop Settings") file="$UserConfigs/Laptops.conf" ;;
+ "Edit System Default Keybinds") file="$configs/Keybinds.conf" ;;
+ "Edit System Default Startup Apps") file="$configs/Startup_Apps.conf" ;;
+ "Edit System Default Window Rules") file="$configs/WindowRules.conf" ;;
+ "Edit System Default Settings") file="$configs/SystemSettings.conf" ;;
"Choose Kitty Terminal Theme") $scriptsDir/Kitty_themes.sh ;;
"Configure Monitors (nwg-displays)")
if ! command -v nwg-displays &>/dev/null; then
@@ -114,4 +129,4 @@ if pidof rofi > /dev/null; then
pkill rofi
fi
-main \ No newline at end of file
+main
diff --git a/config/hypr/scripts/OverviewToggle.sh b/config/hypr/scripts/OverviewToggle.sh
index 21c2da34..8d4b285f 100755
--- a/config/hypr/scripts/OverviewToggle.sh
+++ b/config/hypr/scripts/OverviewToggle.sh
@@ -4,16 +4,18 @@
set -euo pipefail
-# 1) Try Quickshell via Hyprland global dispatch (works if QS is running and listening)
-if hyprctl dispatch global quickshell:overviewToggle >/dev/null 2>&1; then
- exit 0
+# 1) Try Quickshell via IPC (works if QS is running and listening)
+if pgrep -x quickshell >/dev/null 2>&1; then
+ if qs ipc -c overview call overview toggle >/dev/null 2>&1; then
+ exit 0
+ fi
fi
-# If QS isn't running, try starting it and retry once
+# If QS isn't running, but the CLI exists, try starting it and retry once
if command -v qs >/dev/null 2>&1; then
- qs >/dev/null 2>&1 &
+ qs -c overview >/dev/null 2>&1 &
sleep 0.6
- if hyprctl dispatch global quickshell:overviewToggle >/dev/null 2>&1; then
+ if qs ipc -c overview call overview toggle >/dev/null 2>&1; then
exit 0
fi
fi
diff --git a/config/hypr/scripts/Refresh.sh b/config/hypr/scripts/Refresh.sh
index 2e772aa9..76757aa4 100755
--- a/config/hypr/scripts/Refresh.sh
+++ b/config/hypr/scripts/Refresh.sh
@@ -7,23 +7,25 @@ UserScripts=$HOME/.config/hypr/UserScripts
# Define file_exists function
file_exists() {
- if [ -e "$1" ]; then
- return 0 # File exists
- else
- return 1 # File does not exist
- fi
+ if [ -e "$1" ]; then
+ return 0 # File exists
+ else
+ return 1 # File does not exist
+ fi
}
# Kill already running processes
_ps=(waybar rofi swaync ags)
for _prs in "${_ps[@]}"; do
- if pidof "${_prs}" >/dev/null; then
- pkill "${_prs}"
- fi
+ if pidof "${_prs}" >/dev/null; then
+ pkill "${_prs}"
+ fi
done
# added since wallust sometimes not applying
-killall -SIGUSR2 waybar
+killall -SIGUSR2 waybar
+# Added sleep for GameMode causing multiple waybar
+sleep 0.1
# quit ags & relaunch ags
#ags -q && ags &
@@ -33,23 +35,24 @@ killall -SIGUSR2 waybar
# some process to kill
for pid in $(pidof waybar rofi swaync ags swaybg); do
- kill -SIGUSR1 "$pid"
+ kill -SIGUSR1 "$pid"
+ sleep 0.1
done
#Restart waybar
-sleep 1
+sleep 0.1
waybar &
# relaunch swaync
-sleep 0.5
-swaync > /dev/null 2>&1 &
+sleep 0.3
+swaync >/dev/null 2>&1 &
# reload swaync
swaync-client --reload-config
# Relaunching rainbow borders if the script exists
sleep 1
if file_exists "${UserScripts}/RainbowBorders.sh"; then
- ${UserScripts}/RainbowBorders.sh &
+ ${UserScripts}/RainbowBorders.sh &
fi
-exit 0 \ No newline at end of file
+exit 0
diff --git a/config/hypr/scripts/UserConfigsSwitcher.sh b/config/hypr/scripts/UserConfigsSwitcher.sh
new file mode 100755
index 00000000..ad1d4e63
--- /dev/null
+++ b/config/hypr/scripts/UserConfigsSwitcher.sh
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
+# Script to manage UserConfigs and UserConfigsBak
+
+HYPR_CONFIG_DIR="$HOME/.config/hypr"
+USER_CONFIGS="$HYPR_CONFIG_DIR/UserConfigs"
+USER_CONFIGS_BAK="$HYPR_CONFIG_DIR/UserConfigsBak"
+
+if [ -d "$USER_CONFIGS" ] && [ ! -d "$USER_CONFIGS_BAK" ]; then
+ echo "Moving UserConfigs to UserConfigsBak..."
+ mv "$USER_CONFIGS" "$USER_CONFIGS_BAK"
+ echo "Done. Your UserConfigs are now in UserConfigsBak."
+elif [ ! -d "$USER_CONFIGS" ] && [ -d "$USER_CONFIGS_BAK" ]; then
+ echo "Moving UserConfigsBak to UserConfigs..."
+ mv "$USER_CONFIGS_BAK" "$USER_CONFIGS"
+ echo "Done. Your backup has been restored to UserConfigs."
+elif [ -d "$USER_CONFIGS" ] && [ -d "$USER_CONFIGS_BAK" ]; then
+ echo "Both UserConfigs and UserConfigsBak exist."
+ echo "Please choose what to do:"
+ PS3="Enter your choice: "
+ select option in "Backup current UserConfigs (move to UserConfigsBak)" "Restore backup (move UserConfigsBak to UserConfigs)" "Swap them" "Do nothing"; do
+ case $REPLY in
+ 1)
+ echo "Backing up UserConfigs..."
+ rm -rf "$USER_CONFIGS_BAK"
+ mv "$USER_CONFIGS" "$USER_CONFIGS_BAK"
+ echo "Done. UserConfigs moved to UserConfigsBak."
+ break
+ ;;
+ 2)
+ echo "Restoring backup..."
+ rm -rf "$USER_CONFIGS"
+ mv "$USER_CONFIGS_BAK" "$USER_CONFIGS"
+ echo "Done. UserConfigsBak moved to UserConfigs."
+ break
+ ;;
+ 3)
+ echo "Swapping..."
+ mv "$USER_CONFIGS" "$HYPR_CONFIG_DIR/UserConfigs.tmp"
+ mv "$USER_CONFIGS_BAK" "$USER_CONFIGS"
+ mv "$HYPR_CONFIG_DIR/UserConfigs.tmp" "$USER_CONFIGS_BAK"
+ echo "Done. UserConfigs and UserConfigsBak have been swapped."
+ break
+ ;;
+ 4)
+ echo "No changes made."
+ break
+ ;;
+ *)
+ echo "Invalid option. Please try again."
+ ;;
+ esac
+ done
+else
+ echo "Neither UserConfigs nor UserConfigsBak directory found. Nothing to do."
+fi
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage