mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-10-02 04:50:21 +00:00
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:
@@ -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"
|
||||
'');
|
||||
|
||||
Reference in New Issue
Block a user