feat: use HEAD@neovim instead of arch package
BREAKING: require neovim v0.5+ to work!!! migrate neovim configuration to lua
This commit is contained in:
parent
bb099a294e
commit
8ec80d78f5
11
.config/nvim/init.lua
Normal file
11
.config/nvim/init.lua
Normal file
@ -0,0 +1,11 @@
|
||||
-- Author : swytch
|
||||
-- Created : Friday Mar 12, 2021 17:42:34 CET
|
||||
-- License : GPLv3
|
||||
-- Description : neovim configuration file
|
||||
|
||||
require("settings") -- ./lua/settings.lua
|
||||
require("plugins") -- ./lua/plugins.lua
|
||||
require("maps") -- ./lua/maps.lua
|
||||
require("statusline") -- ./lua/statusline.lua
|
||||
|
||||
require("polyjuice") -- colorscheme
|
15
.config/nvim/lua/maps.lua
Normal file
15
.config/nvim/lua/maps.lua
Normal file
@ -0,0 +1,15 @@
|
||||
-- Author : swytch
|
||||
-- Created : Friday Mar 12, 2021 20:17:19 CET
|
||||
-- License : GPLv3
|
||||
-- Description : neovim mappings file
|
||||
|
||||
utils = require("utils")
|
||||
|
||||
utils.map("n", "<space>", "<leader>")
|
||||
utils.map("n", "<leader>j", "<cmd>bn<CR>")
|
||||
utils.map("n", "<leader>k", "<cmd>bp<CR>")
|
||||
utils.map("n", "<leader>y", "\"+y")
|
||||
utils.map("v", "<leader>p", "\"+P")
|
||||
utils.map("n", "<leader><enter>", "<cmd>w! | !compiler %<CR>")
|
||||
utils.map("n", "<leader>s", "<cmd>PackerSync<CR>")
|
||||
utils.map("n", "<leader>c", "<cmd>ColorizerToggle<CR>")
|
45
.config/nvim/lua/plugins.lua
Normal file
45
.config/nvim/lua/plugins.lua
Normal file
@ -0,0 +1,45 @@
|
||||
-- Author : swytch
|
||||
-- Created : Friday Mar 12, 2021 22:28:34 CET
|
||||
-- License : GPLv3
|
||||
-- Description : neovim plugins file
|
||||
|
||||
|
||||
local execute = vim.api.nvim_command
|
||||
local fn = vim.fn
|
||||
|
||||
local install_path = fn.stdpath("data").."/site/pack/packer/start/packer.nvim"
|
||||
|
||||
if fn.empty(fn.glob(install_path)) > 0 then
|
||||
fn.system({"git", "clone", "https://github.com/wbthomason/packer.nvim", install_path})
|
||||
execute "packadd packer.nvim"
|
||||
end
|
||||
|
||||
return require("packer").startup(function()
|
||||
-- packer manages itself
|
||||
use "wbthomason/packer.nvim"
|
||||
|
||||
-- colorscheme
|
||||
use {
|
||||
"~/.local/src/polyjuice/",
|
||||
requires = "tjdevries/colorbuddy.nvim"
|
||||
}
|
||||
|
||||
-- tree-sitter
|
||||
use "nvim-treesitter/nvim-treesitter"
|
||||
|
||||
-- fuzzy finder
|
||||
use {
|
||||
"nvim-telescope/telescope.nvim",
|
||||
requires = {{"nvim-lua/popup.nvim"}, {"nvim-lua/plenary.nvim"}},
|
||||
opt = true,
|
||||
cmd = {"Telescope"}
|
||||
}
|
||||
|
||||
-- display colors directly in editor
|
||||
use {
|
||||
"norcalli/nvim-colorizer.lua",
|
||||
opt = true,
|
||||
cmd = {"ColorizerToggle"}
|
||||
}
|
||||
|
||||
end)
|
66
.config/nvim/lua/settings.lua
Normal file
66
.config/nvim/lua/settings.lua
Normal file
@ -0,0 +1,66 @@
|
||||
-- Author : swytch
|
||||
-- Created : Friday Mar 12, 2021 17:43:21 CET
|
||||
-- License : GPLv3
|
||||
-- Description : neovim settings file
|
||||
|
||||
utils = require("utils")
|
||||
|
||||
local g = vim.g
|
||||
|
||||
local o = vim.o
|
||||
local w = vim.wo
|
||||
local b = vim.bo
|
||||
|
||||
-- general
|
||||
o.wildignore = [[
|
||||
.git
|
||||
*.o,*.class
|
||||
*.jpg,*.jpeg,*.png
|
||||
*.avi,*.mp4,*.mkv
|
||||
*.mp3,*.ogg,*.flac
|
||||
*.eot,*.otf,*.ttf,*.woff
|
||||
*.pdf
|
||||
*.zip,*.gz,*.rar,*.tar.xz
|
||||
]]
|
||||
o.wildmode = "longest,full"
|
||||
o.wildoptions = "pum"
|
||||
o.clipboard = "unnamedplus"
|
||||
g.netrw_dirhistmax = 0
|
||||
|
||||
-- editor
|
||||
o.splitright = true
|
||||
o.splitbelow = true
|
||||
o.scrolloff = 4
|
||||
o.termguicolors = true
|
||||
o.background = "dark"
|
||||
o.shortmess = o.shortmess .. "c"
|
||||
w.number = true
|
||||
w.relativenumber = true
|
||||
o.listchars = "tab:<->,nbsp:␣,trail:·,extends:>,precedes:<"
|
||||
o.showmatch = true
|
||||
o.ignorecase = true
|
||||
o.smartcase = true
|
||||
o.inccommand = "split"
|
||||
o.completeopt = "menuone,noinsert,noselect"
|
||||
|
||||
-- statusline
|
||||
o.laststatus = 2
|
||||
o.showmode = false
|
||||
|
||||
-- text, tabs, indents
|
||||
b.textwidth = 79
|
||||
b.shiftwidth = 8
|
||||
b.softtabstop = -1
|
||||
b.expandtab = true
|
||||
b.shiftwidth = 0
|
||||
o.backspace = "indent,eol,start"
|
||||
o.cindent = true
|
||||
|
||||
-- augroups
|
||||
utils.create_augroup({
|
||||
{"BufWritePre", "*", "%s/\\s\\+$//e"}
|
||||
}, "remove_trailing_whitespaces")
|
||||
utils.create_augroup({
|
||||
{"BufNewFile,BufRead", "*.mom", "set filetype=groff"},
|
||||
{"BufNewFile,BufRead", "*.tex", "set filetype=tex"},
|
||||
}, "enforce_filetypes")
|
203
.config/nvim/lua/statusline.lua
Normal file
203
.config/nvim/lua/statusline.lua
Normal file
@ -0,0 +1,203 @@
|
||||
-- Author : swytch
|
||||
-- Created : Friday Mar 12, 2021 21:45:21 CET
|
||||
-- License : GPLv3
|
||||
-- Description : neovim statusline file
|
||||
-- based on github/nihilistkitten's work
|
||||
|
||||
|
||||
local function gen_section(hl_string, items)
|
||||
out = ""
|
||||
for _, item in pairs(items) do
|
||||
if item ~= "" then
|
||||
out = out .. " " .. item
|
||||
end
|
||||
end
|
||||
if out ~="" then
|
||||
return hl_string .. out .. " "
|
||||
else
|
||||
return out
|
||||
end
|
||||
end
|
||||
|
||||
-- sensible names for vim modes
|
||||
local function get_mode(m)
|
||||
local mode_group = {
|
||||
["n"] = "Normal",
|
||||
["no"] = "O-Pending",
|
||||
["nov"] = "O-Pending",
|
||||
["noV"] = "O-Pending",
|
||||
["no"] = "O-Pending",
|
||||
["niI"] = "Normal",
|
||||
["niR"] = "Normal",
|
||||
["niV"] = "Normal",
|
||||
["v"] = "Visual",
|
||||
["V"] = "V-Line",
|
||||
[""] = "V-Block",
|
||||
["s"] = "Select",
|
||||
["S"] = "S-Line",
|
||||
[""] = "S-Block",
|
||||
["i"] = "Insert",
|
||||
["ic"] = "Insert",
|
||||
["ix"] = "Insert",
|
||||
["R"] = "Replace",
|
||||
["Rc"] = "Replace",
|
||||
["Rv"] = "V-Replace",
|
||||
["Rx"] = "Replace",
|
||||
["c"] = "Command",
|
||||
["cv"] = "Ex",
|
||||
["ce"] = "Ex",
|
||||
["r"] = "Prompt",
|
||||
["rm"] = "Prompt",
|
||||
["r?"] = "Prompt",
|
||||
["!"] = "Shell",
|
||||
["t"] = "Terminal",
|
||||
}
|
||||
return mode_group[m] or "None"
|
||||
end
|
||||
|
||||
local function get_mode_display_name(m)
|
||||
local mode = {
|
||||
["Normal"] = "[ NRM ]",
|
||||
["O-Pending"] = "[ OTR ]",
|
||||
["Visual"] = "[ VSL ]",
|
||||
["V-Line"] = "[ V·L ]",
|
||||
["V-Block"] = "[ V·B ]",
|
||||
["Select"] = "[ SEL ]",
|
||||
["S-Line"] = "[ S·L ]",
|
||||
["S-Block"] = "[ S·B ]",
|
||||
["Insert"] = "[ INS ]",
|
||||
["Replace"] = "[ RPL ]",
|
||||
["Command"] = "[ CMD ]",
|
||||
["Prompt"] = "[ PMT ]",
|
||||
["Shell"] = "[ SHL ]",
|
||||
["Terminal"] = "[ TRM ]",
|
||||
["None"] = "[ --- ]"
|
||||
}
|
||||
return mode[m]
|
||||
end
|
||||
|
||||
-- get the highlight group for a mode group
|
||||
local function get_mode_color(m)
|
||||
local color = {
|
||||
["Normal"] = "%#NormalMode#",
|
||||
["O-Pending"] = "%#NormalMode#",
|
||||
["Visual"] = "%#VisualMode#",
|
||||
["V-Line"] = "%#VisualMode#",
|
||||
["V-Block"] = "%#VisualMode#",
|
||||
["Select"] = "%#NormalMode#",
|
||||
["S-Line"] = "%#NormalMode#",
|
||||
["S-Block"] = "%#NormalMode#",
|
||||
["Insert"] = "%#InsertMode#",
|
||||
["Replace"] = "%#ReplaceMode#",
|
||||
["Command"] = "%#CommandMode#",
|
||||
["Prompt"] = "%#NormalMode#",
|
||||
["Shell"] = "%#NormalMode#",
|
||||
["Terminal"] = "%#NormalMode#",
|
||||
["None"] = "%#NormalMode#"
|
||||
}
|
||||
return color[m]
|
||||
end
|
||||
|
||||
-- don't return a filename that's too long
|
||||
local function filename()
|
||||
if vim.api.nvim_win_get_width(0) > 80 then
|
||||
return "%F"
|
||||
else
|
||||
return "%t"
|
||||
end
|
||||
end
|
||||
|
||||
-- from https://github.com/nvim-lua/lsp-status.nvim/blob/master/lua/lsp-status/diagnostics.lua
|
||||
local function get_lsp_diagnostics(bufnr)
|
||||
local result = {}
|
||||
local levels = {
|
||||
errors = "Error",
|
||||
warnings = "Warning",
|
||||
info = "Information",
|
||||
hints = "Hint"
|
||||
}
|
||||
|
||||
for k, level in pairs(levels) do
|
||||
result[k] = vim.lsp.diagnostic.get_count(bufnr, level)
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
local function process_diagnostics(prefix, n, hl)
|
||||
if n > 0 then
|
||||
return hl .. prefix .. n
|
||||
else
|
||||
return ""
|
||||
end
|
||||
end
|
||||
|
||||
local function spell_check()
|
||||
if vim.wo.spell then
|
||||
lang = vim.o.spelllang
|
||||
return "[SPELL=" .. lang .. "]"
|
||||
else
|
||||
return ""
|
||||
end
|
||||
end
|
||||
|
||||
local function statusline_focused()
|
||||
local diagnostics = get_lsp_diagnostics()
|
||||
local mode = vim.fn.mode()
|
||||
local mg = get_mode(mode)
|
||||
local accent_color = get_mode_color(mg)
|
||||
|
||||
local left = table.concat {
|
||||
gen_section("%#Buffer#", {"[%n]"}),
|
||||
gen_section(accent_color, {get_mode_display_name(mg)}),
|
||||
gen_section("%#Middle#", {filename()}),
|
||||
gen_section("%#Bottom#", {"%m", "%r"}),
|
||||
gen_section(
|
||||
"%#Alert#",
|
||||
{
|
||||
process_diagnostics("E:", diagnostics.errors, "%#LspDiagnosticsDefaultError#"),
|
||||
process_diagnostics("W:", diagnostics.warnings, "%#LspDiagnosticsDefaultWarning#"),
|
||||
process_diagnostics("I:", diagnostics.info, "%#LspDiagnosticsDefaultInformation#")
|
||||
}
|
||||
)
|
||||
}
|
||||
local right = table.concat {
|
||||
gen_section(
|
||||
"%#Bottom#",
|
||||
{
|
||||
spell_check(),
|
||||
vim.bo.filetype
|
||||
}
|
||||
),
|
||||
gen_section("%#Middle#", {"%03.p%%"}),
|
||||
gen_section("%#Top#", {"-%03.c-"})
|
||||
}
|
||||
|
||||
return table.concat {
|
||||
left,
|
||||
"%#Statusline#",
|
||||
"%=",
|
||||
right
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
local function statusline_not_focused()
|
||||
return table.concat {
|
||||
gen_section("%#StatuslineNF#", {"[%n]"}),
|
||||
gen_section("%#StatuslineNF#", {filename(), "%m"}),
|
||||
"%=",
|
||||
gen_section("%#StatuslineNF#", {"%03.p%%"}),
|
||||
gen_section("%#StatuslineNF#", {"-%03.c-"})
|
||||
}
|
||||
end
|
||||
|
||||
function gen_statusline()
|
||||
if vim.g.statusline_winid == vim.fn.win_getid() then
|
||||
return statusline_focused()
|
||||
else
|
||||
return statusline_not_focused()
|
||||
end
|
||||
end
|
||||
|
||||
vim.o.statusline = "%!luaeval(\"gen_statusline()\")"
|
34
.config/nvim/lua/utils.lua
Normal file
34
.config/nvim/lua/utils.lua
Normal file
@ -0,0 +1,34 @@
|
||||
-- Author : swytch
|
||||
-- Created : Friday Mar 12, 2021 20:07:39 CET
|
||||
-- License : GPLv3
|
||||
-- Description : neovim utils file
|
||||
|
||||
local M = {} -- The module to export
|
||||
local cmd = vim.cmd
|
||||
|
||||
-- augroup helper
|
||||
function M.create_augroup(autocmds, name)
|
||||
cmd("augroup " .. name)
|
||||
cmd("autocmd!")
|
||||
for _, autocmd in ipairs(autocmds) do
|
||||
cmd("autocmd " .. table.concat(autocmd, " "))
|
||||
end
|
||||
cmd("augroup END")
|
||||
end
|
||||
|
||||
-- add a path to the rtp
|
||||
function M.add_rtp(path)
|
||||
local rtp = vim.o.rtp
|
||||
rtp = rtp .. "," .. path
|
||||
end
|
||||
|
||||
-- map a key with optional options
|
||||
function M.map(mode, keys, action, options)
|
||||
options = options or {}
|
||||
vim.api.nvim_set_keymap(mode, keys, action, options)
|
||||
end
|
||||
|
||||
-- Make it accessible everywhere
|
||||
_G.utils = M
|
||||
-- Export the module
|
||||
return M
|
@ -16,6 +16,7 @@ binutils
|
||||
bison
|
||||
capitaine-cursors
|
||||
cdparanoia
|
||||
cmake
|
||||
cronie
|
||||
dash
|
||||
dunst
|
||||
@ -53,7 +54,7 @@ mpv
|
||||
msmtp
|
||||
ncmpcpp
|
||||
neomutt
|
||||
neovim
|
||||
ninja
|
||||
nnn
|
||||
notmuch
|
||||
openvpn
|
||||
@ -80,6 +81,7 @@ texinfo
|
||||
texlive-core
|
||||
texlive-latexextra
|
||||
transmission-cli
|
||||
tree-sitter
|
||||
tremc
|
||||
ttf-dejavu
|
||||
ttf-fira-sans
|
||||
|
Reference in New Issue
Block a user