ifm-web: init at 4.0.2

Signed-off-by: Litchi Pi <litchi.pi@proton.me>

+67 -20
+1 -1
nixos/doc/manual/release-notes/rl-2411.section.md
··· 79 79 80 80 - [Misskey](https://misskey-hub.net/en/), an interplanetary microblogging platform. Available as [services.misskey](options.html#opt-services.misskey). 81 81 82 - - [Improved File Manager](https://github.com/misterunknown/ifm), or IFM, a single-file web-based file manager. 82 + - [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) 83 83 84 84 - [OpenGFW](https://github.com/apernet/OpenGFW), an implementation of the Great Firewall on Linux. Available as [services.opengfw](#opt-services.opengfw.enable). 85 85
+11 -19
nixos/modules/services/web-apps/ifm.nix
··· 1 - { config, lib, pkgs, ...}: 1 + { 2 + config, 3 + lib, 4 + pkgs, 5 + ... 6 + }: 2 7 let 3 8 cfg = config.services.ifm; 4 - 5 - version = "4.0.2"; 6 - src = pkgs.fetchurl { 7 - url = "https://github.com/misterunknown/ifm/releases/download/v${version}/cdn.ifm.php"; 8 - hash = "sha256-37WbRM6D7JGmd//06zMhxMGIh8ioY8vRUmxX4OHgqBE="; 9 - }; 10 - 11 - php = pkgs.php83; 12 - in { 9 + in 10 + { 13 11 options.services.ifm = { 14 12 enable = lib.mkEnableOption '' 15 13 Improved file manager, a single-file web-based filemanager 16 14 17 15 Lightweight and minimal, served using PHP's built-in server 18 - ''; 16 + ''; 19 17 20 18 dataDir = lib.mkOption { 21 19 type = lib.types.str; ··· 37 35 38 36 settings = lib.mkOption { 39 37 type = with lib.types; attrsOf anything; 40 - default = {}; 38 + default = { }; 41 39 description = '' 42 40 Configuration of the IFM service. 43 41 ··· 58 56 wantedBy = [ "multi-user.target" ]; 59 57 60 58 environment = { 61 - IFM_ROOT_DIR = "/data"; 62 59 } // (builtins.mapAttrs (_: val: toString val) cfg.settings); 63 60 64 - script = '' 65 - mkdir -p /tmp/ifm 66 - ln -s ${src} /tmp/ifm/index.php 67 - ${lib.getExe php} -S ${cfg.listenAddress}:${builtins.toString cfg.port} -t /tmp/ifm 68 - ''; 69 - 70 61 serviceConfig = { 71 62 DynamicUser = true; 72 63 User = "ifm"; 73 64 StandardOutput = "journal"; 74 65 BindPaths = "${cfg.dataDir}:/data"; 75 66 PrivateTmp = true; 67 + ExecStart = "${lib.getExe pkgs.ifm-web} ${lib.escapeShellArg cfg.listenAddress} ${builtins.toString cfg.port} /data"; 76 68 }; 77 69 }; 78 70 };
+55
pkgs/by-name/if/ifm-web/package.nix
··· 1 + { 2 + fetchurl, 3 + stdenv, 4 + lib, 5 + php83, 6 + writeShellScript, 7 + nixosTests, 8 + }: 9 + let 10 + version = "4.0.2"; 11 + src = fetchurl { 12 + url = "https://github.com/misterunknown/ifm/releases/download/v${version}/cdn.ifm.php"; 13 + hash = "sha256-37WbRM6D7JGmd//06zMhxMGIh8ioY8vRUmxX4OHgqBE="; 14 + }; 15 + 16 + serve_script = writeShellScript "ifm-serve" '' 17 + if [ $# -ne 3 ]; then 18 + echo "Usage: $0 <listen address> <port> <data directory>"; 19 + exit 1; 20 + fi 21 + 22 + SERVE_DIR=$(dirname "$0")/../php/ 23 + IFM_ROOT_DIR="$3" ${lib.getExe php83} -S "$1:$2" -t "$SERVE_DIR" 24 + ''; 25 + in 26 + stdenv.mkDerivation { 27 + pname = "ifm"; 28 + inherit version src; 29 + 30 + dontUnpack = true; 31 + 32 + installPhase = '' 33 + runHook preInstall 34 + mkdir -p $out/bin $out/php 35 + cp $src $out/php/index.php 36 + cp ${serve_script} $out/bin/ifm 37 + runHook postInstall 38 + ''; 39 + 40 + passthru.tests = { 41 + inherit (nixosTests) ifm; 42 + }; 43 + 44 + meta = { 45 + description = "Improved File Manager, a single-file web-based filemanager"; 46 + longDescription = '' 47 + The IFM is a web-based filemanager, which comes as a single file solution using HTML5, CSS3, JavaScript and PHP. 48 + ''; 49 + homepage = "https://github.com/misterunknown/ifm"; 50 + changelog = "https://github.com/misterunknown/ifm/releases/tag/v${version}"; 51 + license = lib.licenses.mit; 52 + maintainers = with lib.maintainers; [ litchipi ]; 53 + mainProgram = "ifm"; 54 + }; 55 + }