summaryrefslogtreecommitdiff
path: root/modules/rss-bridge.nix
diff options
context:
space:
mode:
authorQuentin Aristote <quentin@aristote.fr>2022-11-27 17:41:34 +0100
committerQuentin Aristote <quentin@aristote.fr>2022-11-27 17:41:34 +0100
commit4a24f168e3fb44073237d9aca95a97e77bdefa3c (patch)
treed6ab0630171f23a1ee380087befde09ad22bfccc /modules/rss-bridge.nix
parentefa28a3baa12cac85f4cfc8665f1cf8762b9d7ee (diff)
services: web: rss: make configuration into a module
Diffstat (limited to 'modules/rss-bridge.nix')
-rw-r--r--modules/rss-bridge.nix71
1 files changed, 71 insertions, 0 deletions
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
+ '')));
+ };
+}