diff options
Diffstat (limited to 'lua')
-rw-r--r-- | lua/startup.lua | 139 | ||||
-rw-r--r-- | lua/startup/config.lua | 42 | ||||
-rw-r--r-- | lua/startup/themes/default.lua | 58 | ||||
-rw-r--r-- | lua/startup/utils.lua | 1 |
4 files changed, 146 insertions, 94 deletions
diff --git a/lua/startup.lua b/lua/startup.lua index d895433..7c167b9 100644 --- a/lua/startup.lua +++ b/lua/startup.lua @@ -1,7 +1,7 @@ local M = {} local ns = vim.api.nvim_create_namespace "startup" -local limited_space = false +local current_section = "" local opts = { noremap = true, silent = true } local settings = require "startup.config" @@ -9,7 +9,7 @@ local settings = require "startup.config" local utils = require "startup.utils" local spaces = utils.spaces -local function create_mappings() +local function create_mappings(mappings) vim.api.nvim_buf_set_keymap( 0, "n", @@ -17,7 +17,7 @@ local function create_mappings() ":lua require'startup'.check_line()<CR>", opts ) - for _, cmd in pairs(settings.tools) do + for _, cmd in pairs(mappings) do vim.api.nvim_buf_set_keymap( 0, "n", @@ -33,47 +33,58 @@ function M.new_file() vim.cmd("e " .. name) end +local sections_with_mappings = {} + function M.check_line() local line = vim.api.nvim_get_current_line() - for name, command in pairs(settings.tools) do - if line:match(name) then - vim.cmd(command[1]) + for _, section in ipairs(sections_with_mappings) do + for name, command in pairs(settings[section].content) do + if line:match(name) then + vim.cmd(command[1]) + end end end end -local function align(dict) - local padding = 0 - if settings.options.padding < 1 then - padding = vim.o.columns * padding +local function align(dict, alignment) + local padding_calculated = 0 + if settings[current_section].padding < 1 then + padding_calculated = vim.o.columns * settings[current_section].padding else - padding = settings.options.padding + padding_calculated = settings[current_section].padding end local aligned = {} local max_len = utils.longest_line(dict) - if settings.options.align == "center" then + if alignment == "center" then local space_left = vim.o.columns - max_len for _, line in ipairs(dict) do table.insert(aligned, spaces(space_left / 2) .. line) end - elseif settings.options.align == "left" then + elseif alignment == "left" then for _, line in ipairs(dict) do - table.insert(aligned, spaces(settings.options.padding) .. line) + table.insert(aligned, spaces(padding_calculated) .. line) end - elseif settings.options.align == "right" then + elseif alignment == "right" then for _, line in ipairs(dict) do table.insert( aligned, - spaces(vim.o.columns - max_len - settings.options.padding - 10) .. line + spaces(vim.o.columns - max_len - padding_calculated - 10) .. line ) end end + padding_calculated = 0 return aligned end local count = 1 -local function set_lines(len, text, hi, pass) - vim.api.nvim_buf_set_lines(0, count, count + len, false, align(text)) +local function set_lines(len, text, alignment, hi, pass) + vim.api.nvim_buf_set_lines( + 0, + count, + count + len, + false, + align(text, alignment) + ) vim.api.nvim_win_set_cursor(0, { count, 0 }) if pass then vim.g.section_length = count @@ -84,54 +95,76 @@ local function set_lines(len, text, hi, pass) count = count + len end -local function empty() - set_lines(1, { " " }, "StartupTools") +local function empty(amount) + for _ = 1, amount, 1 do + set_lines(1, { " " }, "center", "StartupTools") + end end -local function body() - local toolnames = {} - for name, cmd in pairs(settings.tools) do - if not limited_space then - table.insert(toolnames, " ") +local function mapping_names(mappings) + local mapnames = {} + for name, cmd in pairs(mappings) do + if settings.options.empty_lines_between_mappings then + table.insert(mapnames, " ") end - if settings.options.mapping_names then - table.insert(toolnames, name .. " " .. cmd[2]) + if settings.options.mapping_keys then + table.insert(mapnames, name .. " " .. cmd[2]) else - table.insert(toolnames, name) + table.insert(mapnames, name) end end - return toolnames + return mapnames end +-- TODO: put inside schedule() function M.display() - local rly_limited_space = false - - if vim.o.lines < (#settings.header + (#settings.tools * 2) + 20) then - limited_space = true - end - - create_mappings() - utils.create_hls() - -- vim.api.nvim_buf_set_keymap(0, "n", "j", "2j", opts) - -- vim.api.nvim_buf_set_keymap(0, "n", "k", "2k", opts) - if not limited_space then - empty() + local parts = { "header", "body", "footer" } + for _, part in ipairs(parts) do + current_section = part + local options = settings[part] + if options.highlight == "" then + vim.cmd( + "highlight Startup" + .. part + .. " guifg=" + .. options.default_color + .. " guibg=" + .. settings.colors.background + ) + options.highlight = "Startup" .. part + end + if options.type == "text" then + set_lines( + #options.content, + options.content, + options.align, + options.highlight + ) + elseif options.type == "mapping" then + table.insert(sections_with_mappings, part) + create_mappings(options.content) + set_lines( + #mapping_names(options.content), + mapping_names(options.content), + options.align, + options.highlight + ) + end + if part == "header" then + empty(settings.options.gap1) + elseif part == "body" then + empty(settings.options.gap2 + 1) + end + vim.cmd(options.command) end - set_lines(#settings.header, settings.header, "StartupHeading") - - local toolnames = body() - empty() - set_lines(#toolnames, toolnames, "StartupTools") - + current_section = "" vim.cmd [[silent! %s/\s\+$//]] -- clear trailing whitespace U.set_buf_options() - if limited_space then - vim.api.nvim_win_set_cursor( - 0, - { #settings.header + 3, math.floor(vim.o.columns / 2) } - ) - end + vim.api.nvim_win_set_cursor(0, { + #settings.header.content + settings.options.gap1 + 3, + math.floor(vim.o.columns / 2), + }) end function M.setup(update) diff --git a/lua/startup/config.lua b/lua/startup/config.lua index 3a38f9c..8508de5 100644 --- a/lua/startup/config.lua +++ b/lua/startup/config.lua @@ -1,43 +1,3 @@ -local settings = { - -- every line should be same width without escaped \ - -- header = { - -- " /$$ ", - -- " |__/ ", - -- " /$$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$ /$$ /$$$$$$/$$$$ ", - -- "| $$__ $$ /$$__ $$ /$$__ $$| $$ /$$/| $$| $$_ $$_ $$", - -- "| $$ \\ $$| $$$$$$$$| $$ \\ $$ \\ $$/$$/ | $$| $$ \\ $$ \\ $$", - -- "| $$ | $$| $$_____/| $$ | $$ \\ $$$/ | $$| $$ | $$ | $$", - -- "| $$ | $$| $$$$$$$| $$$$$$/ \\ $/ | $$| $$ | $$ | $$", - -- "|__/ |__/ \\_______/ \\______/ \\_/ |__/|__/ |__/ |__/", - -- }, - -- header = require("startup.utils").get_oldfiles(10), - header = require("startup.utils").default_header(), - -- name which will be displayed and command - tools = { - [" Find File"] = { "Telescope find_files", "<leader>ff" }, - [" Find Word"] = { "Telescope live_grep", "<leader>lg" }, - [" Recent Files"] = { "Telescope oldfiles", "<leader>of" }, - [" File Browser"] = { "Telescope file_browser", "<leader>fb" }, - [" Config Files"] = { - 'lua require("telescope.builtin").find_files({cwd="~/.config"})', - "<leader>cf", - }, - [" Colorschemes"] = { "Telescope colorscheme", "<leader>cs" }, - [" New File"] = { "lua require'startup'.new_file()", "<leader>nf" }, - ["ﲉ Help Files"] = { "Telescope help_tags", "<leader>fh" }, - }, - options = { - align = "center", -- center, left or right - mapping_names = true, - -- can be an integer (columns) - -- float < 1 -> percentage of screen width - padding = 5, -- only used if align left or right - }, - colors = { - background = "#1f2227", - heading_fg = "#009900", - tools_fg = "#009900", - }, -} +local settings = require "startup.themes.default" return settings diff --git a/lua/startup/themes/default.lua b/lua/startup/themes/default.lua new file mode 100644 index 0000000..3c7fc07 --- /dev/null +++ b/lua/startup/themes/default.lua @@ -0,0 +1,58 @@ +local settings = { + -- every line should be same width without escaped \ + header = { + type = "text", + align = "center", + padding = 5, + content = { + " /$$ ", + " |__/ ", + " /$$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$ /$$ /$$$$$$/$$$$ ", + "| $$__ $$ /$$__ $$ /$$__ $$| $$ /$$/| $$| $$_ $$_ $$", + "| $$ \\ $$| $$$$$$$$| $$ \\ $$ \\ $$/$$/ | $$| $$ \\ $$ \\ $$", + "| $$ | $$| $$_____/| $$ | $$ \\ $$$/ | $$| $$ | $$ | $$", + "| $$ | $$| $$$$$$$| $$$$$$/ \\ $/ | $$| $$ | $$ | $$", + "|__/ |__/ \\_______/ \\______/ \\_/ |__/|__/ |__/ |__/", + }, + highlight = "markdownH1", + default_color = "#FFFFFF", + command = "", + }, + -- name which will be displayed and command + body = { + type = "mapping", + align = "center", + padding = 5, + content = { + [" Find File"] = { "Telescope find_files", "<leader>ff" }, + [" Find Word"] = { "Telescope live_grep", "<leader>lg" }, + [" Recent Files"] = { "Telescope oldfiles", "<leader>of" }, + [" File Browser"] = { "Telescope file_browser", "<leader>fb" }, + [" Colorschemes"] = { "Telescope colorscheme", "<leader>cs" }, + [" New File"] = { "lua require'startup'.new_file()", "<leader>nf" }, + }, + highlight = "TSString", + default_color = "#FFFFFF", + command = "", + }, + footer = { + type = "text", + align = "center", + padding = 5, + content = { "startup.nvim" }, + highlight = "TSString", + default_color = "#FFFFFF", + command = "", + }, + + options = { + mapping_keys = true, + empty_lines_between_mappings = true, + gap1 = 3, + gap2 = 4, + }, + colors = { + background = "#1f2227", + }, +} +return settings diff --git a/lua/startup/utils.lua b/lua/startup/utils.lua index 2bfe149..101e6b3 100644 --- a/lua/startup/utils.lua +++ b/lua/startup/utils.lua @@ -57,6 +57,7 @@ function U.set_buf_options() vim.api.nvim_buf_set_option(0, "bufhidden", "wipe") vim.api.nvim_buf_set_option(0, "buftype", "nofile") vim.api.nvim_buf_set_option(0, "filetype", "dashboard") + vim.api.nvim_buf_set_option(0, "modifiable", false) vim.api.nvim_buf_set_option(0, "swapfile", false) vim.cmd [[setlocal nonu nornu]] end |