nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 292 lines 8.4 kB view raw
1{ 2 lib, 3 stdenv, 4 clang_20, 5 6 fetchFromGitHub, 7 fetchYarnDeps, 8 replaceVars, 9 writeShellScriptBin, 10 11 copyDesktopItems, 12 cctools, 13 clojure, 14 darwin, 15 makeDesktopItem, 16 makeWrapper, 17 nodejs, 18 removeReferencesTo, 19 yarnBuildHook, 20 yarnConfigHook, 21 xcbuild, 22 zip, 23 24 electron, 25 git, 26}: 27 28stdenv.mkDerivation (finalAttrs: { 29 pname = "logseq"; 30 version = "0.10.15"; 31 32 src = fetchFromGitHub { 33 owner = "logseq"; 34 repo = "logseq"; 35 tag = finalAttrs.version; 36 hash = "sha256-knosNA2Gqy10Kr9HWnBdYNlV51zzgFuL8cdioVlAk0Q="; 37 }; 38 39 patches = [ 40 (replaceVars ./hardcode-git-paths.patch { 41 cljs_time_src = fetchFromGitHub { 42 owner = "logseq"; 43 repo = "cljs-time"; 44 rev = "5704fbf48d3478eedcf24d458c8964b3c2fd59a9"; 45 hash = "sha256-IApL+SEm7AhbTN7J/1KiAKTx7rd53hchRh3jmPQ412g="; 46 }; 47 bb_tasks_src = fetchFromGitHub { 48 owner = "logseq"; 49 repo = "bb-tasks"; 50 rev = "70d3edeb287f5cec7192e642549a401f7d6d4263"; 51 hash = "sha256-xVJj5XCkqfaNjnhYZkuqTSJN0ry8UVMaN44r9pxggB0="; 52 }; 53 }) 54 55 ./electron-forge-package-instead-of-make.patch 56 ./electron-forge-disable-signing.patch 57 ./fix-yarn-lock.patch 58 ]; 59 60 mavenRepo = stdenv.mkDerivation { 61 name = "logseq-${finalAttrs.version}-maven-deps"; 62 inherit (finalAttrs) src patches; 63 64 nativeBuildInputs = [ clojure ]; 65 66 buildPhase = '' 67 runHook preBuild 68 69 export HOME="$(mktemp -d)" 70 mkdir -p "$out" 71 72 # -P -> resolve all normal deps 73 # -M:alias -> resolve extra-deps of the listed aliases 74 clj -Sdeps "{:mvn/local-repo \"$out\"}" -P -M:cljs 75 76 runHook postBuild 77 ''; 78 79 # copied from buildMavenPackage 80 # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside 81 installPhase = '' 82 runHook preInstall 83 84 find $out -type f \( \ 85 -name \*.lastUpdated \ 86 -o -name resolver-status.properties \ 87 -o -name _remote.repositories \) \ 88 -delete 89 90 runHook postInstall 91 ''; 92 93 dontFixup = true; 94 95 outputHash = "sha256-gcq9zP5AQtpZU7sC9Oq3PkTj6uDo2NSShigkcuglV98="; 96 outputHashMode = "recursive"; 97 outputHashAlgo = "sha256"; 98 }; 99 100 yarnOfflineCacheRoot = fetchYarnDeps { 101 name = "logseq-${finalAttrs.version}-yarn-deps-root"; 102 inherit (finalAttrs) src patches; 103 hash = "sha256-xfAJ38shd92KdRfh/P7BH4eolZHQmzl4raoH1aZpGRk="; 104 }; 105 106 # ./static and ./resources are combined into ./static by the build process 107 # ./static contains the lockfile and ./resources contains everything else 108 yarnOfflineCacheStaticResources = fetchYarnDeps { 109 name = "logseq-${finalAttrs.version}-yarn-deps-static-resources"; 110 inherit (finalAttrs) src patches; 111 postPatch = "cd ./static"; 112 hash = "sha256-zAGEQlOqKfPDrIoZQUnjBifgdYDYRsiHH7PUNrd0u+8="; 113 }; 114 115 yarnOfflineCacheAmplify = fetchYarnDeps { 116 name = "logseq-${finalAttrs.version}-yarn-deps-amplify"; 117 inherit (finalAttrs) src patches; 118 postPatch = "cd ./packages/amplify"; 119 hash = "sha256-IOhSwIf5goXCBDGHCqnsvWLf3EUPqq75xfQg55snIp4="; 120 }; 121 122 yarnOfflineCacheTldraw = fetchYarnDeps { 123 name = "logseq-${finalAttrs.version}-yarn-deps-tldraw"; 124 inherit (finalAttrs) src patches; 125 postPatch = "cd ./tldraw"; 126 hash = "sha256-CtMl3MPlyO5nWfFhCC1SLb/+1HUM3YfFATAPqJg3rUo="; 127 }; 128 129 strictDeps = true; 130 131 nativeBuildInputs = 132 let 133 clojureWithCache = writeShellScriptBin "clojure" '' 134 exec ${lib.getExe' clojure "clojure"} -Sdeps '{:mvn/local-repo "${finalAttrs.mavenRepo}"}' "$@" 135 ''; 136 137 # the build process runs `git describe --long --always --dirty` 138 fakeGit = writeShellScriptBin "git" '' 139 echo "${finalAttrs.src.rev or finalAttrs.version}@nixpkgs" 140 ''; 141 in 142 [ 143 clojureWithCache 144 copyDesktopItems 145 fakeGit 146 makeWrapper 147 nodejs 148 (nodejs.python.withPackages (ps: [ ps.setuptools ])) 149 removeReferencesTo 150 yarnBuildHook 151 yarnConfigHook 152 zip 153 ] 154 ++ lib.optionals stdenv.hostPlatform.isDarwin [ 155 cctools 156 darwin.autoSignDarwinBinariesHook 157 xcbuild 158 clang_20 # newer clang breaks node-addon-api on darwin 159 ]; 160 161 # we'll run the hook manually multiple times 162 dontYarnInstallDeps = true; 163 164 env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; 165 166 postConfigure = '' 167 yarnOfflineCache="$yarnOfflineCacheRoot" yarnConfigHook 168 169 cp resources/package.json static/package.json 170 pushd static 171 yarnOfflineCache="$yarnOfflineCacheStaticResources" yarnConfigHook 172 popd 173 174 pushd packages/amplify 175 yarnOfflineCache="$yarnOfflineCacheAmplify" yarnConfigHook 176 popd 177 178 pushd tldraw 179 cp yarn.lock apps/tldraw-logseq/yarn.lock 180 yarnOfflineCache="$yarnOfflineCacheTldraw" yarnConfigHook 181 pushd apps/tldraw-logseq 182 yarnOfflineCache="$yarnOfflineCacheTldraw" yarnConfigHook 183 popd 184 popd 185 186 # this has to be done after everything is set up, because for some reason 187 # the shebangs somehow get unpatched... I don't know why... 188 patchShebangs node_modules 189 patchShebangs static/node_modules 190 patchShebangs packages/amplify/node_modules 191 patchShebangs tldraw/node_modules 192 patchShebangs tldraw/apps/tldraw-logseq/node_modules 193 194 yarn --offline --cwd tldraw postinstall 195 196 export npm_config_nodedir=${nodejs} 197 pushd packages/amplify 198 npm rebuild --verbose 199 popd 200 201 export npm_config_nodedir=${electron.headers} 202 203 pushd static 204 205 # we want to use our own git, don't try downloading it 206 substituteInPlace node_modules/dugite/package.json \ 207 --replace-fail '"postinstall"' '"_postinstall"' 208 209 # this doesn't seem to build with electron.headers 210 rm node_modules/macos-alias/binding.gyp 211 212 # the electron-rebuild command deadlocks for some reason, let's just use normal npm rebuild (since we overrode the nodedir anyways) 213 npm rebuild --verbose 214 215 # remove most references to electron.headers 216 shopt -s globstar 217 rm -r node_modules/**/{*.target.mk,config.gypi,Makefile,Release/.deps} 218 shopt -u globstar 219 220 popd 221 222 cp -r ${electron.dist} electron-dist 223 chmod -R u+w electron-dist 224 225 pushd electron-dist 226 zip -0Xqr ../electron.zip . 227 popd 228 229 rm -r electron-dist 230 231 substituteInPlace static/node_modules/@electron/packager/dist/packager.js \ 232 --replace-fail "await this.getElectronZipPath(downloadOpts)" "\"$(pwd)/electron.zip\"" 233 234 cp -r static/node_modules resources/node_modules 235 ''; 236 237 yarnBuildScript = "release-electron"; 238 239 installPhase = '' 240 runHook preInstall 241 242 # remove references to nodejs 243 find static/out/*/resources/app/node_modules -type f -executable -exec remove-references-to -t ${nodejs} '{}' \; 244 '' 245 + lib.optionalString stdenv.hostPlatform.isLinux '' 246 install -Dm644 static/icons/logseq.png "$out/share/icons/hicolor/512x512/apps/logseq.png" 247 248 mkdir -p $out/share/logseq 249 cp -r static/out/*/{locales,resources{,.pak}} $out/share/logseq 250 251 makeWrapper ${lib.getExe electron} $out/bin/logseq \ 252 --add-flags $out/share/logseq/resources/app \ 253 --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ 254 --set-default LOCAL_GIT_DIRECTORY ${git} \ 255 --inherit-argv0 256 '' 257 + lib.optionalString stdenv.hostPlatform.isDarwin '' 258 mkdir -p $out/Applications 259 cp -r static/out/*/Logseq.app $out/Applications 260 261 wrapProgram $out/Applications/Logseq.app/Contents/MacOS/Logseq \ 262 --set-default LOCAL_GIT_DIRECTORY ${git} 263 264 makeWrapper $out/Applications/Logseq.app/Contents/MacOS/Logseq $out/bin/logseq 265 '' 266 + '' 267 runHook postInstall 268 ''; 269 270 desktopItems = [ 271 (makeDesktopItem { 272 name = "Logseq"; 273 desktopName = "Logseq"; 274 exec = "logseq %U"; 275 terminal = false; 276 icon = "logseq"; 277 startupWMClass = "Logseq"; 278 comment = "A privacy-first, open-source platform for knowledge management and collaboration."; 279 mimeTypes = [ "x-scheme-handler/logseq" ]; 280 categories = [ "Utility" ]; 281 }) 282 ]; 283 284 meta = { 285 description = "Privacy-first, open-source platform for knowledge management and collaboration"; 286 homepage = "https://github.com/logseq/logseq"; 287 license = lib.licenses.agpl3Only; 288 maintainers = with lib.maintainers; [ tomasajt ]; 289 mainProgram = "logseq"; 290 platforms = electron.meta.platforms; 291 }; 292})