From 2122a01f99c6da466b8f0f55c965c11a9043d117 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Sat, 9 Nov 2024 12:35:44 +0100 Subject: refactor(modules/legacy/conf/nvim): Move to `by-name` --- modules/by-name/nv/nvim/plgs/femaco/default.nix | 26 +++++++++++ modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua | 51 ++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 modules/by-name/nv/nvim/plgs/femaco/default.nix create mode 100644 modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua (limited to 'modules/by-name/nv/nvim/plgs/femaco') diff --git a/modules/by-name/nv/nvim/plgs/femaco/default.nix b/modules/by-name/nv/nvim/plgs/femaco/default.nix new file mode 100644 index 00000000..adf0ba63 --- /dev/null +++ b/modules/by-name/nv/nvim/plgs/femaco/default.nix @@ -0,0 +1,26 @@ +{ + pkgs, + lib, + config, + ... +}: let + cfg = config.soispha.programs.nvim; +in { + home-manager.users.soispha.programs.nixvim = lib.mkIf cfg.enable { + # TODO: package femaco through a module + extraConfigLuaPost = '' + ${lib.strings.fileContents ./lua/femaco.lua} + ''; + extraPlugins = [ + pkgs.vimPlugins.nvim-FeMaco-lua + ]; + keymaps = [ + { + key = "cc"; + mode = "n"; + action.__raw = "require('femaco.edit').edit_code_block"; + options.desc = "edit a [c]ode blo[c]k with femaco"; + } + ]; + }; +} diff --git a/modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua b/modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua new file mode 100644 index 00000000..c113e4c7 --- /dev/null +++ b/modules/by-name/nv/nvim/plgs/femaco/lua/femaco.lua @@ -0,0 +1,51 @@ +local clip_val = require("femaco.utils").clip_val +require("femaco").setup({ + -- should prepare a new buffer and return the winid + -- by default opens a floating window + -- provide a different callback to change this behaviour + -- @param opts: the return value from float_opts + prepare_buffer = function(opts) + local buf = vim.api.nvim_create_buf(false, false) + return vim.api.nvim_open_win(buf, true, opts) + end, + -- should return options passed to nvim_open_win + -- @param code_block: data about the code-block with the keys + -- * range + -- * lines + -- * lang + float_opts = function(code_block) + return { + relative = "cursor", + width = clip_val(5, 120, vim.api.nvim_win_get_width(0) - 10), -- TODO: how to offset sign column etc? + height = clip_val(5, #code_block.lines, vim.api.nvim_win_get_height(0) - 6), + anchor = "NW", + row = 0, + col = 0, + style = "minimal", + border = "rounded", + zindex = 1, + } + end, + -- return filetype to use for a given lang + -- lang can be nil + ft_from_lang = function(lang) return lang end, + -- what to do after opening the float + post_open_float = function(winnr) vim.wo.signcolumn = "no" end, + -- create the path to a temporary file + create_tmp_filepath = function(filetype) return os.tmpname() end, + -- if a newline should always be used, useful for multiline injections + -- which separators needs to be on separate lines such as markdown, neorg etc + -- @param base_filetype: The filetype which FeMaco is called from, not the + -- filetype of the injected language (this is the current buffer so you can + -- get it from vim.bo.filetyp). + ensure_newline = function(base_filetype) return false end, + -- Return true if the indentation should be normalized. Useful when the + -- injected language inherits indentation from the construction scope (e.g. an + -- inline multiline sql string). If true, the leading indentation is detected, + -- stripped, and restored before/after editing. + -- + -- @param base_filetype: The filetype which FeMaco is called from, not the + -- filetype of the injected language (this is the current buffer, so you can + -- get it from vim.bo.filetype). + normalize_indent = function(base_filetype) return false end, +}) -- cgit 1.4.1