ne: add module
Added a simple module to place configuration files for ne: the nice editor. PR #1336
This commit is contained in:
parent
8ab1139891
commit
8f2342e13a
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
|
@ -73,6 +73,9 @@
|
||||||
|
|
||||||
/modules/programs/mpv.nix @tadeokondrak
|
/modules/programs/mpv.nix @tadeokondrak
|
||||||
|
|
||||||
|
/modules/programs/ne.nix @cwyc
|
||||||
|
/tests/modules/programs/ne @cwyc
|
||||||
|
|
||||||
/modules/programs/noti.nix @marsam
|
/modules/programs/noti.nix @marsam
|
||||||
|
|
||||||
/modules/programs/obs-studio.nix @adisbladis
|
/modules/programs/obs-studio.nix @adisbladis
|
||||||
|
|
|
@ -19,4 +19,10 @@
|
||||||
github = "owm111";
|
github = "owm111";
|
||||||
githubId = 7798336;
|
githubId = 7798336;
|
||||||
};
|
};
|
||||||
|
cwyc = {
|
||||||
|
email = "cwyc@users.noreply.github.com";
|
||||||
|
name = "cwyc";
|
||||||
|
github = "cwyc";
|
||||||
|
githubId = 16950437;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1597,6 +1597,13 @@ in
|
||||||
Apologies for the belated notification!
|
Apologies for the belated notification!
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
time = "2020-06-23T20:06:39+00:00";
|
||||||
|
message = ''
|
||||||
|
A new module is available: 'programs.ne'
|
||||||
|
'';
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,7 @@ let
|
||||||
(loadModule ./programs/mercurial.nix { })
|
(loadModule ./programs/mercurial.nix { })
|
||||||
(loadModule ./programs/mpv.nix { })
|
(loadModule ./programs/mpv.nix { })
|
||||||
(loadModule ./programs/msmtp.nix { })
|
(loadModule ./programs/msmtp.nix { })
|
||||||
|
(loadModule ./programs/ne.nix { })
|
||||||
(loadModule ./programs/neomutt.nix { })
|
(loadModule ./programs/neomutt.nix { })
|
||||||
(loadModule ./programs/neovim.nix { })
|
(loadModule ./programs/neovim.nix { })
|
||||||
(loadModule ./programs/newsboat.nix { })
|
(loadModule ./programs/newsboat.nix { })
|
||||||
|
|
95
modules/programs/ne.nix
Normal file
95
modules/programs/ne.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
|
@ -53,6 +53,7 @@ import nmt {
|
||||||
./modules/programs/lf
|
./modules/programs/lf
|
||||||
./modules/programs/lieer
|
./modules/programs/lieer
|
||||||
./modules/programs/mbsync
|
./modules/programs/mbsync
|
||||||
|
./modules/programs/ne
|
||||||
./modules/programs/neomutt
|
./modules/programs/neomutt
|
||||||
./modules/programs/newsboat
|
./modules/programs/newsboat
|
||||||
./modules/programs/qutebrowser
|
./modules/programs/qutebrowser
|
||||||
|
|
4
tests/modules/programs/ne/default.nix
Normal file
4
tests/modules/programs/ne/default.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
ne-defprefs = ./defprefs.nix;
|
||||||
|
ne-passthroughs = ./passthroughs.nix;
|
||||||
|
}
|
30
tests/modules/programs/ne/defprefs.nix
Normal file
30
tests/modules/programs/ne/defprefs.nix
Normal 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
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
70
tests/modules/programs/ne/passthroughs.nix
Normal file
70
tests/modules/programs/ne/passthroughs.nix
Normal 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))
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue