{ config, pkgs, ... }: { programs.neovim = { enable = true; defaultEditor = true; viAlias = true; vimAlias = true; withRuby = false; withPython3 = false; extraPackages = with pkgs; [ git gcc ripgrep ]; initLua = '' vim.opt.number = true vim.opt.relativenumber = false vim.opt.numberwidth = 4 vim.opt.statuscolumn = "%l %s" vim.opt.tabstop = 2 vim.opt.softtabstop = 2 vim.opt.shiftwidth = 2 vim.opt.expandtab = true vim.opt.wrap = false vim.opt.ignorecase = true vim.opt.smartcase = true vim.opt.hlsearch = false vim.opt.termguicolors = false vim.opt.signcolumn = "yes" vim.opt.scrolloff = 8 vim.opt.showmode = false vim.opt.timeoutlen = 300 vim.opt.updatetime = 250 vim.opt.foldcolumn = "0" vim.opt.directory = vim.fn.stdpath("state") .. "/swap//" vim.g.mapleader = " " vim.g.maplocalleader = " " vim.keymap.set({"n", "i"}, "", "write", {desc = "save file"}) vim.keymap.set("n", "", "write", {desc = "save file"}) vim.keymap.set("n", "", "quit", {desc = "quit neovim"}) vim.keymap.set("n", "", "quit!", {desc = "force quit"}) vim.keymap.set("n", "", "nohlsearch", {desc = "clear search highlight"}) vim.keymap.set({"n", "x"}, "gy", '"+y', {desc = "copy to clipboard"}) vim.keymap.set({"n", "x"}, "gp", '"+p', {desc = "paste from clipboard"}) vim.keymap.set("n", "", "u", {desc = "undo"}) vim.keymap.set("i", "", "u", {desc = "undo"}) vim.keymap.set("n", "", "", {desc = "redo"}) vim.keymap.set("i", "", "", {desc = "redo"}) vim.keymap.set({"n", "i"}, "", "ggVG", {desc = "select all"}) vim.keymap.set("n", "", "Telescope find_files", {desc = "find files"}) vim.keymap.set("n", "", "Telescope live_grep", {desc = "text search"}) vim.keymap.set("n", "", "Telescope buffers", {desc = "find buffers"}) vim.keymap.set("n", "", "Telescope help_tags", {desc = "help tags"}) vim.keymap.set("n", "", "h", {desc = "move to left split"}) vim.keymap.set("n", "", "j", {desc = "move to lower split"}) vim.keymap.set("n", "", "k", {desc = "move to upper split"}) vim.keymap.set("n", "", "l", {desc = "move to right split"}) vim.keymap.set("n", "", "vsplit", {desc = "vertical split"}) vim.keymap.set("n", "", "split", {desc = "horizontal split"}) vim.keymap.set("n", "", "close", {desc = "close split"}) vim.cmd.colorscheme("default") vim.opt.matchpairs = "" vim.api.nvim_set_hl(0, "MatchParen", {}) vim.cmd("highlight clear MatchParen") vim.cmd("highlight MatchParen guifg=NONE guibg=NONE gui=NONE") local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_stat(lazypath) then vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath, }) end vim.opt.rtp:prepend(lazypath) require("lazy").setup({ { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" }, cmd = "Telescope", keys = { { "", "Telescope find_files", desc = "find files" }, { "", "Telescope live_grep", desc = "text search" }, { "", "Telescope buffers", desc = "find buffers" }, { "", "Telescope help_tags", desc = "help tags" }, }, config = function() local telescope = require("telescope") telescope.setup({ defaults = { file_ignore_patterns = { "node_modules", ".git", "%.lock" }, layout_strategy = "horizontal", layout_config = { horizontal = { preview_width = 0.5, }, }, }, pickers = { find_files = { hidden = true, no_ignore = false, }, live_grep = { additional_args = function() return { "--hidden" } end, }, }, }) end, }, { "nvim-neo-tree/neo-tree.nvim", branch = "v3.x", dependencies = { "nvim-lua/plenary.nvim", "nvim-tree/nvim-web-devicons", "MunifTanjim/nui.nvim", }, keys = { { "", "Neotree toggle", desc = "toggle file explorer" }, }, config = function() require("neo-tree").setup({ window = { position = "right", width = 30, mappings = { ["l"] = "open", ["h"] = "close_node", [""] = "open", [""] = "revert_preview", }, }, filesystem = { filtered_items = { visible = false, hide_dotfiles = false, hide_gitignored = false, hide_by_name = { ".git", ".DS_Store", "thumbs.db", }, }, follow_current_file = { enabled = true, }, }, }) end, }, { "goolord/alpha-nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, config = function() local alpha = require("alpha") local dashboard = require("alpha.themes.dashboard") dashboard.section.header.val = { " ⠀⠀⠀⢀⡴⠲⣄⠀⠀⢀⡶⠲⡄⠀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀", " ⣀⣀⣀⣾⠁⠀⠹⠿⠟⠟⠀⠀⠙⣛⣉⡻⠿⠋⣿⣷⢦⣄⠀⠀⠀⠀⠀⠀", " ⠭⠭⣽⠇⠀⠶⠀⢴⣦⠀⠶⠆⠸⠯⠭⠄⠀⠀⠀⠀⠀⠙⢧⡀⠀⢀⣤⣤", "⠀⠀ ⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⣤⣾⣻⡟", " ⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣧⠽⠋⠀", " ⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠀⠀⠀⠀", " ⠀⠀⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡟⠀⠀⠀⠀", "⠀ ⠀⠈⠳⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠟⠀⠀⠀⠀⠀", "⠀⠀ ⠀⠀⠉⠿⠟⠛⠛⠻⠾⠛⠛⠛⠛⠻⠟⠛⠛⠻⠾⠃⠀⠀⠀⠀⠀⠀", } dashboard.section.buttons.val = { dashboard.button("f", " > find file", "Telescope find_files"), dashboard.button("n", " > new file", "enew"), dashboard.button("r", " > recent files", "Telescope oldfiles"), dashboard.button("q", " > quit", "qa"), } alpha.setup(dashboard.opts) end, }, }) vim.api.nvim_create_autocmd("User", { pattern = "LazyDone", callback = function() vim.notify("plugins loaded", vim.log.levels.INFO, { title = "neovim" }) end, }) ''; }; }