2eafb8192e
GitOrigin-RevId: 176e455371a8371586e8a3ff0d56ee9f3ca2324e
74 lines
2.1 KiB
Nix
74 lines
2.1 KiB
Nix
{ pkgs ? import <nixpkgs> { }, confPath, confAttr ? null, check ? true
|
|
, newsReadIdsFile ? null }:
|
|
|
|
let
|
|
inherit (pkgs.lib)
|
|
concatMapStringsSep fileContents filter length optionalString removeSuffix
|
|
replaceStrings splitString;
|
|
|
|
env = import ../modules {
|
|
configuration = if confAttr == "" || confAttr == null then
|
|
confPath
|
|
else
|
|
(import confPath).${confAttr};
|
|
pkgs = pkgs;
|
|
check = check;
|
|
};
|
|
|
|
newsReadIds = if newsReadIdsFile == null then
|
|
{ }
|
|
else
|
|
let ids = splitString "\n" (fileContents newsReadIdsFile);
|
|
in builtins.listToAttrs (map (id: {
|
|
name = id;
|
|
value = null;
|
|
}) ids);
|
|
|
|
newsIsRead = entry: builtins.hasAttr entry.id newsReadIds;
|
|
|
|
newsFiltered = let pred = entry: entry.condition && !newsIsRead entry;
|
|
in filter pred env.newsEntries;
|
|
|
|
newsNumUnread = length newsFiltered;
|
|
|
|
newsFileUnread = pkgs.writeText "news-unread.txt" (concatMapStringsSep "\n\n"
|
|
(entry:
|
|
let
|
|
time =
|
|
replaceStrings [ "T" ] [ " " ] (removeSuffix "+00:00" entry.time);
|
|
in ''
|
|
* ${time}
|
|
|
|
${replaceStrings [ "\n" ] [ "\n " ] entry.message}
|
|
'') newsFiltered);
|
|
|
|
newsFileAll = pkgs.writeText "news-all.txt" (concatMapStringsSep "\n\n"
|
|
(entry:
|
|
let
|
|
flag = if newsIsRead entry then "read" else "unread";
|
|
time =
|
|
replaceStrings [ "T" ] [ " " ] (removeSuffix "+00:00" entry.time);
|
|
in ''
|
|
* ${time} [${flag}]
|
|
|
|
${replaceStrings [ "\n" ] [ "\n " ] entry.message}
|
|
'') env.newsEntries);
|
|
|
|
# File where each line corresponds to an unread news entry
|
|
# identifier. If non-empty then the file ends in "\n".
|
|
newsUnreadIdsFile = pkgs.writeText "news-unread-ids"
|
|
(let text = concatMapStringsSep "\n" (entry: entry.id) newsFiltered;
|
|
in text + optionalString (text != "") "\n");
|
|
|
|
newsInfo = pkgs.writeText "news-info.sh" ''
|
|
local newsNumUnread=${toString newsNumUnread}
|
|
local newsDisplay="${env.newsDisplay}"
|
|
local newsFileAll="${newsFileAll}"
|
|
local newsFileUnread="${newsFileUnread}"
|
|
local newsUnreadIdsFile="${newsUnreadIdsFile}"
|
|
'';
|
|
|
|
in {
|
|
inherit (env) activationPackage;
|
|
inherit newsInfo;
|
|
}
|