------------------------------------------------- -- DT'S NEOVIM CONFIGURATION -- Neovim website: https://neovim.io/ -- DT's dotfiles: https://gitlab.com/dwt1/dotfiles ------------------------------------------------- local g = vim.g local o = vim.o local opt = vim.opt local A = vim.api -- cmd('syntax on') -- vim.api.nvim_command('filetype plugin indent on') o.termguicolors = true -- o.background = 'dark' -- Do not save when switching buffers -- o.hidden = true -- Decrease update time o.timeoutlen = 500 o.updatetime = 200 -- Number of screen lines to keep above and below the cursor o.scrolloff = 8 -- Better editor UI o.number = true o.numberwidth = 2 o.relativenumber = true o.signcolumn = 'yes' o.cursorline = true -- Better editing experience o.expandtab = true o.smarttab = true o.cindent = true o.autoindent = true o.wrap = true o.textwidth = 300 o.tabstop = 4 o.shiftwidth = 4 o.softtabstop = -1 -- If negative, shiftwidth value is used o.list = true o.listchars = 'trail:·,nbsp:◇,tab:→ ,extends:▸,precedes:◂' -- o.listchars = 'eol:¬,space:·,lead: ,trail:·,nbsp:◇,tab:→-,extends:▸,precedes:◂,multispace:···⬝,leadmultispace:│ ,' -- o.formatoptions = 'qrn1' -- Makes neovim and host OS clipboard play nicely with each other o.clipboard = 'unnamedplus' -- Case insensitive searching UNLESS /C or capital in search o.ignorecase = true o.smartcase = true -- Undo and backup options o.backup = false o.writebackup = false o.undofile = true o.swapfile = false -- o.backupdir = '/tmp/' -- o.directory = '/tmp/' -- o.undodir = '/tmp/' -- Remember 50 items in commandline history o.history = 50 -- Better buffer splitting o.splitright = true o.splitbelow = true -- Preserve view while jumping -- BUG This option causes an error! -- o.jumpoptions = 'view' -- BUG: this won't update the search count after pressing `n` or `N` -- When running macros and regexes on a large file, lazy redraw tells neovim/vim not to draw the screen -- o.lazyredraw = true -- Better folds (don't fold by default) -- o.foldmethod = 'indent' -- o.foldlevelstart = 99 -- o.foldnestmax = 3 -- o.foldminlines = 1 -- opt.mouse = "a" -- Map to space g.mapleader = ' ' g.maplocalleader = ' ' ------------------------------------------------- -- COLORSCHEMES ------------------------------------------------- -- Uncomment just ONE of the following colorschemes! -- local ok, _ = pcall(vim.cmd, 'colorscheme base16-dracula') -- local ok, _ = pcall(vim.cmd, 'colorscheme base16-gruvbox-dark-medium') -- local ok, _ = pcall(vim.cmd, 'colorscheme base16-monokai') -- local ok, _ = pcall(vim.cmd, 'colorscheme base16-nord') -- local ok, _ = pcall(vim.cmd, 'colorscheme base16-oceanicnext') local ok, _ = pcall(vim.cmd, 'colorscheme base16-onedark') -- local ok, _ = pcall(vim.cmd, 'colorscheme palenight') -- local ok, _ = pcall(vim.cmd, 'colorscheme base16-solarized-dark') -- local ok, _ = pcall(vim.cmd, 'colorscheme base16-solarized-light') -- local ok, _ = pcall(vim.cmd, 'colorscheme base16-tomorrow-night') -- Highlight the region on yank A.nvim_create_autocmd('TextYankPost', { group = num_au, callback = function() vim.highlight.on_yank({ higroup = 'Visual', timeout = 120 }) end, }) ------------------------------------------------- -- KEYBINDINGS ------------------------------------------------- local function map(m, k, v) vim.keymap.set(m, k, v, { silent = true }) end -- Mimic shell movements map('i', '', 'A') map('i', '', 'I') -- Load recent sessions map('n', 'sl', 'SessionLoad') -- Keybindings for telescope map('n', 'fr', 'Telescope oldfiles') map('n', 'ff', 'Telescope find_files') map('n', 'fb', 'Telescope file_browser') map('n', 'fw', 'Telescope live_grep') map('n', 'ht', 'Telescope colorscheme') ------------------------------------------------- -- DASHBOARD ------------------------------------------------- local db = require('dashboard') local home = os.getenv('HOME') db.default_banner = { '', '', ' ███╗ ██╗ ███████╗ ██████╗ ██╗ ██╗ ██╗ ███╗ ███╗', ' ████╗ ██║ ██╔════╝██╔═══██╗ ██║ ██║ ██║ ████╗ ████║', ' ██╔██╗ ██║ █████╗ ██║ ██║ ██║ ██║ ██║ ██╔████╔██║', ' ██║╚██╗██║ ██╔══╝ ██║ ██║ ╚██╗ ██╔╝ ██║ ██║╚██╔╝██║', ' ██║ ╚████║ ███████╗╚██████╔╝ ╚████╔╝ ██║ ██║ ╚═╝ ██║', ' ╚═╝ ╚═══╝ ╚══════╝ ╚═════╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝', '', ' [ TIP: To exit Neovim, just power off your computer. ] ', '', } -- linux --db.preview_command = 'ueberzug' -- --db.preview_file_path = home .. '/.config/nvim/static/neovim.cat' db.preview_file_height = 11 db.preview_file_width = 70 db.custom_center = { {icon = ' ', desc = 'Recent sessions ', shortcut = 'SPC s l', action ='SessionLoad'}, {icon = ' ', desc = 'Find recent files ', action = 'Telescope oldfiles', shortcut = 'SPC f r'}, {icon = ' ', desc = 'Find files ', action = 'Telescope find_files find_command=rg,--hidden,--files', shortcut = 'SPC f f'}, {icon = ' ', desc ='File browser ', action = 'Telescope file_browser', shortcut = 'SPC f b'}, {icon = ' ', desc = 'Find word ', action = 'Telescope live_grep', shortcut = 'SPC f w'}, {icon = ' ', desc = 'Load new theme ', action = 'Telescope colorscheme', shortcut = 'SPC h t'}, } db.custom_footer = { '', '🎉 If I\'m using Neovim, then my Emacs config must be broken!' } db.session_directory = "/home/dt/.config/nvim/session" ------------------------------------------------- -- PLUGINS ------------------------------------------------- return require('packer').startup(function() -- Packer can manage itself use 'wbthomason/packer.nvim' -- Dashboard is a nice start screen for nvim use 'glepnir/dashboard-nvim' -- Telescope and related plugins -- use { 'nvim-telescope/telescope.nvim', tag = '0.1.0', requires = { {'nvim-lua/plenary.nvim'} } } use { "nvim-telescope/telescope-file-browser.nvim", config = function() require("telescope").setup { extensions = { file_browser = { theme = "ivy", -- disables netrw and use telescope-file-browser in its place hijack_netrw = true, mappings = { ["i"] = { -- your custom insert mode mappings }, ["n"] = { -- your custom normal mode mappings }, }, }, }, } end } -- To get telescope-file-browser loaded and working with telescope, -- you need to call load_extension, somewhere after setup function: require("telescope").load_extension "file_browser" -- Treesitter -- use {'nvim-treesitter/nvim-treesitter', config = function() require'nvim-treesitter.configs'.setup { -- If TS highlights are not enabled at all, or disabled via `disable` prop, -- highlighting will fallback to default Vim syntax highlighting highlight = { enable = true, additional_vim_regex_highlighting = {'org'}, -- Required for spellcheck, some LaTex highlights and code block highlights that do not have ts grammar }, ensure_installed = {'org'}, -- Or run :TSUpdate org } end } -- Productivity -- use 'vimwiki/vimwiki' use 'jreybert/vimagit' use {'nvim-orgmode/orgmode', config = function() require('orgmode').setup{ org_agenda_files = {'~/nc/Org/agenda.org'}, org_default_notes_file = '~/nc/Org/notes.org', } end } require('orgmode').setup_ts_grammar() -- Which key use { "folke/which-key.nvim", config = function() require("which-key").setup { -- your configuration comes here -- or leave it empty to use the default settings } end } -- A better status line -- use { 'nvim-lualine/lualine.nvim', requires = { 'kyazdani42/nvim-web-devicons', opt = true } } require('lualine').setup() -- File management -- use 'vifm/vifm.vim' use 'scrooloose/nerdtree' use 'tiagofumo/vim-nerdtree-syntax-highlight' use 'ryanoasis/vim-devicons' -- Tim Pope Plugins -- use 'tpope/vim-surround' -- Syntax Highlighting and Colors -- use 'PotatoesMaster/i3-vim-syntax' use 'kovetskiy/sxhkd-vim' use 'vim-python/python-syntax' use 'ap/vim-css-color' -- Junegunn Choi Plugins -- use 'junegunn/goyo.vim' use 'junegunn/limelight.vim' use 'junegunn/vim-emoji' -- Colorschemes -- use 'RRethy/nvim-base16' use 'kyazdani42/nvim-palenight.lua' -- Other stuff -- use 'frazrepo/vim-rainbow' end)