From 5d7e4b16b15b3f44bc4547c00e4637d4e9790889 Mon Sep 17 00:00:00 2001 From: jdonszelmann Date: Mon, 8 Jul 2024 00:02:53 +0200 Subject: [PATCH] esc to leave code action --- programs/nvim/config.lua | 219 +++++++++++++++++++++++++++++++ programs/nvim/default.nix | 269 ++++---------------------------------- programs/zsh/default.nix | 9 +- 3 files changed, 255 insertions(+), 242 deletions(-) create mode 100644 programs/nvim/config.lua diff --git a/programs/nvim/config.lua b/programs/nvim/config.lua new file mode 100644 index 0000000..486d207 --- /dev/null +++ b/programs/nvim/config.lua @@ -0,0 +1,219 @@ +vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions" + +vim.cmd([[ + let g:astro_typescript = 'enable' +]]) + +require("render-markdown").setup { + latex_converter = '${pkgs.python312Packages.pylatexenc}/bin/latex2text', +} + +local otter = require'otter' +otter.setup{} +vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, { + pattern = {"*.md"}, + callback = function() otter.activate({'python', 'rust', 'c', 'lua', 'bash' }, true, true, nil) end, +}) + +require("onedark").setup { + style = "deep", + highlights = { + ["@comment"] = {fg = '#77B767'} + } +} +require("onedark").load() + +local cmp = require("cmp") +cmp.setup { + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + mapping = cmp.mapping.preset.insert({ + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.abort(), + -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + [''] = cmp.mapping.confirm({ select = true }), + }), + sources = cmp.config.sources({ + { name = 'cmp_tabnine' }, + { name = 'nvim_lsp' }, + { name = "otter" }, + { name = 'path' }, + { name = 'vsnip' }, + { name = 'spell' }, + }, { + { name = 'buffer' }, + }), + comparators = { + -- compare.score_offset, -- not good at all + cmp.config.compare.locality, + cmp.config.compare.recently_used, + cmp.config.compare.score, + cmp.config.compare.offset, + cmp.config.compare.order, + }, +} + +-- key mapping +local keymap = vim.api.nvim_set_keymap +local opts = { noremap = true, silent = true } +local builtin = require('telescope.builtin') + +-- comment +vim.keymap.set("n", "", ":lua require('Comment.api').toggle.linewise.current() j", opts) +vim.keymap.set("v", "", ":lua require('Comment.api').toggle.linewise.current() j", opts) + +-- indent and dedent using tab/shift-tab +vim.keymap.set("n", "", ">>_") +vim.keymap.set("n", "", "<<_") +vim.keymap.set("i", "", "") +vim.keymap.set("v", "", ">gv") +vim.keymap.set("v", "", " wq]] +vim.cmd [[cabbrev x execute "Format sync" x]] +vim.cmd [[cnoreabbrev W w]] +vim.cmd [[cnoreabbrev X execute "Format sync" x]] +vim.cmd [[cnoreabbrev Q q]] +vim.cmd [[nnoremap ; :]] + +local builtin = require('telescope.builtin') + +vim.keymap.set('n', 'ff', builtin.find_files, {}) +vim.keymap.set('n', '', builtin.live_grep, {}) +vim.keymap.set('n', 'fh', builtin.search_history, {}) +vim.keymap.set('n', 'd', "Telescope diagnostics bufnr=0", {}) +vim.keymap.set('n', 'ad', builtin.diagnostics, {}) +vim.keymap.set("n", "]d", vim.diagnostic.goto_next) +vim.keymap.set("n", "[d", vim.diagnostic.goto_prev) + +local gitsigns = require('gitsigns') +vim.keymap.set('n', 'gr', gitsigns.reset_hunk) +vim.keymap.set('n', 'gd', gitsigns.diffthis) + +vim.keymap.set({'o', 'x'}, 'ig', ':Gitsigns select_hunk') +vim.keymap.set('n', 't', ':Neotree toggle') + +-- ============ files and directories ============== + +-- don't change the directory when a file is opened +-- to work more like an IDE +vim.opt.autochdir = false + +-- ============ tabs and indentation ============== +-- automatically indent the next line to the same depth as the current line +vim.opt.autoindent = true +vim.opt.smartindent = true +vim.opt.smarttab = true +-- backspace across lines +vim.opt.backspace = { "indent", "eol", "start" } + +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.expandtab = true + +-- ============ line numbers ============== +-- set number,relativenumber +vim.opt.number = true +vim.opt.relativenumber = true + +-- ============ history ============== +vim.cmd([[ + set undodir=~/.vimdid + set undofile +]]) + +vim.opt.undofile = true + +-- ============ miscelaneous ============== +vim.opt.belloff = "all" + +-- show (usually) hidden characters +vim.opt.list = true +vim.opt.listchars = { + nbsp = "¬", + extends = "»", + precedes = "«", + trail = "·", + tab = ">-", +} + +-- paste and yank use global system clipboard +vim.opt.clipboard = "unnamedplus" + +-- show partial commands entered in the status line +-- (like show "da" when typing "daw") +vim.opt.showcmd = true +vim.opt.mouse = "a" + +vim.opt.modeline = true + +-- highlight the line with the cursor on it +vim.opt.cursorline = true + +-- enable spell checking (todo: plugin?) +vim.opt.spell = false + +vim.opt.wrap = false + +-- better search +vim.cmd([[ + " Better search + set incsearch + set ignorecase + set smartcase + set gdefault + + nnoremap n n:call BlinkNextMatch() + nnoremap N N:call BlinkNextMatch() + + function! BlinkNextMatch() abort + highlight JustMatched ctermfg=white ctermbg=magenta cterm=bold + + let pat = '\c\%#' . @/ + let id = matchadd('JustMatched', pat) + redraw + + exec 'sleep 150m' + call matchdelete(id) + redraw + endfunction + + nnoremap :silent nohecho + nnoremap :silent nohecho + + nnoremap n nzz + nnoremap N Nzz + nnoremap * *zz + nnoremap # #zz + nnoremap g* g*zz + + " very magic by default + nnoremap ? ?\v + nnoremap / /\v + cnoremap %s/ %sm/ +]]) + +keymap('n', "t", ":FloatermToggle myfloat", opts) +keymap('t', "", ":q", opts) + +vim.cmd([[ + let g:suda_smart_edit = 1 + filetype plugin indent on +]]) + diff --git a/programs/nvim/default.nix b/programs/nvim/default.nix index 1bbd534..8eb2768 100644 --- a/programs/nvim/default.nix +++ b/programs/nvim/default.nix @@ -39,11 +39,16 @@ in keymaps = [ { - action = "MCunderCursor"; - key = "m"; - options = { - desc = "Start multicursor"; - }; + key = ""; + action = "Lspsaga rename"; + } + { + key = "o"; + action = "Lspsaga outline"; + } + { + key = "ga"; + action = "Lspsaga code_action"; } ]; @@ -55,34 +60,27 @@ in nixGrammars = true; ensureInstalled = "all"; }; + treesitter-context.enable = true; surround.enable = true; cmp-nvim-lsp.enable = true; lsp-format.enable = true; - fugitive.enable = true; + lspkind.enable = true; + crates-nvim.enable = true; + fidget.enable = true; + cmp.enable = true; + nvim-autopairs.enable = true; auto-session = { enable = true; extraOptions = { auto_save_enabled = true; auto_restore_enabled = true; - # auto_session_use_git_branch = true; - # auto_session_suppress_dirs = [ - # "~/" - # "~/Documents" - # "~/Documents/projects" - # "~/src" - # "~/Downloads" - # "/" - # ]; - auto_session_pre_save_cmds = [ - "Neotree close" - ]; + pre_save_cmds = [ "Neotree close" ]; + post_restore_cmds = [ "Neotree filesystem show" ]; }; }; - lspkind.enable = true; - comment = { enable = true; @@ -97,9 +95,7 @@ in neo-tree = { enable = true; - closeIfLastWindow = true; - window = { position = "right"; width = 30; @@ -164,6 +160,14 @@ in }; }; + lspsaga = { + enable = true; + lightbulb.enable = false; + codeAction.keys = { + quit = ""; + }; + }; + typst-vim = { enable = true; settings = { @@ -235,10 +239,6 @@ in }; }; - # Cargo.toml dependency completion - crates-nvim = { - enable = true; - }; lsp = { enable = true; @@ -306,14 +306,11 @@ in keymaps = { lspBuf = { - "ga" = "code_action"; "fmt" = "format"; "h" = "hover"; - "" = "rename"; }; }; }; - fidget.enable = true; floaterm = { enable = true; opener = "edit"; @@ -337,8 +334,6 @@ in }; }; }; - cmp.enable = true; - nvim-autopairs.enable = true; bufferline = { enable = true; diagnostics = "nvim_lsp"; @@ -350,6 +345,7 @@ in cmp-vsnip cmp-path cmp-spell + cmp-tabnine nvim-web-devicons telescope-ui-select-nvim telescope-fzf-native-nvim @@ -359,216 +355,7 @@ in vim-astro ]; - extraConfigLua = '' - vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions" - - vim.cmd([[ - let g:astro_typescript = 'enable' - ]]) - - require("render-markdown").setup { - latex_converter = '${pkgs.python312Packages.pylatexenc}/bin/latex2text', - } - - local otter = require'otter' - otter.setup{} - vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, { - pattern = {"*.md"}, - callback = function() otter.activate({'python', 'rust', 'c', 'lua', 'bash' }, true, true, nil) end, - }) - - require("onedark").setup { - style = "deep", - highlights = { - ["@comment"] = {fg = '#77B767'} - } - } - require("onedark").load() - - local cmp = require("cmp") - cmp.setup { - snippet = { - expand = function(args) - vim.fn["vsnip#anonymous"](args.body) - end, - }, - window = { - completion = cmp.config.window.bordered(), - documentation = cmp.config.window.bordered(), - }, - mapping = cmp.mapping.preset.insert({ - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.abort(), - -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. - [''] = cmp.mapping.confirm({ select = true }), - }), - sources = cmp.config.sources({ - { name = 'nvim_lsp' }, - { name = "otter" }, - { name = 'path' }, - { name = 'vsnip' }, - { name = 'spell' }, - }, { - { name = 'buffer' }, - }) - } - - -- key mapping - local keymap = vim.api.nvim_set_keymap - local opts = { noremap = true, silent = true } - local builtin = require('telescope.builtin') - - -- comment - vim.keymap.set("n", "", ":lua require('Comment.api').toggle.linewise.current() j", opts) - vim.keymap.set("v", "", ":lua require('Comment.api').toggle.linewise.current() j", opts) - - -- indent and dedent using tab/shift-tab - vim.keymap.set("n", "", ">>_") - vim.keymap.set("n", "", "<<_") - vim.keymap.set("i", "", "") - vim.keymap.set("v", "", ">gv") - vim.keymap.set("v", "", "d', builtin.diagnostics, {}) - vim.keymap.set('n', 'gi', builtin.lsp_implementations, {}) - vim.keymap.set('n', 'gt', builtin.lsp_type_definitions, {}) - - -- format on wq and x and replace X, W and Q with x, w and q - vim.cmd [[cabbrev wq execute "Format sync" wq]] - vim.cmd [[cabbrev x execute "Format sync" x]] - vim.cmd [[cnoreabbrev W w]] - vim.cmd [[cnoreabbrev X execute "Format sync" x]] - vim.cmd [[cnoreabbrev Q q]] - vim.cmd [[nnoremap ; :]] - - local builtin = require('telescope.builtin') - - vim.keymap.set('n', 'ff', builtin.find_files, {}) - vim.keymap.set('n', '', builtin.live_grep, {}) - vim.keymap.set('n', 'fh', builtin.search_history, {}) - vim.keymap.set('n', 'd', "Telescope diagnostics bufnr=0", {}) - vim.keymap.set('n', 'ad', builtin.diagnostics, {}) - - local gitsigns = require('gitsigns') - vim.keymap.set('n', 'gr', gitsigns.reset_hunk) - vim.keymap.set('n', 'gd', gitsigns.diffthis) - - vim.keymap.set({'o', 'x'}, 'ig', ':Gitsigns select_hunk') - vim.keymap.set('n', 't', ':Neotree toggle') - - -- ============ files and directories ============== - - -- don't change the directory when a file is opened - -- to work more like an IDE - vim.opt.autochdir = false - - -- ============ tabs and indentation ============== - -- automatically indent the next line to the same depth as the current line - vim.opt.autoindent = true - vim.opt.smartindent = true - vim.opt.smarttab = true - -- backspace across lines - vim.opt.backspace = { "indent", "eol", "start" } - - vim.opt.tabstop = 4 - vim.opt.softtabstop = 4 - vim.opt.shiftwidth = 4 - vim.opt.expandtab = true - - -- ============ line numbers ============== - -- set number,relativenumber - vim.opt.number = true - vim.opt.relativenumber = true - - -- ============ history ============== - vim.cmd([[ - set undodir=~/.vimdid - set undofile - ]]) - - vim.opt.undofile = true - - -- ============ miscelaneous ============== - vim.opt.belloff = "all" - - -- show (usually) hidden characters - vim.opt.list = true - vim.opt.listchars = { - nbsp = "¬", - extends = "»", - precedes = "«", - trail = "·", - tab = ">-", - } - - -- paste and yank use global system clipboard - vim.opt.clipboard = "unnamedplus" - - -- show partial commands entered in the status line - -- (like show "da" when typing "daw") - vim.opt.showcmd = true - vim.opt.mouse = "a" - - vim.opt.modeline = true - - -- highlight the line with the cursor on it - vim.opt.cursorline = true - - -- enable spell checking (todo: plugin?) - vim.opt.spell = false - - vim.opt.wrap = false - - -- better search - vim.cmd([[ - " Better search - set incsearch - set ignorecase - set smartcase - set gdefault - - nnoremap n n:call BlinkNextMatch() - nnoremap N N:call BlinkNextMatch() - - function! BlinkNextMatch() abort - highlight JustMatched ctermfg=white ctermbg=magenta cterm=bold - - let pat = '\c\%#' . @/ - let id = matchadd('JustMatched', pat) - redraw - - exec 'sleep 150m' - call matchdelete(id) - redraw - endfunction - - nnoremap :silent nohecho - nnoremap :silent nohecho - - nnoremap n nzz - nnoremap N Nzz - nnoremap * *zz - nnoremap # #zz - nnoremap g* g*zz - - " very magic by default - nnoremap ? ?\v - nnoremap / /\v - cnoremap %s/ %sm/ - ]]) - - keymap('n', "t", ":FloatermToggle myfloat", opts) - keymap('t', "", ":q", opts) - - vim.cmd([[ - let g:suda_smart_edit = 1 - filetype plugin indent on - ]]) - ''; + extraConfigLua = builtins.readFile ./config.lua; opts = { lazyredraw = false; diff --git a/programs/zsh/default.nix b/programs/zsh/default.nix index 6fc26c4..f58425d 100644 --- a/programs/zsh/default.nix +++ b/programs/zsh/default.nix @@ -13,6 +13,13 @@ let "lt" = "${pkgs.eza}/bin/eza --long --tree -L 3"; "open" = "${pkgs.xdg-utils}/bin/xdg-open"; "clip" = "${pkgs.wl-clipboard-rs}/wl-copy"; + + "pull" = "${pkgs.git}/bin/git pull"; + "push" = "${pkgs.git}/bin/git push"; + "commit" = "${pkgs.git}/bin/git commit"; + "add" = "${pkgs.git}/bin/git add"; + "patch" = "${pkgs.git}/bin/git add -p"; + "amend" = "${pkgs.git}/bin/git commit --amend"; }; # extracting any compressed format extract = '' @@ -70,7 +77,7 @@ in function rs() { cd "$(${pkgs.custom.t}/bin/t-rs $@ | tail -n 1)" cargo init . --bin --name $(basename "$PWD") - vim . + vim src/main.rs } # path