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