diff --git a/scripts/default.nix b/scripts/default.nix index a9493b2..bbefd9f 100644 --- a/scripts/default.nix +++ b/scripts/default.nix @@ -138,6 +138,10 @@ libinput libratbag ]; + sway-sync-xkbmap = [ + xorg.setxkbmap + jq + ]; print-battery-icon = [ ]; controller-battery = [ print-battery-icon ]; mouse-battery = [ print-battery-icon ]; diff --git a/scripts/sway-sync-xkbmap b/scripts/sway-sync-xkbmap new file mode 100755 index 0000000..721e92f --- /dev/null +++ b/scripts/sway-sync-xkbmap @@ -0,0 +1,22 @@ +#!/bin/sh + +set -euo pipefail + +LAST_LAYOUT="" + +while sleep 1s; do + CURRENT_LAYOUT=$(swaymsg -t get_inputs | jq -r '.[]|.xkb_active_layout_name|select(.)' | head -n1) + + if test "$LAST_LAYOUT" = "$CURRENT_LAYOUT"; then + true + elif test "$CURRENT_LAYOUT" = "English (Colemak)"; then + echo "Setting layout to colemak" + setxkbmap us colemak + elif test "$CURRENT_LAYOUT" = "Portuguese (Brazil)"; then + echo "Setting layout to br" + setxkbmap br + fi + + LAST_LAYOUT="$CURRENT_LAYOUT" +done + diff --git a/user/sway/default.nix b/user/sway/default.nix index dfe7de9..e82dea3 100644 --- a/user/sway/default.nix +++ b/user/sway/default.nix @@ -14,6 +14,7 @@ in imports = [ ./kanshi.nix ./mako.nix + ./sway-sync-xkbmap.nix ./sway-binds.nix ./sway-modes.nix ./sway-assigns.nix diff --git a/user/sway/sway-sync-xkbmap.nix b/user/sway/sway-sync-xkbmap.nix new file mode 100644 index 0000000..25a7227 --- /dev/null +++ b/user/sway/sway-sync-xkbmap.nix @@ -0,0 +1,27 @@ +{ + config, + pkgs, + lib, + ... +}: +let + cfg = config.my.sway; +in +{ + config = lib.mkIf cfg.enable { + systemd.user.services.sway-sync-xkbmap = { + Unit = { + Description = "Sync xkbmap with sway keyboard layout"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session.target" ]; + }; + Service = { + ExecStart = lib.getExe pkgs.sway-sync-xkbmap; + Restart = "on-failure"; + }; + Install = { + WantedBy = [ "sway-session.target" ]; + }; + }; + }; +}