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 +}