Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 stdenv, 3 fetchFromGitHub, 4 lib, 5 fetchYarnDeps, 6 yarn, 7 fixup-yarn-lock, 8 nodejs, 9 electron, 10 python3, 11 xorg, 12 fontconfig, 13 nodePackages, 14 ripgrep, 15 pkg-config, 16 libsecret, 17 yarnBuildHook, 18 makeShellWrapper, 19 unstableGitUpdater, 20 xcbuild, 21 libtool, 22}: 23 24stdenv.mkDerivation (finalAttrs: { 25 pname = "marktext"; 26 version = "0.17.1-unstable-2024-06-10"; 27 28 src = fetchFromGitHub { 29 owner = "marktext"; 30 repo = "marktext"; 31 rev = "11c8cc1e1929a7975df39fa5f4503130fef53547"; 32 hash = "sha256-5PIOTg4/RBave/b3CArQSLvmA64ME9++3O1JT4lgKm0="; 33 postFetch = '' 34 cd $out 35 patch -p1 < ${./0001-update-electron.patch} 36 ''; # Need for offlineCache 37 }; 38 39 offlineCache = fetchYarnDeps { 40 yarnLock = "${finalAttrs.src}/yarn.lock"; 41 hash = "sha256-mr79FV/LHkoY3vX9B5yv95IQIJQ9akwfslKndKYmwCo="; 42 }; 43 44 nativeBuildInputs = [ 45 yarn 46 fixup-yarn-lock 47 makeShellWrapper 48 yarnBuildHook 49 (python3.withPackages (ps: with ps; [ packaging ])) 50 pkg-config 51 nodejs 52 nodePackages.node-gyp-build 53 ] 54 ++ lib.optionals stdenv.hostPlatform.isDarwin [ 55 xcbuild 56 libtool 57 ]; 58 59 buildInputs = [ 60 libsecret 61 xorg.libX11 62 xorg.libxkbfile 63 fontconfig 64 xorg.xorgproto 65 ]; 66 67 postPatch = '' 68 substituteInPlace src/common/filesystem/paths.js \ 69 --replace-fail "process.resourcesPath" "'$out/opt/marktext/resources'" 70 71 substituteInPlace src/main/cli/index.js \ 72 --replace-fail "process.argv.slice(1)" "process.argv.slice(2)" 73 ''; 74 75 configurePhase = '' 76 runHook preConfigure 77 78 export HOME=$(mktemp -d) 79 yarn config --offline set yarn-offline-mirror ${finalAttrs.offlineCache} 80 fixup-yarn-lock yarn.lock 81 82 # set nodedir to prevent node-gyp from downloading headers 83 # taken from https://nixos.org/manual/nixpkgs/stable/#javascript-tool-specific 84 mkdir -p $HOME/.node-gyp/${nodejs.version} 85 echo 9 > $HOME/.node-gyp/${nodejs.version}/installVersion 86 ln -sfv ${nodejs}/include $HOME/.node-gyp/${nodejs.version} 87 export npm_config_nodedir=${nodejs} 88 89 yarn --offline --frozen-lockfile install --ignore-scripts --no-progress --non-interactive 90 91 patchShebangs node_modules 92 93 substituteInPlace node_modules/node-gyp/gyp/pylib/gyp/input.py \ 94 --replace-fail "from distutils.version import StrictVersion" "from packaging.version import Version as StrictVersion" 95 96 ./node_modules/.bin/electron-rebuild -f 97 98 substituteInPlace package.json \ 99 --replace-fail "electron-rebuild -f" "echo 0" \ 100 --replace-fail "&& yarn run lint:fix" "" 101 102 mkdir -p node_modules/vscode-ripgrep/bin 103 104 yarn --offline --frozen-lockfile install --no-progress 105 patchShebangs node_modules 106 107 substituteInPlace node_modules/node-gyp/gyp/pylib/gyp/input.py \ 108 --replace-fail "from distutils.version import StrictVersion" "from packaging.version import Version as StrictVersion" 109 110 sed -i -e 's|path.join(.*);|"${lib.getExe ripgrep}";|' \ 111 node_modules/vscode-ripgrep/lib/index.js 112 113 runHook postConfigure 114 ''; 115 116 yarnBuildScript = "electron-builder"; 117 118 yarnBuildFlags = [ 119 "--dir" 120 "-c.electronDist=${electron.dist}" 121 "-c.electronVersion=${electron.version}" 122 ]; 123 124 env = { 125 ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; 126 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1"; 127 }; 128 129 preBuild = '' 130 node .electron-vue/build.js 131 ''; # From package.json 132 133 installPhase = '' 134 runHook preInstall 135 136 mkdir -p $out/opt/marktext $out/bin 137 138 install -Dm644 resources/linux/marktext.desktop $out/share/applications/marktext.desktop 139 140 pushd resources/icons/ 141 142 find -maxdepth 1 -mindepth 1 -type d -exec install -DT {}/marktext.png $out/share/icons/hicolor/{}/apps/marktext.png \; 143 144 find -maxdepth 1 -mindepth 1 -type d -exec install -DT {}/md.png $out/share/icons/hicolor/{}/apps/md.png \; 145 146 popd 147 148 cp -r build/*-unpacked/{locales,resources{,.pak}} $out/opt/marktext 149 150 makeWrapper ${lib.getExe electron} $out/bin/marktext \ 151 --add-flags $out/opt/marktext/resources/app.asar \ 152 --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" 153 154 runHook postInstall 155 ''; 156 157 passthru.updateScript = unstableGitUpdater { 158 tagPrefix = "v"; 159 branch = "develop"; 160 }; 161 162 meta = { 163 description = "Simple and elegant markdown editor, available for Linux, macOS and Windows"; 164 homepage = "https://www.marktext.cc"; 165 license = lib.licenses.mit; 166 maintainers = with lib.maintainers; [ 167 nh2 168 eduarrrd 169 bot-wxt1221 170 ]; 171 badPlatforms = [ 172 "x86_64-darwin" 173 "aarch64-darwin" 174 ]; 175 platforms = lib.platforms.unix; 176 mainProgram = "marktext"; 177 }; 178})