Configuration

Configuration

Lazyman Menu Configuration

The lazyman menu interface supports a menu-driven configuration of the Webdev Neovim configuration. Many of the options, settings, and plugins used by Webdev can be configured using this menu system.

To view the Webdev configuration menu, execute the lazyman command and select the Webdev Config option by entering the option number or Webdev Config at the menu prompt.

Get/Set Configuration Script

The Webdev configuration menu includes the capability to get and set configuration values for the Webdev Neovim configuration. This is done using a new Neovim feature introduced in version 0.9, the ability to invoke Neovim with a Lua script:

1
nvim -l /path/to/some_script.lua

The specified Lua script is executed in the Neovim runtime environment and then Neovim exits.

Lazyman uses the Lua script ~/.config/nvim-Lazyman/scripts/get_conf.lua to manage Neovim configuration settings. This script can retrieve the current value of a setting, set the value of a supported setting, list all supported setting names, or display the location of the Neovim configuration.

Lazyman configuration script

The ~/.config/nvim-Lazyman/scripts/lazyman_config.sh script is used to display the Lazyman Neovim Configuration menus and invoke the get_conf.lua script to get and set configuration values. The usage message of lazyman_config.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Usage: lazyman_config [-a] [-d] [-i] [-m menu] [-s name value] [-u]
Where:
    -a lists all configuration names and exits
    -d specifies debug mode
    -i indicates initialize conditional plugin configurations and exit
    -m 'menu' specifies the menu to display (conf, form, lsp, plugins)
    -s 'name value' indicates set the value of configuration 'name' to 'value'
      if 'name' is 'get' then 'value' is the configuration name to get
      if 'name' is a table then 'value' is the table entry to set
      follow 'value' with 'enable' or 'disable'
    -u displays this usage message and exits
Examples:
  Display the 'Formatters' menu
    lazyman_config -m form
  Set the theme to 'kanagawa'
    lazyman_config -s theme kanagawa
  Get the theme setting
    lazyman_config -s get theme
  Disable 'gopls' language server
    lazyman_config -s lsp_servers gopls disable

Get/Set configuration script source

The get_conf.lua script is used to get or set configuration values for those Lazyman Neovim configurations with a lazyman menu configuration interface.

The get_conf.lua source code:

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
-- Invoke with 'nvim -l get_conf.lua conf_name'
-- Where 'conf_name' is:
--   - one of the entries in lua/configuration.lua
--   - the keyword 'config_home' to get configuration location info
--   - the keyword 'list_names' to lists all configuration entry names
--   - an option/variable name to retrieve its value
--
-- For example, to retrieve the Lazyman configuration 'namespace' setting:
--
-- #!/bin/bash
-- NVIM_APPNAME="nvim-Lazyman" \
--   nvim -l ~/.config/nvim-Lazyman/scripts/get_conf.lua namespace
--
-- or, to retrieve the value of the 'mouse' option in the Webdev config:
--
-- #!/bin/bash
-- NVIM_APPNAME="nvim-Webdev" \
--   nvim -l ~/.config/nvim-Lazyman/scripts/get_conf.lua mouse

local config = vim.inspect(_G.arg[1])
local arg = string.gsub(config, '"', "")
local app_name = os.getenv("NVIM_APPNAME") or ""

local function get_var(var_name, default_value)
  local s, v = pcall(function()
    return vim.api.nvim_get_option(var_name)
  end)
  if s then
    return v
  else
    s, v = pcall(function()
      return vim.api.nvim_get_var(var_name)
    end)
    if s then
      return v
    else
      return default_value
    end
  end
end

local function print_var(entry)
  if type(entry) == "string" then
    io.write(entry .. "\n")
  elseif type(entry) == "table" then
    table.sort(entry)
    for _, val in ipairs(entry) do
      io.write(val .. "\n")
    end
  else
    io.write(tostring(entry) .. "\n")
  end
end

if arg == "config_home" then
  local config_home = vim.fn.stdpath("config")
  io.write("Neovim configuration location = " .. vim.fn.expand(config_home) .. "\n")
  io.write("NVIM_APPNAME = " .. app_name .. "\n")
else
  local var_val = ""
  if app_name == "nvim-Lazyman" then
    local settings = require("configuration")
    if arg == "list_names" then
      for k,_ in pairs(settings) do
        io.write(k .. "\n")
      end
    else
      local entry = settings[arg]
      if entry ~= nil then
        print_var(entry)
      else
        var_val = get_var(arg, "")
        print_var(var_val)
      end
    end
  else
    var_val = get_var(arg, "")
    print_var(var_val)
  end
end