Created
March 1, 2026 12:54
-
-
Save EralpCelebi/a86823f46a88e99608a08059afb3206d to your computer and use it in GitHub Desktop.
neovim configuration
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- | |
| -- Options. | |
| -- | |
| -- Looks. | |
| vim.opt.number = true | |
| vim.opt.relativenumber = true | |
| vim.opt.wrap = false | |
| vim.opt.termguicolors = true | |
| vim.opt.showmode = false | |
| vim.opt.signcolumn = "yes" | |
| vim.opt.cursorline = true | |
| vim.opt.laststatus = 0 | |
| -- Indentation. | |
| vim.opt.tabstop = 4 | |
| vim.opt.softtabstop = 4 | |
| vim.opt.shiftwidth = 4 | |
| vim.opt.expandtab = true | |
| vim.opt.autoindent = true | |
| vim.opt.smartindent = true | |
| -- Navigation. | |
| vim.opt.splitright = true | |
| vim.opt.splitbelow = true | |
| vim.opt.mouse = "a" | |
| vim.opt.backspace = "indent,eol,start" | |
| vim.opt.winborder = "rounded" | |
| -- Searching. | |
| vim.opt.ignorecase = true | |
| vim.opt.smartcase = true | |
| vim.opt.incsearch = true | |
| vim.opt.hlsearch = false | |
| -- History. | |
| vim.opt.swapfile = false | |
| vim.opt.backup = false | |
| vim.opt.undofile = true | |
| vim.opt.undodir = os.getenv("HOME") .. "/.local/share/nvim/undotree" | |
| -- Wrapping. | |
| vim.opt.textwidth = 80 | |
| -- Endings. | |
| vim.opt.fileformat = "unix" | |
| vim.opt.fileformats = "unix" | |
| vim.opt.fixendofline = true | |
| -- Folding. | |
| vim.opt.foldenable = false | |
| -- Keys. | |
| vim.g.mapleader = "§" | |
| vim.g.maplocalleader = "§" | |
| vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" | |
| -- | |
| -- Packages. | |
| -- | |
| vim.pack.add({ | |
| { src = "https://github.com/stevearc/oil.nvim" }, | |
| { src = "https://github.com/refractalize/oil-git-status.nvim" }, | |
| { src = "https://github.com/lewis6991/gitsigns.nvim" }, | |
| { src = "https://github.com/nvim-treesitter/nvim-treesitter" }, | |
| { src = "https://github.com/neovim/nvim-lspconfig" }, | |
| { src = "https://github.com/nvim-tree/nvim-web-devicons" }, | |
| { src = "https://github.com/saghen/blink.cmp" }, | |
| { src = "https://github.com/ibhagwan/fzf-lua" }, | |
| { src = "https://github.com/danymat/neogen" }, | |
| { src = "https://github.com/xzbdmw/colorful-menu.nvim" } | |
| }) | |
| -- | |
| -- Configuration. | |
| -- | |
| require("oil").setup({ | |
| use_default_keymaps = true, | |
| win_options = { | |
| signcolumn = "yes:2", | |
| }, | |
| }) | |
| require("colorful-menu").setup() | |
| require("blink.cmp").setup({ | |
| keymap = { | |
| preset = "none", | |
| ["<C-b>"] = { "scroll_documentation_up", "fallback" }, | |
| ["<C-f>"] = { "scroll_documentation_down", "fallback" }, | |
| ["<Up>"] = { "select_prev", "fallback" }, | |
| ["<Down>"] = { "select_next", "fallback" }, | |
| ["<Tab>"] = { "select_and_accept", "snippet_forward", "fallback" }, | |
| }, | |
| appearance = { | |
| -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' | |
| -- Adjusts spacing to ensure icons are aligned | |
| nerd_font_variant = "mono", | |
| }, | |
| cmdline = { | |
| completion = { | |
| menu = { | |
| auto_show = false, | |
| }, | |
| }, | |
| }, | |
| -- (Default) Only show the documentation popup when manually triggered | |
| completion = { | |
| ghost_text = { enabled = true }, | |
| documentation = { auto_show = false }, | |
| list = { | |
| selection = { | |
| auto_insert = false, | |
| }, | |
| }, | |
| menu = { | |
| draw = { | |
| --column = { { "kind_icon" }, { "label", gap = 1 } }, | |
| components = { | |
| label = { | |
| text = function(ctx) | |
| return require("colorful-menu").blink_components_text(ctx) | |
| end, | |
| highlight = function(ctx) | |
| return require("colorful-menu").blink_components_highlight(ctx) | |
| end, | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| -- Default list of enabled providers defined so that you can extend it | |
| -- elsewhere in your config, without redefining it, due to `opts_extend` | |
| sources = { | |
| default = {--[[ "snippets", ]] | |
| "buffer", | |
| "lsp", | |
| "path", | |
| }, | |
| }, | |
| signature = { | |
| enabled = true, | |
| }, | |
| -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance | |
| -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, | |
| -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` | |
| -- | |
| -- See the fuzzy documentation for more information | |
| fuzzy = { implementation = "prefer_rust" }, | |
| }) | |
| require("neogen").setup({ | |
| snippet_engine = "nvim", | |
| }) | |
| require("oil-git-status").setup() | |
| fzf = require("fzf-lua") | |
| fzf.setup() | |
| fzf.register_ui_select() | |
| -- | |
| -- LSP. | |
| -- | |
| vim.lsp.config.clangd = { | |
| cmd = { | |
| "clangd", | |
| "--clang-tidy", | |
| "--background-index", | |
| }, | |
| filetypes = { "c", "cpp" }, | |
| } | |
| vim.lsp.config.julials = { | |
| cmd = { | |
| "julia", | |
| "--startup-file=no", | |
| "--history-file=no", | |
| "--project=@languageserver", | |
| "-J/Users/eralpcelebi/.local/share/julia/environments/languageserver/sys_languageserver", | |
| "/Users/eralpcelebi/.local/share/julia/environments/languageserver/precompile_languageserver.jl" | |
| }, | |
| filetypes = { "julia" }, | |
| } | |
| vim.lsp.enable("rust_analyzer") | |
| vim.lsp.enable("clangd") | |
| vim.lsp.enable("julials") | |
| vim.lsp.enable("cmake") | |
| vim.lsp.enable("tinymist") | |
| vim.lsp.enable("texlab") | |
| vim.lsp.enable("gopls") | |
| -- | |
| -- Tree-sitter. + Theme | |
| -- | |
| vim.diagnostic.config({ | |
| signs = { | |
| text = { | |
| [vim.diagnostic.severity.ERROR] = "•", | |
| [vim.diagnostic.severity.WARN] = "•", | |
| [vim.diagnostic.severity.HINT] = "•", | |
| [vim.diagnostic.severity.INFO] = "•", | |
| }, | |
| }, | |
| }) | |
| vim.cmd("colorscheme quiet") | |
| vim.api.nvim_set_hl(0, "@keyword", { fg = "#EE6C4D" }) | |
| vim.api.nvim_set_hl(0, "@keyword.conditional", { link = "@keyword" }) | |
| vim.api.nvim_set_hl(0, "@keyword.import", { link = "@keyword" }) | |
| vim.api.nvim_set_hl(0, "@keyword.type", { link = "@keyword" }) | |
| vim.api.nvim_set_hl(0, "@keyword.directive", { fg = "#B48EDE" }) | |
| vim.api.nvim_set_hl(0, "@type", { fg = "#C6B89E", bold = true }) | |
| vim.api.nvim_set_hl(0, "@type.builtin", { link = "@type", bold = true }) | |
| vim.api.nvim_set_hl(0, "@type.definition", { link = "@type" }) | |
| vim.api.nvim_set_hl(0, "@variable", { fg = "#FFD972" }) | |
| vim.api.nvim_set_hl(0, "@variable.member", { fg = "#EE8C6D" }) | |
| vim.api.nvim_set_hl(0, "@variable.builtin", { fg = "#A79BD9", bold = true }) | |
| vim.api.nvim_set_hl(0, "@function", { fg = "#F7A360" }) | |
| vim.api.nvim_set_hl(0, "@function.builtin", { link = "@keyword" }) | |
| vim.api.nvim_set_hl(0, "@function.macro", { fg = "#D0BCEE" }) | |
| vim.api.nvim_set_hl(0, "@attribute", { link = "@function.macro", bold = true }) | |
| vim.api.nvim_set_hl(0, "@string", { fg = "#D3E198" }) | |
| vim.api.nvim_set_hl(0, "@string.special", { fg = "#D8C7F1" }) | |
| vim.api.nvim_set_hl(0, "@string.escape", { link = "@string.special" }) | |
| vim.api.nvim_set_hl(0, "@number", { fg = "#F7B3A4" }) | |
| vim.api.nvim_set_hl(0, "@number.float", { link = "@number" }) | |
| vim.api.nvim_set_hl(0, "@operator", { fg = "#A9B96B" }) | |
| vim.api.nvim_set_hl(0, "@punctuation", { fg = "#7A7470" }) | |
| vim.api.nvim_set_hl(0, "@punctuation.special", { link = "@function.macro" }) | |
| vim.api.nvim_set_hl(0, "@property", { link = "@variable.member" }) | |
| vim.api.nvim_set_hl(0, "@boolean", { link = "@number" }) | |
| vim.api.nvim_set_hl(0, "@constant", { link = "@string.special" }) | |
| vim.api.nvim_set_hl(0, "@constant.builtin", { link = "@constant", bold = true }) | |
| vim.api.nvim_set_hl(0, "@lsp.type.enumMember", { fg = "#A6B5D6" }) | |
| vim.api.nvim_set_hl(0, "@lsp.type.macro", { fg = "#6F83AA" }) | |
| vim.api.nvim_set_hl(0, "@lsp.type.function", { link = "@function" }) | |
| vim.api.nvim_set_hl(0, "@lsp.type.method", { link = "@function", bold = true }) | |
| vim.api.nvim_set_hl(0, "@lsp.type.property", { link = "@property" }) | |
| vim.api.nvim_set_hl(0, "Normal", { bg = "#100F0F" }) | |
| vim.api.nvim_set_hl(0, "Identifier", { link = "@variable" }) | |
| vim.api.nvim_set_hl(0, "Type", { link = "@type" }) | |
| vim.api.nvim_set_hl(0, "Statement", { link = "@keyword" }) | |
| vim.api.nvim_set_hl(0, "MatchParen", { fg = "#BAB4B0", bold = true}) | |
| vim.api.nvim_set_hl(0, "FloatBorder", { fg = "#FFFFFF", bg = none }) | |
| vim.api.nvim_set_hl(0, "Pmenu", { fg = "#FFFFFF", bg = none }) | |
| vim.api.nvim_set_hl(0, "PmenuExtra", { fg = "#FFFFFF", bg = none }) | |
| vim.api.nvim_set_hl(0, "PmenuKind", { bg = none }) | |
| -- | |
| -- Keymaps. | |
| -- | |
| vim.keymap.set("n", "<leader>cc", function() vim.cmd("edit $MYVIMRC") end) | |
| vim.keymap.set("n", "<leader>q", function() vim.cmd("bdelete") end) | |
| vim.keymap.set("n", "<leader>w", function() vim.cmd("Oil") end) | |
| vim.keymap.set("n", "<leader>e", function() vim.cmd("Neogen") end) | |
| vim.keymap.set("n", "<leader><leader>", function() vim.cmd("term") end) | |
| vim.keymap.set("t", "<leader><leader>", [[<C-\><C-d>]]) | |
| vim.keymap.set("n", "<leader><space>", function() vim.cmd("FzfLua") end) | |
| -- | |
| -- Auto-commands. | |
| -- | |
| vim.api.nvim_create_autocmd("LspAttach", { | |
| callback = function(args) | |
| vim.keymap.set("n", "<leader>s", vim.lsp.buf.signature_help, { buffer = args.buf }) | |
| vim.keymap.set("n", "<leader>k", vim.lsp.buf.hover, { buffer = args.buf }) | |
| vim.keymap.set("n", "<leader>f", vim.lsp.buf.format, { buffer = args.buf }) | |
| vim.keymap.set("n", "<leader>r", vim.lsp.buf.rename, { buffer = args.buf }) | |
| vim.keymap.set("n", "<leader>a", fzf.lsp_code_actions) | |
| vim.keymap.set("n", "<leader>i", fzf.lsp_implementations) | |
| vim.keymap.set("n", "<leader>t", fzf.lsp_definitions) | |
| vim.keymap.set("n", "<leader>d", fzf.lsp_declarations) | |
| vim.keymap.set("n", "<leader>x", fzf.lsp_document_diagnostics) | |
| end, | |
| }) | |
| vim.api.nvim_create_autocmd('FileType', { | |
| pattern = { 'c,cpp,julia,lua,rust,latex' }, | |
| callback = function() vim.treesitter.start() end, | |
| }) | |
| -- | |
| -- Filetypes. | |
| -- | |
| vim.filetype.add({ | |
| extension = { | |
| h = "c", | |
| }, | |
| }) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment