diff options
| author | triethyl <triethylammonium@pm.me> | 2025-07-06 22:21:45 -0400 |
|---|---|---|
| committer | triethyl <triethylammonium@pm.me> | 2025-07-06 22:21:45 -0400 |
| commit | 546752feb6576be92fe421be1998217aa7d657ff (patch) | |
| tree | 4ac774569cdbbffa6720b85a8130ea1e23529cf3 /pkgs | |
| parent | 3df44ee18a6c1b36278cbde8499f357e0a040411 (diff) | |
working on nvim setup
Former-commit-id: a43ab0499838d262445d8af9cb954a84e259bb35
Diffstat (limited to 'pkgs')
| -rw-r--r-- | pkgs/custom-neovim/config/init.lua | 18 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/autocommands.lua | 36 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/mappings.lua | 31 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/options.lua | 67 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/plugins/lspconfig.lua | 91 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/plugins/lualine.lua | 1 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/plugins/presence.lua | 3 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/plugins/tabby.lua | 2 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/plugins/telescope.lua | 1 | ||||
| -rw-r--r-- | pkgs/custom-neovim/config/lua/utilities.lua | 5 | ||||
| -rw-r--r-- | pkgs/custom-neovim/default.nix | 1 | ||||
| -rw-r--r-- | pkgs/custom-neovim/flake.nix | 3 |
12 files changed, 256 insertions, 3 deletions
diff --git a/pkgs/custom-neovim/config/init.lua b/pkgs/custom-neovim/config/init.lua index 8b13789..365e231 100644 --- a/pkgs/custom-neovim/config/init.lua +++ b/pkgs/custom-neovim/config/init.lua @@ -1 +1,19 @@ +-- Require utilities. +require("utilities") +-- Require config parts. +require("options") +require("mappings") +require("autocommands") + +-- Require plugin configs. +-- UI Plugins: +require("plugins.lualine") +require("plugins.tabby") +require("plugins.telescope") + +-- LSP Plugins: +require("plugins.lspconfig") + +-- Misc Plugins: +require("plugins.presence") diff --git a/pkgs/custom-neovim/config/lua/autocommands.lua b/pkgs/custom-neovim/config/lua/autocommands.lua index e69de29..85a58c6 100644 --- a/pkgs/custom-neovim/config/lua/autocommands.lua +++ b/pkgs/custom-neovim/config/lua/autocommands.lua @@ -0,0 +1,36 @@ +-- Autocommands + +-- Use relative line number in normal mode and absolute in insert mode +vim.opt.number = true +local numbertoggle = vim.api.nvim_create_augroup("numbertoggle", {}) +vim.api.nvim_create_autocmd( + { "BufEnter", "FocusGained", "InsertLeave", "WinEnter", "CmdlineLeave" }, + { + group = numbertoggle, + callback = function() + if vim.opt.number and vim.api.nvim_get_mode() ~= "i" then + vim.opt.relativenumber = true + end + end, + } +) + +vim.api.nvim_create_autocmd( + { "BufLeave", "FocusLost", "InsertEnter", "WinLeave", "CmdlineEnter" }, + { + group = numbertoggle, + callback = function() + if vim.opt.number then + vim.opt.relativenumber = false + vim.cmd("redraw") + end + end, + } +) + + -- start terminal in insert mode +vim.api.nvim_create_autocmd("TermOpen", { + callback = function() + vim.cmd "startinsert!" + end, +}) diff --git a/pkgs/custom-neovim/config/lua/mappings.lua b/pkgs/custom-neovim/config/lua/mappings.lua index e69de29..efb1e85 100644 --- a/pkgs/custom-neovim/config/lua/mappings.lua +++ b/pkgs/custom-neovim/config/lua/mappings.lua @@ -0,0 +1,31 @@ +-- Keymap function. +local keymap = function(mode, key, desc, action) + vim.keymap.set(mode, key, action, {noremap = true, silent = true, desc = desc}) +end + +local mapkey = utils.mapkey + +-- Map the leader key. +vim.g.mapleader = ' ' + +vim.keymap.set("n", "<C-c>", "gcc", {noremap = true, silent = true}) + +-- Pickers +keymap("n", "<leader>f", "Open file picker", ":Pick files<cr>") +keymap("n", "<leader>c", "Open recent file picker", ":Pick oldfiles<cr>") +keymap("n", "<leader>e", "Open file explorer", ":Pick explorer<cr>") +keymap("n", "<leader>b", "Open buffer picker", ":Pick buffers<cr>") +keymap("n", "<leader>/", "Open live grep picker", ":Pick grep_live<cr>") +keymap("n", "<leader>\\", "Open command palette", ":Pick commands<cr>") +keymap("n", "<leader>?", "Open help picker", ":Pick help<cr>") +keymap("n", "<leader>'", "Open last picker", ":Pick resume<cr>") + +-- Tabs +keymap("n", "<leader>t", "Manage tabs", "") +keymap("n", "<leader>tt", "Open new tab", ":tabnew<cr>") +keymap("n", "<leader>tq", "Close tab", ":tabclose<cr>") +keymap("n", "<leader>tn", "Go to next tab", ":tabnext<cr>") +keymap("n", "<leader>tp", "Go to previous tab", ":tabprev<cr>") + +-- QOL Keys +keymap("t", "<Esc><Esc>", "Exit terminal insert mode", "<C-\\><C-n>") diff --git a/pkgs/custom-neovim/config/lua/options.lua b/pkgs/custom-neovim/config/lua/options.lua index e69de29..ae6fb0a 100644 --- a/pkgs/custom-neovim/config/lua/options.lua +++ b/pkgs/custom-neovim/config/lua/options.lua @@ -0,0 +1,67 @@ +-- General Settings +vim.o.winborder = 'rounded' +vim.o.showmode = false +vim.o.icm = 'split' +vim.o.cia = 'abbr,kind,menu' +vim.o.mouse = "" +vim.o.number = true -- set numbered lines +vim.o.scrolloff = 4 -- minimal number of screen lines to keep above and below the cursor +vim.o.signcolumn = "yes" -- always show the sign column, otherwise it would shift the text each time +vim.o.clipboard = "unnamedplus" -- use system clipboard +vim.o.sessionoptions = 'curdir,folds,globals,help,tabpages,terminal,winsize' -- Things to save with the session. +vim.keymap.set("c", "<cr>", function() + if vim.fn.pumvisible() == 1 then return '<c-y>' end + return '<cr>' +end, { expr = true }) -- Make enter complete command. + +-- Indention +local indent = 2 +vim.o.autoindent = true -- auto indentation +vim.o.expandtab = true -- convert tabs to spaces +vim.o.shiftwidth = indent -- the number of spaces inserted for each indentation +vim.o.smartindent = true -- make indenting smarter +vim.o.softtabstop = indent -- when hitting <BS>, pretend like a tab is removed, even if spaces +vim.o.tabstop = indent -- insert 2 spaces for a tab +vim.o.shiftround = true -- use multiple of shiftwidth when indenting with "<" and ">" + +-- Backups +vim.o.backup = false -- create a backup file +vim.o.swapfile = false -- creates a swapfile +vim.o.writebackup = false -- if a file is being edited by another program, it is not allowed to be edited + +-- Search +vim.o.hlsearch = true -- highlight all matches on previous search pattern +vim.o.ignorecase = true -- ignore case in search patterns +vim.o.smartcase = true -- smart case + +-- Folding +vim.o.foldmethod = "expr" +vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()" -- Set folder to treesitter. +vim.o.foldlevel = 99 -- Don't fold initially. +vim.o.foldnestmax = 4 -- Don't fold if more than 4 folds deep. +vim.o.foldtext = "" -- Color text in folds. + +-- Set Colorscheme +vim.cmd.colorscheme("oxocarbon") +vim.o.termguicolors = true + +-- Neovide +if vim.g.neovide then + vim.o.guifont = "CodeNewRoman Nerd Font:h12" + vim.g.neovide_scale_factor = 0.8 + + -- Zoom keymaps. + local change_scale_factor = function(delta) + vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta + end + vim.keymap.set("n", "<C-=>", function() + change_scale_factor(1.1) + end) + vim.keymap.set("n", "<C-->", function() + change_scale_factor(1/1.1) + end) + + -- Standard terminal emulator keymaps. + vim.api.nvim_set_keymap("c", "<sc-v>", "<C-R>+", { noremap = true }) -- Paste in command mode. + vim.api.nvim_set_keymap('t', '<sc-v>', '<C-\\><C-n>"+Pi', {noremap = true}) -- Paste in terminal mode. +end diff --git a/pkgs/custom-neovim/config/lua/plugins/lspconfig.lua b/pkgs/custom-neovim/config/lua/plugins/lspconfig.lua new file mode 100644 index 0000000..98b34f2 --- /dev/null +++ b/pkgs/custom-neovim/config/lua/plugins/lspconfig.lua @@ -0,0 +1,91 @@ +-- vim.keymap.set('n', '<space>d', vim.diagnostic.setloclist, {desc = "Add buffer diagnostics to the location list."}) + +-- Disable semantic tokens to stop weird highlighting. +vim.api.nvim_create_autocmd('LspAttach', { + callback = function(ev) + local client = vim.lsp.get_client_by_id(ev.data.client_id) + if client then + client.server_capabilities.semanticTokensProvider = nil + end + end +}) + +-- Use LspAttach autocommand to only map the following keys +-- after the language server attaches to the current buffer +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('UserLspConfig', {}), + callback = function(ev) + -- Enable completion triggered by <c-x><c-o> + vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' + + -- Buffer local mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + + local keymap = function(mode, key, desc, action) + vim.keymap.set(mode, key, action, {noremap = true, silent = true, desc = desc}) + end + + keymap('n', 'gD', "Go to declaration", vim.lsp.buf.declaration) + keymap('n', 'gd', "Go to definition", vim.lsp.buf.definition) + keymap('n', 'gy', "Go to type definition", vim.lsp.buf.type_definition) + keymap('n', 'gi', "Go to implementation", vim.lsp.buf.implementation) + keymap('n', '<M-k>', "Signature Help", vim.lsp.buf.signature_help) + keymap('i', '<M-k>', "Signature Help", vim.lsp.buf.signature_help) + keymap('n', "<space>o", "Manage LSP workspace", "") + keymap('n', '<space>oa', "Add Workspace Folder", vim.lsp.buf.add_workspace_folder) + keymap('n', '<space>or', "Remove Workspace Folder", vim.lsp.buf.remove_workspace_folder) + keymap('n', '<space>ol', "List Workspace Folders", function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end) + keymap('n', '<space>r', "Rename Symbol", vim.lsp.buf.rename) + keymap("n", "<leader>s", "Open symbol picker", [[:Pick lsp scope="document_symbol"<cr>]]) + keymap("n", "<leader>S", "Open workspace symbol picker", [[:Pick lsp scope="workspace_symbol"<cr>]]) + + -- LSP Pickers + keymap({'n', 'v'}, "<leader>a", "Perform code action", require("actions-preview").code_actions) + keymap("n", "<leader>D", "Open workspace diagnostic picker", ":Pick diagnostic<cr>") + keymap("n", "<leader>d", "Open diagnostic picker", [[:Pick diagnostic scope="current"<cr>]]) + + keymap('n', 'gr', "Buffer References", vim.lsp.buf.references) + keymap('n', '<localleader>f', "Format Buffer", function() + vim.lsp.buf.format { async = true } + end) + end, +}) + +local lspconfig = require('lspconfig') + +-- Configure individual lsps +lspconfig.nil_ls.setup {} +lspconfig.lua_ls.setup { + on_init = function(client) + local path = client.workspace_folders[1].name + if vim.loop.fs_stat(path..'/.luarc.json') or vim.loop.fs_stat(path..'/.luarc.jsonc') then + return + end + + client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, { + runtime = { + -- Tell the language server which version of Lua you're using + -- (most likely LuaJIT in the case of Neovim) + version = 'LuaJIT' + }, + -- Make the server aware of Neovim runtime files + workspace = { + checkThirdParty = false, + library = { + vim.env.VIMRUNTIME, + -- Depending on the usage, you might want to add additional paths here. + "${3rd}/luv/library" + -- "${3rd}/busted/library", + } + -- or pull in all of 'runtimepath'. NOTE: this is a lot slower + -- library = vim.api.nvim_get_runtime_file("", true) + } + }) + end, + settings = { + Lua = {} + } +} +lspconfig.marksman.setup {} diff --git a/pkgs/custom-neovim/config/lua/plugins/lualine.lua b/pkgs/custom-neovim/config/lua/plugins/lualine.lua new file mode 100644 index 0000000..9814cae --- /dev/null +++ b/pkgs/custom-neovim/config/lua/plugins/lualine.lua @@ -0,0 +1 @@ +require("lualine").setup() diff --git a/pkgs/custom-neovim/config/lua/plugins/presence.lua b/pkgs/custom-neovim/config/lua/plugins/presence.lua new file mode 100644 index 0000000..7ffb57f --- /dev/null +++ b/pkgs/custom-neovim/config/lua/plugins/presence.lua @@ -0,0 +1,3 @@ +require('presence').setup({ + neovim_image_text = "Neovim Text Editor", +}) diff --git a/pkgs/custom-neovim/config/lua/plugins/tabby.lua b/pkgs/custom-neovim/config/lua/plugins/tabby.lua new file mode 100644 index 0000000..2ad03ed --- /dev/null +++ b/pkgs/custom-neovim/config/lua/plugins/tabby.lua @@ -0,0 +1,2 @@ +vim.o.showtabline = 1 +require('tabby').setup() diff --git a/pkgs/custom-neovim/config/lua/plugins/telescope.lua b/pkgs/custom-neovim/config/lua/plugins/telescope.lua new file mode 100644 index 0000000..be3366b --- /dev/null +++ b/pkgs/custom-neovim/config/lua/plugins/telescope.lua @@ -0,0 +1 @@ +require("telescope").setup() diff --git a/pkgs/custom-neovim/config/lua/utilities.lua b/pkgs/custom-neovim/config/lua/utilities.lua index e69de29..fe86dd6 100644 --- a/pkgs/custom-neovim/config/lua/utilities.lua +++ b/pkgs/custom-neovim/config/lua/utilities.lua @@ -0,0 +1,5 @@ +utils = {} + +utils.mapkey = function(mode, key, desc, action) + vim.keymap.set(mode, key, action, {noremap = true, silent = true, desc = desc}) +end diff --git a/pkgs/custom-neovim/default.nix b/pkgs/custom-neovim/default.nix index 28d448a..06ad3b2 100644 --- a/pkgs/custom-neovim/default.nix +++ b/pkgs/custom-neovim/default.nix @@ -17,6 +17,7 @@ inputs.mnw.lib.wrap pkgs { nvim-treesitter.withAllGrammars # All treesitter grammars. # tabby-nvim # Tab bar. # friendly-snippets # Extra snippets. + lualine-nvim # Colorschemes oxocarbon-nvim # IBM Carbon themes. diff --git a/pkgs/custom-neovim/flake.nix b/pkgs/custom-neovim/flake.nix index e421c25..dfb4eb9 100644 --- a/pkgs/custom-neovim/flake.nix +++ b/pkgs/custom-neovim/flake.nix @@ -23,9 +23,6 @@ packages.default = pkgs.callPackage ./default.nix {inherit inputs;}; devShells.default = pkgs.mkShell { packages = with pkgs; [ - fennel - fennel-ls - luaPackages.readline ]; }; } |
