From 2d2f6198a92278a141c333926a94d8e82de0570d Mon Sep 17 00:00:00 2001 From: Ryan Garofano Date: Mon, 22 Dec 2025 18:05:31 -0800 Subject: feat: Add precise volume adjustment --- config/hypr/configs/Keybinds.conf | 2 ++ 1 file changed, 2 insertions(+) (limited to 'config/hypr/configs/Keybinds.conf') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 1ddbc81a..7d0e3fef 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -106,6 +106,8 @@ bindd = ALT, tab, bring active to top, bringactivetotop # Special Keys / Hot Keys bindeld = , xf86audioraisevolume, volume up, exec, $scriptsDir/Volume.sh --inc bindeld = , xf86audiolowervolume, volume down, exec, $scriptsDir/Volume.sh --dec +bindeld = ALT, xf86audioraisevolume, volume up precise, exec, $scriptsDir/Volume.sh --inc-precise +bindeld = ALT, xf86audiolowervolume, volume down precise, exec, $scriptsDir/Volume.sh --dec-precise bindld = , xf86AudioMicMute, toggle mic mute, exec, $scriptsDir/Volume.sh --toggle-mic bindld = , xf86audiomute, toggle mute, exec, $scriptsDir/Volume.sh --toggle bindld = , xf86Sleep, sleep, exec, systemctl suspend -- cgit v1.2.3 From 862e49f7a3013b8c948d0036002cd07527b474cd Mon Sep 17 00:00:00 2001 From: Suresh Thagunna Date: Mon, 22 Dec 2025 18:05:07 -0500 Subject: fix: layout aware cycleprev and cyclenext window bindings --- config/hypr/configs/Keybinds.conf | 2 ++ config/hypr/configs/Startup_Apps.conf | 1 - config/hypr/scripts/ChangeLayout.sh | 31 +++++++++++++++++++++++-------- 3 files changed, 25 insertions(+), 9 deletions(-) (limited to 'config/hypr/configs/Keybinds.conf') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 7d0e3fef..ddc516bc 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -97,6 +97,8 @@ bindd = $mainMod, P, toggle pseudo (dwindle), pseudo, # Works on either layout (Master or Dwindle) bindd = $mainMod, M, set split ratio 0.3, exec, hyprctl dispatch splitratio 0.3 +# layout aware keybinds +exec-once = $scriptsDir/ChangeLayout.sh init # Cycle windows; if floating bring to top diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 0cfb6427..27c8d26a 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -19,7 +19,6 @@ exec-once = swww-daemon --format xrgb ### Startup ### exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP -exec-once = $scriptsDir/KeybindsLayoutInit.sh # Drop Down terminal # See Bug#810 https://github.com/JaKooLit/Hyprland-Dots/issues/810#issuecomment-3351947644 diff --git a/config/hypr/scripts/ChangeLayout.sh b/config/hypr/scripts/ChangeLayout.sh index e2436b79..221f9637 100755 --- a/config/hypr/scripts/ChangeLayout.sh +++ b/config/hypr/scripts/ChangeLayout.sh @@ -6,19 +6,34 @@ notif="$HOME/.config/swaync/images/ja.png" LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g') +# 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 + case $LAYOUT in "master") - hyprctl keyword general:layout dwindle - # SUPER+J/K are global and managed by KeybindsLayoutInit.sh; only manage SUPER+O here - hyprctl keyword bind SUPER,O,togglesplit + 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 - # Drop togglesplit binding on SUPER+O when switching back to master - hyprctl keyword unbind SUPER,O + hyprctl keyword general:layout master + 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 notify-send -e -u low -i "$notif" " Master Layout" - ;; + ;; *) ;; esac -- cgit v1.2.3 From 330a934953fb79c56c60e2520210f8686b4c5459 Mon Sep 17 00:00:00 2001 From: brockar Date: Tue, 30 Dec 2025 18:41:59 -0300 Subject: fix: opaque toggle fis this: https://github.com/JaKooLit/Arch-Hyprland/issues/352 --- config/hypr/configs/Keybinds.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'config/hypr/configs/Keybinds.conf') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index ddc516bc..43bd1e94 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -58,7 +58,7 @@ bindd = $mainMod SHIFT, M, online music, exec, $UserScripts/RofiBeats.sh bindd = $mainMod, W, select wallpaper, exec, $UserScripts/WallpaperSelect.sh bindd = $mainMod SHIFT, W, wallpaper effects, exec, $UserScripts/WallpaperEffects.sh bindd = CTRL ALT, W, random wallpaper, exec, $UserScripts/WallpaperRandom.sh -bindd = $mainMod CTRL, O, toggle active window opacity, exec, hyprctl setprop active opaque toggle +bindd = $mainMod CTRL, O, toggle active window opacity, setprop, active opaque toggle bindd = $mainMod SHIFT, K, search keybinds, exec, $scriptsDir/KeyBinds.sh bindd = $mainMod SHIFT, A, animations menu, exec, $scriptsDir/Animations.sh bindd = $mainMod SHIFT, O, change oh-my-zsh theme, exec, $UserScripts/ZshChangeTheme.sh -- cgit v1.2.3 From 991f30d07ffbdeef8498ca45cf85284b2e85280e Mon Sep 17 00:00:00 2001 From: kayprish <86522033+kayprish@users.noreply.github.com> Date: Thu, 1 Jan 2026 03:10:40 +0100 Subject: Modify SwitchKeyboardLayout.sh to not require .cache/kb_layout (#901) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Modify SwitchKeyboardLayout.sh to not require .cache/kb_layout The bulk of the SwitchKeyboardLayout.sh script has been renamed to KeyboardLayout.sh, meanwhile its behavior has been changed. Instead of relying on the file .cache/kb_layout, to check the current keyboard layout, as well as to toggle it, it now uses hyprctl to query this information, while making sure that it checks the first non-ignored keyboard. In this way, it querys from keyboards which it's also in charge of modifying. The logic from the script is also repurposed in waybar, just for viewing, so the script was renamed. * Implement fixes for KeyboardLayout.sh changes * Remove SwitchKeyboardLayout call from initial-boot.sh --------- Co-authored-by: Petar Kapriš Co-authored-by: Donald Williams <129223418+dwilliam62@users.noreply.github.com> --- config/hypr/configs/Keybinds.conf | 2 +- config/hypr/initial-boot.sh | 3 - config/hypr/scripts/KeyboardLayout.sh | 119 ++++++++++++++++++++++++++++ config/hypr/scripts/SwitchKeyboardLayout.sh | 103 ------------------------ config/waybar/ModulesCustom | 4 +- 5 files changed, 122 insertions(+), 109 deletions(-) create mode 100755 config/hypr/scripts/KeyboardLayout.sh delete mode 100755 config/hypr/scripts/SwitchKeyboardLayout.sh (limited to 'config/hypr/configs/Keybinds.conf') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 43bd1e94..91eb66e2 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -62,7 +62,7 @@ bindd = $mainMod CTRL, O, toggle active window opacity, setprop, active opaque t bindd = $mainMod SHIFT, K, search keybinds, exec, $scriptsDir/KeyBinds.sh bindd = $mainMod SHIFT, A, animations menu, exec, $scriptsDir/Animations.sh bindd = $mainMod SHIFT, O, change oh-my-zsh theme, exec, $UserScripts/ZshChangeTheme.sh -bindlnd = ALT_L, SHIFT_L, switch keyboard layout globally, exec, $scriptsDir/SwitchKeyboardLayout.sh +bindlnd = ALT_L, SHIFT_L, switch keyboard layout globally, exec, $scriptsDir/KeyboardLayout.sh switch bindlnd = SHIFT_L, ALT_L, switch keyboard layout per-window, exec, $scriptsDir/Tak0-Per-Window-Switch.sh bindd = $mainMod ALT, C, calculator, exec, $UserScripts/RofiCalc.sh diff --git a/config/hypr/initial-boot.sh b/config/hypr/initial-boot.sh index 1313f104..eeabdef5 100755 --- a/config/hypr/initial-boot.sh +++ b/config/hypr/initial-boot.sh @@ -49,9 +49,6 @@ if [ ! -f "$HOME/.config/hypr/.initial_startup_done" ]; then # initiate kvantum theme kvantummanager --set "$kvantum_theme" > /dev/null 2>&1 & - # initiate the kb_layout (for some reason) waybar cant launch it - "$scriptsDir/SwitchKeyboardLayout.sh" > /dev/null 2>&1 & - # waybar style #if [ -L "$HOME/.config/waybar/config" ]; then ## ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" diff --git a/config/hypr/scripts/KeyboardLayout.sh b/config/hypr/scripts/KeyboardLayout.sh new file mode 100755 index 00000000..ec280826 --- /dev/null +++ b/config/hypr/scripts/KeyboardLayout.sh @@ -0,0 +1,119 @@ +#!/usr/bin/env bash +# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## +# This is for changing kb_layouts. Set kb_layouts in "$HOME/.config/hypr/UserConfigs/UserSettings.conf" + +notif_icon="$HOME/.config/swaync/images/ja.png" +SCRIPTSDIR="$HOME/.config/hypr/scripts" + +# Refined ignore list with patterns or specific device names +ignore_patterns=( + "--(avrcp)" + "Bluetooth Speaker" + "Other Device + Name" +) + +# Function to get keyboard names +get_keyboard_names() { + hyprctl devices -j | jq -r '.keyboards[].name' +} + +# Function to check if a device matches any ignore pattern +is_ignored() { + local device_name=$1 + for pattern in "${ignore_patterns[@]}"; do + if [[ "$device_name" == *"$pattern"* ]]; then + return 0 # Device matches ignore pattern + fi + done + return 1 # Device does not match any ignore pattern +} + +# Function to get current layout info +# Stores values in layout_mapping, variant_mapping and layout_index +get_current_layout_info() { + local found_kb=false + + # Read from the first non-ignored layout + while read -r name; do + if ! is_ignored "$name"; then + found_kb=true + local layout_mapping_str=$(hyprctl devices -j | + jq -r --arg name "$name" '.keyboards[] | select(.name==$name).layout') + IFS="," read -r -a layout_mapping <<<"$layout_mapping_str" + + local variant_mapping_str=$(hyprctl devices -j | + jq -r --arg name "$name" '.keyboards[] | select(.name==$name).variant') + IFS="," read -r -a variant_mapping <<<"$variant_mapping_str" + + layout_index=$(hyprctl devices -j | + jq -r --arg name "$name" '.keyboards[] | select(.name==$name).active_layout_index') + break + fi + done <<< "$(get_keyboard_names)" + + $found_kb && return 0 + return 1 +} + +# Function to change keyboard layout +change_layout() { + local error_found=false + + while read -r name; do + if is_ignored "$name"; then + echo "Skipping ignored device: $name" + continue + fi + + echo "Switching layout for $name to $new_layout..." + hyprctl switchxkblayout "$name" "$next_index" + if [ $? -ne 0 ]; then + echo "Error while switching layout for $name." >&2 + error_found=true + fi + done <<<"$(get_keyboard_names)" + + $error_found && return 1 + return 0 +} + + +# Stores values in layout_mapping, variant_mapping and layout_index +if ! get_current_layout_info; then + echo "Could not get current layout information." >&2 + echo "There might not be any keyboards available, \ + or some were unnecessarily set as ignored." >&2 + notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" + echo "Exiting $0 $@" >&2 + exit 1 +fi + +current_layout=${layout_mapping[$layout_index]} +current_variant=${variant_mapping[$layout_index]} + +if [[ "$1" == "status" ]]; then + echo "$current_layout${current_variant:+($current_variant)}" +elif [[ "$1" == "switch" ]]; then + echo "Current layout: $current_layout($current_variant)" + + layout_count=${#layout_mapping[@]} + echo "Number of layouts: $layout_count" + + next_index=$(( (layout_index + 1) % layout_count )) + new_layout="${layout_mapping[$next_index]}" + new_variant="${variant_mapping[$next_index]}" + echo "Next layout: $new_layout" + + # Execute layout change and notify + if ! change_layout; then + notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" + echo "Layout change failed." >&2 + exit 1 + else + notify-send -u low -i "$notif_icon" " kb_layout: $new_layout${new_variant:+($new_variant)}" + echo "Layout change notification sent." + fi +else + echo "Usage: $0 {status|switch}" +fi diff --git a/config/hypr/scripts/SwitchKeyboardLayout.sh b/config/hypr/scripts/SwitchKeyboardLayout.sh deleted file mode 100755 index 34d008a1..00000000 --- a/config/hypr/scripts/SwitchKeyboardLayout.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env bash -# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## -# This is for changing kb_layouts. Set kb_layouts in $settings_file - -layout_file="$HOME/.cache/kb_layout" -settings_file="$HOME/.config/hypr/configs/SystemSettings.conf" -notif_icon="$HOME/.config/swaync/images/ja.png" - -# Refined ignore list with patterns or specific device names -ignore_patterns=( - "--(avrcp)" - "Bluetooth Speaker" - "Other Device - Name" -) - -# Create layout file with default layout if it does not exist -if [ ! -f "$layout_file" ]; then - echo "Creating layout file..." - default_layout=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2 | tr -d '[:space:]' | cut -d ',' -f 1 2>/dev/null) - default_layout=${default_layout:-"us"} # Default to 'us' layout - echo "$default_layout" >"$layout_file" - echo "Default layout set to $default_layout" -fi - -current_layout=$(cat "$layout_file") -echo "Current layout: $current_layout" - -# Read available layouts from settings file -if [ -f "$settings_file" ]; then - kb_layout_line=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2) - # Remove leading and trailing spaces around each layout - kb_layout_line=$(echo "$kb_layout_line" | tr -d '[:space:]') - IFS=',' read -r -a layout_mapping <<<"$kb_layout_line" -else - echo "Settings file not found!" - exit 1 -fi - -layout_count=${#layout_mapping[@]} -echo "Number of layouts: $layout_count" - -# Find current layout index and calculate next layout -for ((i = 0; i < layout_count; i++)); do - if [ "$current_layout" == "${layout_mapping[i]}" ]; then - current_index=$i - break - fi -done - -next_index=$(((current_index + 1) % layout_count)) -new_layout="${layout_mapping[next_index]}" -echo "Next layout: $new_layout" - -# Function to get keyboard names -get_keyboard_names() { - hyprctl devices -j | jq -r '.keyboards[].name' -} - -# Function to check if a device matches any ignore pattern -is_ignored() { - local device_name=$1 - for pattern in "${ignore_patterns[@]}"; do - if [[ "$device_name" == *"$pattern"* ]]; then - return 0 # Device matches ignore pattern - fi - done - return 1 # Device does not match any ignore pattern -} - -# Function to change keyboard layout -change_layout() { - local error_found=false - - while read -r name; do - if is_ignored "$name"; then - echo "Skipping ignored device: $name" - continue - fi - - echo "Switching layout for $name to $new_layout..." - hyprctl switchxkblayout "$name" "$next_index" - if [ $? -ne 0 ]; then - echo "Error while switching layout for $name." >&2 - error_found=true - fi - done <<<"$(get_keyboard_names)" - - $error_found && return 1 - return 0 -} - -# Execute layout change and notify -if ! change_layout; then - notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" - echo "Layout change failed." >&2 - exit 1 -else - notify-send -u low -i "$notif_icon" " kb_layout: $new_layout" - echo "Layout change notification sent." -fi - -echo "$new_layout" >"$layout_file" diff --git a/config/waybar/ModulesCustom b/config/waybar/ModulesCustom index f4c871f7..cb390c0f 100644 --- a/config/waybar/ModulesCustom +++ b/config/waybar/ModulesCustom @@ -90,10 +90,10 @@ }, "custom/keyboard": { - "exec": "cat $HOME/.cache/kb_layout", + "exec": "$HOME/.config/hypr/scripts/KeyboardLayout.sh status", "interval": 1, "format": " {}", - "on-click": "$HOME/.config/hypr/scripts/SwitchKeyboardLayout.sh", + "on-click": "$HOME/.config/hypr/scripts/KeyboardLayout.sh switch", }, "custom/light_dark": { -- cgit v1.2.3 From e504f6c1c50bd2037bea9b3b48e2e0b06b304c34 Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Sun, 4 Jan 2026 03:53:41 +0530 Subject: feat: Add Wallust based global Theme Switcher (#905) * fix: Add Theme Switcher script * feat: Add theme switcher shortcut * enhancement: simplify the program, fix spelling mistakes, add safety mechanism --- config/hypr/configs/Keybinds.conf | 7 ++++--- config/hypr/scripts/ThemeChanger.sh | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 config/hypr/scripts/ThemeChanger.sh (limited to 'config/hypr/configs/Keybinds.conf') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 91eb66e2..dea22719 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -23,6 +23,7 @@ bindd = $mainMod, Return, Open terminal, exec, $term bindd = $mainMod, E, file manager, exec, $files # FEATURES / EXTRAS +bindd = $mainMod, T, Global theme switcher using Wallust, exec, $scriptsDir/ThemeChanger.sh #Global theme switcher bindd = $mainMod, H, help / cheat sheet, exec, $scriptsDir/KeyHints.sh bindd = $mainMod ALT, R, refresh bar and menus, exec, $scriptsDir/Refresh.sh bindd = $mainMod ALT, E, emoji menu, exec, $scriptsDir/RofiEmoji.sh @@ -43,7 +44,7 @@ bindd = $mainMod SHIFT, Return, DropDown terminal, exec, $scriptsDir/Droptermina # Desktop zooming or magnifier bindd = $mainMod ALT, mouse_down, zoom in, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 2.0}')" -bindd = $mainMod ALT, mouse_up, zoom out, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" +bindd = $mainMod ALT, mouse_up, zoom out, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" # Waybar / Bar related bindd = $mainMod CTRL ALT, B, toggle waybar on/off, exec, pkill -SIGUSR1 waybar @@ -164,7 +165,7 @@ bindd = $mainMod CTRL, K, Move left into group, moveintogroup, l # Move active w bindd = $mainMod CTRL, L, Move Right into group, moveintogroup, r # Move active window right into a group bindd = $mainMod CTRL, H, Move active out of group, moveoutofgroup # Move active window out of group -# Try to dynamically move in grouped window and when ungrouped +# Try to dynamically move in grouped window and when ungrouped # Not working for me DW 11/26/25 PR: https://github.com/JaKooLit/Hyprland-Dots/pull/872 #bindd = $mainMod, right, focus right, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[-1] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus r; else hyprctl dispatch changegroupactive f; fi' #bindd = $mainMod, left, focus left, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[0] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus l; else hyprctl dispatch changegroupactive b; fi' @@ -185,7 +186,7 @@ bindd = $mainMod, U, toggle special workspace, togglespecialworkspace, # The following mappings use the key codes to better support various keyboard layouts # 1 is code:10, 2 is code 11, etc -# Switch workspaces with mainMod + [0-9] +# Switch workspaces with mainMod + [0-9] bindd = $mainMod, code:10, workspace 1, workspace, 1 # NOTE: code:10 = key 1 bindd = $mainMod, code:11, workspace 2, workspace, 2 # NOTE: code:11 = key 2 bindd = $mainMod, code:12, workspace 3, workspace, 3 # NOTE: code:12 = key 3 diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh new file mode 100644 index 00000000..15534258 --- /dev/null +++ b/config/hypr/scripts/ThemeChanger.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com +# +# SPDX-License-Identifier: GPL-3.0-or-later + +# Repository url : https://github.com/TheAhumMaitra/cautious-waddle + +# User choice +choice=$(wallust theme list \ + | sed '1d' \ + | sed 's/^- //' \ + | rofi -dmenu -p "Select Global Theme") + +# If user requested to exit, then exit +[[ -z "$choice" ]] && exit 0 + +# Apply the theme +wallust theme "$choice" + +# Inform user about theme changed +notify-send "Global theme changed" "Global Theme selected $choice" + +# Give warning to user for Waybar theme refresh +notify-send "Press SUPER+ALT+R to Refresh Waybar Theme" -- cgit v1.2.3