diff --git a/flake.lock b/flake.lock index 7788dc72..75182d65 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,21 @@ { "nodes": { + "MediaWikiExtensionsComposer": { + "flake": false, + "locked": { + "lastModified": 1710203136, + "narHash": "sha256-yn4ZzzaYTZu46SvgctwtiISwC7rzda+1PwvaX6Zxq58=", + "ref": "refs/heads/master", + "rev": "f4489ac8400b1570d49204ff27b958f49c554007", + "revCount": 1, + "type": "git", + "url": "https://gitea.c3d2.de/c3d2/MediaWikiExtensionsComposer.git" + }, + "original": { + "type": "git", + "url": "https://gitea.c3d2.de/c3d2/MediaWikiExtensionsComposer.git" + } + }, "affection-src": { "inputs": { "flake-utils": [ @@ -487,6 +503,7 @@ }, "root": { "inputs": { + "MediaWikiExtensionsComposer": "MediaWikiExtensionsComposer", "affection-src": "affection-src", "alert2muc": "alert2muc", "bevy-julia": "bevy-julia", diff --git a/flake.nix b/flake.nix index 98ed0c94..143df53c 100644 --- a/flake.nix +++ b/flake.nix @@ -93,7 +93,11 @@ utils.follows = "flake-utils"; }; }; - # hydra-ca.url = "github:mlabs-haskell/hydra/aciceri/ca-derivations"; + # extra repository to not infalte this repository's size + MediaWikiExtensionsComposer = { + url = "git+https://gitea.c3d2.de/c3d2/MediaWikiExtensionsComposer.git"; + flake = false; + }; microvm = { url = "github:astro/microvm.nix"; inputs = { @@ -215,7 +219,7 @@ }; }; - outputs = inputs@{ self, alert2muc, c3d2-user-module, deployment, disko, fenix, heliwatch, microvm, naersk, nixos, nixos-hardware, nixos-modules, buzzrelay, caveman, oparl-scraper, scrapers, secrets, skyflake, sshlogd, sops-nix, spacemsg, ticker, tigger, yammat, zentralwerk, ... }: + outputs = inputs@{ self, alert2muc, c3d2-user-module, deployment, disko, fenix, heliwatch, MediaWikiExtensionsComposer, microvm, naersk, nixos, nixos-hardware, nixos-modules, buzzrelay, caveman, oparl-scraper, scrapers, secrets, skyflake, sshlogd, sops-nix, spacemsg, ticker, tigger, yammat, zentralwerk, ... }: let inherit (nixos) lib; @@ -475,6 +479,9 @@ modules = [ self.nixosModules.microvm ./hosts/mediawiki + { + _module.args = { inherit MediaWikiExtensionsComposer; }; + } ]; }; diff --git a/hosts/mediawiki/default.nix b/hosts/mediawiki/default.nix index d2e5996c..a77b393c 100644 --- a/hosts/mediawiki/default.nix +++ b/hosts/mediawiki/default.nix @@ -1,4 +1,4 @@ -{ config, lib, libC, pkgs, ... }: +{ config, lib, libC, MediaWikiExtensionsComposer, pkgs, ... }: let cfg = config.services.mediawiki; @@ -69,6 +69,33 @@ in url = "https://web.archive.org/web/20230710142618/https://extdist.wmflabs.org/dist/extensions/PluggableAuth-REL1_40-519c6d2.tar.gz"; sha256 = "sha256-N1+OV1UdzvU4iXhaS/+fuEoAXqrkVyyEPDirk0vrT8A="; }; + # source https://github.com/Die-KoMa/mediawiki/blob/main/packages/default.nix#L32-L47 + # TODO: generalize + SemanticMediaWiki = let + drv = import MediaWikiExtensionsComposer { + noDev = true; + inherit pkgs; + php = pkgs.php81; + phpPackages = pkgs.php81Packages; + }; + in + pkgs.stdenv.mkDerivation { + name = "mediawiki-extensions-composer"; + dontUnpack = true; + + installPhase = '' + mkdir $out + cp -R ${drv}/extensions/SemanticMediaWiki/* $out + cp -R ${drv}/vendor vendor + + pushd vendor/composer/ + substituteInPlace *.json *.php \ + --replace "/extensions/SemanticMediaWiki" "" + popd + + cp -R vendor $out/ + ''; + }; }; name = "C3D2"; @@ -157,9 +184,9 @@ in wfLoadExtension('ConfirmEdit/QuestyCaptcha'); $wgCaptchaClass = 'QuestyCaptcha'; - $wgCaptchaQuestions[] = array( 'question' => 'How is C3D2 logo in ascii?', 'answer' => '<<>' ); + $wgCaptchaQuestions[] = array('question' => 'How is C3D2 logo in ascii?', 'answer' => '<<>'); - wfLoadExtension( 'Interwiki' ); + wfLoadExtension('Interwiki'); $wgGroupPermissions['sysop']['interwiki'] = true; wfLoadExtension('Cite'); @@ -178,6 +205,20 @@ in # LDAP $LDAPProviderDomainConfigs = "${config.sops.secrets."mediawiki/ldapprovider".path}"; $wgPluggableAuth_EnableLocalLogin = true; + + # SemanticMediaWiki + # TODO: expose https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/services/web-apps/mediawiki.nix#L19 + $smwgConfigFileDir = "/var/lib/mediawiki"; + # default was 100 which is already occupied, using 200 to 215 + # https://www.semantic-mediawiki.org/wiki/Help:$smwgNamespaceIndex + $smwgNamespaceIndex = 200; + # Doesn't work? Not sure why.... + # enableSemantics('${config.services.mediawiki.nginx.hostName}'); + # $smwgURITypeSchemeList = array_merge( + # $smwgURITypeSchemeList, [ + # 'xmpp', 'mumble', 'ssh' + # ] + # ); ''; }; @@ -187,7 +228,7 @@ in # for some reason nginx adds a port for the 301 redirect from / to /wiki/ port_in_redirect off; ''; - virtualHosts."wiki.c3d2.de" = { + virtualHosts."${config.services.mediawiki.nginx.hostName}" = { enableACME = true; forceSSL = true; listen = libC.defaultListen;