1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 cmake,
6 gtest,
7 cudatoolkit,
8 libdrm,
9 ncurses,
10 testers,
11 udev,
12 apple-sdk_12,
13 addDriverRunpath,
14 amd ? false,
15 intel ? false,
16 msm ? false,
17 nvidia ? false,
18 apple ? false,
19 panfrost ? false,
20 panthor ? false,
21 ascend ? false,
22 v3d ? false,
23 tpu ? false,
24}:
25
26let
27 drm-postFixup = ''
28 patchelf \
29 --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
30 --set-rpath "${
31 lib.makeLibraryPath [
32 libdrm
33 ncurses
34 udev
35 ]
36 }" \
37 $out/bin/nvtop
38 '';
39 needDrm = (amd || msm || panfrost || panthor || intel);
40in
41stdenv.mkDerivation (finalAttrs: {
42 pname = "nvtop";
43 version = "3.2.0";
44
45 # between generation of multiple update PRs for each package flavor and manual updates I choose manual updates
46 # nixpkgs-update: no auto update
47 src = fetchFromGitHub {
48 owner = "Syllo";
49 repo = "nvtop";
50 rev = finalAttrs.version;
51 hash = "sha256-8iChT55L2NSnHg8tLIry0rgi/4966MffShE0ib+2ywc=";
52 };
53
54 cmakeFlags = with lib.strings; [
55 (cmakeBool "BUILD_TESTING" true)
56 (cmakeBool "USE_LIBUDEV_OVER_LIBSYSTEMD" true)
57 (cmakeBool "AMDGPU_SUPPORT" amd)
58 (cmakeBool "NVIDIA_SUPPORT" nvidia)
59 (cmakeBool "INTEL_SUPPORT" intel)
60 (cmakeBool "APPLE_SUPPORT" apple)
61 (cmakeBool "MSM_SUPPORT" msm)
62 (cmakeBool "PANFROST_SUPPORT" panfrost)
63 (cmakeBool "PANTHOR_SUPPORT" panthor)
64 (cmakeBool "ASCEND_SUPPORT" ascend)
65 (cmakeBool "V3D_SUPPORT" v3d)
66 (cmakeBool "TPU_SUPPORT" tpu) # requires libtpuinfo which is not packaged yet
67 ];
68 nativeBuildInputs = [
69 cmake
70 ]
71 ++ lib.optionals finalAttrs.doCheck [
72 gtest
73 ]
74 ++ lib.optional nvidia addDriverRunpath;
75
76 buildInputs = [
77 ncurses
78 ]
79 ++ lib.optional stdenv.hostPlatform.isLinux udev
80 ++ lib.optional stdenv.hostPlatform.isDarwin apple-sdk_12
81 ++ lib.optional nvidia cudatoolkit
82 ++ lib.optional needDrm libdrm;
83
84 # this helps cmake to find <drm.h>
85 env.NIX_CFLAGS_COMPILE = lib.optionalString needDrm "-isystem ${lib.getDev libdrm}/include/libdrm";
86
87 # ordering of fixups is important
88 postFixup =
89 (lib.optionalString needDrm drm-postFixup)
90 + (lib.optionalString nvidia "addDriverRunpath $out/bin/nvtop");
91
92 # https://github.com/Syllo/nvtop/commit/33ec008e26a00227a666ccb11321e9971a50daf8
93 doCheck = !stdenv.hostPlatform.isDarwin;
94
95 passthru = {
96 tests.version = testers.testVersion {
97 inherit (finalAttrs) version;
98 package = finalAttrs.finalPackage;
99 command = "nvtop --version";
100 };
101 };
102
103 meta = with lib; {
104 description = "(h)top like task monitor for AMD, Adreno, Intel and NVIDIA GPUs";
105 longDescription = ''
106 Nvtop stands for Neat Videocard TOP, a (h)top like task monitor for AMD, Adreno, Intel and NVIDIA GPUs.
107 It can handle multiple GPUs and print information about them in a htop familiar way.
108 '';
109 homepage = "https://github.com/Syllo/nvtop";
110 changelog = "https://github.com/Syllo/nvtop/releases/tag/${finalAttrs.version}";
111 license = licenses.gpl3Only;
112 platforms = if apple then platforms.darwin else platforms.linux;
113 maintainers = with maintainers; [
114 gbtb
115 anthonyroussel
116 moni
117 ];
118 mainProgram = "nvtop";
119 };
120})