OOKNET                             [ /  search the index  ]  
──────────────────────────────────────────────────────────────────────────────────────
══════════════════════════════════════════════════════════════════════════════════════
OOKNET   [ /  search  ]  
────────────────────────────────────────────────
════════════════════════════════════════════════
 
HASH      512482d85f62
DATE      2025-10-24
SUBJECT   refactor: globally import all options
FILES     17 CHANGED
HASH      512482d85f62
DATE      2025-10-24
SUBJECT   refactor: globally import all options
FILES     17 CHANGED
 

diff --git a/modules/common/base/default.nix b/modules/common/base/default.nix
index 1d0f493..6f7b869 100644
--- a/modules/common/base/default.nix
+++ b/modules/common/base/default.nix
@@ -7,6 +7,5 @@
     ./home-manager.nix
     ./locale.nix
     ./nix.nix
-    ./options.nix
   ];
 }

diff --git a/modules/common/base/default.nix
 b/modules/common/base/default.nix
index 1d0f493..6f7b869 100644
--- a/modules/common/base/default.nix
+++ b/modules/common/base/default.nix
@@ -7,6 +7,5 @@
     ./home-manager.nix
     ./locale.nix
     ./nix.nix
-    ./options.nix
   ];
 }
 

diff --git a/modules/common/console/default.nix b/modules/common/console/default.n
ix
index c96a183..ca6cefa 100644
--- a/modules/common/console/default.nix
+++ b/modules/common/console/default.nix
@@ -10,7 +10,6 @@ in {
   imports = [
     ./shell
     ./profile
-    ./options.nix
   ];
 
   home-manager.users = mkIf admin.homeManager {

diff --git a/modules/common/console/default.
nix b/modules/common/console/default.nix
index c96a183..ca6cefa 100644
--- a/modules/common/console/default.nix
+++ b/modules/common/console/default.nix
@@ -10,7 +10,6 @@ in {
   imports = [
     ./shell
     ./profile
-    ./options.nix
   ];
 
   home-manager.users = mkIf admin.homeManag
er {
 

diff --git a/modules/nixos/hardware/cpu/default.nix b/modules/nixos/hardware/cpu/d
efault.nix
index d126fb9..b0acb52 100644
--- a/modules/nixos/hardware/cpu/default.nix
+++ b/modules/nixos/hardware/cpu/default.nix
@@ -2,6 +2,5 @@
   imports = [
     ./amd.nix
     ./intel.nix
-    ./options.nix
   ];
 }

diff --git a/modules/nixos/hardware/cpu/defa
ult.nix b/modules/nixos/hardware/cpu/default
.nix
index d126fb9..b0acb52 100644
--- a/modules/nixos/hardware/cpu/default.nix
+++ b/modules/nixos/hardware/cpu/default.nix
@@ -2,6 +2,5 @@
   imports = [
     ./amd.nix
     ./intel.nix
-    ./options.nix
   ];
 }
 

diff --git a/modules/nixos/hardware/cpu/options.nix b/modules/nixos/hardware/cpu/o
ptions.nix
deleted file mode 100644
index 679a6a7..0000000
--- a/modules/nixos/hardware/cpu/options.nix
+++ /dev/null
@@ -1,139 +0,0 @@
-{
-  lib,
-  config,
-  ...
-}: let
-  inherit (lib) mkOption mkEnableOption;
-  inherit (lib.types) enum int str nullOr float;
-  cfg = config.ooknet.hardware.cpu;
-  microArchMapping = import ./micro-architectures;
-
-  lookupMicroArch = cpu: let
-    vendor = cpu.type;
-    family = toString cpu.model.family;
-    model = toString cpu.model.id;
-  in
-    microArchMapping.${vendor}.${family}.${model} or null;
-in {
-  options.ooknet.hardware.cpu = {
-    type = mkOption {
-      type = nullOr (enum ["intel" "amd"]);
-      default = null;
-    };
-
-    model = {
-      id = mkOption {
-        type = nullOr int;
-        default = null;
-        description = "CPU model from CPUID";
-      };
-      family = mkOption {
-        type = nullOr int;
-        default = null;
-        description = "CPU family from CPUID";
-      };
-      stepping = mkOption {
-        type = nullOr int;
-        default = null;
-        description = "CPU stepping from CPUID";
-      };
-      name = mkOption {
-        type = nullOr str;
-        default = null;
-        description = "CPU Model Name";
-        example = "Intel(R) Core(TM) i3-10100 CPU @ 3.60GHz";
-      };
-      microArchitecture = mkOption {
-        type = str;
-        default = lookupMicroArch cfg;
-        description = "CPU microarchitecture (e.g, skylake, zen4)";
-        readOnly = true;
-      };
-    };
-
-    spec = {
-      sockets = mkOption {
-        type = nullOr int;
-        default = 1;
-        description = "Number of CPU sockets";
-      };
-      baseClock = mkOption {
-        type = nullOr float;
-        default = null;
-        description = "Base clock frequency in GHz";
-        example = 3.8;
-      };
-
-      boostClock = mkOption {
-        type = nullOr float;
-        default = null;
-        description = "Boost clock frequency in GHz";
-        example = 4.7;
-      };
-
-      coresPerSocket = mkOption {
-        type = nullOr int;
-        default = null;
-        description = "Number of Physical CPU core per socket";
-      };
-
-      threadsPerCore = mkOption {
-        type = int;
-        default = 1;
-        description = "Number of threads per physical core (hyperthreading)";
-      };
-
-      totalThreads = mkOption {
-        type = int;
-        default =
-          if cfg.spec.sockets == null || cfg.spec.coresPerSocket == null
-          then null
-          else (cfg.cpu.spec.coresPerSocket * cfg.cpu.spec.sockets) * cfg.cpu.spe
c.threadsPerCore;
-        description = "Number of cpu threads the cpu has";
-        readOnly = true;
-      };
-
-      tdp = mkOption {
-        type = nullOr int;
-        default = null;
-        description = ''
-          Thermal Design Power in watts.
-          Must be manually specified based on CPU model.
-          Refer to manufacturer specifications:
-          - Intel: https://ark.intel.com
-          - AMD: https://www.amd.com/en/products/specifications.html
-        '';
-        example = 65;
-      };
-
-      cache = {
-        l1i = mkOption {
-          type = nullOr int;
-          default = null;
-          description = "Size of L1 instruction cache in Bytes";
-          example = 192;
-        };
-        l1d = mkOption {
-          type = nullOr int;
-          default = null;
-          description = "Size of L1 data cache in Bytes";
-          example = 192;
-        };
-        l2 = mkOption {
-          type = nullOr int;
-          default = null;
-          description = "Size of L2 cache in Bytes";
-          example = 6;
-        };
-        l3 = mkOption {
-          type = nullOr int;
-          default = null;
-          description = "Size of L3 cache in Bytes";
-          example = 32;
-        };
-      };
-    };
-
-    amd.pstate.enable = mkEnableOption "";
-  };
-}

diff --git a/modules/nixos/hardware/cpu/opti
ons.nix b/modules/nixos/hardware/cpu/options
.nix
deleted file mode 100644
index 679a6a7..0000000
--- a/modules/nixos/hardware/cpu/options.nix
+++ /dev/null
@@ -1,139 +0,0 @@
-{
-  lib,
-  config,
-  ...
-}: let
-  inherit (lib) mkOption mkEnableOption;
-  inherit (lib.types) enum int str nullOr f
loat;
-  cfg = config.ooknet.hardware.cpu;
-  microArchMapping = import ./micro-archite
ctures;
-
-  lookupMicroArch = cpu: let
-    vendor = cpu.type;
-    family = toString cpu.model.family;
-    model = toString cpu.model.id;
-  in
-    microArchMapping.${vendor}.${family}.${
model} or null;
-in {
-  options.ooknet.hardware.cpu = {
-    type = mkOption {
-      type = nullOr (enum ["intel" "amd"]);
-      default = null;
-    };
-
-    model = {
-      id = mkOption {
-        type = nullOr int;
-        default = null;
-        description = "CPU model from CPUID
";
-      };
-      family = mkOption {
-        type = nullOr int;
-        default = null;
-        description = "CPU family from CPUI
D";
-      };
-      stepping = mkOption {
-        type = nullOr int;
-        default = null;
-        description = "CPU stepping from CP
UID";
-      };
-      name = mkOption {
-        type = nullOr str;
-        default = null;
-        description = "CPU Model Name";
-        example = "Intel(R) Core(TM) i3-101
00 CPU @ 3.60GHz";
-      };
-      microArchitecture = mkOption {
-        type = str;
-        default = lookupMicroArch cfg;
-        description = "CPU microarchitectur
e (e.g, skylake, zen4)";
-        readOnly = true;
-      };
-    };
-
-    spec = {
-      sockets = mkOption {
-        type = nullOr int;
-        default = 1;
-        description = "Number of CPU socket
s";
-      };
-      baseClock = mkOption {
-        type = nullOr float;
-        default = null;
-        description = "Base clock frequency
 in GHz";
-        example = 3.8;
-      };
-
-      boostClock = mkOption {
-        type = nullOr float;
-        default = null;
-        description = "Boost clock frequenc
y in GHz";
-        example = 4.7;
-      };
-
-      coresPerSocket = mkOption {
-        type = nullOr int;
-        default = null;
-        description = "Number of Physical C
PU core per socket";
-      };
-
-      threadsPerCore = mkOption {
-        type = int;
-        default = 1;
-        description = "Number of threads pe
r physical core (hyperthreading)";
-      };
-
-      totalThreads = mkOption {
-        type = int;
-        default =
-          if cfg.spec.sockets == null || cf
g.spec.coresPerSocket == null
-          then null
-          else (cfg.cpu.spec.coresPerSocket
 * cfg.cpu.spec.sockets) * cfg.cpu.spec.thre
adsPerCore;
-        description = "Number of cpu thread
s the cpu has";
-        readOnly = true;
-      };
-
-      tdp = mkOption {
-        type = nullOr int;
-        default = null;
-        description = ''
-          Thermal Design Power in watts.
-          Must be manually specified based 
on CPU model.
-          Refer to manufacturer specificati
ons:
-          - Intel: https://ark.intel.com
-          - AMD: https://www.amd.com/en/pro
ducts/specifications.html
-        '';
-        example = 65;
-      };
-
-      cache = {
-        l1i = mkOption {
-          type = nullOr int;
-          default = null;
-          description = "Size of L1 instruc
tion cache in Bytes";
-          example = 192;
-        };
-        l1d = mkOption {
-          type = nullOr int;
-          default = null;
-          description = "Size of L1 data ca
che in Bytes";
-          example = 192;
-        };
-        l2 = mkOption {
-          type = nullOr int;
-          default = null;
-          description = "Size of L2 cache i
n Bytes";
-          example = 6;
-        };
-        l3 = mkOption {
-          type = nullOr int;
-          default = null;
-          description = "Size of L3 cache i
n Bytes";
-          example = 32;
-        };
-      };
-    };
-
-    amd.pstate.enable = mkEnableOption "";
-  };
-}
 

diff --git a/modules/nixos/hardware/default.nix b/modules/nixos/hardware/default.n
ix
index 5d0603a..710bbc1 100644
--- a/modules/nixos/hardware/default.nix
+++ b/modules/nixos/hardware/default.nix
@@ -4,6 +4,5 @@
     ./gpu
     ./features
     ./common.nix
-    ./options.nix
   ];
 }

diff --git a/modules/nixos/hardware/default.
nix b/modules/nixos/hardware/default.nix
index 5d0603a..710bbc1 100644
--- a/modules/nixos/hardware/default.nix
+++ b/modules/nixos/hardware/default.nix
@@ -4,6 +4,5 @@
     ./gpu
     ./features
     ./common.nix
-    ./options.nix
   ];
 }
 

diff --git a/modules/nixos/hardware/options.nix b/modules/nixos/hardware/options.n
ix
deleted file mode 100644
index 5c420da..0000000
--- a/modules/nixos/hardware/options.nix
+++ /dev/null
@@ -1,103 +0,0 @@
-{
-  lib,
-  config,
-  ...
-}: let
-  inherit (builtins) filter length head;
-  inherit (lib) mkOption mkEnableOption;
-  inherit (lib.types) nullOr enum bool submodule listOf int str;
-
-  cfg = config.ooknet.hardware;
-  hasMonitors = length cfg.monitors != 0;
-  primaryAttr = filter (m: m.primary or false) cfg.monitors;
-  primaryCount = length primaryAttr;
-in {
-  options.ooknet.hardware = {
-    gpu = {
-      type = mkOption {
-        type = nullOr (enum ["intel" "amd" "nvidia"]);
-        default = null;
-      };
-      lact.enable = mkEnableOption "Enable amd tuning software lact";
-      benchmark.enable = mkEnableOption "Enable benchmarking tools";
-    };
-
-    features = mkOption {
-      type = listOf (enum [
-        "audio"
-        "video"
-        "bluetooth"
-        "backlight"
-        "battery"
-        "ssd"
-        "printing"
-        "fingerprint"
-      ]);
-      default = ["ssd"];
-    };
-
-    # monitor module inspired by misterio77
-    # includes the addition of transform option
-    primaryMonitor = mkOption {
-      type = nullOr str;
-      default =
-        if !hasMonitors
-        then null
-        else (head primaryAttr).name;
-      description = "Name of the primary monitor, derived from the monitors list"
;
-      readOnly = true;
-    };
-    monitors = mkOption {
-      type = listOf (submodule {
-        options = {
-          name = mkOption {
-            type = str;
-            example = "DP-1";
-          };
-          primary = mkOption {
-            type = bool;
-            default = false;
-          };
-          width = mkOption {
-            type = int;
-            example = 1920;
-          };
-          height = mkOption {
-            type = int;
-            example = 1080;
-          };
-          refreshRate = mkOption {
-            type = int;
-            default = 60;
-          };
-          x = mkOption {
-            type = int;
-            default = 0;
-          };
-          y = mkOption {
-            type = int;
-            default = 0;
-          };
-          transform = mkOption {
-            type = int;
-            default = 0;
-          };
-          enabled = mkOption {
-            type = bool;
-            default = true;
-          };
-        };
-      });
-      default = [];
-    };
-  };
-
-  config = {
-    assertions = [
-      {
-        assertion = hasMonitors -> primaryCount == 1;
-        message = "Error: config.ooknet.hardware.monitors. When monitors are conf
igured, exactly one monitor must be designated as primary (found ${toString primar
yCount} primary monitors)";
-      }
-    ];
-  };
-}

diff --git a/modules/nixos/hardware/options.
nix b/modules/nixos/hardware/options.nix
deleted file mode 100644
index 5c420da..0000000
--- a/modules/nixos/hardware/options.nix
+++ /dev/null
@@ -1,103 +0,0 @@
-{
-  lib,
-  config,
-  ...
-}: let
-  inherit (builtins) filter length head;
-  inherit (lib) mkOption mkEnableOption;
-  inherit (lib.types) nullOr enum bool subm
odule listOf int str;
-
-  cfg = config.ooknet.hardware;
-  hasMonitors = length cfg.monitors != 0;
-  primaryAttr = filter (m: m.primary or fal
se) cfg.monitors;
-  primaryCount = length primaryAttr;
-in {
-  options.ooknet.hardware = {
-    gpu = {
-      type = mkOption {
-        type = nullOr (enum ["intel" "amd" 
"nvidia"]);
-        default = null;
-      };
-      lact.enable = mkEnableOption "Enable 
amd tuning software lact";
-      benchmark.enable = mkEnableOption "En
able benchmarking tools";
-    };
-
-    features = mkOption {
-      type = listOf (enum [
-        "audio"
-        "video"
-        "bluetooth"
-        "backlight"
-        "battery"
-        "ssd"
-        "printing"
-        "fingerprint"
-      ]);
-      default = ["ssd"];
-    };
-
-    # monitor module inspired by misterio77
-    # includes the addition of transform op
tion
-    primaryMonitor = mkOption {
-      type = nullOr str;
-      default =
-        if !hasMonitors
-        then null
-        else (head primaryAttr).name;
-      description = "Name of the primary mo
nitor, derived from the monitors list";
-      readOnly = true;
-    };
-    monitors = mkOption {
-      type = listOf (submodule {
-        options = {
-          name = mkOption {
-            type = str;
-            example = "DP-1";
-          };
-          primary = mkOption {
-            type = bool;
-            default = false;
-          };
-          width = mkOption {
-            type = int;
-            example = 1920;
-          };
-          height = mkOption {
-            type = int;
-            example = 1080;
-          };
-          refreshRate = mkOption {
-            type = int;
-            default = 60;
-          };
-          x = mkOption {
-            type = int;
-            default = 0;
-          };
-          y = mkOption {
-            type = int;
-            default = 0;
-          };
-          transform = mkOption {
-            type = int;
-            default = 0;
-          };
-          enabled = mkOption {
-            type = bool;
-            default = true;
-          };
-        };
-      });
-      default = [];
-    };
-  };
-
-  config = {
-    assertions = [
-      {
-        assertion = hasMonitors -> primaryC
ount == 1;
-        message = "Error: config.ooknet.har
dware.monitors. When monitors are configured
, exactly one monitor must be designated as 
primary (found ${toString primaryCount} prim
ary monitors)";
-      }
-    ];
-  };
-}
 

diff --git a/modules/nixos/server/default.nix b/modules/nixos/server/default.nix
index 08ad3ca..7629813 100644
--- a/modules/nixos/server/default.nix
+++ b/modules/nixos/server/default.nix
@@ -1,6 +1,5 @@
 {
   imports = [
-    ./options.nix
     ./debloat.nix
     ./services
     ./webserver

diff --git a/modules/nixos/server/default.ni
x b/modules/nixos/server/default.nix
index 08ad3ca..7629813 100644
--- a/modules/nixos/server/default.nix
+++ b/modules/nixos/server/default.nix
@@ -1,6 +1,5 @@
 {
   imports = [
-    ./options.nix
     ./debloat.nix
     ./services
     ./webserver
 

diff --git a/modules/nixos/virtualization/default.nix b/modules/nixos/virtualizati
on/default.nix
index d30f37b..be776a5 100644
--- a/modules/nixos/virtualization/default.nix
+++ b/modules/nixos/virtualization/default.nix
@@ -1,6 +1,5 @@
 {
   imports = [
-    ./options.nix
     ./host
     ./guest
   ];

diff --git a/modules/nixos/virtualization/de
fault.nix b/modules/nixos/virtualization/def
ault.nix
index d30f37b..be776a5 100644
--- a/modules/nixos/virtualization/default.n
ix
+++ b/modules/nixos/virtualization/default.n
ix
@@ -1,6 +1,5 @@
 {
   imports = [
-    ./options.nix
     ./host
     ./guest
   ];
 

diff --git a/modules/nixos/workstation/default.nix b/modules/nixos/workstation/def
ault.nix
index a47840e..e6129b9 100644
--- a/modules/nixos/workstation/default.nix
+++ b/modules/nixos/workstation/default.nix
@@ -13,7 +13,6 @@
   ];
 in {
   imports = [
-    ./options.nix
     ./services
     ./programs
     ./gaming

diff --git a/modules/nixos/workstation/defau
lt.nix b/modules/nixos/workstation/default.n
ix
index a47840e..e6129b9 100644
--- a/modules/nixos/workstation/default.nix
+++ b/modules/nixos/workstation/default.nix
@@ -13,7 +13,6 @@
   ];
 in {
   imports = [
-    ./options.nix
     ./services
     ./programs
     ./gaming
 

diff --git a/modules/common/console/options.nix b/modules/options/console/default.
nix
similarity index 100%
rename from modules/common/console/options.nix
rename to modules/options/console/default.nix

diff --git a/modules/common/console/options.
nix b/modules/options/console/default.nix
similarity index 100%
rename from modules/common/console/options.n
ix
rename to modules/options/console/default.ni
x
 

diff --git a/modules/options/default.nix b/modules/options/default.nix
new file mode 100644
index 0000000..85dfa25
--- /dev/null
+++ b/modules/options/default.nix
@@ -0,0 +1,10 @@
+{
+  imports = [
+    ./host
+    ./console
+    ./server
+    ./workstation
+    ./hardware
+    ./virtualization
+  ];
+}

diff --git a/modules/options/default.nix b/m
odules/options/default.nix
new file mode 100644
index 0000000..85dfa25
--- /dev/null
+++ b/modules/options/default.nix
@@ -0,0 +1,10 @@
+{
+  imports = [
+    ./host
+    ./console
+    ./server
+    ./workstation
+    ./hardware
+    ./virtualization
+  ];
+}
 

diff --git a/modules/options/hardware/default.nix b/modules/options/hardware/defau
lt.nix
new file mode 100644
index 0000000..1d8e284
--- /dev/null
+++ b/modules/options/hardware/default.nix
@@ -0,0 +1,235 @@
+{
+  lib,
+  config,
+  ...
+}: let
+  inherit (builtins) filter length head;
+  inherit (lib) mkOption mkEnableOption;
+  inherit (lib.types) nullOr enum bool submodule listOf int str float;
+
+  cfg = config.ooknet.hardware;
+  hasMonitors = length cfg.monitors != 0;
+  primaryAttr = filter (m: m.primary or false) cfg.monitors;
+  primaryCount = length primaryAttr;
+
+  cpuCfg = config.ooknet.hardware.cpu;
+  microArchMapping = import ../nixos/hardware/cpu/micro-architectures;
+
+  lookupMicroArch = cpu: let
+    vendor = cpu.type;
+    family = toString cpu.model.family;
+    model = toString cpu.model.id;
+  in
+    microArchMapping.${vendor}.${family}.${model} or null;
+in {
+  options.ooknet.hardware = {
+    gpu = {
+      type = mkOption {
+        type = nullOr (enum ["intel" "amd" "nvidia"]);
+        default = null;
+      };
+      lact.enable = mkEnableOption "Enable amd tuning software lact";
+      benchmark.enable = mkEnableOption "Enable benchmarking tools";
+    };
+
+    features = mkOption {
+      type = listOf (enum [
+        "audio"
+        "video"
+        "bluetooth"
+        "backlight"
+        "battery"
+        "ssd"
+        "printing"
+        "fingerprint"
+      ]);
+      default = ["ssd"];
+    };
+
+    # monitor module inspired by misterio77
+    # includes the addition of transform option
+    primaryMonitor = mkOption {
+      type = nullOr str;
+      default =
+        if !hasMonitors
+        then null
+        else (head primaryAttr).name;
+      description = "Name of the primary monitor, derived from the monitors list"
;
+      readOnly = true;
+    };
+    monitors = mkOption {
+      type = listOf (submodule {
+        options = {
+          name = mkOption {
+            type = str;
+            example = "DP-1";
+          };
+          primary = mkOption {
+            type = bool;
+            default = false;
+          };
+          width = mkOption {
+            type = int;
+            example = 1920;
+          };
+          height = mkOption {
+            type = int;
+            example = 1080;
+          };
+          refreshRate = mkOption {
+            type = int;
+            default = 60;
+          };
+          x = mkOption {
+            type = int;
+            default = 0;
+          };
+          y = mkOption {
+            type = int;
+            default = 0;
+          };
+          transform = mkOption {
+            type = int;
+            default = 0;
+          };
+          enabled = mkOption {
+            type = bool;
+            default = true;
+          };
+        };
+      });
+      default = [];
+    };
+
+    cpu = {
+      type = mkOption {
+        type = nullOr (enum ["intel" "amd"]);
+        default = null;
+      };
+
+      model = {
+        id = mkOption {
+          type = nullOr int;
+          default = null;
+          description = "CPU model from CPUID";
+        };
+        family = mkOption {
+          type = nullOr int;
+          default = null;
+          description = "CPU family from CPUID";
+        };
+        stepping = mkOption {
+          type = nullOr int;
+          default = null;
+          description = "CPU stepping from CPUID";
+        };
+        name = mkOption {
+          type = nullOr str;
+          default = null;
+          description = "CPU Model Name";
+          example = "Intel(R) Core(TM) i3-10100 CPU @ 3.60GHz";
+        };
+        microArchitecture = mkOption {
+          type = str;
+          default = lookupMicroArch cpuCfg;
+          description = "CPU microarchitecture (e.g, skylake, zen4)";
+          readOnly = true;
+        };
+      };
+
+      spec = {
+        sockets = mkOption {
+          type = nullOr int;
+          default = 1;
+          description = "Number of CPU sockets";
+        };
+        baseClock = mkOption {
+          type = nullOr float;
+          default = null;
+          description = "Base clock frequency in GHz";
+          example = 3.8;
+        };
+
+        boostClock = mkOption {
+          type = nullOr float;
+          default = null;
+          description = "Boost clock frequency in GHz";
+          example = 4.7;
+        };
+
+        coresPerSocket = mkOption {
+          type = nullOr int;
+          default = null;
+          description = "Number of Physical CPU core per socket";
+        };
+
+        threadsPerCore = mkOption {
+          type = int;
+          default = 1;
+          description = "Number of threads per physical core (hyperthreading)";
+        };
+
+        totalThreads = mkOption {
+          type = int;
+          default =
+            if cpuCfg.spec.sockets == null || cpuCfg.spec.coresPerSocket == null
+            then null
+            else (cpuCfg.cpu.spec.coresPerSocket * cpuCfg.cpu.spec.sockets) * cpu
Cfg.cpu.spec.threadsPerCore;
+          description = "Number of cpu threads the cpu has";
+          readOnly = true;
+        };
+
+        tdp = mkOption {
+          type = nullOr int;
+          default = null;
+          description = ''
+            Thermal Design Power in watts.
+            Must be manually specified based on CPU model.
+            Refer to manufacturer specifications:
+            - Intel: https://ark.intel.com
+            - AMD: https://www.amd.com/en/products/specifications.html
+          '';
+          example = 65;
+        };
+
+        cache = {
+          l1i = mkOption {
+            type = nullOr int;
+            default = null;
+            description = "Size of L1 instruction cache in Bytes";
+            example = 192;
+          };
+          l1d = mkOption {
+            type = nullOr int;
+            default = null;
+            description = "Size of L1 data cache in Bytes";
+            example = 192;
+          };
+          l2 = mkOption {
+            type = nullOr int;
+            default = null;
+            description = "Size of L2 cache in Bytes";
+            example = 6;
+          };
+          l3 = mkOption {
+            type = nullOr int;
+            default = null;
+            description = "Size of L3 cache in Bytes";
+            example = 32;
+          };
+        };
+      };
+
+      amd.pstate.enable = mkEnableOption "";
+    };
+  };
+
+  config = {
+    assertions = [
+      {
+        assertion = hasMonitors -> primaryCount == 1;
+        message = "Error: config.ooknet.hardware.monitors. When monitors are conf
igured, exactly one monitor must be designated as primary (found ${toString primar
yCount} primary monitors)";
+      }
+    ];
+  };
+}

diff --git a/modules/options/hardware/defaul
t.nix b/modules/options/hardware/default.nix
new file mode 100644
index 0000000..1d8e284
--- /dev/null
+++ b/modules/options/hardware/default.nix
@@ -0,0 +1,235 @@
+{
+  lib,
+  config,
+  ...
+}: let
+  inherit (builtins) filter length head;
+  inherit (lib) mkOption mkEnableOption;
+  inherit (lib.types) nullOr enum bool subm
odule listOf int str float;
+
+  cfg = config.ooknet.hardware;
+  hasMonitors = length cfg.monitors != 0;
+  primaryAttr = filter (m: m.primary or fal
se) cfg.monitors;
+  primaryCount = length primaryAttr;
+
+  cpuCfg = config.ooknet.hardware.cpu;
+  microArchMapping = import ../nixos/hardwa
re/cpu/micro-architectures;
+
+  lookupMicroArch = cpu: let
+    vendor = cpu.type;
+    family = toString cpu.model.family;
+    model = toString cpu.model.id;
+  in
+    microArchMapping.${vendor}.${family}.${
model} or null;
+in {
+  options.ooknet.hardware = {
+    gpu = {
+      type = mkOption {
+        type = nullOr (enum ["intel" "amd" 
"nvidia"]);
+        default = null;
+      };
+      lact.enable = mkEnableOption "Enable 
amd tuning software lact";
+      benchmark.enable = mkEnableOption "En
able benchmarking tools";
+    };
+
+    features = mkOption {
+      type = listOf (enum [
+        "audio"
+        "video"
+        "bluetooth"
+        "backlight"
+        "battery"
+        "ssd"
+        "printing"
+        "fingerprint"
+      ]);
+      default = ["ssd"];
+    };
+
+    # monitor module inspired by misterio77
+    # includes the addition of transform op
tion
+    primaryMonitor = mkOption {
+      type = nullOr str;
+      default =
+        if !hasMonitors
+        then null
+        else (head primaryAttr).name;
+      description = "Name of the primary mo
nitor, derived from the monitors list";
+      readOnly = true;
+    };
+    monitors = mkOption {
+      type = listOf (submodule {
+        options = {
+          name = mkOption {
+            type = str;
+            example = "DP-1";
+          };
+          primary = mkOption {
+            type = bool;
+            default = false;
+          };
+          width = mkOption {
+            type = int;
+            example = 1920;
+          };
+          height = mkOption {
+            type = int;
+            example = 1080;
+          };
+          refreshRate = mkOption {
+            type = int;
+            default = 60;
+          };
+          x = mkOption {
+            type = int;
+            default = 0;
+          };
+          y = mkOption {
+            type = int;
+            default = 0;
+          };
+          transform = mkOption {
+            type = int;
+            default = 0;
+          };
+          enabled = mkOption {
+            type = bool;
+            default = true;
+          };
+        };
+      });
+      default = [];
+    };
+
+    cpu = {
+      type = mkOption {
+        type = nullOr (enum ["intel" "amd"]
);
+        default = null;
+      };
+
+      model = {
+        id = mkOption {
+          type = nullOr int;
+          default = null;
+          description = "CPU model from CPU
ID";
+        };
+        family = mkOption {
+          type = nullOr int;
+          default = null;
+          description = "CPU family from CP
UID";
+        };
+        stepping = mkOption {
+          type = nullOr int;
+          default = null;
+          description = "CPU stepping from 
CPUID";
+        };
+        name = mkOption {
+          type = nullOr str;
+          default = null;
+          description = "CPU Model Name";
+          example = "Intel(R) Core(TM) i3-1
0100 CPU @ 3.60GHz";
+        };
+        microArchitecture = mkOption {
+          type = str;
+          default = lookupMicroArch cpuCfg;
+          description = "CPU microarchitect
ure (e.g, skylake, zen4)";
+          readOnly = true;
+        };
+      };
+
+      spec = {
+        sockets = mkOption {
+          type = nullOr int;
+          default = 1;
+          description = "Number of CPU sock
ets";
+        };
+        baseClock = mkOption {
+          type = nullOr float;
+          default = null;
+          description = "Base clock frequen
cy in GHz";
+          example = 3.8;
+        };
+
+        boostClock = mkOption {
+          type = nullOr float;
+          default = null;
+          description = "Boost clock freque
ncy in GHz";
+          example = 4.7;
+        };
+
+        coresPerSocket = mkOption {
+          type = nullOr int;
+          default = null;
+          description = "Number of Physical
 CPU core per socket";
+        };
+
+        threadsPerCore = mkOption {
+          type = int;
+          default = 1;
+          description = "Number of threads 
per physical core (hyperthreading)";
+        };
+
+        totalThreads = mkOption {
+          type = int;
+          default =
+            if cpuCfg.spec.sockets == null 
|| cpuCfg.spec.coresPerSocket == null
+            then null
+            else (cpuCfg.cpu.spec.coresPerS
ocket * cpuCfg.cpu.spec.sockets) * cpuCfg.cp
u.spec.threadsPerCore;
+          description = "Number of cpu thre
ads the cpu has";
+          readOnly = true;
+        };
+
+        tdp = mkOption {
+          type = nullOr int;
+          default = null;
+          description = ''
+            Thermal Design Power in watts.
+            Must be manually specified base
d on CPU model.
+            Refer to manufacturer specifica
tions:
+            - Intel: https://ark.intel.com
+            - AMD: https://www.amd.com/en/p
roducts/specifications.html
+          '';
+          example = 65;
+        };
+
+        cache = {
+          l1i = mkOption {
+            type = nullOr int;
+            default = null;
+            description = "Size of L1 instr
uction cache in Bytes";
+            example = 192;
+          };
+          l1d = mkOption {
+            type = nullOr int;
+            default = null;
+            description = "Size of L1 data 
cache in Bytes";
+            example = 192;
+          };
+          l2 = mkOption {
+            type = nullOr int;
+            default = null;
+            description = "Size of L2 cache
 in Bytes";
+            example = 6;
+          };
+          l3 = mkOption {
+            type = nullOr int;
+            default = null;
+            description = "Size of L3 cache
 in Bytes";
+            example = 32;
+          };
+        };
+      };
+
+      amd.pstate.enable = mkEnableOption ""
;
+    };
+  };
+
+  config = {
+    assertions = [
+      {
+        assertion = hasMonitors -> primaryC
ount == 1;
+        message = "Error: config.ooknet.har
dware.monitors. When monitors are configured
, exactly one monitor must be designated as 
primary (found ${toString primaryCount} prim
ary monitors)";
+      }
+    ];
+  };
+}
 

diff --git a/modules/common/base/options.nix b/modules/options/host/default.nix
similarity index 100%
rename from modules/common/base/options.nix
rename to modules/options/host/default.nix

diff --git a/modules/common/base/options.nix
 b/modules/options/host/default.nix
similarity index 100%
rename from modules/common/base/options.nix
rename to modules/options/host/default.nix
 

diff --git a/modules/nixos/server/options.nix b/modules/options/server/default.nix
similarity index 97%
rename from modules/nixos/server/options.nix
rename to modules/options/server/default.nix
index d0daf19..b1a1395 100644
--- a/modules/nixos/server/options.nix
+++ b/modules/options/server/default.nix
@@ -14,7 +14,7 @@ in {
       description = "The server profile the host will use as a base";
     };
     services = mkOption {
-      type = listOf (enum ["media-server" "website" "forgejo" "ookflix" "minecraf
t" "minecraft-proxy" "copyparty" "monitoring" "authelia"]);
+      type = listOf (enum ["media-server" "website" "forgejo" "ookflix" "minecraf
t" "minecraft-proxy" "copyparty" "monitoring" "authelia" "authentik"]);
       default = [];
       description = "List of services the server will host";
     };

diff --git a/modules/nixos/server/options.ni
x b/modules/options/server/default.nix
similarity index 97%
rename from modules/nixos/server/options.nix
rename to modules/options/server/default.nix
index d0daf19..b1a1395 100644
--- a/modules/nixos/server/options.nix
+++ b/modules/options/server/default.nix
@@ -14,7 +14,7 @@ in {
       description = "The server profile the
 host will use as a base";
     };
     services = mkOption {
-      type = listOf (enum ["media-server" "
website" "forgejo" "ookflix" "minecraft" "mi
necraft-proxy" "copyparty" "monitoring" "aut
helia"]);
+      type = listOf (enum ["media-server" "
website" "forgejo" "ookflix" "minecraft" "mi
necraft-proxy" "copyparty" "monitoring" "aut
helia" "authentik"]);
       default = [];
       description = "List of services the s
erver will host";
     };
 

diff --git a/modules/nixos/virtualization/options.nix b/modules/options/virtualiza
tion/default.nix
similarity index 100%
rename from modules/nixos/virtualization/options.nix
rename to modules/options/virtualization/default.nix

diff --git a/modules/nixos/virtualization/op
tions.nix b/modules/options/virtualization/d
efault.nix
similarity index 100%
rename from modules/nixos/virtualization/opt
ions.nix
rename to modules/options/virtualization/def
ault.nix
 

diff --git a/modules/nixos/workstation/options.nix b/modules/options/workstation/d
efault.nix
similarity index 100%
rename from modules/nixos/workstation/options.nix
rename to modules/options/workstation/default.nix

diff --git a/modules/nixos/workstation/optio
ns.nix b/modules/options/workstation/default
.nix
similarity index 100%
rename from modules/nixos/workstation/option
s.nix
rename to modules/options/workstation/defaul
t.nix
 

diff --git a/outputs/lib/builders.nix b/outputs/lib/builders.nix
index 72fe3af..c751b52 100644
--- a/outputs/lib/builders.nix
+++ b/outputs/lib/builders.nix
@@ -15,6 +15,7 @@
   nixosModules = "${self}/modules/nixos";
   commonModules = "${self}/modules/common";
   hostModules = "${self}/hosts";
+  options = "${self}/modules/options";
 
   nixos-hm = inputs.home-manager.nixosModules.home-manager;
   darwin-hm = inputs.home-manager.darwinModules.home-manager;
@@ -35,12 +36,13 @@
   darwin = "${self}/modules/darwin";
 
   nixosMinimal = [
-    (common.base + "/options.nix")
+    options
     (common.base + "/admin.nix")
     (nixos.base + "/openssh.nix")
   ];
 
   core = [
+    options
     common.base
     common.console
   ];
@@ -62,9 +64,6 @@
       darwin
       darwin-hm
       darwinSecrets
-
-      # TODO: this is jank please make better... actually this whole thing is jan
k
-      (nixos.workstation + "/options.nix")
     ];
 
   isoModules = [

diff --git a/outputs/lib/builders.nix b/outp
uts/lib/builders.nix
index 72fe3af..c751b52 100644
--- a/outputs/lib/builders.nix
+++ b/outputs/lib/builders.nix
@@ -15,6 +15,7 @@
   nixosModules = "${self}/modules/nixos";
   commonModules = "${self}/modules/common";
   hostModules = "${self}/hosts";
+  options = "${self}/modules/options";
 
   nixos-hm = inputs.home-manager.nixosModul
es.home-manager;
   darwin-hm = inputs.home-manager.darwinMod
ules.home-manager;
@@ -35,12 +36,13 @@
   darwin = "${self}/modules/darwin";
 
   nixosMinimal = [
-    (common.base + "/options.nix")
+    options
     (common.base + "/admin.nix")
     (nixos.base + "/openssh.nix")
   ];
 
   core = [
+    options
     common.base
     common.console
   ];
@@ -62,9 +64,6 @@
       darwin
       darwin-hm
       darwinSecrets
-
-      # TODO: this is jank please make bett
er... actually this whole thing is jank
-      (nixos.workstation + "/options.nix")
     ];
 
   isoModules = [
 
[ BACK TO LOG ]
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET