summaryrefslogtreecommitdiffstats
path: root/lua/mngr/menu.lua
blob: 89300434dc942da1f8fc9d12996aa70838e3157c (plain) (blame)
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
-- helper functions that can come in handy
local function run(cmd)
  local x = io.popen(cmd)
  local y = x:read("*a")
  x:close()
  return y
end

-- custom menu for simpler neovim managment -----------------------------------
local function genmenu()
  local list = {}
  local function add(name, plug)
    if not plug then
      table.insert(list, name)
      return
    end
    if package.loaded[plug] then
      table.insert(list, name)
    end
  end

  add('edit config', nil)
  add('update plugins', 'dep')
  add('update config', nil)
  add('show keybinds', 'telescope')
  add('change colorscheme', 'telescope')
  add('new plugins', 'telescope')

  return list
end

local function configmenu()
  local list = genmenu()

  vim.ui.select(list, { vpt = 'Config Menu' },
  function(choice)
    if choice == 'edit config' then
      vim.cmd('e $XDG_CONFIG_HOME/nvim/init.lua')
    end
    if choice == 'update plugins' then
      require('dep').sync()
      if package.loaded['nvim-treesitter'] then
        vim.cmd('TSUpdate')
      end
      if package.loaded['mason'] then
        require('mason.api.command').MasonUpdate()
      end
    end
    if choice == 'update config' then
      require('mngr.updates')
    end
    if choice == 'show keybinds' then
      require('telescope.builtin').keymaps()
    end
    if choice == 'change colorscheme' then
      require('telescope.builtin').colorscheme()
    end
    -- search though plugins (powered by nvim.sh)
    if choice == 'new plugins' then
      local result = run("curl -s https://nvim.sh/s")
      local array = {}
      for s in string.gmatch(result, "[^\r\n]+") do
        table.insert(array, s)
      end
      local header = table.remove(array, 1)
      vim.ui.select(array, { vpt = header}, function() end)
    end
  end)
end

vim.keymap.set('n', '<leader>m', configmenu, {})