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:
David JULIEN 2021-05-19 00:53:42 +02:00
parent bb099a294e
commit 8ec80d78f5
25 changed files with 377 additions and 1 deletions

11
.config/nvim/init.lua Normal file
View 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
View 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>")

View 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)

View 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")

View 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()\")"

View 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

View File

@ -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