From 4e04b8b706f3d018fe7f65787c275971a60e8064 Mon Sep 17 00:00:00 2001 From: Ian Mancini Date: Fri, 3 Mar 2023 18:47:10 -0300 Subject: [PATCH] initial commit --- .gitignore | 1 + .luarc.json | 9 + init.lua | 17 ++ lua/colorscheme.lua | 5 + lua/keybindings.lua | 4 + lua/plugins/git.lua | 153 +++++++++++++ lua/plugins/indent-blankline-nvim.lua | 41 ++++ lua/plugins/init.lua | 315 ++++++++++++++++++++++++++ lua/plugins/lazygit-nvim.lua | 9 + lua/plugins/lsp.lua | 243 ++++++++++++++++++++ lua/plugins/lualine.lua | 42 ++++ lua/plugins/notes.lua | 112 +++++++++ lua/plugins/nvim-cmp.lua | 125 ++++++++++ lua/plugins/nvim-tree.lua | 89 ++++++++ lua/plugins/nvim-treesitter.lua | 34 +++ lua/plugins/nvim-ufo.lua | 44 ++++ lua/plugins/nvim-web-devicons.lua | 3 + lua/plugins/orgmode-nvim.lua | 46 ++++ lua/plugins/project-nvim.lua | 20 ++ lua/plugins/rnvimr.lua | 13 ++ lua/plugins/telescope-nvim.lua | 108 +++++++++ lua/plugins/term.lua | 41 ++++ lua/plugins/testing.lua | 57 +++++ lua/plugins/tooling.lua | 14 ++ lua/plugins/twilight-nvim.lua | 19 ++ lua/plugins/which-key.lua | 76 +++++++ lua/plugins/zen-mode-nvim.lua | 11 + lua/settings.lua | 51 +++++ lua/utils.lua | 15 ++ 29 files changed, 1717 insertions(+) create mode 100644 .gitignore create mode 100644 .luarc.json create mode 100644 init.lua create mode 100644 lua/colorscheme.lua create mode 100644 lua/keybindings.lua create mode 100644 lua/plugins/git.lua create mode 100644 lua/plugins/indent-blankline-nvim.lua create mode 100644 lua/plugins/init.lua create mode 100644 lua/plugins/lazygit-nvim.lua create mode 100644 lua/plugins/lsp.lua create mode 100644 lua/plugins/lualine.lua create mode 100644 lua/plugins/notes.lua create mode 100644 lua/plugins/nvim-cmp.lua create mode 100644 lua/plugins/nvim-tree.lua create mode 100644 lua/plugins/nvim-treesitter.lua create mode 100644 lua/plugins/nvim-ufo.lua create mode 100644 lua/plugins/nvim-web-devicons.lua create mode 100644 lua/plugins/orgmode-nvim.lua create mode 100644 lua/plugins/project-nvim.lua create mode 100644 lua/plugins/rnvimr.lua create mode 100644 lua/plugins/telescope-nvim.lua create mode 100644 lua/plugins/term.lua create mode 100644 lua/plugins/testing.lua create mode 100644 lua/plugins/tooling.lua create mode 100644 lua/plugins/twilight-nvim.lua create mode 100644 lua/plugins/which-key.lua create mode 100644 lua/plugins/zen-mode-nvim.lua create mode 100644 lua/settings.lua create mode 100644 lua/utils.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d7ad043 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +plugin/ diff --git a/.luarc.json b/.luarc.json new file mode 100644 index 0000000..b6aea14 --- /dev/null +++ b/.luarc.json @@ -0,0 +1,9 @@ +{ + "Lua": { + "runtime.version": "LuaJIT", + "workspace.checkThirdParty": false + }, + "Lua.diagnostics.globals": [ + "require" + ] +} \ No newline at end of file diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..1277985 --- /dev/null +++ b/init.lua @@ -0,0 +1,17 @@ +vim.g.python3_host_prog = '/usr/bin/python' +vim.g.mapleader = ' ' + +-- Setup packer +local fn = vim.fn +local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim' +if fn.empty(fn.glob(install_path)) > 0 then + fn.system({ + 'git', 'clone', '--depth', '1', + 'https://github.com/wbthomason/packer.nvim', install_path + }) + vim.cmd 'packadd packer.nvim' +end + +-- Source settings +require('plugins') +require('settings') diff --git a/lua/colorscheme.lua b/lua/colorscheme.lua new file mode 100644 index 0000000..96c010b --- /dev/null +++ b/lua/colorscheme.lua @@ -0,0 +1,5 @@ +local utils = require('utils') + +utils.opt('o', 'termguicolors', true) +vim.g.tokyonight_style = 'night' +vim.cmd('colorscheme tokyonight') diff --git a/lua/keybindings.lua b/lua/keybindings.lua new file mode 100644 index 0000000..b7e58e7 --- /dev/null +++ b/lua/keybindings.lua @@ -0,0 +1,4 @@ +local utils = require("utils") +utils.map("n", "", "noh") -- Clear highlights +utils.map("n", "]q", "cn") +utils.map("n", "[q", "cp") diff --git a/lua/plugins/git.lua b/lua/plugins/git.lua new file mode 100644 index 0000000..3c65c87 --- /dev/null +++ b/lua/plugins/git.lua @@ -0,0 +1,153 @@ +local wk = require("which-key") + +local wk_toggle_git_blame = { "GitBlameToggle", "Toggle git blame" } +wk.register({ + t = { + b = wk_toggle_git_blame, + }, + g = { + n = { "Neogit", "Neogit status" }, + f = { "Git", "Fugitive status" }, + b = wk_toggle_git_blame, + }, +}, { + prefix = "", +}) + +local neogit = require("neogit") +neogit.setup() + +-- gitsigns +require("gitsigns").setup() + +-- git-blame +vim.g.gitblame_enabled = 0 + +-- octo +require("octo").setup({ + default_remote = { "origin" }, -- order to try remotes + ssh_aliases = {}, -- SSH aliases. e.g. `ssh_aliases = {["github.com-work"] = "github.com"}` + reaction_viewer_hint_icon = "", -- marker for user reactions + user_icon = " ", -- user icon + timeline_marker = "", -- timeline marker + timeline_indent = "2", -- timeline indentation + right_bubble_delimiter = "", -- Bubble delimiter + left_bubble_delimiter = "", -- Bubble delimiter + snippet_context_lines = 4, -- number or lines around commented lines + file_panel = { + size = 10, -- changed files panel rows + use_icons = true, -- use web-devicons in file panel (if false, nvim-web-devicons does not need to be installed) + }, + mappings = { + issue = { + close_issue = { lhs = "ic", desc = "close issue" }, + reopen_issue = { lhs = "io", desc = "reopen issue" }, + list_issues = { lhs = "il", desc = "list open issues on same repo" }, + reload = { lhs = "", desc = "reload issue" }, + open_in_browser = { lhs = "", desc = "open issue in browser" }, + copy_url = { lhs = "", desc = "copy url to system clipboard" }, + add_assignee = { lhs = "aa", desc = "add assignee" }, + remove_assignee = { lhs = "ad", desc = "remove assignee" }, + create_label = { lhs = "lc", desc = "create label" }, + add_label = { lhs = "la", desc = "add label" }, + remove_label = { lhs = "ld", desc = "remove label" }, + goto_issue = { lhs = "gi", desc = "navigate to a local repo issue" }, + add_comment = { lhs = "ca", desc = "add comment" }, + delete_comment = { lhs = "cd", desc = "delete comment" }, + next_comment = { lhs = "]c", desc = "go to next comment" }, + prev_comment = { lhs = "[c", desc = "go to previous comment" }, + react_hooray = { lhs = "rp", desc = "add/remove 🎉 reaction" }, + react_heart = { lhs = "rh", desc = "add/remove ❤️ reaction" }, + react_eyes = { lhs = "re", desc = "add/remove 👀 reaction" }, + react_thumbs_up = { lhs = "r+", desc = "add/remove 👍 reaction" }, + react_thumbs_down = { lhs = "r-", desc = "add/remove 👎 reaction" }, + react_rocket = { lhs = "rr", desc = "add/remove 🚀 reaction" }, + react_laugh = { lhs = "rl", desc = "add/remove 😄 reaction" }, + react_confused = { lhs = "rc", desc = "add/remove 😕 reaction" }, + }, + pull_request = { + checkout_pr = { lhs = "po", desc = "checkout PR" }, + merge_pr = { lhs = "pm", desc = "merge commit PR" }, + squash_and_merge_pr = { lhs = "psm", desc = "squash and merge PR" }, + list_commits = { lhs = "pc", desc = "list PR commits" }, + list_changed_files = { lhs = "pf", desc = "list PR changed files" }, + show_pr_diff = { lhs = "pd", desc = "show PR diff" }, + add_reviewer = { lhs = "va", desc = "add reviewer" }, + remove_reviewer = { lhs = "vd", desc = "remove reviewer request" }, + close_issue = { lhs = "ic", desc = "close PR" }, + reopen_issue = { lhs = "io", desc = "reopen PR" }, + list_issues = { lhs = "il", desc = "list open issues on same repo" }, + reload = { lhs = "", desc = "reload PR" }, + open_in_browser = { lhs = "", desc = "open PR in browser" }, + copy_url = { lhs = "", desc = "copy url to system clipboard" }, + goto_file = { lhs = "gf", desc = "go to file" }, + add_assignee = { lhs = "aa", desc = "add assignee" }, + remove_assignee = { lhs = "ad", desc = "remove assignee" }, + create_label = { lhs = "lc", desc = "create label" }, + add_label = { lhs = "la", desc = "add label" }, + remove_label = { lhs = "ld", desc = "remove label" }, + goto_issue = { lhs = "gi", desc = "navigate to a local repo issue" }, + add_comment = { lhs = "ca", desc = "add comment" }, + delete_comment = { lhs = "cd", desc = "delete comment" }, + next_comment = { lhs = "]c", desc = "go to next comment" }, + prev_comment = { lhs = "[c", desc = "go to previous comment" }, + react_hooray = { lhs = "rp", desc = "add/remove 🎉 reaction" }, + react_heart = { lhs = "rh", desc = "add/remove ❤️ reaction" }, + react_eyes = { lhs = "re", desc = "add/remove 👀 reaction" }, + react_thumbs_up = { lhs = "r+", desc = "add/remove 👍 reaction" }, + react_thumbs_down = { lhs = "r-", desc = "add/remove 👎 reaction" }, + react_rocket = { lhs = "rr", desc = "add/remove 🚀 reaction" }, + react_laugh = { lhs = "rl", desc = "add/remove 😄 reaction" }, + react_confused = { lhs = "rc", desc = "add/remove 😕 reaction" }, + }, + review_thread = { + goto_issue = { lhs = "gi", desc = "navigate to a local repo issue" }, + add_comment = { lhs = "ca", desc = "add comment" }, + add_suggestion = { lhs = "sa", desc = "add suggestion" }, + delete_comment = { lhs = "cd", desc = "delete comment" }, + next_comment = { lhs = "]c", desc = "go to next comment" }, + prev_comment = { lhs = "[c", desc = "go to previous comment" }, + select_next_entry = { lhs = "]q", desc = "move to previous changed file" }, + select_prev_entry = { lhs = "[q", desc = "move to next changed file" }, + close_review_tab = { lhs = "", desc = "close review tab" }, + react_hooray = { lhs = "rp", desc = "add/remove 🎉 reaction" }, + react_heart = { lhs = "rh", desc = "add/remove ❤️ reaction" }, + react_eyes = { lhs = "re", desc = "add/remove 👀 reaction" }, + react_thumbs_up = { lhs = "r+", desc = "add/remove 👍 reaction" }, + react_thumbs_down = { lhs = "r-", desc = "add/remove 👎 reaction" }, + react_rocket = { lhs = "rr", desc = "add/remove 🚀 reaction" }, + react_laugh = { lhs = "rl", desc = "add/remove 😄 reaction" }, + react_confused = { lhs = "rc", desc = "add/remove 😕 reaction" }, + }, + submit_win = { + approve_review = { lhs = "", desc = "approve review" }, + comment_review = { lhs = "", desc = "comment review" }, + request_changes = { lhs = "", desc = "request changes review" }, + close_review_tab = { lhs = "", desc = "close review tab" }, + }, + review_diff = { + add_review_comment = { lhs = "ca", desc = "add a new review comment" }, + add_review_suggestion = { lhs = "sa", desc = "add a new review suggestion" }, + focus_files = { lhs = "e", desc = "move focus to changed file panel" }, + toggle_files = { lhs = "b", desc = "hide/show changed files panel" }, + next_thread = { lhs = "]t", desc = "move to next thread" }, + prev_thread = { lhs = "[t", desc = "move to previous thread" }, + select_next_entry = { lhs = "]q", desc = "move to previous changed file" }, + select_prev_entry = { lhs = "[q", desc = "move to next changed file" }, + close_review_tab = { lhs = "", desc = "close review tab" }, + toggle_viewed = { lhs = "", desc = "toggle viewer viewed state" }, + }, + file_panel = { + next_entry = { lhs = "j", desc = "move to next changed file" }, + prev_entry = { lhs = "k", desc = "move to previous changed file" }, + select_entry = { lhs = "", desc = "show selected changed file diffs" }, + refresh_files = { lhs = "R", desc = "refresh changed files panel" }, + focus_files = { lhs = "e", desc = "move focus to changed file panel" }, + toggle_files = { lhs = "b", desc = "hide/show changed files panel" }, + select_next_entry = { lhs = "]q", desc = "move to previous changed file" }, + select_prev_entry = { lhs = "[q", desc = "move to next changed file" }, + close_review_tab = { lhs = "", desc = "close review tab" }, + toggle_viewed = { lhs = "", desc = "toggle viewer viewed state" }, + }, + }, +}) diff --git a/lua/plugins/indent-blankline-nvim.lua b/lua/plugins/indent-blankline-nvim.lua new file mode 100644 index 0000000..3fdcea5 --- /dev/null +++ b/lua/plugins/indent-blankline-nvim.lua @@ -0,0 +1,41 @@ +vim.g.indent_blankline_use_treesitter = true +vim.g.indent_blankline_filetype_exclude = { + "help", + "dashboard", + "dashpreview", + "coc-explorer", + "startify", + "vista", + "sagahover", + "lspinfo", +} + +vim.opt.list = true +vim.opt.listchars:append("space:⋅") +vim.opt.listchars:append("eol:↴") + +require("indent_blankline").setup({ + space_char_blankline = " ", + show_current_context = true, + show_current_context_start = true, +}) + +local wk = require("which-key") + +wk.register({ + t = { + i = { + function() + vim.cmd("IndentBlanklineToggle!") + if vim.g.indent_blankline_enabled then + vim.opt.list = true + else + vim.opt.list = false + end + end, + "Indent guides", + }, + }, +}, { + prefix = "", +}) diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua new file mode 100644 index 0000000..0433446 --- /dev/null +++ b/lua/plugins/init.lua @@ -0,0 +1,315 @@ +---@diagnostic disable: undefined-global +return require("packer").startup(function() + use("wbthomason/packer.nvim") + + use("antoinemadec/FixCursorHold.nvim") + + -- Project management + use({ + "ahmedkhalf/project.nvim", + config = [[require('plugins.project-nvim')]], + }) + + -- GUI + use("stevearc/dressing.nvim") + + -- Fuzzy finder + use({ + { + "nvim-telescope/telescope-fzf-native.nvim", + run = "make", + }, + "nvim-telescope/telescope-file-browser.nvim", + "nvim-telescope/telescope-ui-select.nvim", + { + "nvim-telescope/telescope.nvim", + requires = { "nvim-lua/plenary.nvim" }, + config = [[require('plugins.telescope-nvim')]], + }, + }) + + -- File explorer + use({ + "kevinhwang91/rnvimr", + config = [[require('plugins.rnvimr')]], + }) + + use({ + "kyazdani42/nvim-tree.lua", + config = [[require('plugins.nvim-tree')]], + }) + + -- Refactor + use({ + "ThePrimeagen/refactoring.nvim", + requires = { + { "nvim-lua/plenary.nvim" }, + { "nvim-treesitter/nvim-treesitter" }, + }, + config = [[ require('refactoring').setup({}) ]], + }) + + -- Tooling + use({ + "WhoIsSethDaniel/mason-tool-installer.nvim", + { + "williamboman/mason.nvim", + config = [[ require('plugins.tooling') ]], + }, + }) + + -- LSP + use({ + "folke/lsp-colors.nvim", -- Color groups + { + -- Installer + "williamboman/mason-lspconfig.nvim", + require = "williamboman/mason.nvim", + }, + "folke/neodev.nvim", -- Lua + "jose-elias-alvarez/typescript.nvim", -- Typsecript + "jose-elias-alvarez/null-ls.nvim", -- Tooling + "stevearc/aerial.nvim", -- Outline + "b0o/schemastore.nvim", -- JSON schemas + "folke/trouble.nvim", -- Diagnostics + "kosayoda/nvim-lightbulb", -- Lightbulb + "j-hui/fidget.nvim", -- LSP Status indicator + { + "neovim/nvim-lspconfig", -- Config + config = [[require('plugins.lsp')]], + }, + }) + + -- Buffer line + -- use { + -- 'akinsho/bufferline.nvim', + -- tag = "v2.*", + -- requires = 'kyazdani42/nvim-web-devicons', + -- config = function() require("bufferline").setup {} end + -- } + + -- Completion + use({ + "onsails/lspkind-nvim", -- Pretty icons + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-cmdline", + "hrsh7th/cmp-omni", + "petertriho/cmp-git", + "hrsh7th/cmp-nvim-lsp-signature-help", + { + "hrsh7th/nvim-cmp", + config = [[require('plugins.nvim-cmp')]], + }, + }) + + -- Snippets + use("L3MON4D3/LuaSnip") + use("saadparwaiz1/cmp_luasnip") + use("rafamadriz/friendly-snippets") + + -- Comments + use({ + "numToStr/Comment.nvim", + config = function() + require("Comment").setup() + end, + }) + + -- Autopairs + use({ + "windwp/nvim-autopairs", + config = function() + require("nvim-autopairs").setup() + end, + }) + + -- Tree-sitter + use({ + "JoosepAlviste/nvim-ts-context-commentstring", + "windwp/nvim-ts-autotag", -- XML-like auto tags + { + "nvim-treesitter/nvim-treesitter", + run = ":TSUpdate", + config = [[require('plugins.nvim-treesitter')]], + }, + { + "nvim-orgmode/orgmode", + config = [[require('plugins.orgmode-nvim')]], + }, + }) + + -- Note taking + use({ + "jakewvincent/mkdnflow.nvim", + "ekickx/clipboard-image.nvim", + { + "mickael-menu/zk-nvim", + config = [[require('plugins.notes')]], + }, + }) + + -- Terminal + use({ + "akinsho/toggleterm.nvim", + tag = "v2.*", + config = [[require('plugins.term')]], + }) + + -- Git + use({ + { + "lewis6991/gitsigns.nvim", + requires = "nvim-lua/plenary.nvim", + }, + "tpope/vim-fugitive", + "TimUntersberger/neogit", + "f-person/git-blame.nvim", + { + "sindrets/diffview.nvim", + requires = "nvim-lua/plenary.nvim", + }, + { + "pwntester/octo.nvim", + requires = { + "nvim-lua/plenary.nvim", + "nvim-telescope/telescope.nvim", + "kyazdani42/nvim-web-devicons", + }, + config = [[require('plugins.git')]], + }, + }) + + -- Indent lines + use({ + "lukas-reineke/indent-blankline.nvim", + config = [[require('plugins.indent-blankline-nvim')]], + }) + + -- Handy stuff + use({ + "echasnovski/mini.nvim", + branch = "stable", + config = function() + require("mini.jump").setup({}) + require("mini.bufremove").setup({}) + end, + }) + use({ + "ggandor/leap.nvim", + requires = { + "tpope/vim-repeat", + }, + config = function() + require("leap").set_default_keymaps() + end, + }) + + use({ + "ygm2/rooter.nvim", + config = function() + vim.g.outermost_root = false + end, + }) + use({ "dhruvasagar/vim-table-mode" }) + use({ "tpope/vim-eunuch" }) + + use({ + "folke/which-key.nvim", + config = [[require('plugins.which-key')]], + }) + + use({ + "folke/zen-mode.nvim", + config = [[require('plugins.zen-mode-nvim')]], + }) + + use({ + "folke/twilight.nvim", + config = [[require('plugins.twilight-nvim')]], + }) + + use({ + "folke/todo-comments.nvim", + requires = "nvim-lua/plenary.nvim", + config = function() + require("todo-comments").setup() + end, + }) + + -- Statusline + -- use { + -- 'ojroques/nvim-hardline', + -- config = [[require('plugins.hardline')]] + -- } + + use({ + "b0o/incline.nvim", + { + "hoob3rt/lualine.nvim", + requires = { + "kyazdani42/nvim-web-devicons", + opt = true, + }, + config = [[require('plugins.lualine')]], + }, + }) + + -- Folding + -- use({ + -- "kevinhwang91/nvim-ufo", + -- requires = "kevinhwang91/promise-async", + -- config = [[require('plugins.nvim-ufo')]], + -- }) + + -- Color highlighting + use({ + "norcalli/nvim-colorizer.lua", + config = function() + require("colorizer").setup() + end, + }) + + -- Colorschemes + use({ + "Th3Whit3Wolf/onebuddy", + requires = { "tjdevries/colorbuddy.vim" }, + }) + use({ "RRethy/nvim-base16" }) + use({ "NTBBloodbath/doom-one.nvim" }) + use({ "folke/tokyonight.nvim" }) + use({ "marko-cerovac/material.nvim" }) + + use({ + "kyazdani42/nvim-web-devicons", + config = [[require('plugins.nvim-web-devicons')]], + }) + + -- package.json + use("vuki656/package-info.nvim") + + -- Blade + use({ "Eduruiz/vim-blade" }) + + -- DAP + use("mfussenegger/nvim-dap") + use("Pocco81/dap-buddy.nvim") + use("rcarriga/nvim-dap-ui") + + -- Test runner + use({ + "haydenmeade/neotest-jest", + "nvim-neotest/neotest-go", + "nvim-neotest/neotest-python", + { + "nvim-neotest/neotest", + requires = { + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + "antoinemadec/FixCursorHold.nvim", + }, + config = [[require('plugins.testing')]], + }, + }) +end) diff --git a/lua/plugins/lazygit-nvim.lua b/lua/plugins/lazygit-nvim.lua new file mode 100644 index 0000000..8dafe0c --- /dev/null +++ b/lua/plugins/lazygit-nvim.lua @@ -0,0 +1,9 @@ +local utils = require('utils') +local opts = { noremap = true, silent = true } + +utils.map('n', 'gg', 'LazyGit', opts) +utils.map('n', 'gc', 'LazyGitConfig', opts) + +vim.env.GIT_EDITOR = 'nvr --remote-wait' +vim.g.lazygit_floating_window_use_plenary = 1 +vim.g.lazygit_use_neovim_remote = 1 diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua new file mode 100644 index 0000000..4e56cfe --- /dev/null +++ b/lua/plugins/lsp.lua @@ -0,0 +1,243 @@ +local wk = require("which-key") + +require("mason-lspconfig").setup({ + automatic_installation = true, +}) + +vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { + border = "rounded", + close_events = { "CursorMoved", "BufHidden", "InsertCharPre" }, +}) + +vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { + border = "rounded", +}) + +require("aerial").setup({}) + +local capabilities = require("cmp_nvim_lsp").default_capabilities() + +local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) + +local lsp_rename_mapping = { + function() + vim.lsp.buf.rename() + end, + "Rename LSP symbol", +} +local lsp_references_mapping = { + "TroubleToggle lsp_references", + "LSP references", +} + +local on_attach = function(client, bufnr) + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") + + -- Normal mappings + wk.register({ + c = { + a = { "lua vim.lsp.buf.code_action()", "Code action" }, + r = lsp_rename_mapping, + f = { + "lua vim.lsp.buf.format()", + "Format file", + }, + o = { "AerialToggle!", "Toggle outline" }, + x = { "lua vim.diagnostic.open_float({source= true})", "Show line diagnostics" }, + R = lsp_references_mapping, + t = { + name = "Trouble", + t = { "TroubleToggle", "Trouble Toggle" }, + r = lsp_references_mapping, + w = { "TroubleToggle lsp_workspace_diagnostics", "Workspace diagnostics" }, + d = { "TroubleToggle lsp_document_diagnostics", "Document diagnostics" }, + q = { "TroubleToggle quickfix", "Quickfix" }, + l = { "TroubleToggle loclist", "Location list" }, + }, + g = { + name = "Go to", + D = { "lua vim.lsp.buf.declaration()", "Go to declaration" }, + d = { "lua vim.lsp.buf.definition()", "Go to definition" }, + i = { "lua vim.lsp.buf.implementation()", "Go to implementation" }, + t = { "lua vim.lsp.buf.type_definition()", "Go to type definition" }, + }, + }, + }, { + prefix = "", + buffer = bufnr, + }) + + -- Visual mappings + wk.register({ + c = { + a = { "lua vim.lsp.buf.code_action()", "Range code action" }, + f = { + "lua vim.lsp.buf.format()", + "Range formatting", + }, + }, + }, { + mode = "v", + prefix = "", + buffer = bufnr, + }) + + -- No leader mappings + wk.register({ + gd = { "lua vim.lsp.buf.definition()", "Go to definition" }, + K = { "lua vim.lsp.buf.hover()", "LSP Hover" }, + ["lua vim.lsp.buf.signature_help()", "LSP Signature" }, + [""] = lsp_rename_mapping, + ["[["] = { "AerialPrevUp", "Outline previous" }, + ["]]"] = { "AerialNext", "Outline next" }, + }, { + buffer = bufnr, + }) + + if client.supports_method("textDocument/formatting") then + vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + buffer = bufnr, + callback = function() + if vim.g.format_on_save == 1 then + vim.lsp.buf.format({ bufnr = bufnr }) + end + end, + }) + end +end + +local settings = { + capabilities = capabilities, + on_attach = on_attach, +} + +-- Neovim +require("neodev").setup({}) + +local servers = { + "clangd", + "pyright", + "rust_analyzer", + "gopls", + "phpactor", + "tailwindcss", + "jsonls", + "lua_ls", +} + +for _, lsp in pairs(servers) do + require("lspconfig")[lsp].setup(settings) +end + +-- JSON +require("lspconfig").jsonls.setup(vim.tbl_deep_extend("force", settings, { + settings = { + json = { + schemas = require("schemastore").json.schemas(), + validate = { + enable = true, + }, + }, + }, +})) + +-- Typescript +require("typescript").setup({ + disable_commands = false, + debug = false, + server = settings, +}) + +-- null-ls +local null_ls = require("null-ls") + +vim.g.format_on_save = 1 + +function _G.toggle_format_on_save() + if vim.g.format_on_save == 1 then + vim.g.format_on_save = 0 + print("Disabled format on save") + else + vim.g.format_on_save = 1 + print("Enabled format on save") + end +end + +require("null-ls").setup({ + sources = { + -- General + null_ls.builtins.code_actions.refactoring, + null_ls.builtins.completion.spell, + null_ls.builtins.diagnostics.trail_space, + null_ls.builtins.formatting.trim_newlines, + null_ls.builtins.formatting.trim_whitespace, + + -- Git + null_ls.builtins.code_actions.gitrebase, + null_ls.builtins.code_actions.gitsigns, + + -- GitHub + null_ls.builtins.diagnostics.actionlint, + + -- Shell + null_ls.builtins.code_actions.shellcheck, + null_ls.builtins.diagnostics.shellcheck, + null_ls.builtins.formatting.shfmt, + + -- C/C++ + null_ls.builtins.formatting.clang_format, + null_ls.builtins.formatting.cmake_format, + + -- Web + null_ls.builtins.formatting.prettier, + -- null_ls.builtins.code_actions.eslint_d, + null_ls.builtins.diagnostics.eslint, + null_ls.builtins.formatting.eslint, + null_ls.builtins.diagnostics.stylelint, + null_ls.builtins.formatting.stylelint, + null_ls.builtins.formatting.rustywind, + + -- Markdown + null_ls.builtins.formatting.remark, + + -- Lua + -- null_ls.builtins.diagnostics.luacheck, + null_ls.builtins.formatting.stylua, + + -- Python + null_ls.builtins.diagnostics.flake8, + null_ls.builtins.formatting.black, + null_ls.builtins.formatting.isort, + + -- PHP + null_ls.builtins.diagnostics.phpstan, + + -- Go + null_ls.builtins.formatting.gofmt, + + -- Rust + null_ls.builtins.formatting.rustfmt, + }, +}) + +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(args) + vim.bo[args.buf].formatexpr = nil + end, +}) + +require("nvim-lightbulb").setup({ + autocmd = { + enabled = false, + }, + sign = { + enabled = false, + }, + virtual_text = { + enabled = false, + }, +}) + +require("fidget").setup({}) diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua new file mode 100644 index 0000000..615d09e --- /dev/null +++ b/lua/plugins/lualine.lua @@ -0,0 +1,42 @@ +local lualine = require("lualine") + +local conditions = { + buffer_not_empty = function() + return vim.fn.empty(vim.fn.expand("%:t")) ~= 1 + end, +} + +-- Config +local config = { + options = { + -- Disable sections and component separators + component_separators = "", + section_separators = "", + disabled_filetypes = { "NvimTree" }, + globalstatus = true, + theme = tokyonight, + }, + sections = { + -- these are to remove the defaults + lualine_a = { "mode" }, + lualine_b = { "branch", "diff" }, + lualine_c = {}, + lualine_x = { "location", "progress" }, + lualine_y = { "diagnostics", "filetype" }, + lualine_z = {}, + }, +} + +table.insert(config.sections.lualine_c, { + "filename", + condition = conditions.buffer_not_empty, + path = 1, +}) + +lualine.setup(config) + +require("incline").setup({ + hide = { + cursorline = true, + }, +}) diff --git a/lua/plugins/notes.lua b/lua/plugins/notes.lua new file mode 100644 index 0000000..2363a69 --- /dev/null +++ b/lua/plugins/notes.lua @@ -0,0 +1,112 @@ +require("zk").setup() +require("mkdnflow").setup({}) +require("clipboard-image").setup({ + default = { + img_dir = { "%:p:h", "img" }, + img_name = function() + vim.fn.inputsave() + local name = vim.fn.input("Name: ") + vim.fn.inputrestore() + return name + end, + }, +}) +require("telescope").load_extension("zk") + +local wk = require("which-key") + +wk.register({ + n = { + n = { + function() + vim.ui.input({ prompt = "Note title: " }, function(input) + require("zk.commands").get("ZkNew")({ title = input }) + end) + end, + "Create new note", + }, + d = { + function() + require("zk.commands").get("ZkNew")({ dir = "journal" }) + end, + "Create or edit daily note", + }, + f = { + function() + require("zk.commands").get("ZkNotes")() + end, + "Find note", + }, + i = { + function() + require("zk.commands").get("ZkIndex")() + end, + "Index notes", + }, + t = { + function() + require("zk.commands").get("ZkTag")() + end, + "Search by tag", + }, + }, +}, { + prefix = "", +}) + +local augroup = vim.api.nvim_create_augroup("MarkdownZk", {}) +local ZK_NOTEBOOK_DIR = vim.env.ZK_NOTEBOOK_DIR +local patt = { ZK_NOTEBOOK_DIR .. "/*.md" } + +vim.api.nvim_clear_autocmds({ group = augroup }) +vim.api.nvim_create_autocmd("BufEnter", { + group = augroup, + pattern = patt, + callback = function(bufnr) + vim.cmd("lcd %:p:h") + + wk.register({ + t = { + function() + require("zk.commands").get("ZkNewFromTitleSelection")() + end, + "New note (selected as title)", + }, + c = { + function() + require("zk.commands").get("ZkNewFromContentSelection")() + end, + "New note (selected as content)", + }, + m = { + function() + require("zk.commands").get("ZkMatch")() + end, + "Find note match", + }, + }, { + mode = "v", + bufnr = bufnr, + prefix = "", + }) + + wk.register({ + b = { + function() + require("zk.commands").get("ZkBacklinks")() + end, + "Show note backlinks", + }, + l = { + function() + require("zk.commands").get("ZkLinks")() + end, + "Show note links", + }, + }, { + mode = "n", + bufnr = bufnr, + prefix = "", + }) + end, +}) diff --git a/lua/plugins/nvim-cmp.lua b/lua/plugins/nvim-cmp.lua new file mode 100644 index 0000000..2aeb5fc --- /dev/null +++ b/lua/plugins/nvim-cmp.lua @@ -0,0 +1,125 @@ +local utils = require("utils") +local lspkind = require("lspkind") +local luasnip = require("luasnip") +local cmp = require("cmp") + +local has_words_before = function() + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + +utils.opt("o", "completeopt", "menu,menuone,noselect") + +cmp.setup({ + confirm_opts = { + behavior = cmp.ConfirmBehavior.Replace, + select = false, + }, + snippet = { + expand = function(args) + require("luasnip").lsp_expand(args.body) + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + formatting = { + format = lspkind.cmp_format({ + mode = "symbol_text", + maxwidth = 50, + before = function(_, vim_item) + return vim_item + end, + }), + }, + experimental = { + ghost_text = true, + native_menu = false, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ + select = false, + }), + + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }), + sources = cmp.config.sources({ + { + name = "nvim_lsp", + }, + { + name = "luasnip", + }, + { + name = "nvim_lsp_signature_help", + }, + { + name = "nvim_lua", + }, + { + name = "orgmode", + }, + }, { + + { name = "git" }, + }, { + { + name = "path", + }, + }, { + { + name = "buffer", + }, + }), +}) + +-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). +cmp.setup.cmdline({ "/", "?" }, { + mapping = cmp.mapping.preset.cmdline(), + sources = { + { + name = "buffer", + }, + }, +}) + +-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). +cmp.setup.cmdline(":", { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { + name = "path", + }, + }, { + { + name = "cmdline", + }, + }), +}) + +require("cmp_git").setup() diff --git a/lua/plugins/nvim-tree.lua b/lua/plugins/nvim-tree.lua new file mode 100644 index 0000000..0245791 --- /dev/null +++ b/lua/plugins/nvim-tree.lua @@ -0,0 +1,89 @@ +local wk = require("which-key") + +wk.register({ + o = { + p = { "NvimTreeToggle", "Open project sidebar" }, + }, +}, { + prefix = "", +}) + +require("nvim-tree").setup({ + auto_reload_on_write = true, + create_in_closed_folder = false, + disable_netrw = false, + hijack_netrw = true, + hijack_unnamed_buffer_when_opening = false, + ignore_buffer_on_setup = false, + open_on_setup = false, + open_on_setup_file = false, + open_on_tab = false, + sort_by = "name", + update_cwd = true, + reload_on_bufenter = false, + respect_buf_cwd = true, + ignore_ft_on_setup = {}, + hijack_cursor = false, + update_focused_file = { + enable = true, + update_cwd = true, + ignore_list = {}, + }, + system_open = { + cmd = nil, + args = {}, + }, + view = { + width = 30, + side = "left", + signcolumn = "no", + mappings = { + custom_only = false, + list = {}, + }, + }, + git = { + ignore = false, + }, + renderer = { + special_files = {}, + group_empty = false, + highlight_git = true, + icons = { + git_placement = "before", + show = { + file = true, + folder = true, + folder_arrow = true, + git = true, + }, + glyphs = { + default = "", + symlink = "", + git = { + unstaged = "", + staged = "", + unmerged = "", + renamed = "", + untracked = "", + deleted = "", + ignored = "", + }, + }, + }, + }, + diagnostics = { + enable = false, + show_on_dirs = false, + icons = { + hint = "", + info = "", + warning = "", + error = "", + }, + }, + trash = { + cmd = "trash", + require_confirm = true, + }, +}) diff --git a/lua/plugins/nvim-treesitter.lua b/lua/plugins/nvim-treesitter.lua new file mode 100644 index 0000000..148eba4 --- /dev/null +++ b/lua/plugins/nvim-treesitter.lua @@ -0,0 +1,34 @@ +local utils = require("utils") +local tsconf = require("nvim-treesitter.configs") + +require("orgmode").setup_ts_grammar() +require("nvim-ts-autotag").setup() + +if not tsconf then + vim.cmd([[ echom 'Cannot load `nvim-treesitter.configs`' ]]) + return +end + +tsconf.setup({ + ensure_installed = "all", + ignore_install = { "phpdoc" }, + highlight = { + enable = true, + additional_vim_regex_highlighting = { "org" }, + }, + indent = { + enable = true, + }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "gnn", + node_incremental = "grn", + scope_incremental = "grc", + node_decremental = "grm", + }, + }, + context_commentstring = { + enable = true, + }, +}) diff --git a/lua/plugins/nvim-ufo.lua b/lua/plugins/nvim-ufo.lua new file mode 100644 index 0000000..b2babd9 --- /dev/null +++ b/lua/plugins/nvim-ufo.lua @@ -0,0 +1,44 @@ +vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]] + +vim.o.foldenable = true +vim.o.foldmethod = "manual" +vim.o.foldcolumn = "1" +vim.o.foldlevel = 99 +vim.o.foldlevelstart = 99 + +local handler = function(virtText, lnum, endLnum, width, truncate) + local newVirtText = {} + local suffix = ("  %d "):format(endLnum - lnum) + local sufWidth = vim.fn.strdisplaywidth(suffix) + local targetWidth = width - sufWidth + local curWidth = 0 + for _, chunk in ipairs(virtText) do + local chunkText = chunk[1] + local chunkWidth = vim.fn.strdisplaywidth(chunkText) + if targetWidth > curWidth + chunkWidth then + table.insert(newVirtText, chunk) + else + chunkText = truncate(chunkText, targetWidth - curWidth) + local hlGroup = chunk[2] + table.insert(newVirtText, { chunkText, hlGroup }) + chunkWidth = vim.fn.strdisplaywidth(chunkText) + -- str width returned from truncate() may less than 2nd argument, need padding + if curWidth + chunkWidth < targetWidth then + suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth) + end + break + end + curWidth = curWidth + chunkWidth + end + table.insert(newVirtText, { suffix, "MoreMsg" }) + return newVirtText +end + +vim.keymap.set("n", "zR", require("ufo").openAllFolds) +vim.keymap.set("n", "zM", require("ufo").closeAllFolds) + +require("ufo").setup({ + provider_selector = function() + return { "treesitter", "indent" } + end, +}) diff --git a/lua/plugins/nvim-web-devicons.lua b/lua/plugins/nvim-web-devicons.lua new file mode 100644 index 0000000..6e64ed1 --- /dev/null +++ b/lua/plugins/nvim-web-devicons.lua @@ -0,0 +1,3 @@ +require'nvim-web-devicons'.setup { + default = true; +} diff --git a/lua/plugins/orgmode-nvim.lua b/lua/plugins/orgmode-nvim.lua new file mode 100644 index 0000000..a325389 --- /dev/null +++ b/lua/plugins/orgmode-nvim.lua @@ -0,0 +1,46 @@ +local wk = require("which-key") + +require("orgmode").setup({ + org_agenda_files = { + "~/.org/work/*", + "~/org/learning/*", + "~/.org/projects/*", + "~/.org/calendars/*", + "~/.org/conferences/*", + }, + org_default_notes_file = "~/.org/refile.org", +}) + +vim.api.nvim_create_autocmd("BufEnter", { + pattern = "*.org", + callback = function() + vim.wo.foldexpr = "nvim_treesitter#foldexpr()" + vim.wo.foldmethod = "expr" + end, +}) + +local wk_open_org_agenda = { + [[lua require('orgmode').action("agenda.prompt")]], + "Org agenda", +} + +wk.register({ + O = { + name = "Org mode", + a = wk_open_org_agenda, + f = { + [[lua require('telescope.builtin').find_files{ cwd = '~/.org' }]], + "Find file in notes", + }, + n = { + [[lua require('orgmode').action("capture.prompt")]], + "Org capture", + }, + s = { + [[lua require('telescope.builtin').live_grep{ cwd = '~/.org' }]], + "Search notes", + }, + }, +}, { + prefix = "", +}) diff --git a/lua/plugins/project-nvim.lua b/lua/plugins/project-nvim.lua new file mode 100644 index 0000000..a28ec2e --- /dev/null +++ b/lua/plugins/project-nvim.lua @@ -0,0 +1,20 @@ +require("project_nvim").setup({ + manual_mode = false, + detection_methods = { "lsp", "pattern" }, + patterns = { + ".git", + "_darcs", + ".hg", + ".bzr", + ".svn", + "Makefile", + "package.json", + ".luarc.json", + ".zk", + }, + ignore_lsp = {}, + exclude_dirs = {}, + show_hidden = true, + silent_chdir = true, + datapath = vim.fn.stdpath("data"), +}) diff --git a/lua/plugins/rnvimr.lua b/lua/plugins/rnvimr.lua new file mode 100644 index 0000000..198ace5 --- /dev/null +++ b/lua/plugins/rnvimr.lua @@ -0,0 +1,13 @@ +local wk = require("which-key") + +wk.register({ + f = { + r = {"RnvimrToggle", "Toggle Ranger"} + } +}, { + prefix = "" +}) + +vim.g.rnvimr_enable_ex = 0 +vim.g.rnvimr_enable_picker = 1 +vim.g.rnvimr_enable_bw = 0 diff --git a/lua/plugins/telescope-nvim.lua b/lua/plugins/telescope-nvim.lua new file mode 100644 index 0000000..05853bb --- /dev/null +++ b/lua/plugins/telescope-nvim.lua @@ -0,0 +1,108 @@ +local wk = require("which-key") +local actions = require("telescope.actions") + +local M = {} + +M.project_files = function() + local opts = {} + local ok = pcall(require("telescope.builtin").git_files, opts) + if not ok then + require("telescope.builtin").find_files(opts) + end +end + +M.file_browser = function() + require("telescope").extensions.file_browser.file_browser({ + cwd = vim.fn.expand("%:p:h"), + }) +end + +require("telescope").setup({ + defaults = { + mappings = { + i = { + [""] = actions.close, + }, + }, + }, + pickers = { + git_files = { + show_untracked = true, + }, + find_files = { + hidden = true, + follow = true, + }, + live_grep = { + hidden = true, + follow = true, + }, + }, + extensions = { + file_browser = { + hidden = true, + follow = true, + }, + fzf = { + fuzzy = true, + override_generic_sorter = true, + override_file_sorter = true, + case_mode = "smart_case", + }, + }, +}) + +require("telescope").load_extension("file_browser") +require("telescope").load_extension("ui-select") +require("telescope").load_extension("fzf") +require("telescope").load_extension("projects") + +local browse_files = { + function() + M.file_browser() + end, + "Browse files", +} +local find_file_in_project = { + function() + M.project_files() + end, + "Find file in project", +} + +wk.register({ + f = { + f = { "Telescope find_files", "Find file" }, + p = { + [[lua require('telescope.builtin').find_files{ cwd = '~/.config/nvim/' }]], + "Find config file", + }, + o = { "Telescope oldfiles", "Open recent file" }, + b = browse_files, + }, + b = { + b = { "Telescope buffers", "Switch buffer" }, + }, + h = { + h = { "Telescope help_tags", "Vim help tags" }, + m = { "Telescope man_pages", "Man pages" }, + }, + p = { + p = { "Telescope projects", "Switch to project" }, + f = find_file_in_project, + }, + g = { + c = { "Telescope git_commits", "Checkout commit" }, + C = { "Telescope git_bcommits", "Checkout buffer commit" }, + B = { "Telescope git_branches", "Switch branch" }, + s = { "Telescope git_stash", "Apply stash" }, + }, + [""] = find_file_in_project, + ["."] = browse_files, + [","] = { "Telescope buffers", "Switch buffer" }, + ["/"] = { "Telescope live_grep", "Live grep" }, +}, { + prefix = "", +}) + +return M diff --git a/lua/plugins/term.lua b/lua/plugins/term.lua new file mode 100644 index 0000000..68b3d0a --- /dev/null +++ b/lua/plugins/term.lua @@ -0,0 +1,41 @@ +require("toggleterm").setup({ + hide_numbers = true, + shade_terminals = true, + start_in_insert = true, + direction = "horizontal", + close_on_exit = false, +}) + +local Terminal = require("toggleterm.terminal").Terminal +local lazygit = Terminal:new({ + cmd = "lazygit", + hidden = true, + direction = "tab", + on_open = function(term) + vim.cmd("startinsert!") + vim.api.nvim_buf_set_keymap(term.bufnr, "t", "", "", { noremap = true, silent = true }) + vim.api.nvim_buf_set_keymap(term.bufnr, "t", "", "", { + callback = function() + term:toggle() + end, + noremap = true, + silent = true, + }) + end, +}) + +local wk = require("which-key") + +wk.register({ + g = { + g = { + function() + lazygit:toggle() + end, + "Open lazygit", + }, + }, + o = { + t = { 'exe v:count1 . "ToggleTerm"', "Open terminal" }, + }, +}, { prefix = "" }) diff --git a/lua/plugins/testing.lua b/lua/plugins/testing.lua new file mode 100644 index 0000000..6f370c8 --- /dev/null +++ b/lua/plugins/testing.lua @@ -0,0 +1,57 @@ +local wk = require("which-key") + +require("neotest").setup({ + adapters = { + require("neotest-jest"), + require("neotest-python"), + require("neotest-go"), + }, +}) + +local run_current_test_keybiding = { + function() + require("neotest").run.run() + end, + "Current test", +} + +local keybindings = { + name = "Test", + t = run_current_test_keybiding, + T = { + function() + require("neotest").run.run(vim.fn.expand("%")) + end, + "Current file", + }, + d = { + function() + require("neotest").run.run({ strategy = "dap" }) + end, + "Debug current test", + }, + s = { + function() + require("neotest").run.stop() + end, + "Stop running test", + }, + a = { + function() + require("neotest").run.attach() + end, + "Attach to running test", + }, +} + +wk.register({ + r = { + t = run_current_test_keybiding, + T = keybindings, + }, + c = { + T = keybindings, + }, +}, { + prefix = "", +}) diff --git a/lua/plugins/tooling.lua b/lua/plugins/tooling.lua new file mode 100644 index 0000000..9b2d834 --- /dev/null +++ b/lua/plugins/tooling.lua @@ -0,0 +1,14 @@ +require("mason").setup() + +require("mason-tool-installer").setup({ + ensure_installed = { + "stylua", + "shellcheck", + "shfmt", + "editorconfig-checker", + "eslint", + "prettier", + "flake8", + "black", + }, +}) diff --git a/lua/plugins/twilight-nvim.lua b/lua/plugins/twilight-nvim.lua new file mode 100644 index 0000000..6a316d6 --- /dev/null +++ b/lua/plugins/twilight-nvim.lua @@ -0,0 +1,19 @@ +require("twilight").setup({ + treesitter = true, + expand = { + "function", + "method", + "table", + "if_statement", + }, +}) + +local wk = require("which-key") + +wk.register({ + t = { + t = { "Twilight", "Twilight" }, + }, +}, { + prefix = "", +}) diff --git a/lua/plugins/which-key.lua b/lua/plugins/which-key.lua new file mode 100644 index 0000000..13d4075 --- /dev/null +++ b/lua/plugins/which-key.lua @@ -0,0 +1,76 @@ +local wk = require("which-key") + +wk.setup() + +wk.register({ + f = { + name = "File", + C = { + function() + vim.api.nvim_input(":Copy " .. vim.fn.expand("%")) + end, + "Copy file", + }, + R = { + function() + vim.api.nvim_input(":Move " .. vim.fn.expand("%")) + end, + "Rename/move file", + }, + D = { + function() + vim.api.nvim_input(":Delete") + end, + "Delete file", + }, + P = { + function() + print(vim.fn.expand("%:p")) + end, + "Print absolute path", + }, + }, + b = { + name = "Buffer", + d = { "bdel", "Delete buffer" }, + s = { "write", "Save buffer" }, + }, + c = { + name = "Code", + }, + h = { + name = "Help", + }, + p = { + name = "Project", + }, + n = { + name = "Note", + }, + t = { + name = "Toggle", + }, + g = { + name = "Git", + }, + r = { + name = "Run", + }, + o = { + name = "Open", + t = { 'exe v:count1 . "ToggleTerm"', "Open terminal" }, + T = { "terminal", "Open terminal here" }, + }, + w = { + name = "Window", + d = { "close", "Close window" }, + v = { "vsplit", "Vertical split" }, + s = { "split", "Horizontal split" }, + }, + q = { + name = "Quit", + q = { "qa", "Quit nvim" }, + }, +}, { + prefix = "", +}) diff --git a/lua/plugins/zen-mode-nvim.lua b/lua/plugins/zen-mode-nvim.lua new file mode 100644 index 0000000..97bf21b --- /dev/null +++ b/lua/plugins/zen-mode-nvim.lua @@ -0,0 +1,11 @@ +require("zen-mode").setup() + +local wk = require('which-key') + +wk.register({ + t = { + z = {"ZenMode", "Zen mode"} + } +}, { + prefix = "" +}) diff --git a/lua/settings.lua b/lua/settings.lua new file mode 100644 index 0000000..18a1cfe --- /dev/null +++ b/lua/settings.lua @@ -0,0 +1,51 @@ +local utils = require("utils") + +local cmd = vim.cmd +local indent = 2 + +cmd("syntax enable") +cmd("filetype plugin indent on") +utils.opt("b", "expandtab", true) +utils.opt("b", "shiftwidth", indent) +utils.opt("b", "smartindent", false) +utils.opt("b", "autoindent", true) +utils.opt("b", "softtabstop", indent) +utils.opt("b", "tabstop", indent) +utils.opt("o", "hidden", true) +utils.opt("w", "wrap", true) +utils.opt("o", "ignorecase", true) +utils.opt("o", "scrolloff", 10) +utils.opt("o", "shiftround", true) +utils.opt("o", "smartcase", true) +utils.opt("o", "splitbelow", true) +utils.opt("o", "splitright", true) +utils.opt("w", "number", true) +utils.opt("w", "relativenumber", true) +utils.opt("w", "cursorline", true) +utils.opt("o", "clipboard", "unnamed,unnamedplus") +utils.opt("o", "lazyredraw", true) +utils.opt("b", "undofile", true) +utils.opt("o", "mouse", "a") +utils.opt("o", "scrolloff", 10) +utils.opt("o", "laststatus", 3) + +vim.g.maplocalleader = "," + +-- Highlight on yank +vim.cmd("au TextYankPost * lua vim.highlight.on_yank {on_visual = false}") + +-- Terminal +vim.api.nvim_create_augroup("Terminal", { clear = true }) +vim.api.nvim_create_autocmd("TermOpen", { + group = "Terminal", + pattern = "*", + callback = function() + vim.wo.number = false + vim.wo.relativenumber = false + vim.api.nvim_buf_set_keymap(0, "t", "", [[]], { noremap = true }) + vim.cmd("startinsert") + end, +}) + +require("keybindings") +require("colorscheme") diff --git a/lua/utils.lua b/lua/utils.lua new file mode 100644 index 0000000..42b7bfa --- /dev/null +++ b/lua/utils.lua @@ -0,0 +1,15 @@ +local utils = { } + +local scopes = {o = vim.o, b = vim.bo, w = vim.wo} + +function utils.opt(scope, key, value) + scopes[scope][key] = value + if scope ~= 'o' then scopes['o'][key] = value end +end + +function utils.map(mode, lhs, rhs, opts) + opts = opts or { noremap = true } + vim.api.nvim_set_keymap(mode, lhs, rhs, opts) +end + +return utils