1{
2 lib,
3 buildNpmPackage,
4 electron,
5 fetchFromGitHub,
6 buildPackages,
7 python3,
8 pkg-config,
9 libsecret,
10 nodejs_22,
11}:
12
13let
14 common =
15 {
16 name,
17 npmBuildScript,
18 installPhase,
19 }:
20 buildNpmPackage rec {
21 pname = name;
22 version = "2025.6.1";
23 nodejs = nodejs_22;
24
25 src = fetchFromGitHub {
26 owner = "bitwarden";
27 repo = "directory-connector";
28 rev = "v${version}";
29 hash = "sha256-VRM1kAWP0oNSLwIflTu6s7XjhSfy8z8G+5PUhQCc/tY=";
30 };
31
32 postPatch = ''
33 ${lib.getExe buildPackages.jq} 'del(.scripts.preinstall)' package.json > package.json.tmp
34 mv -f package.json{.tmp,}
35
36 substituteInPlace electron-builder.json \
37 --replace-fail '"afterSign": "scripts/notarize.js",' "" \
38 --replace-fail "AppImage" "dir"
39 '';
40
41 npmDepsHash = "sha256-bUCnUnBaA+PwRyxDieqPWzCh87KPQUiuF3uW9fDHtQE=";
42
43 env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
44
45 makeCacheWritable = true;
46 inherit npmBuildScript installPhase;
47
48 buildInputs = [
49 libsecret
50 ];
51
52 nativeBuildInputs = [
53 (python3.withPackages (ps: with ps; [ setuptools ]))
54 pkg-config
55 ];
56
57 meta = with lib; {
58 description = "LDAP connector for Bitwarden";
59 homepage = "https://github.com/bitwarden/directory-connector";
60 license = licenses.gpl3Only;
61 maintainers = with maintainers; [
62 Silver-Golden
63 SuperSandro2000
64 ];
65 platforms = platforms.linux;
66 mainProgram = name;
67 };
68 };
69in
70{
71 bitwarden-directory-connector = common {
72 name = "bitwarden-directory-connector";
73 npmBuildScript = "build:dist";
74 installPhase = ''
75 runHook preInstall
76
77 npm exec electron-builder -- \
78 --dir \
79 -c.electronDist=${electron.dist} \
80 -c.electronVersion=${electron.version} \
81 -c.npmRebuild=false
82
83 mkdir -p $out/share/bitwarden-directory-connector $out/bin
84 cp -r dist/*-unpacked/{locales,resources{,.pak}} $out/share/bitwarden-directory-connector
85
86 makeWrapper ${lib.getExe electron} $out/bin/bitwarden-directory-connector \
87 --add-flags $out/share/bitwarden-directory-connector/resources/app.asar \
88 --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \
89 --set-default ELECTRON_IS_DEV 0 \
90 --inherit-argv0
91
92 runHook postInstall
93 '';
94 };
95
96 bitwarden-directory-connector-cli = common {
97 name = "bitwarden-directory-connector-cli";
98 npmBuildScript = "build:cli:prod";
99 installPhase = ''
100 runHook preInstall
101
102 mkdir -p $out/libexec/bitwarden-directory-connector
103 cp -R build-cli node_modules $out/libexec/bitwarden-directory-connector
104
105 # needs to be wrapped with nodejs so that it can be executed
106 chmod +x $out/libexec/bitwarden-directory-connector/build-cli/bwdc.js
107 mkdir -p $out/bin
108 ln -s $out/libexec/bitwarden-directory-connector/build-cli/bwdc.js $out/bin/bitwarden-directory-connector-cli
109
110 runHook postInstall
111 '';
112 };
113}