From ac2d771f558982ab68da75c8c59cc302e4a8cdd5 Mon Sep 17 00:00:00 2001 From: traxys Date: Thu, 30 Mar 2023 11:54:54 +0200 Subject: [PATCH] plugin/openscad: init + tests (#293) --- plugins/default.nix | 1 + plugins/languages/openscad.nix | 78 +++++++++++++++++++ .../plugins/languages/openscad.nix | 33 ++++++++ 3 files changed, 112 insertions(+) create mode 100644 plugins/languages/openscad.nix create mode 100644 tests/test-sources/plugins/languages/openscad.nix diff --git a/plugins/default.nix b/plugins/default.nix index 627ef889..09a393d3 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -28,6 +28,7 @@ ./languages/markdown-preview.nix ./languages/nix.nix ./languages/nvim-jdtls.nix + ./languages/openscad.nix ./languages/plantuml-syntax.nix ./languages/rust.nix ./languages/sniprun.nix diff --git a/plugins/languages/openscad.nix b/plugins/languages/openscad.nix new file mode 100644 index 00000000..827e2a1c --- /dev/null +++ b/plugins/languages/openscad.nix @@ -0,0 +1,78 @@ +{ + lib, + pkgs, + config, + ... +} @ args: +with lib; let + defaultFuzzyFinder = "skim"; + helpers = import ../helpers.nix args; +in { + options.plugins.openscad = { + enable = mkEnableOption "openscad.nvim, a plugin to manage OpenSCAD files"; + + package = helpers.mkPackageOption "openscad.nvim" pkgs.vimPlugins.openscad-nvim; + + fuzzyFinder = + helpers.defaultNullOpts.mkEnum ["skim" "fzf"] defaultFuzzyFinder + "fuzzy finder to find documentation"; + + cheatsheetWindowBlend = helpers.defaultNullOpts.mkNullable (types.ints.between 0 100) "15" ""; + + loadSnippets = helpers.defaultNullOpts.mkBool false ""; + + autoOpen = helpers.defaultNullOpts.mkBool false ""; + + keymaps = { + enable = mkEnableOption "keymaps for openscad"; + + cheatsheetToggle = helpers.defaultNullOpts.mkStr "" "Toggle cheatsheet window"; + + helpTrigger = helpers.defaultNullOpts.mkStr "" "Fuzzy find help resource"; + + helpManualTrigger = + helpers.defaultNullOpts.mkStr "" + "Open offline openscad manual in pdf via zathura"; + + execOpenSCADTrigger = helpers.defaultNullOpts.mkStr "" "Open file in OpenSCAD"; + + topToggle = + helpers.defaultNullOpts.mkStr "" + "toggle htop filtered for openscad processes"; + }; + }; + + config = let + cfg = config.plugins.openscad; + fuzzyFinder = + if isNull cfg.fuzzyFinder + then defaultFuzzyFinder + else cfg.fuzzyFinder; + 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; + }) + ]; + }; +} diff --git a/tests/test-sources/plugins/languages/openscad.nix b/tests/test-sources/plugins/languages/openscad.nix new file mode 100644 index 00000000..9bfd44cb --- /dev/null +++ b/tests/test-sources/plugins/languages/openscad.nix @@ -0,0 +1,33 @@ +{ + empty = { + plugins.openscad.enable = true; + }; + + defaults = { + plugins.openscad = { + enable = true; + + fuzzyFinder = "skim"; + cheatsheetWindowBlend = 15; + loadSnippets = false; + autoOpen = false; + + keymaps.enable = false; + }; + }; + + keymaps = { + plugins.openscad = { + enable = true; + + keymaps = { + enable = true; + cheatsheetToggle = ""; + helpTrigger = ""; + helpManualTrigger = ""; + execOpenSCADTrigger = ""; + topToggle = ""; + }; + }; + }; +}