Files
nix-files/modules/data/feeds/default.nix

33 lines
1.2 KiB
Nix

{ lib, sane-lib, ... }:
let
# given a path to a .json file relative to sources, construct the best feed object we can.
# the .json file could be empty, in which case we make assumptions about the feed based
# on its fs path.
# Type: feedFromSourcePath :: String -> { name = String; value = feed; }
feedFromSourcePath = json-path:
assert lib.hasSuffix "/default.json" json-path;
let
canonical-name = lib.removeSuffix "/default.json" json-path;
default-url = "https://${canonical-name}";
feed-details = { url = default-url; } // (tryImportJson (./sources/${json-path}));
in { name = canonical-name; value = mkFeed feed-details; };
# TODO: for now, feeds are just ordinary Attrs.
# in the future, we'd like to set them up with an update script.
mkFeed = { url, ... }@details: details;
# return an AttrSet representing the json at the provided path,
# or {} if the path is empty.
tryImportJson = path:
let
as-str = builtins.readFile path;
in
if as-str == "" then
{}
else
builtins.fromJSON as-str;
sources = sane-lib.enumerateFilePaths ./sources;
in
lib.listToAttrs (builtins.map feedFromSourcePath sources)