aboutsummaryrefslogtreecommitdiffstats
path: root/lua/config
diff options
context:
space:
mode:
Diffstat (limited to 'lua/config')
-rw-r--r--lua/config/editor.lua140
-rw-r--r--lua/config/lsp.lua78
-rw-r--r--lua/config/packer.lua61
3 files changed, 279 insertions, 0 deletions
diff --git a/lua/config/editor.lua b/lua/config/editor.lua
new file mode 100644
index 0000000..3db21d6
--- /dev/null
+++ b/lua/config/editor.lua
@@ -0,0 +1,140 @@
1local js_based_languages = { "typescript", "javascript", "typescriptreact", "javascriptreact" }
2local option = vim.opt;
3local keymap = vim.keymap;
4
5local dap = require("dap")
6local telescope = require('telescope.builtin');
7local autotag = require('nvim-ts-autotag').setup();
8local dap_vscode = require("dap-vscode-js").setup({
9 debugger_path = "(runtimedir)/site/pack/packer/opt/vscode-js-debug",
10 adapters = { 'chrome', 'pwa-node', 'pwa-chrome', 'pwa-msedge', 'node-terminal', 'pwa-extensionHost', 'node', 'chrome' },
11})
12
13--Basic Editor Setup
14option.nu = true;
15option.tabstop = 2;
16option.softtabstop = 2;
17option.shiftwidth = 2;
18option.expandtab = true;
19option.smartindent = true;
20option.wrap = false;
21option.swapfile = false;
22option.hlsearch = false;
23option.incsearch = true;
24option.updatetime = 50;
25option.laststatus = 0;
26option.signcolumn = "number";
27option.autoindent = true;
28option.clipboard = "unnamedplus";
29option.termguicolors = true;
30
31-- Setup Editor Theme
32 vim.cmd.colorscheme("gruvbox")
33 vim.cmd([[
34 highlight GitGutterAdd ctermbg=none
35 highlight GitGutterAdd guibg=none
36 highlight Normal ctermbg=none
37 highlight Normal guibg=none
38 highlight signcolumn ctermbg=none
39 highlight signcolumn guibg=none
40 ]])
41
42-- run specific commands after different file extensions
43vim.cmd([[
44 augroup RunPfOnSave
45 autocmd!
46 autocmd BufWritePost *.js,*.ts,*.jsx,*json !prettier --write .
47 autocmd BufWritePost *.tex :VimtexCompile
48 autocmd BufWritePost *.md :MarkdownPreview
49 augroup END
50]])
51
52-- vim.cmd([[
53-- augroup RunPfOnSave
54-- autocmd!
55-- augroup END
56-- ]])
57--
58-- vim.cmd([[
59-- augroup RunPfOnSave
60-- autocmd!
61-- autocmd BufWritePost *.tex :VimtexCompile
62-- augroup END
63--]])
64
65-- Gui options
66vim.o.guifont = "Fira Code:h7"
67vim.g.vimtex_view_method = 'zathura'
68vim.g.vimtex_compiler_method = 'latexrun'
69vim.g.gitgutter_set_sign_backgrounds = 1;
70vim.fn.sign_define('DapBreakpoint',{ text ='🟥', texthl ='', linehl ='', numhl =''})
71vim.fn.sign_define('DapStopped',{ text ='▶️', texthl ='', linehl ='', numhl =''})
72
73--Keybinds
74vim.g.mapleader = (" ")
75keymap.set("n", "<leader>e", vim.cmd.Ex)
76keymap.set('n', '<leader>f', telescope.find_files, {})
77keymap.set("n", "<leader>s", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]])
78keymap.set("n", "<leader>a", "ggVG")
79keymap.set("v", "J", ":m '>+1<CR>gv=gv")
80keymap.set("v", "K", ":m '<-2<CR>gv=gv")
81
82-- Debugger keybinds
83keymap.set('n', '<F5>', require 'dap'.continue)
84keymap.set('n', '<F10>', require 'dap'.step_over)
85keymap.set('n', '<F11>', require 'dap'.step_into)
86keymap.set('n', '<F12>', require 'dap'.step_out)
87keymap.set('n', '<leader>b', require 'dap'.toggle_breakpoint)
88
89keymap.set('n', '<leader>B', function()
90 require 'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))
91end)
92
93keymap.set('n', '<leader>ui', require 'dapui'.toggle)
94for _, language in ipairs(js_based_languages) do
95 require("dap").configurations[language] = {
96 {
97 type = "pwa-node",
98 request = "launch",
99 name = "Launch file",
100 program = "${file}",
101 cwd = "${workspaceFolder}",
102 },
103 {
104 type = "pwa-node",
105 request = "attach",
106 name = "Attach",
107 processId = require 'dap.utils'.pick_process,
108 cwd = "${workspaceFolder}",
109 },
110 {
111 type = "pwa-chrome",
112 request = "launch",
113 name = "Start Chrome with \"localhost\"",
114 url = "http://localhost:3000",
115 webRoot = "${workspaceFolder}",
116 userDataDir = "${workspaceFolder}/.vscode/vscode-chrome-debug-userdatadir"
117 }
118 }
119end
120require("dapui").setup()
121local dap, dapui = require("dap"), require("dapui")
122dap.listeners.after.event_initialized["dapui_config"] = function()
123 dapui.open({})
124end
125dap.listeners.before.event_terminated["dapui_config"] = function()
126 dapui.close({})
127end
128dap.listeners.before.event_exited["dapui_config"] = function()
129 dapui.close({})
130end
131
132--Treesitter
133require 'nvim-treesitter.configs'.setup {
134 ensure_installed = { "javascript", "typescript", "rust", "c", "lua", "vim" },
135 sync_install = false,
136 auto_install = true,
137 highlight = {
138 enable = true,
139 }
140}
diff --git a/lua/config/lsp.lua b/lua/config/lsp.lua
new file mode 100644
index 0000000..623aab3
--- /dev/null
+++ b/lua/config/lsp.lua
@@ -0,0 +1,78 @@
1-- local lsp = require('lsp-zero')
2
3local lsp_zero = require('lsp-zero')
4local cmp = require('cmp')
5require("luasnip.loaders.from_vscode").lazy_load()
6
7lsp_zero.preset('recommended')
8lsp_zero.setup()
9lsp_zero.on_attach(function(client, bufnr)
10 -- see :help lsp-zero-keybindings
11 -- to learn the available actions
12 lsp_zero.default_keymaps({buffer = bufnr})
13end)
14
15require('mason').setup({})
16require('mason-lspconfig').setup({
17 -- Replace the language servers listed here
18 -- with the ones you want to install
19 ensure_installed = {'tsserver', 'rust_analyzer', 'eslint'},
20 handlers = {
21 lsp_zero.default_setup,
22 },
23})
24
25
26
27require('tabnine').setup({
28 disable_auto_comment=true,
29 accept_keymap="<Tab>",
30 dismiss_keymap = "<C-]>",
31 debounce_ms = 800,
32 suggestion_color = {gui = "#808080", cterm = 244},
33 execlude_filetypes = {"TelescopePrompt"}
34})
35
36cmp.setup({
37 snippet = {
38 expand = function(args)
39 require('luasnip').lsp_expand(args.body)
40 end,
41 },
42 window = {
43 },
44 mapping = cmp.mapping.preset.insert({
45 ['<C-b>'] = cmp.mapping.scroll_docs(-4),
46 ['<C-f>'] = cmp.mapping.scroll_docs(4),
47 ['<C-Space>'] = cmp.mapping.complete(),
48 ['<C-e>'] = cmp.mapping.abort(),
49 ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
50 }),
51 sources = cmp.config.sources({
52 { name = 'nvim_lsp' },
53 { name = 'luasnip' },
54 }, {
55 { name = 'buffer' },
56 })
57})
58
59function PrintDiagnostics(opts, bufnr, line_nr, client_id)
60 bufnr = bufnr or 0
61 line_nr = line_nr or (vim.api.nvim_win_get_cursor(0)[1] - 1)
62 opts = opts or { ['lnum'] = line_nr }
63
64 local line_diagnostics = vim.diagnostic.get(bufnr, opts)
65 if vim.tbl_isempty(line_diagnostics) then return end
66
67 local diagnostic_message = ""
68 for i, diagnostic in ipairs(line_diagnostics) do
69 diagnostic_message = diagnostic_message .. string.format("%d: %s", i, diagnostic.message or "")
70 print(diagnostic_message)
71 if i ~= #line_diagnostics then
72 diagnostic_message = diagnostic_message .. "\n"
73 end
74 end
75 vim.api.nvim_echo({ { diagnostic_message, "Normal" } }, false, {})
76end
77
78vim.cmd [[ autocmd! CursorHold * lua PrintDiagnostics() ]]
diff --git a/lua/config/packer.lua b/lua/config/packer.lua
new file mode 100644
index 0000000..99af8d4
--- /dev/null
+++ b/lua/config/packer.lua
@@ -0,0 +1,61 @@
1vim.cmd [[packadd packer.nvim]]
2return require('packer').startup(function(use)
3 use 'wbthomason/packer.nvim'
4 use 'nvim-treesitter/nvim-treesitter'
5 use 'neovim/nvim-lspconfig'
6 use 'lukas-reineke/indent-blankline.nvim'
7 use 'lervag/vimtex'
8 use 'morhetz/gruvbox'
9 use 'airblade/vim-gitgutter'
10 use 'catppuccin/nvim'
11 use 'jose-elias-alvarez/null-ls.nvim'
12 use 'windwp/nvim-ts-autotag'
13 use 'mfussenegger/nvim-dap'
14 use 'mxsdev/nvim-dap-vscode-js'
15 use { "rcarriga/nvim-dap-ui", requires = {"mfussenegger/nvim-dap"} }
16 use {
17 'nvim-telescope/telescope.nvim', tag = '0.1.0',
18 requires = { { 'nvim-lua/plenary.nvim' } }
19 }
20 use {
21 'VonHeikemen/lsp-zero.nvim',
22 requires = {
23 { 'neovim/nvim-lspconfig' },
24 { 'williamboman/mason.nvim' },
25 { 'williamboman/mason-lspconfig.nvim' },
26 { 'hrsh7th/nvim-cmp' },
27 { 'hrsh7th/cmp-buffer' },
28 { 'hrsh7th/cmp-path' },
29 { 'saadparwaiz1/cmp_luasnip' },
30 { 'hrsh7th/cmp-nvim-lsp' },
31 { 'hrsh7th/cmp-nvim-lua' },
32 { 'rafamadriz/friendly-snippets' },
33 }
34 }
35use({
36 "L3MON4D3/LuaSnip",
37 -- follow latest release.
38 tag = "v2.*", -- Replace <CurrentMajor> by the latest released major (first number of latest release)
39 -- install jsregexp (optional!:).
40 run = "make install_jsregexp"
41})
42 use {
43 'numToStr/Comment.nvim',
44 config = function()
45 require('Comment').setup()
46 end
47 }
48 use({
49 "iamcco/markdown-preview.nvim",
50 run = "cd app && npm install",
51 setup = function() vim.g.mkdp_filetypes = { "markdown" } end,
52 ft = { "markdown" },
53 })
54 use {
55 "windwp/nvim-autopairs",
56 config = function() require("nvim-autopairs").setup {} end
57 }
58 use { 'codota/tabnine-nvim', run = "./dl_binaries.sh" }
59
60
61end)