{
  config,
  lib,
  pkgs,
  ...
}: let
  inherit (lib) mkIf;

  cfg = config.programs.neovim;
in {
  config = mkIf cfg.enable {
    programs.neovim.plugins = [
      pkgs.vimPlugins.fugitive

      {
        plugin = pkgs.vimPlugins.gitsigns-nvim;
        type = "lua";
        config =
          # lua
          ''
            local gitsigns = require("gitsigns");

            local function visual_stage()
                local first_line = vim.fn.line('v');
                local last_line = vim.fn.getpos('.')[2];
                gitsigns.stage_hunk({ first_line, last_line });
            end

            vim.keymap.set("v", "gs", function()
                visual_stage()
            end);

            gitsigns.setup();
          '';
      }
    ];
  };

  # For accurate stack trace
  _file = ./default.nix;
}