move locale, add host option
This commit is contained in:
@@ -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 = {
|
|
||||||
enable = true;
|
|
||||||
noDesktop = true;
|
|
||||||
enableXfwm = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# windowManager.i3.enable = true;
|
|
||||||
};
|
|
||||||
# services.displayManager.defaultSession = "xfce";
|
|
||||||
|
|
||||||
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 = {
|
module = (
|
||||||
config = {
|
lib.attrsets.recursiveUpdate
|
||||||
secureBoot = true;
|
(builtins.fromTOML (builtins.readFile ./host.toml))
|
||||||
tpmDiskUnlock = true;
|
{
|
||||||
vaapi = "intel-media-driver";
|
|
||||||
};
|
|
||||||
stylix = {
|
stylix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
theme = "sandcastle";
|
theme = "ashes";
|
||||||
};
|
polarity = "dark";
|
||||||
locale = "uk_UA.UTF-8";
|
|
||||||
misc = {
|
|
||||||
opentabletdriver.enable = false;
|
|
||||||
qmk-vial.enable = true;
|
|
||||||
};
|
};
|
||||||
|
misc.opentabletdriver.enable = false;
|
||||||
|
misc.qmk-vial.enable = true;
|
||||||
virt.libvirt.enable = true;
|
virt.libvirt.enable = true;
|
||||||
virt.podman.enable = true;
|
virt.podman.enable = true;
|
||||||
};
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./common.nix
|
./common.nix
|
||||||
./locale.nix
|
|
||||||
./misc
|
./misc
|
||||||
./stylix
|
./stylix
|
||||||
./virt
|
./virt
|
||||||
|
|||||||
@@ -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,120 +49,21 @@ 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;
|
||||||
|
|||||||
@@ -6,15 +6,22 @@
|
|||||||
inherit (lib) types mkOption;
|
inherit (lib) types mkOption;
|
||||||
in {
|
in {
|
||||||
options = {
|
options = {
|
||||||
module.locale = mkOption {
|
module.config = {
|
||||||
|
locale = mkOption {
|
||||||
type = types.strMatching "[a-z]{2}_[A-Z]{2}\\.UTF-8";
|
type = types.strMatching "[a-z]{2}_[A-Z]{2}\\.UTF-8";
|
||||||
default = "en_US.UTF-8";
|
default = "en_US.UTF-8";
|
||||||
description = "set locale";
|
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 = {
|
||||||
Reference in New Issue
Block a user