From 34c7b88e16d1768b1b9a0cfa6dd21ea5d9b1b308 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 8 May 2020 23:59:21 +0200 Subject: [PATCH] Use new withPlugin system - dokuwiki - mantisbt - mediagoblin - roundcube - ttrss - yourls --- .../private/websites/tools/git/mantisbt.nix | 2 +- .../private/websites/tools/mail/default.nix | 2 +- .../websites/tools/mail/roundcubemail.nix | 5 +- .../websites/tools/mgoblin/default.nix | 2 +- .../private/websites/tools/tools/dokuwiki.nix | 2 +- .../private/websites/tools/tools/ttrss.nix | 6 +- .../private/websites/tools/tools/yourls.nix | 3 +- modules/webapps/mediagoblin.nix | 29 +++----- pkgs/webapps/default.nix | 67 +------------------ pkgs/webapps/dokuwiki/default.nix | 42 ++++++------ pkgs/webapps/mantisbt_2/default.nix | 42 ++++++------ pkgs/webapps/mediagoblin/default.nix | 35 +++++----- pkgs/webapps/roundcubemail/default.nix | 55 +++++++++------ pkgs/webapps/ttrss/default.nix | 45 +++++++------ pkgs/webapps/yourls/default.nix | 34 +++++----- 15 files changed, 160 insertions(+), 211 deletions(-) diff --git a/modules/private/websites/tools/git/mantisbt.nix b/modules/private/websites/tools/git/mantisbt.nix index 50851aa..a74d76e 100644 --- a/modules/private/websites/tools/git/mantisbt.nix +++ b/modules/private/websites/tools/git/mantisbt.nix @@ -46,7 +46,7 @@ rec { $g_ldap_organization = '${env.ldap.filter}'; ''; }]; - webRoot = (mantisbt_2.override { mantis_config = "/var/secrets/webapps/tools-mantisbt"; }).withPlugins (builtins.attrValues mantisbt_2-plugins); + webRoot = (mantisbt_2.override { mantis_config = "/var/secrets/webapps/tools-mantisbt"; }).withPlugins (p: [p.slack p.source-integration]); apache = rec { user = "wwwrun"; group = "wwwrun"; diff --git a/modules/private/websites/tools/mail/default.nix b/modules/private/websites/tools/mail/default.nix index 7d7904f..7c60ae4 100644 --- a/modules/private/websites/tools/mail/default.nix +++ b/modules/private/websites/tools/mail/default.nix @@ -1,7 +1,7 @@ { lib, pkgs, config, ... }: let roundcubemail = pkgs.callPackage ./roundcubemail.nix { - inherit (pkgs.webapps) roundcubemail roundcubemail-plugins roundcubemail-skins; + inherit (pkgs.webapps) roundcubemail; env = config.myEnv.tools.roundcubemail; }; rainloop = pkgs.callPackage ./rainloop.nix { diff --git a/modules/private/websites/tools/mail/roundcubemail.nix b/modules/private/websites/tools/mail/roundcubemail.nix index 6875bae..bb7dee9 100644 --- a/modules/private/websites/tools/mail/roundcubemail.nix +++ b/modules/private/websites/tools/mail/roundcubemail.nix @@ -1,4 +1,4 @@ -{ env, roundcubemail, roundcubemail-plugins, roundcubemail-skins, apacheHttpd }: +{ env, roundcubemail, apacheHttpd }: rec { varDir = "/var/lib/roundcubemail"; activationScript = { @@ -75,8 +75,7 @@ rec { $config['mime_types'] = '${apacheHttpd}/conf/mime.types'; ''; }]; - webRoot = (roundcubemail.override { roundcube_config = "/var/secrets/webapps/tools-roundcube"; }).withPlugins - (builtins.attrValues roundcubemail-plugins) (builtins.attrValues roundcubemail-skins); + webRoot = (roundcubemail.override { roundcube_config = "/var/secrets/webapps/tools-roundcube"; }).withPlugins (p: [ p.automatic_addressbook p.carddav p.contextmenu p.contextmenu_folder p.html5_notifier p.ident_switch p.message_highlight p.thunderbird_labels ]); apache = rec { user = "wwwrun"; group = "wwwrun"; diff --git a/modules/private/websites/tools/mgoblin/default.nix b/modules/private/websites/tools/mgoblin/default.nix index 5224a0d..719d3d3 100644 --- a/modules/private/websites/tools/mgoblin/default.nix +++ b/modules/private/websites/tools/mgoblin/default.nix @@ -83,7 +83,7 @@ in { services.mediagoblin = { enable = true; - plugins = builtins.attrValues pkgs.webapps.mediagoblin-plugins; + package = pkgs.webapps.mediagoblin.withPlugins (p: [p.basicsearch]); configFile = "/var/secrets/webapps/tools-mediagoblin"; }; services.filesWatcher.mediagoblin-web = { diff --git a/modules/private/websites/tools/tools/dokuwiki.nix b/modules/private/websites/tools/tools/dokuwiki.nix index 26c04b7..5290a96 100644 --- a/modules/private/websites/tools/tools/dokuwiki.nix +++ b/modules/private/websites/tools/tools/dokuwiki.nix @@ -19,7 +19,7 @@ rec { install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions ''; }; - webRoot = dokuwiki.withPlugins (builtins.attrValues dokuwiki-plugins); + webRoot = dokuwiki.withPlugins (p: [ p.farmer p.todo ]); apache = rec { user = "wwwrun"; group = "wwwrun"; diff --git a/modules/private/websites/tools/tools/ttrss.nix b/modules/private/websites/tools/tools/ttrss.nix index 48876d3..ce1ab8e 100644 --- a/modules/private/websites/tools/tools/ttrss.nix +++ b/modules/private/websites/tools/tools/ttrss.nix @@ -88,7 +88,11 @@ rec { define('LDAP_AUTH_DEBUG', FALSE); ''; }]; - webRoot = (ttrss.override { ttrss_config = "/var/secrets/webapps/tools-ttrss"; }).withPlugins (builtins.attrValues ttrss-plugins); + webRoot = (ttrss.override { ttrss_config = "/var/secrets/webapps/tools-ttrss"; }).withPlugins (p: [ + p.auth_ldap p.ff_instagram p.tumblr_gdpr_ua + (p.af_feedmod.override { patched = true; }) + (p.feediron.override { patched = true; }) + ]); apache = rec { user = "wwwrun"; group = "wwwrun"; diff --git a/modules/private/websites/tools/tools/yourls.nix b/modules/private/websites/tools/tools/yourls.nix index cb03b6c..77ac0a3 100644 --- a/modules/private/websites/tools/tools/yourls.nix +++ b/modules/private/websites/tools/tools/yourls.nix @@ -40,8 +40,7 @@ rec { define( 'LDAPAUTH_USERCACHE_TYPE', 0); ''; }]; - webRoot = (yourls.override { yourls_config = "/var/secrets/webapps/tools-yourls"; }).withPlugins - (builtins.attrValues yourls-plugins); + webRoot = (yourls.override { yourls_config = "/var/secrets/webapps/tools-yourls"; }).withPlugins (p: [p.ldap]); apache = rec { user = "wwwrun"; group = "wwwrun"; diff --git a/modules/webapps/mediagoblin.nix b/modules/webapps/mediagoblin.nix index dbc4c2b..19bbc2e 100644 --- a/modules/webapps/mediagoblin.nix +++ b/modules/webapps/mediagoblin.nix @@ -15,8 +15,8 @@ let [app:mediagoblin] use = egg:mediagoblin#app - config = ${cfg.configFile} ${cfg.workdir}/mediagoblin.ini - /mgoblin_static = ${cfg.workdir}/mediagoblin/static + config = ${cfg.configFile} ${cfg.package}/mediagoblin.ini + /mgoblin_static = ${cfg.package}/mediagoblin/static [loggers] keys = root @@ -87,26 +87,13 @@ in package = lib.mkOption { type = lib.types.package; default = pkgs.webapps.mediagoblin; + example = lib.literalExample '' + pkgs.webapps.mediagoblin.withPlugins (p: [p.basicsearch]) + ''; description = '' Mediagoblin package to use. ''; }; - plugins = lib.mkOption { - type = lib.types.listOf lib.types.package; - default = []; - description = '' - Mediagoblin plugins to use. - ''; - }; - # Output variables - workdir = lib.mkOption { - type = lib.types.package; - default = cfg.package.withPlugins cfg.plugins; - description = '' - Adjusted Mediagoblin package with plugins - ''; - readOnly = true; - }; systemdStateDirectory = lib.mkOption { type = lib.types.str; # Use ReadWritePaths= instead if varDir is outside of /var/lib @@ -187,7 +174,7 @@ in preStart = '' if [ -d ${cfg.dataDir}/plugin_static/ ]; then rm ${cfg.dataDir}/plugin_static/coreplugin_basic_auth - ln -sf ${cfg.workdir}/mediagoblin/plugins/basic_auth/static ${cfg.dataDir}/plugin_static/coreplugin_basic_auth + ln -sf ${cfg.package}/mediagoblin/plugins/basic_auth/static ${cfg.dataDir}/plugin_static/coreplugin_basic_auth fi ./bin/gmg -cf ${cfg.configFile} dbupdate ''; @@ -198,7 +185,7 @@ in Restart = "always"; TimeoutSec = 15; Type = "simple"; - WorkingDirectory = cfg.workdir; + WorkingDirectory = cfg.package; RuntimeDirectory = cfg.systemdRuntimeDirectory; StateDirectory= cfg.systemdStateDirectory; PIDFile = cfg.pids.paster; @@ -227,7 +214,7 @@ in Restart = "always"; TimeoutSec = 60; Type = "simple"; - WorkingDirectory = cfg.workdir; + WorkingDirectory = cfg.package; RuntimeDirectory = cfg.systemdRuntimeDirectory; StateDirectory= cfg.systemdStateDirectory; PIDFile = cfg.pids.celery; diff --git a/pkgs/webapps/default.nix b/pkgs/webapps/default.nix index e3ec07f..33fd730 100644 --- a/pkgs/webapps/default.nix +++ b/pkgs/webapps/default.nix @@ -1,92 +1,27 @@ -{ callPackage, mylibs, composerEnv, lib }: +{ callPackage, mylibs, composerEnv }: rec { adminer = callPackage ./adminer {}; apache-theme = callPackage ./apache-theme {}; awl = callPackage ./awl {}; davical = callPackage ./davical {}; diaspora = callPackage ./diaspora { inherit mylibs; }; - dokuwiki = callPackage ./dokuwiki { inherit mylibs; }; - dokuwiki-with-plugins = dokuwiki.withPlugins (builtins.attrValues dokuwiki-plugins); - dokuwiki-plugins = let - names = [ "farmer" "todo" ]; - in - lib.attrsets.genAttrs names - (name: callPackage (./dokuwiki/plugins + "/${name}.nix") {}); - etherpad-lite = callPackage ./etherpad-lite {}; - grocy = callPackage ./grocy { inherit mylibs composerEnv; }; - infcloud = callPackage ./infcloud {}; - mantisbt_2 = callPackage ./mantisbt_2 {}; - mantisbt_2-with-plugins = mantisbt_2.withPlugins (builtins.attrValues mantisbt_2-plugins); - mantisbt_2-plugins = let - names = [ "slack" "source-integration" ]; - in - lib.attrsets.genAttrs names - (name: callPackage (./mantisbt_2/plugins + "/${name}") {}); - mastodon = callPackage ./mastodon { inherit mylibs; }; - mediagoblin = callPackage ./mediagoblin { inherit mylibs; }; - mediagoblin-with-plugins = mediagoblin.withPlugins (builtins.attrValues mediagoblin-plugins); - mediagoblin-plugins = let - names = [ "basicsearch" ]; - in - lib.attrsets.genAttrs names - (name: callPackage (./mediagoblin/plugins + "/${name}") {}); - nextcloud = callPackage ./nextcloud {}; - peertube = callPackage ./peertube { inherit mylibs; }; phpbb = callPackage ./phpbb {}; - phpldapadmin = callPackage ./phpldapadmin {}; rompr = callPackage ./rompr { inherit mylibs; }; - roundcubemail = callPackage ./roundcubemail {}; - roundcubemail-with-plugins-skins = roundcubemail.withPlugins (builtins.attrValues roundcubemail-plugins) (builtins.attrValues roundcubemail-skins); - roundcubemail-skins = let - names = []; - in - lib.attrsets.genAttrs names - (name: callPackage (./roundcubemail/skins + "/${name}") {}); - roundcubemail-plugins = let - names = [ - "automatic_addressbook" "carddav" "contextmenu" - "contextmenu_folder" "html5_notifier" "ident_switch" - "message_highlight" "thunderbird_labels" - ]; - in - lib.attrsets.genAttrs names - (name: callPackage (./roundcubemail/plugins + "/${name}") { buildPlugin = roundcubemail.buildPlugin; }); - spip = callPackage ./spip {}; - surfer = callPackage ./surfer { inherit mylibs; }; taskwarrior-web = callPackage ./taskwarrior-web { inherit mylibs; }; - ttrss = callPackage ./ttrss { inherit mylibs; }; - ttrss-with-plugins = ttrss.withPlugins (builtins.attrValues ttrss-plugins); - ttrss-plugins = let - names = [ "auth_ldap" "af_feedmod" "feediron" "ff_instagram" "tumblr_gdpr_ua" ]; - patched = [ "af_feedmod" "feediron" ]; - in - lib.attrsets.genAttrs names - (name: callPackage (./ttrss/plugins + "/${name}") ( - { inherit mylibs; } // - (if builtins.elem name patched then { patched = true; } else {}) - ) - ); - wallabag = callPackage ./wallabag { inherit composerEnv; }; yourls = callPackage ./yourls { inherit mylibs; }; - yourls-with-plugins = yourls.withPlugins (builtins.attrValues yourls-plugins); - yourls-plugins = let - names = [ "ldap" ]; - in - lib.attrsets.genAttrs names - (name: callPackage (./yourls/plugins + "/${name}") { inherit mylibs; }); } diff --git a/pkgs/webapps/dokuwiki/default.nix b/pkgs/webapps/dokuwiki/default.nix index 9df88c6..874f0d8 100644 --- a/pkgs/webapps/dokuwiki/default.nix +++ b/pkgs/webapps/dokuwiki/default.nix @@ -1,4 +1,4 @@ -{ varDir ? "/var/lib/dokuwiki", preload ? "", lib, stdenv, mylibs, writeText }: +{ varDir ? "/var/lib/dokuwiki", preload ? "", lib, callPackage, stdenv, mylibs, writeText }: let preloadFile = plugins: let preloads = [preload] ++ builtins.concatMap (p: lib.optional (lib.hasAttr "preload" p) (p.preload p)) plugins; @@ -6,21 +6,26 @@ let 0 then "-with-skins" else ""}${if builtins.length plugins > 0 then "-with-plugins" else ""}"; - installPhase = old.installPhase + - builtins.concatStringsSep "\n" ( - map (value: "ln -s ${value} $out/plugins/${value.pluginName}") plugins - ) + - builtins.concatStringsSep "\n" ( - map (value: "ln -s ${value} $out/skins/${value.skinName}") skins - ); - passthru = old.passthru // { - inherit plugins skins; - withPlugins = morePlugins: moreSkins: old.withPlugins (morePlugins ++ plugins) (morePlugins ++ skins); - }; - }); + skinNames = []; + allSkins = lib.attrsets.genAttrs skinNames + (name: callPackage (./skins + "/${name}") {}); + pluginNames = [ + "automatic_addressbook" "carddav" "contextmenu" + "contextmenu_folder" "html5_notifier" "ident_switch" + "message_highlight" "thunderbird_labels" + ]; + allPlugins = lib.attrsets.genAttrs pluginNames + (name: callPackage (./plugins + "/${name}") { inherit buildPlugin; }); + toPassthru = pkg: plugins: skins: { + inherit plugins skins allSkins allPlugins; + withSkins = withSkins pkg; + withPlugins = withPlugins pkg; + }; + withPlugins = pkg: toPlugins: + let + plugins = toPlugins allPlugins; + toInstallPlugin = n: "ln -s ${n} $out/plugins/${n.pluginName}"; + newRoundcube = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); + passthru = toPassthru newRoundcube (pkg.plugins ++ plugins) pkg.skins; + }); + in newRoundcube; + withSkins = pkg: toSkins: + let + skins = toSkins allSkins; + toInstallSkin = n: "ln -s ${n} $out/skins/${n.skinName}"; + newRoundcube = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallSkin skins); + passthru = toPassthru newRoundcube pkg.plugins (pkg.skins ++ skins); + }); + in newRoundcube; shrinker = fetchurl { url = "http://dl.google.com/closure-compiler/compiler-latest.zip"; sha256 = "0naf3kflhlkm17ls1x7mgddd3b01f8yzbbbdjqwy5m12jmkzl2d5"; @@ -61,10 +80,6 @@ let cp -a . $out ln -s ${roundcube_config} $out/config/config.inc.php ''; - passthru = { - plugins = []; - skins = []; - inherit withPlugins buildPlugin; - }; + passthru = toPassthru package [] []; }; in package diff --git a/pkgs/webapps/ttrss/default.nix b/pkgs/webapps/ttrss/default.nix index 0ce2f94..38200a1 100644 --- a/pkgs/webapps/ttrss/default.nix +++ b/pkgs/webapps/ttrss/default.nix @@ -1,30 +1,33 @@ { ttrss_config ? "/etc/ttrss/config.php" , varDir ? "/var/lib/ttrss" -, stdenv, mylibs }: +, stdenv, mylibs, lib, callPackage }: let - withPlugins = plugins: package.overrideAttrs(old: rec { - name = "${old.name}-with-plugins"; - installPhase = old.installPhase + - builtins.concatStringsSep "\n" ( - map (value: "ln -s ${value} $out/plugins/${value.pluginName}") plugins - ); - passthru = old.passthru // { - inherit plugins; - withPlugins = morePlugins: old.withPlugins (morePlugins ++ plugins); - }; - }); + pluginNames = [ "auth_ldap" "af_feedmod" "feediron" "ff_instagram" "tumblr_gdpr_ua" ]; + allPlugins = lib.attrsets.genAttrs pluginNames + (name: callPackage (./plugins + "/${name}") {}); + toPassthru = pkg: plugins: { + inherit plugins allPlugins; + withPlugins = withPlugins pkg; + }; + withPlugins = pkg: toPlugins: + let + plugins = toPlugins allPlugins; + toInstallPlugin = n: + "ln -sf ${n} $out/plugins/${n.pluginName}"; + newTtrss = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); + passthru = toPassthru newTtrss (pkg.plugins ++ plugins); + }); + in newTtrss; package = stdenv.mkDerivation (mylibs.fetchedGit ./tt-rss.json // rec { buildPhase = '' rm -rf lock feed-icons cache ln -sf ${varDir}/{lock,feed-icons,cache} . - ''; - installPhase = '' - cp -a . $out - ln -s ${ttrss_config} $out/config.php - ''; - passthru = { - plugins = []; - inherit withPlugins; - }; + ''; + installPhase = '' + cp -a . $out + ln -s ${ttrss_config} $out/config.php + ''; + passthru = toPassthru package []; }); in package diff --git a/pkgs/webapps/yourls/default.nix b/pkgs/webapps/yourls/default.nix index 4bcfa4c..d940c54 100644 --- a/pkgs/webapps/yourls/default.nix +++ b/pkgs/webapps/yourls/default.nix @@ -1,16 +1,21 @@ -{ yourls_config ? "/etc/yourls/config.php", mylibs, stdenv }: +{ yourls_config ? "/etc/yourls/config.php", mylibs, callPackage, lib, stdenv }: let - withPlugins = plugins: package.overrideAttrs(old: { - name = "${old.name}-with-plugins"; - installPhase = old.installPhase + - builtins.concatStringsSep "\n" ( - map (value: "ln -s ${value} $out/user/plugins/${value.pluginName}") plugins - ); - passthru = old.passthru // { - inherit plugins; - withPlugins = morePlugins: old.withPlugins (morePlugins ++ plugins); - }; - }); + pluginNames = [ "ldap" ]; + allPlugins = lib.attrsets.genAttrs pluginNames + (name: callPackage (./plugins + "/${name}") { inherit mylibs; }); + toPassthru = pkg: plugins: { + inherit plugins allPlugins; + withPlugins = withPlugins pkg; + }; + withPlugins = pkg: toPlugins: + let + plugins = toPlugins allPlugins; + toInstallPlugin = n: "ln -s ${n} $out/user/plugins/${n.pluginName}"; + newYourls = pkg.overrideAttrs(old: { + installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); + passthru = toPassthru newYourls (pkg.plugins ++ plugins); + }); + in newYourls; package = stdenv.mkDerivation (mylibs.fetchedGithub ./yourls.json // rec { installPhase = '' mkdir -p $out @@ -18,9 +23,6 @@ let cp sample-robots.txt $out/robots.txt ln -sf ${yourls_config} $out/includes/config.php ''; - passthru = { - plugins = []; - inherit withPlugins; - }; + passthru = toPassthru package []; }); in package -- 2.41.0