From 95a0e9f04ab79b051f7db8a50f6bed238f84f155 Mon Sep 17 00:00:00 2001 From: schweby Date: Mon, 23 Aug 2021 20:33:42 +0200 Subject: [PATCH] parsons: init lantifa wiki --- hosts/parsons/configuration.nix | 1 + services/lantifa.nix | 118 ++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 services/lantifa.nix diff --git a/hosts/parsons/configuration.nix b/hosts/parsons/configuration.nix index f3d704e..c41dfa0 100644 --- a/hosts/parsons/configuration.nix +++ b/hosts/parsons/configuration.nix @@ -20,6 +20,7 @@ ../../services/nginx-pages.nix ../../services/gitlab-runner.nix ../../services/unifi.nix + ../../services/lantifa.nix ./lxc.nix ]; diff --git a/services/lantifa.nix b/services/lantifa.nix new file mode 100644 index 0000000..3e96b10 --- /dev/null +++ b/services/lantifa.nix @@ -0,0 +1,118 @@ +{ config, lib, pkgs, profiles, modules, evalConfig, ... }: + +let + unstable = import (import ../nix/sources.nix).nixpkgs-unstable {}; +in { + containers.lantifa = { + autoStart = true; + privateNetwork = true; + hostAddress = "192.168.100.1"; + localAddress = "192.168.100.8"; + bindMounts = { + "/persist" = { + hostPath = "/persist/containers/lantifa"; + isReadOnly = false; + }; + }; + + path = (evalConfig {hosts = {}; groups = {};} ({ config, lib, pkgs, profiles, modules, sources, ... }: { + boot.isContainer = true; + networking.useDHCP = false; + users.users.root.hashedPassword = ""; + hexchen.bindmounts."/var/lib/mediawiki" = "/persist/var/lib/mediawiki"; + + imports = [ + ((import sources.nix-hexchen) {}).profiles.nopersist + ]; + + networking.hosts."127.0.0.1" = [ "wiki.lantifa.org" ]; + users.users.mediawiki.extraGroups = [ "keys" ]; + nixpkgs.config.allowUnfree = true; + networking.firewall.enable = false; + networking.defaultGateway = { + address = "192.168.100.1"; + interface = "eth0"; + }; + + services.mediawiki = { + enable = true; + name = "LANtifa"; + package = unstable.mediawiki; + database.createLocally = true; + passwordFile = "/var/lib/mediawiki/mediawiki-password"; + extraConfig = let + wikidb = pkgs.fetchzip { + url = "http://www.kennel17.co.uk/uploads/testwiki/archive/e/e9/20210407232657%21WikiDB.zip"; + sha256 = "0d4f2ygglz4w515a7lgw59500q3xmr92xxhsmh8p204yaa769x8v"; + }; + in '' + // Configure short URLs + $wgScriptPath = ""; + $wgArticlePath = "/wiki/$1"; + $wgUsePathInfo = true; + + require_once('${wikidb}/WikiDB.php'); + $wgExtraNamespaces = array( 100 => "Table", 101 => "Table_Talk",); + $wgWikiDBNamespaces = 100; + $wgGroupPermissions['user']['writeapi'] = true; + $wgDefaultUserOptions['visualeditor-enable'] = 1; + $wgLogo = "images/c/c5/LantifaLogoFem0.3.png"; + + // PageForms config + $wgGroupPermissions['*']['viewedittab'] = false; + $wgGroupPermissions['user']['viewedittab'] = true; + + // Moderation setting + $wgModerationNotificationEnable = true; + $wgModerationEmail = "wiki_mod@lantifa.org"; + $wgLogRestrictions["newusers"] = 'moderation'; + + // intersection / DynamicPageList config + $wgDLPMaxCacheTime = 5 * 60; + ''; + + extensions = { + TemplateData = null; + VisualEditor = null; + InputBox = null; + Moderation = pkgs.fetchzip { + url = "https://github.com/edwardspec/mediawiki-moderation/archive/v1.4.20.tar.gz"; + sha256 = "1k0z44jfqsxzwy6jjz3yfibiq8wi845d5iwwh8j3yijn2854fj0i"; + }; + intersection = pkgs.fetchzip { # This is the DynamicPageList extension + url = "https://extdist.wmflabs.org/dist/extensions/intersection-REL1_36-789511a.tar.gz"; + sha256 = "0b5viv0d2pm1g68hynm8xbvcyw2cr3lgaxbqzdykk2yvvhc4w8j5"; + }; + PageForms = pkgs.fetchzip { + url = "https://github.com/wikimedia/mediawiki-extensions-PageForms/archive/5.0.1.zip"; + sha256 = "172m7p941fbkl29h5bhanx3dn42jfmzgyvgmgm2lgdbmkawwly96"; + }; + }; + + virtualHost = { + hostName = "wiki.lantifa.org"; + listen = [ { port = 80; } ]; + adminAddr = "admin@hacc.space"; + extraConfig = '' + RewriteEngine On + RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/index.php [L] + RewriteRule ^/*$ %{DOCUMENT_ROOT}/index.php [L] + ''; + }; + }; + + services.mysql.dataDir = "/persist/mysql"; + services.mysqlBackup = { + enable = true; + databases = [ "mediawiki" ]; + calendar = "*-*-* 23:45:00"; + }; + })).config.system.build.toplevel; + }; + + services.nginx.virtualHosts."wiki.lantifa.org" = { + locations."/".proxyPass = "http://" + config.containers.lantifa.localAddress + ""; + forceSSL = true; + enableACME = true; + }; +}