about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/web-apps/wordpress
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/web-apps/wordpress')
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/default.nix11
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/generic.nix49
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/README.md46
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/default.nix85
-rwxr-xr-xnixpkgs/pkgs/servers/web-apps/wordpress/packages/generate.sh23
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/languages.json20
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/plugins.json212
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/themes.json32
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/thirdparty.nix14
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-languages.json5
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json37
-rw-r--r--nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-themes.json7
12 files changed, 541 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/default.nix b/nixpkgs/pkgs/servers/web-apps/wordpress/default.nix
new file mode 100644
index 000000000000..77d85bc81ef4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/default.nix
@@ -0,0 +1,11 @@
+{ callPackage }: builtins.mapAttrs (_: callPackage ./generic.nix) rec {
+  wordpress = wordpress6_3;
+  wordpress6_3 = {
+    version = "6.3.2";
+    hash = "sha256-Jo2/Vlm4Ml24ucPI6ZHs2mkbpY2rZB1dofmGXNPweA8=";
+  };
+  wordpress6_4 = {
+    version = "6.4.1";
+    hash = "sha256-NF3tvVNUYlKPvtvJZzM7djGflOUT4VUlm4AyHPFzfdw=";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/generic.nix b/nixpkgs/pkgs/servers/web-apps/wordpress/generic.nix
new file mode 100644
index 000000000000..d2d97dab35d9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/generic.nix
@@ -0,0 +1,49 @@
+{ lib, version, hash, stdenv, fetchurl, nixosTests, writeScript }:
+
+stdenv.mkDerivation rec {
+  pname = "wordpress";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://wordpress.org/${pname}-${version}.tar.gz";
+    inherit hash;
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    # remove non-essential plugins and themes
+    rm -r wp-content/{plugins,themes}
+    mkdir wp-content/plugins
+    cat << EOF > wp-content/plugins/index.php
+    <?php
+    // Silence is golden.
+    EOF
+    cp -a wp-content/{plugins,themes}
+
+    mkdir -p $out/share/wordpress
+    cp -r . $out/share/wordpress
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) wordpress;
+  };
+
+  passthru.updateScript = writeScript "update.sh" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p common-updater-scripts jq
+    set -eu -o pipefail
+    version=$(curl --globoff "https://api.wordpress.org/core/version-check/1.7/" | jq -r '.offers[0].version')
+    update-source-version wordpress $version
+  '';
+
+  meta = with lib; {
+    homepage = "https://wordpress.org";
+    description = "WordPress is open source software you can use to create a beautiful website, blog, or app";
+    license = [ licenses.gpl2 ];
+    maintainers = [ maintainers.basvandijk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/README.md b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/README.md
new file mode 100644
index 000000000000..6ca50e1d9c4a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/README.md
@@ -0,0 +1,46 @@
+= Adding plugin, theme or language =
+
+To extend the wordpressPackages set, add a new line to the corresponding json
+file with the codename of the package:
+
+- `wordpress-languages.json` for language packs
+- `wordpress-themes.json` for themes
+- `wordpress-plugins.json` for plugins
+
+The codename is the last part in the url of the plugin or theme page, for
+example `cookie-notice` in in the url
+`https://wordpress.org/plugins/cookie-notice/` or `twentytwenty` in
+`https://wordpress.org/themes/twentytwenty/`.
+
+In case of language packages, the name consists of country and language codes.
+For example `de_DE` for country code `de` (Germany) and language `DE` (German).
+For available translations and language codes see [upstream translation repository](https://translate.wordpress.org).
+
+To regenerate the nixpkgs wordpressPackages set, run:
+
+```
+./generate.sh
+```
+
+After that you can commit and submit the changes.
+
+= Usage with the Wordpress module =
+
+The plugins will be available in the namespace `wordpressPackages.plugins`.
+Using it together with the Wordpress module could look like this:
+
+```
+services.wordpress = {
+  sites."blog.${config.networking.domain}" = {
+    plugins = with pkgs.wordpressPackages.plugins; [
+      anti-spam-bee
+      code-syntax-block
+      cookie-notice
+      lightbox-with-photoswipe
+      wp-gdpr-compliance
+    ];
+  };
+};
+```
+
+The same scheme applies to `themes` and `languages`.
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 {})
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/generate.sh b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/generate.sh
new file mode 100755
index 000000000000..1619850e8a2a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/generate.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p wp4nix jq
+
+set -e
+set -u
+set -o pipefail
+set -x
+
+cd $(dirname "$0")
+
+nixFlags="--option experimental-features nix-command eval --raw --impure --expr"
+export NIX_PATH=nixpkgs=../../../../..
+export WP_VERSION=$(nix $nixFlags '(import <nixpkgs> {}).wordpress.version')
+
+PLUGINS=`cat wordpress-plugins.json | jq -r '.[]' | sed -z 's/\n/,/g;s/,$/\n/'`
+THEMES=`cat wordpress-themes.json | jq -r '.[]' | sed -z 's/\n/,/g;s/,$/\n/'`
+LANGUAGES=`cat wordpress-languages.json | jq -r '.[]' | sed -z 's/\n/,/g;s/,$/\n/'`
+
+wp4nix -p $PLUGINS -pl en
+wp4nix -t $THEMES -tl en
+wp4nix -l $LANGUAGES
+
+rm *.log themeLanguages.json pluginLanguages.json
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/languages.json b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/languages.json
new file mode 100644
index 000000000000..66a2f6c1ba11
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/languages.json
@@ -0,0 +1,20 @@
+{
+  "de_DE": {
+    "path": "de_DE",
+    "rev": "1238966",
+    "sha256": "1qrizj0smwlxzv70l2f4dz737qggij2saqx4dc0vfrp4pn0qxw56",
+    "version": "6.3"
+  },
+  "fr_FR": {
+    "path": "fr_FR",
+    "rev": "1263147",
+    "sha256": "0rgypx5z7pi88da7ll0aby6hlvahja6wqjl8iacabwsnqawqbbx6",
+    "version": "6.3"
+  },
+  "ro_RO": {
+    "path": "ro_RO",
+    "rev": "1255832",
+    "sha256": "0c6hp40rgxg8ai3f35k2bgh4q66qf1g8qgv3jgbq6dcxr090fia2",
+    "version": "6.3"
+  }
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/plugins.json b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/plugins.json
new file mode 100644
index 000000000000..346c459530a5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/plugins.json
@@ -0,0 +1,212 @@
+{
+  "add-widget-after-content": {
+    "path": "add-widget-after-content/tags/2.4.5",
+    "rev": "2844985",
+    "sha256": "17h55fzmssaqv5k2s2a2n5rz49flhzg9gflnps1qpr62apki5156",
+    "version": "2.4.5"
+  },
+  "akismet": {
+    "path": "akismet/tags/5.3",
+    "rev": "2991242",
+    "sha256": "1i7y09x2aikndf80wl7xv65m71nv5s0w6jcadpp0dsyzp2m3gjnn",
+    "version": "5.3"
+  },
+  "antispam-bee": {
+    "path": "antispam-bee/tags/2.11.5",
+    "rev": "2969611",
+    "sha256": "1pbigfchwkz9zks3vf1xd83d0aj4n1fmlimn8dpa5pw96687nc9d",
+    "version": "2.11.5"
+  },
+  "async-javascript": {
+    "path": "async-javascript/tags/2.21.08.31",
+    "rev": "2929532",
+    "sha256": "0v9lrbxcgk6diz927q36nx45nbl6hm8bdig9lc0gj42i183y3g61",
+    "version": "2.21.08.31"
+  },
+  "breeze": {
+    "path": "breeze/tags/2.0.32",
+    "rev": "2995658",
+    "sha256": "0c0sh7l6cwz6hbc54gjaasdldrv8h6ynx4b75zzkj2arrmyhjjxg",
+    "version": "2.0.32"
+  },
+  "co-authors-plus": {
+    "path": "co-authors-plus/tags/3.5.15",
+    "rev": "2959167",
+    "sha256": "1n01sk2vgiym25wvxi4igpx773ph59y5f5lvwaasilamdpw0lzh4",
+    "version": "3.5.15"
+  },
+  "code-syntax-block": {
+    "path": "code-syntax-block/tags/3.1.1",
+    "rev": "2747615",
+    "sha256": "0dqdsl7f3ihshvly6cqd5l4cbimx5skmips514wvifspwggwmmjm",
+    "version": "3.1.1"
+  },
+  "cookie-notice": {
+    "path": "cookie-notice/tags/2.4.11.1",
+    "rev": "2974733",
+    "sha256": "0bq6i4s7zkx0x5qb65d93h0sdkd17vka10k8xicfin7qdy5fdcf6",
+    "version": "2.4.11.1"
+  },
+  "disable-xml-rpc": {
+    "path": "disable-xml-rpc/tags/1.0.1",
+    "rev": "2954460",
+    "sha256": "03vay6j7ac44pg55hlm02lglm3ggmjxdq95dhh0cmavbiafimhqq",
+    "version": "1.0.1"
+  },
+  "embed-extended": {
+    "path": "embed-extended/tags/1.4.0",
+    "rev": "2982701",
+    "sha256": "1qfxy9rp6ipp6r6m70vr30clbm2akssra4jbk8fss3qiz85rmfxa",
+    "version": "1.4.0"
+  },
+  "gutenberg": {
+    "path": "gutenberg/tags/17.0.2",
+    "rev": "2995211",
+    "sha256": "07c1smvapzm0gzkjzjk5irnp47x6hl2d4zcmlfprzj17igdqwa5s",
+    "version": "17.0.2"
+  },
+  "hello-dolly": {
+    "path": "hello-dolly/tags/1.7.2",
+    "rev": "2807593",
+    "sha256": "0zzbzdkzpgc65djn3694li82zc2q25q3zzv0kqjr7zwqmnrli0jp",
+    "version": "1.7.2"
+  },
+  "hkdev-maintenance-mode": {
+    "path": "hkdev-maintenance-mode/tags/2.4.5",
+    "rev": "2971903",
+    "sha256": "1nq3f0qv8zkws490h86m57972wp7vcngr62x90m8bcq4v6r110wd",
+    "version": "2.4.5"
+  },
+  "jetpack": {
+    "path": "jetpack/tags/12.8.1",
+    "rev": "2995420",
+    "sha256": "1i59npwwk29rsq5myl0axr1vsyfw19dyx22ckc2szkc3a4my8h40",
+    "version": "12.8.1"
+  },
+  "jetpack-lite": {
+    "path": "jetpack-lite/tags/3.0.3",
+    "rev": "1895157",
+    "sha256": "04wq8cnhzgzrhm5pjwicsnavc46n6wdmb6xf8gz4wwl1di2hl471",
+    "version": "3.0.3"
+  },
+  "lightbox-photoswipe": {
+    "path": "lightbox-photoswipe/tags/5.0.44",
+    "rev": "2968868",
+    "sha256": "0nbs05lxdf85ig373l3k558ncw0li1zrqnajq5mw9vkw15mxgy90",
+    "version": "5.0.44"
+  },
+  "login-lockdown": {
+    "path": "login-lockdown/tags/2.06",
+    "rev": "2951219",
+    "sha256": "0sl1pydylz1xpp3404nv2rdw8y2ccjvwglncj8flhjmgiwkjf47x",
+    "version": "2.06"
+  },
+  "mailpoet": {
+    "path": "mailpoet/tags/4.36.0",
+    "rev": "2995974",
+    "sha256": "1782z2b1bwg7mx9qzvyzpiymmkqiafd5ymb31q11i7ks19gxlmbw",
+    "version": "4.36.0"
+  },
+  "merge-minify-refresh": {
+    "path": "merge-minify-refresh/trunk",
+    "rev": "2997367",
+    "sha256": "158i9pqn4qqa5mzn57pg4m9gsln35c0gfb8v7sg1y02hp9876shg",
+    "version": "2.2"
+  },
+  "opengraph": {
+    "path": "opengraph/tags/1.11.2",
+    "rev": "2995321",
+    "sha256": "03cg7jm0g3rfwkvgjcg392mw09mlbmnvhw261rlldycfglmi270m",
+    "version": "1.11.2"
+  },
+  "simple-login-captcha": {
+    "path": "simple-login-captcha/tags/1.3.5",
+    "rev": "2988106",
+    "sha256": "1byq8f5qkxxnhjc4dk1ab7h8vzcr01y1nid81wwj2k1i03z9llqa",
+    "version": "1.3.5"
+  },
+  "static-mail-sender-configurator": {
+    "path": "static-mail-sender-configurator/tags/0.10.0",
+    "rev": "2941521",
+    "sha256": "1mrwgqp1ril54xqr8k2gwgjcsbf4xv3671v15xawapwz730h2c4r",
+    "version": "0.10.0"
+  },
+  "tc-custom-javascript": {
+    "path": "tc-custom-javascript/tags/1.2.3",
+    "rev": "2870386",
+    "sha256": "0lcprrnf25p6a12mf5hkfnl6r470n35pgfdl9nizjh4q43qzdcam",
+    "version": "1.2.3"
+  },
+  "webp-converter-for-media": {
+    "path": "webp-converter-for-media/tags/5.11.4",
+    "rev": "2995294",
+    "sha256": "0grlszp00rw63psv21n70alapkw1pgaq8cp9c0b1klk50jcnnx8q",
+    "version": "5.11.4"
+  },
+  "webp-express": {
+    "path": "webp-express/tags/0.25.8",
+    "rev": "2981697",
+    "sha256": "17v94im2cnvjiglfzbqq598blwn7m5j84sd8ysbq8lc60kwn0vi3",
+    "version": "0.25.8"
+  },
+  "wordpress-seo": {
+    "path": "wordpress-seo/tags/21.5",
+    "rev": "2986840",
+    "sha256": "1a1mnsh4imy7ab0b7hp0nis46ixwvj47wgibifa90qndbkv2mwsn",
+    "version": "21.5"
+  },
+  "worker": {
+    "path": "worker/tags/4.9.17",
+    "rev": "2894123",
+    "sha256": "067zx6b8fl87g901vglci870z38kg8igrdxlrcra4xwrll2c01si",
+    "version": "4.9.17"
+  },
+  "wp-change-email-sender": {
+    "path": "wp-change-email-sender/trunk",
+    "rev": "2812298",
+    "sha256": "1ibdj2yv572pk21pr313pdrqxi2f9vawwd0byb0s38224jjx4plh",
+    "version": "1.0"
+  },
+  "wp-fastest-cache": {
+    "path": "wp-fastest-cache/tags/1.2.2",
+    "rev": "2994820",
+    "sha256": "1mj18yrljjdrd07b0yjkd9pwdciyn4jyrs6hgx6jcys0mc5p009v",
+    "version": "1.2.2"
+  },
+  "wp-gdpr-compliance": {
+    "path": "wp-gdpr-compliance/tags/2.0.22",
+    "rev": "2865556",
+    "sha256": "0zgn3pg2zhqqv89rl6pqwd3p3hvspsnn47iab7xw0d79nby0nh7c",
+    "version": "2.0.22"
+  },
+  "wp-mail-smtp": {
+    "path": "wp-mail-smtp/tags/3.10.0",
+    "rev": "2992136",
+    "sha256": "0py4ns4vsy9rpqq5gjyfc2p1lvf2gy28klw9ixkm6gdiim8pvl61",
+    "version": "3.10.0"
+  },
+  "wp-statistics": {
+    "path": "wp-statistics/tags/14.2",
+    "rev": "2976338",
+    "sha256": "0vcw6qp5w2whbpwcd9m0dpxf4ah0i7snygszp211lqg4g53qbyyv",
+    "version": "14.2"
+  },
+  "wp-swiper": {
+    "path": "wp-swiper/trunk",
+    "rev": "2978937",
+    "sha256": "0pn3l5v43hc572bym15pcdirq9n64mdgshacnr92hryq4vagyvzb",
+    "version": "1.0.34"
+  },
+  "wp-user-avatars": {
+    "path": "wp-user-avatars/trunk",
+    "rev": "2540784",
+    "sha256": "1g21nl6xs9zyq0ainjwa06wl90975l8f9rj0fa20zkmw17w2mdgl",
+    "version": "1.4.1"
+  },
+  "wpforms-lite": {
+    "path": "wpforms-lite/tags/1.8.4.1",
+    "rev": "2982999",
+    "sha256": "08yl41kxxdq36wcrypjrrbmckkpx464sqcarbk7pkzz83933z2pv",
+    "version": "1.8.4.1"
+  }
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/themes.json b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/themes.json
new file mode 100644
index 000000000000..92d09ef4ca97
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/themes.json
@@ -0,0 +1,32 @@
+{
+  "twentynineteen": {
+    "path": "twentynineteen/2.7",
+    "rev": "207575",
+    "sha256": "19zbbpj1qxfz6599di2455qr97z5x4vrprf0bf20c8dq8n8lrh41",
+    "version": "2.7"
+  },
+  "twentytwenty": {
+    "path": "twentytwenty/2.4",
+    "rev": "207576",
+    "sha256": "0xp2jcgsn16gv9ad8dirm7j24mi7633yrl524wi858l3m8dh4q4a",
+    "version": "2.4"
+  },
+  "twentytwentyone": {
+    "path": "twentytwentyone/2.0",
+    "rev": "207577",
+    "sha256": "0ypdqxfd1va9m6f3zbc0281i69br5hpvvjdqb03kk2xnmam2hjaa",
+    "version": "2.0"
+  },
+  "twentytwentythree": {
+    "path": "twentytwentythree/1.3",
+    "rev": "207579",
+    "sha256": "0r2k73yskqaxhl641ri1shy74rck5xvmfi7b562kz3j44hx0dz4f",
+    "version": "1.3"
+  },
+  "twentytwentytwo": {
+    "path": "twentytwentytwo/1.6",
+    "rev": "207578",
+    "sha256": "0ga1682a5sh038xfc7whvdws5vfy1g3qvvy13rm5dln79x022riq",
+    "version": "1.6"
+  }
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/thirdparty.nix b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/thirdparty.nix
new file mode 100644
index 000000000000..a60c06854183
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/thirdparty.nix
@@ -0,0 +1,14 @@
+{fetchzip}: {
+  plugins.civicrm = fetchzip rec {
+    name = "civicrm";
+    version = "5.56.0";
+    url = "https://storage.googleapis.com/${name}/${name}-stable/${version}/${name}-${version}-wordpress.zip";
+    hash = "sha256-XsNFxVL0LF+OHlsqjjTV41x9ERLwMDq9BnKKP3Px2aI=";
+  };
+  themes.geist = fetchzip rec {
+    name = "geist";
+    version = "2.0.3";
+    url = "https://github.com/christophery/geist/archive/refs/tags/${version}.zip";
+    hash = "sha256-c85oRhqu5E5IJlpgqKJRQITur1W7x40obOvHZbPevzU=";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-languages.json b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-languages.json
new file mode 100644
index 000000000000..e1fa4e2b3aba
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-languages.json
@@ -0,0 +1,5 @@
+[
+  "de_DE"
+, "fr_FR"
+, "ro_RO"
+]
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json
new file mode 100644
index 000000000000..ebcf43c24b06
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-plugins.json
@@ -0,0 +1,37 @@
+[
+  "add-widget-after-content"
+, "akismet"
+, "antispam-bee"
+, "async-javascript"
+, "breeze"
+, "code-syntax-block"
+, "cookie-notice"
+, "co-authors-plus"
+, "disable-xml-rpc"
+, "embed-extended"
+, "gutenberg"
+, "hello-dolly"
+, "hkdev-maintenance-mode"
+, "jetpack"
+, "jetpack-lite"
+, "lightbox-photoswipe"
+, "login-lockdown"
+, "mailpoet"
+, "merge-minify-refresh"
+, "opengraph"
+, "simple-login-captcha"
+, "static-mail-sender-configurator"
+, "tc-custom-javascript"
+, "webp-converter-for-media"
+, "webp-express"
+, "wordpress-seo"
+, "worker"
+, "wp-change-email-sender"
+, "wp-fastest-cache"
+, "wp-gdpr-compliance"
+, "wp-mail-smtp"
+, "wp-statistics"
+, "wp-swiper"
+, "wp-user-avatars"
+, "wpforms-lite"
+]
diff --git a/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-themes.json b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-themes.json
new file mode 100644
index 000000000000..028ee47614a2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/web-apps/wordpress/packages/wordpress-themes.json
@@ -0,0 +1,7 @@
+[
+  "twentynineteen"
+, "twentytwenty"
+, "twentytwentytwo"
+, "twentytwentyone"
+, "twentytwentythree"
+]