From e7598a87b4b1cea83dabfa3be0b85fe265ef3bfa Mon Sep 17 00:00:00 2001 From: scbj Date: Thu, 22 Jan 2026 15:13:02 +0100 Subject: [PATCH] (scripts) started "script" for switching keyboard layout on i3 --- bashrc/.bashrc | 1 + scripts/i3-kb-layout-switcher.sh | 49 ++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 scripts/i3-kb-layout-switcher.sh diff --git a/bashrc/.bashrc b/bashrc/.bashrc index 2ffadc8..fee67d1 100644 --- a/bashrc/.bashrc +++ b/bashrc/.bashrc @@ -106,6 +106,7 @@ source_list+=("${personal_scripts}/navigate_bash_setup.sh") source_list+=("${personal_scripts}/fzf-bash-history.sh") source_list+=("${personal_scripts}/colors.sh") source_list+=("${personal_scripts}/dunst.sh") +source_list+=("${personal_scripts}/i3-kb-layout-switcher") source_list+=("$HOME/.cargo/env") for script in ${source_list[@]}; do diff --git a/scripts/i3-kb-layout-switcher.sh b/scripts/i3-kb-layout-switcher.sh new file mode 100644 index 0000000..9e00a36 --- /dev/null +++ b/scripts/i3-kb-layout-switcher.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +function switch_kb_layout { + layouts=("us", "us") + variants=("default, intl") + languages="$(echo "${devices}" | grep -ioP '(?<="layout": ").*(?=")' -m 1)" + variants="$(echo "${devices}" | grep -ioP '(?<="variant": ").*(?=")' -m 1)" + + ## TODO: use `setxkbmap -print` to get status + current="$(echo "${devices}" | grep -ioP '(?<="active_layout_index": ).*(?=,)' -m 1)" + + languages=(${languages}) + variants=(${variants}) + + number=$((${#languages[@]} - 1)) + for n in $(seq 0 $number); do + layouts+=("${languages[$n]//,/} - ${variants[$n]//,/}") + done + + if $(which rofi &>/dev/null); then + # selection="$(printf "%s\n" "${layouts[@]}" | fuzzel --lines ${#layouts[@]} --dmenu --select-index ${current})" + return 1 + else + notify-send "layout-switcher" "requires [rofi]" + return 1 + fi + + for n in $(seq 0 $number); do + if [[ "${layouts[$n]}" == "${selection}" ]]; then + index=$n + break + fi + done + if [[ -z "${index}" ]]; then + return 1 + fi + + hyprctl switchxkblayout all "${index}" >/dev/null +} + +# switch_kb_layout + +function choose_layout_us { + setxkbmap -layout us +} + +function choose_layout_int { + setxkbmap -layout us -variant intl +}