2023-02-17 16:31:57 -05:00
-- Set <space> as the leader key
-- See `:help mapleader`
-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used)
vim.g . mapleader = ' '
vim.g . maplocalleader = ' '
2023-09-29 10:44:31 -03:00
-- disable netrw at the very start of your init.lua
vim.g . loaded_netrw = 1
vim.g . loaded_netrwPlugin = 1
2023-02-17 16:31:57 -05:00
-- Install package manager
-- https://github.com/folke/lazy.nvim
-- `:help lazy.nvim.txt` for more info
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 ' ,
2023-10-13 15:37:43 -03:00
' --branch=stable ' , -- latest stable release
2023-02-17 16:31:57 -05:00
lazypath ,
}
2022-06-23 23:35:53 -04:00
end
2023-02-17 16:31:57 -05:00
vim.opt . rtp : prepend ( lazypath )
2022-06-23 23:35:53 -04:00
2023-02-17 16:31:57 -05:00
require ( ' lazy ' ) . setup ( {
-- NOTE: First, some plugins that don't require any configuration
2022-11-18 21:04:04 -05:00
2023-02-17 16:31:57 -05:00
-- Git related plugins
' tpope/vim-fugitive ' ,
' tpope/vim-rhubarb ' ,
-- Detect tabstop and shiftwidth automatically
' tpope/vim-sleuth ' ,
-- NOTE: This is where your plugins related to LSP can be installed.
-- The configuration is done below. Search for lspconfig to find it below.
2023-05-08 11:02:37 +01:00
{
-- LSP Configuration & Plugins
2022-11-18 21:04:04 -05:00
' neovim/nvim-lspconfig ' ,
2023-02-17 16:31:57 -05:00
dependencies = {
2022-11-18 21:04:04 -05:00
-- Automatically install LSPs to stdpath for neovim
2023-04-13 22:34:06 +09:00
{ ' williamboman/mason.nvim ' , config = true } ,
2022-11-18 21:04:04 -05:00
' williamboman/mason-lspconfig.nvim ' ,
2023-10-04 20:16:01 -03:00
-- Useful status updates for LSP
2023-10-13 15:37:43 -03:00
' folke/neodev.nvim ' ,
2022-11-18 21:04:04 -05:00
} ,
2023-02-17 16:31:57 -05:00
} ,
2022-11-18 21:04:04 -05:00
2023-05-08 11:02:37 +01:00
{
-- Autocompletion
2022-11-18 21:04:04 -05:00
' hrsh7th/nvim-cmp ' ,
2023-05-21 23:46:09 -07:00
dependencies = {
-- Snippet Engine & its associated nvim-cmp source
' L3MON4D3/LuaSnip ' ,
' saadparwaiz1/cmp_luasnip ' ,
-- Adds LSP completion capabilities
' hrsh7th/cmp-nvim-lsp ' ,
-- Adds a number of user-friendly snippets
' rafamadriz/friendly-snippets ' ,
} ,
2023-02-17 16:31:57 -05:00
} ,
2022-11-18 21:04:04 -05:00
2023-02-17 16:31:57 -05:00
-- Useful plugin to show you pending keybinds.
2023-10-13 15:37:43 -03:00
{ ' folke/which-key.nvim ' , opts = { } } ,
2023-05-08 11:02:37 +01:00
{
2023-07-31 02:46:27 +09:00
-- Adds git related signs to the gutter, as well as utilities for managing changes
2023-02-17 16:31:57 -05:00
' lewis6991/gitsigns.nvim ' ,
opts = {
-- See `:help gitsigns.txt`
signs = {
add = { text = ' + ' } ,
change = { text = ' ~ ' } ,
delete = { text = ' _ ' } ,
topdelete = { text = ' ‾ ' } ,
changedelete = { text = ' ~ ' } ,
} ,
2023-02-26 23:03:34 -03:00
on_attach = function ( bufnr )
2023-10-13 15:37:43 -03:00
vim.keymap . set ( ' n ' , ' <leader>hp ' , require ( ' gitsigns ' ) . preview_hunk ,
{ buffer = bufnr , desc = ' Preview git hunk ' } )
2023-08-22 07:17:15 +03:00
-- don't override the built-in and fugitive keymaps
local gs = package.loaded . gitsigns
2023-10-13 15:37:43 -03:00
vim.keymap . set ( { ' n ' , ' v ' } , ' ]c ' , function ( )
2023-08-22 07:17:15 +03:00
if vim.wo . diff then return ' ]c ' end
vim.schedule ( function ( ) gs.next_hunk ( ) end )
return ' <Ignore> '
2023-10-13 15:37:43 -03:00
end , { expr = true , buffer = bufnr , desc = " Jump to next hunk " } )
vim.keymap . set ( { ' n ' , ' v ' } , ' [c ' , function ( )
2023-08-22 07:17:15 +03:00
if vim.wo . diff then return ' [c ' end
vim.schedule ( function ( ) gs.prev_hunk ( ) end )
return ' <Ignore> '
2023-10-13 15:37:43 -03:00
end , { expr = true , buffer = bufnr , desc = " Jump to previous hunk " } )
2023-05-16 12:38:56 -07:00
end ,
2023-10-13 15:37:43 -03:00
current_line_blame = true ,
current_line_blame_opts = { delay = 1000 , virtual_text_pos = " eol " } ,
2023-02-17 16:31:57 -05:00
} ,
} ,
2023-06-04 16:10:59 +00:00
{
2023-10-04 20:16:01 -03:00
-- Theme inspired by Atom
' navarasu/onedark.nvim ' ,
2023-09-29 10:44:31 -03:00
lazy = true ,
2023-06-04 16:10:59 +00:00
} ,
2022-11-18 21:04:04 -05:00
2023-06-04 16:10:59 +00:00
{
-- Set lualine as statusline
' nvim-lualine/lualine.nvim ' ,
-- See `:help lualine.txt`
2023-10-04 20:16:01 -03:00
lazy = true ,
2023-06-04 16:10:59 +00:00
} ,
2022-11-18 21:04:04 -05:00
2023-05-08 11:02:37 +01:00
{
-- Add indentation guides even on blank lines
2023-10-13 15:37:43 -03:00
' lukas-reineke/indent-blankline.nvim ' ,
main = " ibl " ,
2023-02-17 16:31:57 -05:00
-- Enable `lukas-reineke/indent-blankline.nvim`
2023-10-13 15:37:43 -03:00
-- See `:help indent_blankline.txt`
2023-02-17 16:31:57 -05:00
} ,
2022-11-18 21:04:04 -05:00
2023-02-17 16:31:57 -05:00
-- "gc" to comment visual regions/lines
2023-05-16 12:38:56 -07:00
{ ' numToStr/Comment.nvim ' , opts = { } } ,
2022-08-24 11:48:08 +03:00
-- Fuzzy Finder (files, lsp, etc)
2023-02-17 16:31:57 -05:00
{
2023-08-05 17:28:18 -07:00
' nvim-telescope/telescope.nvim ' ,
branch = ' 0.1.x ' ,
dependencies = {
2023-08-06 16:27:05 +01:00
' nvim-lua/plenary.nvim ' ,
2023-08-05 17:31:01 -07:00
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
-- Only load if `make` is available. Make sure you have the system
-- requirements installed.
{
' nvim-telescope/telescope-fzf-native.nvim ' ,
-- NOTE: If you are having trouble with this installation,
-- refer to the README for telescope-fzf-native for more instructions.
build = ' make ' ,
cond = function ( )
return vim.fn . executable ' make ' == 1
end ,
} ,
2023-08-05 17:28:18 -07:00
} ,
2023-02-17 16:31:57 -05:00
} ,
2022-06-23 23:35:53 -04:00
2023-05-08 11:02:37 +01:00
{
-- Highlight, edit, and navigate code
2023-02-17 16:31:57 -05:00
' nvim-treesitter/nvim-treesitter ' ,
dependencies = {
' nvim-treesitter/nvim-treesitter-textobjects ' ,
} ,
2023-05-16 12:38:56 -07:00
build = ' :TSUpdate ' ,
2023-02-17 16:31:57 -05:00
} ,
2022-11-21 06:47:24 -06:00
2023-02-17 16:31:57 -05:00
-- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart
-- These are some example plugins that I've included in the kickstart repository.
-- Uncomment any of the lines below to enable them.
2023-10-06 17:10:01 -03:00
require ' kickstart.plugins.autoformat ' ,
require ' kickstart.plugins.debug ' ,
2022-06-23 23:35:53 -04:00
2023-07-01 12:34:20 -04:00
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
2023-02-17 16:31:57 -05:00
-- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping
-- up-to-date with whatever is in the kickstart repo.
2023-07-01 12:34:20 -04:00
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
2023-02-17 16:31:57 -05:00
--
-- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins
2023-07-01 12:34:20 -04:00
-- { import = 'custom.plugins' },
2023-09-29 10:44:31 -03:00
{ ' karb94/neoscroll.nvim ' } ,
{ ' nvim-tree/nvim-tree.lua ' } ,
{ ' akinsho/toggleterm.nvim ' } ,
{ ' nvim-tree/nvim-web-devicons ' } ,
{ ' terrortylor/nvim-comment ' } ,
2023-10-04 20:16:01 -03:00
{ ' crispgm/nvim-go ' } ,
{ ' doums/darcula ' } ,
{ ' andweeb/presence.nvim ' } ,
2023-02-17 16:31:57 -05:00
} , { } )
2022-06-23 23:35:53 -04:00
-- [[ Setting options ]]
-- See `:help vim.o`
2023-05-22 11:29:42 -07:00
-- NOTE: You can change these options as you wish!
2022-06-23 23:35:53 -04:00
-- Set highlight on search
vim.o . hlsearch = false
-- Make line numbers default
2023-10-06 17:10:01 -03:00
vim.wo . relativenumber = true
2022-06-23 23:35:53 -04:00
vim.wo . number = true
2023-10-13 15:37:43 -03:00
local columns = { 80 , 120 } -- Coloque os números das colunas limite desejadas aqui
2023-10-06 17:10:01 -03:00
-- Define as colunas de limite
vim.wo . colorcolumn = table.concat ( columns , ' , ' )
2022-06-23 23:35:53 -04:00
-- Enable mouse mode
vim.o . mouse = ' a '
2023-02-17 21:37:36 +00:00
-- Sync clipboard between OS and Neovim.
-- Remove this option if you want your OS clipboard to remain independent.
-- See `:help 'clipboard'`
vim.o . clipboard = ' unnamedplus '
2022-06-23 23:35:53 -04:00
-- Enable break indent
vim.o . breakindent = true
-- Save undo history
vim.o . undofile = true
2023-06-18 16:20:34 +02:00
-- Case-insensitive searching UNLESS \C or capital in search
2022-06-23 23:35:53 -04:00
vim.o . ignorecase = true
vim.o . smartcase = true
2023-02-17 16:31:57 -05:00
-- Keep signcolumn on by default
2022-06-23 23:35:53 -04:00
vim.wo . signcolumn = ' yes '
2023-02-17 16:31:57 -05:00
-- Decrease update time
vim.o . updatetime = 250
vim.o . timeoutlen = 300
2022-06-23 23:35:53 -04:00
-- Set completeopt to have a better completion experience
vim.o . completeopt = ' menuone,noselect '
2023-02-17 16:31:57 -05:00
-- NOTE: You should make sure your terminal supports this
vim.o . termguicolors = true
2023-10-04 20:16:01 -03:00
-- tabs
vim.o . tabstop = 4
vim.o . shiftwidth = 4
2022-06-23 23:35:53 -04:00
-- [[ Basic Keymaps ]]
-- Keymaps for better default experience
-- See `:help vim.keymap.set()`
vim.keymap . set ( { ' n ' , ' v ' } , ' <Space> ' , ' <Nop> ' , { silent = true } )
-- Remap for dealing with word wrap
vim.keymap . set ( ' n ' , ' k ' , " v:count == 0 ? 'gk' : 'k' " , { expr = true , silent = true } )
vim.keymap . set ( ' n ' , ' j ' , " v:count == 0 ? 'gj' : 'j' " , { expr = true , silent = true } )
-- [[ Highlight on yank ]]
-- See `:help vim.highlight.on_yank()`
local highlight_group = vim.api . nvim_create_augroup ( ' YankHighlight ' , { clear = true } )
vim.api . nvim_create_autocmd ( ' TextYankPost ' , {
callback = function ( )
vim.highlight . on_yank ( )
end ,
group = highlight_group ,
pattern = ' * ' ,
} )
-- [[ Configure Telescope ]]
2022-06-28 20:45:51 +00:00
-- See `:help telescope` and `:help telescope.setup()`
2022-06-23 23:35:53 -04:00
require ( ' telescope ' ) . setup {
defaults = {
mappings = {
i = {
[ ' <C-u> ' ] = false ,
[ ' <C-d> ' ] = false ,
} ,
} ,
} ,
}
-- Enable telescope fzf native, if installed
pcall ( require ( ' telescope ' ) . load_extension , ' fzf ' )
-- See `:help telescope.builtin`
vim.keymap . set ( ' n ' , ' <leader><space> ' , require ( ' telescope.builtin ' ) . buffers , { desc = ' [ ] Find existing buffers ' } )
vim.keymap . set ( ' n ' , ' <leader>/ ' , function ( )
-- You can pass additional configuration to telescope to change theme, layout, etc.
require ( ' telescope.builtin ' ) . current_buffer_fuzzy_find ( require ( ' telescope.themes ' ) . get_dropdown {
winblend = 10 ,
previewer = false ,
} )
2023-02-17 16:31:57 -05:00
end , { desc = ' [/] Fuzzily search in current buffer ' } )
2022-06-23 23:35:53 -04:00
2023-09-29 10:44:31 -03:00
vim.keymap . set ( ' n ' , ' <leader>gs ' , require ( ' telescope.builtin ' ) . git_status , { desc = ' Search [G]it [S]tatus ' } )
vim.keymap . set ( ' n ' , ' <leader>ff ' , require ( ' telescope.builtin ' ) . find_files , { desc = ' [S]earch [F]iles ' } )
vim.keymap . set ( ' n ' , ' <leader>fw ' , require ( ' telescope.builtin ' ) . grep_string , { desc = ' [S]earch current [W]ord ' } )
2022-06-23 23:35:53 -04:00
vim.keymap . set ( ' n ' , ' <leader>sg ' , require ( ' telescope.builtin ' ) . live_grep , { desc = ' [S]earch by [G]rep ' } )
vim.keymap . set ( ' n ' , ' <leader>sd ' , require ( ' telescope.builtin ' ) . diagnostics , { desc = ' [S]earch [D]iagnostics ' } )
2023-09-29 10:44:31 -03:00
vim.keymap . set ( ' n ' , ' <leader>e ' , " <cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<cr> " , { desc = ' [D]iagnostics ' } )
vim.diagnostic . config ( {
virtual_text = true ,
signs = true ,
underline = true ,
update_in_insert = false ,
severity_sort = false ,
} )
2022-06-23 23:35:53 -04:00
-- [[ Configure Treesitter ]]
-- See `:help nvim-treesitter`
require ( ' nvim-treesitter.configs ' ) . setup {
2023-09-29 10:44:31 -03:00
modules = { } ,
sync_install = true ,
ignore_install = { } ,
2022-06-23 23:35:53 -04:00
-- Add languages to be installed here that you want installed for treesitter
2023-08-27 06:48:22 +03:00
ensure_installed = { ' c ' , ' cpp ' , ' go ' , ' lua ' , ' python ' , ' rust ' , ' tsx ' , ' javascript ' , ' typescript ' , ' vimdoc ' , ' vim ' } ,
2023-02-17 16:31:57 -05:00
-- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
auto_install = false ,
2022-06-23 23:35:53 -04:00
highlight = { enable = true } ,
2023-06-07 20:41:30 -04:00
indent = { enable = true } ,
2022-06-23 23:35:53 -04:00
incremental_selection = {
enable = true ,
keymaps = {
init_selection = ' <c-space> ' ,
node_incremental = ' <c-space> ' ,
scope_incremental = ' <c-s> ' ,
2023-02-17 16:31:57 -05:00
node_decremental = ' <M-space> ' ,
2022-06-23 23:35:53 -04:00
} ,
} ,
textobjects = {
select = {
enable = true ,
2023-10-13 15:37:43 -03:00
lookahead = true , -- Automatically jump forward to textobj, similar to targets.vim
2022-06-23 23:35:53 -04:00
keymaps = {
-- You can use the capture groups defined in textobjects.scm
2022-11-25 18:18:01 +00:00
[ ' aa ' ] = ' @parameter.outer ' ,
[ ' ia ' ] = ' @parameter.inner ' ,
2022-06-23 23:35:53 -04:00
[ ' af ' ] = ' @function.outer ' ,
[ ' if ' ] = ' @function.inner ' ,
[ ' ac ' ] = ' @class.outer ' ,
[ ' ic ' ] = ' @class.inner ' ,
} ,
} ,
move = {
enable = true ,
2023-10-13 15:37:43 -03:00
set_jumps = true , -- whether to set jumps in the jumplist
2022-06-23 23:35:53 -04:00
goto_next_start = {
[ ' ]m ' ] = ' @function.outer ' ,
[ ' ]] ' ] = ' @class.outer ' ,
} ,
goto_next_end = {
[ ' ]M ' ] = ' @function.outer ' ,
[ ' ][ ' ] = ' @class.outer ' ,
} ,
goto_previous_start = {
[ ' [m ' ] = ' @function.outer ' ,
[ ' [[ ' ] = ' @class.outer ' ,
} ,
goto_previous_end = {
[ ' [M ' ] = ' @function.outer ' ,
[ ' [] ' ] = ' @class.outer ' ,
} ,
} ,
swap = {
enable = true ,
swap_next = {
[ ' <leader>a ' ] = ' @parameter.inner ' ,
} ,
swap_previous = {
[ ' <leader>A ' ] = ' @parameter.inner ' ,
} ,
} ,
} ,
}
-- Diagnostic keymaps
2023-05-16 12:38:56 -07:00
vim.keymap . set ( ' n ' , ' [d ' , vim.diagnostic . goto_prev , { desc = ' Go to previous diagnostic message ' } )
vim.keymap . set ( ' n ' , ' ]d ' , vim.diagnostic . goto_next , { desc = ' Go to next diagnostic message ' } )
vim.keymap . set ( ' n ' , ' <leader>e ' , vim.diagnostic . open_float , { desc = ' Open floating diagnostic message ' } )
vim.keymap . set ( ' n ' , ' <leader>q ' , vim.diagnostic . setloclist , { desc = ' Open diagnostics list ' } )
2022-06-23 23:35:53 -04:00
2023-05-21 23:46:09 -07:00
-- [[ Configure LSP ]]
2022-06-23 23:35:53 -04:00
-- This function gets run when an LSP connects to a particular buffer.
local on_attach = function ( _ , bufnr )
-- NOTE: Remember that lua is a real programming language, and as such it is possible
-- to define small helper and utility functions so you don't have to repeat yourself
-- many times.
--
-- In this case, we create a function that lets us more easily define mappings specific
-- for LSP related items. It sets the mode, buffer and description for us each time.
local nmap = function ( keys , func , desc )
if desc then
desc = ' LSP: ' .. desc
end
vim.keymap . set ( ' n ' , keys , func , { buffer = bufnr , desc = desc } )
end
nmap ( ' <leader>rn ' , vim.lsp . buf.rename , ' [R]e[n]ame ' )
2022-06-24 17:19:15 +01:00
nmap ( ' <leader>ca ' , vim.lsp . buf.code_action , ' [C]ode [A]ction ' )
2022-06-23 23:35:53 -04:00
nmap ( ' gd ' , vim.lsp . buf.definition , ' [G]oto [D]efinition ' )
2022-11-18 21:04:04 -05:00
nmap ( ' gr ' , require ( ' telescope.builtin ' ) . lsp_references , ' [G]oto [R]eferences ' )
2023-08-21 17:19:13 -04:00
nmap ( ' gI ' , require ( ' telescope.builtin ' ) . lsp_implementations , ' [G]oto [I]mplementation ' )
2022-12-13 11:21:34 -05:00
nmap ( ' <leader>D ' , vim.lsp . buf.type_definition , ' Type [D]efinition ' )
2022-06-23 23:35:53 -04:00
nmap ( ' <leader>ds ' , require ( ' telescope.builtin ' ) . lsp_document_symbols , ' [D]ocument [S]ymbols ' )
nmap ( ' <leader>ws ' , require ( ' telescope.builtin ' ) . lsp_dynamic_workspace_symbols , ' [W]orkspace [S]ymbols ' )
-- See `:help K` for why this keymap
nmap ( ' K ' , vim.lsp . buf.hover , ' Hover Documentation ' )
nmap ( ' <C-k> ' , vim.lsp . buf.signature_help , ' Signature Documentation ' )
-- Lesser used LSP functionality
nmap ( ' gD ' , vim.lsp . buf.declaration , ' [G]oto [D]eclaration ' )
nmap ( ' <leader>wa ' , vim.lsp . buf.add_workspace_folder , ' [W]orkspace [A]dd Folder ' )
nmap ( ' <leader>wr ' , vim.lsp . buf.remove_workspace_folder , ' [W]orkspace [R]emove Folder ' )
nmap ( ' <leader>wl ' , function ( )
print ( vim.inspect ( vim.lsp . buf.list_workspace_folders ( ) ) )
end , ' [W]orkspace [L]ist Folders ' )
-- Create a command `:Format` local to the LSP buffer
2022-08-24 11:17:50 +03:00
vim.api . nvim_buf_create_user_command ( bufnr , ' Format ' , function ( _ )
2022-12-20 22:12:39 -05:00
vim.lsp . buf.format ( )
2022-08-24 11:17:50 +03:00
end , { desc = ' Format current buffer with LSP ' } )
2022-06-23 23:35:53 -04:00
end
-- Enable the following language servers
2022-12-20 22:12:39 -05:00
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
--
-- Add any additional override configuration in the following tables. They will be passed to
-- the `settings` field of the server config. You must look up that documentation yourself.
2023-07-24 20:41:14 +02:00
--
-- If you want to override the default filetypes that your language server will attach to you can
-- define the property 'filetypes' to the map in question.
2022-12-20 22:12:39 -05:00
local servers = {
-- clangd = {},
-- gopls = {},
-- pyright = {},
-- rust_analyzer = {},
-- tsserver = {},
2023-07-24 20:41:14 +02:00
-- html = { filetypes = { 'html', 'twig', 'hbs'} },
2022-12-20 22:12:39 -05:00
2023-02-17 16:31:57 -05:00
lua_ls = {
2022-12-20 22:12:39 -05:00
Lua = {
workspace = { checkThirdParty = false } ,
telemetry = { enable = false } ,
} ,
} ,
2022-06-23 23:35:53 -04:00
}
2022-12-20 22:12:39 -05:00
-- Setup neovim lua configuration
require ( ' neodev ' ) . setup ( )
2023-02-17 16:31:57 -05:00
2022-12-20 22:12:39 -05:00
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
2022-11-18 21:04:04 -05:00
local capabilities = vim.lsp . protocol.make_client_capabilities ( )
capabilities = require ( ' cmp_nvim_lsp ' ) . default_capabilities ( capabilities )
2022-12-20 22:12:39 -05:00
-- Ensure the servers above are installed
local mason_lspconfig = require ' mason-lspconfig '
2022-11-18 21:04:04 -05:00
2022-12-20 22:12:39 -05:00
mason_lspconfig.setup {
ensure_installed = vim.tbl_keys ( servers ) ,
}
mason_lspconfig.setup_handlers {
function ( server_name )
require ( ' lspconfig ' ) [ server_name ] . setup {
capabilities = capabilities ,
on_attach = on_attach ,
settings = servers [ server_name ] ,
2023-07-25 17:06:04 +02:00
filetypes = ( servers [ server_name ] or { } ) . filetypes ,
2022-12-20 22:12:39 -05:00
}
2023-07-24 20:41:14 +02:00
end
2022-06-23 23:35:53 -04:00
}
2023-05-21 23:46:09 -07:00
-- [[ Configure nvim-cmp ]]
-- See `:help cmp`
2022-06-23 23:35:53 -04:00
local cmp = require ' cmp '
local luasnip = require ' luasnip '
2023-05-16 12:38:56 -07:00
require ( ' luasnip.loaders.from_vscode ' ) . lazy_load ( )
2023-02-17 16:31:57 -05:00
luasnip.config . setup { }
2022-06-23 23:35:53 -04:00
cmp.setup {
2023-10-13 15:37:43 -03:00
snippet = {
2022-06-23 23:35:53 -04:00
expand = function ( args )
luasnip.lsp_expand ( args.body )
end ,
} ,
mapping = cmp.mapping . preset.insert {
2023-04-27 09:33:10 +02:00
[ ' <C-n> ' ] = cmp.mapping . select_next_item ( ) ,
[ ' <C-p> ' ] = cmp.mapping . select_prev_item ( ) ,
2022-06-23 23:35:53 -04:00
[ ' <C-d> ' ] = cmp.mapping . scroll_docs ( - 4 ) ,
[ ' <C-f> ' ] = cmp.mapping . scroll_docs ( 4 ) ,
2023-02-17 16:31:57 -05:00
[ ' <C-Space> ' ] = cmp.mapping . complete { } ,
2022-06-23 23:35:53 -04:00
[ ' <CR> ' ] = cmp.mapping . confirm {
behavior = cmp.ConfirmBehavior . Replace ,
select = true ,
} ,
[ ' <Tab> ' ] = cmp.mapping ( function ( fallback )
if cmp.visible ( ) then
cmp.select_next_item ( )
2023-05-07 16:28:13 -07:00
elseif luasnip.expand_or_locally_jumpable ( ) then
2022-06-23 23:35:53 -04:00
luasnip.expand_or_jump ( )
else
fallback ( )
end
end , { ' i ' , ' s ' } ) ,
[ ' <S-Tab> ' ] = cmp.mapping ( function ( fallback )
if cmp.visible ( ) then
cmp.select_prev_item ( )
2023-05-07 16:38:44 -07:00
elseif luasnip.locally_jumpable ( - 1 ) then
2022-06-23 23:35:53 -04:00
luasnip.jump ( - 1 )
else
fallback ( )
end
end , { ' i ' , ' s ' } ) ,
} ,
sources = {
{ name = ' nvim_lsp ' } ,
{ name = ' luasnip ' } ,
} ,
}
2023-09-29 10:44:31 -03:00
require ( " neoscroll " ) . setup ( )
2023-10-04 20:16:01 -03:00
-- require("catppuccin").setup({
-- flavour = "frappe", -- latte, frappe, macchiato, mocha
-- background = { -- :h background
-- dark = "frappe",
-- },
-- transparent_background = true, -- disables setting the background color.
--
-- color_overrides = {},
-- custom_highlights = {},
-- integrations = {
-- cmp = true,
-- gitsigns = true,
-- nvimtree = true,
-- treesitter = true,
-- notify = false,
-- mini = false,
-- },
-- })
2023-09-29 10:44:31 -03:00
-- setup must be called before loading
2023-10-04 20:16:01 -03:00
-- vim.cmd.colorscheme "darcula"
-- vim.cmd.colorscheme "catppuccin"
2023-09-29 10:44:31 -03:00
require ( " nvim-tree " ) . setup ( {
2023-10-13 15:37:43 -03:00
filters = {
2023-09-29 10:44:31 -03:00
dotfiles = false ,
exclude = { vim.fn . stdpath " config " .. " /lua/custom " } ,
} ,
disable_netrw = true ,
hijack_netrw = true ,
hijack_cursor = true ,
hijack_unnamed_buffer_when_opening = false ,
sync_root_with_cwd = true ,
update_focused_file = {
enable = true ,
update_root = false ,
} ,
view = {
adaptive_size = false ,
side = " left " ,
width = 30 ,
preserve_window_proportions = true ,
} ,
git = {
enable = false ,
ignore = true ,
} ,
filesystem_watchers = {
enable = true ,
} ,
actions = {
open_file = {
resize_window = true ,
} ,
} ,
renderer = {
root_folder_label = false ,
highlight_git = false ,
highlight_opened_files = " none " ,
indent_markers = {
enable = false ,
} ,
icons = {
show = {
file = true ,
folder = true ,
folder_arrow = true ,
git = false ,
} ,
glyphs = {
default = " " ,
symlink = " " ,
folder = {
default = " " ,
empty = " " ,
empty_open = " " ,
open = " " ,
symlink = " " ,
symlink_open = " " ,
arrow_open = " " ,
arrow_closed = " " ,
} ,
git = {
unstaged = " ✗ " ,
staged = " ✓ " ,
unmerged = " " ,
renamed = " ➜ " ,
untracked = " ★ " ,
deleted = " " ,
ignored = " ◌ " ,
} ,
} ,
} ,
} ,
} )
vim.keymap . set ( ' n ' , ' <leader>n ' , ' <cmd>NvimTreeToggle<cr> ' , { desc = ' [space|n] open explorer file menu ' } )
2023-10-06 17:10:01 -03:00
-- vim.keymap.set('n', '<c-n>', '<cmd>NvimTreeToggle<cr>', { desc = '[C|n] open explorer file menu' })
2023-09-29 10:44:31 -03:00
2023-10-13 15:37:43 -03:00
vim.keymap . set ( " n " , " <C-h> " , " <c-w>h " , { desc = " window: Focus left " } )
vim.keymap . set ( " n " , " <C-l> " , " <c-w>l " , { desc = " window: Focus right " } )
vim.keymap . set ( " n " , " <C-j> " , " <c-w>j " , { desc = " window: Focus down " } )
vim.keymap . set ( " n " , " <C-k> " , " <c-w>k " , { desc = " window: Focus up " } )
2023-09-29 10:44:31 -03:00
2023-10-13 15:37:43 -03:00
vim.keymap . set ( " t " , " <C-h> " , " <C- \\ ><C-N><C-w>h " , { desc = " window: Focus left " } )
vim.keymap . set ( " t " , " <C-l> " , " <C- \\ ><C-N><C-w>l " , { desc = " window: Focus right " } )
vim.keymap . set ( " t " , " <C-j> " , " <C- \\ ><C-N><C-w>j " , { desc = " window: Focus down " } )
vim.keymap . set ( " t " , " <C-k> " , " <C- \\ ><C-N><C-w>k " , { desc = " window: Focus up " } )
2023-09-29 10:44:31 -03:00
require ( " toggleterm " ) . setup ( {
open_mapping = [[<c-\>]] ,
} )
require ( ' nvim_comment ' ) . setup ( {
-- Linters prefer comment and line to have a space in between markers
marker_padding = true ,
-- should comment out empty or whitespace only lines
comment_empty = true ,
-- trim empty comment whitespace
comment_empty_trim_whitespace = true ,
-- Should key mappings be created
create_mappings = true ,
-- Normal mode mapping left hand side
line_mapping = " cl " ,
-- Visual/Operator mapping left hand side
operator_mapping = " c " ,
-- Hook function to call before commenting takes place
hook = nil
} )
2023-10-04 20:16:01 -03:00
require ( ' go ' ) . setup ( {
2023-10-13 15:37:43 -03:00
-- notify: use nvim-notify
notify = false ,
-- auto commands
auto_format = true ,
auto_lint = true ,
-- linters: revive, errcheck, staticcheck, golangci-lint
linter = ' golangci-lint ' ,
-- linter_flags: e.g., {revive = {'-config', '/path/to/config.yml'}}
linter_flags = { } ,
-- lint_prompt_style: qf (quickfix), vt (virtual text)
lint_prompt_style = ' vt ' ,
-- formatter: goimports, gofmt, gofumpt, lsp
formatter = ' goimports ' ,
-- maintain cursor position after formatting loaded buffer
maintain_cursor_pos = false ,
-- test flags: -count=1 will disable cache
test_flags = { ' -v ' } ,
test_timeout = ' 30s ' ,
test_env = { } ,
-- show test result with popup window
test_popup = true ,
test_popup_auto_leave = false ,
test_popup_width = 80 ,
test_popup_height = 10 ,
-- test open
test_open_cmd = ' edit ' ,
-- struct tags
tags_name = ' json ' ,
tags_options = { ' json=omitempty ' } ,
tags_transform = ' snakecase ' ,
tags_flags = { ' -skip-unexported ' } ,
-- quick type
quick_type_flags = { ' --just-types ' } ,
2023-10-04 20:16:01 -03:00
} )
require ( " ibl " ) . setup {
2023-10-13 15:37:43 -03:00
indent = { char = ' ┊ ' } ,
2023-10-04 20:16:01 -03:00
}
-- The setup config table shows all available config options with their default values:
require ( " presence " ) . setup ( {
2023-10-13 15:37:43 -03:00
-- General options
auto_update = true , -- Update activity based on autocmd events (if `false`, map or manually execute `:lua package.loaded.presence:update()`)
neovim_image_text = " The One True Text Editor " , -- Text displayed when hovered over the Neovim image
main_image = " neovim " , -- Main image display (either "neovim" or "file")
client_id = " 793271441293967371 " , -- Use your own Discord application client id (not recommended)
log_level = nil , -- Log messages at or above this level (one of the following: "debug", "info", "warn", "error")
debounce_timeout = 10 , -- Number of seconds to debounce events (or calls to `:lua package.loaded.presence:update(<filename>, true)`)
enable_line_number = false , -- Displays the current line number instead of the current project
blacklist = { } , -- A list of strings or Lua patterns that disable Rich Presence if the current file name, path, or workspace matches
buttons = true , -- Configure Rich Presence button(s), either a boolean to enable/disable, a static table (`{{ label = "<label>", url = "<url>" }, ...}`, or a function(buffer: string, repo_url: string|nil): table)
file_assets = { } , -- Custom file asset definitions keyed by file names and extensions (see default config at `lua/presence/file_assets.lua` for reference)
show_time = true , -- Show the timer
-- Rich Presence text options
editing_text = " Editing %s " , -- Format string rendered when an editable file is loaded in the buffer (either string or function(filename: string): string)
file_explorer_text = " Browsing %s " , -- Format string rendered when browsing a file explorer (either string or function(file_explorer_name: string): string)
git_commit_text = " Committing changes " , -- Format string rendered when committing changes in git (either string or function(filename: string): string)
plugin_manager_text = " Managing plugins " , -- Format string rendered when managing plugins (either string or function(plugin_manager_name: string): string)
reading_text = " Reading %s " , -- Format string rendered when a read-only or unmodifiable file is loaded in the buffer (either string or function(filename: string): string)
workspace_text = " Working on %s " , -- Format string rendered when in a git repository (either string or function(project_name: string|nil, filename: string): string)
line_number_text = " Line %s out of %s " , -- Format string rendered when `enable_line_number` is set to true (either string or function(line_number: number, line_count: number): string)
2023-10-04 20:16:01 -03:00
} )
-- Lua
2023-10-13 15:37:43 -03:00
require ( ' onedark ' ) . setup {
-- Main options --
style = ' dark ' , -- Default theme style. Choose between 'dark', 'darker', 'cool', 'deep', 'warm', 'warmer' and 'light'
transparent = true , -- Show/hide background
term_colors = true , -- Change terminal color as per the selected theme style
ending_tildes = false , -- Show the end-of-buffer tildes. By default they are hidden
cmp_itemkind_reverse = false , -- reverse item kind highlights in cmp menu
-- toggle theme style ---
toggle_style_key = nil , -- keybind to toggle theme style. Leave it nil to disable it, or set it to a string, for example "<leader>ts"
toggle_style_list = { ' dark ' , ' darker ' , ' cool ' , ' deep ' , ' warm ' , ' warmer ' , ' light ' } , -- List of styles to toggle between
-- Change code style ---
-- Options are italic, bold, underline, none
-- You can configure multiple style with comma separated, For e.g., keywords = 'italic,bold'
code_style = {
comments = ' italic ' ,
keywords = ' none ' ,
functions = ' none ' ,
strings = ' none ' ,
variables = ' none '
} ,
2023-10-04 20:16:01 -03:00
2023-10-13 15:37:43 -03:00
-- Lualine options --
lualine = {
transparent = true , -- lualine center bar transparency
} ,
2023-10-04 20:16:01 -03:00
2023-10-13 15:37:43 -03:00
-- Custom Highlights --
colors = { } , -- Override default colors
highlights = { } , -- Override highlight groups
2023-10-04 20:16:01 -03:00
2023-10-13 15:37:43 -03:00
-- Plugins Config --
diagnostics = {
darker = true , -- darker colors for diagnostic
undercurl = true , -- use undercurl instead of underline for diagnostics
background = true , -- use background color for virtual text
} ,
2023-10-04 20:16:01 -03:00
}
-- Eviline config for lualine
-- Author: shadmansaleh
-- Credit: glepnir
local lualine = require ( ' lualine ' )
-- Color table for highlights
-- stylua: ignore
local colors = {
bg = ' #202328 ' ,
fg = ' #bbc2cf ' ,
yellow = ' #ECBE7B ' ,
cyan = ' #008080 ' ,
darkblue = ' #081633 ' ,
green = ' #98be65 ' ,
orange = ' #FF8800 ' ,
violet = ' #a9a1e1 ' ,
magenta = ' #c678dd ' ,
blue = ' #51afef ' ,
red = ' #ec5f67 ' ,
}
local conditions = {
buffer_not_empty = function ( )
return vim.fn . empty ( vim.fn . expand ( ' %:t ' ) ) ~= 1
end ,
hide_in_width = function ( )
return vim.fn . winwidth ( 0 ) > 80
end ,
check_git_workspace = function ( )
local filepath = vim.fn . expand ( ' %:p:h ' )
local gitdir = vim.fn . finddir ( ' .git ' , filepath .. ' ; ' )
return gitdir and # gitdir > 0 and # gitdir < # filepath
end ,
}
-- Config
local config = {
options = {
2023-10-13 15:37:43 -03:00
transparent = true ,
2023-10-04 20:16:01 -03:00
-- Disable sections and component separators
component_separators = ' ' ,
section_separators = ' ' ,
theme = {
-- We are going to use lualine_c an lualine_x as left and
-- right section. Both are highlighted by c theme . So we
-- are just setting default looks o statusline
normal = { c = { fg = colors.fg } } ,
inactive = { c = { fg = colors.fg } } ,
} ,
} ,
sections = {
-- these are to remove the defaults
lualine_a = { } ,
lualine_b = { } ,
lualine_y = { } ,
lualine_z = { } ,
-- These will be filled later
lualine_c = { } ,
lualine_x = { } ,
} ,
inactive_sections = {
-- these are to remove the defaults
lualine_a = { } ,
lualine_b = { } ,
lualine_y = { } ,
lualine_z = { } ,
lualine_c = { } ,
lualine_x = { } ,
} ,
}
-- Inserts a component in lualine_c at left section
local function ins_left ( component )
table.insert ( config.sections . lualine_c , component )
end
-- Inserts a component in lualine_x at right section
local function ins_right ( component )
table.insert ( config.sections . lualine_x , component )
end
ins_left {
function ( )
return ' ▊ '
end ,
2023-10-13 15:37:43 -03:00
color = { fg = colors.blue } , -- Sets highlighting of component
padding = { left = 0 , right = 1 } , -- We don't need space before this
2023-10-04 20:16:01 -03:00
}
ins_left {
-- mode component
function ( )
return ' '
end ,
color = function ( )
-- auto change color according to neovims mode
local mode_color = {
n = colors.red ,
i = colors.green ,
v = colors.blue ,
[ ' ' ] = colors.blue ,
V = colors.blue ,
c = colors.magenta ,
no = colors.red ,
s = colors.orange ,
S = colors.orange ,
[ ' ' ] = colors.orange ,
ic = colors.yellow ,
R = colors.violet ,
Rv = colors.violet ,
cv = colors.red ,
ce = colors.red ,
r = colors.cyan ,
rm = colors.cyan ,
[ ' r? ' ] = colors.cyan ,
[ ' ! ' ] = colors.red ,
t = colors.red ,
}
return { fg = mode_color [ vim.fn . mode ( ) ] }
end ,
padding = { right = 1 } ,
}
ins_left {
-- filesize component
' filesize ' ,
cond = conditions.buffer_not_empty ,
}
ins_left {
' filename ' ,
cond = conditions.buffer_not_empty ,
color = { fg = colors.magenta , gui = ' bold ' } ,
}
ins_left { ' location ' }
ins_left { ' progress ' , color = { fg = colors.fg , gui = ' bold ' } }
ins_left {
' diagnostics ' ,
sources = { ' nvim_diagnostic ' } ,
symbols = { error = ' ' , warn = ' ' , info = ' ' } ,
diagnostics_color = {
color_error = { fg = colors.red } ,
color_warn = { fg = colors.yellow } ,
color_info = { fg = colors.cyan } ,
} ,
}
-- Insert mid section. You can make any number of sections in neovim :)
-- for lualine it's any number greater then 2
ins_left {
function ( )
return ' %= '
end ,
}
ins_right {
-- Lsp server name .
function ( )
local msg = ' No Active Lsp '
local buf_ft = vim.api . nvim_buf_get_option ( 0 , ' filetype ' )
local clients = vim.lsp . get_active_clients ( )
if next ( clients ) == nil then
return msg
end
for _ , client in ipairs ( clients ) do
local filetypes = client.config . filetypes
if filetypes and vim.fn . index ( filetypes , buf_ft ) ~= - 1 then
return client.name
end
end
return msg
end ,
icon = ' LSP: ' ,
color = { fg = ' #f4f4f4 ' , gui = ' bold ' } ,
}
ins_right {
' fileformat ' ,
fmt = string.upper ,
2023-10-13 15:37:43 -03:00
icons_enabled = false , -- I think icons are cool but Eviline doesn't have them. sigh
2023-10-04 20:16:01 -03:00
color = { fg = colors.green , gui = ' bold ' } ,
}
ins_right {
' branch ' ,
icon = ' ' ,
color = { fg = colors.violet , gui = ' bold ' } ,
}
ins_right {
' diff ' ,
-- Is it me or the symbol for modified us really weird
symbols = { added = ' ' , modified = ' ' , removed = ' ' } ,
diff_color = {
added = { fg = colors.green } ,
modified = { fg = colors.orange } ,
removed = { fg = colors.red } ,
} ,
cond = conditions.hide_in_width ,
}
-- Add components to right sections
ins_right {
2023-10-13 15:37:43 -03:00
' o:encoding ' , -- option component same as &encoding in viml
fmt = string.upper , -- I'm not sure why it's upper case either ;)
2023-10-04 20:16:01 -03:00
cond = conditions.hide_in_width ,
color = { fg = colors.green , gui = ' bold ' } ,
}
-- Now don't forget to initialize lualine
lualine.setup ( config )
require ( ' onedark ' ) . load ( )
2023-10-06 17:10:01 -03:00
-- vim.o.cursorcolumn = true
-- vim.o.cursorline = true
2023-10-04 20:16:01 -03:00
vim.o . laststatus = 3
2023-09-29 10:44:31 -03:00
2022-06-23 23:35:53 -04:00
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et