pubs: add module

Note, the pubs configuration file uses ConfigObj syntax, which is
similar to the INI files syntax but with extra functionalities like
nested sections. This prevents it from using Nix's INI format
generator. Here is an example of pubs configuration that cannot be
generated using Nix's INI format generator:

    [plugins]

    [[git]]
    manual=False

For this reason, we opted for a stringly-typed configuration since the
use of a structured `settings` option would require a custom parser.
This commit is contained in:
Loïc Reynier 2022-02-02 09:55:08 +01:00 committed by Robert Helgesson
parent abd221c4b3
commit afe96e7433
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
9 changed files with 134 additions and 0 deletions

3
.github/CODEOWNERS vendored
View file

@ -201,6 +201,9 @@
/modules/programs/powerline-go.nix @DamienCassou
/modules/programs/pubs.nix @loicreynier
/tests/modules/programs/pubs @loicreynier
/modules/programs/rbw.nix @ambroisie
/tests/modules/programs/rbw @ambroisie

View file

@ -83,6 +83,12 @@
github = "kubukoz";
githubId = 894884;
};
loicreynier = {
name = "Loïc Reynier";
email = "loic@loireynier.fr";
github = "loicreynier";
githubId = 88983487;
};
matrss = {
name = "Matthias Riße";
email = "matrss@users.noreply.github.com";

View file

@ -2449,6 +2449,13 @@ in
A new module is available: 'programs.just'.
'';
}
{
time = "2022-03-06T09:40:17+00:00";
message = ''
A new module is available: 'programs.pubs'.
'';
}
];
};
}

View file

@ -130,6 +130,7 @@ let
./programs/pidgin.nix
./programs/piston-cli.nix
./programs/powerline-go.nix
./programs/pubs.nix
./programs/qutebrowser.nix
./programs/rbw.nix
./programs/readline.nix

60
modules/programs/pubs.nix Normal file
View file

@ -0,0 +1,60 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.pubs;
in {
meta.maintainers = [ hm.maintainers.loicreynier ];
options.programs.pubs = {
enable = mkEnableOption "pubs";
package = mkOption {
type = types.package;
default = pkgs.pubs;
defaultText = literalExpression "pkgs.pubs";
description = "The package to use for the pubs script.";
};
extraConfig = mkOption {
type = types.lines;
default = "";
example = literalExpression ''
'''
[main]
pubsdir = ''${config.home.homeDirectory}/.pubs
docsdir = ''${config.home.homeDirectory}/.pubs/doc
doc_add = link
open_cmd = xdg-open
[plugins]
active = git,alias
[[alias]]
[[[la]]]
command = list -a
description = lists papers in lexicographic order
[[git]]
quiet = True
manual = False
force_color = False
''''';
description = ''
Configuration using syntax written to
<filename>$HOME/.pubsrc</filename>.
'';
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
home.file.".pubsrc" =
mkIf (cfg.extraConfig != "") { text = cfg.extraConfig; };
};
}

View file

@ -86,6 +86,7 @@ import nmt {
./modules/programs/pandoc
./modules/programs/pet
./modules/programs/powerline-go
./modules/programs/pubs
./modules/programs/qutebrowser
./modules/programs/readline
./modules/programs/sagemath

View file

@ -0,0 +1 @@
{ pubs-example-settings = ./pubs-example-settings.nix; }

View file

@ -0,0 +1,19 @@
[main]
pubsdir = ~/.pubs
docsdir = ~/.pubs/doc
doc_add = link
open_cmd = xdg-open
[plugins]
active = git,alias
[[alias]]
[[[la]]]
command = list -a
description = lists papers in lexicographic order
[[git]]
quiet = True
manual = False
force_color = False

View file

@ -0,0 +1,36 @@
{ config, lib, pkgs, ... }:
{
programs.pubs = {
enable = true;
extraConfig = ''
[main]
pubsdir = ~/.pubs
docsdir = ~/.pubs/doc
doc_add = link
open_cmd = xdg-open
[plugins]
active = git,alias
[[alias]]
[[[la]]]
command = list -a
description = lists papers in lexicographic order
[[git]]
quiet = True
manual = False
force_color = False
'';
};
test.stubs.pubs = { };
nmt.script = ''
assertFileContent \
home-files/.pubsrc ${./pubs-example-settings-expected-pubsrc}
'';
}