diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/web-apps/wordpress/packages/default.nix')
-rw-r--r-- | nixpkgs/pkgs/servers/web-apps/wordpress/packages/default.nix | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/default.nix b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/default.nix new file mode 100644 index 000000000000..715e9556bc7f --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/default.nix @@ -0,0 +1,85 @@ +# Source: https://git.helsinki.tools/helsinki-systems/wp4nix/-/blob/master/default.nix +# Licensed under: MIT +# Slightly modified + +{ lib, newScope, plugins, themes, languages, callPackage }: + +let packages = self: + let + generatedJson = { + inherit plugins themes languages; + }; + + in { + # Create a generic WordPress package. Most arguments are just passed + # to `mkDerivation`. The version is automatically filtered for weird characters. + mkWordpressDerivation = self.callPackage ({ stdenvNoCC, lib, filterWPString, gettext, wp-cli }: + { type, pname, version, ... }@args: + assert lib.any (x: x == type) [ "plugin" "theme" "language" ]; + stdenvNoCC.mkDerivation ({ + pname = "wordpress-${type}-${pname}"; + version = filterWPString version; + + dontConfigure = true; + dontBuild = true; + + installPhase = '' + runHook preInstall + cp -R ./. $out + runHook postInstall + ''; + + passthru = { + wpName = pname; + } // (args.passthru or {}); + } // lib.optionalAttrs (type == "language") { + nativeBuildInputs = [ gettext wp-cli ]; + dontBuild = false; + buildPhase = '' + runHook preBuild + + find -name '*.po' -print0 | while IFS= read -d "" -r po; do + msgfmt -o $(basename "$po" .po).mo "$po" + done + wp i18n make-json . + rm *.po + + runHook postBuild + ''; + } // removeAttrs args [ "type" "pname" "version" "passthru" ])) {}; + + # Create a derivation from the official wordpress.org packages. + # This takes the type, the pname and the data generated from the go tool. + mkOfficialWordpressDerivation = self.callPackage ({ mkWordpressDerivation, fetchWordpress }: + { type, pname, data }: + mkWordpressDerivation { + inherit type pname; + version = data.version; + + src = fetchWordpress type data; + }) {}; + + # Filter out all characters that might occur in a version string but that that are not allowed + # in store paths. + filterWPString = builtins.replaceStrings [ " " "," "/" "&" ";" ''"'' "'" "$" ":" "(" ")" "[" "]" "{" "}" "|" "*" "\t" ] [ "_" "." "." "" "" "" "" "" "" "" "" "" "" "" "" "-" "" "" ]; + + # Fetch a package from the official wordpress.org SVN. + # The data supplied is the data straight from the go tool. + fetchWordpress = self.callPackage ({ fetchsvn }: type: data: fetchsvn { + inherit (data) rev sha256; + url = if type == "plugin" || type == "theme" then + "https://" + type + "s.svn.wordpress.org/" + data.path + else if type == "language" then + "https://i18n.svn.wordpress.org/core/" + data.version + "/" + data.path + else if type == "pluginLanguage" then + "https://i18n.svn.wordpress.org/plugins/" + data.path + else if type == "themeLanguage" then + "https://i18n.svn.wordpress.org/themes/" + data.path + else + throw "fetchWordpress: invalid package type ${type}"; + }) {}; + + } // lib.mapAttrs (type: pkgs: lib.makeExtensible (_: lib.mapAttrs (pname: data: self.mkOfficialWordpressDerivation { type = lib.removeSuffix "s" type; inherit pname data; }) pkgs)) generatedJson; + +# This creates an extensible scope. +in lib.recursiveUpdate ((lib.makeExtensible (_: (lib.makeScope newScope packages))).extend (selfWP: superWP: {})) (callPackage ./thirdparty.nix {}) |