diff --git a/config.yaml b/config.yaml index b2017095..c46a4c86 100644 --- a/config.yaml +++ b/config.yaml @@ -30,9 +30,12 @@ dotfiles: src: .config/nvim/init.lua d_nvim_lua: actions: - - nvim-packer-install + - nvim-packer-install dst: ~/.config/nvim/lua src: .config/nvim/lua + d_nvim_scripts: + dst: ~/.config/nvim/scripts + src: .config/nvim/scripts f_user-dirs.dirs: dst: ~/.config/user-dirs.dirs src: .config/user-dirs.dirs @@ -162,106 +165,107 @@ dotfiles: f_gpg-agent.conf: src: .gnupg/gpg-agent.conf dst: ~/.gnupg/gpg-agent.conf - chmod: '600' + chmod: "600" f_gpg.conf: src: .gnupg/gpg.conf dst: ~/.gnupg/gpg.conf profiles: base: dotfiles: - - d_systemd + - d_systemd terminal: dotfiles: - - f_nvimpager - - f_hushlogin - - f_ripgrep_ignore - - f_ranger_commands.py - - f_rtv.cfg - - f_mailcap - - d_zsh - - f_zshrc - - f_tmux.conf - - f_ranger.conf - - f_ssh.conf - - f_authorized_keys - - d_nvim_lua - - f_nvim_init - - f_gitconfig - - f_alacritty.yml + - f_nvimpager + - f_hushlogin + - f_ripgrep_ignore + - f_ranger_commands.py + - f_rtv.cfg + - f_mailcap + - d_zsh + - f_zshrc + - f_tmux.conf + - f_ranger.conf + - f_ssh.conf + - f_authorized_keys + - d_nvim_lua + - d_nvim_scripts + - f_nvim_init + - f_gitconfig + - f_alacritty.yml email: dotfiles: - - d_neomutt - - d_imapnotify - - f_mbsyncrc - - f_msmtp_config + - d_neomutt + - d_imapnotify + - f_mbsyncrc + - f_msmtp_config media: dotfiles: - - f_beets_config - - f_beets_whitelist - - f_abcde.conf - - d_mpv - - f_youtube-dl_config - - f_mpd.conf - - f_ncmpcpp_bindings - - f_ncmpcpp.conf - - f_libra_config - - f_mpdscribble.conf - - f_mpdris2.conf + - f_beets_config + - f_beets_whitelist + - f_abcde.conf + - d_mpv + - f_youtube-dl_config + - f_mpd.conf + - f_ncmpcpp_bindings + - f_ncmpcpp.conf + - f_libra_config + - f_mpdscribble.conf + - f_mpdris2.conf sway: dotfiles: - - d_sway - - d_waybar - - d_wofi - - f_mako_config - - f_redshift.conf - - f_zathurarc - - f_mimeo_associations.txt - - f_tdesktop_lang.strings - - f_fonts.conf - - f_zprofile + - d_sway + - d_waybar + - d_wofi + - f_mako_config + - f_redshift.conf + - f_zathurarc + - f_mimeo_associations.txt + - f_tdesktop_lang.strings + - f_fonts.conf + - f_zprofile Pacman: dotfiles: - - f_makepkg.conf - - f_paru.conf + - f_makepkg.conf + - f_paru.conf Mirkwood: include: - - base - - terminal - - email - - media - - sway - - Pacman + - base + - terminal + - email + - media + - sway + - Pacman dotfiles: - - f_paru.conf - - f_user-dirs.dirs - - f_gitconfig - - f_foot.ini - - f_gpg-agent.conf - - f_gpg.conf + - f_paru.conf + - f_user-dirs.dirs + - f_gitconfig + - f_foot.ini + - f_gpg-agent.conf + - f_gpg.conf Moria: include: - - terminal - - media - - Pacman + - terminal + - media + - Pacman Gondor: include: - - terminal - - Pacman + - terminal + - Pacman mko-laptop: include: - - terminal - - media + - terminal + - media Edoras: include: - - terminal - - Pacman + - terminal + - Pacman TakamakiPC: include: - - terminal - - Pacman + - terminal + - Pacman localhost: include: - - terminal + - terminal ViiruJaTeippi: include: - - terminal + - terminal diff --git a/home/.config/nvim/init.lua b/home/.config/nvim/init.lua index 70d65e18..586b1780 100644 --- a/home/.config/nvim/init.lua +++ b/home/.config/nvim/init.lua @@ -4,8 +4,10 @@ require 'keybinds' require 'settings' -- Plugin configurations -require 'pluginconf.airline' +require 'pluginconf.lualine' +require 'pluginconf.bufferline' require 'pluginconf.completion' require 'pluginconf.lsp' require 'pluginconf.treesitter' require 'pluginconf.telescope' +-- require 'pluginconf.indent-blankline' diff --git a/home/.config/nvim/lua/pluginconf/airline.lua b/home/.config/nvim/lua/pluginconf/airline.lua deleted file mode 100644 index e399cbe8..00000000 --- a/home/.config/nvim/lua/pluginconf/airline.lua +++ /dev/null @@ -1,10 +0,0 @@ -local g = vim.g -local o = vim.o - -o.showmode = false -o.laststatus = 2 -g["airline#extensions#tabline#enabled"] = 1 -g.airline_powerline_fonts = 1 -g.airline_section_warning = '' -g.airline_section_error = '' -g.airline_theme = 'onedark' diff --git a/home/.config/nvim/lua/pluginconf/bufferline.lua b/home/.config/nvim/lua/pluginconf/bufferline.lua new file mode 100644 index 00000000..1c295dc9 --- /dev/null +++ b/home/.config/nvim/lua/pluginconf/bufferline.lua @@ -0,0 +1 @@ +require("bufferline").setup{} diff --git a/home/.config/nvim/lua/pluginconf/indent-blankline.lua b/home/.config/nvim/lua/pluginconf/indent-blankline.lua new file mode 100644 index 00000000..a46bc830 --- /dev/null +++ b/home/.config/nvim/lua/pluginconf/indent-blankline.lua @@ -0,0 +1 @@ +require('indent_blankline').setup {filetype_exclude = {'help'}} diff --git a/home/.config/nvim/lua/pluginconf/lsp.lua b/home/.config/nvim/lua/pluginconf/lsp.lua index 16010017..0c8d629b 100644 --- a/home/.config/nvim/lua/pluginconf/lsp.lua +++ b/home/.config/nvim/lua/pluginconf/lsp.lua @@ -1,105 +1,143 @@ +-- List of servers to install +local required_servers = { + "css", "html", "java", "json", "lua", "rust", "yaml", "dockerfile", "latex", + "bash", "typescript", "php" +} + -- keymaps local on_attach = function(client, bufnr) - local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end - local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + local function buf_set_keymap(...) + vim.api.nvim_buf_set_keymap(bufnr, ...) + end + local function buf_set_option(...) + vim.api.nvim_buf_set_option(bufnr, ...) + end - buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') - -- Mappings. - local opts = { noremap=true, silent=true } - buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) - buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) - buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) - buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) - buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) - buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) - buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) - buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) - buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) - buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) - buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) - buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) - buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) - buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) - buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + -- Mappings. + local opts = {noremap = true, silent = true} + buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', + opts) + buf_set_keymap('n', 'wa', + 'lua vim.lsp.buf.add_workspace_folder()', opts) + buf_set_keymap('n', 'wr', + 'lua vim.lsp.buf.remove_workspace_folder()', opts) + buf_set_keymap('n', 'wl', + 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', + opts) + buf_set_keymap('n', 'D', + 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'e', + 'lua vim.lsp.diagnostic.show_line_diagnostics()', + opts) + buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', + opts) + buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', + opts) + buf_set_keymap('n', 'q', + 'lua vim.lsp.diagnostic.set_loclist()', opts) - -- Set some keybinds conditional on server capabilities - if client.resolved_capabilities.document_formatting then - buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) - elseif client.resolved_capabilities.document_range_formatting then - buf_set_keymap("n", "f", "lua vim.lsp.buf.range_formatting()", opts) - end + -- Set some keybinds conditional on server capabilities + if client.resolved_capabilities.document_formatting then + buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", + opts) + elseif client.resolved_capabilities.document_range_formatting then + buf_set_keymap("n", "f", + "lua vim.lsp.buf.range_formatting()", opts) + end - -- Set autocommands conditional on server_capabilities - if client.resolved_capabilities.document_highlight then - vim.api.nvim_exec([[ + -- Set autocommands conditional on server_capabilities + if client.resolved_capabilities.document_highlight then + vim.api.nvim_exec([[ augroup lsp_document_highlight autocmd! * autocmd CursorHold lua vim.lsp.buf.document_highlight() autocmd CursorMoved lua vim.lsp.buf.clear_references() augroup END ]], false) - end + end end --- + -- Configure lua language server for neovim development local lua_settings = { - Lua = { - runtime = { - -- LuaJIT in the case of Neovim - version = 'LuaJIT', - path = vim.split(package.path, ';'), - }, - diagnostics = { - -- Get the language server to recognize the `vim` global - globals = {'vim'}, - }, - workspace = { - -- Make the server aware of Neovim runtime files - library = { - [vim.fn.expand('$VIMRUNTIME/lua')] = true, - [vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true, - }, - }, - } + Lua = { + runtime = { + -- LuaJIT in the case of Neovim + version = 'LuaJIT', + path = vim.split(package.path, ';') + }, + diagnostics = { + -- Get the language server to recognize the `vim` global + globals = {'vim'} + }, + workspace = { + -- Make the server aware of Neovim runtime files + library = { + [vim.fn.expand('$VIMRUNTIME/lua')] = true, + [vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true + } + } + } } -- config that activates keymaps and enables snippet support local function make_config() - local capabilities = vim .lsp.protocol.make_client_capabilities() - capabilities.textDocument.completion.completionItem.snippetSupport = true - return { - -- enable snippet support - capabilities = capabilities, - -- map buffer local keybindings when the language server attaches - on_attach = on_attach, -} + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities.textDocument.completion.completionItem.snippetSupport = true + return { + -- enable snippet support + capabilities = capabilities, + -- map buffer local keybindings when the language server attaches + on_attach = on_attach + } end -- lsp-install local function setup_servers() - require'lspinstall'.setup() + require'lspinstall'.setup() - -- get all installed servers - local servers = require'lspinstall'.installed_servers() + -- get all installed servers + local servers = require'lspinstall'.installed_servers() - for _, server in pairs(servers) do - local config = make_config() + -- install server if not already installed but required + -- for _, server in pairs(required_servers) do + -- if not vim.tbl_contains(servers) then + -- require'lspinstall'.install_server(server) + -- end + -- end - -- language specific config - if server == "lua" then - config.settings = lua_settings - end + -- Refresh servers list in case of newly installed servers + servers = require'lspinstall'.installed_servers() - -- setup lspconfig for all servers - require'lspconfig'[server].setup(config) - end + for _, server in pairs(servers) do + local config = make_config() + + -- language specific config + if server == "lua" then config.settings = lua_settings end + require'lspconfig'[server].setup(config) + + -- Java LSP client is started by the plugin nvim-jdtls + if server == "java" then return end + + end end setup_servers() +require('jdtls').start_or_attach({ + cmd = {'java-lsp.sh'}, + root_dir = require('jdtls.setup').find_root({'gradle.build', 'pom.xml'}) +}) + -- Automatically reload after `:LspInstall ` so we don't have to restart neovim -require'lspinstall'.post_install_hook = function () - setup_servers() -- reload installed servers - vim.cmd("bufdo e") -- this triggers the FileType autocmd that starts the server +require'lspinstall'.post_install_hook = function() + setup_servers() -- reload installed servers + vim.cmd("bufdo e") -- this triggers the FileType autocmd that starts the server end diff --git a/home/.config/nvim/lua/pluginconf/lualine.lua b/home/.config/nvim/lua/pluginconf/lualine.lua new file mode 100644 index 00000000..2479044b --- /dev/null +++ b/home/.config/nvim/lua/pluginconf/lualine.lua @@ -0,0 +1,3 @@ +require'lualine'.setup { + options = {theme = 'onedark'}, +} diff --git a/home/.config/nvim/lua/pluginmanager.lua b/home/.config/nvim/lua/pluginmanager.lua index 4550e3c7..9b559cbf 100644 --- a/home/.config/nvim/lua/pluginmanager.lua +++ b/home/.config/nvim/lua/pluginmanager.lua @@ -20,10 +20,22 @@ require('packer').startup(function() use {'wbthomason/packer.nvim', opt = true} -- Colorscheme - use 'joshdick/onedark.vim' + use 'monsonjeremy/onedark.nvim' - -- Custom status and tabline - use 'vim-airline/vim-airline' + -- Statusline + use { + 'hoob3rt/lualine.nvim', + requires = {'kyazdani42/nvim-web-devicons', opt = true} + } + + -- Tabline/bufferline + use { + 'akinsho/nvim-bufferline.lua', + requires = 'kyazdani42/nvim-web-devicons' + } + + -- Indent characters + --use "lukas-reineke/indent-blankline.nvim" -- Tree explorer use {'kyazdani42/nvim-tree.lua', requires = 'kyazdani42/nvim-web-devicons'} @@ -46,6 +58,9 @@ require('packer').startup(function() -- Install LSP executables use 'kabouzeid/nvim-lspinstall' + -- Extensions for eclipse.jdt.ls + use 'mfussenegger/nvim-jdtls' + -- Completion framework use 'nvim-lua/completion-nvim' @@ -63,6 +78,12 @@ require('packer').startup(function() -- Formatter plugin use 'sbdchd/neoformat' + -- Make editing passwords safer + use { + 'https://git.zx2c4.com/password-store', + rtp = 'contrib/vim/redact_pass.vim' + } + end) -- Install plugins if packer was not installed diff --git a/home/.config/nvim/lua/settings.lua b/home/.config/nvim/lua/settings.lua index 0c622ffd..4965e6ce 100644 --- a/home/.config/nvim/lua/settings.lua +++ b/home/.config/nvim/lua/settings.lua @@ -5,7 +5,7 @@ local cmd = vim.cmd ------ Appearance ------ -- Set colorscheme -cmd 'colorscheme onedark' +require('onedark').setup() -- True colors o.termguicolors = true @@ -19,6 +19,10 @@ o.cmdheight = 1 -- Always show signcolumn o.signcolumn = 'yes' +-- Blinking cursor +cmd 'set guicursor=i:ver1' +cmd 'set guicursor+=a:blinkon1' + -- Gutter and cursoline bg transparent cmd 'highlight CursorLineNr guibg=transparent' cmd 'highlight SignColumn guibg=transparent' diff --git a/home/.config/nvim/scripts/java-lsp.sh b/home/.config/nvim/scripts/java-lsp.sh new file mode 100755 index 00000000..876383a1 --- /dev/null +++ b/home/.config/nvim/scripts/java-lsp.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +JAR="$HOME/.local/share/nvim/lspinstall/java/plugins/org.eclipse.equinox.launcher_*.jar" +GRADLE_HOME=$HOME/gradle /usr/lib/jvm/default/bin/java \ + -Declipse.application=org.eclipse.jdt.ls.core.id1 \ + -Dosgi.bundles.defaultStartLevel=4 \ + -Declipse.product=org.eclipse.jdt.ls.core.product \ + -Dlog.protocol=true \ + -Dlog.level=ALL \ + -Xms1g \ + -Xmx2G \ + -jar $(echo "$JAR") \ + -configuration "$HOME/.local/share/nvim/lspinstall/java/config_linux" \ + -data "${1:-$HOME/workspace}" \ + --add-modules=ALL-SYSTEM \ + --add-opens java.base/java.util=ALL-UNNAMED \ + --add-opens java.base/java.lang=ALL-UNNAMED