diff --git a/sys/platforms/vps/default.nix b/sys/platforms/vps/default.nix index 2f651e4..cbf761c 100644 --- a/sys/platforms/vps/default.nix +++ b/sys/platforms/vps/default.nix @@ -37,9 +37,57 @@ with lib; { }; }; - trivium.soju = { - enable = true; - fullyQualifiedDomain = "soju.posixlycorrect.com"; + trivium = { + soju = { + enable = true; + fullyQualifiedDomain = "soju.posixlycorrect.com"; + }; + + mediawiki = { + enable = true; + hostName = "wiki.posixlycorrect.com"; + name = "posixlycorrect wiki"; + passwordFile = "/run/keys/mediawiki-password"; + skins = { + citizen = "${flakes.mediawikiSkinCitizen}"; + }; + extraConfig = '' + # Disable anonymous editing and account creation + $wgGroupPermissions['*']['edit'] = false; + $wgGroupPermissions['*']['createaccount'] = false; + + $wgDefaultSkin = 'citizen'; + $wgDefaultMobileSkin = 'citizen'; + $wgCitizenThemeDefault = 'dark'; + $wgCitizenShowPageTools = 'login'; + $wgLogos = [ + 'icon' => "https://posixlycorrect.com/favicon.png", + '1x' => "https://posixlycorrect.com/favicon.png", + '2x' => "https://posixlycorrect.com/favicon.png", + ]; + + $wgEnableEmail = false; #TODO: arreglar esto + $wgNoReplyAddress = 'mediawiki@posixlycorrect.com'; + $wgEmergencyContact = 'mediawiki@posixlycorrect.com'; + $wgPasswordSender = 'mediawiki@posixlycorrect.com'; + ''; + extensions = { + # some extensions are included and can enabled by passing null + 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; + }; + }; }; services.openssh = { diff --git a/sys/platforms/vps/srv/default.nix b/sys/platforms/vps/srv/default.nix index e56a3da..d7511ed 100644 --- a/sys/platforms/vps/srv/default.nix +++ b/sys/platforms/vps/srv/default.nix @@ -8,7 +8,6 @@ with lib; { imports = [ ./net.nix - ./mediawiki.nix ./forgejo.nix ./vaultwarden.nix ./msmtp.nix diff --git a/sys/platforms/vps/srv/mediawiki.nix b/sys/platforms/vps/srv/mediawiki.nix deleted file mode 100644 index 37fd9ba..0000000 --- a/sys/platforms/vps/srv/mediawiki.nix +++ /dev/null @@ -1,71 +0,0 @@ -{ - lib, - pkgs, - flakes, - ... -}: -with lib; { - services = { - nginx = { - virtualHosts."wiki.posixlycorrect.com" = { - enableACME = true; - forceSSL = true; - extraConfig = '' - proxy_headers_hash_max_size 512; - proxy_headers_hash_bucket_size 128; - ''; - }; - }; - mediawiki = { - enable = true; - name = "posixlycorrect wiki"; - webserver = "nginx"; - nginx.hostName = "wiki.posixlycorrect.com"; - database.type = "postgres"; - - passwordFile = "/run/keys/mediawiki-password"; - - skins = { - citizen = "${flakes.mediawikiSkinCitizen}"; - }; - - extraConfig = '' - # Disable anonymous editing and account creation - $wgGroupPermissions['*']['edit'] = false; - $wgGroupPermissions['*']['createaccount'] = false; - - $wgDefaultSkin = 'citizen'; - $wgDefaultMobileSkin = 'citizen'; - $wgCitizenThemeDefault = 'dark'; - $wgCitizenShowPageTools = 'login'; - $wgLogos = [ - 'icon' => "https://posixlycorrect.com/favicon.png", - '1x' => "https://posixlycorrect.com/favicon.png", - '2x' => "https://posixlycorrect.com/favicon.png", - ]; - - $wgEnableEmail = false; #TODO: arreglar esto - $wgNoReplyAddress = 'mediawiki@posixlycorrect.com'; - $wgEmergencyContact = 'mediawiki@posixlycorrect.com'; - $wgPasswordSender = 'mediawiki@posixlycorrect.com'; - ''; - - extensions = { - # some extensions are included and can enabled by passing null - 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; - }; - }; - }; -} diff --git a/trivionomicon/modules/mediawiki/default.nix b/trivionomicon/modules/mediawiki/default.nix new file mode 100644 index 0000000..2ed69c2 --- /dev/null +++ b/trivionomicon/modules/mediawiki/default.nix @@ -0,0 +1,13 @@ +{ + config, + lib, + pkgs, + doctrine, + ... +}: +doctrine.lib.mkModule { + inherit config; + name = "mediawiki"; + sys = ./sys.nix; + options = ./options.nix; +} diff --git a/trivionomicon/modules/mediawiki/options.nix b/trivionomicon/modules/mediawiki/options.nix new file mode 100644 index 0000000..06acbf1 --- /dev/null +++ b/trivionomicon/modules/mediawiki/options.nix @@ -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; + };''; + }; + }; +} diff --git a/trivionomicon/modules/mediawiki/sys.nix b/trivionomicon/modules/mediawiki/sys.nix new file mode 100644 index 0000000..525ec3e --- /dev/null +++ b/trivionomicon/modules/mediawiki/sys.nix @@ -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; + }; + }; +}