mirror of https://gitlab.crans.org/nounous/nixos
297 lines
11 KiB
Nix
297 lines
11 KiB
Nix
{ lib, pkgs, config, ... }:
|
||
|
||
let
|
||
version = pkgs.mediawiki.version;
|
||
major = lib.versions.major version;
|
||
minor = lib.versions.minor version;
|
||
phpExtensions = config.services.mediawiki.phpPackage.extensions;
|
||
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";
|
||
};
|
||
|
||
age.secrets.mediawiki-oauth = {
|
||
file = ../../../secrets/mediakiwi/mediawiki-oauth.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 = ${phpExtensions.mbstring}/lib/php/extensions/mbstring.so
|
||
extension = ${phpExtensions.luasandbox}/lib/php/extensions/luasandbox.so
|
||
'';
|
||
|
||
services.nginx.clientMaxBodySize = "512M";
|
||
|
||
services.syslogd.enable = true;
|
||
|
||
services.mediawiki = {
|
||
enable = true;
|
||
|
||
name = "Wiki Crans";
|
||
|
||
nginx.hostName = "mediawiki.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}";
|
||
$wgOAuthCustomAuthProviders = [
|
||
'note' => WSOAuth\AuthenticationProvider\NoteKfetAuth::class
|
||
];
|
||
$wgPluggableAuth_Config = [
|
||
"Compte Crans" => [
|
||
'plugin' => 'LDAPAuthentication2',
|
||
'data' => [
|
||
'domain' => 'crans'
|
||
]
|
||
],
|
||
"Note BDE" => [
|
||
'plugin' => 'WSOAuth',
|
||
'data' => require('${config.age.secrets.mediawiki-oauth.path}'),
|
||
]
|
||
];
|
||
|
||
# Theme
|
||
$wgDefaultSkin = 'citizen';
|
||
$wgCitizenThemeColor = '#AD1F1F';
|
||
$wgCitizenEnableARFonts = true;
|
||
$wgCitizenEnableCJKFonts = true;
|
||
|
||
$wgLanguageCode = 'fr';
|
||
$wgLocaltimezone = 'Europe/Paris';
|
||
$wgDefaultUserOptions['timecorrection'] = 'ZoneInfo|0|' . $wgLocaltimezone;
|
||
|
||
# Access Control
|
||
$wgGroupPermissions['*']['edit'] = false; # Restrict edition for anonymous user
|
||
$wgGroupPermissions['*']['createaccount'] = false; # Restrict the creation of account to sysop only
|
||
|
||
$wgCategoryLockdownWhitelist = [
|
||
"Spécial:Connexion",
|
||
"Spécial:Connexion/return",
|
||
"Spécial:PluggableAuthLogin",
|
||
"Spécial:Recherche",
|
||
"MediaWiki:Common.css",
|
||
"MediaWiki:Common.js"
|
||
];
|
||
|
||
$wgCategoryGroupLockdown["!user"]["read"] = [ "Page Publique" ]; # Restrict read for non-user (i.e. anonymous) on execpt for Page Publique # 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",
|
||
NS_ARCHIVE_TALK => "Discussion_archive",
|
||
];
|
||
|
||
# Debug
|
||
$wgShowExceptionDetails = true;
|
||
$wgDebugToolbar = true;
|
||
$wgDebugLogFile = "/var/log/mediawiki/debug.log";
|
||
# $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
|
||
Linter = null; # requis pour DiscussionTools
|
||
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
|
||
|
||
CategoryLockdown = pkgs.applyPatches {
|
||
src = pkgs.fetchFromGitHub {
|
||
name = "CategoryLockdown";
|
||
owner = "wikimedia";
|
||
repo = "mediawiki-extensions-CategoryLockdown";
|
||
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-WEg0QP4QXt89uvZCZvkfpycoZGBP640aTpaxbl5jsZs=";
|
||
};
|
||
patches = [
|
||
# Cette extension s’occupe des du contrôle d’accès du Wiki
|
||
# et a été beaucoup patché. Pensez à vérifier les changements
|
||
# et révisez le patch le cas échéant.
|
||
"${./category-lockdown.patch}"
|
||
];
|
||
};
|
||
|
||
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=";
|
||
};
|
||
WSOAuth = pkgs.applyPatches {
|
||
src = pkgs.fetchFromGitHub {
|
||
name = "WSOAuth";
|
||
owner = "wikimedia";
|
||
repo = "mediawiki-extensions-WSOAuth";
|
||
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-G2C/KuSgfWWftpHHhOABwFcOEb1zB8qmHi9KgrC6Jrc=";
|
||
};
|
||
patches = [ "${./WSOAuth.patch}" ];
|
||
};
|
||
WSONoteKfetAuth = "${./WSONoteKfetAuth}";
|
||
};
|
||
};
|
||
}
|