Merge branch 'dev' into thesis

npm: remove deprecated setting
nvim: remove duplicate settign + set tabstop to 4
        correctly shorten "_XXX" path in statusline
        basic web-dev setup
        format lua files through LSP
        replace path in statusline by "/.../" when useful
This commit is contained in:
David JULIEN 2023-02-23 13:35:18 +01:00
commit 5982a0573e
No known key found for this signature in database
GPG Key ID: 1DD6B2BA6DD78810
13 changed files with 225 additions and 121 deletions

View File

@ -1,4 +1,3 @@
prefix=${XDG_DATA_HOME}/npm prefix=${XDG_DATA_HOME}/npm
cache=${XDG_CACHE_HOME}/npm cache=${XDG_CACHE_HOME}/npm
tmp=${XDG_RUNTIME_DIR}/npm
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js

View File

@ -0,0 +1,14 @@
-- Author : swytch
-- Created : Saturday Feb. 18, 2023 20:41:05 CET
-- License : GPLv3
-- Description : javascript settings file
local format_sync_grp = vim.api.nvim_create_augroup("Format", {})
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*.js",
callback = function()
vim.lsp.buf.format({ timeout_ms = 200 })
end,
group = format_sync_grp,
})

View File

@ -0,0 +1,44 @@
-- Author : swytch
-- Created : Saturday Feb. 18, 2023 21:54:19 CET
-- License : GPLv3
-- Description : markdown settings file
-- Snippets
local ls = require("luasnip")
-- some shorthands...
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local d = ls.dynamic_node
-- Returns a snippet_node wrapped around an insertNode whose initial
-- text value is set to the current date in the desired format.
local date_input = function(args, snip, old_state, fmt)
local fmt = fmt or "%Y-%m-%d"
return sn(nil, i(1, os.date(fmt)))
end
ls.add_snippets("markdown", {
s("date", {
d(1, date_input, {}, { user_args = { "%Y-%m-%d" } }),
}),
s("datep", {
d(1, date_input, {}, { user_args = { "%Y-%m-%d %X %z" } }),
}),
s("/xrpt", {
t("<!--more-->"),
}),
s("bb", {
t({ "**" }),
i(1),
t({ "**" }),
}),
s("ii", {
t({ "*" }),
i(1),
t({ "*" }),
}),
})

View File

@ -36,7 +36,7 @@ vim.keymap.set({ "t" }, "<leader><Esc>",
-- yank and pasting -- yank and pasting
vim.keymap.set({ "n", "x" }, "<leader>y", vim.keymap.set({ "n", "x" }, "<leader>y",
"\"+y", "\"+y",
{ desc = "Yank to clipboard"} { desc = "Yank to clipboard" }
) )
vim.keymap.set("n", "<leader>p", vim.keymap.set("n", "<leader>p",
"\"+P", "\"+P",
@ -95,9 +95,11 @@ vim.keymap.set("n", "<leader>tk",
{ desc = "Search through keymaps" } { desc = "Search through keymaps" }
) )
vim.keymap.set("n", "<leader>tx", vim.keymap.set("n", "<leader>tx",
function() require("telescope.builtin").diagnostics( function()
{ buffnr = 0 } require("telescope.builtin").diagnostics(
) end, { buffnr = 0 }
)
end,
{ desc = "Search through LSP diagnostics" } { desc = "Search through LSP diagnostics" }
) )

View File

@ -0,0 +1,11 @@
-- Author : swytch
-- Created : Sunday Feb. 19, 2023 17:09:46 CET
-- License : GPLv3
-- Description : neovim lsp config file for html-lsp
local M = {}
M.setup = function(opts)
end
return M

View File

@ -11,6 +11,8 @@ local servers = {
"rust_analyzer", "rust_analyzer",
"lua_ls", "lua_ls",
"texlab", "texlab",
"tsserver",
"html",
} }
return { return {
@ -22,7 +24,6 @@ return {
"williamboman/mason-lspconfig.nvim", "williamboman/mason-lspconfig.nvim",
}, },
config = function() config = function()
vim.diagnostic.config({ vim.diagnostic.config({
underline = true, underline = true,
update_in_insert = false, update_in_insert = false,

View File

@ -33,13 +33,13 @@ M.setup = function(opts)
workspace = { workspace = {
-- Make the server aware of Neovim runtime files -- Make the server aware of Neovim runtime files
library = library =
vim.api.nvim_get_runtime_file("", true), vim.api.nvim_get_runtime_file("", true),
checkThirdParty = false, checkThirdParty = false,
}, },
-- Do not send telemetry data containing a randomized but -- Do not send telemetry data containing a randomized but
-- unique identifier -- unique identifier
telemetry = { telemetry = {
enable = false, enable = false,
}, },
}, },
} }

View File

@ -15,4 +15,3 @@ M.setup = function(opts)
end end
return M return M

View File

@ -0,0 +1,12 @@
-- Author : swytch
-- Created : Sunday Feb. 19, 2023 17:12:35 CET
-- License : GPLv3
-- Description : neovim lsp config file for tsserver
local M = {}
M.setup = function(opts)
end
return M

View File

@ -13,6 +13,7 @@ return {
opts = { opts = {
ensure_installed = { ensure_installed = {
"c", "cpp", "lua", "rust", "bash", "vim", "latex", "python", "c", "cpp", "lua", "rust", "bash", "vim", "latex", "python",
"html", "javascript", "json", "markdown"
}, },
highlight = { highlight = {
enable = true, enable = true,

View File

@ -3,63 +3,68 @@
-- License : GPLv3 -- License : GPLv3
-- Description : neovim settings file -- Description : neovim settings file
local opt = vim.opt local opt = vim.opt
local g = vim.g local g = vim.g
-- general -- general
opt.wildignore = { opt.wildignore = {
".git", ".git",
"*.o", "*.class", "*.o", "*.class",
"*.jpg", "*.jpeg", "*.png", "*.jpg", "*.jpeg", "*.png",
"*.pdf", "*.pdf",
"*.zip", "*.gz", "*.rar", "*.tar.xz", "*.zip", "*.gz", "*.rar", "*.tar.xz",
} }
opt.wildmode = { "longest", "full" } opt.wildmode = { "longest", "full" }
opt.wildoptions = "pum" opt.wildoptions = "pum"
-- editor -- editor
opt.lazyredraw = true opt.lazyredraw = true
opt.splitright = true opt.splitright = true
opt.splitbelow = true opt.splitbelow = true
opt.scrolloff = 4 opt.scrolloff = 4
opt.termguicolors = true opt.termguicolors = true
opt.background = "dark" opt.background = "dark"
opt.cursorline = true opt.cursorline = true
opt.colorcolumn = "+1" opt.colorcolumn = "+1"
opt.shortmess = opt.shortmess:append { c = true } opt.shortmess = opt.shortmess:append { c = true }
opt.number = true opt.number = true
opt.relativenumber = true opt.relativenumber = true
opt.signcolumn = "yes" opt.signcolumn = "yes"
opt.listchars = { opt.listchars = {
tab = "<->", tab = "<->",
nbsp = "", nbsp = "",
trail = "·", trail = "·",
extends = ">", extends = ">",
precedes = "<", precedes = "<",
} }
opt.showmatch = true opt.showmatch = true
opt.ignorecase = true opt.ignorecase = true
opt.smartcase = true opt.smartcase = true
opt.inccommand = "split" opt.inccommand = "split"
opt.completeopt = { "menuone", "noselect" } opt.completeopt = { "menuone", "noselect" }
-- statusline -- statusline
opt.laststatus = 2 opt.laststatus = 2
opt.showmode = false opt.showmode = false
-- text, tabs, indents -- text, tabs, indents
opt.textwidth = 79 opt.textwidth = 79
opt.shiftwidth = 8 opt.tabstop = 4
opt.softtabstop = -1 opt.softtabstop = -1
opt.expandtab = true opt.expandtab = true
opt.shiftwidth = 0 opt.shiftwidth = 0
opt.backspace = { "indent", "eol", "start" } opt.backspace = { "indent", "eol", "start" }
-- augroups -- augroups
utils.create_augroup({ utils.create_augroup({
{"BufWritePre", "*", "%s/\\s\\+$//e"} { "BufWritePre", "*", "%s/\\s\\+$//e" }
}, "remove_trailing_whitespaces") }, "remove_trailing_whitespaces")
utils.create_augroup({ utils.create_augroup({
{"BufNewFile,BufRead", "*.mom", "set filetype=groff"}, { "BufNewFile,BufRead", "*.mom", "set filetype=groff" },
{"BufNewFile,BufRead", "*.tex", "set filetype=tex"}, { "BufNewFile,BufRead", "*.tex", "set filetype=tex" },
}, "enforce_filetypes") }, "enforce_filetypes")
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
pattern = { "*.njk" },
callback = function() vim.bo.filetype = "html" end,
})

View File

@ -107,17 +107,34 @@ local function shorten_path(path, max_len)
end end
local segments = vim.split(path, sep) local segments = vim.split(path, sep)
for idx = 1, #segments - 1 do local start = 1
if segments[1] == "~" then
start = start + 1
end
for idx = start, #segments - 1 do
if len <= max_len then if len <= max_len then
break break
end end
local segment = segments[idx] local segment = segments[idx]
local shortened = segment:sub(1, vim.startswith(segment, '.') and 2 or 1) local short_end = 1
if (vim.startswith(segment, '.') or vim.startswith(segment, '_')) then
short_end = 2
end
local shortened = segment:sub(1, short_end)
segments[idx] = shortened segments[idx] = shortened
len = len - (#segment - #shortened) len = len - (#segment - #shortened)
end end
if (len > max_len and #segments > 3) then
while (len > max_len and #segments > 3) do
table.remove(segments, 2)
end
table.insert(segments,2, "...")
end
return table.concat(segments, sep) return table.concat(segments, sep)
end end
@ -169,49 +186,48 @@ local function statusline_focused()
local winwidth = vim.fn.winwidth(0) local winwidth = vim.fn.winwidth(0)
local left = table.concat { local left = table.concat {
gen_section(accent_color, { get_mode_display_name(mg) }), gen_section(accent_color, { get_mode_display_name(mg) }),
gen_section("%#Middle#", { shorten_path(file, winwidth / 3) }), gen_section("%#Middle#", { shorten_path(file, winwidth / 2) }),
gen_section("%#Bottom#", { "%m", "%r" }), gen_section("%#Bottom#", { "%m", "%r" }),
gen_section( gen_section(
"%#Alert#", "%#Alert#",
{ {
process_diagnostics( process_diagnostics(
globals.sign_error .. " ", globals.sign_error .. " ",
diagnostics.error, diagnostics.error,
"%#DiagnosticVirtualTextError#" "%#DiagnosticVirtualTextError#"
), ),
process_diagnostics( process_diagnostics(
globals.sign_warn .. " ", globals.sign_warn .. " ",
diagnostics.warn, diagnostics.warn,
"%#DiagnosticVirtualTextWarn#" "%#DiagnosticVirtualTextWarn#"
), ),
process_diagnostics( process_diagnostics(
globals.sign_info .. " ", globals.sign_info .. " ",
diagnostics.info, diagnostics.info,
"%#DiagnosticVirtualTextInfo#" "%#DiagnosticVirtualTextInfo#"
) )
} }
) )
} }
local right = table.concat { local right = table.concat {
gen_section( gen_section(
"%#Bottom#", "%#Bottom#",
{ {
spell_check(), spell_check(),
vim.bo.filetype vim.bo.filetype
} }
), ),
gen_section("%#Middle#", { "%03.p%%" }), gen_section("%#Middle#", { "%03.p%%" }),
gen_section("%#Top#", { "-%03.c-" }) gen_section("%#Top#", { "-%03.c-" })
} }
return table.concat { return table.concat {
left, left,
"%#Statusline#", "%#Statusline#",
"%=", "%=",
right right
} }
end end
local function statusline_not_focused() local function statusline_not_focused()
@ -219,14 +235,14 @@ local function statusline_not_focused()
local file = vim.fn.expand("#" .. bufnr .. ":p:~") local file = vim.fn.expand("#" .. bufnr .. ":p:~")
local winwidth = vim.fn.winwidth(0) local winwidth = vim.fn.winwidth(0)
return table.concat { return table.concat {
gen_section("%#StatuslineNF#", { gen_section("%#StatuslineNF#", {
shorten_path(file, winwidth / 3), shorten_path(file, winwidth / 2),
"%m" "%m"
}), }),
"%=", "%=",
gen_section("%#StatuslineNF#", { "%03.p%%" }), gen_section("%#StatuslineNF#", { "%03.p%%" }),
gen_section("%#StatuslineNF#", { "-%03.c-" }) gen_section("%#StatuslineNF#", { "-%03.c-" })
} }
end end
function _G.gen_statusline() function _G.gen_statusline()

View File

@ -8,40 +8,40 @@ local cmd = vim.cmd
-- augroup helper -- augroup helper
function M.create_augroup(autocmds, name) function M.create_augroup(autocmds, name)
cmd("augroup " .. name) cmd("augroup " .. name)
cmd("autocmd!") cmd("autocmd!")
for _, autocmd in ipairs(autocmds) do for _, autocmd in ipairs(autocmds) do
cmd("autocmd " .. table.concat(autocmd, " ")) cmd("autocmd " .. table.concat(autocmd, " "))
end end
cmd("augroup END") cmd("augroup END")
end end
-- add a path to the rtp -- add a path to the rtp
function M.add_rtp(path) function M.add_rtp(path)
local rtp = vim.o.rtp local rtp = vim.o.rtp
rtp = rtp .. "," .. path rtp = rtp .. "," .. path
end end
-- see if a file exists -- see if a file exists
function M.file_exists(file) function M.file_exists(file)
local f = io.open(file, "rb") local f = io.open(file, "rb")
if f then f:close() end if f then f:close() end
return f ~= nil return f ~= nil
end end
-- get all lines from a file -- get all lines from a file
-- @return table (empty if the file does not exist) -- @return table (empty if the file does not exist)
function M.lines_from(file) function M.lines_from(file)
if not M.file_exists(file) then return {} end if not M.file_exists(file) then return {} end
local lines = {} local lines = {}
for line in io.lines(file) do for line in io.lines(file) do
lines[#lines] = line lines[#lines] = line
end end
return lines return lines
end end
function M.copy(args) function M.copy(args)
return args[1] return args[1]
end end
-- Make it accessible everywhere -- Make it accessible everywhere