nixosでカスタムxkb_keymapを設定する方法

nixosでカスタムxkb_keymapを設定する方法

私は次のレイアウトを持っていますlayouts/en_ru

xkb_keymap {
  xkb_keycodes      { include "evdev+aliases(qwerty)" };
  xkb_geometry      { include "pc(pc104)" };
  xkb_types         { include "complete" };
  xkb_compat        { include "complete" };

  xkb_symbols {
    include "pc+us+ru:2+inet(evdev)"
    include "group(rctrl_rshift_toggle)"
    include "capslock(swapescape)"

    // swap right alt and left control
    replace key <RALT> { [ Control_L ] };
    modifier_map Control { <RALT> };

    // swap ; and : only in us layout
    replace key <AC10> { [ colon, semicolon ],
                        [ Cyrillic_zhe, Cyrillic_ZHE ] };

    // helpers //
    // xinput list
    // xinput test 16
    // xkbcomp $DISPLAY out.xkb
    // cat /usr/share/X11/xkb/rules/base.lst
  };
};

これはにロードされます $HOME/xinitrcこのように

xkbcomp $HOME/.config/layouts/en_ru $DISPLAY

これらすべてをどのように移動しますかconfiguration.nix


最初の部分を追加して実装しました。

xserver = {
  enable = true;
  layout = "us,ru";
  xkbOptions = "caps:swapescape,grp:rctrl_rshift_toggle";
};

私のものですが、configuration.nixこの部分を追加してシステム全体にする方法がわかりません。

// swap right alt and left control
replace key <RALT> { [ Control_L ] };
modifier_map Control { <RALT> };

// swap ; and : only in us layout
replace key <AC10> { [ colon, semicolon ],
                    [ Cyrillic_zhe, Cyrillic_ZHE ] };

答え1

これは一時的な問題です。 systemdには修正がありますが、systemdのバージョンはまだNixOSに含まれていません。

https://github.com/systemd/systemd/commit/5016eb56352a7ea1f61ea106fa4f5639fbf6ddd8

何を言っているのか分かります! 「それは答えではない!」そして私も同意する!幸いなことに、.NETservices.udev.extraHwdbファイルに独自のudevルールを追加するオプションがありますconfiguartion.nix

現在作業中の最終修正は次のとおりです。

services.udev.extraHwdb = ''
  evdev:atkbd:dmi:bvn*:bvr*:bd*:svnPurism*:pn*Librem13v4*:pvr*
    KEYBOARD_KEY_56=backslash
''

答え2

      sessionCommands = ''
        ${xorg.xkbcomp}/bin/xkbcomp ${layout} $DISPLAY &
      '';
    };

https://github.com/srghma/dotfiles/blob/0054e4586183e0dcf1bdecc9507bde937c365f30/nixos/root/services/default.nix#L116

関連情報