ne: add module

Added a simple module to place configuration files for ne: the nice
editor.

PR #1336
This commit is contained in:
cwyc 2020-06-15 21:47:58 -04:00 committed by Robert Helgesson
parent 8ab1139891
commit 8f2342e13a
No known key found for this signature in database
GPG Key ID: 36BDAA14C2797E89
9 changed files with 217 additions and 0 deletions

3
.github/CODEOWNERS vendored
View File

@ -73,6 +73,9 @@
/modules/programs/mpv.nix @tadeokondrak
/modules/programs/ne.nix @cwyc
/tests/modules/programs/ne @cwyc
/modules/programs/noti.nix @marsam
/modules/programs/obs-studio.nix @adisbladis

View File

@ -19,4 +19,10 @@
github = "owm111";
githubId = 7798336;
};
cwyc = {
email = "cwyc@users.noreply.github.com";
name = "cwyc";
github = "cwyc";
githubId = 16950437;
};
}

View File

@ -1597,6 +1597,13 @@ in
Apologies for the belated notification!
'';
}
{
time = "2020-06-23T20:06:39+00:00";
message = ''
A new module is available: 'programs.ne'
'';
}
];
};
}

View File

@ -89,6 +89,7 @@ let
(loadModule ./programs/mercurial.nix { })
(loadModule ./programs/mpv.nix { })
(loadModule ./programs/msmtp.nix { })
(loadModule ./programs/ne.nix { })
(loadModule ./programs/neomutt.nix { })
(loadModule ./programs/neovim.nix { })
(loadModule ./programs/newsboat.nix { })

95
modules/programs/ne.nix Normal file
View File

@ -0,0 +1,95 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.ne;
autoPrefFiles = let
autoprefs = cfg.automaticPreferences
// optionalAttrs (cfg.defaultPreferences != "") {
".default" = cfg.defaultPreferences;
};
gen = fileExtension: configText:
nameValuePair ".ne/${fileExtension}#ap" {
text = configText;
}; # Generates [path].text format expected by home.file.
in mapAttrs' gen autoprefs;
in {
meta.maintainers = [ hm.maintainers.cwyc ];
options.programs.ne = {
enable = mkEnableOption "ne";
keybindings = mkOption {
type = types.lines;
default = "";
example = ''
KEY 7f BS
SEQ "\x1b[1;5D" 7f
'';
description = ''
Keybinding file for ne.
'';
};
defaultPreferences = mkOption {
type = types.lines;
default = "";
description = ''
Default preferences for ne.
</para><para>
Equivalent to <literal>programs.ne.automaticPreferences.".default"</literal>.
'';
};
automaticPreferences = mkOption {
type = types.attrsOf types.lines;
default = { };
example = literalExample ''
{
nix = '''
TAB 0
TS 2
''';
js = '''
TS 4
''';
}
'';
description = ''
Automatic preferences files for ne.
'';
};
menus = mkOption {
type = types.lines;
default = "";
description = "Menu configuration file for ne.";
};
virtualExtensions = mkOption {
type = types.lines;
default = "";
example = ''
sh 1 ^#!\s*/.*\b(bash|sh|ksh|zsh)\s*
csh 1 ^#!\s*/.*\b(csh|tcsh)\s*
'';
description = "Virtual extensions configuration file for ne.";
};
};
config = mkIf cfg.enable {
home.packages = [ pkgs.ne ];
home.file = {
".ne/.keys" = mkIf (cfg.keybindings != "") { text = cfg.keybindings; };
".ne/.extensions" =
mkIf (cfg.virtualExtensions != "") { text = cfg.virtualExtensions; };
".ne/.menus" = mkIf (cfg.menus != "") { text = cfg.menus; };
} // autoPrefFiles;
};
}

View File

@ -53,6 +53,7 @@ import nmt {
./modules/programs/lf
./modules/programs/lieer
./modules/programs/mbsync
./modules/programs/ne
./modules/programs/neomutt
./modules/programs/newsboat
./modules/programs/qutebrowser

View File

@ -0,0 +1,4 @@
{
ne-defprefs = ./defprefs.nix;
ne-passthroughs = ./passthroughs.nix;
}

View File

@ -0,0 +1,30 @@
{ config, lib, pkgs, ... }:
with lib;
let
defpref = ''
defined through defaultPreferences
'';
autopref = ''
defined through automaticPreferences
'';
in {
config = {
programs.ne = {
enable = true;
defaultPreferences = defpref;
automaticPreferences.".default" = autopref;
};
nmt = {
description =
"Check that it gracefully handles the case of both defaultPreferences and automaticPreferences.'.default' being set, defaulting to the former.";
script = ''
assertFileExists home-files/.ne/.default#ap
assertFileContent home-files/.ne/.default#ap ${
builtins.toFile "defpref" defpref
}
'';
};
};
}

View File

@ -0,0 +1,70 @@
{ config, lib, pkgs, ... }:
with lib;
let
# Samples taken from the ne manual.
keybindings = ''
SEQ "\x1b[1;5D" 14A
KEY 14A HELP
'';
menus = ''
MENU "File"
ITEM "Open... ^O" Open
ITEM "Close " Close
ITEM "DoIt " Macro DoIt
'';
virtualExtensions = ''
sh 1 ^#!\s*/.*\b(bash|sh|ksh|zsh)\s*
csh 1 ^#!\s*/.*\b(csh|tcsh)\s*
pl 1 ^#!\s*/.*\bperl\b
py 1 ^#!\s*/.*\bpython[0-9]*\s*
rb 1 ^#!\s*/.*\bruby\s*
xml 1 ^<\?xml
'';
automaticPreferences = {
nix = ''
TAB 0
TS 2
'';
js = ''
TS 4
'';
};
checkFile = filename: contents: ''
assertFileExists home-files/.ne/${filename}
assertFileContent home-files/.ne/${filename} ${
builtins.toFile "checkFile" contents
}
'';
in {
config = {
programs.ne = {
enable = true;
inherit keybindings;
inherit menus;
inherit virtualExtensions;
inherit automaticPreferences;
};
nmt = {
description = "Check that configuration files are correctly written";
script = concatStringsSep "\n" [
(checkFile ".keys" keybindings)
(checkFile ".extensions" virtualExtensions)
(checkFile ".menus" menus)
# Generates a check command for each entry in automaticPreferences.
(concatStringsSep "\n" (mapAttrsToList
(extension: contents: checkFile "${extension}#ap" contents)
automaticPreferences))
];
};
};
}