modularize media wiki
This commit is contained in:
parent
23758a11c1
commit
84c4c6556e
3 changed files with 116 additions and 0 deletions
13
modules/mediawiki/default.nix
Normal file
13
modules/mediawiki/default.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
doctrine,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
doctrine.lib.mkModule {
|
||||||
|
inherit config;
|
||||||
|
name = "mediawiki";
|
||||||
|
sys = ./sys.nix;
|
||||||
|
options = ./options.nix;
|
||||||
|
}
|
||||||
72
modules/mediawiki/options.nix
Normal file
72
modules/mediawiki/options.nix
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
{lib, ...}:
|
||||||
|
with lib.types; {
|
||||||
|
sys = {
|
||||||
|
hostName = lib.mkOption {
|
||||||
|
type = str;
|
||||||
|
description = "used for nginx virtualhost. no protocol";
|
||||||
|
example = "wiki.posixlycorrect.com";
|
||||||
|
};
|
||||||
|
|
||||||
|
name = lib.mkOption {
|
||||||
|
type = str;
|
||||||
|
description = "name of the wiki";
|
||||||
|
example = "posixlycorrect wiki";
|
||||||
|
};
|
||||||
|
|
||||||
|
passwordFile = lib.mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = "path of passwordfile for mediawiki";
|
||||||
|
example = "/run/keys/mediawiki-password";
|
||||||
|
};
|
||||||
|
|
||||||
|
skins = lib.mkOption {
|
||||||
|
type = types.attrsOf (types.nullOr str);
|
||||||
|
description = "skins for mediawiki";
|
||||||
|
example = ''{
|
||||||
|
citizen = "flakes.mediawikiSkinCitizen";
|
||||||
|
};'';
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = lib.mkOption {
|
||||||
|
type = str;
|
||||||
|
example = ''
|
||||||
|
# Disable anonymous editing and account creation
|
||||||
|
$wgGroupPermissions['*']['edit'] = false;
|
||||||
|
$wgGroupPermissions['*']['createaccount'] = false;
|
||||||
|
|
||||||
|
$wgCitizenThemeDefault = 'dark';
|
||||||
|
$wgCitizenShowPageTools = 'login';
|
||||||
|
$wgLogos = [
|
||||||
|
'icon' => "https://example.com/favicon.png",
|
||||||
|
'1x' => "https://example.com/favicon.png",
|
||||||
|
'2x' => "https://example.com/favicon.png",
|
||||||
|
];
|
||||||
|
|
||||||
|
$wgEnableEmail = false; #TODO: arreglar esto
|
||||||
|
$wgNoReplyAddress = 'mediawiki@example.com';
|
||||||
|
$wgEmergencyContact = 'mediawiki@example.com';
|
||||||
|
$wgPasswordSender = 'mediawiki@example.com';
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
extensions = lib.mkOption {
|
||||||
|
type = types.attrsOf (types.nullOr types.path);
|
||||||
|
description = "some extensions are included and can enabled by passing null";
|
||||||
|
example = ''{
|
||||||
|
VisualEditor = null;
|
||||||
|
CategoryTree = null;
|
||||||
|
CiteThisPage = null;
|
||||||
|
Scribunto = null;
|
||||||
|
Cite = null;
|
||||||
|
CodeEditor = null;
|
||||||
|
Math = null;
|
||||||
|
MultimediaViewer = null;
|
||||||
|
PdfHandler = null;
|
||||||
|
Poem = null;
|
||||||
|
SecureLinkFixer = null;
|
||||||
|
WikiEditor = null;
|
||||||
|
ParserFunctions = null;
|
||||||
|
};'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
31
modules/mediawiki/sys.nix
Normal file
31
modules/mediawiki/sys.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
cfg,
|
||||||
|
doctrine,
|
||||||
|
...
|
||||||
|
}: with lib; {
|
||||||
|
services = {
|
||||||
|
nginx = {
|
||||||
|
virtualHosts.${cfg.hostName} = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
extraConfig = ''
|
||||||
|
proxy_headers_hash_max_size 512;
|
||||||
|
proxy_headers_hash_bucket_size 128;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mediawiki = {
|
||||||
|
enable = true;
|
||||||
|
name = cfg.name;
|
||||||
|
webserver = "nginx";
|
||||||
|
nginx.hostName = cfg.hostName;
|
||||||
|
database.type = "postgres";
|
||||||
|
passwordFile = cfg.passwordFile;
|
||||||
|
skins = cfg.skins;
|
||||||
|
extraConfig = cfg.extraConfig;
|
||||||
|
extensions = cfg.extensions;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue