aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorkayprish <86522033+kayprish@users.noreply.github.com>2026-01-01 03:10:40 +0100
committerGitHub <noreply@github.com>2025-12-31 21:10:40 -0500
commit991f30d07ffbdeef8498ca45cf85284b2e85280e (patch)
tree75230d63728f0752f1802eeb2e45565deb94ab3e /config
parent2ae39ff4ea20d67e38300a0f5ac5445a3af1c64a (diff)
Modify SwitchKeyboardLayout.sh to not require .cache/kb_layout (#901)
* 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š <kayprish@bonsai.cool> Co-authored-by: Donald Williams <129223418+dwilliam62@users.noreply.github.com>
Diffstat (limited to 'config')
-rw-r--r--config/hypr/configs/Keybinds.conf2
-rwxr-xr-xconfig/hypr/initial-boot.sh3
-rwxr-xr-xconfig/hypr/scripts/KeyboardLayout.sh119
-rwxr-xr-xconfig/hypr/scripts/SwitchKeyboardLayout.sh103
-rw-r--r--config/waybar/ModulesCustom4
5 files changed, 122 insertions, 109 deletions
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": {
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage