diff --git a/common/server/cloudflared.nix b/common/server/cloudflared.nix
deleted file mode 100644
index a8757bb..0000000
--- a/common/server/cloudflared.nix
+++ /dev/null
@@ -1,58 +0,0 @@
-{ config, lib, pkgs, ... }:
-
-with lib;
-
-let
- cfg = config.services.cloudflared;
- settingsFormat = pkgs.formats.yaml { };
-in
-{
- meta.maintainers = with maintainers; [ pmc ];
-
- options = {
- services.cloudflared = {
- enable = mkEnableOption "cloudflared";
- package = mkOption {
- type = types.package;
- default = pkgs.cloudflared;
- description = "The cloudflared package to use";
- example = literalExpression ''pkgs.cloudflared'';
- };
- config = mkOption {
- type = settingsFormat.type;
- description = "Contents of the config.yaml as an attrset; see https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/configuration/configuration-file for documentation on the contents";
- example = literalExpression ''
- {
- url = "http://localhost:3000";
- tunnel = "505c8dd1-e4fb-4ea4-b909-26b8f61ceaaf";
- credentials-file = "/var/lib/cloudflared/505c8dd1-e4fb-4ea4-b909-26b8f61ceaaf.json";
- }
- '';
- };
-
- configFile = mkOption {
- type = types.path;
- description = "Path to cloudflared config.yaml.";
- example = literalExpression ''"/etc/cloudflared/config.yaml"'';
- };
- };
- };
-
- config = mkIf cfg.enable ({
- # Prefer the config file over settings if both are set.
- services.cloudflared.configFile = mkDefault (settingsFormat.generate "cloudflared.yaml" cfg.config);
-
- systemd.services.cloudflared = {
- wantedBy = [ "multi-user.target" ];
- after = [ "network.target" ];
- description = "Cloudflare Argo Tunnel";
- serviceConfig = {
- TimeoutStartSec = 0;
- Type = "notify";
- ExecStart = "${cfg.package}/bin/cloudflared --config ${cfg.configFile} --no-autoupdate tunnel run";
- Restart = "on-failure";
- RestartSec = "5s";
- };
- };
- });
-}
\ No newline at end of file
diff --git a/common/server/default.nix b/common/server/default.nix
index 9bfc809..6f0f673 100644
--- a/common/server/default.nix
+++ b/common/server/default.nix
@@ -13,7 +13,6 @@
./privatebin/privatebin.nix
./radio.nix
./samba.nix
- ./cloudflared.nix
./owncast.nix
];
}
\ No newline at end of file
diff --git a/common/shell.nix b/common/shell.nix
index 88eb47b..db21657 100644
--- a/common/shell.nix
+++ b/common/shell.nix
@@ -6,7 +6,7 @@
# - add some handy shell commands
let
- nix-locate = config.inputs.nix-locate.defaultPackage.${config.currentSystem};
+ nix-locate = config.inputs.nix-locate.packages.${config.currentSystem}.default;
in {
programs.command-not-found.enable = false;
diff --git a/flake.nix b/flake.nix
index 08811b1..24d91d3 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,17 +1,16 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05";
- nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
+ nixpkgs-unstable.url = "github:NixOS/nixpkgs/master";
flake-utils.url = "github:numtide/flake-utils";
- nix-locate.url = "github:googlebot42/nix-index";
+ nix-locate.url = "github:bennofs/nix-index";
nix-locate.inputs.nixpkgs.follows = "nixpkgs";
# mail server
simple-nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-22.05";
simple-nixos-mailserver.inputs.nixpkgs.follows = "nixpkgs";
- simple-nixos-mailserver.inputs.nixpkgs-21_11.follows = "nixpkgs";
# agenix
agenix.url = "github:ryantm/agenix";
@@ -42,12 +41,12 @@
modules = system: [
./common
inputs.simple-nixos-mailserver.nixosModule
- inputs.agenix.nixosModule
+ inputs.agenix.nixosModules.default
inputs.dailybuild_modules.nixosModule
inputs.archivebox.nixosModule
({ lib, ... }: {
config.environment.systemPackages = [
- inputs.agenix.defaultPackage.${system}
+ inputs.agenix.packages.${system}.agenix
];
# because nixos specialArgs doesn't work for containers... need to pass in inputs a different way
@@ -70,7 +69,7 @@
in
{
"reg" = mkSystem "x86_64-linux" nixpkgs ./machines/reg/configuration.nix;
- "ray" = mkSystem "x86_64-linux" nixpkgs ./machines/ray/configuration.nix;
+ "ray" = mkSystem "x86_64-linux" nixpkgs-unstable ./machines/ray/configuration.nix;
"nat" = mkSystem "aarch64-linux" nixpkgs ./machines/nat/configuration.nix;
"liza" = mkSystem "x86_64-linux" nixpkgs ./machines/liza/configuration.nix;
"ponyo" = mkSystem "x86_64-linux" nixpkgs ./machines/ponyo/configuration.nix;
diff --git a/machines/ray/configuration.nix b/machines/ray/configuration.nix
index b5bfbd4..c203635 100644
--- a/machines/ray/configuration.nix
+++ b/machines/ray/configuration.nix
@@ -1,12 +1,8 @@
{ config, pkgs, lib, ... }:
{
- disabledModules = [
- "hardware/video/nvidia.nix"
- ];
imports = [
./hardware-configuration.nix
- ./nvidia.nix
];
firmware.x86_64.enable = true;
@@ -30,19 +26,14 @@
# gpu
services.xserver.videoDrivers = [ "nvidia" ];
- services.xserver.logFile = "/var/log/Xorg.0.log";
hardware.nvidia = {
modesetting.enable = true; # for nvidia-vaapi-driver
prime = {
- sync.enable = true;
+ reverseSync.enable = true;
+ offload.enableOffloadCmd = true;
nvidiaBusId = "PCI:1:0:0";
amdgpuBusId = "PCI:4:0:0";
};
-# powerManagement = {
-# enable = true;
-# finegrained = true;
-# coarsegrained = true;
-# };
};
# virt-manager
diff --git a/machines/ray/nvidia.nix b/machines/ray/nvidia.nix
deleted file mode 100644
index 92b676f..0000000
--- a/machines/ray/nvidia.nix
+++ /dev/null
@@ -1,485 +0,0 @@
-# This module provides the proprietary NVIDIA X11 / OpenGL drivers.
-
-{ config, lib, pkgs, ... }:
-
-with lib;
-
-let
- nvidia_x11 = let
- drivers = config.services.xserver.videoDrivers;
- isDeprecated = str: (hasPrefix "nvidia" str) && (str != "nvidia");
- hasDeprecated = drivers: any isDeprecated drivers;
- in if (hasDeprecated drivers) then
- throw ''
- Selecting an nvidia driver has been modified for NixOS 19.03. The version is now set using `hardware.nvidia.package`.
- ''
- else if (elem "nvidia" drivers) then cfg.package else null;
-
- enabled = nvidia_x11 != null;
- cfg = config.hardware.nvidia;
-
- pCfg = cfg.prime;
- syncCfg = pCfg.sync;
- offloadCfg = pCfg.offload;
- reverseSyncCfg = pCfg.reverse_sync;
- primeEnabled = syncCfg.enable || reverseSyncCfg.enable || offloadCfg.enable;
- nvidiaPersistencedEnabled = cfg.nvidiaPersistenced;
- nvidiaSettings = cfg.nvidiaSettings;
-in
-
-{
- imports =
- [
- (mkRenamedOptionModule [ "hardware" "nvidia" "optimus_prime" "enable" ] [ "hardware" "nvidia" "prime" "sync" "enable" ])
- (mkRenamedOptionModule [ "hardware" "nvidia" "optimus_prime" "allowExternalGpu" ] [ "hardware" "nvidia" "prime" "allowExternalGpu" ])
- (mkRenamedOptionModule [ "hardware" "nvidia" "prime" "sync" "allowExternalGpu" ] [ "hardware" "nvidia" "prime" "allowExternalGpu" ])
- (mkRenamedOptionModule [ "hardware" "nvidia" "optimus_prime" "nvidiaBusId" ] [ "hardware" "nvidia" "prime" "nvidiaBusId" ])
- (mkRenamedOptionModule [ "hardware" "nvidia" "optimus_prime" "intelBusId" ] [ "hardware" "nvidia" "prime" "intelBusId" ])
- ];
-
- options = {
- hardware.nvidia.powerManagement.enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Experimental power management through systemd. For more information, see
- the NVIDIA docs, on Chapter 21. Configuring Power Management Support.
- '';
- };
-
- hardware.nvidia.powerManagement.finegrained = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Experimental power management of PRIME offload. For more information, see
- the NVIDIA docs, chapter 22. PCI-Express runtime power management.
- '';
- };
-
- hardware.nvidia.powerManagement.coarsegrained = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Experimental power management of PRIME offload. For more information, see
- the NVIDIA docs, chapter 22. PCI-Express runtime power management.
- '';
- };
-
- hardware.nvidia.modesetting.enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Enable kernel modesetting when using the NVIDIA proprietary driver.
-
- Enabling this fixes screen tearing when using Optimus via PRIME (see
- . This is not enabled
- by default because it is not officially supported by NVIDIA and would not
- work with SLI.
- '';
- };
-
- hardware.nvidia.prime.nvidiaBusId = mkOption {
- type = types.str;
- default = "";
- example = "PCI:1:0:0";
- description = ''
- Bus ID of the NVIDIA GPU. You can find it using lspci; for example if lspci
- shows the NVIDIA GPU at "01:00.0", set this option to "PCI:1:0:0".
- '';
- };
-
- hardware.nvidia.prime.intelBusId = mkOption {
- type = types.str;
- default = "";
- example = "PCI:0:2:0";
- description = ''
- Bus ID of the Intel GPU. You can find it using lspci; for example if lspci
- shows the Intel GPU at "00:02.0", set this option to "PCI:0:2:0".
- '';
- };
-
- hardware.nvidia.prime.amdgpuBusId = mkOption {
- type = types.str;
- default = "";
- example = "PCI:4:0:0";
- description = ''
- Bus ID of the AMD APU. You can find it using lspci; for example if lspci
- shows the AMD APU at "04:00.0", set this option to "PCI:4:0:0".
- '';
- };
-
- hardware.nvidia.prime.sync.enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Enable NVIDIA Optimus support using the NVIDIA proprietary driver via PRIME.
- If enabled, the NVIDIA GPU will be always on and used for all rendering,
- while enabling output to displays attached only to the integrated Intel/AMD
- GPU without a multiplexer.
-
- Note that this option only has any effect if the "nvidia" driver is specified
- in , and it should preferably
- be the only driver there.
-
- If this is enabled, then the bus IDs of the NVIDIA and Intel/AMD GPUs have to
- be specified ( and
- or
- ).
-
- If you enable this, you may want to also enable kernel modesetting for the
- NVIDIA driver () in order
- to prevent tearing.
-
- Note that this configuration will only be successful when a display manager
- for which the
- option is supported is used.
- '';
- };
-
- hardware.nvidia.prime.allowExternalGpu = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Configure X to allow external NVIDIA GPUs when using Prime [Reverse] Sync.
- '';
- };
-
- hardware.nvidia.prime.offload.enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Enable render offload support using the NVIDIA proprietary driver via PRIME.
-
- If this is enabled, then the bus IDs of the NVIDIA and Intel/AMD GPUs have to
- be specified ( and
- or
- ).
- '';
- };
-
- hardware.nvidia.prime.offload.enableOffloadCmd = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Adds a `nvidia-offload` convenience script to
- for offloading programs to an nvidia device. To work, should have also enabled
- or
-
- Example usage `nvidia-offload sauerbraten_client`
- '';
- };
-
- hardware.nvidia.prime.reverse_sync.enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Warning: This feature is relatively new, depending on your system this might
- work poorly. AMD support, especially so.
- See: https://forums.developer.nvidia.com/t/the-all-new-outputsink-feature-aka-reverse-prime/129828
-
- Enable NVIDIA Optimus support using the NVIDIA proprietary driver via reverse
- PRIME. If enabled, the Intel/AMD GPU will be used for all rendering, while
- enabling output to displays attached only to the NVIDIA GPU without a
- multiplexer.
-
- Note that this option only has any effect if the "nvidia" driver is specified
- in , and it should preferably
- be the only driver there.
-
- If this is enabled, then the bus IDs of the NVIDIA and Intel/AMD GPUs have to
- be specified ( and
- or
- ).
-
- If you enable this, you may want to also enable kernel modesetting for the
- NVIDIA driver () in order
- to prevent tearing.
-
- Note that this configuration will only be successful when a display manager
- for which the
- option is supported is used.
- '';
- };
-
- hardware.nvidia.nvidiaSettings = mkOption {
- default = true;
- type = types.bool;
- description = ''
- Whether to add nvidia-settings, NVIDIA's GUI configuration tool, to
- systemPackages.
- '';
- };
-
- hardware.nvidia.nvidiaPersistenced = mkOption {
- default = false;
- type = types.bool;
- description = ''
- Update for NVIDA GPU headless mode, i.e. nvidia-persistenced. It ensures all
- GPUs stay awake even during headless mode.
- '';
- };
-
- hardware.nvidia.package = lib.mkOption {
- type = lib.types.package;
- default = config.boot.kernelPackages.nvidiaPackages.stable;
- defaultText = literalExpression "config.boot.kernelPackages.nvidiaPackages.stable";
- description = ''
- The NVIDIA X11 derivation to use.
- '';
- example = literalExpression "config.boot.kernelPackages.nvidiaPackages.legacy_340";
- };
- };
-
- config = let
- igpuDriver = if pCfg.intelBusId != "" then "modesetting" else "amdgpu";
- igpuBusId = if pCfg.intelBusId != "" then pCfg.intelBusId else pCfg.amdgpuBusId;
- in mkIf enabled {
- assertions = [
- {
- assertion = primeEnabled -> pCfg.intelBusId == "" || pCfg.amdgpuBusId == "";
- message = ''
- You cannot configure both an Intel iGPU and an AMD APU. Pick the one corresponding to your processor.
- '';
- }
-
- {
- assertion = offloadCfg.enableOffloadCmd -> offloadCfg.enable || reverseSyncCfg.enable;
- message = ''
- Offload command requires offloading or reverse prime sync to be enabled.
- '';
- }
-
- {
- assertion = primeEnabled -> pCfg.nvidiaBusId != "" && (pCfg.intelBusId != "" || pCfg.amdgpuBusId != "");
- message = ''
- When NVIDIA PRIME is enabled, the GPU bus IDs must configured.
- '';
- }
-
- {
- assertion = offloadCfg.enable -> versionAtLeast nvidia_x11.version "435.21";
- message = "NVIDIA PRIME render offload is currently only supported on versions >= 435.21.";
- }
-
- {
- assertion = (reverseSyncCfg.enable && pCfg.amdgpuBusId != "") -> versionAtLeast nvidia_x11.version "470.0";
- message = "NVIDIA PRIME render offload for AMD APUs is currently only supported on versions >= 470 beta.";
- }
-
- {
- assertion = !(syncCfg.enable && offloadCfg.enable);
- message = "PRIME Sync and Offload cannot be both enabled";
- }
-
- {
- assertion = !(syncCfg.enable && reverseSyncCfg.enable);
- message = "PRIME Sync and PRIME Reverse Sync cannot be both enabled";
- }
-
- {
- assertion = !(syncCfg.enable && cfg.powerManagement.finegrained && cfg.powerManagement.coarsegrained);
- message = "Sync precludes powering down the NVIDIA GPU.";
- }
-
- {
- assertion = cfg.powerManagement.finegrained -> offloadCfg.enable;
- message = "Fine-grained power management requires offload to be enabled.";
- }
-
- {
- assertion = cfg.powerManagement.coarsegrained -> offloadCfg.enable;
- message = "Coarse-grained power management requires offload to be enabled.";
- }
-
- {
- assertion = cfg.powerManagement.enable -> (
- builtins.pathExists (cfg.package.out + "/bin/nvidia-sleep.sh") &&
- builtins.pathExists (cfg.package.out + "/lib/systemd/system-sleep/nvidia")
- );
- message = "Required files for driver based power management don't exist.";
- }
- ];
-
- # If Optimus/PRIME is enabled, we:
- # - Specify the configured NVIDIA GPU bus ID in the Device section for the
- # "nvidia" driver.
- # - Add the AllowEmptyInitialConfiguration option to the Screen section for the
- # "nvidia" driver, in order to allow the X server to start without any outputs.
- # - Add a separate Device section for the Intel GPU, using the "modesetting"
- # driver and with the configured BusID.
- # - OR add a separate Device section for the AMD APU, using the "amdgpu"
- # driver and with the configures BusID.
- # - Reference that Device section from the ServerLayout section as an inactive
- # device.
- # - Configure the display manager to run specific `xrandr` commands which will
- # configure/enable displays connected to the Intel iGPU / AMD APU.
-
- services.xserver.useGlamor = mkDefault offloadCfg.enable;
-
- # reverse sync implies offloading
- hardware.nvidia.prime.offload.enable = mkDefault reverseSyncCfg.enable;
-
- services.xserver.drivers = optional primeEnabled {
- name = igpuDriver;
- display = !syncCfg.enable;
- modules = optional (igpuDriver == "amdgpu") [ pkgs.xorg.xf86videoamdgpu ];
- deviceSection = ''
- BusID "${igpuBusId}"
- ${optionalString (syncCfg.enable && igpuDriver != "amdgpu") ''Option "AccelMethod" "none"''}
- '';
- } ++ singleton {
- name = "nvidia";
- modules = [ nvidia_x11.bin ];
- display = syncCfg.enable;
- deviceSection = optionalString primeEnabled ''
- BusID "${pCfg.nvidiaBusId}"
- ${optionalString pCfg.allowExternalGpu "Option \"AllowExternalGpus\""}
- '';
- };
-
- services.xserver.serverLayoutSection = optionalString syncCfg.enable ''
- Inactive "Device-${igpuDriver}[0]"
- '' + optionalString reverseSyncCfg.enable ''
- Inactive "Device-nvidia[0]"
- '' + optionalString offloadCfg.enable ''
- Option "AllowNVIDIAGPUScreens"
- '';
-
- services.xserver.displayManager.setupCommands = let
- gpuProviderName = if igpuDriver == "amdgpu" then
- # find the name of the provider if amdgpu
- "`${pkgs.xorg.xrandr}/bin/xrandr --listproviders | ${pkgs.gnugrep}/bin/grep -i AMD | ${pkgs.gnused}/bin/sed -n 's/^.*name://p'`"
- else
- igpuDriver;
- providerCmdParams = if syncCfg.enable then "\"${gpuProviderName}\" NVIDIA-0" else "NVIDIA-G0 \"${gpuProviderName}\"";
- in optionalString (syncCfg.enable || reverseSyncCfg.enable) ''
- # Added by nvidia configuration module for Optimus/PRIME.
- ${pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource ${providerCmdParams}
- ${pkgs.xorg.xrandr}/bin/xrandr --auto
- '';
-
- environment.etc."nvidia/nvidia-application-profiles-rc" = mkIf nvidia_x11.useProfiles {
- source = "${nvidia_x11.bin}/share/nvidia/nvidia-application-profiles-rc";
- };
-
- # 'nvidia_x11' installs it's files to /run/opengl-driver/...
- environment.etc."egl/egl_external_platform.d".source =
- "/run/opengl-driver/share/egl/egl_external_platform.d/";
-
- hardware.opengl.extraPackages = [
- nvidia_x11.out
- # pkgs.nvidia-vaapi-driver
- ];
- hardware.opengl.extraPackages32 = [
- nvidia_x11.lib32
- # pkgs.pkgsi686Linux.nvidia-vaapi-driver
- ];
-
- environment.systemPackages = [ nvidia_x11.bin ]
- ++ optionals cfg.nvidiaSettings [ nvidia_x11.settings ]
- ++ optionals nvidiaPersistencedEnabled [ nvidia_x11.persistenced ]
- ++ optionals offloadCfg.enableOffloadCmd [
- (pkgs.writeShellScriptBin "nvidia-offload" ''
- export __NV_PRIME_RENDER_OFFLOAD=1
- export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0
- export __GLX_VENDOR_LIBRARY_NAME=nvidia
- export __VK_LAYER_NV_optimus=NVIDIA_only
- exec -a "$0" "$@"
- '')
- ];
-
- systemd.packages = optional cfg.powerManagement.enable nvidia_x11.out;
-
- systemd.services = let
- baseNvidiaService = state: {
- description = "NVIDIA system ${state} actions";
-
- path = with pkgs; [ kbd ];
- serviceConfig = {
- Type = "oneshot";
- ExecStart = "${nvidia_x11.out}/bin/nvidia-sleep.sh '${state}'";
- };
- };
-
- nvidiaService = sleepState: (baseNvidiaService sleepState) // {
- before = [ "systemd-${sleepState}.service" ];
- requiredBy = [ "systemd-${sleepState}.service" ];
- };
-
- services = (builtins.listToAttrs (map (t: nameValuePair "nvidia-${t}" (nvidiaService t)) ["hibernate" "suspend"]))
- // {
- nvidia-resume = (baseNvidiaService "resume") // {
- after = [ "systemd-suspend.service" "systemd-hibernate.service" ];
- requiredBy = [ "systemd-suspend.service" "systemd-hibernate.service" ];
- };
- };
- in optionalAttrs cfg.powerManagement.enable services
- // optionalAttrs nvidiaPersistencedEnabled {
- "nvidia-persistenced" = mkIf nvidiaPersistencedEnabled {
- description = "NVIDIA Persistence Daemon";
- wantedBy = [ "multi-user.target" ];
- serviceConfig = {
- Type = "forking";
- Restart = "always";
- PIDFile = "/var/run/nvidia-persistenced/nvidia-persistenced.pid";
- ExecStart = "${nvidia_x11.persistenced}/bin/nvidia-persistenced --verbose";
- ExecStopPost = "${pkgs.coreutils}/bin/rm -rf /var/run/nvidia-persistenced";
- };
- };
- };
-
- systemd.tmpfiles.rules = optional config.virtualisation.docker.enableNvidia
- "L+ /run/nvidia-docker/bin - - - - ${nvidia_x11.bin}/origBin"
- ++ optional (nvidia_x11.persistenced != null && config.virtualisation.docker.enableNvidia)
- "L+ /run/nvidia-docker/extras/bin/nvidia-persistenced - - - - ${nvidia_x11.persistenced}/origBin/nvidia-persistenced";
-
- boot.extraModulePackages = [ nvidia_x11.bin ];
-
- # nvidia-uvm is required by CUDA applications.
- boot.kernelModules = [ "nvidia-uvm" ] ++
- optionals config.services.xserver.enable [ "nvidia" "nvidia_modeset" "nvidia_drm" ];
-
- # If requested enable modesetting via kernel parameter.
- boot.kernelParams = optional (offloadCfg.enable || cfg.modesetting.enable) "nvidia-drm.modeset=1"
- ++ optional cfg.powerManagement.enable "nvidia.NVreg_PreserveVideoMemoryAllocations=1";
-
- services.udev.extraRules =
- ''
- # Create /dev/nvidia-uvm when the nvidia-uvm module is loaded.
- KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 255'"
- KERNEL=="nvidia_modeset", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-modeset c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 254'"
- KERNEL=="card*", SUBSYSTEM=="drm", DRIVERS=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia%n c $$(grep nvidia-frontend /proc/devices | cut -d \ -f 1) %n'"
- KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
- KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
- '' + optionalString (cfg.powerManagement.finegrained || cfg.powerManagement.coarsegrained) ''
- # Remove NVIDIA USB xHCI Host Controller devices, if present
- ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{remove}="1"
-
- # Remove NVIDIA USB Type-C UCSI devices, if present
- ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{remove}="1"
-
- # Remove NVIDIA Audio devices, if present
- ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{remove}="1"
-
- # Enable runtime PM for NVIDIA VGA/3D controller devices on driver bind
- ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="auto"
- ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030200", TEST=="power/control", ATTR{power/control}="auto"
-
- # Disable runtime PM for NVIDIA VGA/3D controller devices on driver unbind
- ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="on"
- ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030200", TEST=="power/control", ATTR{power/control}="on"
- '';
-
- boot.extraModprobeConfig = optionalString cfg.powerManagement.finegrained ''
- options nvidia "NVreg_DynamicPowerManagement=0x02"
- '' + optionalString cfg.powerManagement.coarsegrained ''
- options nvidia "NVreg_DynamicPowerManagement=0x01"
- '';
-
- boot.blacklistedKernelModules = [ "nouveau" "nvidiafb" ];
-
- services.acpid.enable = true;
-
- };
-
-}