diff --git a/modules/default.nix b/modules/default.nix index a6dc6848f..7add9dc3b 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -11,6 +11,7 @@ let ./home-environment.nix ./manual.nix ./misc/gtk.nix + ./misc/news.nix ./misc/pam.nix ./programs/bash.nix ./programs/beets.nix diff --git a/modules/misc/news.nix b/modules/misc/news.nix new file mode 100644 index 000000000..3bb9ce80b --- /dev/null +++ b/modules/misc/news.nix @@ -0,0 +1,146 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.news; + + entryModule = types.submodule ({ config, ... }: { + options = { + id = mkOption { + internal = true; + type = types.str; + description = '' + A unique entry identifier. By default it is a base16 + formatted hash of the entry message. + ''; + }; + + time = mkOption { + internal = true; + type = types.str; + example = "2017-07-10T21:55:04+00:00"; + description = '' + News entry time stamp in ISO-8601 format. Must be in UTC + (ending in '+00:00'). + ''; + }; + + condition = mkOption { + internal = true; + default = true; + description = "Whether the news entry should be active."; + }; + + message = mkOption { + internal = true; + type = types.str; + description = "The news entry content."; + }; + }; + + config = { + id = mkDefault (builtins.hashString "sha256" config.message); + }; + }); + +in + +{ + options = { + news = { + display = mkOption { + type = types.enum [ "silent" "notify" "show" ]; + default = "notify"; + description = '' + How unread and relevant news should be presented when + running <command>home-manager build</command> and + <command>home-manager switch</command>. + + </para><para> + + The options are + + <variablelist> + <varlistentry> + <term><literal>silent</literal></term> + <listitem> + <para> + Do not print anything during build or switch. The + <command>home-manager news</command> command still + works for viewing the entries. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>notify</literal></term> + <listitem> + <para> + The number of unread and relevant news entries will be + printed to standard output. The <command>home-manager + news</command> command can later be used to view the + entries. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>show</literal></term> + <listitem> + <para> + A pager showing unread news entries is opened. + </para> + </listitem> + </varlistentry> + </variablelist> + ''; + }; + + entries = mkOption { + internal = true; + type = types.listOf entryModule; + default = []; + description = "News entries."; + }; + }; + }; + + config = { + news.entries = [ + { + time = "2017-09-01T10:56:28+00:00"; + message = '' + Hello! This is a news entry and it represents an + experimental new feature of Home Manager. The idea is to + inform you when something of importance happens in Home + Manager or its modules. + + We will try to not disturb you about the same news more than + once so the next time you run + + home-manager switch + + or + + home-manager build + + it should not notify you about this text again. + + News items may be conditional and will then only show if the + condition holds, for example if they are relevant to your + configuration. + + If you want to see all relevant news then please use the + + home-manager news + + command. + + Since this is an experimental feature any positive or + negative feedback would be greatly appreciated. For example, + by commenting in https://git.io/v5BJL. + ''; + } + ]; + }; +}