2023-03-30 11:54:54 +02:00
|
|
|
{
|
|
|
|
lib,
|
2023-11-06 15:04:08 +01:00
|
|
|
helpers,
|
2023-03-30 11:54:54 +02:00
|
|
|
config,
|
2023-11-06 15:04:08 +01:00
|
|
|
pkgs,
|
2023-03-30 11:54:54 +02:00
|
|
|
...
|
2023-11-06 15:04:08 +01:00
|
|
|
}:
|
2023-03-30 11:54:54 +02:00
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
defaultFuzzyFinder = "skim";
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options.plugins.openscad = {
|
|
|
|
enable = mkEnableOption "openscad.nvim, a plugin to manage OpenSCAD files";
|
|
|
|
|
2024-05-17 14:09:20 +02:00
|
|
|
package = helpers.mkPluginPackageOption "openscad.nvim" pkgs.vimPlugins.openscad-nvim;
|
2023-03-30 11:54:54 +02:00
|
|
|
|
|
|
|
fuzzyFinder = helpers.defaultNullOpts.mkEnum [
|
|
|
|
"skim"
|
|
|
|
"fzf"
|
|
|
|
] defaultFuzzyFinder "fuzzy finder to find documentation";
|
|
|
|
|
2024-06-11 16:52:49 +01:00
|
|
|
cheatsheetWindowBlend = helpers.defaultNullOpts.mkNullable (types.ints.between 0 100) 15 "";
|
2023-03-30 11:54:54 +02:00
|
|
|
|
|
|
|
loadSnippets = helpers.defaultNullOpts.mkBool false "";
|
|
|
|
|
|
|
|
autoOpen = helpers.defaultNullOpts.mkBool false "";
|
|
|
|
|
|
|
|
keymaps = {
|
|
|
|
enable = mkEnableOption "keymaps for openscad";
|
|
|
|
|
|
|
|
cheatsheetToggle = helpers.defaultNullOpts.mkStr "<Enter>" "Toggle cheatsheet window";
|
|
|
|
|
|
|
|
helpTrigger = helpers.defaultNullOpts.mkStr "<A-h>" "Fuzzy find help resource";
|
|
|
|
|
|
|
|
helpManualTrigger = helpers.defaultNullOpts.mkStr "<A-m>" "Open offline openscad manual in pdf via zathura";
|
|
|
|
|
|
|
|
execOpenSCADTrigger = helpers.defaultNullOpts.mkStr "<A-o>" "Open file in OpenSCAD";
|
|
|
|
|
|
|
|
topToggle = helpers.defaultNullOpts.mkStr "<A-c>" "toggle htop filtered for openscad processes";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
config =
|
|
|
|
let
|
|
|
|
cfg = config.plugins.openscad;
|
2023-05-22 15:45:47 +05:30
|
|
|
fuzzyFinder = if (cfg.fuzzyFinder == null) then defaultFuzzyFinder else cfg.fuzzyFinder;
|
2023-03-30 11:54:54 +02:00
|
|
|
in
|
|
|
|
mkIf cfg.enable {
|
|
|
|
extraPlugins =
|
|
|
|
with pkgs.vimPlugins;
|
|
|
|
[ cfg.package ]
|
|
|
|
++ (optional (fuzzyFinder == "skim") skim-vim)
|
|
|
|
++ (optional (fuzzyFinder == "fzf") fzf-vim);
|
|
|
|
|
|
|
|
extraConfigLua = ''
|
|
|
|
require('openscad')
|
|
|
|
'';
|
|
|
|
|
|
|
|
globals = mkMerge [
|
|
|
|
{
|
|
|
|
openscad_fuzzy_finder = cfg.fuzzyFinder;
|
|
|
|
openscad_cheatsheet_window_blend = cfg.cheatsheetWindowBlend;
|
|
|
|
openscad_load_snippets = cfg.loadSnippets;
|
|
|
|
}
|
|
|
|
(mkIf cfg.keymaps.enable {
|
|
|
|
openscad_default_mappings = true;
|
|
|
|
openscad_cheatsheet_toggle_key = cfg.keymaps.cheatsheetToggle;
|
|
|
|
openscad_help_trig_key = cfg.keymaps.helpTrigger;
|
|
|
|
openscad_help_manual_trig_key = cfg.keymaps.helpManualTrigger;
|
|
|
|
openscad_exec_openscad_trig_key = cfg.keymaps.execOpenSCADTrigger;
|
|
|
|
openscad_top_toggle = cfg.keymaps.topToggle;
|
|
|
|
})
|
|
|
|
];
|
|
|
|
};
|
|
|
|
}
|