{ lib, pkgs, config, ... }: let version = pkgs.mediawiki.version; major = lib.versions.major version; minor = lib.versions.minor version; in { age.secrets.mediawiki-admin-passwd = { file = ../../../secrets/mediakiwi/mediawiki-admin-passwd.age; owner = "mediawiki"; }; age.secrets.mediawiki-ldap = { file = ../../../secrets/mediakiwi/mediawiki-ldap.age; owner = "mediawiki"; }; environment.systemPackages = with pkgs; [ imagemagick # For the PdfHandler extension ghostscript poppler-utils ]; services.phpfpm.pools.mediawiki.phpOptions = '' upload_max_filesize = 512M post_max_size = 512M max_execution_time = 1000 max_input_time = 2000 default_socket_timeout = 2000 extension = ${pkgs.phpExtensions.mbstring}/lib/php/extensions/mbstring.so extension = ${pkgs.phpExtensions.luasandbox}/lib/php/extensions/luasandbox.so ''; services.nginx.clientMaxBodySize = "512M"; services.syslogd.enable = true; services.mediawiki = { enable = true; name = "Wiki Crans"; nginx.hostName = "mediakiwi.crans.org"; webserver = "nginx"; passwordFile = config.age.secrets.mediawiki-admin-passwd.path; extraConfig = '' # TODO remove log error in test error_reporting( -1 ); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); # Server settings $wgFavicon = 'https://www.crans.org/images/favicon.ico'; $wgLogo = 'https://www.crans.org/images/crans.svg'; # Files and Uploads $wgMaxUploadSize = 512 * 1024 * 1024; $wgUseImageMagick = true; $wgImageMagickConvertCommand = '${ pkgs.imagemagick }/bin/convert'; $wgStrictFileExtensions = false; $wgFileExtensions[] = 'pdf'; # Limite mémoire, quand on fait de gros importi (9M de xml), le parser # prends plus que 50M $wgMemoryLimit = 512 * 1024 * 1024; # E-mail settings $wgEnableEmail = true; # $wgSMTP = [ # 'host' => 'smtp.adm.crans.org', # 'IDHost' => 'crans.org', # 'localhost' => 'crans.org', # 'port' => , # 'auth' => false, # # 'username' => , # # 'password' => , # ]; $wgPasswordSender = 'root@crans.org'; $wgEmergencyContact = 'contact@crans.org'; $wgNoReplyAddress = 'root@crans.org'; $wgEnableUserEmail = false; # $wgEnableSpecialMute = true; $wgAllowHTMLEmail = true; $wgEnotifUseRealName = false; $wgEnotifFromEditor = false; $wgEnotifRevealEditorAddress = false; $wgEnotifUserTalk = true; $wgEnotifMinorEdits = true; $wgEnotifWatchlist = true; # Peut-être utilisé pour les Wikistes $wgUsersNotifiedOnAllChanges = []; # Auth $wgPluggableAuth_EnableLocalLogin = true; $LDAPAuthentication2AllowLocalLogin = true; $LDAPProviderDomainConfigs = "${config.age.secrets.mediawiki-ldap.path}"; $wgPluggableAuth_Config = [ "Compte Crans" => [ 'plugin' => 'LDAPAuthentication2', 'data' => [ 'domain' => 'crans' ] ], # "Note BDE" => [ # 'plugin' => 'OpenIDConnect', # ] ]; # Theme $wgDefaultSkin = 'citizen'; $wgCitizenThemeColor = '#AD1F1F'; $wgCitizenEnableARFonts = true; $wgCitizenEnableCJKFonts = true; $wgLanguageCode = 'fr'; # Disable anonymous editing $wgGroupPermissions['*']['edit'] = false; $wgGroupPermissions['*']['read'] = false; # Extensions $wgWikiEditorRealtimePreview = true; $wgCiteBookReferencing = true; $wgPdfProcessor = '${ pkgs.ghostscript }/bin/gs'; $wgPdfPostProcessor = $wgImageMagickConvertCommand; $wgPdfInfo = '${ pkgs.poppler-utils }/bin/pdfinfo'; $wgPdftoText = '${ pkgs.poppler-utils }/bin/pdftotext'; $wgScribuntoDefaultEngine = 'luasandbox'; # Custom Namespaces define("NS_ARCHIVE", 3000); define("NS_ARCHIVE_TALK", 3001); $wgExtraNamespaces[NS_ARCHIVE] = "Archive"; $wgExtraNamespaces[NS_ARCHIVE_TALK] = "Discussion_archive"; # Debug $wgShowExceptionDetails = true; $wgDebugToolbar = true; # $wgShowDebug = true; # $wgDevelopmentWarnings = true; ''; skins = { Citizen = pkgs.fetchFromGitHub { name = "Citizen"; owner = "StarCitizenTools"; repo = "mediawiki-skins-Citizen"; tag = "v3.2.0"; sha256 = "sha256-XtjYMBK2pINwbAzAKFJ+nWxcFXQd2E/Gqf3x+3Pa8VE="; }; }; extensions = { # Enables embedded extensions AbuseFilter = null; # pour faire de la modération CategoryTree = null; # pour faire des arbres de catégories Cite = null; # pour faire des références/footnotes CiteThisPage = null; # pour avoir la citation (à la bibtex) d'une page CodeEditor = null; # pour éditer des macros/scripts wiki DiscussionTools = null; # pour des pages de discussion intéractives Echo = null; # pour le système de notification du wiki Gadgets = null; # pour avoir un système d'outils activable par les users ImageMap = null; # pour mettre des widgets sur des images Math = null; # pour avoir des maths LaTeX MultimediaViewer = null; # pour avoir un affichage sympa des images Nuke = null; # pour purger des pages PageImages = null; # pour set la bonne image représentant un article ParserFunctions = null; # pour la logique et les fonctions de base du templating PdfHandler = null; # pour afficher les pdfs Poem = null; # pour afficher des blocks de texte respectant l'espacement (poèmes, écrits) ReplaceText = null; # pour du méga-renommage à travers le wiki Scribunto = null; # pour faire du scripting et des templates pour le wiki SyntaxHighlight_GeSHi = null; # pour avoir de la coloration syntaxique TemplateData = null; # pour faire de la doc sur les templates # TemplateStyles = null; # pour styliser les templates (bundlé pour la prochaine version de mediawiki) TextExtracts = null; # pour set le bon text représentant un article Thanks = null; # pour remercier des gens en notif TitleBlacklist = null; # pour faire de la modération VisualEditor = null; # pour éditer visuellement les pages WikiEditor = null; # pour éditer le code wiki des pages # Bundled with next version, put as null in the next update TemplateStyles = pkgs.fetchFromGitHub { name = "TemplateStyles"; owner = "wikimedia"; repo = "mediawiki-extensions-TemplateStyles"; rev = "REL" + major + "_" + minor; # Le SHA doit être changé à chaque nouveau commit de traduction. # Pas de meilleure solution à ma connaissance pour suivre les releases. sha256 = "sha256-fCBccHTIBJrUyxe6oP7VR84HO65ICETE73X4rswQo4c="; }; # Popups Popups = pkgs.fetchFromGitHub { name = "Popups"; owner = "wikimedia"; repo = "mediawiki-extensions-Popups"; rev = "REL" + major + "_" + minor; # Le SHA doit être changé à chaque nouveau commit de traduction. # Pas de meilleure solution à ma connaissance pour suivre les releases. sha256 = "sha256-Vn/XGVYvM5doPtTEONESdVhgZlH/Fku74MeQbGrwU/E="; }; # Auth PluggableAuth = pkgs.fetchFromGitHub { name = "PluggableAuth"; owner = "wikimedia"; repo = "mediawiki-extensions-PluggableAuth"; rev = "REL" + major + "_" + minor; # Le SHA doit être changé à chaque nouveau commit de traduction. # Pas de meilleure solution à ma connaissance pour suivre les releases. sha256 = "sha256-3+nzeWemVAHGmLz3ZMvDSvP2UCmsnEiGJcE/oEakr2s="; }; LDAPProvider = pkgs.fetchFromGitHub { name = "LDAPProvider"; owner = "wikimedia"; repo = "mediawiki-extensions-LDAPProvider"; rev = "REL" + major + "_" + minor; # Le SHA doit être changé à chaque nouveau commit de traduction. # Pas de meilleure solution à ma connaissance pour suivre les releases. sha256 = "sha256-bpj+MS4XKLoDdtEK+Mv7Ifa6qz215jKhSL1DOOw4ZPs="; }; LDAPAuthentication2 = pkgs.fetchFromGitHub { name = "LDAPAuthentication2"; owner = "wikimedia"; repo = "mediawiki-extensions-LDAPAuthentication2"; rev = "REL" + major + "_" + minor; # Le SHA doit être changé à chaque nouveau commit de traduction. # Pas de meilleure solution à ma connaissance pour suivre les releases. sha256 = "sha256-oi5rliHb4KnLbvQxO7MGuLp/FEucoGR/Z0NP1gmbgMc="; }; OpenIDConnect = pkgs.fetchFromGitHub { name = "OpenIDConnect"; owner = "wikimedia"; repo = "mediawiki-extensions-OpenIDConnect"; rev = "REL" + major + "_" + minor; # Le SHA doit être changé à chaque nouveau commit de traduction. # Pas de meilleure solution à ma connaissance pour suivre les releases. sha256 = "sha256-KoBULn53xnY+ydodeTGN7YEoqgLr9qhhuR5mNibbh5s="; }; }; }; }