about summary refs log tree commit diff
path: root/pkgs/applications/file-managers/mc/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/file-managers/mc/default.nix')
-rw-r--r--pkgs/applications/file-managers/mc/default.nix96
1 files changed, 96 insertions, 0 deletions
diff --git a/pkgs/applications/file-managers/mc/default.nix b/pkgs/applications/file-managers/mc/default.nix
new file mode 100644
index 0000000000000..6f80c2c5e928d
--- /dev/null
+++ b/pkgs/applications/file-managers/mc/default.nix
@@ -0,0 +1,96 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, glib
+, gpm
+, file
+, e2fsprogs
+, libX11
+, libICE
+, perl
+, zip
+, unzip
+, gettext
+, slang
+, libssh2
+, openssl
+, coreutils
+, autoreconfHook
+, autoSignDarwinBinariesHook
+
+# updater only
+, writeScript
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mc";
+  version = "4.8.28";
+
+  src = fetchurl {
+    url = "https://www.midnight-commander.org/downloads/${pname}-${version}.tar.xz";
+    sha256 = "sha256-6ZTZvppxcumsSkrWIQeSH2qjEuZosFbf5bi867r1OAM=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook unzip ]
+    # The preFixup hook rewrites the binary, which invaliates the code
+    # signature. Add the fixup hook to sign the output.
+    ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) [
+      autoSignDarwinBinariesHook
+    ];
+
+  buildInputs = [
+    file
+    gettext
+    glib
+    libICE
+    libX11
+    libssh2
+    openssl
+    slang
+    zip
+  ] ++ lib.optionals (!stdenv.isDarwin) [ e2fsprogs gpm ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [ "PERL=${perl}/bin/perl" ];
+
+  postPatch = ''
+    substituteInPlace src/filemanager/ext.c \
+      --replace /bin/rm ${coreutils}/bin/rm
+
+    substituteInPlace misc/ext.d/misc.sh.in \
+      --replace /bin/cat ${coreutils}/bin/cat
+  '';
+
+  preFixup = ''
+    # remove unwanted build-dependency references
+    sed -i -e "s!PKG_CONFIG_PATH=''${PKG_CONFIG_PATH}!PKG_CONFIG_PATH=$(echo "$PKG_CONFIG_PATH" | sed -e 's/./0/g')!" $out/bin/mc
+  '';
+
+  postFixup = lib.optionalString (!stdenv.isDarwin) ''
+    # libX11.so is loaded dynamically so autopatch doesn't detect it
+    patchelf \
+      --add-needed ${libX11}/lib/libX11.so \
+      $out/bin/mc
+  '';
+
+  passthru.updateScript = writeScript "update-mc" ''
+   #!/usr/bin/env nix-shell
+   #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+   set -eu -o pipefail
+
+   # Expect the text in format of "Current version is: 4.8.27; ...".
+   new_version="$(curl -s https://midnight-commander.org/ | pcregrep -o1 'Current version is: (([0-9]+\.?)+);')"
+   update-source-version mc "$new_version"
+ '';
+
+  meta = with lib; {
+    description = "File Manager and User Shell for the GNU Project";
+    downloadPage = "https://www.midnight-commander.org/downloads/";
+    homepage = "https://www.midnight-commander.org";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ sander ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}