diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/web-apps/wordpress')
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" +] |