move locale, add host option

This commit is contained in:
2025-12-21 22:20:19 +02:00
parent 17246b3ccb
commit 6243330c4b
5 changed files with 75 additions and 181 deletions
+22 -62
View File
@@ -1,78 +1,38 @@
{ {
inputs, inputs,
lib,
pkgs, pkgs,
lib,
... ...
}: { }: {
imports = with inputs; [ imports = with inputs.self;
self.modules.shared.nixos [modules.shared.nixos nixosModules.desktop nixosModules.system]
self.nixosModules.desktop ++ [./disko ./misc];
self.nixosModules.system
./disko
./misc
];
networking = { desktop.dms.enable = true;
hostId = "c7f6c4a1";
hostName = "dunamis";
};
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true;
services.displayManager.autoLogin = { services.displayManager.autoLogin = {
enable = true; enable = true;
user = "user"; user = "user";
}; };
environment.systemPackages = [pkgs.labwc]; services.mullvad-vpn = {
services.xserver = {
enable = true; enable = true;
desktopManager = { package = pkgs.mullvad-vpn;
xterm.enable = false; };
xfce = {
module = (
lib.attrsets.recursiveUpdate
(builtins.fromTOML (builtins.readFile ./host.toml))
{
stylix = {
enable = true; enable = true;
noDesktop = true; theme = "ashes";
enableXfwm = false; polarity = "dark";
}; };
}; misc.opentabletdriver.enable = false;
# windowManager.i3.enable = true; misc.qmk-vial.enable = true;
}; virt.libvirt.enable = true;
# services.displayManager.defaultSession = "xfce"; virt.podman.enable = true;
}
networking.firewall.allowedTCPPorts = [3923 3921 3990]; # for github:9001/copyparty );
networking.networkmanager.enable = lib.mkDefault false;
systemd.network.networks."10-wan" = {
matchConfig.Name = "enp8s0";
networkConfig = {
# start a DHCP Client for IPv4 Addressing/Routing
DHCP = "ipv4";
# accept Router Advertisements for Stateless IPv6 Autoconfiguraton (SLAAC)
IPv6AcceptRA = true;
};
# make routing on this interface a dependency for network-online.target
linkConfig.RequiredForOnline = "routable";
};
module = {
config = {
secureBoot = true;
tpmDiskUnlock = true;
vaapi = "intel-media-driver";
};
stylix = {
enable = true;
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
misc = {
opentabletdriver.enable = false;
qmk-vial.enable = true;
};
virt.libvirt.enable = true;
virt.podman.enable = true;
};
} }
+12
View File
@@ -0,0 +1,12 @@
[host]
name = "dunamis"
id = "c7f6c4a1"
type = "workstation"
stateVersion = "24.11"
[config]
locale = "uk_UA.UTF-8"
timeZone = "Europe/Kyiv"
# secureBoot = true
tpmDiskUnlock = true
-1
View File
@@ -1,7 +1,6 @@
{ {
imports = [ imports = [
./common.nix ./common.nix
./locale.nix
./misc ./misc
./stylix ./stylix
./virt ./virt
+29 -113
View File
@@ -5,7 +5,7 @@
pkgs, pkgs,
... ...
}: let }: let
inherit (lib) mkDefault mkEnableOption mkIf; inherit (lib) mkDefault mkOption mkEnableOption mkIf;
cfg = config.module.config; cfg = config.module.config;
in { in {
imports = [ imports = [
@@ -15,12 +15,27 @@ in {
./networking ./networking
./nix ./nix
./security ./security
./locale.nix
./programs.nix ./programs.nix
./services.nix ./services.nix
./users.nix
./sops.nix ./sops.nix
./users.nix
]; ];
options = { options = {
module.host = {
name = mkOption {
type = lib.types.str;
};
id = mkOption {
type = lib.types.strMatching "[a-z0-9]{8}";
};
stateVersion = mkOption {
type = lib.types.strMatching ''[0-9]{2}\.[0-9]{2}'';
};
type = mkOption {
type = lib.types.enum ["laptop" "server" "workstation"];
};
};
module.config = { module.config = {
laptop.homeRowMods = mkEnableOption "set to have mods on asdfjkl;"; laptop.homeRowMods = mkEnableOption "set to have mods on asdfjkl;";
powerSave = mkEnableOption "set to use various power saving daemons"; powerSave = mkEnableOption "set to use various power saving daemons";
@@ -34,121 +49,22 @@ in {
}; };
}; };
config = lib.mkMerge [ config = lib.mkMerge [
{
system.stateVersion = config.module.host.stateVersion;
networking = {
hostName = config.module.host.name;
hostId = config.module.host.id;
};
}
{ {
boot.initrd.systemd.tpm2.enable = mkDefault cfg.tpmDiskUnlock; boot.initrd.systemd.tpm2.enable = mkDefault cfg.tpmDiskUnlock;
boot.loader.systemd-boot.enable = mkDefault (!cfg.secureBoot); boot.loader.systemd-boot.enable = mkDefault (!cfg.secureBoot);
} }
(mkIf (cfg.laptop.homeRowMods) { (mkIf (cfg.laptop.homeRowMods)
services.kanata.keyboards.internal.config = '' # lib.asserts.assertMsg (config.services.kanata.enable != config.services.keyd.enable) "Kanata and keyd create soft lock when both enabled"
;; Kanata Configuration File for Graphite Anglemod Layout {
services.kanata.keyboards.internal.config = builtins.readFile ./kanata/internal.kbd;
;; Add a default configuration section to define unmapped key behavior. })
(defcfg
process-unmapped-keys no ;; Ensure unmapped keys are passed to the OS unchanged.
)
;; Define the source keys Kanata will intercept.
(defsrc
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ] \
caps a s d f g h j k l ; ' ret
lsft z x c v b n m , . / rsft
lctl lmet lalt spc ralt rmet rctl
)
(defvar
tap-time 150
hold-time 200
)
;; Default QWERTY Layout
(deflayer qwerty
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ] \
caps a s d f g h j k l ; ' ret
lsft z x c v b n m , . / rsft
lctl lmet lalt spc ralt rmet rctl
)
(defalias
escctrl (tap-hold 100 100 esc lctl)
a (multi f24 (tap-hold $tap-time $hold-time a lalt))
s (multi f24 (tap-hold $tap-time $hold-time s lmet))
d (multi f24 (tap-hold $tap-time $hold-time d lctl))
f (multi f24 (tap-hold $tap-time $hold-time f lsft))
x (multi f24 (tap-hold $tap-time $hold-time x ralt))
j (multi f24 (tap-hold $tap-time $hold-time j lsft))
k (multi f24 (tap-hold $tap-time $hold-time k lctl))
l (multi f24 (tap-hold $tap-time $hold-time l lmet))
; (multi f24 (tap-hold $tap-time $hold-time ; lalt))
. (multi f24 (tap-hold $tap-time $hold-time . ralt))
)
;; QWERTY Layout with home row mods
(deflayer qwerty-home-mod
@grl 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ] \
@esscctrl @a @s @d @f g h @j @k @l @; ' ret
lsft z @x c v b n m , @. / rsft
lctl lmet lalt spc ralt rmet rctl
)
(defalias
quote (fork ' S-- (lsft rsft)) ;; ' -> _
comma (fork , S-/ (lsft rsft)) ;; , -> ?
hyphen (fork - S-' (lsft rsft)) ;; - -> "
slash (fork / S-, (lsft rsft)) ;; / -> <
)
(defalias
n (multi f24 (tap-hold $tap-time $hold-time n lalt))
r (multi f24 (tap-hold $tap-time $hold-time r lmet))
t (multi f24 (tap-hold $tap-time $hold-time t lctl))
gs (multi f24 (tap-hold $tap-time $hold-time s lsft))
m (multi f24 (tap-hold $tap-time $hold-time m ralt))
h (multi f24 (tap-hold $tap-time $hold-time h lsft))
ga (multi f24 (tap-hold $tap-time $hold-time a lctl))
e (multi f24 (tap-hold $tap-time $hold-time e lmet))
i (multi f24 (tap-hold $tap-time $hold-time i lalt))
hyph (multi f24 (tap-hold $tap-time $hold-time @hyphen ralt))
)
;; Graphite Anglemod Layout
(deflayer graphite-anglemod
@grl 1 2 3 4 5 6 7 8 9 0 [ ] bspc
tab b l d w z @quote f o u j ; = \
@cap @n @r @t @gs g y @h @ga @e @i @comma ret
lsft x @m c v q p k . @hyph @slash rsft
lctl lmet lalt spc ralt rmet rctl
)
;; Define layer-switching aliases for clean deflayer declarations
(defalias
;; Tap: backtick (grave), Hold: toggles 'layers' for layer switching.
grl (tap-hold 200 200 grv (layer-toggle layers))
;; Layer-switch aliases
gar (layer-switch graphite-anglemod)
qwr (layer-switch qwerty)
qwm (layer-switch qwerty-home-mod)
;; Tap for Caps Lock, Hold for Ctrl
cap (tap-hold 200 200 caps lctl)
)
;; Layer-Switching Layer
;; Keys 1 and 2 switch between QWERTY and Graphite Anglemod layouts
;; The _ (underscore) indicates transparent behavior (passes through base layer).
(deflayer layers
_ @qwm @gar @qwr _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _
)
'';
})
(mkIf (cfg.powerSave) { (mkIf (cfg.powerSave) {
powerManagement.enable = true; powerManagement.enable = true;
powerManagement.powertop.enable = true; powerManagement.powertop.enable = true;
@@ -6,15 +6,22 @@
inherit (lib) types mkOption; inherit (lib) types mkOption;
in { in {
options = { options = {
module.locale = mkOption { module.config = {
type = types.strMatching "[a-z]{2}_[A-Z]{2}\\.UTF-8"; locale = mkOption {
default = "en_US.UTF-8"; type = types.strMatching "[a-z]{2}_[A-Z]{2}\\.UTF-8";
description = "set locale"; default = "en_US.UTF-8";
description = "set locale";
};
timeZone = mkOption {
type = types.str;
default = "Europe/Kyiv";
};
}; };
}; };
config = { config = {
time.timeZone = config.module.config.timeZone;
i18n = let i18n = let
inherit (config.module) locale; inherit (config.module.config) locale;
in { in {
defaultLocale = locale; defaultLocale = locale;
extraLocaleSettings = { extraLocaleSettings = {