From f48af13c5ac71f4f128a73b2be1168a9b5969b33 Mon Sep 17 00:00:00 2001 From: "William A. Kennington III" Date: Fri, 8 Nov 2013 11:13:08 -0600 Subject: [PATCH] Add a nix module for AMD Hybrid Graphics --- nixos/modules/module-list.nix | 1 + .../services/hardware/amd-hybrid-graphics.nix | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 nixos/modules/services/hardware/amd-hybrid-graphics.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index caba5ef18c3c..2189d0358dab 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -91,6 +91,7 @@ ./services/databases/virtuoso.nix ./services/games/ghost-one.nix ./services/hardware/acpid.nix + ./services/hardware/amd-hybrid-graphics.nix ./services/hardware/bluetooth.nix ./services/hardware/nvidia-optimus.nix ./services/hardware/pcscd.nix diff --git a/nixos/modules/services/hardware/amd-hybrid-graphics.nix b/nixos/modules/services/hardware/amd-hybrid-graphics.nix new file mode 100644 index 000000000000..d938867186d0 --- /dev/null +++ b/nixos/modules/services/hardware/amd-hybrid-graphics.nix @@ -0,0 +1,39 @@ +{ config, pkgs, ... }: + +{ + + ###### interface + + options = { + + hardware.amdHybridGraphics.disable = pkgs.lib.mkOption { + default = false; + type = pkgs.lib.types.bool; + description = '' + Completely disable the AMD graphics card and use the + integrated graphics processor instead. + ''; + }; + + }; + + + ###### implementation + + config = pkgs.lib.mkIf config.hardware.amdHybridGraphics.disable { + systemd.services."amd-hybrid-graphics" = { + path = [ pkgs.bash ]; + description = "Disable AMD Card"; + after = [ "sys-kernel-debug.mount" ]; + requires = [ "sys-kernel-debug.mount" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStart = "${pkgs.bash}/bin/sh -c 'echo -e \"IGD\\nOFF\" > /sys/kernel/debug/vgaswitcheroo/switch; exit 0'"; + ExecStop = "${pkgs.bash}/bin/sh -c 'echo ON >/sys/kernel/debug/vgaswitcheroo/switch; exit 0'"; + }; + }; + }; + +}