{ config, lib, ... }: let cfg = config.soispha.locale; in { options.soispha.locale = { enable = lib.mkEnableOption "locale setup"; keyMap = lib.mkOption { type = lib.types.str; example = "us"; default = "dvorak"; description = "The console key map language to use"; }; timeZone = lib.mkOption { type = lib.types.str; default = "Europe/Berlin"; description = "The time zone to use"; }; }; config = lib.mkIf cfg.enable { time = { inherit (cfg) timeZone; }; i18n = { defaultLocale = "en_CA.UTF-8"; extraLocaleSettings = { LANGUAGE = "en_CA:en_US:en"; LC_TIME = "en_DK.UTF-8"; LC_COLLATE = "C.UTF-8"; }; }; # Layout console = { inherit (cfg) keyMap; }; services.xserver.xkb.extraLayouts = { "us-modified" = { description = "standard us with caps as compose key."; languages = ["eng" "swe" "deu"]; symbolsFile = ./keymaps/us_modified.xkb; }; "dvorak-modified" = { description = "standard dvorak english with german and swedish extra chars."; languages = ["eng" "swe" "deu"]; symbolsFile = ./keymaps/dvorak_modified.xkb; }; }; }; }