1{ stdenv, fetchurl, fetchpatch, kernel }:
2
3let
4 baseName = "bbswitch";
5 version = "0.8";
6 name = "${baseName}-${version}-${kernel.version}";
7
8in
9
10stdenv.mkDerivation {
11 inherit name;
12
13 src = fetchurl {
14 url = "https://github.com/Bumblebee-Project/${baseName}/archive/v${version}.tar.gz";
15 sha256 = "0xql1nv8dafnrcg54f3jsi3ny3cd2ca9iv73pxpgxd2gfczvvjkn";
16 };
17
18 patches = [ (fetchpatch {
19 url = "https://github.com/Bumblebee-Project/bbswitch/pull/102.patch";
20 sha256 = "1lbr6pyyby4k9rn2ry5qc38kc738d0442jhhq57vmdjb6hxjya7m";
21 }) ];
22
23 nativeBuildInputs = kernel.moduleBuildDependencies;
24
25 hardeningDisable = [ "pic" ];
26
27 preBuild = ''
28 substituteInPlace Makefile \
29 --replace "\$(shell uname -r)" "${kernel.modDirVersion}" \
30 --replace "/lib/modules" "${kernel.dev}/lib/modules"
31 '';
32
33 installPhase = ''
34 mkdir -p $out/lib/modules/${kernel.modDirVersion}/misc
35 cp bbswitch.ko $out/lib/modules/${kernel.modDirVersion}/misc
36
37 mkdir -p $out/bin
38 tee $out/bin/discrete_vga_poweroff << EOF
39 #!/bin/sh
40
41 echo -n OFF > /proc/acpi/bbswitch
42 EOF
43 tee $out/bin/discrete_vga_poweron << EOF
44 #!/bin/sh
45
46 echo -n ON > /proc/acpi/bbswitch
47 EOF
48 chmod +x $out/bin/discrete_vga_poweroff $out/bin/discrete_vga_poweron
49 '';
50
51 meta = with stdenv.lib; {
52 description = "A module for powering off hybrid GPUs";
53 platforms = platforms.linux;
54 homepage = https://github.com/Bumblebee-Project/bbswitch;
55 maintainers = with maintainers; [ abbradar ];
56 };
57}