nixos/hosts/vm/mediakiwi/mediawiki.nix

311 lines
11 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{ 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);
define("NS_PUBLIC", 3002);
define("NS_PUBLIC_TALK", 3003);
define("NS_INTERNE", 3004);
define("NS_INTERNE_TALK", 3005);
$wgExtraNamespaces = [
NS_ARCHIVE => "Archive",
NS_ARCHIVE_TALK => "Discussion_archive",
NS_PUBLIC => "Public",
NS_PUBLIC_TALK => "Discussions_pages_publiques",
NS_INTERNE => "Interne",
NS_INTERNE_TALK => "Discussions_pages_internes"
];
$wgContentNamespaces = [ NS_MAIN, NS_PUBLIC, NS_INTERNE ];
$wgNamespacesToBeSearchedDefault = [
NS_MAIN => true,
NS_PUBLIC => true,
NS_INTERNE => true,
];
# 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 soccupe des du contrôle daccè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}";
};
};
}