diff options
Diffstat (limited to 'home-manager/home-manager/home-manager.nix')
-rw-r--r-- | home-manager/home-manager/home-manager.nix | 88 |
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; + } |