|
| 1 | +{ pkgs, ... }: |
| 2 | +{ |
| 3 | + programs.neovim.configure.customRC = '' |
| 4 | + lua << EOF |
| 5 | + vim.opt.clipboard = "unnamedplus" |
| 6 | + vim.opt.cursorline = true |
| 7 | + vim.opt.expandtab = true |
| 8 | + vim.opt.mouse = "a" |
| 9 | + vim.opt.number = true |
| 10 | + vim.opt.relativenumber = true |
| 11 | + vim.opt.scrolloff = 8 |
| 12 | + vim.opt.shiftwidth = 2 |
| 13 | + vim.opt.signcolumn = "yes" |
| 14 | + vim.opt.splitbelow = true |
| 15 | + vim.opt.splitright = true |
| 16 | + vim.opt.swapfile = false |
| 17 | + vim.opt.tabstop = 2 |
| 18 | + vim.opt.termguicolors = true |
| 19 | + vim.opt.undodir = vim.fn.stdpath("cache") .. "/undo" |
| 20 | + vim.opt.undofile = true |
| 21 | + vim.opt.updatetime = 250 |
| 22 | +
|
| 23 | + vim.cmd.colorscheme("default") |
| 24 | + vim.g.mapleader = " " |
| 25 | +
|
| 26 | + local builtin = require("telescope.builtin") |
| 27 | + local cmp = require("cmp") |
| 28 | + local luasnip = require("luasnip") |
| 29 | +
|
| 30 | + require("Comment").setup({}) |
| 31 | + require("gitsigns").setup({}) |
| 32 | + require("nvim-autopairs").setup({}) |
| 33 | + require("which-key").setup({}) |
| 34 | +
|
| 35 | + vim.lsp.config.bashls = { cmd = { "bash-language-server" } } |
| 36 | + vim.lsp.config.dockerls = { cmd = { "dockerfile-language-server" } } |
| 37 | + vim.lsp.config.lua_ls = { |
| 38 | + cmd = { "lua-language-server" }, |
| 39 | + settings = { |
| 40 | + Lua = { |
| 41 | + runtime = { version = "LuaJIT" }, |
| 42 | + diagnostics = { globals = { "vim" } }, |
| 43 | + workspace = { |
| 44 | + library = vim.api.nvim_get_runtime_file("", true), |
| 45 | + checkThirdParty = false, |
| 46 | + }, |
| 47 | + telemetry = { enable = false } |
| 48 | + } |
| 49 | + } |
| 50 | + } |
| 51 | +
|
| 52 | + vim.lsp.config.nil_ls = { |
| 53 | + cmd = { "nil" }, |
| 54 | + settings = { |
| 55 | + ["nil"] = { |
| 56 | + formatting = { command = { "${pkgs.nixfmt}/bin/nixfmt" } } |
| 57 | + } |
| 58 | + } |
| 59 | + } |
| 60 | +
|
| 61 | + vim.lsp.config.yamlls = { |
| 62 | + cmd = { "yaml-language-server" }, |
| 63 | + settings = { |
| 64 | + yaml = { |
| 65 | + schemaStore = { enable = true }, |
| 66 | + validate = true |
| 67 | + } |
| 68 | + } |
| 69 | + } |
| 70 | +
|
| 71 | + vim.api.nvim_create_autocmd("LspAttach", { |
| 72 | + callback = function(args) |
| 73 | + local opts = { buffer = args.buf } |
| 74 | + vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) |
| 75 | + vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) |
| 76 | + vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) |
| 77 | + vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts) |
| 78 | + vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts) |
| 79 | + vim.keymap.set("n", "<leader>lf", function() vim.lsp.buf.format({ async = true }) end, opts) |
| 80 | + end, |
| 81 | + }) |
| 82 | +
|
| 83 | + vim.api.nvim_create_autocmd({ "FileType", "BufEnter" }, { |
| 84 | + callback = function() |
| 85 | + local bufnr = vim.api.nvim_get_current_buf() |
| 86 | + local ok = pcall(vim.treesitter.get_parser, bufnr) |
| 87 | + if ok then |
| 88 | + pcall(vim.treesitter.start, bufnr) |
| 89 | + end |
| 90 | + end, |
| 91 | + }) |
| 92 | +
|
| 93 | + cmp.setup({ |
| 94 | + snippet = { |
| 95 | + expand = function(args) luasnip.lsp_expand(args.body) end, |
| 96 | + }, |
| 97 | + mapping = cmp.mapping.preset.insert({ |
| 98 | + ["<C-Space>"] = cmp.mapping.complete(), |
| 99 | + ["<C-e>"] = cmp.mapping.abort(), |
| 100 | + ["<CR>"] = cmp.mapping.confirm({ select = true }), |
| 101 | + ["<Tab>"] = cmp.mapping(function(fallback) |
| 102 | + if cmp.visible() then |
| 103 | + cmp.select_next_item() |
| 104 | + elseif luasnip.expand_or_jumpable() then |
| 105 | + luasnip.expand_or_jump() |
| 106 | + else |
| 107 | + fallback() |
| 108 | + end |
| 109 | + end, { "i", "s" }), |
| 110 | + }), |
| 111 | + sources = cmp.config.sources({ |
| 112 | + { name = "nvim_lsp" }, |
| 113 | + { name = "luasnip" }, |
| 114 | + { name = "buffer" }, |
| 115 | + { name = "path" }, |
| 116 | + }) |
| 117 | + }) |
| 118 | +
|
| 119 | + require("bufferline").setup({ |
| 120 | + options = { |
| 121 | + mode = "buffers", |
| 122 | + separator_style = "slant", |
| 123 | + } |
| 124 | + }) |
| 125 | +
|
| 126 | + require("lualine").setup({ |
| 127 | + options = { |
| 128 | + theme = "auto", |
| 129 | + component_separators = "|", |
| 130 | + section_separators = "", |
| 131 | + }, |
| 132 | + sections = { |
| 133 | + lualine_a = { "mode" }, |
| 134 | + lualine_b = { "branch", "diff", "diagnostics" }, |
| 135 | + lualine_c = { "filename" }, |
| 136 | + lualine_x = { "encoding", "fileformat", "filetype" }, |
| 137 | + lualine_y = { "progress" }, |
| 138 | + lualine_z = { "location" }, |
| 139 | + } |
| 140 | + }) |
| 141 | +
|
| 142 | + require("nvim-tree").setup({ |
| 143 | + view = { width = 30 }, |
| 144 | + renderer = { group_empty = true }, |
| 145 | + }) |
| 146 | +
|
| 147 | + require("telescope").setup({ |
| 148 | + defaults = { |
| 149 | + file_ignore_patterns = { "node_modules", ".git", ".cache", "result" }, |
| 150 | + }, |
| 151 | + }) |
| 152 | +
|
| 153 | + vim.lsp.enable({ "nil_ls", "lua_ls", "bashls", "dockerls", "yamlls" }) |
| 154 | +
|
| 155 | + vim.keymap.set("n", "<S-h>", "<cmd>bprevious<cr>", { desc = "Previous buffer" }) |
| 156 | + vim.keymap.set("n", "<S-l>", "<cmd>bnext<cr>", { desc = "Next buffer" }) |
| 157 | + vim.keymap.set("n", "<leader>dd", function() require("lazydocker").open() end, { desc = "LazyDocker" }) |
| 158 | + vim.keymap.set("n", "<leader>dl", function() require("lazydocker").open() end, { desc = "LazyDocker logs" }) |
| 159 | + vim.keymap.set("n", "<leader>e", "<cmd>NvimTreeToggle<cr>", { desc = "File tree" }) |
| 160 | + vim.keymap.set("n", "<leader>fb", builtin.buffers, { desc = "Buffers" }) |
| 161 | + vim.keymap.set("n", "<leader>ff", builtin.find_files, { desc = "Find files" }) |
| 162 | + vim.keymap.set("n", "<leader>fg", builtin.live_grep, { desc = "Grep" }) |
| 163 | + vim.keymap.set("n", "<leader>fh", builtin.help_tags, { desc = "Help" }) |
| 164 | + vim.keymap.set("n", "<leader>gc", "<cmd>LazyGitCurrentFile<cr>", { desc = "LazyGit current file" }) |
| 165 | + vim.keymap.set("n", "<leader>gg", "<cmd>LazyGit<cr>", { desc = "LazyGit" }) |
| 166 | + vim.keymap.set("n", "<leader>q", "<cmd>bdelete<cr>", { desc = "Close buffer" }) |
| 167 | + vim.keymap.set("n", "<leader>w", "<cmd>w<cr>", { desc = "Save" }) |
| 168 | + vim.keymap.set("n", "<leader>x", "<cmd>xa<cr>", { desc = "Save all & quit" }) |
| 169 | + EOF |
| 170 | + ''; |
| 171 | +} |
0 commit comments