diff --git a/nixos/doc/manual/release-notes/rl-2003.xml b/nixos/doc/manual/release-notes/rl-2003.xml
index 247e9cd063c6..1c9d6b957155 100644
--- a/nixos/doc/manual/release-notes/rl-2003.xml
+++ b/nixos/doc/manual/release-notes/rl-2003.xml
@@ -140,18 +140,18 @@ services.xserver.displayManager.defaultSession = "xfce+icewm";
- The 99-main.network file was removed. Maching all
- network interfaces caused many breakages, see
- #18962
- and #71106.
+ The 99-main.network file was removed. Maching all
+ network interfaces caused many breakages, see
+ #18962
+ and #71106.
- We already don't support the global networking.useDHCP,
- networking.defaultGateway and
- networking.defaultGateway6 options
- if networking.useNetworkd is enabled,
- but direct users to configure the per-device
- networking.interfaces.<name>.… options.
+ We already don't support the global networking.useDHCP,
+ networking.defaultGateway and
+ networking.defaultGateway6 options
+ if networking.useNetworkd is enabled,
+ but direct users to configure the per-device
+ networking.interfaces.<name>.… options.
@@ -264,6 +264,57 @@ services.xserver.displayManager.defaultSession = "xfce+icewm";
in container config.
+
+
+ Virtual console options have been reorganized and can be found under
+ a single top-level attribute: console.
+ The full set of changes is as follows:
+
+
+
+
+ i18n.consoleFont renamed to
+ console.font
+
+
+
+
+ i18n.consoleKeyMap renamed to
+ console.keyMap
+
+
+
+
+ i18n.consoleColors renamed to
+ console.colors
+
+
+
+
+ i18n.consolePackages renamed to
+ console.packages
+
+
+
+
+ i18n.consoleUseXkbConfig renamed to
+ console.useXkbConfig
+
+
+
+
+ boot.earlyVconsoleSetup renamed to
+ console.earlySetup
+
+
+
+
+ boot.extraTTYs renamed to
+ console.extraTTYs
+
+
+
+
diff --git a/nixos/modules/config/console.nix b/nixos/modules/config/console.nix
new file mode 100644
index 000000000000..f662ed62d31d
--- /dev/null
+++ b/nixos/modules/config/console.nix
@@ -0,0 +1,203 @@
+
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.console;
+
+ makeColor = i: concatMapStringsSep "," (x: "0x" + substring (2*i) 2 x);
+
+ isUnicode = hasSuffix "UTF-8" (toUpper config.i18n.defaultLocale);
+
+ optimizedKeymap = pkgs.runCommand "keymap" {
+ nativeBuildInputs = [ pkgs.buildPackages.kbd ];
+ LOADKEYS_KEYMAP_PATH = "${consoleEnv}/share/keymaps/**";
+ preferLocalBuild = true;
+ } ''
+ loadkeys -b ${optionalString isUnicode "-u"} "${cfg.keyMap}" > $out
+ '';
+
+ # Sadly, systemd-vconsole-setup doesn't support binary keymaps.
+ vconsoleConf = pkgs.writeText "vconsole.conf" ''
+ KEYMAP=${cfg.keyMap}
+ FONT=${cfg.font}
+ '';
+
+ consoleEnv = pkgs.buildEnv {
+ name = "console-env";
+ paths = [ pkgs.kbd ] ++ cfg.packages;
+ pathsToLink = [
+ "/share/consolefonts"
+ "/share/consoletrans"
+ "/share/keymaps"
+ "/share/unimaps"
+ ];
+ };
+
+ setVconsole = !config.boot.isContainer;
+in
+
+{
+ ###### interface
+
+ options.console = {
+ font = mkOption {
+ type = types.str;
+ default = "Lat2-Terminus16";
+ example = "LatArCyrHeb-16";
+ description = ''
+ The font used for the virtual consoles. Leave empty to use
+ whatever the setfont program considers the
+ default font.
+ '';
+ };
+
+ keyMap = mkOption {
+ type = with types; either str path;
+ default = "us";
+ example = "fr";
+ description = ''
+ The keyboard mapping table for the virtual consoles.
+ '';
+ };
+
+ colors = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [
+ "002b36" "dc322f" "859900" "b58900"
+ "268bd2" "d33682" "2aa198" "eee8d5"
+ "002b36" "cb4b16" "586e75" "657b83"
+ "839496" "6c71c4" "93a1a1" "fdf6e3"
+ ];
+ description = ''
+ The 16 colors palette used by the virtual consoles.
+ Leave empty to use the default colors.
+ Colors must be in hexadecimal format and listed in
+ order from color 0 to color 15.
+ '';
+
+ };
+
+ packages = mkOption {
+ type = types.listOf types.package;
+ default = with pkgs.kbdKeymaps; [ dvp neo ];
+ defaultText = ''with pkgs.kbdKeymaps; [ dvp neo ]'';
+ description = ''
+ List of additional packages that provide console fonts, keymaps and
+ other resources for virtual consoles use.
+ '';
+ };
+
+ extraTTYs = mkOption {
+ default = [];
+ type = types.listOf types.str;
+ example = ["tty8" "tty9"];
+ description = ''
+ TTY (virtual console) devices, in addition to the consoles on
+ which mingetty and syslogd run, that must be initialised.
+ Only useful if you have some program that you want to run on
+ some fixed console. For example, the NixOS installation CD
+ opens the manual in a web browser on console 7, so it sets
+ to ["tty7"].
+ '';
+ };
+
+ useXkbConfig = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ If set, configure the virtual console keymap from the xserver
+ keyboard settings.
+ '';
+ };
+
+ earlySetup = mkOption {
+ default = false;
+ type = types.bool;
+ description = ''
+ Enable setting virtual console options as early as possible (in initrd).
+ '';
+ };
+
+ };
+
+
+ ###### implementation
+
+ config = mkMerge [
+ { console.keyMap = with config.services.xserver;
+ mkIf cfg.useXkbConfig
+ (pkgs.runCommand "xkb-console-keymap" { preferLocalBuild = true; } ''
+ '${pkgs.ckbcomp}/bin/ckbcomp' -model '${xkbModel}' -layout '${layout}' \
+ -option '${xkbOptions}' -variant '${xkbVariant}' > "$out"
+ '');
+ }
+
+ (mkIf (!setVconsole) {
+ systemd.services.systemd-vconsole-setup.enable = false;
+ })
+
+ (mkIf setVconsole (mkMerge [
+ { environment.systemPackages = [ pkgs.kbd ];
+
+ # Let systemd-vconsole-setup.service do the work of setting up the
+ # virtual consoles.
+ environment.etc."vconsole.conf".source = vconsoleConf;
+ # Provide kbd with additional packages.
+ environment.etc.kbd.source = "${consoleEnv}/share";
+
+ boot.initrd.preLVMCommands = mkBefore ''
+ kbd_mode ${if isUnicode then "-u" else "-a"} -C /dev/console
+ printf "\033%%${if isUnicode then "G" else "@"}" >> /dev/console
+ loadkmap < ${optimizedKeymap}
+
+ ${optionalString cfg.earlySetup ''
+ setfont -C /dev/console $extraUtils/share/consolefonts/font.psf
+ ''}
+ '';
+
+ systemd.services.systemd-vconsole-setup =
+ { before = [ "display-manager.service" ];
+ after = [ "systemd-udev-settle.service" ];
+ restartTriggers = [ vconsoleConf consoleEnv ];
+ };
+ }
+
+ (mkIf (cfg.colors != []) {
+ boot.kernelParams = [
+ "vt.default_red=${makeColor 0 cfg.colors}"
+ "vt.default_grn=${makeColor 1 cfg.colors}"
+ "vt.default_blu=${makeColor 2 cfg.colors}"
+ ];
+ })
+
+ (mkIf cfg.earlySetup {
+ boot.initrd.extraUtilsCommands = ''
+ mkdir -p $out/share/consolefonts
+ ${if substring 0 1 cfg.font == "/" then ''
+ font="${cfg.font}"
+ '' else ''
+ font="$(echo ${consoleEnv}/share/consolefonts/${cfg.font}.*)"
+ ''}
+ if [[ $font == *.gz ]]; then
+ gzip -cd $font > $out/share/consolefonts/font.psf
+ else
+ cp -L $font $out/share/consolefonts/font.psf
+ fi
+ '';
+ })
+ ]))
+ ];
+
+ imports = [
+ (mkRenamedOptionModule [ "i18n" "consoleFont" ] [ "console" "font" ])
+ (mkRenamedOptionModule [ "i18n" "consoleKeyMap" ] [ "console" "keyMap" ])
+ (mkRenamedOptionModule [ "i18n" "consoleColors" ] [ "console" "colors" ])
+ (mkRenamedOptionModule [ "i18n" "consolePackages" ] [ "console" "packages" ])
+ (mkRenamedOptionModule [ "i18n" "consoleUseXkbConfig" ] [ "console" "useXkbConfig" ])
+ (mkRenamedOptionModule [ "boot" "earlyVconsoleSetup" ] [ "console" "earlySetup" ])
+ (mkRenamedOptionModule [ "boot" "extraTTYs" ] [ "console" "extraTTYs" ])
+ ];
+}
diff --git a/nixos/modules/config/i18n.nix b/nixos/modules/config/i18n.nix
index d0db8fedecd8..45691f4839c8 100644
--- a/nixos/modules/config/i18n.nix
+++ b/nixos/modules/config/i18n.nix
@@ -58,62 +58,6 @@ with lib;
'';
};
- consolePackages = mkOption {
- type = types.listOf types.package;
- default = with pkgs.kbdKeymaps; [ dvp neo ];
- defaultText = ''with pkgs.kbdKeymaps; [ dvp neo ]'';
- description = ''
- List of additional packages that provide console fonts, keymaps and
- other resources.
- '';
- };
-
- consoleFont = mkOption {
- type = types.str;
- default = "Lat2-Terminus16";
- example = "LatArCyrHeb-16";
- description = ''
- The font used for the virtual consoles. Leave empty to use
- whatever the setfont program considers the
- default font.
- '';
- };
-
- consoleUseXkbConfig = mkOption {
- type = types.bool;
- default = false;
- description = ''
- If set, configure the console keymap from the xserver keyboard
- settings.
- '';
- };
-
- consoleKeyMap = mkOption {
- type = with types; either str path;
- default = "us";
- example = "fr";
- description = ''
- The keyboard mapping table for the virtual consoles.
- '';
- };
-
- consoleColors = mkOption {
- type = types.listOf types.str;
- default = [];
- example = [
- "002b36" "dc322f" "859900" "b58900"
- "268bd2" "d33682" "2aa198" "eee8d5"
- "002b36" "cb4b16" "586e75" "657b83"
- "839496" "6c71c4" "93a1a1" "fdf6e3"
- ];
- description = ''
- The 16 colors palette used by the virtual consoles.
- Leave empty to use the default colors.
- Colors must be in hexadecimal format and listed in
- order from color 0 to color 15.
- '';
- };
-
};
};
@@ -123,13 +67,6 @@ with lib;
config = {
- 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"
- '');
-
environment.systemPackages =
optional (config.i18n.supportedLocales != []) config.i18n.glibcLocales;
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index c4acc15a58a8..7650da89cbdd 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -11,6 +11,7 @@
./config/xdg/mime.nix
./config/xdg/portal.nix
./config/appstream.nix
+ ./config/console.nix
./config/xdg/sounds.nix
./config/gtk/gtk-icon-cache.nix
./config/gnu.nix
@@ -939,7 +940,6 @@
./tasks/filesystems/vfat.nix
./tasks/filesystems/xfs.nix
./tasks/filesystems/zfs.nix
- ./tasks/kbd.nix
./tasks/lvm.nix
./tasks/network-interfaces.nix
./tasks/network-interfaces-systemd.nix
diff --git a/nixos/modules/tasks/kbd.nix b/nixos/modules/tasks/kbd.nix
deleted file mode 100644
index c6ba998b19e6..000000000000
--- a/nixos/modules/tasks/kbd.nix
+++ /dev/null
@@ -1,127 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-with lib;
-
-let
-
- makeColor = n: value: "COLOR_${toString n}=${value}";
- makeColorCS =
- let positions = [ "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" ];
- in n: value: "\\033]P${elemAt positions (n - 1)}${value}";
- colors = concatImapStringsSep "\n" makeColor config.i18n.consoleColors;
-
- isUnicode = hasSuffix "UTF-8" (toUpper config.i18n.defaultLocale);
-
- optimizedKeymap = pkgs.runCommand "keymap" {
- nativeBuildInputs = [ pkgs.buildPackages.kbd ];
- LOADKEYS_KEYMAP_PATH = "${kbdEnv}/share/keymaps/**";
- preferLocalBuild = true;
- } ''
- loadkeys -b ${optionalString isUnicode "-u"} "${config.i18n.consoleKeyMap}" > $out
- '';
-
- # Sadly, systemd-vconsole-setup doesn't support binary keymaps.
- vconsoleConf = pkgs.writeText "vconsole.conf" ''
- KEYMAP=${config.i18n.consoleKeyMap}
- FONT=${config.i18n.consoleFont}
- ${colors}
- '';
-
- kbdEnv = pkgs.buildEnv {
- name = "kbd-env";
- paths = [ pkgs.kbd ] ++ config.i18n.consolePackages;
- pathsToLink = [ "/share/consolefonts" "/share/consoletrans" "/share/keymaps" "/share/unimaps" ];
- };
-
- setVconsole = !config.boot.isContainer;
-in
-
-{
- ###### interface
-
- options = {
-
- # most options are defined in i18n.nix
-
- # FIXME: still needed?
- boot.extraTTYs = mkOption {
- default = [];
- type = types.listOf types.str;
- example = ["tty8" "tty9"];
- description = ''
- Tty (virtual console) devices, in addition to the consoles on
- which mingetty and syslogd run, that must be initialised.
- Only useful if you have some program that you want to run on
- some fixed console. For example, the NixOS installation CD
- opens the manual in a web browser on console 7, so it sets
- to ["tty7"].
- '';
- };
-
- boot.earlyVconsoleSetup = mkOption {
- default = false;
- type = types.bool;
- description = ''
- Enable setting font as early as possible (in initrd).
- '';
- };
-
- };
-
-
- ###### implementation
-
- config = mkMerge [
- (mkIf (!setVconsole) {
- systemd.services.systemd-vconsole-setup.enable = false;
- })
-
- (mkIf setVconsole (mkMerge [
- { environment.systemPackages = [ pkgs.kbd ];
-
- # Let systemd-vconsole-setup.service do the work of setting up the
- # virtual consoles.
- environment.etc."vconsole.conf".source = vconsoleConf;
- # Provide kbd with additional packages.
- environment.etc.kbd.source = "${kbdEnv}/share";
-
- boot.initrd.preLVMCommands = mkBefore ''
- kbd_mode ${if isUnicode then "-u" else "-a"} -C /dev/console
- printf "\033%%${if isUnicode then "G" else "@"}" >> /dev/console
- loadkmap < ${optimizedKeymap}
-
- ${optionalString config.boot.earlyVconsoleSetup ''
- setfont -C /dev/console $extraUtils/share/consolefonts/font.psf
- ''}
-
- ${concatImapStringsSep "\n" (n: color: ''
- printf "${makeColorCS n color}" >> /dev/console
- '') config.i18n.consoleColors}
- '';
-
- systemd.services.systemd-vconsole-setup =
- { before = [ "display-manager.service" ];
- after = [ "systemd-udev-settle.service" ];
- restartTriggers = [ vconsoleConf kbdEnv ];
- };
- }
-
- (mkIf config.boot.earlyVconsoleSetup {
- boot.initrd.extraUtilsCommands = ''
- mkdir -p $out/share/consolefonts
- ${if substring 0 1 config.i18n.consoleFont == "/" then ''
- font="${config.i18n.consoleFont}"
- '' else ''
- font="$(echo ${kbdEnv}/share/consolefonts/${config.i18n.consoleFont}.*)"
- ''}
- if [[ $font == *.gz ]]; then
- gzip -cd $font > $out/share/consolefonts/font.psf
- else
- cp -L $font $out/share/consolefonts/font.psf
- fi
- '';
- })
- ]))
- ];
-
-}