about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/web-apps/moodle/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/web-apps/moodle/default.nix')
-rw-r--r--nixpkgs/pkgs/servers/web-apps/moodle/default.nix71
1 files changed, 71 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/web-apps/moodle/default.nix b/nixpkgs/pkgs/servers/web-apps/moodle/default.nix
new file mode 100644
index 000000000000..79fb83749e60
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/moodle/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchurl, writeText, plugins ? [ ], nixosTests }:
+
+let
+  version = "4.3.3";
+
+  versionParts = lib.take 2 (lib.splitVersion version);
+  # 4.2 -> 402, 3.11 -> 311
+  stableVersion = lib.removePrefix "0" (lib.concatMapStrings
+    (p: if (lib.toInt p) < 10 then (lib.concatStrings ["0" p]) else p)
+    versionParts);
+
+in stdenv.mkDerivation rec {
+  pname = "moodle";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://download.moodle.org/download.php/direct/stable${stableVersion}/${pname}-${version}.tgz";
+    hash = "sha256-yFrD277bO25O5GeXVG4VhKO/oH9dsgqoTsrlMZoXHbI=";
+  };
+
+  phpConfig = writeText "config.php" ''
+    <?php
+      return require(getenv('MOODLE_CONFIG'));
+    ?>
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/moodle
+    cp -r . $out/share/moodle
+    cp ${phpConfig} $out/share/moodle/config.php
+
+    ${lib.concatStringsSep "\n" (map (p:
+      let
+        dir = if p.pluginType == "mod" then
+          "mod"
+        else if p.pluginType == "theme" then
+          "theme"
+        else if p.pluginType == "block" then
+          "blocks"
+        else if p.pluginType == "question" then
+          "question/type"
+        else if p.pluginType == "course" then
+          "course/format"
+        else if p.pluginType == "report" then
+          "admin/report"
+        else
+          throw "unknown moodle plugin type";
+        # we have to copy it, because the plugins have refrences to .. inside
+      in ''
+        mkdir -p $out/share/moodle/${dir}/${p.name}
+        cp -r ${p}/* $out/share/moodle/${dir}/${p.name}/
+      '') plugins)}
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) moodle;
+  };
+
+  meta = with lib; {
+    description =
+      "Free and open-source learning management system (LMS) written in PHP";
+    license = licenses.gpl3Plus;
+    homepage = "https://moodle.org/";
+    maintainers = with maintainers; [ freezeboy ];
+    platforms = platforms.all;
+  };
+}