aboutsummaryrefslogtreecommitdiff
path: root/modules/rss/utils.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/rss/utils.nix')
-rw-r--r--modules/rss/utils.nix39
1 files changed, 39 insertions, 0 deletions
diff --git a/modules/rss/utils.nix b/modules/rss/utils.nix
new file mode 100644
index 0000000..63d09df
--- /dev/null
+++ b/modules/rss/utils.nix
@@ -0,0 +1,39 @@
+{ pkgs, lib, ... }:
+with lib;
+let
+ outlineItem = feed:
+ ''<outline title="${feed.title}" text="${feed.title}" xmlUrl="${feed.url}" />'';
+
+ outlineGroup = group: items:
+ ''<outline title="${group}" text="${group}">
+ ${concatStringsSep "\n" (map outlineItem items)}
+ </outline>'';
+
+ toOpml = cfg: ''
+<?xml version="1.0" encoding="UTF-8"?>
+<opml version="1.1">
+ <head>
+ <title>
+ ${cfg.title}
+ </title>
+ </head>
+ <body>
+ ${concatStringsSep "\n" (mapAttrsToList outlineGroup cfg.groups)}
+ </body>
+</opml>'';
+
+ createYarrSetupScript = { username, api_key, api_url, feeds, settings }:
+ let
+ api = method: path: args:
+ ''curl -i -X${method} '${api_url}${path}' --cookie 'auth=${username}:${api_key}' ${args}'';
+ opmlFile = pkgs.writeText "rss.opml" (toOpml feeds);
+ in
+ pkgs.writeShellScriptBin "yarr-setup-script" ''
+ #!/usr/bin/env sh
+
+ ${api "POST" "/opml/import" "-F 'opml=@${opmlFile}' -F 'replace=true'"} && echo "Imported feeds";
+ ${api "PUT" "/api/settings" "--data '${builtins.toJSON settings}'"} && echo "Applied settings";
+ '';
+in {
+ inherit toOpml createYarrSetupScript;
+}