From ef03964b9274afcc858ffbed0e50e55ee8c1226c Mon Sep 17 00:00:00 2001 From: Litchi Pi Date: Wed, 14 Aug 2024 09:33:16 +0200 Subject: [PATCH] ifm-web: init at 4.0.2 Signed-off-by: Litchi Pi --- .../manual/release-notes/rl-2411.section.md | 2 +- nixos/modules/services/web-apps/ifm.nix | 30 ++++------ pkgs/by-name/if/ifm-web/package.nix | 55 +++++++++++++++++++ 3 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 pkgs/by-name/if/ifm-web/package.nix diff --git a/nixos/doc/manual/release-notes/rl-2411.section.md b/nixos/doc/manual/release-notes/rl-2411.section.md index 702d33d38899..042cfaa20d88 100644 --- a/nixos/doc/manual/release-notes/rl-2411.section.md +++ b/nixos/doc/manual/release-notes/rl-2411.section.md @@ -79,7 +79,7 @@ - [Misskey](https://misskey-hub.net/en/), an interplanetary microblogging platform. Available as [services.misskey](options.html#opt-services.misskey). -- [Improved File Manager](https://github.com/misterunknown/ifm), or IFM, a single-file web-based file manager. +- [Improved File Manager](https://github.com/misterunknown/ifm), or IFM, a single-file web-based file manager. Available as [services.ifm](options.html#opt-services.ifm.enable) - [OpenGFW](https://github.com/apernet/OpenGFW), an implementation of the Great Firewall on Linux. Available as [services.opengfw](#opt-services.opengfw.enable). diff --git a/nixos/modules/services/web-apps/ifm.nix b/nixos/modules/services/web-apps/ifm.nix index d5621866a9a3..747a7469cd92 100644 --- a/nixos/modules/services/web-apps/ifm.nix +++ b/nixos/modules/services/web-apps/ifm.nix @@ -1,21 +1,19 @@ -{ config, lib, pkgs, ...}: +{ + config, + lib, + pkgs, + ... +}: let cfg = config.services.ifm; - - version = "4.0.2"; - src = pkgs.fetchurl { - url = "https://github.com/misterunknown/ifm/releases/download/v${version}/cdn.ifm.php"; - hash = "sha256-37WbRM6D7JGmd//06zMhxMGIh8ioY8vRUmxX4OHgqBE="; - }; - - php = pkgs.php83; -in { +in +{ options.services.ifm = { enable = lib.mkEnableOption '' Improved file manager, a single-file web-based filemanager Lightweight and minimal, served using PHP's built-in server - ''; + ''; dataDir = lib.mkOption { type = lib.types.str; @@ -37,7 +35,7 @@ in { settings = lib.mkOption { type = with lib.types; attrsOf anything; - default = {}; + default = { }; description = '' Configuration of the IFM service. @@ -58,21 +56,15 @@ in { wantedBy = [ "multi-user.target" ]; environment = { - IFM_ROOT_DIR = "/data"; } // (builtins.mapAttrs (_: val: toString val) cfg.settings); - script = '' - mkdir -p /tmp/ifm - ln -s ${src} /tmp/ifm/index.php - ${lib.getExe php} -S ${cfg.listenAddress}:${builtins.toString cfg.port} -t /tmp/ifm - ''; - serviceConfig = { DynamicUser = true; User = "ifm"; StandardOutput = "journal"; BindPaths = "${cfg.dataDir}:/data"; PrivateTmp = true; + ExecStart = "${lib.getExe pkgs.ifm-web} ${lib.escapeShellArg cfg.listenAddress} ${builtins.toString cfg.port} /data"; }; }; }; diff --git a/pkgs/by-name/if/ifm-web/package.nix b/pkgs/by-name/if/ifm-web/package.nix new file mode 100644 index 000000000000..330334cb4284 --- /dev/null +++ b/pkgs/by-name/if/ifm-web/package.nix @@ -0,0 +1,55 @@ +{ + fetchurl, + stdenv, + lib, + php83, + writeShellScript, + nixosTests, +}: +let + version = "4.0.2"; + src = fetchurl { + url = "https://github.com/misterunknown/ifm/releases/download/v${version}/cdn.ifm.php"; + hash = "sha256-37WbRM6D7JGmd//06zMhxMGIh8ioY8vRUmxX4OHgqBE="; + }; + + serve_script = writeShellScript "ifm-serve" '' + if [ $# -ne 3 ]; then + echo "Usage: $0 "; + exit 1; + fi + + SERVE_DIR=$(dirname "$0")/../php/ + IFM_ROOT_DIR="$3" ${lib.getExe php83} -S "$1:$2" -t "$SERVE_DIR" + ''; +in +stdenv.mkDerivation { + pname = "ifm"; + inherit version src; + + dontUnpack = true; + + installPhase = '' + runHook preInstall + mkdir -p $out/bin $out/php + cp $src $out/php/index.php + cp ${serve_script} $out/bin/ifm + runHook postInstall + ''; + + passthru.tests = { + inherit (nixosTests) ifm; + }; + + meta = { + description = "Improved File Manager, a single-file web-based filemanager"; + longDescription = '' + The IFM is a web-based filemanager, which comes as a single file solution using HTML5, CSS3, JavaScript and PHP. + ''; + homepage = "https://github.com/misterunknown/ifm"; + changelog = "https://github.com/misterunknown/ifm/releases/tag/v${version}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ litchipi ]; + mainProgram = "ifm"; + }; +}