diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml deleted file mode 100644 index 0aaea9e..0000000 --- a/.config/alacritty/alacritty.yml +++ /dev/null @@ -1,2 +0,0 @@ -font: - size: 8 diff --git a/.config/nvim/.gitignore b/.config/nvim/.gitignore new file mode 100644 index 0000000..8b55343 --- /dev/null +++ b/.config/nvim/.gitignore @@ -0,0 +1,2 @@ +lazy-lock.json + diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 300fe85..1ec385c 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -1,21 +1,20 @@ -local set = vim.opt +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) -set.encoding = "utf-8" +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' - -set.number = true -set.relativenumber = true -set.tabstop = 4 -set.shiftwidth = 4 -set.expandtab = true - -set.swapfile = false - -set.ignorecase = true -set.smartcase = true - -set.cursorline = true -set.linebreak = true - -set.list = true +require('lazy').setup('plugins') +require('config') +require('completion') diff --git a/.config/nvim/lua/completion.lua b/.config/nvim/lua/completion.lua new file mode 100644 index 0000000..0a15eed --- /dev/null +++ b/.config/nvim/lua/completion.lua @@ -0,0 +1,128 @@ +local cmp_status_ok, cmp = pcall(require, "cmp") + if not cmp_status_ok then + return + end + + local snip_status_ok, luasnip = pcall(require, "luasnip") + if not snip_status_ok then + return + end + + require("luasnip/loaders/from_vscode").lazy_load() + + local check_backspace = function() + local col = vim.fn.col "." - 1 + return col == 0 or vim.fn.getline("."):sub(col, col):match "%s" + end + + --   פּ ﯟ   some other good icons + local kind_icons = { + Text = "", + Method = "m", + Function = "", + Constructor = "", + Field = "", + Variable = "", + Class = "", + Interface = "", + Module = "", + Property = "", + Unit = "", + Value = "", + Enum = "", + Keyword = "", + Snippet = "", + Color = "", + File = "", + Reference = "", + Folder = "", + EnumMember = "", + Constant = "", + Struct = "", + Event = "", + Operator = "", + TypeParameter = "", + } + -- find more here: https://www.nerdfonts.com/cheat-sheet + + cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) -- For `luasnip` users. + end, + }, + mapping = { + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }), + [""] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `` mapping. + [""] = cmp.mapping { + i = cmp.mapping.abort(), + c = cmp.mapping.close(), + }, + -- Accept currently selected item. If none selected, `select` first item. + -- Set `select` to `false` to only confirm explicitly selected items. + [""] = cmp.mapping.confirm { select = true }, + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expandable() then + luasnip.expand() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif check_backspace() then + fallback() + 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", + }), + }, + formatting = { + fields = { "kind", "abbr", "menu" }, + format = function(entry, vim_item) + -- Kind icons + vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) + -- vim_item.kind = string.format('%s %s', kind_icons[vim_item.kind], vim_item.kind) -- This concatonates the icons with the name of the item kind + vim_item.menu = ({ + luasnip = "[Snippet]", + buffer = "[Buffer]", + path = "[Path]", + })[entry.source.name] + return vim_item + end, + }, + sources = { + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + }, + confirm_opts = { + behavior = cmp.ConfirmBehavior.Replace, + select = false, + }, + -- documentation = { + -- border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" }, + -- }, + -- experimental = { + -- ghost_text = false, + -- native_menu = false, + -- }, + } + diff --git a/.config/nvim/lua/config.lua b/.config/nvim/lua/config.lua new file mode 100644 index 0000000..f74d2b3 --- /dev/null +++ b/.config/nvim/lua/config.lua @@ -0,0 +1,32 @@ +local set = vim.opt + +set.mouse = 'a' +set.encoding = 'utf-8' +set.fileencoding = 'UTF-8' + +set.number = true +set.relativenumber = true +set.showcmd = true +vim.o.syntax = true + +set.ignorecase = true +set.smartcase = true + +set.cursorline = true +-- bold line number at cursor +vim.cmd [[ highlight CursorLineNr cterm=bold ]] + +set.linebreak = true + +-- special characters +set.list = true +set.listchars = 'tab:→ ,eol:↲,nbsp:␣,trail:•,extends:⟩,precedes:⟨' + +set.tabstop = 4 +set.shiftwidth = 4 +--set.expandtab = true +vim.o.expandtab = false +vim.o.smartindent = true + +set.swapfile = false + diff --git a/.config/nvim/lua/plugins/git.lua b/.config/nvim/lua/plugins/git.lua new file mode 100644 index 0000000..c43221d --- /dev/null +++ b/.config/nvim/lua/plugins/git.lua @@ -0,0 +1,17 @@ +return { + { + 'f-person/git-blame.nvim', + config = function() + vim.g.gitblame_date_format = '%r' + vim.g.gitblame_message_when_not_committed = '' + vim.g.gitblame_display_virtual_text = 0 + end + }, + { + 'lewis6991/gitsigns.nvim', + config = function() + require('gitsigns').setup() + end + }, +} + diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua new file mode 100644 index 0000000..569e731 --- /dev/null +++ b/.config/nvim/lua/plugins/init.lua @@ -0,0 +1,48 @@ +return { + 'RRethy/nvim-base16', + 'tpope/vim-commentary', + + -- completion + 'hrsh7th/nvim-cmp', + 'hrsh7th/cmp-buffer', + 'hrsh7th/cmp-path', + 'hrsh7th/cmp-cmdline', + 'saadparwaiz1/cmp_luasnip', + + -- snippets + 'L3MON4D3/LuaSnip', + 'rafamadriz/friendly-snippets', + + -- emmet + 'mattn/emmet-vim', + + -- LSP + 'neovim/nvim-lspconfig', + + -- LSP, DAP, linters and formatters + -- 'jose-elias-alvarez/null-ls.nvim', + { + 'dense-analysis/ale', + config = function() + vim.cmd [[ g:ale_sign_column_always = 1 ]] + end + }, + + -- management for LSP, DAP, linters and formatters + { + 'williamboman/mason.nvim', + config = function() + require('mason').setup({ + ui = { + icons = { + package_installed = "✓", + package_pending = "➜", + package_uninstalled = "✗" + } + } + }) + end + }, + 'williamboman/mason-lspconfig.nvim', +} + diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..1925098 --- /dev/null +++ b/.config/nvim/lua/plugins/lualine.lua @@ -0,0 +1,16 @@ +return { + 'nvim-lualine/lualine.nvim', + dependencies = { 'kyazdani42/nvim-web-devicons', lazy = true }, + config = function() + local git_blame = require('gitblame') + require('lualine').setup({ + sections = { + lualine_c = { + { git_blame.get_current_blame_text, cond = git_blame.is_blame_text_available } + } + } + }) + vim.o.showmode = false + end +} + diff --git a/.config/nvim/lua/plugins/neo-tree.lua b/.config/nvim/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..76d8096 --- /dev/null +++ b/.config/nvim/lua/plugins/neo-tree.lua @@ -0,0 +1,19 @@ +return { + 'nvim-neo-tree/neo-tree.nvim', + cmd = 'Neotree', + branch = 'v2.x', + keys = { + { 'ft', 'Neotree toggle', desc = 'NeoTree' }, + }, + dependencies = { + 'nvim-lua/plenary.nvim', + 'MunifTanjim/nui.nvim', + }, + opts = { + filesystem = { + follow_current_file = true, + hijack_netrw_behavior = 'open_current', + }, + }, +} + diff --git a/.config/nvim/lua/plugins/which-key.lua b/.config/nvim/lua/plugins/which-key.lua new file mode 100644 index 0000000..750ef0b --- /dev/null +++ b/.config/nvim/lua/plugins/which-key.lua @@ -0,0 +1,8 @@ +return { + "folke/which-key.nvim", + config = function() + vim.o.timeout = true + vim.o.timeoutlen = 300 + end +} + diff --git a/.config/nvim/lua/plugins/zen-mode.lua b/.config/nvim/lua/plugins/zen-mode.lua new file mode 100644 index 0000000..14a8d2f --- /dev/null +++ b/.config/nvim/lua/plugins/zen-mode.lua @@ -0,0 +1,29 @@ +return { + 'folke/zen-mode.nvim', + config = { + window = { + backdrop = 1, + width = 80, + height = .9, + options = { + signcolumn = "no", + number = false, + relativenumber = false, + cursorline = false, + cursorcolumn = false, + foldcolumn = "0", + list = false, + } + }, + opts = { + alacritty = { + enabled = true, + font = "13", + }, + }, + }, + keys = { + { 'fg', 'ZenMode', desc = 'Zen Mode' }, + }, +} +