diff --git a/.gitignore b/.gitignore index 1f92fe2..ed0b0f7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ old ~ after spell +.msc/ + diff --git a/coc-settings.json b/coc-settings.json index 4e70a34..0866469 100644 --- a/coc-settings.json +++ b/coc-settings.json @@ -1,6 +1,7 @@ { "suggest.enablePreselect": false, "suggest.noselect": true, + "diagnostic.displayByAle": true, "languageserver": { "ccls": { "command": "ccls", @@ -31,16 +32,23 @@ ], "filetypes": ["julia"] }, - "lua": { - "command": "lua-language-server", - "args": [], - "rootPatterns": [".git"], - "filetypes": ["lua"] + "haxe": { + "command": "node", + "args": ["/mnt/3tb/git/haxe-language-server/bin/server.js"], + "filetypes": ["haxe"], + "trace.server": "verbose", + "initializationOptions": { + "displayArguments": ["build.hxml"] + }, + "settings": { + "haxe.executable": "haxe" + } } }, "d.servedPath": "/usr/local/bin/serve-d", "d.dcdServerPath": "/home/eiko/.local/share/code-d/bin/dcd-server", "d.dcdClientPath": "/home/eiko/.local/share/code-d/bin/dcd-client", + "d.dubBuildType": "unittest", "dscanner.ignoredKeys": [ "dscanner.suspicious.unused_parameter", "dscanner.style.long_line", diff --git a/init.lua b/init.lua index b787a0f..f55f371 100644 --- a/init.lua +++ b/init.lua @@ -1,8 +1,30 @@ +local vim = _G["vim"] package.path = package.path .. (";%s/.config/nvim/?.lua"):format(os.getenv("HOME")) -require "plugins" -require "options" -require "keys" -require "theme" +local gerr +local function check(ok, err) + if not ok then + gerr = err + end +end + +check(pcall(require, "plugins")) +check(pcall(require, "options")) +check(pcall(require, "keys")) +check(pcall(require, "theme")) + +local function loadSyntaxFiles(dir) + local files = vim.fn.globpath(dir, "*.vim", 0, 1) + for _, file in ipairs(files) do + vim.cmd("source " .. file) + end +end +local syntaxDir = vim.fn.stdpath("config") .. "/syntax" + +loadSyntaxFiles(syntaxDir) + +if gerr then + error(gerr) +end diff --git a/keys.lua b/keys.lua index 4b576a8..cac9d22 100644 --- a/keys.lua +++ b/keys.lua @@ -1,17 +1,22 @@ +local vim = _G["vim"] -vim.api.nvim_set_keymap("n", "", ":m .+1==", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("n", "", ":m .-2==", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("v", "", ":m '>+1gv=gv", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("v", "", ":m '<-2gv=gv", { noremap = true, silent = true }) +vim.api.nvim_set_keymap("n", "", ":m .+1==", { noremap = true, silent = true }) +vim.api.nvim_set_keymap("n", "", ":m .-2==", { noremap = true, silent = true }) +vim.api.nvim_set_keymap("v", "", ":m '>+1gv=gv", { noremap = true, silent = true }) +vim.api.nvim_set_keymap("v", "", ":m '<-2gv=gv", { noremap = true, silent = true }) vim.cmd([[ +nmap (ale_previous_wrap) +nmap (ale_next_wrap) + digraphs de 916 nnoremap h :noh nnoremap y "+y nnoremap y% gg"+yG -nnoremap t :tabe +nnoremap t :tabe ]] .. [[ + nnoremap T :tabe nnoremap o :tabe . vnoremap eas :'<,'>EasyAlign \ @@ -20,28 +25,37 @@ vnoremap eac :'<,'>EasyAlign , vnoremap eaas :'<,'>EasyAlign *\ vnoremap eaae :'<,'>EasyAlign *= vnoremap eaac :'<,'>EasyAlign *, -map w noremap :w inoremap :wa +nnoremap :tabmove -1 +nnoremap :tabmove +1 + noremap gtn :tabnew -noremap gto :tabedit +noremap gto :tabedit noremap gtc :tabclose -noremap gT -noremap gt -noremap :tabm - -noremap :tabm + -nnoremap 1gt -nnoremap 2gt -nnoremap 3gt -nnoremap 4gt -nnoremap 5gt -nnoremap 6gt -nnoremap 7gt -nnoremap 8gt -nnoremap 9gt -nnoremap 10gt +noremap gT +noremap gt +nnoremap 1gt +nnoremap 2gt +nnoremap 3gt +nnoremap 4gt +nnoremap 5gt +nnoremap 6gt +nnoremap 7gt +nnoremap 8gt +nnoremap 9gt +nnoremap 10gt + +nnoremap :Telescope buffers +nnoremap BufferPin + +nnoremap bb BufferOrderByBufferNumber +nnoremap bn BufferOrderByName +nnoremap bd BufferOrderByDirectory +nnoremap bl BufferOrderByLanguage +nnoremap bw BufferOrderByWindowNumber nnoremap ZZ :q nnoremap ZQ :q @@ -55,6 +69,5 @@ vnoremap >gv vnoremap < >gv -"nnoremap gt :NvimTreeOpen ]]) diff --git a/options.lua b/options.lua index f45dd35..414c7b5 100644 --- a/options.lua +++ b/options.lua @@ -1,3 +1,5 @@ +local vim = _G["vim"] + vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 @@ -31,19 +33,27 @@ vim.opt.swapfile = false vim.opt.cmdheight = 2 vim.opt.updatetime = 300 vim.opt.mouse = "" +vim.opt.showtabline = 2 +vim.opt.viminfo:append("f1") vim.cmd([[ -autocmd BufRead,BufNewFile * set autoindent noexpandtab tabstop=4 shiftwidth=4 +autocmd BufRead,BufNewFile * if &filetype !=# 'TelescopePrompt' && &filetype !=# 'TelescopeResults' | set autoindent noexpandtab tabstop=4 shiftwidth=4 + +augroup remember_folds + autocmd! + autocmd BufWinLeave * if &filetype !=# 'TelescopePrompt' && &filetype !=# 'TelescopeResults' && bufname('%') != '' | mkview + autocmd BufWinEnter * if &filetype !=# 'TelescopePrompt' && &filetype !=# 'TelescopeResults' && bufname('%') != '' | silent! loadview +augroup END ]]) -vim.api.nvim_create_augroup("CaddyFileType", { clear = true }) -vim.api.nvim_create_autocmd({ "BufNewFile", "BufRead" }, { - pattern = "/etc/caddy/conf.d/*", - callback = function() - vim.opt_local.filetype = "caddyfile" - end, - group = "CaddyFileType", -}) +-- vim.api.nvim_create_augroup("CaddyFileType", { clear = true }) +-- vim.api.nvim_create_autocmd({ "BufNewFile", "BufRead" }, { +-- pattern = "/etc/caddy/conf.d/*", +-- callback = function() +-- vim.opt_local.filetype = "caddyfile" +-- end, +-- group = "CaddyFileType", +-- }) diff --git a/plugins.lua b/plugins.lua index 445fa0d..d8a542c 100644 --- a/plugins.lua +++ b/plugins.lua @@ -1,17 +1,18 @@ +local vim = _G["vim"] +local util = require("util") local Plug = vim.fn["plug#"] vim.call("plug#begin") - Plug("RRethy/vim-illuminate") + Plug("neoclide/coc.nvim", { ["do"] = vim.fn["coc#util#install()"]}) + Plug("nvim-treesitter/nvim-treesitter", { ["do"] = vim.fn["TSUpdate"]}) Plug("Shirk/vim-gas") Plug("Sirsireesh/vim-dlang-phobos-highlighter") Plug("airblade/vim-gitgutter") Plug("frazrepo/vim-rainbow") - Plug("vim-airline/vim-airline") - Plug("vim-airline/vim-airline-themes") + Plug("nvim-lualine/lualine.nvim") Plug("junegunn/vim-easy-align") Plug("junegunn/vim-peekaboo") Plug("michaeljsmith/vim-indent-object") - Plug("neoclide/coc.nvim", { ['do'] = vim.fn['coc#util#install()']}) Plug("sheerun/vim-polyglot") Plug("tikhomirov/vim-glsl") Plug("tomasr/molokai") @@ -21,27 +22,216 @@ vim.call("plug#begin") Plug("tpope/vim-surround") Plug("tpope/vim-fugitive") Plug("tbastos/vim-lua") - Plug("godlygeek/tabular") Plug("yuezk/vim-js") Plug("ctrlpvim/ctrlp.vim") Plug("ryanoasis/vim-webdevicons") Plug("kylelaker/riscv.vim") Plug("dart-lang/dart-vim-plugin") Plug("JuliaEditorSupport/julia-vim") + Plug("godlygeek/tabular") + Plug("preservim/vim-markdown") + Plug("dense-analysis/ale") + Plug("nvim-tree/nvim-web-devicons") + Plug("lewis6991/gitsigns.nvim") + Plug("BurntSushi/ripgrep") + Plug("nvim-lua/plenary.nvim") + Plug("nvim-telescope/telescope.nvim", { tag = "master" }) + Plug("nanozuki/tabby.nvim") + Plug("petertriho/nvim-scrollbar") + Plug("neovim/nvim-lspconfig") vim.call("plug#end") -vim.g["airline#extensions#tabline#enabled"] = 0 -vim.g["airline#extensions#tabline#show_close_button"] = 0 -vim.g["airline#extensions#tabline#tabs_label"] = "" -vim.g["airline#extensions#tabline#buffers_label"] = "" -vim.g["airline#extensions#tabline#formatter"] = "unique_tail_improved" -vim.g.airline_theme = "bubblegum" -vim.g.airline_powerline_fonts = 1 -vim.g.airline_skip_empty_sections = 1 -vim.g.airline_section_z = "%l:%c/%L %p%%" +require("lualine").setup({ + options = { + theme = "modus-vivendi", + }, +}) + +require("nvim-treesitter.configs").setup({ + ensure_installed = "all", + sync_install = false, + auto_install = true, + sign_column_always = true, + disable_lsp = true, + use_neovim_diagnostics_api = true, + highlight = { + enable = true, + additional_vim_regex_highlighting = true, + }, + indent = { + enable = false + } +}) +vim.wo.foldmethod = "expr" +vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" + +-- local lspconfig = require('lspconfig') + +--lspconfig.lua_ls.setup { +-- settings = { +-- Lua = { +-- runtime = { +-- -- Tell the language server which version of Lua you're using +-- -- (most likely LuaJIT in the case of Neovim) +-- version = 'LuaJIT', +-- }, +-- diagnostics = { +-- -- Get the language server to recognize the `vim` global +-- globals = { +-- 'vim', +-- 'require' +-- }, +-- }, +-- workspace = { +-- -- Make the server aware of Neovim runtime files +-- library = vim.api.nvim_get_runtime_file("", true), +-- }, +-- -- Do not send telemetry data containing a randomized but unique identifier +-- telemetry = { +-- enable = false, +-- }, +-- }, +-- }, +--} + +local devicons = require("nvim-web-devicons") +devicons.setup({ + override = { + sdl = { + color = "#4f88dd", + name = "SDLang", + icon = "󰈮", + }, + d = { + color = "#fa645a", + name = "D", + icon = "" + }, + }; +}) + +-- require("ale").setup({ +-- completion_enabled = false, +-- maximum_file_size = 1024 * 1024 * 8, +-- fix_on_save = true, +-- -- linters_explicit = true, +-- -- linters = {}, +-- linters_disable = { +-- "dls", "dmd", "luacheck", "lua_language_server", "luac", "selene" +-- }, +-- linters_ignore = { +-- "dls", "dmd", "luacheck", "lua_language_server", "luac", "selene" +-- }, +-- fixers = { +-- ["*"] = "trim_whitespace", +-- markdown = "prettier", +-- json = "prettier", +-- }, +-- lua_language_server_config = { + +-- } +-- }) + +-- vim.g["g:airline#extensions#ale#enabled"] = 1 +-- vim.g["airline#extensions#tabline#enabled"] = 0 +-- vim.g["airline#extensions#tabline#show_close_button"] = 0 +-- vim.g["airline#extensions#tabline#tabs_label"] = "" +-- vim.g["airline#extensions#tabline#buffers_label"] = "" +-- vim.g["airline#extensions#tabline#formatter"] = "unique_tail_improved" +-- vim.g.airline_theme = "bubblegum" +-- vim.g.airline_powerline_fonts = 1 +-- vim.g.airline_skip_empty_sections = 1 +-- vim.g.airline_section_z = "%l:%c/%L %p%%" vim.g.rainbow_guifgs = { "#dddddd", "#bbbbbb", "#cccccc", "#aaaaaa" } +-- require("barbar").setup({ +-- highlight_inactive_file_icons = true, +-- clickable = false, +-- maximum_padding = 0, +-- semantic_letters = true, +-- icons = { +-- inactive = { button = "" }, +-- current = { button = "" }, +-- }, +-- }) + +do + local theme = { + fill = { bg = "#333333", fg = "#b2b2b2" }, + head = "TabLine", + tab = "TabLine", + win = "TabLine", + tail = "TabLine", + } + require("tabby").setup({ + line = function(line) + return { + { " ", hl = { bg = theme.fill.bg, fg = theme.fill.fg } }, + line.tabs().foreach(function(tab, i) + local hl = { bg = theme.fill.bg, fg = theme.fill.fg } + local buf = tab.current_win().buf() + local _, typeColour = devicons.get_icon_color(buf.name()) + typeColour = typeColour or hl.fg + typeColour = util.lightenColour(typeColour, 100) + if tab.is_current() then + hl.fg = hl.bg + hl.bg = typeColour + else + hl.fg = typeColour + if i % 2 == 1 then + hl.bg = "#252525" + end + end + return { + line.sep("", hl, theme.fill), + #buf.file_icon() > 0 and buf.file_icon() or "", + { tab.name(), hl = { fg = hl.fg, bg = hl.bg, style = buf.is_changed() and "underline" or "" } }, + line.sep("", hl, theme.fill), + hl = hl, + margin = " ", + } + end), + line.spacer(), + hl = theme.fill, + } + end, + }) +end + +local builtin = require('telescope.builtin') +vim.keymap.set("n", ",ff", builtin.find_files, { desc = "Telescope find files" }) +vim.keymap.set("n", ",fg", builtin.live_grep, { desc = "Telescope live grep" }) +vim.keymap.set("n", ",fh", builtin.help_tags, { desc = "Telescope help tags" }) +vim.keymap.set("n", ",fb", builtin.current_buffer_fuzzy_find, { desc = "Telescope fzf" }) + + +local actions = require("telescope.actions") +require("telescope").setup({ + pickers = { + buffers = { + mappings = { + i = { [""] = actions.select_tab_drop } + } + }, + find_files = { + mappings = { + i = { [""] = actions.select_tab_drop } + } + }, + git_files = { + mappings = { + i = { [""] = actions.select_tab_drop } + } + }, + old_files = { + mappings = { + i = { [""] = actions.select_tab_drop } + } + }, + }, +}) + do -- COC -- Some servers have issues with backup files, see #649 vim.opt.backup = false @@ -49,7 +239,7 @@ do -- COC -- Having longer updatetime (default is 4000 ms = 4s) leads to noticeable -- delays and poor user experience - vim.opt.updatetime = 300 + vim.opt.updatetime = 500 -- Always show the signcolumn, otherwise it would shift the text each time -- diagnostics appeared/became resolved @@ -82,8 +272,8 @@ do -- COC -- Use `[g` and `]g` to navigate diagnostics -- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list - keyset("n", "[g", "(coc-diagnostic-prev)", {silent = true}) - keyset("n", "]g", "(coc-diagnostic-next)", {silent = true}) + keyset("n", "ge", "(coc-diagnostic-prev)", {silent = true}) + keyset("n", "gE", "(coc-diagnostic-next)", {silent = true}) -- GoTo code navigation keyset("n", "gd", "(coc-definition)", {silent = true}) @@ -142,7 +332,7 @@ do -- COC -- Apply codeAction to the selected region -- Example: `aap` for current paragraph - local opts = {silent = true, nowait = true} + opts = {silent = true, nowait = true} keyset("x", "a", "(coc-codeaction-selected)", opts) keyset("n", "a", "(coc-codeaction-selected)", opts) @@ -229,3 +419,5 @@ do -- COC keyset("n", "p", ":CocListResume", opts) end +require("scrollbar").setup() + diff --git a/theme.lua b/theme.lua index 45eb24b..d689490 100644 --- a/theme.lua +++ b/theme.lua @@ -1,3 +1,5 @@ +local vim = _G["vim"] + vim.cmd([[ function! AdaptColorscheme() @@ -48,7 +50,5 @@ highlight GitGutterDelete guifg=#ff2222 ctermfg=1 highlight GitGutterChange guifg=#bbbb00 ctermfg=3 highlight GitGutterAdd guifg=#009900 ctermfg=2 -let g:lightline = {'colorscheme': 'wombat'} - ]]) diff --git a/util.lua b/util.lua new file mode 100644 index 0000000..648d80f --- /dev/null +++ b/util.lua @@ -0,0 +1,27 @@ + +local util = {} + +function util.hexTorgb(str) + if str:sub(1, 1) == "#" then + str = str:sub(2, -1) + end + local r = tonumber(str:sub(1, 2), 16) + local g = tonumber(str:sub(3, 4), 16) + local b = tonumber(str:sub(5, 6), 16) + return r, g, b +end + +function util.rgbToHex(r, g, b) + return ("#%02x%02x%02x"):format(r, g, b) +end + +function util.lightenColour(c, n) + local r, g, b = util.hexTorgb(c) + r = math.min(math.max(r, n*1.1), 0xff) + g = math.max(g, n) + b = math.max(b, n*0.9) + return util.rgbToHex(r, g, b) +end + +return util +