summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/services/web/rss/default.nix53
-rw-r--r--modules/default.nix1
-rw-r--r--modules/rss-bridge.nix71
-rw-r--r--tests/configuration.nix2
4 files changed, 111 insertions, 16 deletions
diff --git a/config/services/web/rss/default.nix b/config/services/web/rss/default.nix
index 18a6763..acc9331 100644
--- a/config/services/web/rss/default.nix
+++ b/config/services/web/rss/default.nix
@@ -2,31 +2,52 @@
let
cfg = config.services.rss-bridge;
- debug = true;
- 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
- '';
- });
+ # debug = true;
+ # 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 {
services.rss-bridge = {
enable = true;
- whitelist = [ "ParisJazzClub" "MaisonDeLaRadio" "FipAlbumsBridge" "WhatsOnMubi" ];
+ # whitelist = [ "ParisJazzClub" "MaisonDeLaRadio" "FipAlbumsBridge" "WhatsOnMubi" ];
+ extraBridges = [
+ # Music
+ {
+ name = "FipAlbums";
+ source = ./FipAlbumsBridge.php;
+ }
+ ## Concerts
+ {
+ name = "ParisJazzClub";
+ source = ./ParisJazzClubBridge.php;
+ }
+ {
+ name = "MaisonDeLaRadio";
+ source = ./MaisonDeLaRadioBridge.php;
+ }
+ # Cinema
+ {
+ name = "WhatsOnMubi";
+ source = ./WhatsOnMubiBridge.php;
+ }
+ ];
virtualHost = "rss";
};
services.nginx = lib.mkIf (cfg.virtualHost != null) {
virtualHosts.${cfg.virtualHost} = {
serverName = "rss.${config.networking.domain}";
- root = lib.mkForce "${rss-bridge}";
+ # root = lib.mkForce "${rss-bridge}";
forceSSL = true;
enableACME = true;
};
diff --git a/modules/default.nix b/modules/default.nix
index d09a8c0..95f75b4 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -3,5 +3,6 @@
{
imports = [
./filtron.nix
+ ./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
+ '')));
+ };
+}
diff --git a/tests/configuration.nix b/tests/configuration.nix
index 37b043c..a1ccf52 100644
--- a/tests/configuration.nix
+++ b/tests/configuration.nix
@@ -29,6 +29,8 @@ in {
services.filtron.rules = lib.mkForce [ ];
+ services.rss-bridge.debug = true;
+
services.nginx.virtualHosts = {
quentin = nginxMakeLocal 8080;
searx = nginxMakeLocal 8081;