197 lines
4.6 KiB
Nix
197 lines
4.6 KiB
Nix
{ config, lib, pkgs, serverInfo, php, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
httpd = serverInfo.serverConfig.package;
|
|
|
|
version24 = !versionOlder httpd.version "2.4";
|
|
|
|
allGranted = if version24 then ''
|
|
Require all granted
|
|
'' else ''
|
|
Order allow,deny
|
|
Allow from all
|
|
'';
|
|
|
|
moodleConfig = pkgs.writeText "config.php"
|
|
''
|
|
<?php
|
|
unset($CFG);
|
|
global $CFG;
|
|
$CFG = new stdClass();
|
|
$CFG->dbtype = '${config.dbType}';
|
|
$CFG->dblibrary = 'native';
|
|
$CFG->dbhost = '${config.dbHost}';
|
|
$CFG->dbname = '${config.dbName}';
|
|
$CFG->dbuser = '${config.dbUser}';
|
|
$CFG->dbpass = '${config.dbPassword}';
|
|
$CFG->prefix = '${config.dbPrefix}';
|
|
$CFG->dboptions = array(
|
|
'dbpersist' => false,
|
|
'dbsocket' => false,
|
|
'dbport' => "${config.dbPort}",
|
|
);
|
|
$CFG->wwwroot = '${config.wwwRoot}';
|
|
$CFG->dataroot = '${config.dataRoot}';
|
|
$CFG->directorypermissions = 02777;
|
|
$CFG->admin = 'admin';
|
|
${optionalString (config.debug.noEmailEver == true) ''
|
|
$CFG->noemailever = true;
|
|
''}
|
|
|
|
${config.extraConfig}
|
|
require_once(dirname(__FILE__) . '/lib/setup.php'); // Do not edit
|
|
'';
|
|
# Unpack Moodle and put the config file in its root directory.
|
|
moodleRoot = pkgs.stdenv.mkDerivation rec {
|
|
name= "moodle-2.8.10";
|
|
|
|
src = pkgs.fetchurl {
|
|
url = "https://download.moodle.org/stable28/${name}.tgz";
|
|
sha256 = "0c3r5081ipcwc9s6shakllnrkd589y2ln5z5m1q09l4h6a7cy4z2";
|
|
};
|
|
|
|
buildPhase =
|
|
''
|
|
'';
|
|
|
|
installPhase =
|
|
''
|
|
mkdir -p $out
|
|
cp -r * $out
|
|
cp ${moodleConfig} $out/config.php
|
|
'';
|
|
# Marked as broken due to needing an update for security issues.
|
|
# See: https://github.com/NixOS/nixpkgs/issues/18856
|
|
meta.broken = true;
|
|
|
|
};
|
|
|
|
in
|
|
|
|
{
|
|
|
|
extraConfig =
|
|
''
|
|
# this should be config.urlPrefix instead of /
|
|
Alias / ${moodleRoot}/
|
|
<Directory ${moodleRoot}>
|
|
DirectoryIndex index.php
|
|
</Directory>
|
|
'';
|
|
|
|
documentRoot = moodleRoot; # TODO: fix this, should be config.urlPrefix
|
|
|
|
enablePHP = true;
|
|
|
|
options = {
|
|
|
|
id = mkOption {
|
|
default = "main";
|
|
description = ''
|
|
A unique identifier necessary to keep multiple Moodle server
|
|
instances on the same machine apart.
|
|
'';
|
|
};
|
|
|
|
dbType = mkOption {
|
|
default = "postgres";
|
|
example = "mysql";
|
|
description = "Database type.";
|
|
};
|
|
|
|
dbName = mkOption {
|
|
default = "moodle";
|
|
description = "Name of the database that holds the Moodle data.";
|
|
};
|
|
|
|
dbHost = mkOption {
|
|
default = "localhost";
|
|
example = "10.0.2.2";
|
|
description = ''
|
|
The location of the database server.
|
|
'';
|
|
};
|
|
|
|
dbPort = mkOption {
|
|
default = ""; # use the default port
|
|
example = "12345";
|
|
description = ''
|
|
The port that is used to connect to the database server.
|
|
'';
|
|
};
|
|
|
|
dbUser = mkOption {
|
|
default = "moodle";
|
|
description = "The user name for accessing the database.";
|
|
};
|
|
|
|
dbPassword = mkOption {
|
|
default = "";
|
|
example = "password";
|
|
description = ''
|
|
The password of the database user. Warning: this is stored in
|
|
cleartext in the Nix store!
|
|
'';
|
|
};
|
|
|
|
dbPrefix = mkOption {
|
|
default = "mdl_";
|
|
example = "my_other_mdl_";
|
|
description = ''
|
|
A prefix for each table, if multiple moodles should run in a single database.
|
|
'';
|
|
};
|
|
|
|
wwwRoot = mkOption {
|
|
type = types.string;
|
|
example = "http://my.machine.com/my-moodle";
|
|
description = ''
|
|
The full web address where moodle has been installed.
|
|
'';
|
|
};
|
|
|
|
dataRoot = mkOption {
|
|
default = "/var/lib/moodledata";
|
|
example = "/var/lib/moodledata";
|
|
description = ''
|
|
The data directory for moodle. Needs to be writable!
|
|
'';
|
|
type = types.path;
|
|
};
|
|
|
|
|
|
extraConfig = mkOption {
|
|
default = "";
|
|
example =
|
|
''
|
|
'';
|
|
description = ''
|
|
Any additional text to be appended to Moodle's
|
|
configuration file. This is a PHP script.
|
|
'';
|
|
};
|
|
|
|
debug = {
|
|
noEmailEver = mkOption {
|
|
default = false;
|
|
example = "true";
|
|
description = ''
|
|
Set this to true to prevent Moodle from ever sending any email.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
startupScript = pkgs.writeScript "moodle_startup.sh" ''
|
|
echo "Checking for existence of ${config.dataRoot}"
|
|
if [ ! -e "${config.dataRoot}" ]
|
|
then
|
|
mkdir -p "${config.dataRoot}"
|
|
chown ${serverInfo.serverConfig.user}.${serverInfo.serverConfig.group} "${config.dataRoot}"
|
|
fi
|
|
'';
|
|
|
|
}
|