diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..5a22baa --- /dev/null +++ b/TODO.md @@ -0,0 +1,9 @@ +# Nvim Config Rewrite - TODO +-[ ] LSP for: + -[ ] Python + -[ ] Kotlin + -[ ] Bash/Shell scripts + -[ ] JavaScript + -[ ] Java +-[ ] Auto close neogit/nvimtree panes when they are the only thing left. +-[ ] Start with file focused instead of nvimtree. diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..9ef7795 --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,58 @@ +local options = vim.o -- For the globals options +local window_options = vim.wo -- For the window local options +local buffer_options = vim.bo -- For the buffer local options + +-- window_options.colorcolumn = [[100]] +options.termguicolors = true +options.clipboard = 'unnamed,unnamedplus' +options.timeoutlen = 300 +options.mouse = 'a' +options.undodir = vim.fn.expand('~/.cache/vim/undo') +options.listchars = 'tab:▸ ,extends:❯,precedes:❮' + +window_options.relativenumber = true +window_options.list = true + +buffer_options.autoindent = true +buffer_options.expandtab = true +buffer_options.softtabstop = 4 +buffer_options.shiftwidth = 4 +buffer_options.tabstop = 4 +buffer_options.smartindent = true +buffer_options.modeline = true + +buffer_options.undofile = true +vim.g.mapleader = ' ' + +-- Load utilities +require('kalle.utils') + +-- Load plugins +require('kalle.plugins') + +-- Load config +require('kalle.config') + +vim.cmd('colorscheme nightfox') + + +-- TODO: Move to a better place at some point +local nvimtree = require('nvim-tree') +local nvimtree_reloaders = require('nvim-tree.actions.reloaders') + +local function keepFileTree() + nvimtree_reloaders.reload_explorer() + nvimtree.open(false) +end + +vim.api.nvim_create_autocmd( + "TabNewEntered", + { + pattern = "*", + callback = keepFileTree, + } +) + + +-- Automatically start nvim tree with vim +nvimtree.open() diff --git a/nvim/lua/kalle/config/init.lua b/nvim/lua/kalle/config/init.lua new file mode 100644 index 0000000..19f848c --- /dev/null +++ b/nvim/lua/kalle/config/init.lua @@ -0,0 +1,2 @@ +require('kalle.config.keybinds') +require('kalle.config.plugin-config') diff --git a/nvim/lua/kalle/config/keybinds.lua b/nvim/lua/kalle/config/keybinds.lua new file mode 100644 index 0000000..ecca4a5 --- /dev/null +++ b/nvim/lua/kalle/config/keybinds.lua @@ -0,0 +1,19 @@ +Keybind.g({ + -- [ space + h ] move cursor to left window + { 'n', 'h', 'wincmd h', { noremap = true, desc = 'Window left' } }, + -- [ space + l ] move cursor to bottom window + { 'n', 'j', 'wincmd j', { noremap = true, desc = 'Window down' } }, + -- [ space + j ] move cursor to top window + { 'n', 'k', 'wincmd k', { noremap = true, desc = 'Window up' } }, + -- [ space + k ] move cursor to right window + { 'n', 'l', 'wincmd l', { noremap = true, desc = 'Window right' } }, + + -- [ space + t ] Toggles + { 'n', 't', '', { noremap = true, desc = '+Toggle' } }, + -- [ space + t + t] Toggle file tree + { 'n', 'tt', 'NvimTreeToggle', { noremap = true, desc = 'Open file tree' } }, + -- [ space + t + g] Neogit + { 'n', 'tg', 'Neogit', { noremap = true, desc = 'Open git status' } }, + + +}) diff --git a/nvim/lua/kalle/config/plugin-config.lua b/nvim/lua/kalle/config/plugin-config.lua new file mode 100644 index 0000000..ba01169 --- /dev/null +++ b/nvim/lua/kalle/config/plugin-config.lua @@ -0,0 +1,31 @@ +require('which-key').setup { + +} + +require('nvim-tree').setup { + sort_by = 'case_sensitive', + view = { + adaptive_size = true, + mappings = { + custom_only = false, + list = {}, + }, + }, + renderer = { + group_empty = true, + highlight_git = true, + highlight_opened_files = "name", + indent_markers = { + enable = true, + }, + }, + filters = { + dotfiles = true, + }, +} + +require('neogit').setup {} + +require('lualine').setup {} + +require('tabline').setup {} diff --git a/nvim/lua/kalle/plugins.lua b/nvim/lua/kalle/plugins.lua new file mode 100644 index 0000000..12e17ff --- /dev/null +++ b/nvim/lua/kalle/plugins.lua @@ -0,0 +1,30 @@ +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 + packer_bootstrap = fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) +end + +return require('packer').startup(function(use) + use 'EdenEast/nightfox.nvim' + use 'folke/which-key.nvim' + + use { + 'kyazdani42/nvim-tree.lua', + requires = { + 'kyazdani42/nvim-web-devicons', + }, + } + + use('TimUntersberger/neogit') + use('nvim-lua/plenary.nvim') + + use('nvim-lualine/lualine.nvim') + + use('kdheepak/tabline.nvim') + + -- Automatically set up your configuration after cloning packer.nvim + -- Put this at the end after all plugins + if packer_bootstrap then + require('packer').sync() + end +end) diff --git a/nvim/lua/kalle/utils/init.lua b/nvim/lua/kalle/utils/init.lua new file mode 100644 index 0000000..4ca5ba2 --- /dev/null +++ b/nvim/lua/kalle/utils/init.lua @@ -0,0 +1,5 @@ +Keybind = require('kalle.utils.keybind') + +Vim = { + Keybind = Keybind, +} diff --git a/nvim/lua/kalle/utils/keybind.lua b/nvim/lua/kalle/utils/keybind.lua new file mode 100644 index 0000000..17f0b56 --- /dev/null +++ b/nvim/lua/kalle/utils/keybind.lua @@ -0,0 +1,37 @@ +local Keybind = {} + +Keybind.add_global_keybinds = function (keybinds) + for _, keybind in pairs(keybinds) do + if(keybind[4] == nil) then + keybind[4] = {} + end + + vim.api.nvim_set_keymap( + keybind[1], + keybind[2], + keybind[3], + keybind[4] + ) + end +end + +Keybind.add_buffer_keybinds = function (keybinds) + for _, keybind in pairs(keybinds) do + if(keybind[5] == nil) then + keybind[5] = {} + end + + vim.api.nvim_buf_set_keymap( + keybind[1], + keybind[2], + keybind[3], + keybind[4], + keybind[5] + ) + end +end + +Keybind.g = Keybind.add_global_keybinds +Keybind.b = Keybind.add_buffer_keybinds + +return Keybind diff --git a/nvim/colors/dracula.vim b/nvim/old/colors/dracula.vim similarity index 100% rename from nvim/colors/dracula.vim rename to nvim/old/colors/dracula.vim diff --git a/nvim/ftdetect/paret.vim b/nvim/old/ftdetect/paret.vim similarity index 100% rename from nvim/ftdetect/paret.vim rename to nvim/old/ftdetect/paret.vim diff --git a/nvim/init.vim b/nvim/old/init.vim similarity index 100% rename from nvim/init.vim rename to nvim/old/init.vim diff --git a/nvim/syntax/paret.vim b/nvim/old/syntax/paret.vim similarity index 100% rename from nvim/syntax/paret.vim rename to nvim/old/syntax/paret.vim diff --git a/nvim/plugin/packer_compiled.lua b/nvim/plugin/packer_compiled.lua new file mode 100644 index 0000000..fda5978 --- /dev/null +++ b/nvim/plugin/packer_compiled.lua @@ -0,0 +1,117 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + + local time + local profile_info + local should_profile = false + if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end + else + time = function(chunk, start) end + end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + + _G._packer = _G._packer or {} + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/kalle/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/home/kalle/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/home/kalle/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/home/kalle/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/kalle/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + neogit = { + loaded = true, + path = "/home/kalle/.local/share/nvim/site/pack/packer/start/neogit", + url = "https://github.com/TimUntersberger/neogit" + }, + ["nightfox.nvim"] = { + loaded = true, + path = "/home/kalle/.local/share/nvim/site/pack/packer/start/nightfox.nvim", + url = "https://github.com/EdenEast/nightfox.nvim" + }, + ["nvim-tree.lua"] = { + loaded = true, + path = "/home/kalle/.local/share/nvim/site/pack/packer/start/nvim-tree.lua", + url = "https://github.com/kyazdani42/nvim-tree.lua" + }, + ["nvim-web-devicons"] = { + loaded = true, + path = "/home/kalle/.local/share/nvim/site/pack/packer/start/nvim-web-devicons", + url = "https://github.com/kyazdani42/nvim-web-devicons" + }, + ["plenary.nvim"] = { + loaded = true, + path = "/home/kalle/.local/share/nvim/site/pack/packer/start/plenary.nvim", + url = "https://github.com/nvim-lua/plenary.nvim" + }, + ["stickybuf.nvim"] = { + loaded = true, + path = "/home/kalle/.local/share/nvim/site/pack/packer/start/stickybuf.nvim", + url = "https://github.com/stevearc/stickybuf.nvim" + }, + ["which-key.nvim"] = { + loaded = true, + path = "/home/kalle/.local/share/nvim/site/pack/packer/start/which-key.nvim", + url = "https://github.com/folke/which-key.nvim" + } +} + +time([[Defining packer_plugins]], false) +if should_profile then save_profiles() end + +end) + +if not no_errors then + error_msg = error_msg:gsub('"', '\\"') + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end diff --git a/setup.sh b/setup.sh index 0716b34..7f0313d 100755 --- a/setup.sh +++ b/setup.sh @@ -12,11 +12,6 @@ if [ -d $NVIM_DIR ]; then else # Symlink the config. ln -s $DOTS_DIR/nvim $NVIM_DIR - - # Install dein.vim - curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > /tmp/dein_installer.sh - chmod +x /tmp/dein_installer.sh - /tmp/dein_installer.sh ~/.local/share/dein fi # i3-gaps