diff --git a/plugins/default.nix b/plugins/default.nix index bc74499a..1c026f3d 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -46,6 +46,7 @@ ./git/gitlinker.nix ./git/gitmessenger.nix ./git/gitsigns + ./git/lazygit.nix ./git/neogit ./languages/clangd-extensions.nix diff --git a/plugins/git/lazygit.nix b/plugins/git/lazygit.nix new file mode 100644 index 00000000..e35afa1f --- /dev/null +++ b/plugins/git/lazygit.nix @@ -0,0 +1,92 @@ +{ + config, + lib, + helpers, + pkgs, + ... +}: +with lib; + helpers.vim-plugin.mkVimPlugin config { + name = "lazygit"; + originalName = "lazygit.nvim"; + defaultPackage = pkgs.vimPlugins.lazygit-nvim; + globalPrefix = "lazygit_"; + + maintainers = [helpers.maintainers.AndresBermeoMarinelli]; + + settingsOptions = { + floating_window_winblend = helpers.defaultNullOpts.mkNullable (types.ints.between 0 100) "0" '' + Set the transparency of the floating window. + ''; + + floating_window_scaling_factor = + helpers.defaultNullOpts.mkNullable types.numbers.nonnegative + "0.9" "Set the scaling factor for floating window."; + + floating_window_border_chars = + helpers.defaultNullOpts.mkListOf types.str + ''["╭" "─" "╮" "│" "╯" "─" "╰" "│"]'' + "Customize lazygit popup window border characters."; + + floating_window_use_plenary = helpers.defaultNullOpts.mkBool false '' + Whether to use plenary.nvim to manage floating window if available. + ''; + + use_neovim_remote = helpers.defaultNullOpts.mkBool true '' + Whether to use neovim remote. Will fallback to `false` if neovim-remote is not installed. + ''; + + use_custom_config_file_path = helpers.defaultNullOpts.mkBool false '' + Config file path is evaluated if this value is `true`. + ''; + + config_file_path = + helpers.defaultNullOpts.mkNullable + ( + with types; + either + str (listOf str) + ) + "[]" + "Custom config file path or list of custom config file paths."; + }; + + settingsExample = { + floating_window_winblend = 0; + floating_window_scaling_factor = 0.9; + floating_window_border_chars = ["╭" "─" "╮" "│" "╯" "─" "╰" "│"]; + floating_window_use_plenary = false; + use_neovim_remote = true; + use_custom_config_file_path = false; + config_file_path = []; + }; + + extraOptions = { + gitPackage = mkOption { + type = with types; nullOr package; + default = pkgs.git; + example = null; + description = '' + The `git` package to use. + Set to `null` to not install any package. + ''; + }; + + lazygitPackage = mkOption { + type = with types; nullOr package; + default = pkgs.lazygit; + example = null; + description = '' + The `lazygit` package to use. + Set to `null` to not install any package. + ''; + }; + }; + + extraConfig = cfg: { + extraPackages = [ + cfg.gitPackage + cfg.lazygitPackage + ]; + }; + } diff --git a/tests/test-sources/plugins/git/lazygit.nix b/tests/test-sources/plugins/git/lazygit.nix new file mode 100644 index 00000000..8e03f933 --- /dev/null +++ b/tests/test-sources/plugins/git/lazygit.nix @@ -0,0 +1,21 @@ +{ + empty = { + plugins.lazygit.enable = true; + }; + + defaults = { + plugins.lazygit = { + enable = true; + + settings = { + floating_window_winblend = 0; + floating_window_scaling_factor = 0.9; + floating_window_border_chars = ["╭" "─" "╮" "│" "╯" "─" "╰" "│"]; + floating_window_use_plenary = false; + use_neovim_remote = true; + use_custom_config_file_path = false; + config_file_path = []; + }; + }; + }; +}