aboutsummaryrefslogtreecommitdiffstats
path: root/lua/plugins/snacks.lua
blob: a9bbc93c94f23e6e2186bcf555f263b4875fa3ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
return {
  "folke/snacks.nvim",
  priority = 1000,
  lazy = false,
  ---@type snacks.Config
  opts = {
    bigfile = { enabled = true },
    dashboard = { enabled = true },
    explorer = { enabled = true },
    indent = { enabled = true },
    input = { enabled = true },
    notifier = { enabled = true },
    picker = {
      enabled = true,
      ui_select = true,
      jump = {
        reuse_win = true,
      },
      on_show = function(picker)
        vim.schedule(function()
          -- vim.api.nvim_win_call(picker.input.win.win, function()
          vim.cmd 'startinsert'
          -- end)
        end)
      end,
      sources = {
        files = {
          layout = { preset = "telescope" },
          focus = "list",
        },
        -- vim.ui.select: el preset `select` capa a max_width=100 y corta
        -- líneas largas (p.ej. los comandos de cargo de rustaceanvim)
        select = {
          layout = {
            layout = {
              width = 0.8,
              max_width = 200,
            },
          },
        },
      },
    },
    layout = {
      preset = "dropdown",
      layout = {
        backdrop = false,
        width = 0.4,
        min_width = 80,
        height = 0.25,
        min_height = 10,
        border = "none",
        box = "vertical",
        {
          box = "vertical",
          border = true,
          title = "{title} {live} {flags}",
          title_pos = "center",
          { win = "input", height = 1,     border = "bottom" },
          { win = "list",  border = "none" },
        },
      },
    },
    quickfile = { enabled = true },
    scope = { enabled = true },
    scroll = { enabled = true },
    statuscolumn = { enabled = true },
    words = { enabled = true },
    image = { enabled = true },
  },
  keys = {
    -- Top Pickers & Explorer
    { "<leader><space>", function() Snacks.picker.smart() end,                                                      desc = "Smart Find Files" },
    { "<leader>,",       function() Snacks.picker.buffers() end,                                                    desc = "Buffers" },
    { "<leader>/",       function() Snacks.picker.grep() end,                                                       desc = "Grep" },
    { "<leader>:",       function() Snacks.picker.command_history() end,                                            desc = "Command History" },
    { "<leader>n",       function() Snacks.picker.notifications() end,                                              desc = "Notification History" },
    { "<leader>e",       function() Snacks.explorer() end,                                                          desc = "File Explorer" },
    -- find
    { "<leader>fb",      function() Snacks.picker.buffers() end,                                                    desc = "Buffers" },
    { "<leader>fc",      function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") }) end,                    desc = "Find Config File" },
    { "<leader>ff",      function() Snacks.picker.files() end,                                                      desc = "Find Files" },
    { "<leader>gf",      function() Snacks.picker.git_files() end,                                                  desc = "Find Git Files" },
    { "<leader>fr",      function() Snacks.picker.recent() end,                                                     desc = "Recent" },
    -- git
    { "<leader>gl",      function() Snacks.picker.git_log() end,                                                    desc = "Git Log" },
    { "<leader>gs",      function() Snacks.picker.git_status() end,                                                 desc = "Git Status" },
    -- Grep
    { "<leader>sb",      function() Snacks.picker.lines() end,                                                      desc = "Buffer Lines" },
    { "<leader>sB",      function() Snacks.picker.grep_buffers() end,                                               desc = "Grep Open Buffers" },
    { "<leader>sg",      function() Snacks.picker.grep() end,                                                       desc = "Grep" },
    { "<leader>sw",      function() Snacks.picker.grep_word() end,                                                  desc = "Visual selection or word",             mode = { "n", "x" } },
    -- search
    { '<leader>s"',      function() Snacks.picker.registers() end,                                                  desc = "Registers" },
    { '<leader>s/',      function() Snacks.picker.search_history() end,                                             desc = "Search History" },
    { "<leader>sa",      function() Snacks.picker.autocmds() end,                                                   desc = "Autocmds" },
    { "<leader>sc",      function() Snacks.picker.command_history() end,                                            desc = "Command History" },
    { "<leader>sC",      function() Snacks.picker.commands() end,                                                   desc = "Commands" },
    { "<leader>sd",      function() Snacks.picker.diagnostics() end,                                                desc = "Diagnostics" },
    { "<leader>sh",      function() Snacks.picker.help() end,                                                       desc = "Help Pages" },
    { "<leader>si",      function() Snacks.picker.icons() end,                                                      desc = "Icons" },
    { "<leader>sk",      function() Snacks.picker.keymaps() end,                                                    desc = "Keymaps" },
    { "<leader>sl",      function() Snacks.picker.loclist() end,                                                    desc = "Location List" },
    { "<leader>sm",      function() Snacks.picker.marks() end,                                                      desc = "Marks" },
    { "<leader>sq",      function() Snacks.picker.qflist() end,                                                     desc = "Quickfix List" },
    { "<leader>sR",      function() Snacks.picker.resume() end,                                                     desc = "Resume" },
    { "<leader>su",      function() Snacks.picker.undo() end,                                                       desc = "Undo History" },
    { "<leader>st",      function() Snacks.picker.todo_comments() end,                                              desc = "Todo" },
    { "<leader>sT",      function() Snacks.picker.todo_comments({ keywords = { "TODO", "FIX", "FIXME" } }) end,     desc = "Todo/Fix/Fixme" },
    { "<leader>uC",      function() Snacks.picker.colorschemes() end,                                               desc = "Colorschemes" },
    -- LSP
    { "gd",              function() Snacks.picker.lsp_definitions() end,                                            desc = "Goto Definition" },
    { "gD",              function() Snacks.picker.lsp_declarations() end,                                           desc = "Goto Declaration" },
    { "gr",              function() Snacks.picker.lsp_references() end,                                             nowait = true,                                 desc = "References" },
    { "gI",              function() Snacks.picker.lsp_implementations() end,                                        desc = "Goto Implementation" },
    { "gy",              function() Snacks.picker.lsp_type_definitions() end,                                       desc = "Goto T[y]pe Definition" },
    { "<leader>ss",      function() Snacks.picker.lsp_symbols() end,                                                desc = "LSP Symbols" },
    { "<leader>sS",      function() Snacks.picker.lsp_workspace_symbols() end,                                      desc = "LSP Workspace Symbols" },

    -- Migrated from Telescope
    { "<leader>pp",      function() Snacks.picker.smart() end,                                                      desc = "Open Project files" },
    { "<leader>gc",      function() Snacks.picker.git_branches() end,                                               desc = "Git Branches selector" },
    { "<leader>pw",      function() Snacks.picker.grep_word() end,                                                  desc = "Grep word under cursor" },
    { "<leader>ps",      function() Snacks.picker.grep() end,                                                       desc = "Grep provided input string" },
    { "<leader>rc",      function() Snacks.picker.git_files({ cwd = vim.fn.expand("~/.dotfiles") }) end,            desc = "Search Files in .dotfiles directory" },
    { "<leader>rn",      function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") }) end,                    desc = "Search Files in nvim config directory" },
    { "<leader>rp",      function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") .. "/lua/plugins" }) end,  desc = "Search Neovim plugins" },
    { "<leader>rs",      function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") .. "/lua/scratchs" }) end, desc = "Search Neovim Scratchs files" },
    { "<leader>ph",      function() Snacks.picker.help() end,                                                       desc = "Neovim Help" },
    { "<leader>pe",      function() Snacks.picker.buffers() end,                                                    desc = "Open buffers" },
    -- { "<leader>pr", function() Snacks.picker.treesitter() end, desc = "Treesitter buffer elements" }, -- Check if treesitter exists
    { "<leader>bb",      function() Snacks.explorer() end,                                                          desc = "Current directory" },
    { "<leader>bp&quo