about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools/security/bitwarden-directory-connector/default.nix
blob: 7f46b444b2e958fd10a1fb930070de07e99ab728 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
{
  lib,
  buildNpmPackage,
  electron,
  fetchFromGitHub,
  buildPackages,
  python3,
  pkg-config,
  libsecret,
  nodejs_18,
}:

let
  common = { name, npmBuildScript, installPhase }: buildNpmPackage rec {
    pname = name;
    version = "2023.10.0";
    nodejs = nodejs_18;

    src = fetchFromGitHub {
      owner = "bitwarden";
      repo = "directory-connector";
      rev = "v${version}";
      hash = "sha256-PlOtTh+rpTxAv8ajHBDHZuL7yeeLVpbAfKEDPQlejIg=";
    };

    postPatch = ''
      ${lib.getExe buildPackages.jq} 'del(.scripts.preinstall)' package.json > package.json.tmp
      mv -f package.json{.tmp,}

      substituteInPlace electron-builder.json \
        --replace-fail '"afterSign": "scripts/notarize.js",' "" \
        --replace-fail "AppImage" "dir"
    '';

    npmDepsHash = "sha256-jBAWWY12qeX2EDhUvT3TQpnQvYXRsIilRrXGpVzxYvw=";

    env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";

    makeCacheWritable = true;
    inherit npmBuildScript installPhase;

    buildInputs = [
      libsecret
    ];

    nativeBuildInputs = [
      python3
      pkg-config
    ];

    meta = with lib; {
      description = "LDAP connector for Bitwarden";
      homepage = "https://github.com/bitwarden/directory-connector";
      license = licenses.gpl3Only;
      maintainers = with maintainers; [ Silver-Golden SuperSandro2000 ];
      platforms = platforms.linux;
      mainProgram = name;
    };
  };
in {
  bitwarden-directory-connector = common {
    name = "bitwarden-directory-connector";
    npmBuildScript = "build:dist";
    installPhase = ''
      runHook preInstall

      npm exec electron-builder -- \
        --dir \
        -c.electronDist=${electron}/libexec/electron \
        -c.electronVersion=${electron.version} \
        -c.npmRebuild=false

      mkdir -p $out/share/bitwarden-directory-connector $out/bin
      cp -r dist/*-unpacked/{locales,resources{,.pak}} $out/share/bitwarden-directory-connector

      makeWrapper ${lib.getExe electron} $out/bin/bitwarden-directory-connector \
        --add-flags $out/share/bitwarden-directory-connector/resources/app.asar \
        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
        --set-default ELECTRON_IS_DEV 0 \
        --inherit-argv0

      runHook postInstall
    '';
  };

  bitwarden-directory-connector-cli = common {
    name = "bitwarden-directory-connector-cli";
    npmBuildScript = "build:cli:prod";
    installPhase = ''
      runHook preInstall

      mkdir -p $out/libexec/bitwarden-directory-connector
      cp -R build-cli node_modules $out/libexec/bitwarden-directory-connector

      # needs to be wrapped with nodejs so that it can be executed
      chmod +x $out/libexec/bitwarden-directory-connector/build-cli/bwdc.js
      mkdir -p $out/bin
      ln -s $out/libexec/bitwarden-directory-connector/build-cli/bwdc.js $out/bin/bitwarden-directory-connector-cli

      runHook postInstall
    '';
  };
}