From ca178b641d7e3c061f597f865fc9ec2d81c7cf15 Mon Sep 17 00:00:00 2001 From: RiverMatsumoto Date: Sat, 3 Jan 2026 23:59:33 -1000 Subject: [PATCH] neoscroll and keybindings --- init.lua | 109 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 83 insertions(+), 26 deletions(-) diff --git a/init.lua b/init.lua index 523c4fda..d19f6cb9 100644 --- a/init.lua +++ b/init.lua @@ -2,7 +2,7 @@ vim.g.maplocalleader = ' ' vim.g.mapleader = ' ' -- install deps if need to -require("bootstrap.pacman") +require 'bootstrap.pacman' -- ========================= -- Lazy.nvim bootstrap @@ -34,6 +34,61 @@ require('lazy').setup({ { 'numToStr/Comment.nvim', opts = {} }, + { + 'karb94/neoscroll.nvim', + opts = {}, + config = function() + local neoscroll = require 'neoscroll' + + neoscroll.setup { + -- remove / from defaults so your custom maps win + mappings = { + '', + '', + '', + '', + 'zt', + 'zz', + 'zb', + }, + hide_cursor = true, -- Hide cursor while scrolling + stop_eof = true, -- Stop at when scrolling downwards + respect_scrolloff = true, -- Stop scrolling when the cursor reaches the scrolloff margin of the file + cursor_scrolls_alone = true, -- The cursor will keep on scrolling even if the window cannot scroll further + duration_multiplier = 0.3, -- Global duration multiplier + easing = 'quadratic', -- Default easing function + pre_hook = function(info) + if info == 'center' then + vim.cmd 'normal! M' + end + end, + post_hook = nil, + } + local function near_file_edge() + local line = vim.api.nvim_win_get_cursor(0)[1] + local last = vim.api.nvim_buf_line_count(0) + local so = vim.wo.scrolloff + return line <= so + 1 or line >= last - so + end + + local modes = { 'n', 'v', 'x' } + + vim.keymap.set(modes, '', function() + neoscroll.ctrl_d { duration = 300 } + if not near_file_edge() then + vim.cmd 'normal! M' + end + end) + + vim.keymap.set(modes, '', function() + neoscroll.ctrl_u { duration = 300 } + if not near_file_edge() then + vim.cmd 'normal! M' + end + end) + end, + }, + { 'nvim-treesitter/nvim-treesitter', lazy = false, @@ -53,7 +108,9 @@ require('lazy').setup({ 'yaml', 'toml', }, - highlight = { enable = true }, + highlight = { + enable = true, + }, }, }, @@ -126,17 +183,6 @@ require('lazy').setup({ end, }, - -- Colors - { - 'folke/tokyonight.nvim', - lazy = false, - priority = 1000, - config = function() - vim.cmd.colorscheme 'gruvbox-material' - vim.cmd.hi 'Comment gui=none' - end, - }, - { 'sphamba/smear-cursor.nvim', opts = { @@ -191,7 +237,7 @@ require('lazy').setup({ system_open = function(state) local node = state.tree:get_node() local path = node:get_id() -- absolute path - vim.fn.jobstart({ 'imv', path }, { detach = true }) + vim.fn.jobstart({ 'xdg-open', path }, { detach = true }) end, }, window = { @@ -794,6 +840,7 @@ require('lazy').setup({ return { 'isort', 'black' } end, yaml = { 'prettier' }, + rust = { 'rustfmt' }, ['*'] = { 'injected' }, }, ignore_errors = true, @@ -1465,11 +1512,11 @@ vim.api.nvim_create_autocmd({ 'BufLeave', 'InsertEnter', 'FocusLost' }, { -- Keymaps (treesitter keymaps removed) -- ========================= --- scrolling / search centering -vim.keymap.set('n', '', 'zz', { desc = 'Scroll down and center cursor' }) -vim.keymap.set('n', '', 'zz', { desc = 'Scroll up and center cursor' }) -vim.keymap.set('n', 'n', 'nzzzv', { desc = 'Next search result and center' }) -vim.keymap.set('n', 'N', 'Nzzzv', { desc = 'Previous search result and center' }) +-- scrolling / search centering, disabled for neoscroll +-- vim.keymap.set('n', '', 'zz', { desc = 'Scroll down and center cursor' }) +-- vim.keymap.set('n', '', 'zz', { desc = 'Scroll up and center cursor' }) +-- vim.keymap.set('n', 'n', 'nzzzv', { desc = 'Next search result and center' }) +-- vim.keymap.set('n', 'N', 'Nzzzv', { desc = 'Previous search result and center' }) -- move selected lines vim.keymap.set('v', 'J', ":m '>+1gv=gv", { desc = 'Move selection down' }) @@ -1497,6 +1544,7 @@ vim.keymap.set('n', 'de', vim.diagnostic.enable, { desc = 'Enable diagno vim.keymap.set('n', 'cw', ':cd %:p:h:pwd', { desc = 'cd to current file directory' }) vim.keymap.set('n', '', '', { noremap = true, desc = 'Jump forward in jumplist' }) vim.keymap.set('n', '', ':write', { desc = 'Save file' }) +vim.keymap.set('i', '', ':write', { desc = 'Save file' }) vim.keymap.set('n', 'cd', ':ToggleAutoComplete', { desc = 'Toggle autocomplete' }) vim.keymap.set('n', 'ce', ':ToggleAutoComplete', { desc = 'Toggle autocomplete (alias)' }) @@ -1615,10 +1663,6 @@ vim.keymap.set('n', '', 'wqa') vim.keymap.set('n', 'sv', 'vsplit') vim.keymap.set('n', 'sh', 'split') --- signature help -vim.api.nvim_set_keymap('i', '', 'lua vim.lsp.buf.signature_help()', { noremap = true, silent = true }) -vim.api.nvim_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', { noremap = true, silent = true }) - -- toggle neotree local function toggle_neotree() local manager = require 'neo-tree.sources.manager' @@ -1650,8 +1694,21 @@ vim.api.nvim_set_keymap('i', '', '', { noremap = true }) vim.keymap.set('n', 'ga', ':Telescope coauthors') -- install treesitter parsers -require('nvim-treesitter').install { 'c', 'rust', 'gdscript', 'c#' } +require('nvim-treesitter').install { 'c', 'rust', 'gdscript', 'c_sharp' } --- LSP basics +-- ======== LSP settings =========== +-- signature help +vim.api.nvim_set_keymap('i', '', 'lua vim.lsp.buf.signature_help()', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('i', '', 'lua vim.lsp.buf.hover()', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', '', 'lua vim.lsp.buf.hover()', { noremap = true, silent = true }) +-- code actions (normal + insert) +vim.keymap.set({ 'n', 'i' }, '', vim.lsp.buf.code_action, { silent = true, desc = 'Code Action' }) +-- rename bindings vim.keymap.set('n', '', vim.lsp.buf.rename, { silent = true, desc = 'LSP: Rename' }) -vim.keymap.set('n', '', vim.lsp.buf.references, { silent = true, desc = 'LSP: References' }) +vim.keymap.set('n', '', vim.lsp.buf.definition, { silent = true, desc = 'LSP: Go To Defintion' }) + +-- put after colorscheme load +vim.api.nvim_set_hl(0, '@lsp.type.typeAlias', { link = 'Type' }) +vim.api.nvim_set_hl(0, '@lsp.type.type', { link = 'Type' }) +vim.api.nvim_set_hl(0, '@lsp.type.struct', { link = 'Type' })