87 lines
1.9 KiB
Nix
87 lines
1.9 KiB
Nix
{ pkgs, lib, fromGitHub }: with builtins;
|
|
rec
|
|
{
|
|
mkSettings = s:
|
|
concatStringsSep
|
|
"\n"
|
|
(attrValues
|
|
(mapAttrs
|
|
(k: v:
|
|
if typeOf v == "bool" then
|
|
if v then "set ${k}" else "set no${k}"
|
|
else
|
|
"set ${k}=${toString v}")
|
|
s
|
|
)
|
|
);
|
|
boolToString = b: if b then "true" else "false";
|
|
toLuaTable = as:
|
|
"{" +
|
|
( concatStringsSep
|
|
", "
|
|
( filter
|
|
(attr: !isNull attr)
|
|
( attrValues
|
|
( mapAttrs
|
|
(k: v: if v then "${k}=true" else null)
|
|
as
|
|
)
|
|
)
|
|
)
|
|
) +
|
|
"}";
|
|
mkMapping = {
|
|
mode,
|
|
binding,
|
|
command,
|
|
nowait?false,
|
|
silent?false,
|
|
unique?false,
|
|
expr?false
|
|
}:
|
|
"vim.api.nvim_set_keymap(${toJSON mode}, ${toJSON binding}, ${toJSON command}, ${toLuaTable {inherit nowait silent unique expr;}})";
|
|
mkMappings =
|
|
m:
|
|
"lua << END-OF-KEYBINDS\n" +
|
|
(concatStringsSep "\n" (map mkMapping m)) +
|
|
"\nEND-OF-KEYBINDS";
|
|
mkRuntimes = rs:
|
|
if rs == [] then "" else
|
|
"set runtimepath+=" +
|
|
( concatStringsSep
|
|
","
|
|
(map (rt: "${rt}") rs)
|
|
);
|
|
mkVimHeader = h: "\"\"\"\"\"\"\"\" ${h} \"\"\"\"\"\"\"\"\"";
|
|
mkVimSection = section:
|
|
(concatStringsSep "\n\n\n"
|
|
(filter
|
|
(v: !isNull v)
|
|
(attrValues
|
|
(mapAttrs
|
|
(k: v: if "" == v then null else (mkVimHeader k) + "\n" + v)
|
|
section
|
|
)
|
|
)
|
|
)
|
|
);
|
|
mkVimSections = sections: concatStringsSep "\n\n\n" (map mkVimSection sections);
|
|
mkConfig = { settings?{}, mappings?[], runtimes?[], extra?"" }:
|
|
mkVimSections [
|
|
{"ADDITIONAL RUNTIME DIRS" = mkRuntimes runtimes;}
|
|
{"SETTINGS" = mkSettings settings;}
|
|
{"KEY BINGINGS" = mkMappings mappings;}
|
|
{"MANUAL SETTINGS" = extra;}
|
|
];
|
|
|
|
# Via https://gist.github.com/nat-418/d76586da7a5d113ab90578ed56069509
|
|
fromGitHub = ref: repo: pkgs.vimUtils.buildVimPluginFrom2Nix {
|
|
pname = "${lib.strings.sanitizeDerivationName repo}";
|
|
version = ref;
|
|
src = builtins.fetchGit {
|
|
url = "https://github.com/${repo}.git";
|
|
ref = ref;
|
|
};
|
|
};
|
|
}
|