pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / servers / web-apps / moodle / default.nix
blob025bd8b00b0295399f116e70ed234fdd16518b93
1 { lib, stdenv, fetchurl, writeText, plugins ? [ ], nixosTests }:
3 let
4   version = "4.4.1";
6   versionParts = lib.take 2 (lib.splitVersion version);
7   # 4.2 -> 402, 3.11 -> 311
8   stableVersion = lib.removePrefix "0" (lib.concatMapStrings
9     (p: if (lib.toInt p) < 10 then (lib.concatStrings ["0" p]) else p)
10     versionParts);
12 in stdenv.mkDerivation rec {
13   pname = "moodle";
14   inherit version;
16   src = fetchurl {
17     url = "https://download.moodle.org/download.php/direct/stable${stableVersion}/${pname}-${version}.tgz";
18     hash = "sha256-+pzDrSMm+V4pEze13mJ/eyhaxcvnmG/eno0csCRTisU=";
19   };
21   phpConfig = writeText "config.php" ''
22     <?php
23       return require(getenv('MOODLE_CONFIG'));
24     ?>
25   '';
27   installPhase = ''
28     runHook preInstall
30     mkdir -p $out/share/moodle
31     cp -r . $out/share/moodle
32     cp ${phpConfig} $out/share/moodle/config.php
34     ${lib.concatStringsSep "\n" (map (p:
35       let
36         dir = if p.pluginType == "mod" then
37           "mod"
38         else if p.pluginType == "theme" then
39           "theme"
40         else if p.pluginType == "block" then
41           "blocks"
42         else if p.pluginType == "question" then
43           "question/type"
44         else if p.pluginType == "course" then
45           "course/format"
46         else if p.pluginType == "report" then
47           "admin/report"
48         else
49           throw "unknown moodle plugin type";
50         # we have to copy it, because the plugins have refrences to .. inside
51       in ''
52         mkdir -p $out/share/moodle/${dir}/${p.name}
53         cp -r ${p}/* $out/share/moodle/${dir}/${p.name}/
54       '') plugins)}
56     runHook postInstall
57   '';
59   passthru.tests = {
60     inherit (nixosTests) moodle;
61   };
63   meta = with lib; {
64     description =
65       "Free and open-source learning management system (LMS) written in PHP";
66     license = licenses.gpl3Plus;
67     homepage = "https://moodle.org/";
68     maintainers = with maintainers; [ freezeboy ];
69     platforms = platforms.all;
70   };