diff --git a/foot/.config/foot/foot.ini b/foot/.config/foot/foot.ini index 63eb66c..1b3973e 100644 --- a/foot/.config/foot/foot.ini +++ b/foot/.config/foot/foot.ini @@ -9,8 +9,8 @@ color = 000000 ffff00 foreground = b2b2b2 background = 080808 -# selection-foreground = 080808 -# selection-background = b2ceee +selection-foreground = 080808 +selection-background = b2ceee regular0 = 323437 regular1 = ff5454 diff --git a/nvim.lua/.config/nvim/.gitignore b/nvim.lua/.config/nvim/.gitignore new file mode 100644 index 0000000..8cb205e --- /dev/null +++ b/nvim.lua/.config/nvim/.gitignore @@ -0,0 +1 @@ +plugin diff --git a/nvim.lua/.config/nvim/init.lua b/nvim.lua/.config/nvim/init.lua index 2d26a74..8bfe098 100644 --- a/nvim.lua/.config/nvim/init.lua +++ b/nvim.lua/.config/nvim/init.lua @@ -1,80 +1,86 @@ -require'plugins' +-- set leader and locleader before setting any maps +vim.g.mapleader = ' ' +vim.g.maplocalleader = '\\' + +-- set up packer and all the plugins +require('plugins') + +-- old config still to luaify +vim.cmd([[ +" filetype magic +autocmd BufRead,BufNewFile *.nasm set filetype=nasm + +" langmap russian +set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz + +" Incrementally show effects of :s, :smagic, :snomagic +set icm=split +"set signcolumn=yes + +set number +set nobackup nowritebackup +set noswapfile --- LSP --- nix -if vim.fn.executable('rnix-lsp') == 1 then - require'lspconfig'.rnix.setup{ - autostart = false, - } -end +" autosmartident +set ai +set si +set tabstop=4 +set shiftwidth=4 +set softtabstop=4 +set expandtab --- Rust -if vim.fn.executable('rust-analyzer') == 1 then - local rt = require'rust-tools' +" arrows for visual line navigation +imap gk +imap gj +nmap gk +nmap gj +vmap gk +vmap gj - rt.setup({ - tools = { - inlay_hints = { - auto = true, - only_current_line = true, - }, - }, - server = { - autostart = false, - on_attach = function(_, bufnr) - vim.keymap.set("n", "h", rt.hover_actions.hover_actions, { buffer = bufnr }) - vim.keymap.set("n", "a", rt.code_action_group.code_action_group, { buffer = bufnr }) - end, - }, - }) +set history=999 +set undolevels=999 +" Copy to clipboard +vnoremap y "+y +nnoremap Y "+yg_ +nnoremap y "+y +nnoremap yy "+yy +" Paste from clipboard +nnoremap p "+p +nnoremap P "+P +vnoremap p "+p +vnoremap P "+P -end +"set updatetime=107 +" disable modelines +set nomodeline --- require'completion' -local cmp = require'cmp' -cmp.setup({ - snippet = { - expand = function(args) - require'snippy'.expand_snippet(args.body) - end - }, +" change tab completion to more bash-like +set wildmode=longest:full,list:full - mapping = cmp.mapping.preset.insert({ - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.abort(), - [''] = cmp.mapping.confirm({ - behavior = cmp.ConfirmBehavior.Insert, - select = true, - }) - }), +" U is quite useless +nnoremap U :echo "NOPE!" - sources = cmp.config.sources({ - { name = 'nvim_lsp' }, - { name = 'snippy' }, -- For snippy users. - { name = 'buffer' }, - { name = 'path' }, - { name = 'nvim_lua' }, - }), +" help is quite annoying when you miss esc +map +imap - formatting = { - format = function(entry, vim_item) - vim_item.kind = string.format('%s', vim_item.kind) - vim_item.menu = ({ - nvim_lsp = '[LSP]', - buffer = '[B]', - path = '[F]', - snippy = '[S]', - nvim_lua = '[vim]', - })[entry.source.name] +" do not conceal stuff +set conceallevel=0 +set foldlevel=999 - return vim_item - end, - } -}) +" Whitespace highlight +highlight RedundantSpaces ctermbg=red guibg=red +match RedundantSpaces /\s\+\%#\@'] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), - [''] = cmp.mapping.confirm({ + [''] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true, }) diff --git a/nvim.lua/.config/nvim/lua/lsp/nix.lua b/nvim.lua/.config/nvim/lua/lsp/nix.lua deleted file mode 100644 index b3f61e7..0000000 --- a/nvim.lua/.config/nvim/lua/lsp/nix.lua +++ /dev/null @@ -1,3 +0,0 @@ -require'lspconfig'.rnix.setup{ - autostart = false, -} diff --git a/nvim.lua/.config/nvim/lua/lsp/rust.lua b/nvim.lua/.config/nvim/lua/lsp/rust.lua deleted file mode 100644 index 28edc8b..0000000 --- a/nvim.lua/.config/nvim/lua/lsp/rust.lua +++ /dev/null @@ -1,32 +0,0 @@ --- nvim_lsp object -local nvim_lsp = require'lspconfig' - -local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities.textDocument.completion.completionItem.snippetSupport = true - --- Enable rust_analyzer -nvim_lsp.rust_analyzer.setup({ - autostart=false, - capabilities=capabilities, - -- on_attach is a callback called when the language server attachs to the buffer - -- on_attach = on_attach, - settings = { - -- to enable rust-analyzer settings visit: - -- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc - ["rust-analyzer"] = { - -- enable clippy diagnostics on save - checkOnSave = { - command = "clippy" - }, - } - } -}) - --- Enable diagnostics -vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with( - vim.lsp.diagnostic.on_publish_diagnostics, { - virtual_text = false, - signs = true, - update_in_insert = true, - } -) diff --git a/nvim.lua/.config/nvim/lua/lsp_setup.lua b/nvim.lua/.config/nvim/lua/lsp_setup.lua new file mode 100644 index 0000000..be4c6d3 --- /dev/null +++ b/nvim.lua/.config/nvim/lua/lsp_setup.lua @@ -0,0 +1,66 @@ +local nvim_lsp = require'lspconfig' +local cmp_lsp = require'cmp_nvim_lsp' + +-- General LSP config +-- Limit capabilities to advertised by cmp +local capabilities = cmp_lsp.default_capabilities() + +-- default lsp config +-- Mappings. +-- See `:help vim.diagnostic.*` for documentation on any of the below functions +local opts = { noremap=true, silent=true } +vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) +vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) + +-- Use an on_attach function to only map the following keys +-- after the language server attaches to the current buffer +local on_attach = function(client, bufnr) + -- Enable completion triggered by + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local bufopts = { noremap=true, silent=true, buffer=bufnr } + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) + vim.keymap.set('n', 'f', function() vim.lsp.buf.format { async = true } end, bufopts) +end + +local lsp_flags = { + -- This is the default in Nvim 0.7+ + debounce_text_changes = 150, +} +-- always show sign column +vim.cmd([[set signcolumn=yes]]) + +-- Setting up servers per language +-- Nix +nvim_lsp['rnix'].setup{ + on_attach = on_attach, + flags = lsp_flags, + capabilities = capabilities, +} + +-- Rust: using rust tools package +local rt = require("rust-tools") +rt.setup({ + server = { + on_attach = on_attach, + flags = lsp_flags, + capabilities = capabilities, + }, +}) diff --git a/nvim.lua/.config/nvim/lua/lualine_setup.lua b/nvim.lua/.config/nvim/lua/lualine_setup.lua new file mode 100644 index 0000000..473126e --- /dev/null +++ b/nvim.lua/.config/nvim/lua/lualine_setup.lua @@ -0,0 +1,11 @@ +-- this now handled by the lualine +vim.cmd([[set noshowmode]]) + +return require('lualine').setup { + options = { + icons_enabled = true, + theme = 'moonfly', + -- section_separators = '', + -- component_seaparators = '', + } +} diff --git a/nvim.lua/.config/nvim/lua/plugins.lua b/nvim.lua/.config/nvim/lua/plugins.lua index 853ce45..4cee978 100644 --- a/nvim.lua/.config/nvim/lua/plugins.lua +++ b/nvim.lua/.config/nvim/lua/plugins.lua @@ -1,59 +1,115 @@ local ensure_packer = function() - 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', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) - vim.cmd [[packadd packer.nvim]] - return true - end - return false + 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', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) + vim.cmd [[packadd packer.nvim]] + return true + end + return false +end + +local setup_fzf = function() + vim.api.nvim_set_keymap('n', '', "lua require('fzf-lua').files()", { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'f', "lua require('fzf-lua').git_files()", { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'b', "lua require('fzf-lua').buffers()", { noremap = true, silent = true }) end local packer_bootstrap = ensure_packer() return require('packer').startup(function(use) - use 'wbthomason/packer.nvim' + use 'wbthomason/packer.nvim' - -- insert images into markdown automagically - use 'ferrine/md-img-paste.vim' + -- insert images into markdown automagically + use { + 'ferrine/md-img-paste.vim', + ft = { 'markdown' }, + config = vim.cmd([[ + " insert images into markdown automagically + autocmd FileType markdown nmap p :call mdip#MarkdownClipboardImage() + let g:mdip_imgdir = 'static' + let g:mdip_imgname = 'image' + ]]) + } - --Better syntax - use 'rust-lang/rust.vim' - use 'LnL7/vim-nix' - use 'cespare/vim-toml' - use 'JuliaEditorSupport/julia-vim' - use 'lervag/vimtex' - use 'lepture/vim-jinja' - use 'neomutt/neomutt.vim' - use 'godlygeek/tabular' - use 'preservim/vim-markdown' + --Better syntax + use 'rust-lang/rust.vim' + use 'LnL7/vim-nix' + use 'cespare/vim-toml' + use 'JuliaEditorSupport/julia-vim' + use { + 'lervag/vimtex', + ft = { 'tex' }, + -- do not conceal stuff + config = vim.cmd([[ let g:tex_conceal = '' ]]), + } + use 'lepture/vim-jinja' + use 'neomutt/neomutt.vim' + use 'godlygeek/tabular' + use 'preservim/vim-markdown' - -- pretty bits - use 'bluz71/vim-moonfly-colors' - use 'vim-airline/vim-airline' + -- pretty bits + use { + 'bluz71/vim-moonfly-colors', + config = vim.cmd([[ set termguicolors + colorscheme moonfly ]]), + } + use { + 'nvim-lualine/lualine.nvim', + requires = { 'kyazdani42/nvim-web-devicons', opt = true }, + config = function() + require('lualine_setup') + end, + } - -- neovim VSCode edition - use 'neovim/nvim-lspconfig' - use 'simrat39/rust-tools.nvim' - -- completion - use 'hrsh7th/nvim-cmp' - use 'hrsh7th/cmp-nvim-lsp' - use 'hrsh7th/cmp-buffer' - use 'hrsh7th/cmp-path' - use 'hrsh7th/cmp-nvim-lua' - -- just because cmp requires snippet - use 'dcampos/nvim-snippy' - use 'dcampos/cmp-snippy' + -- Git + use 'tpope/vim-fugitive' - -- navigating files - use 'junegunn/fzf' - use 'junegunn/fzf.vim' + -- Nifty stuff + use 'tpope/vim-surround' + use { + 'ibhagwan/fzf-lua', + config = setup_fzf(), + } - -- Automatically set up your configuration after cloning packer.nvim - -- Put this at the end after all plugins - if packer_bootstrap then - require('packer').sync() - end + -- completion + use { + 'hrsh7th/nvim-cmp', + requires = { + -- completion sources + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-buffer', + 'hrsh7th/cmp-path', + 'hrsh7th/cmp-nvim-lua', + -- snippets (hard requirement by cmp) + 'dcampos/nvim-snippy', + 'dcampos/cmp-snippy' + }, + config = function() + require('completion') + end, + } + + -- neovim VSCode edition + use { + 'neovim/nvim-lspconfig', + ft = { + 'rust', + 'nix', + -- 'python', + }, + after = { 'nvim-cmp' }, + requires = { 'simrat39/rust-tools.nvim' }, + config = function() + require'lsp_setup' + end, + } + + -- Automatically set up your configuration after cloning packer.nvim + -- Put this at the end after all plugins + if packer_bootstrap then + require('packer').sync() + end end)