aboutsummaryrefslogtreecommitdiff
path: root/home-manager/home-manager/home-manager.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/home-manager/home-manager.nix')
-rw-r--r--home-manager/home-manager/home-manager.nix88
1 files changed, 88 insertions, 0 deletions
diff --git a/home-manager/home-manager/home-manager.nix b/home-manager/home-manager/home-manager.nix
new file mode 100644
index 00000000000..7a6748942c8
--- /dev/null
+++ b/home-manager/home-manager/home-manager.nix
@@ -0,0 +1,88 @@
+{ pkgs ? import <nixpkgs> {}
+, confPath
+, confAttr
+, check ? true
+, newsReadIdsFile ? null
+}:
+
+with pkgs.lib;
+
+let
+
+ env = import ../modules {
+ configuration =
+ if confAttr == ""
+ 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;
+ }