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 preBuild = ''
24 substituteInPlace Makefile \
25 --replace "\$(shell uname -r)" "${kernel.modDirVersion}" \
26 --replace "/lib/modules" "${kernel.dev}/lib/modules"
27 '';
28
29 installPhase = ''
30 mkdir -p $out/lib/modules/${kernel.modDirVersion}/misc
31 cp bbswitch.ko $out/lib/modules/${kernel.modDirVersion}/misc
32
33 mkdir -p $out/bin
34 tee $out/bin/discrete_vga_poweroff << EOF
35 #!/bin/sh
36
37 echo -n OFF > /proc/acpi/bbswitch
38 EOF
39 tee $out/bin/discrete_vga_poweron << EOF
40 #!/bin/sh
41
42 echo -n ON > /proc/acpi/bbswitch
43 EOF
44 chmod +x $out/bin/discrete_vga_poweroff $out/bin/discrete_vga_poweron
45 '';
46
47 meta = with stdenv.lib; {
48 description = "A module for powering off hybrid GPUs";
49 platforms = platforms.linux;
50 homepage = https://github.com/Bumblebee-Project/bbswitch;
51 maintainers = with maintainers; [ abbradar ];
52 };
53}