rio: 0.0.36 -> 0.0.37
[NixPkgs.git] / pkgs / tools / networking / netbird / default.nix
blobf946bdca45b3e1f2b08fe466b8674891a847f865
1 { stdenv
2 , lib
3 , nixosTests
4 , nix-update-script
5 , buildGoModule
6 , fetchFromGitHub
7 , installShellFiles
8 , pkg-config
9 , gtk3
10 , libayatana-appindicator
11 , libX11
12 , libXcursor
13 , libXxf86vm
14 , Cocoa
15 , IOKit
16 , Kernel
17 , UserNotifications
18 , WebKit
19 , ui ? false
20 , netbird-ui
22 let
23   modules =
24     if ui then {
25       "client/ui" = "netbird-ui";
26     } else {
27       client = "netbird";
28       management = "netbird-mgmt";
29       signal = "netbird-signal";
30     };
32 buildGoModule rec {
33   pname = "netbird";
34   version = "0.27.5";
36   src = fetchFromGitHub {
37     owner = "netbirdio";
38     repo = pname;
39     rev = "v${version}";
40     hash = "sha256-DWtTCx+vzOE4yE9jAUxB1oF1UubIXK4f7wptJY89az0=";
41   };
43   vendorHash = "sha256-LPq6ovulE+xdoRaQpwA0mNqw3kFxMs/am1ucO8UmDtU=";
45   nativeBuildInputs = [ installShellFiles ] ++ lib.optional ui pkg-config;
47   buildInputs = lib.optionals (stdenv.isLinux && ui) [
48     gtk3
49     libayatana-appindicator
50     libX11
51     libXcursor
52     libXxf86vm
53   ] ++ lib.optionals (stdenv.isDarwin && ui) [
54     Cocoa
55     IOKit
56     Kernel
57     UserNotifications
58     WebKit
59   ];
61   subPackages = lib.attrNames modules;
63   ldflags = [
64     "-s"
65     "-w"
66     "-X github.com/netbirdio/netbird/version.version=${version}"
67     "-X main.builtBy=nix"
68   ];
70   # needs network access
71   doCheck = false;
73   postPatch = ''
74     # make it compatible with systemd's RuntimeDirectory
75     substituteInPlace client/cmd/root.go \
76       --replace-fail 'unix:///var/run/netbird.sock' 'unix:///var/run/netbird/sock'
77     substituteInPlace client/ui/client_ui.go \
78       --replace-fail 'unix:///var/run/netbird.sock' 'unix:///var/run/netbird/sock'
79   '';
81   postInstall = lib.concatStringsSep "\n"
82     (lib.mapAttrsToList
83       (module: binary: ''
84         mv $out/bin/${lib.last (lib.splitString "/" module)} $out/bin/${binary}
85       '' + lib.optionalString (!ui) ''
86         installShellCompletion --cmd ${binary} \
87           --bash <($out/bin/${binary} completion bash) \
88           --fish <($out/bin/${binary} completion fish) \
89           --zsh <($out/bin/${binary} completion zsh)
90       '')
91       modules) + lib.optionalString (stdenv.isLinux && ui) ''
92     mkdir -p $out/share/pixmaps
93     cp $src/client/ui/netbird-systemtray-connected.png $out/share/pixmaps/netbird.png
95     mkdir -p $out/share/applications
96     cp $src/client/ui/netbird.desktop $out/share/applications/netbird.desktop
98     substituteInPlace $out/share/applications/netbird.desktop \
99       --replace-fail "Exec=/usr/bin/netbird-ui" "Exec=$out/bin/netbird-ui"
100   '';
102   passthru = {
103     tests.netbird = nixosTests.netbird;
104     tests.netbird-ui = netbird-ui;
105     updateScript = nix-update-script { };
106   };
108   meta = with lib; {
109     homepage = "https://netbird.io";
110     changelog = "https://github.com/netbirdio/netbird/releases/tag/v${version}";
111     description = "Connect your devices into a single secure private WireGuard®-based mesh network with SSO/MFA and simple access controls";
112     license = licenses.bsd3;
113     maintainers = with maintainers; [ misuzu ];
114     mainProgram = "netbird";
115   };