rio: 0.0.36 -> 0.0.37
[NixPkgs.git] / pkgs / tools / networking / pritunl-client / default.nix
blob3b8b80ffe3cc043d7336ac0006709d1465ab5d5a
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , runtimeShell
5 , runCommand
6 , makeWrapper
7 , installShellFiles
8 , buildGoModule
9 , coreutils
10 , which
11 , gnugrep
12 , gnused
13 , openresolv
14 , systemd
15 , iproute2
16 , openvpn
17 , electron
18 }: let
19   version = "1.3.3785.81";
20   src = fetchFromGitHub {
21     owner = "pritunl";
22     repo = "pritunl-client-electron";
23     rev = version;
24     sha256 = "sha256-0tlWX9vHiFHewiisI8lwsQdHyEhntu+x415hfbymhIo=";
25   };
27   cli = buildGoModule {
28     pname = "pritunl-cli";
29     inherit version src;
31     modRoot = "cli";
32     vendorHash = "sha256-1sAJbEZHagG6hnZBkb6EbQpSdNmTyTWfKpbektXSWYU=";
34     postInstall = ''
35       mv $out/bin/cli $out/bin/pritunl-client
36     '';
37   };
39   service = buildGoModule {
40     pname = "pritunl-client-service";
41     inherit version src;
43     modRoot = "service";
44     vendorHash = "sha256-QvuEQX1+sJOGB1AJNhnM3pVPxGmizDu8EN1yRspXjhU=";
46     nativeBuildInputs = [ makeWrapper ];
48     postPatch = ''
49       sed -Ei service/profile/scripts.go \
50         -e 's|#!\s*(/usr)?/bin/(env )?bash\b|#! ${runtimeShell}|g'
51     '' + lib.optionalString stdenv.isLinux ''
52       sed -Ei service/profile/scripts.go \
53         -e 's|(/usr)?/s?bin/busctl\b|busctl|g' \
54         -e 's|(/usr)?/s?bin/resolvectl\b|resolvectl|g' \
55         -e 's|(/usr)?/s?bin/ip\b|ip|g'
56     '';
58     postInstall = ''
59       mv $out/bin/service $out/bin/pritunl-client-service
60     '' + lib.optionalString stdenv.isLinux ''
61       mkdir -p $out/lib/systemd/system/
62       cp $src/resources_linux/pritunl-client.service $out/lib/systemd/system/
63       substituteInPlace $out/lib/systemd/system/pritunl-client.service \
64         --replace "/usr" "$out"
65     '';
67     postFixup = let
68       hookScriptsDeps = [
69         coreutils
70         which
71         gnused
72         gnugrep
73       ] ++ lib.optionals stdenv.isLinux [
74         openresolv
75         systemd
76         iproute2
77       ];
78       openvpn-wrapped = runCommand "openvpn-wrapped" {
79         nativeBuildInputs = [ makeWrapper ];
80       } ''
81         mkdir -p $out/bin
82         makeWrapper ${openvpn}/bin/openvpn $out/bin/openvpn \
83           --prefix PATH : ${lib.makeBinPath hookScriptsDeps} \
84           --add-flags "--setenv PATH \$PATH"
85       '';
86     in lib.optionalString stdenv.isLinux ''
87       wrapProgram $out/bin/pritunl-client-service \
88         --prefix PATH : "${lib.makeBinPath ([ openvpn-wrapped ])}"
89     '';
90   };
91 in stdenv.mkDerivation {
92   pname = "pritunl-client";
93   inherit version src;
95   dontBuild = true;
96   dontConfigure = true;
98   nativeBuildInputs = [
99     makeWrapper
100     installShellFiles
101   ];
103   installPhase = ''
104     runHook preInstall
106     mkdir -p $out/bin/
107     ln -s ${cli}/bin/pritunl-client $out/bin/
108     ln -s ${service}/bin/pritunl-client-service $out/bin/
110     mkdir -p $out/lib/
111     cp -r client $out/lib/pritunl_client_electron
113     makeWrapper ${electron}/bin/electron $out/bin/pritunl-client-electron \
114       --add-flags $out/lib/pritunl_client_electron
116   '' + lib.optionalString stdenv.isLinux ''
117     mkdir -p $out/lib/systemd/system/
118     ln -s ${service}/lib/systemd/system/pritunl-client.service $out/lib/systemd/system/
120     mkdir -p $out/share/icons/
121     cp -r resources_linux/icons $out/share/icons/hicolor
123     mkdir -p $out/share/applications/
124     cp resources_linux/pritunl-client-electron.desktop $out/share/applications/
125     substituteInPlace $out/share/applications/pritunl-client-electron.desktop \
126       --replace "/usr/lib/pritunl_client_electron/Pritunl" "$out/bin/pritunl-client-electron"
127   '' + ''
128     # install shell completions for pritunl-client
129     installShellCompletion --cmd pritunl-client \
130       --bash <($out/bin/pritunl-client completion bash) \
131       --fish <($out/bin/pritunl-client completion fish) \
132       --zsh <($out/bin/pritunl-client completion zsh)
134     runHook postInstall
135   '';
137   meta = with lib; {
138     description = "Pritunl OpenVPN client";
139     homepage = "https://client.pritunl.com/";
140     license = licenses.unfree;
141     maintainers = with maintainers; [ minizilla andrevmatos ];
142   };