home-manager/modules/misc/news.nix
Robert Helgesson ab0338f6ae
news: add module
This new module adds a "news" feature to Home Manager. See #52.

Many thanks to @nonsequitur and @uvNikita for suggestions and
improvements.
2017-09-05 11:36:33 +02:00

147 lines
3.7 KiB
Nix

{ 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.
'';
}
];
};
}