nixos/extra-layouts: avoid all rebuilds
Just setting the XKB_CONFIG_ROOT should be enough, so we don't need to rebuild the xserver, xkbcomp and other packages anymore. However, the variable has to be passed explicitely to scripts running at build time: in particular to xkbvalidate and xkb-console-keymap.
This commit is contained in:
parent
2a58c796aa
commit
e4da1edf8b
@ -116,7 +116,11 @@ in
|
||||
{ console.keyMap = with config.services.xserver;
|
||||
mkIf cfg.useXkbConfig
|
||||
(pkgs.runCommand "xkb-console-keymap" { preferLocalBuild = true; } ''
|
||||
'${pkgs.ckbcomp}/bin/ckbcomp' -model '${xkbModel}' -layout '${layout}' \
|
||||
'${pkgs.ckbcomp}/bin/ckbcomp' \
|
||||
${optionalString (config.environment.sessionVariables ? XKB_CONFIG_ROOT)
|
||||
"-I${config.environment.sessionVariables.XKB_CONFIG_ROOT}"
|
||||
} \
|
||||
-model '${xkbModel}' -layout '${layout}' \
|
||||
-option '${xkbOptions}' -variant '${xkbVariant}' > "$out"
|
||||
'');
|
||||
}
|
||||
|
@ -79,6 +79,10 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
xkb_patched = pkgs.xorg.xkeyboardconfig_custom {
|
||||
layouts = config.services.xserver.extraLayouts;
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
@ -114,58 +118,14 @@ in
|
||||
|
||||
config = mkIf (layouts != { }) {
|
||||
|
||||
# We don't override xkeyboard_config directly to
|
||||
# reduce the amount of packages to be recompiled.
|
||||
# Only the following packages are necessary to set
|
||||
# a custom layout anyway:
|
||||
nixpkgs.overlays = lib.singleton (self: super: {
|
||||
|
||||
xkb_patched = self.xorg.xkeyboardconfig_custom {
|
||||
layouts = config.services.xserver.extraLayouts;
|
||||
};
|
||||
|
||||
xorg = super.xorg // {
|
||||
xorgserver = super.xorg.xorgserver.overrideAttrs (old: {
|
||||
configureFlags = old.configureFlags ++ [
|
||||
"--with-xkb-bin-directory=${self.xorg.xkbcomp}/bin"
|
||||
"--with-xkb-path=${self.xkb_patched}/share/X11/xkb"
|
||||
];
|
||||
});
|
||||
|
||||
setxkbmap = super.xorg.setxkbmap.overrideAttrs (old: {
|
||||
postInstall =
|
||||
''
|
||||
mkdir -p $out/share
|
||||
ln -sfn ${self.xkb_patched}/etc/X11 $out/share/X11
|
||||
'';
|
||||
});
|
||||
|
||||
xkbcomp = super.xorg.xkbcomp.overrideAttrs (old: {
|
||||
configureFlags = [ "--with-xkb-config-root=${self.xkb_patched}/share/X11/xkb" ];
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
ckbcomp = super.ckbcomp.override {
|
||||
xkeyboard_config = self.xkb_patched;
|
||||
};
|
||||
|
||||
xkbvalidate = super.xkbvalidate.override {
|
||||
libxkbcommon = self.libxkbcommon.override {
|
||||
xkeyboard_config = self.xkb_patched;
|
||||
};
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
environment.sessionVariables = {
|
||||
# runtime override supported by multiple libraries e. g. libxkbcommon
|
||||
# https://xkbcommon.org/doc/current/group__include-path.html
|
||||
XKB_CONFIG_ROOT = "${pkgs.xkb_patched}/etc/X11/xkb";
|
||||
XKB_CONFIG_ROOT = "${xkb_patched}/etc/X11/xkb";
|
||||
};
|
||||
|
||||
services.xserver = {
|
||||
xkbDir = "${pkgs.xkb_patched}/etc/X11/xkb";
|
||||
xkbDir = "${xkb_patched}/etc/X11/xkb";
|
||||
exportConfiguration = config.services.xserver.displayManager.startx.enable
|
||||
|| config.services.xserver.displayManager.sx.enable;
|
||||
};
|
||||
|
@ -738,6 +738,9 @@ in
|
||||
nativeBuildInputs = with pkgs.buildPackages; [ xkbvalidate ];
|
||||
preferLocalBuild = true;
|
||||
} ''
|
||||
${optionalString (config.environment.sessionVariables ? XKB_CONFIG_ROOT)
|
||||
"export XKB_CONFIG_ROOT=${config.environment.sessionVariables.XKB_CONFIG_ROOT}"
|
||||
}
|
||||
xkbvalidate "$xkbModel" "$layout" "$xkbVariant" "$xkbOptions"
|
||||
touch "$out"
|
||||
'');
|
||||
|
Loading…
Reference in New Issue
Block a user