2014-04-14 16:26:48 +02:00
|
|
|
|
{ config, lib, pkgs, ... }:
|
2012-07-24 19:53:17 +02:00
|
|
|
|
|
2014-04-14 16:26:48 +02:00
|
|
|
|
with lib;
|
2009-03-06 13:25:38 +01:00
|
|
|
|
|
|
|
|
|
let
|
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
glibcLocales = pkgs.glibcLocales.override {
|
|
|
|
|
allLocales = any (x: x == "all") config.i18n.supportedLocales;
|
|
|
|
|
locales = config.i18n.supportedLocales;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
in
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
###### interface
|
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
options = {
|
2013-09-04 13:05:09 +02:00
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
i18n = {
|
|
|
|
|
defaultLocale = mkOption {
|
2013-10-30 17:37:45 +01:00
|
|
|
|
type = types.str;
|
2009-03-06 13:25:38 +01:00
|
|
|
|
default = "en_US.UTF-8";
|
|
|
|
|
example = "nl_NL.UTF-8";
|
2013-10-30 17:37:45 +01:00
|
|
|
|
description = ''
|
2009-03-06 13:25:38 +01:00
|
|
|
|
The default locale. It determines the language for program
|
|
|
|
|
messages, the format for dates and times, sort order, and so on.
|
|
|
|
|
It also determines the character set, such as UTF-8.
|
2013-10-30 17:37:45 +01:00
|
|
|
|
'';
|
2009-03-06 13:25:38 +01:00
|
|
|
|
};
|
|
|
|
|
|
2009-06-05 19:19:30 +02:00
|
|
|
|
supportedLocales = mkOption {
|
2013-10-30 17:37:45 +01:00
|
|
|
|
type = types.listOf types.str;
|
2009-06-05 19:19:30 +02:00
|
|
|
|
default = ["all"];
|
|
|
|
|
example = ["en_US.UTF-8/UTF-8" "nl_NL.UTF-8/UTF-8" "nl_NL/ISO-8859-1"];
|
|
|
|
|
description = ''
|
|
|
|
|
List of locales that the system should support. The value
|
|
|
|
|
<literal>"all"</literal> means that all locales supported by
|
|
|
|
|
Glibc will be installed. A full list of supported locales
|
|
|
|
|
can be found at <link
|
|
|
|
|
xlink:href="http://sourceware.org/cgi-bin/cvsweb.cgi/libc/localedata/SUPPORTED?cvsroot=glibc"/>.
|
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
consoleFont = mkOption {
|
2013-10-30 17:37:45 +01:00
|
|
|
|
type = types.str;
|
2015-06-09 20:11:41 +02:00
|
|
|
|
default = "Lat2-Terminus16";
|
2009-03-06 13:25:38 +01:00
|
|
|
|
example = "LatArCyrHeb-16";
|
2013-10-30 17:37:45 +01:00
|
|
|
|
description = ''
|
2009-03-06 13:25:38 +01:00
|
|
|
|
The font used for the virtual consoles. Leave empty to use
|
|
|
|
|
whatever the <command>setfont</command> program considers the
|
|
|
|
|
default font.
|
2013-10-30 17:37:45 +01:00
|
|
|
|
'';
|
2009-03-06 13:25:38 +01:00
|
|
|
|
};
|
|
|
|
|
|
2015-09-06 08:43:57 +02:00
|
|
|
|
consoleUseXkbConfig = mkOption {
|
|
|
|
|
type = types.bool;
|
|
|
|
|
default = false;
|
|
|
|
|
description = ''
|
|
|
|
|
If set, configure the console keymap from the xserver keyboard
|
|
|
|
|
settings.
|
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
consoleKeyMap = mkOption {
|
2014-02-17 20:46:33 +01:00
|
|
|
|
type = mkOptionType {
|
|
|
|
|
name = "string or path";
|
|
|
|
|
check = t: (isString t || types.path.check t);
|
|
|
|
|
};
|
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
default = "us";
|
|
|
|
|
example = "fr";
|
2013-10-30 17:37:45 +01:00
|
|
|
|
description = ''
|
2009-03-06 13:25:38 +01:00
|
|
|
|
The keyboard mapping table for the virtual consoles.
|
2013-10-30 17:37:45 +01:00
|
|
|
|
'';
|
2009-03-06 13:25:38 +01:00
|
|
|
|
};
|
2012-10-18 17:54:07 +02:00
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
};
|
2012-10-18 17:54:07 +02:00
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
};
|
2012-10-18 17:54:07 +02:00
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
###### implementation
|
2009-06-05 19:19:30 +02:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
config = {
|
2009-06-05 19:19:30 +02:00
|
|
|
|
|
2015-09-06 08:43:57 +02:00
|
|
|
|
i18n.consoleKeyMap = with config.services.xserver;
|
|
|
|
|
mkIf config.i18n.consoleUseXkbConfig
|
|
|
|
|
(pkgs.runCommand "xkb-console-keymap" { preferLocalBuild = true; } ''
|
|
|
|
|
'${pkgs.ckbcomp}/bin/ckbcomp' -model '${xkbModel}' -layout '${layout}' \
|
|
|
|
|
-option '${xkbOptions}' -variant '${xkbVariant}' > "$out"
|
|
|
|
|
'');
|
|
|
|
|
|
2015-04-19 22:45:08 +02:00
|
|
|
|
environment.systemPackages =
|
|
|
|
|
optional (config.i18n.supportedLocales != []) glibcLocales;
|
2009-06-05 19:19:30 +02:00
|
|
|
|
|
2014-06-13 17:56:46 +02:00
|
|
|
|
environment.sessionVariables =
|
2014-04-18 19:03:50 +02:00
|
|
|
|
{ LANG = config.i18n.defaultLocale;
|
|
|
|
|
LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive";
|
|
|
|
|
};
|
|
|
|
|
|
2015-04-19 22:45:08 +02:00
|
|
|
|
systemd.globalEnvironment = mkIf (config.i18n.supportedLocales != []) {
|
|
|
|
|
LOCALE_ARCHIVE = "${glibcLocales}/lib/locale/locale-archive";
|
|
|
|
|
};
|
2009-06-05 19:19:30 +02:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
# ‘/etc/locale.conf’ is used by systemd.
|
|
|
|
|
environment.etc = singleton
|
|
|
|
|
{ target = "locale.conf";
|
|
|
|
|
source = pkgs.writeText "locale.conf"
|
|
|
|
|
''
|
|
|
|
|
LANG=${config.i18n.defaultLocale}
|
|
|
|
|
'';
|
|
|
|
|
};
|
2012-07-24 19:53:17 +02:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
};
|
2009-03-06 13:25:38 +01:00
|
|
|
|
}
|