1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 kernel,
6}:
7
8let
9 version = "0.1.5-unstable-2025-06-04";
10
11 ## Upstream has not been merging PRs.
12 ## Nixpkgs maintainers are providing a
13 ## repo with PRs merged until upstream is
14 ## updated.
15 src = fetchFromGitHub {
16 owner = "amkillam";
17 repo = "ryzen_smu";
18 rev = "9f9569f889935f7c7294cc32c1467e5a4081701a";
19 hash = "sha256-i8T0+kUYsFMzYO3h6ffUXP1fgGOXymC4Ml2dArQLOdk=";
20 };
21
22 monitor-cpu = stdenv.mkDerivation {
23 pname = "monitor-cpu";
24 inherit version src;
25
26 makeFlags = [
27 "-C userspace"
28 ];
29
30 installPhase = ''
31 runHook preInstall
32
33 install userspace/monitor_cpu -Dm755 -t $out/bin
34
35 runHook postInstall
36 '';
37 };
38
39in
40stdenv.mkDerivation {
41 pname = "ryzen-smu-${kernel.version}";
42 inherit version src;
43
44 hardeningDisable = [ "pic" ];
45
46 nativeBuildInputs = kernel.moduleBuildDependencies;
47
48 makeFlags = [
49 "TARGET=${kernel.modDirVersion}"
50 "KERNEL_BUILD=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
51 ];
52
53 installPhase = ''
54 runHook preInstall
55
56 install ryzen_smu.ko -Dm444 -t $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/ryzen_smu
57 install ${monitor-cpu}/bin/monitor_cpu -Dm755 -t $out/bin
58
59 runHook postInstall
60 '';
61
62 meta = {
63 description = "Linux kernel driver that exposes access to the SMU (System Management Unit) for certain AMD Ryzen Processors";
64 homepage = "https://github.com/amkillam/ryzen_smu";
65 license = lib.licenses.gpl2Plus;
66 maintainers = with lib.maintainers; [
67 Cryolitia
68 phdyellow
69 aleksana
70 ];
71 platforms = [ "x86_64-linux" ];
72 mainProgram = "monitor_cpu";
73 };
74}