Loading pkgs/by-name/mi/miktex/find-exectables-in-path.patch 0 → 100644 +20 −0 Original line number Diff line number Diff line diff --git a/Libraries/MiKTeX/Core/Session/filetypes.cpp b/Libraries/MiKTeX/Core/Session/filetypes.cpp index 82e55382f..84ac206e9 100644 --- a/Libraries/MiKTeX/Core/Session/filetypes.cpp +++ b/Libraries/MiKTeX/Core/Session/filetypes.cpp @@ -198,6 +198,15 @@ void SessionImpl::RegisterFileType(FileType fileType) searchPath.push_back(myPrefixBinCanon.ToString()); } #endif + if (Utils::GetEnvironmentString("PATH", str)) + { + PathName binDir(str); + binDir.Canonicalize(); + if (std::find(searchPath.begin(), searchPath.end(), binDir.ToString()) == searchPath.end()) + { + searchPath.push_back(binDir.ToString()); + } + } break; } case FileType::OTF: pkgs/by-name/mi/miktex/package.nix 0 → 100644 +247 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, fetchurl, runCommand, writeText, biber, # nativeBuildInputs bison, cmake, curl, flex, fop, libxslt, pkg-config, writableTmpDirAsHomeHook, # buildInputs apr, aprutil, boost, bzip2, cairo, expat, fontconfig, freetype, fribidi, gd, gmp, graphite2, harfbuzzFull, hunspell, libjpeg, log4cxx, xz, mpfr, mpfi, libmspack, libressl, pixman, libpng, popt, uriparser, zziplib, qt6Packages, }: let # This is needed for some bootstrap packages. webArchivePrefix = "https://web.archive.org/web/20250323131915if_"; miktexRemoteRepository = "https://ctan.org/tex-archive/systems/win32/miktex/tm/packages"; miktexLocalRepository = runCommand "miktex-local-repository" { src1 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-zzdb1-2.9.tar.lzma"; hash = "sha256-XYhbKlxhVSOlCcm0IOs2ddFgAt/CWXJoY6IuLSw74y4="; }; src2 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-zzdb3-2.9.tar.lzma"; hash = "sha256-5vLuGwjddqtJ5F/DtVKuRVRqgGNbkGFxRF41cXwseIs="; }; src3 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-config-2.9.tar.lzma"; hash = "sha256-fkh5KL+BU+gl8Sih8xBLi1DOx2vMuSflXlSTchjlGWQ="; }; src4 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-dvips.tar.lzma"; hash = "sha256-eJQdLhYetNlXAyyiGD/JRDA3fv0BbALwXtNfRxkLM7o="; }; src5 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-fontconfig.tar.lzma"; hash = "sha256-dxH/0iIL3SnjCSXLGAcNTb5cGJb5AQmV/JbH5CcPHdk="; }; src6 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-misc.tar.lzma"; hash = "sha256-ysNREvnKWseqqN59cwNzlV21UmccbjSGFyno8lv2H+M="; }; src7 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/tetex.tar.lzma"; hash = "sha256-DE1o66r2SFxxxuYeCRuFn6L1uBn26IFnje9b/qeVl6Q="; }; } '' mkdir $out cp $src1 $out/miktex-zzdb1-2.9.tar.lzma cp $src2 $out/miktex-zzdb3-2.9.tar.lzma cp $src3 $out/miktex-config-2.9.tar.lzma cp $src4 $out/miktex-dvips.tar.lzma cp $src5 $out/miktex-fontconfig.tar.lzma cp $src6 $out/miktex-misc.tar.lzma cp $src7 $out/tetex.tar.lzma ''; in stdenv.mkDerivation (finalAttrs: { pname = "miktex"; version = "25.2"; src = fetchFromGitHub { owner = "miktex"; repo = "miktex"; tag = finalAttrs.version; hash = "sha256-egN9+BRO/EAcbrn/jZac4Lb79H5N/LEjReMPGHVM/yM="; }; patches = [ ./startup-config-support-nix-store.patch # Miktex will search exectables in "GetMyPrefix(true)/bin". # The path evalutate to "/usr/bin" in FHS style linux distrubution, # compared to "/nix/store/.../bin" in NixOS. # As a result, miktex will fail to find e.g. 'pkexec','ksudo','gksu' # under /run/wrappers/bin in NixOS. # We fix this by adding the PATH environment variable to exectables' search path. ./find-exectables-in-path.patch ]; postPatch = '' # dont symlink fontconfig to /etc/fonts/conf.d substituteInPlace Programs/MiKTeX/miktex/topics/fontmaps/commands/FontMapManager.cpp \ --replace-fail 'this->ctx->session->IsAdminMode()' 'false' substituteInPlace \ Libraries/MiKTeX/App/app.cpp \ Programs/Editors/TeXworks/miktex/miktex-texworks.cpp \ Programs/MiKTeX/Console/Qt/main.cpp \ Programs/MiKTeX/PackageManager/mpm/mpm.cpp \ Programs/MiKTeX/Yap/MFC/StdAfx.h \ Programs/MiKTeX/initexmf/initexmf.cpp \ Programs/MiKTeX/miktex/miktex.cpp \ --replace-fail "log4cxx/rollingfileappender.h" "log4cxx/rolling/rollingfileappender.h" substitute cmake/modules/FindPOPPLER_QT5.cmake \ cmake/modules/FindPOPPLER_QT6.cmake \ --replace-fail "QT5" "QT6" \ --replace-fail "qt5" "qt6" substituteInPlace Programs/TeXAndFriends/omega/otps/source/outocp.c \ --replace-fail 'fprintf(stderr, s);' 'fprintf(stderr, "%s", s);' '' # This patch fixes mismatch char types (signed int and unsigned int) on aarch64-linux platform. # Should not be applied to other platforms otherwise the build will fail. + lib.optionalString (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux) '' sed -i 's/--using-namespace=MiKTeX::TeXAndFriends/& --chars-are-unsigned/g' \ Programs/TeXAndFriends/Knuth/web/CMakeLists.txt ''; strictDeps = true; nativeBuildInputs = [ bison cmake curl flex fop libxslt pkg-config writableTmpDirAsHomeHook qt6Packages.wrapQtAppsHook qt6Packages.qttools qt6Packages.qt5compat ]; buildInputs = [ apr aprutil boost bzip2 cairo expat fontconfig freetype fribidi gd gmp graphite2 harfbuzzFull hunspell libjpeg log4cxx xz mpfr mpfi libmspack libressl pixman libpng popt uriparser zziplib qt6Packages.poppler ]; cmakeFlags = [ (lib.cmakeBool "WITH_BOOTSTRAPPING" true) (lib.cmakeBool "USE_SYSTEM_POPPLER" true) (lib.cmakeBool "USE_SYSTEM_POPPLER_QT" true) (lib.cmakeBool "MIKTEX_SELF_CONTAINED" false) # Miktex infers install prefix by stripping CMAKE_INSTALL_BINDIR from the called program. # It should not be set to absolute path in default cmakeFlags, otherwise an infinite loop will happen. (lib.cmakeFeature "CMAKE_INSTALL_BINDIR" "bin") (lib.cmakeFeature "CMAKE_INSTALL_LIBEXECDIR" "libexec") (lib.cmakeFeature "MIKTEX_SYSTEM_LINK_TARGET_DIR" "${placeholder "out"}/bin") (lib.cmakeFeature "MIKTEX_USER_LINK_TARGET_DIR" "${placeholder "out"}/bin") ]; env = { LANG = "C.UTF-8"; MIKTEX_REPOSITORY = "file://${miktexLocalRepository}/"; }; enableParallelBuilding = false; enableParallelChecking = false; doCheck = true; # Todo: figure out the exact binary to be Qt wrapped. dontWrapQtApps = true; postFixup = '' wrapQtApp $out/bin/miktex-console wrapQtApp $out/bin/miktex-texworks $out/bin/miktexsetup finish --verbose '' # Biber binary is missing on ctan.org for aarch64-linux platform. + lib.optionalString (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux) '' ln -sf ${biber}/bin/biber $out/bin/biber ''; meta = { description = "A modern TeX distribution"; homepage = "https://miktex.org"; platforms = lib.platforms.linux; license = with lib.licenses; [ lppl13c gpl2Plus gpl3Plus publicDomain ]; maintainers = with lib.maintainers; [ qbisi ]; }; }) pkgs/by-name/mi/miktex/startup-config-support-nix-store.patch 0 → 100644 +40 −0 Original line number Diff line number Diff line diff --git a/Libraries/MiKTeX/Core/Session/unx/unxStartupConfig.cpp b/Libraries/MiKTeX/Core/Session/unx/unxStartupConfig.cpp index 1728e7af9..727c36d8c 100644 --- a/Libraries/MiKTeX/Core/Session/unx/unxStartupConfig.cpp +++ b/Libraries/MiKTeX/Core/Session/unx/unxStartupConfig.cpp @@ -90,6 +90,10 @@ InternalStartupConfig SessionImpl::DefaultConfig(MiKTeXConfiguration config, Ver { pos = n - 2; } + else if (n > 3 && splittedPrefix[1] == "nix" && splittedPrefix[2] == "store") + { + pos = 1; + } if (pos < n) { PathName destdir; @@ -98,10 +102,10 @@ InternalStartupConfig SessionImpl::DefaultConfig(MiKTeXConfiguration config, Ver destdir /= splittedPrefix[i]; } MIKTEX_ASSERT(MIKTEX_SYSTEM_VAR_LIB_DIR[0] == '/'); - ret.commonConfigRoot = destdir / (MIKTEX_SYSTEM_VAR_LIB_DIR + 1) / MIKTEX_PREFIX "texmf"; + ret.commonConfigRoot = destdir / (MIKTEX_SYSTEM_VAR_LIB_DIR + 1) / MIKTEX_PREFIX "texmf" / "config"; MIKTEX_ASSERT(MIKTEX_SYSTEM_VAR_CACHE_DIR[0] == '/'); ret.commonDataRoot = destdir / (MIKTEX_SYSTEM_VAR_CACHE_DIR + 1) / MIKTEX_PREFIX "texmf"; - ret.commonInstallRoot = destdir / "usr" / "local" / MIKTEX_INSTALL_DIR; + ret.commonInstallRoot = destdir / (MIKTEX_SYSTEM_VAR_LIB_DIR + 1) / MIKTEX_PREFIX "texmf" / "install"; } #endif if (ret.commonConfigRoot.Empty()) @@ -124,9 +128,9 @@ InternalStartupConfig SessionImpl::DefaultConfig(MiKTeXConfiguration config, Ver PathName myLoc = GetMyLocation(true); #if defined(MIKTEX_MACOS_BUNDLE) - ret.isSharedSetup = Utils::IsParentDirectoryOf(PathName("/usr"), myLoc) || Utils::IsParentDirectoryOf(PathName("/Applications"), myLoc) ? TriState::True : TriState::False; + ret.isSharedSetup = Utils::IsParentDirectoryOf(PathName("/nix/store"), myLoc) || Utils::IsParentDirectoryOf(PathName("/usr"), myLoc) || Utils::IsParentDirectoryOf(PathName("/Applications"), myLoc) ? TriState::True : TriState::False; #else - ret.isSharedSetup = Utils::IsParentDirectoryOf(PathName("/usr"), myLoc) || Utils::IsParentDirectoryOf(PathName("/opt"), myLoc) ? TriState::True : TriState::False; + ret.isSharedSetup = Utils::IsParentDirectoryOf(PathName("/nix/store"), myLoc) || Utils::IsParentDirectoryOf(PathName("/usr"), myLoc) || Utils::IsParentDirectoryOf(PathName("/opt"), myLoc) ? TriState::True : TriState::False; #endif return ret; Loading
pkgs/by-name/mi/miktex/find-exectables-in-path.patch 0 → 100644 +20 −0 Original line number Diff line number Diff line diff --git a/Libraries/MiKTeX/Core/Session/filetypes.cpp b/Libraries/MiKTeX/Core/Session/filetypes.cpp index 82e55382f..84ac206e9 100644 --- a/Libraries/MiKTeX/Core/Session/filetypes.cpp +++ b/Libraries/MiKTeX/Core/Session/filetypes.cpp @@ -198,6 +198,15 @@ void SessionImpl::RegisterFileType(FileType fileType) searchPath.push_back(myPrefixBinCanon.ToString()); } #endif + if (Utils::GetEnvironmentString("PATH", str)) + { + PathName binDir(str); + binDir.Canonicalize(); + if (std::find(searchPath.begin(), searchPath.end(), binDir.ToString()) == searchPath.end()) + { + searchPath.push_back(binDir.ToString()); + } + } break; } case FileType::OTF:
pkgs/by-name/mi/miktex/package.nix 0 → 100644 +247 −0 Original line number Diff line number Diff line { lib, stdenv, fetchFromGitHub, fetchurl, runCommand, writeText, biber, # nativeBuildInputs bison, cmake, curl, flex, fop, libxslt, pkg-config, writableTmpDirAsHomeHook, # buildInputs apr, aprutil, boost, bzip2, cairo, expat, fontconfig, freetype, fribidi, gd, gmp, graphite2, harfbuzzFull, hunspell, libjpeg, log4cxx, xz, mpfr, mpfi, libmspack, libressl, pixman, libpng, popt, uriparser, zziplib, qt6Packages, }: let # This is needed for some bootstrap packages. webArchivePrefix = "https://web.archive.org/web/20250323131915if_"; miktexRemoteRepository = "https://ctan.org/tex-archive/systems/win32/miktex/tm/packages"; miktexLocalRepository = runCommand "miktex-local-repository" { src1 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-zzdb1-2.9.tar.lzma"; hash = "sha256-XYhbKlxhVSOlCcm0IOs2ddFgAt/CWXJoY6IuLSw74y4="; }; src2 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-zzdb3-2.9.tar.lzma"; hash = "sha256-5vLuGwjddqtJ5F/DtVKuRVRqgGNbkGFxRF41cXwseIs="; }; src3 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-config-2.9.tar.lzma"; hash = "sha256-fkh5KL+BU+gl8Sih8xBLi1DOx2vMuSflXlSTchjlGWQ="; }; src4 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-dvips.tar.lzma"; hash = "sha256-eJQdLhYetNlXAyyiGD/JRDA3fv0BbALwXtNfRxkLM7o="; }; src5 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-fontconfig.tar.lzma"; hash = "sha256-dxH/0iIL3SnjCSXLGAcNTb5cGJb5AQmV/JbH5CcPHdk="; }; src6 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/miktex-misc.tar.lzma"; hash = "sha256-ysNREvnKWseqqN59cwNzlV21UmccbjSGFyno8lv2H+M="; }; src7 = fetchurl { url = "${webArchivePrefix}/${miktexRemoteRepository}/tetex.tar.lzma"; hash = "sha256-DE1o66r2SFxxxuYeCRuFn6L1uBn26IFnje9b/qeVl6Q="; }; } '' mkdir $out cp $src1 $out/miktex-zzdb1-2.9.tar.lzma cp $src2 $out/miktex-zzdb3-2.9.tar.lzma cp $src3 $out/miktex-config-2.9.tar.lzma cp $src4 $out/miktex-dvips.tar.lzma cp $src5 $out/miktex-fontconfig.tar.lzma cp $src6 $out/miktex-misc.tar.lzma cp $src7 $out/tetex.tar.lzma ''; in stdenv.mkDerivation (finalAttrs: { pname = "miktex"; version = "25.2"; src = fetchFromGitHub { owner = "miktex"; repo = "miktex"; tag = finalAttrs.version; hash = "sha256-egN9+BRO/EAcbrn/jZac4Lb79H5N/LEjReMPGHVM/yM="; }; patches = [ ./startup-config-support-nix-store.patch # Miktex will search exectables in "GetMyPrefix(true)/bin". # The path evalutate to "/usr/bin" in FHS style linux distrubution, # compared to "/nix/store/.../bin" in NixOS. # As a result, miktex will fail to find e.g. 'pkexec','ksudo','gksu' # under /run/wrappers/bin in NixOS. # We fix this by adding the PATH environment variable to exectables' search path. ./find-exectables-in-path.patch ]; postPatch = '' # dont symlink fontconfig to /etc/fonts/conf.d substituteInPlace Programs/MiKTeX/miktex/topics/fontmaps/commands/FontMapManager.cpp \ --replace-fail 'this->ctx->session->IsAdminMode()' 'false' substituteInPlace \ Libraries/MiKTeX/App/app.cpp \ Programs/Editors/TeXworks/miktex/miktex-texworks.cpp \ Programs/MiKTeX/Console/Qt/main.cpp \ Programs/MiKTeX/PackageManager/mpm/mpm.cpp \ Programs/MiKTeX/Yap/MFC/StdAfx.h \ Programs/MiKTeX/initexmf/initexmf.cpp \ Programs/MiKTeX/miktex/miktex.cpp \ --replace-fail "log4cxx/rollingfileappender.h" "log4cxx/rolling/rollingfileappender.h" substitute cmake/modules/FindPOPPLER_QT5.cmake \ cmake/modules/FindPOPPLER_QT6.cmake \ --replace-fail "QT5" "QT6" \ --replace-fail "qt5" "qt6" substituteInPlace Programs/TeXAndFriends/omega/otps/source/outocp.c \ --replace-fail 'fprintf(stderr, s);' 'fprintf(stderr, "%s", s);' '' # This patch fixes mismatch char types (signed int and unsigned int) on aarch64-linux platform. # Should not be applied to other platforms otherwise the build will fail. + lib.optionalString (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux) '' sed -i 's/--using-namespace=MiKTeX::TeXAndFriends/& --chars-are-unsigned/g' \ Programs/TeXAndFriends/Knuth/web/CMakeLists.txt ''; strictDeps = true; nativeBuildInputs = [ bison cmake curl flex fop libxslt pkg-config writableTmpDirAsHomeHook qt6Packages.wrapQtAppsHook qt6Packages.qttools qt6Packages.qt5compat ]; buildInputs = [ apr aprutil boost bzip2 cairo expat fontconfig freetype fribidi gd gmp graphite2 harfbuzzFull hunspell libjpeg log4cxx xz mpfr mpfi libmspack libressl pixman libpng popt uriparser zziplib qt6Packages.poppler ]; cmakeFlags = [ (lib.cmakeBool "WITH_BOOTSTRAPPING" true) (lib.cmakeBool "USE_SYSTEM_POPPLER" true) (lib.cmakeBool "USE_SYSTEM_POPPLER_QT" true) (lib.cmakeBool "MIKTEX_SELF_CONTAINED" false) # Miktex infers install prefix by stripping CMAKE_INSTALL_BINDIR from the called program. # It should not be set to absolute path in default cmakeFlags, otherwise an infinite loop will happen. (lib.cmakeFeature "CMAKE_INSTALL_BINDIR" "bin") (lib.cmakeFeature "CMAKE_INSTALL_LIBEXECDIR" "libexec") (lib.cmakeFeature "MIKTEX_SYSTEM_LINK_TARGET_DIR" "${placeholder "out"}/bin") (lib.cmakeFeature "MIKTEX_USER_LINK_TARGET_DIR" "${placeholder "out"}/bin") ]; env = { LANG = "C.UTF-8"; MIKTEX_REPOSITORY = "file://${miktexLocalRepository}/"; }; enableParallelBuilding = false; enableParallelChecking = false; doCheck = true; # Todo: figure out the exact binary to be Qt wrapped. dontWrapQtApps = true; postFixup = '' wrapQtApp $out/bin/miktex-console wrapQtApp $out/bin/miktex-texworks $out/bin/miktexsetup finish --verbose '' # Biber binary is missing on ctan.org for aarch64-linux platform. + lib.optionalString (stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux) '' ln -sf ${biber}/bin/biber $out/bin/biber ''; meta = { description = "A modern TeX distribution"; homepage = "https://miktex.org"; platforms = lib.platforms.linux; license = with lib.licenses; [ lppl13c gpl2Plus gpl3Plus publicDomain ]; maintainers = with lib.maintainers; [ qbisi ]; }; })
pkgs/by-name/mi/miktex/startup-config-support-nix-store.patch 0 → 100644 +40 −0 Original line number Diff line number Diff line diff --git a/Libraries/MiKTeX/Core/Session/unx/unxStartupConfig.cpp b/Libraries/MiKTeX/Core/Session/unx/unxStartupConfig.cpp index 1728e7af9..727c36d8c 100644 --- a/Libraries/MiKTeX/Core/Session/unx/unxStartupConfig.cpp +++ b/Libraries/MiKTeX/Core/Session/unx/unxStartupConfig.cpp @@ -90,6 +90,10 @@ InternalStartupConfig SessionImpl::DefaultConfig(MiKTeXConfiguration config, Ver { pos = n - 2; } + else if (n > 3 && splittedPrefix[1] == "nix" && splittedPrefix[2] == "store") + { + pos = 1; + } if (pos < n) { PathName destdir; @@ -98,10 +102,10 @@ InternalStartupConfig SessionImpl::DefaultConfig(MiKTeXConfiguration config, Ver destdir /= splittedPrefix[i]; } MIKTEX_ASSERT(MIKTEX_SYSTEM_VAR_LIB_DIR[0] == '/'); - ret.commonConfigRoot = destdir / (MIKTEX_SYSTEM_VAR_LIB_DIR + 1) / MIKTEX_PREFIX "texmf"; + ret.commonConfigRoot = destdir / (MIKTEX_SYSTEM_VAR_LIB_DIR + 1) / MIKTEX_PREFIX "texmf" / "config"; MIKTEX_ASSERT(MIKTEX_SYSTEM_VAR_CACHE_DIR[0] == '/'); ret.commonDataRoot = destdir / (MIKTEX_SYSTEM_VAR_CACHE_DIR + 1) / MIKTEX_PREFIX "texmf"; - ret.commonInstallRoot = destdir / "usr" / "local" / MIKTEX_INSTALL_DIR; + ret.commonInstallRoot = destdir / (MIKTEX_SYSTEM_VAR_LIB_DIR + 1) / MIKTEX_PREFIX "texmf" / "install"; } #endif if (ret.commonConfigRoot.Empty()) @@ -124,9 +128,9 @@ InternalStartupConfig SessionImpl::DefaultConfig(MiKTeXConfiguration config, Ver PathName myLoc = GetMyLocation(true); #if defined(MIKTEX_MACOS_BUNDLE) - ret.isSharedSetup = Utils::IsParentDirectoryOf(PathName("/usr"), myLoc) || Utils::IsParentDirectoryOf(PathName("/Applications"), myLoc) ? TriState::True : TriState::False; + ret.isSharedSetup = Utils::IsParentDirectoryOf(PathName("/nix/store"), myLoc) || Utils::IsParentDirectoryOf(PathName("/usr"), myLoc) || Utils::IsParentDirectoryOf(PathName("/Applications"), myLoc) ? TriState::True : TriState::False; #else - ret.isSharedSetup = Utils::IsParentDirectoryOf(PathName("/usr"), myLoc) || Utils::IsParentDirectoryOf(PathName("/opt"), myLoc) ? TriState::True : TriState::False; + ret.isSharedSetup = Utils::IsParentDirectoryOf(PathName("/nix/store"), myLoc) || Utils::IsParentDirectoryOf(PathName("/usr"), myLoc) || Utils::IsParentDirectoryOf(PathName("/opt"), myLoc) ? TriState::True : TriState::False; #endif return ret;