diff --git a/dotfiles/home/.config/nvim/init.lua b/dotfiles/home/.config/nvim/init.lua new file mode 100644 index 0000000..11a2a7a --- /dev/null +++ b/dotfiles/home/.config/nvim/init.lua @@ -0,0 +1,11 @@ +require('core.plugins') -- plugins +require('core.mappings') -- key bindings +require('core.colors') -- colors and themes +-- require('core.config') + +-- require('plugins.lsp') +-- require('plugins.mason') +-- require('plugins.neotree') +-- require('plugins.treesitter') +-- require('plugins.telescope') +-- require('plugins.dashboard') diff --git a/dotfiles/home/.config/nvim/lazy-lock.json b/dotfiles/home/.config/nvim/lazy-lock.json new file mode 100644 index 0000000..f19729d --- /dev/null +++ b/dotfiles/home/.config/nvim/lazy-lock.json @@ -0,0 +1,6 @@ +{ + "lazy.nvim": { "branch": "main", "commit": "758bb5de98b805acc5eeed8cdc8ac7f0bc4b0b86" }, + "onedark.vim": { "branch": "main", "commit": "57b77747694ea5676c3ca0eeaf9567dc499730c0" }, + "toggleterm.nvim": { "branch": "main", "commit": "066cccf48a43553a80a210eb3be89a15d789d6e6" }, + "vim-be-good": { "branch": "master", "commit": "4fa57b7957715c91326fcead58c1fa898b9b3625" } +} \ No newline at end of file diff --git a/dotfiles/home/.config/nvim/lua/core/colors.lua b/dotfiles/home/.config/nvim/lua/core/colors.lua new file mode 100644 index 0000000..1c5ede0 --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/core/colors.lua @@ -0,0 +1,13 @@ +vim.opt.termguicolors = true + +function SetColor(color) + color = color or "onedark" + vim.cmd.colorscheme(color) + + -- vim.api.nvim_set_hl(0, "Normal", {bg = "none"}) + -- vim.api.nvim_set_hl(0, "NormalFloat", {bg = "none"}) + -- vim.api.nvim_set_hl(0, "ColorColumn", {bg = "none"}) + -- vim.api.nvim_set_hl(0, "LineNr", {bg = "none"}) +end + +SetColor() diff --git a/dotfiles/home/.config/nvim/lua/core/config.lua b/dotfiles/home/.config/nvim/lua/core/config.lua new file mode 100644 index 0000000..96f19c4 --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/core/config.lua @@ -0,0 +1,54 @@ +vim.wo.number = true +vim.wo.relativenumber = false + +vim.g.did_load_filetypes = 1 +vim.g.formatoptions = "qrn1" +vim.opt.showmode = false +vim.opt.updatetime = 100 +vim.wo.signcolumn = "yes" +vim.opt.scrolloff = 8 +vim.opt.wrap = false +vim.wo.linebreak = true +vim.opt.virtualedit = "block" +vim.opt.undofile = true +vim.opt.shell = "/bin/zsh" + +-- Mouse +vim.opt.mouse = "a" +vim.opt.mousefocus = true + +-- Line Numbers +vim.opt.number = true +vim.opt.relativenumber = true + +-- Splits +vim.opt.splitbelow = true +vim.opt.splitright = false + +-- Clipboard +vim.opt.clipboard = "unnamedplus" + +-- Shorter messages +vim.opt.shortmess:append("c") + +-- Indent Settings +vim.opt.expandtab = true +vim.opt.shiftwidth = 4 +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.smartindent = true + +-- Fillchars +vim.opt.fillchars = { + vert = "│", + fold = "⠀", + eob = " ", -- suppress ~ at EndOfBuffer + -- diff = "⣿", -- alternatives = ⣿ ░ ─ ╱ + msgsep = "‾", + foldopen = "▾", + foldsep = "│", + foldclose = "▸" +} + +vim.cmd([[highlight clear LineNr]]) +vim.cmd([[highlight clear SignColumn]]) diff --git a/dotfiles/home/.config/nvim/lua/core/mappings.lua b/dotfiles/home/.config/nvim/lua/core/mappings.lua new file mode 100644 index 0000000..4fe3723 --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/core/mappings.lua @@ -0,0 +1,7 @@ +vim.g.mapleader = " " + + + +-- Neotree +-- vim.keymap.set('n', 'e', ':Neotree float focus') +-- vim.keymap.set('n', 'o', ':Neotree float git_status') diff --git a/dotfiles/home/.config/nvim/lua/core/plugins.lua b/dotfiles/home/.config/nvim/lua/core/plugins.lua new file mode 100644 index 0000000..bdd8a0b --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/core/plugins.lua @@ -0,0 +1,111 @@ +local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim' +if not (vim.uv or vim.loop).fs_stat(lazypath) then + vim.fn.system({ + 'git', + 'clone', + '--filter=blob:none', + 'https://github.com/folke/lazy.nvim.git', + '--branch=stable', -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +require('lazy').setup({ + + ----------------------------------------------------------------- + -- Example + ----------------------------------------------------------------- + + -- https://github.com/vendor/package + -- { 'vendor/package' }, + + ----------------------------------------------------------------- + -- Misc + ----------------------------------------------------------------- + + -- https://github.com/ThePrimeagen/vim-be-good + { 'ThePrimeagen/vim-be-good' }, + + ----------------------------------------------------------------- + -- Navigation + ----------------------------------------------------------------- + + -- https://github.com/smoka7/hop.nvim + -- { 'smoka7/hop.nvim' }, + + -- https://github.com/akinsho/nvim-toggleterm.lua + { + 'akinsho/toggleterm.nvim', + version = "*", + config = true, + }, + + -- https://github.com/nvim-neo-tree/neo-tree.nvim + -- { + -- 'nvim-neo-tree/neo-tree.nvim', + -- branch = 'v3.x', + -- dependencies = { + -- 'nvim-lua/plenary.nvim', + -- 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended + -- 'MunifTanjim/nui.nvim', + -- -- '3rd/image.nvim', -- Optional image support in preview window: See `# Preview Mode` for more information + -- } + -- }, + + -- https://github.com/nvim-telescope/telescope.nvim + -- { + -- 'nvim-telescope/telescope.nvim', + -- branch = '0.1.x', + -- dependencies = { 'nvim-lua/plenary.nvim' } + -- }, + + ----------------------------------------------------------------- + -- Colors, themes & highlighting + ----------------------------------------------------------------- + + -- https://github.com/glepnir/dashboard-nvim + -- { + -- 'glepnir/dashboard-nvim', + -- event = 'VimEnter', + -- dependencies = {{'nvim-tree/nvim-web-devicons'}} + -- }, + + -- https://github.com/joshdick/onedark.vim + { 'joshdick/onedark.vim' }, + + -- https://github.com/nvim-treesitter/nvim-treesitter + -- { 'nvim-treesitter/nvim-treesitter' }, + + -- https://github.com/folke/todo-comments.nvim + -- { 'folke/todo-comments.nvim' }, + + ----------------------------------------------------------------- + -- LSP & autocomplete + ----------------------------------------------------------------- + + -- https://github.com/folke/neodev.nvim + -- { 'folke/neodev.nvim' }, + + -- https://github.com/williamboman/mason.nvim + -- { 'williamboman/mason.nvim' }, + + -- https://github.com/neovim/nvim-lspconfig + -- { 'neovim/nvim-lspconfig' }, + + -- https://github.com/hrsh7th/cmp-nvim-lsp + -- { 'hrsh7th/cmp-nvim-lsp' }, + + -- https://github.com/hrsh7th/cmp-buffer + -- { 'hrsh7th/cmp-buffer' }, + + -- https://github.com/hrsh7th/cmp-path + -- { 'hrsh7th/cmp-path' }, + + -- https://github.com/hrsh7th/cmp-cmdline + -- { 'hrsh7th/cmp-cmdline' }, + + -- https://github.com/hrsh7th/nvim-cmp + -- { 'hrsh7th/nvim-cmp' }, + +}) diff --git a/dotfiles/home/.config/nvim/lua/plugins/dashboard.lua b/dotfiles/home/.config/nvim/lua/plugins/dashboard.lua new file mode 100644 index 0000000..fede944 --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/plugins/dashboard.lua @@ -0,0 +1,187 @@ +local function header() + local logos = { + -- generated in https://patorjk.com/software/taag/#p=testall&t=NeoVim + { + '','','', + "888888ba dP dP oo ", + "88 `8b 88 88 ", + "88 88 .d8888b. .d8888b. 88 .8P dP 88d8b.d8b. ", + "88 88 88ooood8 88' `88 88 d8' 88 88'`88'`88 ", + "88 88 88. ... 88. .88 88 .d8P 88 88 88 88 ", + "dP dP `88888P' `88888P' 888888' dP dP dP dP ", + '','','', + }, + { + '','','','','', + " _ _ __ ___ ", + "| \\ | | \\ \\ / (_) ", + "| \\| | ___ __\\ \\ / / _ _ __ ___ ", + "| . ` |/ _ \\/ _ \\ \\/ / | | '_ ` _ \\ ", + "| |\\ | __/ (_) \\ / | | | | | | |", + "|_| \\_|\\___|\\___/ \\/ |_|_| |_| |_| ", + '','','','','', + }, + { + '','','','','', + " _ _ __ ___ ", + "| \\ | | ___ __\\ \\ / (_)_ __ ___", + " | \\| |/ _ \\/ _ \\ \\ / /| | '_ ` _ \\", + " | |\\ | __/ (_) \\ V / | | | | | | |", + " |_| \\_|\\___|\\___/ \\_/ |_|_| |_| |_|", + '','','','','', + }, + { + '','','','','', + " _ __ __ ___ ", + " / | / /__ ____| | / (_)___ ___ ", + " / |/ / _ \\/ __ \\ | / / / __ `__ \\", + " / /| / __/ /_/ / |/ / / / / / / /", + "/_/ |_/\\___/\\____/|___/_/_/ /_/ /_/ ", + '','','','','', + }, + { + '','','', + '888b 888 888 888 d8b ', + '8888b 888 888 888 Y8P ', + '88888b 888 888 888 ', + '888Y88b 888 .d88b. .d88b. Y88b d88P 888 88888b.d88b. ', + '888 Y88b888 d8P Y8b d88""88b Y88b d88P 888 888 "888 "88b ', + '888 Y88888 88888888 888 888 Y88o88P 888 888 888 888 ', + '888 Y8888 Y8b. Y88..88P Y888P 888 888 888 888 ', + '888 Y888 "Y8888 "Y88P" Y8P 888 888 888 888 ', + '','','', + }, + { + '','','', + "███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗", + "████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║", + "██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║", + "██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║", + "██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║", + "╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝", + '','','', + }, + { + '','','', + "███ ██ ███████ ██████ ██ ██ ██ ███ ███ ", + "████ ██ ██ ██ ██ ██ ██ ██ ████ ████ ", + "██ ██ ██ █████ ██ ██ ██ ██ ██ ██ ████ ██ ", + "██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ", + "██ ████ ███████ ██████ ████ ██ ██ ██ ", + '','','', + }, + { + '','','', + "_ _______ _______ _________ _______ ", + "( ( /|( ____ \\( ___ )|\\ /|\\__ __/( )", + "| \\ ( || ( \\/| ( ) || ) ( | ) ( | () () |", + "| \\ | || (__ | | | || | | | | | | || || |", + "| (\\ \\) || __) | | | |( ( ) ) | | | |(_)| |", + "| | \\ || ( | | | | \\ \\_/ / | | | | | |", + "| ) \\ || (____/\\| (___) | \\ / ___) (___| ) ( |", + "|/ )_)(_______/(_______) \\_/ \\_______/|/ \\|", + '','','', + }, + { + '','','', + "$$\\ $$\\ $$\\ $$\\ $$\\ ", + "$$$\\ $$ | $$ | $$ |\\__| ", + "$$$$\\ $$ | $$$$$$\\ $$$$$$\\ $$ | $$ |$$\\ $$$$$$\\$$$$\\ ", + "$$ $$\\$$ |$$ __$$\\ $$ __$$\\\\$$\\ $$ |$$ |$$ _$$ _$$\\ ", + "$$ \\$$$$ |$$$$$$$$ |$$ / $$ |\\$$\\$$ / $$ |$$ / $$ / $$ |", + "$$ |\\$$$ |$$ ____|$$ | $$ | \\$$$ / $$ |$$ | $$ | $$ |", + "$$ | \\$$ |\\$$$$$$$\\ \\$$$$$$ | \\$ / $$ |$$ | $$ | $$ |", + "\\__| \\__| \\_______| \\______/ \\_/ \\__|\\__| \\__| \\__|", + '','','', + }, + { + '','','', + " /$$ /$$ /$$ /$$ /$$ ", + "| $$$ | $$ | $$ | $$|__/ ", + "| $$$$| $$ /$$$$$$ /$$$$$$ | $$ | $$ /$$ /$$$$$$/$$$$", + "| $$ $$ $$ /$$__ $$ /$$__ $$| $$ / $$/| $$| $$_ $$_ $$", + "| $$ $$$$| $$$$$$$$| $$ \\ $$ \\ $$ $$/ | $$| $$ \\ $$ \\ $$", + "| $$\\ $$$| $$_____/| $$ | $$ \\ $$$/ | $$| $$ | $$ | $$", + "| $$ \\ $$| $$$$$$$| $$$$$$/ \\ $/ | $$| $$ | $$ | $$", + "|__/ \\__/ \\_______/ \\______/ \\_/ |__/|__/ |__/ |__/", + '','','', + }, + { + '','','', + "__ __ __ __ __ ", + "| \\ | \\ | \\ | \\| \\ ", + "| $$\\ | $$ ______ ______ | $$ | $$ \\$$ ______ ____ ", + "| $$$\\| $$ / \\ / \\| $$ | $$| \\| \\ \\ ", + "| $$$$\\ $$| $$$$$$\\| $$$$$$\\\\$$\\ / $$| $$| $$$$$$\\$$$$\\", + "| $$\\$$ $$| $$ $$| $$ | $$ \\$$\\ $$ | $$| $$ | $$ | $$", + "| $$ \\$$$$| $$$$$$$$| $$__/ $$ \\$$ $$ | $$| $$ | $$ | $$", + "| $$ \\$$$ \\$$ \\ \\$$ $$ \\$$$ | $$| $$ | $$ | $$", + " \\$$ \\$$ \\$$$$$$$ \\$$$$$$ \\$ \\$$ \\$$ \\$$ \\$$", + '','','', + }, + { + '','','', + "__ __ __ __ __ ", + "/ \\ / | / | / |/ | ", + "$$ \\ $$ | ______ ______ $$ | $$ |$$/ _____ ____ ", + "$$$ \\$$ | / \\ / \\ $$ | $$ |/ |/ \\/ \\ ", + "$$$$ $$ |/$$$$$$ |/$$$$$$ |$$ \\ /$$/ $$ |$$$$$$ $$$$ |", + "$$ $$ $$ |$$ $$ |$$ | $$ | $$ /$$/ $$ |$$ | $$ | $$ |", + "$$ |$$$$ |$$$$$$$$/ $$ \\__$$ | $$ $$/ $$ |$$ | $$ | $$ |", + "$$ | $$$ |$$ |$$ $$/ $$$/ $$ |$$ | $$ | $$ |", + "$$/ $$/ $$$$$$$/ $$$$$$/ $/ $$/ $$/ $$/ $$/ ", + '','','', + }, + } + math.randomseed(os.time()) + return logos[math.random(#logos)] +end + +require('dashboard').setup({ + theme = 'doom', + config = { + header = header(), + center = { + { + icon = '󰙅 ', + icon_hl = 'Title', + desc = 'Open tree', + desc_hl = 'String', + key = 'e', + keymap = 'SPC e', + key_hl = 'Number', + action = ':Neotree float' + }, + { + icon = '󰈞 ', + icon_hl = 'Title', + desc = 'Find files', + desc_hl = 'String', + key = 'f', + keymap = 'SPC f f', + key_hl = 'Number', + action = ':Telescope find_files' + }, + { + icon = ' ', + icon_hl = 'Title', + desc = 'Find text', + desc_hl = 'String', + key = 'w', + keymap = 'SPC f w', + key_hl = 'Number', + action = ':Telescope live_grep' + }, + { + icon = ' ', + icon_hl = 'Title', + desc = 'Git Braches', + desc_hl = 'String', + key = 'b', + keymap = 'SPC g b', + key_hl = 'Number', + action = ':Telescope git_branches' + } + } + } +}) diff --git a/dotfiles/home/.config/nvim/lua/plugins/lsp.lua b/dotfiles/home/.config/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..5d5e16e --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/plugins/lsp.lua @@ -0,0 +1,60 @@ +-- require('lspconfig').pyright.setup{} + +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) +-- Sntup language servers. +local lspconfig = require('lspconfig') +lspconfig.pyright.setup {} +lspconfig.tsserver.setup {} +lspconfig.prismals.setup {} +lspconfig.cssls.setup { + capabilities = capabilities +} +lspconfig.golangci_lint_ls.setup {} +lspconfig.rust_analyzer.setup { + settings = { + ['rust-analyzer'] = { + diagnostics = { + enable = true, + experimental = { + enable = true, + }, + }, + }, + }, +} +-- Global mappings. +-- See `:help vim.diagnostic.*` for documentation on any of the below functions +vim.keymap.set('n', 'lD', vim.diagnostic.open_float) +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next) +vim.keymap.set('n', 'ld', vim.diagnostic.setloclist) + +-- Use LspAttach autocommand to only map the following keys +-- after the language server attaches to the current buffer +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('UserLspConfig', {}), + callback = function(ev) + -- Enable completion triggered by + vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' + + local opts = {buffer = ev.buf} + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) + -- vim.keymap + -- .set('n', 'sa', vim.lsp.buf.add_workspace_folder, opts) + -- vim.keymap.set('n', 'sr', vim.lsp.buf.remove_workspace_folder, + -- opts) + -- vim.keymap.set('n', 'sl', function() + -- print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + -- end, opts) + -- vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) + vim.keymap.set('n', 'lr', vim.lsp.buf.rename, opts) + vim.keymap.set({'n', 'v'}, 'la', vim.lsp.buf.code_action, opts) + -- vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) + vim.keymap.set('n', 'lf', + function() vim.lsp.buf.format {async = true} end, opts) + end +}) diff --git a/dotfiles/home/.config/nvim/lua/plugins/mason.lua b/dotfiles/home/.config/nvim/lua/plugins/mason.lua new file mode 100644 index 0000000..ac26661 --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/plugins/mason.lua @@ -0,0 +1 @@ +require("mason").setup() diff --git a/dotfiles/home/.config/nvim/lua/plugins/neotree.lua b/dotfiles/home/.config/nvim/lua/plugins/neotree.lua new file mode 100644 index 0000000..db9603e --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/plugins/neotree.lua @@ -0,0 +1,278 @@ +-- https://github.com/nvim-neo-tree/neo-tree.nvim + +-- If you want icons for diagnostic errors, you'll need to define them somewhere: +vim.fn.sign_define("DiagnosticSignError", { text = " ", texthl = "DiagnosticSignError" }) +vim.fn.sign_define("DiagnosticSignWarn", { text = " ", texthl = "DiagnosticSignWarn" }) +vim.fn.sign_define("DiagnosticSignInfo", { text = " ", texthl = "DiagnosticSignInfo" }) +vim.fn.sign_define("DiagnosticSignHint", { text = "󰌵", texthl = "DiagnosticSignHint" }) + +require("neo-tree").setup({ + close_if_last_window = true, -- Close Neo-tree if it is the last window left in the tab + popup_border_style = "rounded", + enable_git_status = true, + enable_diagnostics = true, + enable_normal_mode_for_inputs = false, -- Enable normal mode for input dialogs. + open_files_do_not_replace_types = { "terminal", "trouble", "qf" }, -- when opening files, do not use windows containing these filetypes or buftypes + sort_case_insensitive = false, -- used when sorting files and directories in the tree + sort_function = nil, -- use a custom function for sorting files and directories in the tree + -- sort_function = function (a,b) + -- if a.type == b.type then + -- return a.path > b.path + -- else + -- return a.type > b.type + -- end + -- end , -- this sorts files and directories descendantly + default_component_configs = { + container = { + enable_character_fade = true + }, + indent = { + indent_size = 2, + padding = 1, -- extra padding on left hand side + -- indent guides + with_markers = true, + indent_marker = "│", + last_indent_marker = "└", + highlight = "NeoTreeIndentMarker", + -- expander config, needed for nesting files + with_expanders = nil, -- if nil and file nesting is enabled, will enable expanders + expander_collapsed = "", + expander_expanded = "", + expander_highlight = "NeoTreeExpander", + }, + icon = { + folder_closed = "", + folder_open = "", + folder_empty = "󰜌", + -- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there + -- then these will never be used. + default = "*", + highlight = "NeoTreeFileIcon" + }, + modified = { + symbol = "[+]", + highlight = "NeoTreeModified", + }, + name = { + trailing_slash = false, + use_git_status_colors = true, + highlight = "NeoTreeFileName", + }, + git_status = { + symbols = { + -- Change type + added = "", -- or "✚", but this is redundant info if you use git_status_colors on the name + modified = "", -- or "", but this is redundant info if you use git_status_colors on the name + deleted = "✖", -- this can only be used in the git_status source + renamed = "󰁕", -- this can only be used in the git_status source + -- Status type + untracked = "", + ignored = "", + unstaged = "󰄱", + staged = "", + conflict = "", + } + }, + -- If you don't want to use these columns, you can set `enabled = false` for each of them individually + file_size = { + enabled = true, + required_width = 64, -- min width of window required to show this column + }, + type = { + enabled = true, + required_width = 122, -- min width of window required to show this column + }, + last_modified = { + enabled = true, + required_width = 88, -- min width of window required to show this column + }, + created = { + enabled = true, + required_width = 110, -- min width of window required to show this column + }, + symlink_target = { + enabled = false, + }, + }, + -- A list of functions, each representing a global custom command + -- that will be available in all sources (if not overridden in `opts[source_name].commands`) + -- see `:h neo-tree-custom-commands-global` + commands = {}, + window = { + position = "left", + width = 40, + mapping_options = { + noremap = true, + nowait = true, + }, + -- mappings = { + -- [""] = { + -- "toggle_node", + -- nowait = false, -- disable `nowait` if you have existing combos starting with this char that you want to use + -- }, + -- ["<2-LeftMouse>"] = "open", + -- [""] = "open", + -- [""] = "cancel", -- close preview or floating neo-tree window + -- ["P"] = { "toggle_preview", config = { use_float = true, use_image_nvim = true } }, + -- -- Read `# Preview Mode` for more information + -- ["l"] = "focus_preview", + -- ["S"] = "open_split", + -- ["s"] = "open_vsplit", + -- -- ["S"] = "split_with_window_picker", + -- -- ["s"] = "vsplit_with_window_picker", + -- ["t"] = "open_tabnew", + -- -- [""] = "open_drop", + -- -- ["t"] = "open_tab_drop", + -- ["w"] = "open_with_window_picker", + -- --["P"] = "toggle_preview", -- enter preview mode, which shows the current node without focusing + -- ["C"] = "close_node", + -- -- ['C'] = 'close_all_subnodes', + -- ["z"] = "close_all_nodes", + -- --["Z"] = "expand_all_nodes", + -- ["a"] = { + -- "add", + -- -- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details + -- -- some commands may take optional config options, see `:h neo-tree-mappings` for details + -- config = { + -- show_path = "none" -- "none", "relative", "absolute" + -- } + -- }, + -- ["A"] = "add_directory", -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion. + -- ["d"] = "delete", + -- ["r"] = "rename", + -- ["y"] = "copy_to_clipboard", + -- ["x"] = "cut_to_clipboard", + -- ["p"] = "paste_from_clipboard", + -- ["c"] = "copy", -- takes text input for destination, also accepts the optional config.show_path option like "add": + -- -- ["c"] = { + -- -- "copy", + -- -- config = { + -- -- show_path = "none" -- "none", "relative", "absolute" + -- -- } + -- --} + -- ["m"] = "move", -- takes text input for destination, also accepts the optional config.show_path option like "add". + -- ["q"] = "close_window", + -- ["R"] = "refresh", + -- ["?"] = "show_help", + -- ["<"] = "prev_source", + -- [">"] = "next_source", + -- ["i"] = "show_file_details", + -- } + }, + nesting_rules = {}, + filesystem = { + filtered_items = { + visible = true, -- when true, they will just be displayed differently than normal items + hide_dotfiles = false, + hide_gitignored = false, + hide_hidden = false, -- only works on Windows for hidden files/directories + -- hide_by_name = { + -- "node_modules" + -- }, + -- hide_by_pattern = { -- uses glob style patterns + --"*.meta", + --"*/src/*/tsconfig.json", + -- }, + always_show = { -- remains visible even if other settings would normally hide it + ".gitignore", + }, + never_show = { -- remains hidden even if visible is toggled to true, this overrides always_show + ".DS_Store", + "thumbs.db" + }, + -- never_show_by_pattern = { -- uses glob style patterns + --".null-ls_*", + -- }, + }, + follow_current_file = { + enabled = false, -- This will find and focus the file in the active buffer every time + -- -- the current file is changed while the tree is open. + leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` + }, + group_empty_dirs = true, -- when true, empty folders will be grouped together + -- hijack_netrw_behavior = "open_default", -- netrw disabled, opening a directory opens neo-tree + -- in whatever position is specified in window.position + -- "open_current", -- netrw disabled, opening a directory opens within the + -- window like netrw would, regardless of window.position + -- "disabled", -- netrw left alone, neo-tree does not handle opening dirs + use_libuv_file_watcher = true, -- This will use the OS level file watchers to detect changes + -- instead of relying on nvim autocmd events. + -- window = { + -- mappings = { + -- [""] = "navigate_up", + -- ["."] = "set_root", + -- ["H"] = "toggle_hidden", + -- ["/"] = "fuzzy_finder", + -- ["D"] = "fuzzy_finder_directory", + -- ["#"] = "fuzzy_sorter", -- fuzzy sorting using the fzy algorithm + -- -- ["D"] = "fuzzy_sorter_directory", + -- ["f"] = "filter_on_submit", + -- [""] = "clear_filter", + -- ["[g"] = "prev_git_modified", + -- ["]g"] = "next_git_modified", + -- ["o"] = { "show_help", nowait = false, config = { title = "Order by", prefix_key = "o" } }, + -- ["oc"] = { "order_by_created", nowait = false }, + -- ["od"] = { "order_by_diagnostics", nowait = false }, + -- ["og"] = { "order_by_git_status", nowait = false }, + -- ["om"] = { "order_by_modified", nowait = false }, + -- ["on"] = { "order_by_name", nowait = false }, + -- ["os"] = { "order_by_size", nowait = false }, + -- ["ot"] = { "order_by_type", nowait = false }, + -- -- [''] = function(state) ... end, + -- }, + -- fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode + -- [""] = "move_cursor_down", + -- [""] = "move_cursor_down", + -- [""] = "move_cursor_up", + -- [""] = "move_cursor_up", + -- -- [''] = function(state, scroll_padding) ... end, + -- }, + -- }, + + commands = {} -- Add a custom command or override a global one using the same function name + }, + -- buffers = { + -- follow_current_file = { + -- enabled = true, -- This will find and focus the file in the active buffer every time + -- -- -- the current file is changed while the tree is open. + -- leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` + -- }, + -- group_empty_dirs = true, -- when true, empty folders will be grouped together + -- show_unloaded = true, + -- window = { + -- mappings = { + -- ["bd"] = "buffer_delete", + -- [""] = "navigate_up", + -- ["."] = "set_root", + -- ["o"] = { "show_help", nowait = false, config = { title = "Order by", prefix_key = "o" } }, + -- ["oc"] = { "order_by_created", nowait = false }, + -- ["od"] = { "order_by_diagnostics", nowait = false }, + -- ["om"] = { "order_by_modified", nowait = false }, + -- ["on"] = { "order_by_name", nowait = false }, + -- ["os"] = { "order_by_size", nowait = false }, + -- ["ot"] = { "order_by_type", nowait = false }, + -- } + -- }, + -- }, + git_status = { + window = { + position = "float", + mappings = { + ["A"] = "git_add_all", + ["gu"] = "git_unstage_file", + ["ga"] = "git_add_file", + ["gr"] = "git_revert_file", + ["gc"] = "git_commit", + ["gp"] = "git_push", + ["gg"] = "git_commit_and_push", + ["o"] = { "show_help", nowait = false, config = { title = "Order by", prefix_key = "o" } }, + ["oc"] = { "order_by_created", nowait = false }, + ["od"] = { "order_by_diagnostics", nowait = false }, + ["om"] = { "order_by_modified", nowait = false }, + ["on"] = { "order_by_name", nowait = false }, + ["os"] = { "order_by_size", nowait = false }, + ["ot"] = { "order_by_type", nowait = false }, + } + } + } +}) diff --git a/dotfiles/home/.config/nvim/lua/plugins/telescope.lua b/dotfiles/home/.config/nvim/lua/plugins/telescope.lua new file mode 100644 index 0000000..5aa82bd --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,12 @@ +local builtin = require('telescope.builtin') +vim.keymap.set('n', 'ff', builtin.find_files, {}) +vim.keymap.set('n', 'fg', builtin.live_grep, {}) +vim.keymap.set('n', 'fb', builtin.buffers, {}) +-- vim.keymap.set('n', '', builtin.buffers, {}) +vim.keymap.set('n', 'fh', builtin.help_tags, {}) +vim.keymap.set('n', 'gb', builtin.git_branches, {}) +vim.keymap.set('n', 'gc', builtin.git_commits, {}) +vim.keymap.set('n', 'gs', builtin.git_status, {}) +vim.keymap.set('n', 'ls', builtin.lsp_document_symbols, {}) +vim.keymap.set('n', 'gr', builtin.lsp_references, {noremap = true, silent = true}) +vim.keymap.set('n', 'gd', builtin.lsp_definitions, {noremap = true, silent = true}) diff --git a/dotfiles/home/.config/nvim/lua/plugins/treesitter.lua b/dotfiles/home/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..f73dda7 --- /dev/null +++ b/dotfiles/home/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,41 @@ +require 'nvim-treesitter.configs'.setup { + -- A list of parser names, or "all" (the five listed parsers should always be installed) + -- ensure_installed = {"vim", "lua", "go", "bash", "diff", "css", "dockerfile", "git_config", "git_rebase", "git_attributes", "gitcommit", "gitignore", "gomod"}, + ensure_installed = "all", + + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + + -- Automatically install missing parsers when entering buffer + -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally + auto_install = true, + + -- List of parsers to ignore installing (or "all") + -- ignore_install = { "javascript" }, + + ---- If you need to change the installation directory of the parsers (see -> Advanced Setup) + -- parser_install_dir = "/some/path/to/store/parsers", -- Rem ember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")! + + highlight = { + enable = true, + -- NOTE: these are the names of the parsers and not the filetype. (for example if you want to + -- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is + -- the name of the parser) + -- list of language that will be disabled + -- disable = { "c", "rust" }, + -- Or use a function for more flexibility, e.g. to disable slow treesitter highlight for large files + -- disable = function(lang, buf) + -- local max_filesize = 100 * 1024 -- 100 KB + -- local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf)) + -- if ok and stats and stats.size > max_filesize then + -- return true + -- end + -- end, + + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + -- additional_vim_regex_highlighting = false, + }, +} diff --git a/helpers b/helpers index 2cb2065..a020b1a 100644 --- a/helpers +++ b/helpers @@ -21,6 +21,7 @@ require() { done if [ ${#sw[@]} -gt 0 ]; then info "This packages will be installed in your system:\n${sw[*]}" + #TODO use local install script if possible apt_install "${sw[*]}" [ $? -gt 0 ] && die "installation cancelled" 201 fi diff --git a/install/nvim b/install/nvim new file mode 100755 index 0000000..edf9ec1 --- /dev/null +++ b/install/nvim @@ -0,0 +1,53 @@ +#!/bin/bash +##makedesc: Install neovim (latest) +source `dirname $0`/../helpers || exit 255 + +# https://github.com/neovim/neovim/blob/master/INSTALL.md#linux +# https://github.com/folke/lazy.nvim/blob/main/README.md#-installation +# https://raw.githubusercontent.com/neovim/neovim/master/runtime/nvim.desktop + +title + +require git wget tar grep + +[ -d "$HOME/.config/nvim" ] && mv -f "$HOME/.config/nvim" $HOME/.config/nvim.bak +mkdir -p $HOME/install $HOME/.config/nvim/lua/{core,plugins} + +tee < /dev/null +-- plugins +require('core.plugins') +EOF + +tee < /dev/null +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +-- install plugins +require("lazy").setup({ + { 'phaazon/hop.nvim' } +}) +EOF + +download https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz "$HOME/install/nvim.tar.gz" && \ + sudo rm -rf /opt/nvim && \ + sudo tar -zxf "$HOME/install/nvim.tar.gz" -C /opt + +NEWPATH="export PATH=\"/opt/nvim-linux64/bin:\$PATH\"" +cat "$HOME/.profile" | grep -qoh "$NEWPATH" || { + $NEWPATH + echo "$NEWPATH" >> "$HOME/.profile" +} + +echo +success "NeoVim installed!" +echo