Merge pull request #138207 from rnhmjoj/layouts

nixos/extra-layouts: avoid all rebuilds
This commit is contained in:
Michele Guerini Rocco 2021-09-19 01:10:55 +02:00 committed by GitHub
commit 1cf01b5215
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 47 deletions

View file

@ -1049,6 +1049,14 @@ Superuser created successfully.
attempts from the SSH logs.
</para>
</listitem>
<listitem>
<para>
The
<link xlink:href="options.html#opt-services.xserver.extraLayouts"><literal>services.xserver.extraLayouts</literal></link>
no longer cause additional rebuilds when a layout is added or
modified.
</para>
</listitem>
<listitem>
<para>
Sway: The terminal emulator <literal>rxvt-unicode</literal> is

View file

@ -319,6 +319,8 @@ To be able to access the web UI this port needs to be opened in the firewall.
However, if [`services.fail2ban.enable`](options.html#opt-services.fail2ban.enable) is `true`, the `fail2ban` will override the verbosity to `"VERBOSE"`, so that `fail2ban` can observe the failed login attempts from the SSH logs.
- The [`services.xserver.extraLayouts`](options.html#opt-services.xserver.extraLayouts) no longer cause additional rebuilds when a layout is added or modified.
- Sway: The terminal emulator `rxvt-unicode` is no longer installed by default via `programs.sway.extraPackages`. The current default configuration uses `alacritty` (and soon `foot`) so this is only an issue when using a customized configuration and not installing `rxvt-unicode` explicitly.
- `python3` now defaults to Python 3.9. Python 3.9 introduces many deprecation warnings, please look at the [What's New In Python 3.9 post](https://docs.python.org/3/whatsnew/3.9.html) for more information.

View file

@ -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"
'');
}

View file

@ -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;
};

View file

@ -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"
'');