nixos/i18n: fix eval for non-glibc systems (e.g. musl)
`pkgs.glibcLocales` is null for musl systems, so `options.i18n.glibcLocales` needs to also be nullable. otherwise, the `.override` and subsequence path interpolations fail for non-gnu systems.
This commit is contained in:
@@ -31,16 +31,23 @@ in
|
||||
|
||||
i18n = {
|
||||
glibcLocales = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = pkgs.glibcLocales.override {
|
||||
allLocales = lib.elem "all" config.i18n.supportedLocales;
|
||||
locales = config.i18n.supportedLocales;
|
||||
};
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default =
|
||||
if pkgs.glibcLocales != null then
|
||||
pkgs.glibcLocales.override {
|
||||
allLocales = lib.elem "all" config.i18n.supportedLocales;
|
||||
locales = config.i18n.supportedLocales;
|
||||
}
|
||||
else
|
||||
null;
|
||||
defaultText = lib.literalExpression ''
|
||||
pkgs.glibcLocales.override {
|
||||
allLocales = lib.elem "all" config.i18n.supportedLocales;
|
||||
locales = config.i18n.supportedLocales;
|
||||
}
|
||||
if pkgs.glibcLocales != null then
|
||||
pkgs.glibcLocales.override {
|
||||
allLocales = lib.elem "all" config.i18n.supportedLocales;
|
||||
locales = config.i18n.supportedLocales;
|
||||
}
|
||||
else
|
||||
null
|
||||
'';
|
||||
example = lib.literalExpression "pkgs.glibcLocales";
|
||||
description = ''
|
||||
@@ -171,7 +178,9 @@ in
|
||||
|
||||
environment.systemPackages =
|
||||
# We increase the priority a little, so that plain glibc in systemPackages can't win.
|
||||
lib.optional (config.i18n.supportedLocales != [ ]) (lib.setPrio (-1) config.i18n.glibcLocales);
|
||||
lib.optional (config.i18n.glibcLocales != null && config.i18n.supportedLocales != [ ]) (
|
||||
lib.setPrio (-1) config.i18n.glibcLocales
|
||||
);
|
||||
|
||||
environment.sessionVariables = {
|
||||
LANG = config.i18n.defaultLocale;
|
||||
@@ -179,9 +188,11 @@ in
|
||||
}
|
||||
// config.i18n.extraLocaleSettings;
|
||||
|
||||
systemd.globalEnvironment = lib.mkIf (config.i18n.supportedLocales != [ ]) {
|
||||
LOCALE_ARCHIVE = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
|
||||
};
|
||||
systemd.globalEnvironment =
|
||||
lib.mkIf (config.i18n.glibcLocales != null && config.i18n.supportedLocales != [ ])
|
||||
{
|
||||
LOCALE_ARCHIVE = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
|
||||
};
|
||||
|
||||
# ‘/etc/locale.conf’ is used by systemd.
|
||||
environment.etc."locale.conf".source = pkgs.writeText "locale.conf" ''
|
||||
|
||||
@@ -95,7 +95,9 @@ in
|
||||
include "${pkgs.apparmor-profiles}/etc/apparmor.d/abstractions/base"
|
||||
${pkgs.stdenv.cc.libc}/share/locale/** r,
|
||||
${pkgs.stdenv.cc.libc}/share/locale.alias r,
|
||||
${config.i18n.glibcLocales}/lib/locale/locale-archive r,
|
||||
${lib.optionalString (
|
||||
config.i18n.glibcLocales != null
|
||||
) "${config.i18n.glibcLocales}/lib/locale/locale-archive r,"}
|
||||
${etcRule "localtime"}
|
||||
${pkgs.tzdata}/share/zoneinfo/** r,
|
||||
${pkgs.stdenv.cc.libc}/share/i18n/** r,
|
||||
|
||||
@@ -77,6 +77,8 @@ let
|
||||
BindReadOnlyPaths = [
|
||||
"/etc"
|
||||
"/run/systemd"
|
||||
]
|
||||
++ lib.optionals (config.i18n.glibcLocales != null) [
|
||||
"${config.i18n.glibcLocales}"
|
||||
]
|
||||
++ mapAttrsToList (name: inbox: inbox.description) cfg.inboxes
|
||||
|
||||
@@ -39,8 +39,12 @@ let
|
||||
|
||||
# Ensure that clipboard works for non-ASCII characters
|
||||
sed -i -e '/.*SessionVariables.*/ a\
|
||||
LANG=${config.i18n.defaultLocale}\
|
||||
LOCALE_ARCHIVE=${config.i18n.glibcLocales}/lib/locale/locale-archive
|
||||
LANG=${config.i18n.defaultLocale}${
|
||||
lib.optionalString (config.i18n.glibcLocales != null) ''
|
||||
\
|
||||
LOCALE_ARCHIVE=${config.i18n.glibcLocales}/lib/locale/locale-archive
|
||||
''
|
||||
}
|
||||
' $out/sesman.ini
|
||||
|
||||
${cfg.extraConfDirCommands}
|
||||
|
||||
@@ -58,7 +58,11 @@
|
||||
--set DISTRO_ID ${lib.escapeShellArg config.system.nixos.distroId} \
|
||||
--set INSTALL_BOOTLOADER ${lib.escapeShellArg config.system.build.installBootLoader} \
|
||||
--set PRE_SWITCH_CHECK ${lib.escapeShellArg config.system.preSwitchChecksScript} \
|
||||
--set LOCALE_ARCHIVE ${config.i18n.glibcLocales}/lib/locale/locale-archive \
|
||||
${
|
||||
lib.optionalString (
|
||||
config.i18n.glibcLocales != null
|
||||
) "--set LOCALE_ARCHIVE ${config.i18n.glibcLocales}/lib/locale/locale-archive"
|
||||
} \
|
||||
--set SYSTEMD ${config.systemd.package}
|
||||
)
|
||||
'';
|
||||
|
||||
@@ -351,7 +351,6 @@ in
|
||||
# Legacy environment variables. These were used by the activation script,
|
||||
# but some other script might still depend on them, although unlikely.
|
||||
installBootLoader = config.system.build.installBootLoader;
|
||||
localeArchive = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
|
||||
distroId = config.system.nixos.distroId;
|
||||
perl = pkgs.perl.withPackages (
|
||||
p: with p; [
|
||||
@@ -374,6 +373,9 @@ in
|
||||
# option, as opposed to `system.extraDependencies`.
|
||||
passedChecks = concatStringsSep " " config.system.checks;
|
||||
}
|
||||
// lib.optionalAttrs (config.i18n.glibcLocales != null) {
|
||||
localeArchive = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
|
||||
}
|
||||
// lib.optionalAttrs (config.system.forbiddenDependenciesRegexes != [ ]) {
|
||||
closureInfo = pkgs.closureInfo {
|
||||
rootPaths = [
|
||||
|
||||
Reference in New Issue
Block a user