Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
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}