swaywm / sway

i3-compatible Wayland compositor
https://swaywm.org
MIT License
14.63k stars 1.11k forks source link

xkb_file should accept an empty value #8329

Open thblt opened 1 month ago

thblt commented 1 month ago

I want to use the same default layout for all keyboards, but devices like yubikeys (or barcode scanners, or any devices that pretend to be keyboards) use the US-QWERTY layout. Because my keyboard layout (for real keyboards) is hugely customized, I use a xkb file. My config thus looks like this:

input 4176:1031:Yubico_YubiKey_OTP+FIDO+CCID { 
  xkb_layout us 
} 
input type:keyboard { 
  xkb_file ~/.config/sway/my_weird_layout.xkb 
} 

with this config, the yubikey uses the layout described in my_weird_layout.xkb instead of US-QWERTY. I guess this happens because xkb_file gets merged from input type:keyboard into input 4176:1031:Yubico_YubiKey_OTP+FIDO+CCID.

A nice solution for that issue would be for xkb_file to accept an empty value:

input 4176:1031:Yubico_YubiKey_OTP+FIDO+CCID { 
  xkb_layout us
  xkb_file 
} 
input type:keyboard { 
  xkb_file ~/.config/sway/my_weird_layout.xkb 
} 

I'm aware there are other solutions with the actual config syntax (use a xkb file for us qwerty as well, or configure each keyboard individually), but they're not as nice :)

emersion commented 1 month ago

Should we reset xkb_file when merged into with a config which specifies xkb_layout since these two are conflicting? (And the other way around)

bitozoid commented 1 month ago

I'm having similar a similar issue. I'm trying to setup a kmonad config, but my custom mapping (xkb_file) seems to apply to KMonad input as well.

  input "1452:598:TrulyErgonomic.com_Truly_Ergonomic_CLEAVE_Keyboard" {
      xkb_file "~/.xkb/keymap/cleave"
  }

  input "4661:22137:KMonad" {
      xkb_layout "es"
  }