86 lines
1.9 KiB
Nix
86 lines
1.9 KiB
Nix
{
|
|
pkgs,
|
|
config,
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.grimmShared;
|
|
screen =
|
|
with lib;
|
|
types.submodule {
|
|
options = {
|
|
fps = mkOption {
|
|
type = types.either types.int (types.nonEmptyListOf types.int);
|
|
default = 60;
|
|
description = "max framerate of screen";
|
|
};
|
|
|
|
mode = mkOption {
|
|
type = types.nonEmptyStr;
|
|
default = "1920x1080";
|
|
description = "pixel format of the screen";
|
|
};
|
|
|
|
id = mkOption {
|
|
type = types.nonEmptyStr;
|
|
description = "ID of the screen";
|
|
};
|
|
|
|
pos = mkOption {
|
|
type = types.nullOr types.nonEmptyStr;
|
|
default = null;
|
|
example = "0,0";
|
|
description = "position where to place the screen";
|
|
};
|
|
};
|
|
};
|
|
in
|
|
{
|
|
config =
|
|
with cfg;
|
|
lib.mkIf (enable && graphical) {
|
|
# Enable OpenGL
|
|
hardware.opengl = {
|
|
enable = true;
|
|
driSupport = true;
|
|
driSupport32Bit = true;
|
|
extraPackages = with pkgs; [ ];
|
|
};
|
|
|
|
chaotic.mesa-git.enable = true;
|
|
boot.kernelParams = [ "nouveau.config=NvGspRm=1" ];
|
|
|
|
environment.sessionVariables = {
|
|
__GL_LOG_MAX_ANISO = "0";
|
|
__GL_SHADER_DISK_CACHE = "1";
|
|
__GL_SYNC_TO_VBLANK = "0";
|
|
__GL_THREADED_OPTIMIZATIONS = "1";
|
|
__GL_VRR_ALLOWED = "1";
|
|
# MESA_LOADER_DRIVER_OVERRIDE="zink";
|
|
# FLATPAK_GL_DRIVERS="mesa-git";
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
glfw
|
|
glxinfo
|
|
vulkan-tools
|
|
mangohud
|
|
];
|
|
};
|
|
|
|
options.grimmShared = with lib; {
|
|
graphical = mkOption {
|
|
type = types.bool;
|
|
default = cfg.screens != { };
|
|
description = "whether to force enable graphical components";
|
|
};
|
|
|
|
screens = mkOption {
|
|
type = types.attrsOf screen;
|
|
default = { };
|
|
description = "Screens to initialize, will activate graphical components";
|
|
};
|
|
};
|
|
}
|