57 lines
1.3 KiB
Nix
57 lines
1.3 KiB
Nix
{ lib, config, ... }:
|
|
|
|
let
|
|
cfg = config.graphics;
|
|
cardCount = lib.count lib.id [
|
|
cfg.intel.enable
|
|
cfg.nvidia.enable
|
|
];
|
|
in
|
|
{
|
|
imports = [
|
|
./intel-arc-140t.nix
|
|
./intel-uhd-770.nix
|
|
./nvidia.nix
|
|
];
|
|
|
|
options.graphics = {
|
|
enable = lib.mkEnableOption "graphics";
|
|
intel = {
|
|
enable = lib.mkEnableOption "Intel graphics";
|
|
model = lib.mkOption {
|
|
type = lib.types.nullOr (
|
|
lib.types.enum [
|
|
"arc-140t"
|
|
"uhd-770"
|
|
]
|
|
);
|
|
default = null;
|
|
};
|
|
};
|
|
nvidia.enable = lib.mkEnableOption "NVIDIA graphics";
|
|
};
|
|
|
|
config = {
|
|
assertions = [
|
|
{
|
|
assertion = !(cfg.enable && cardCount != 1);
|
|
message = "'graphics.enable' requires one and only one graphics card";
|
|
}
|
|
{
|
|
assertion = !(cardCount > 0 && !cfg.enable);
|
|
message = "'graphics.*.enable' require 'graphics.enable'";
|
|
}
|
|
{
|
|
assertion = !(cfg.intel.enable && cfg.intel.model == null);
|
|
message = "'graphics.intel.enable' requires 'graphics.intel.model'";
|
|
}
|
|
{
|
|
assertion = !(cfg.intel.model != null && !cfg.intel.enable);
|
|
message = "'graphics.intel.model' requires 'graphics.intel.enable'";
|
|
}
|
|
];
|
|
|
|
hardware.graphics.enable = lib.mkIf cfg.enable true;
|
|
};
|
|
}
|