From 4a24f168e3fb44073237d9aca95a97e77bdefa3c Mon Sep 17 00:00:00 2001 From: Quentin Aristote Date: Sun, 27 Nov 2022 17:41:34 +0100 Subject: services: web: rss: make configuration into a module --- modules/rss-bridge.nix | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 modules/rss-bridge.nix (limited to 'modules/rss-bridge.nix') diff --git a/modules/rss-bridge.nix b/modules/rss-bridge.nix new file mode 100644 index 0000000..c7aaf05 --- /dev/null +++ b/modules/rss-bridge.nix @@ -0,0 +1,71 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + cfg = config.services.rss-bridge; + rss-bridge = pkgs.rss-bridge.overrideAttrs (oldAttrs: + oldAttrs // { + installPhase = oldAttrs.installPhase + '' + pushd $out/bridges + ln -sf ${./ParisJazzClubBridge.php} ParisJazzClubBridge.php + ln -sf ${./MaisonDeLaRadioBridge.php} MaisonDeLaRadioBridge.php + ln -sf ${./FipAlbumsBridge.php} FipAlbumsBridge.php + ln -sf ${./WhatsOnMubiBridge.php} WhatsOnMubiBridge.php + popd + '' + lib.optionalString debug '' + touch $out/DEBUG + ''; + }); +in { + options.services.rss-bridge = { + package = mkOption { + type = types.package; + description = "Which derivation to use."; + default = pkgs.rss-bridge; + defaultText = literalExample "pkgs.rss-bridge"; + }; + debug = mkEnableOption "debug mode"; + extraBridges = mkOption { + type = types.listOf (types.submodule { + options = { + name = mkOption { + type = types.strMatching "[a-zA-Z0-9]*"; + description = '' + The name of the bridge. + It need not include 'Bridge' at the end, unlike required in RSS-Bridge. + ''; + example = "SomeAppWithANewsletter"; + }; + source = mkOption { + type = types.path; + description = '' + The path to a file whose contents is the PHP sourcecode of the bridge. + See also the RSS-Bridge documentation: https://rss-bridge.github.io/rss-bridge/Bridge_API/index.html. + ''; + }; + }; + }); + default = [ ]; + description = '' + A list of additional bridges that aren't already included in RSS-Bridge. + These bridges are automatically whitelisted''; + }; + }; + + config.services.rss-bridge.whitelist = + map (bridge: bridge.name) cfg.extraBridges; + config.services.nginx = mkIf (cfg.virtualHost != null) { + virtualHosts.${cfg.virtualHost}.root = mkIf (cfg.extraBridges != [ ]) + (mkForce (pkgs.runCommand "rss-bridge" { } ('' + mkdir -p $out/bridges + cp -r ${cfg.package}/* $out/ + pushd $out/bridges + '' + concatStringsSep "\n" + (map (bridge: ''ln -sf ${bridge.source} "${bridge.name}Bridge.php"'') + cfg.extraBridges) + '' + popd + '' + lib.optionalString cfg.debug '' + touch $out/DEBUG + ''))); + }; +} -- cgit v1.2.3