nichts/nyx/modules/options/device/hardware.nix
2024-04-09 23:11:33 +02:00

82 lines
3 KiB
Nix

{lib, ...}: let
inherit (lib) mkOption mkEnableOption types;
in {
options.modules.device = {
type = mkOption {
type = types.enum ["laptop" "desktop" "server" "hybrid" "lite" "vm"];
default = "";
description = ''
The type/purpose of the device that will be used within the rest of the configuration.
- laptop: portable devices with batter optimizations
- desktop: stationary devices configured for maximum performance
- server: server and infrastructure
- hybrid: provide both desktop and server functionality
- lite: a lite device, such as a raspberry pi
- vm: a virtual machine
'';
};
# the type of cpu your system has - vm and regular cpus currently do not differ
# as I do not work with vms, but they have been added for forward-compatibility
# TODO: make this a list - apparently more than one cpu on a device is still doable
cpu = {
type = mkOption {
type = with types; nullOr (enum ["pi" "intel" "vm-intel" "amd" "vm-amd"]);
default = null;
description = ''
The manifaturer/type of the primary system CPU.
Determines which ucode services will be enabled and provides additional kernel packages
'';
};
amd = {
pstate.enable = mkEnableOption "AMD P-State Driver";
zenpower = {
enable = mkEnableOption "AMD Zenpower Driver";
args = mkOption {
type = types.str;
default = "-p 0 -v 3C -f A0"; # Pstate 0, 1.175 voltage, 4000 clock speed
description = ''
The percentage of the maximum clock speed that the CPU will be limited to.
This is useful for reducing power consumption and heat generation on laptops
and desktops
'';
};
};
};
};
gpu = {
type = mkOption {
type = with types; nullOr (enum ["pi" "amd" "intel" "nvidia" "hybrid-nv" "hybrid-amd"]);
default = null;
description = ''
The manifaturer/type of the primary system GPU. Allows the correct GPU
drivers to be loaded, potentially optimizing video output performance
'';
};
};
monitors = mkOption {
type = with types; listOf str;
default = [];
description = ''
A list of monitors connected to the system.
This does not affect any drivers and such, it is only necessary for
declaring things like monitors in window manager configurations.
It is not necessary to declare this, but wallpaper and workspace
configurations will be affected by the monitors list
::: {.tip}
Monitors should be listed from left to right in the order they are placed
assuming the leftmost (first element) is the primary one. This is not a
solution to the possibility of a monitor being placed above or below another
but it currently works.
:::
'';
};
};
}