From daa10b508bf9bdeeaf58eba415a1cdedd6f37719 Mon Sep 17 00:00:00 2001 From: Ching Pei Yang Date: Sat, 9 Mar 2024 13:55:44 +0000 Subject: [PATCH] feat(toggleterm): custom setup opts --- modules/terminal/toggleterm/config.nix | 20 +------- modules/terminal/toggleterm/toggleterm.nix | 59 ++++++++++++++++++---- 2 files changed, 51 insertions(+), 28 deletions(-) diff --git a/modules/terminal/toggleterm/config.nix b/modules/terminal/toggleterm/config.nix index 1ffec58..7f57358 100644 --- a/modules/terminal/toggleterm/config.nix +++ b/modules/terminal/toggleterm/config.nix @@ -9,6 +9,7 @@ inherit (lib.meta) getExe; inherit (lib.nvim.binds) mkBinding; inherit (lib.nvim.dag) entryAnywhere entryAfter; + inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.terminal.toggleterm; in { @@ -23,24 +24,7 @@ in { maps.normal = mkBinding cfg.mappings.open "execute v:count . \"ToggleTerm\"" "Toggle terminal"; luaConfigRC.toggleterm = entryAnywhere '' - require("toggleterm").setup({ - open_mapping = null, - direction = '${toString cfg.direction}', - -- TODO: this should probably be turned into a module that uses the lua function if and only if the user has not set it - size = function(term) - if term.direction == "horizontal" then - return 15 - elseif term.direction == "vertical" then - return vim.o.columns * 0.4 - end - end, - winbar = { - enabled = '${toString cfg.enable_winbar}', - name_formatter = function(term) -- term: Terminal - return term.name - end - }, - }) + require("toggleterm").setup(${toLuaObject cfg.setupOpts}) ''; }; } diff --git a/modules/terminal/toggleterm/toggleterm.nix b/modules/terminal/toggleterm/toggleterm.nix index dbc8e54..8b3f051 100644 --- a/modules/terminal/toggleterm/toggleterm.nix +++ b/modules/terminal/toggleterm/toggleterm.nix @@ -5,8 +5,15 @@ }: let inherit (lib.options) mkOption mkEnableOption; inherit (lib.nvim.binds) mkMappingOption; - inherit (lib.types) nullOr str enum bool package; + inherit (lib.types) nullOr str enum bool package either int; + inherit (lib) mkRenamedOptionModule; + inherit (lib.nvim.types) mkPluginSetupOption rawLua; in { + imports = [ + (mkRenamedOptionModule ["vim" "terminal" "toggleterm" "direction"] ["vim" "terminal" "toggleterm" "setupOpts" "direction"]) + (mkRenamedOptionModule ["vim" "terminal" "toggleterm" "enable_winbar"] ["vim" "terminal" "toggleterm" "setupOpts" "enable_winbar"]) + ]; + options.vim.terminal.toggleterm = { enable = mkEnableOption "toggleterm as a replacement to built-in terminal command"; mappings = { @@ -17,16 +24,48 @@ in { }; }; - direction = mkOption { - type = enum ["horizontal" "vertical" "tab" "float"]; - default = "horizontal"; - description = "Direction of the terminal"; - }; + setupOpts = mkPluginSetupOption "ToggleTerm" { + direction = mkOption { + type = enum ["horizontal" "vertical" "tab" "float"]; + default = "horizontal"; + description = "Direction of the terminal"; + }; - enable_winbar = mkOption { - type = bool; - default = false; - description = "Enable winbar"; + enable_winbar = mkOption { + type = bool; + default = false; + description = "Enable winbar"; + }; + + size = mkOption { + type = either rawLua int; + description = "Number or lua function which is passed to the current terminal"; + default = { + __raw = '' + function(term) + if term.direction == "horizontal" then + return 15 + elseif term.direction == "vertical" then + return vim.o.columns * 0.4 + end + end + ''; + }; + }; + winbar = { + enabled = mkEnableOption "winbar in terminal" // {default = true;}; + name_formatter = mkOption { + type = rawLua; + description = "Winbar formatter function."; + default = { + __raw = '' + function(term) + return term.name + end + ''; + }; + }; + }; }; lazygit = {