From 0909b2fbacd431acf1965c72ac4aa2786bdf0feb Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Thu, 18 Aug 2022 23:41:55 +0300 Subject: [PATCH] nix/prog/nvim: move basic config to lua --- nix/progs/nvim/config.lua | 17 +--- nix/progs/nvim/config.vim | 137 +------------------------- nix/progs/nvim/default.nix | 5 +- nix/progs/nvim/lua/basic.lua | 183 +++++++++++++++++++++++++++++++++++ 4 files changed, 186 insertions(+), 156 deletions(-) create mode 100644 nix/progs/nvim/lua/basic.lua diff --git a/nix/progs/nvim/config.lua b/nix/progs/nvim/config.lua index fbe371c..a2ff2ac 100644 --- a/nix/progs/nvim/config.lua +++ b/nix/progs/nvim/config.lua @@ -1,16 +1 @@ --- TreeSitter -require'nvim-treesitter.configs'.setup { - -- A list of parser names, or "all" - -- ensure_installed = { "nix", "typescript", "tsx" }, - - -- Install parsers synchronously (only applied to `ensure_installed`) - -- sync_install = false, - - highlight = { - enable = true, - }, - - indent = { - enable = true, - }, -} +print('hello from basic.lua) diff --git a/nix/progs/nvim/config.vim b/nix/progs/nvim/config.vim index 2a4e8be..006155b 100644 --- a/nix/progs/nvim/config.vim +++ b/nix/progs/nvim/config.vim @@ -1,83 +1,4 @@ -" Basic settings -filetype off - -" Leaders -let g:mapleader = ',' -let g:maplocalleader = '-' - -" Better Unix support -set viewoptions=folds,options,cursor,unix,slash -set encoding=utf-8 - -" True color support -set termguicolors - -" Theme (required plugin 'material-vim') -"let g:material_theme_style = 'default' | 'palenight' | 'ocean' | 'lighter' | -" 'darker' | 'default-community' | 'palenight-community' | 'ocean-community' | -" 'lighter-community' | 'darker-community' -let g:material_theme_style = 'default' -let g:lightline = { 'colorscheme': 'material_vim' } -colorscheme material - -" Other options -syntax on -set backspace=2 -set laststatus=2 -set noshowmode - -" Tabs as spaces -set expandtab -set tabstop=2 -set softtabstop=2 -set shiftwidth=2 - -" Clear search highlighting -nnoremap :nohlsearch - -" Fixes broken cursor on Linux -set guicursor= - -" General editor options -set hidden " Hide files when leaving them. -set number " Show line numbers. -set numberwidth=1 " Minimum line number column width. -set cmdheight=2 " Number of screen lines to use for the commandline. -set textwidth=0 " Lines length limit (0 if no limit). -set linebreak " Don't cut lines in the middle of a work. -set showmatch " Show matching parenthesis. -set matchtime=2 " Time during which the matching parenthesis is shown. -set formatoptions=jtcrq " Sensible default line auto cutting and formatting. -set clipboard=unnamedplus " Copy/Past to/from clipboard -set cursorline " Highlight line cursor is currently on -set completeopt+=noinsert " Select the first item of popup menu automatically without inserting it -set listchars=tab:→\ ,trail:~,nbsp:␣,eol:¬ " Invisible characters representation when :set list. - -" Search -set incsearch " Incremental search. -set ignorecase " Case insensitive. -set smartcase " Case insensitive if no uppercase letter in pattern, case sensitive otherwise - -" Set up a line limiter for each lang -aug line_limiter - au! - au BufNewFile,BufRead *.nix setlocal colorcolumn=101 - au BufNewFile,BufRead *.vim setlocal colorcolumn=101 - au BufNewFile,BufRead *.ts,*.tsx setlocal colorcolumn=101 - au BufNewFile,BufRead *.js,*.jsx setlocal colorcolumn=101 - au BufNewFile,BufRead *.rs setlocal colorcolumn=101 - au BufNewFile,BufRead *.json setlocal colorcolumn=81 - au BufNewFile,BufRead *.yml,*.yaml setlocal colorcolumn=81 - au BufNewFile,BufRead *.md setlocal colorcolumn=81 - au BufNewFile,BufRead *.html setlocal colorcolumn=81 - " TODO: add limiter for haskell -aug END - -" Spell check for markdown files -aug spell_check - au! - au BufNewFile,BufRead *.md setlocal spell -aug END +lua require('basic') " Set up folding aug folding @@ -86,59 +7,3 @@ aug folding au BufNewFile,BufRead *.ts,*.tsx syntax on | setlocal foldmethod=syntax aug END -" Enable fast navigation between windows -nnoremap h -nnoremap l -nnoremap j -nnoremap k - -" Disable the annoying and useless ex-mode -nnoremap Q -nnoremap gQ - -" Disable arrow keys -noremap -noremap -noremap -noremap -vnoremap -vnoremap -vnoremap -vnoremap -"... instead of insert mode for rus lang -"inoremap -"inoremap -"inoremap -"inoremap - -" Disable page up / down -noremap -noremap -inoremap -inoremap -vnoremap -vnoremap - -" Disable mouse / touchpad (only in vim) -set mouse= -inoremap -inoremap -inoremap -inoremap -inoremap -inoremap -inoremap -inoremap -inoremap -inoremap -inoremap -inoremap - -" Incremental substitutin -set inccommand=split - -" Misc -nnoremap sv :source $MYVIMRC - -cabbrev bsp belowright split -cabbrev rvsp belowright vsplit diff --git a/nix/progs/nvim/default.nix b/nix/progs/nvim/default.nix index 5a0327c..9f8eec7 100644 --- a/nix/progs/nvim/default.nix +++ b/nix/progs/nvim/default.nix @@ -45,10 +45,6 @@ let cocSettings = builtins.toJSON (import ./coc_settings.nix); vimConfig = baseConfig + pluginsConfig + cocConfig; - - # I get an error if I try copying lua script to lua folder - # TODO: think about this solution - luaConfig = builtins.readFile ./config.lua; in { options.progs.nvim = { @@ -77,6 +73,7 @@ in }; xdg.configFile = { + "nvim/lua".source = ./lua; "nvim/coc-settings.json".text = cocSettings; }; diff --git a/nix/progs/nvim/lua/basic.lua b/nix/progs/nvim/lua/basic.lua new file mode 100644 index 0000000..1934aca --- /dev/null +++ b/nix/progs/nvim/lua/basic.lua @@ -0,0 +1,183 @@ +------------------------------------------------------------------------------- +-- +-- Basic Settings +-- + +vim.cmd 'filetype off' + +-- Leaders +vim.g.mapleader = ',' +vim.g.maplocalleader = '-' + +-- Better Unix support +vim.opt.viewoptions = {'folds', 'options', 'cursor', 'unix', 'slash'} +vim.opt.encoding = 'utf-8' + +-- True color support +vim.opt.termguicolors = true + +-- Theme (required plugin 'material-vim') +-- Available styles: default, planight, ocean, lighter +-- darker, default-community, palenight-community, ocean-community, +-- lighter-community, darker-community +vim.g.material_theme_style = 'default' +vim.g.lightline = { colorscheme = 'material_vim' } +vim.cmd 'colorscheme material' + +-- Other options +vim.cmd 'syntax on' +vim.opt.backspace = {'indent', 'eol', 'start'} +vim.opt.laststatus = 2 +vim.opt.showmode = false + +-- Tabs as spaces +vim.opt.expandtab = true +vim.opt.tabstop = 2 +vim.opt.softtabstop = 2 +vim.opt.shiftwidth = 2 + +-- Fixes broken cursor on Linux +vim.opt.guicursor = '' + +-- Disable mouse / touchpad +vim.opt.mouse = '' + +-- Incremental substitutin +vim.opt.inccommand = 'split' + +------------------------------------------------------------------------------- +-- +-- General editor options +-- + +-- Hide files when leaving them. +vim.opt.hidden = true +-- Show line numbers. +vim.opt.number = true +-- Minimum line number column width. +vim.opt.numberwidth = 1 +-- Number of screen lines to use for the commandline. +vim.opt.cmdheight = 2 +-- Lines length limit (0 if no limit). +vim.opt.textwidth = 0 +-- Don't cut lines in the middle of a work. +vim.opt.linebreak = true +-- Show matching parenthesis. +vim.opt.showmatch = true +-- Time during which the matching parenthesis is shown. +vim.opt.matchtime = 2 +-- Sensible default line auto cutting and formatting. +vim.opt.formatoptions = 'jtcrq' +-- Copy/Past to/from clipboard. +vim.opt.clipboard = 'unnamedplus' +-- Highlight line cursor is currently on. +vim.opt.cursorline = true +-- Select the first item of popup menu automatically without inserting it. +vim.opt.completeopt:append('noinsert') +-- Invisible characters representation when :set list +vim.opt.listchars = { + tab = '→ ', + trail = '~', + nbsp = '␣', + eol = '¬', +} + +-- Search +-- Incremental search. +vim.opt.incsearch = true +-- Case insensitive. +vim.opt.ignorecase = true +-- Case insensitive if no uppercase letter in pattern, case sensitive otherwise. +vim.opt.smartcase = true + +-- Spell +vim.opt.spelllang = 'en,ru' + +------------------------------------------------------------------------------- +-- +-- File type specified +-- +local bufReadFile = {'BufNewFile', 'BufRead'} + +-- Set up a line limiter for each lang +local line_limiter_augroup = vim.api.nvim_create_augroup('line_limiter', {}) +local function set_line_limiter(pattern, limit) + vim.api.nvim_create_autocmd(bufReadFile, { + pattern = pattern, + group = line_limiter_augroup, + callback = function () vim.wo.colorcolumn = limit end, + }) +end + +set_line_limiter('*.nix', '101') +set_line_limiter('*.vim', '101') +set_line_limiter('*.lua', '101') +set_line_limiter('*.ts,*.tsx', '101') +set_line_limiter('*.js.*.jsx', '101') +set_line_limiter('*.rs', '101') +set_line_limiter('*.json', '81') +set_line_limiter('*.yml','*.yaml', '81') +set_line_limiter('*.md', '81') +set_line_limiter('*.html', '81') +set_line_limiter('*.css', '81') +-- TODO: add line limiter for haskell + +-- Spell check for markdown files +local spell_check_augroup = vim.api.nvim_create_augroup('spell_check', {}) +local function enable_spell_check(pattern) + vim.api.nvim_create_autocmd(bufReadFile, { + pattern = pattern, + group = spell_check_augroup, + callback = function () vim.wo.spell = true end, + }) +end +enable_spell_check '*.md' + + + +------------------------------------------------------------------------------- +-- +-- Bindings +-- +local function disable_search_highlighting() vim.opt.hlsearch = false end +vim.keymap.set('n', '', disable_search_highlighting, { desc = 'Clear search highlighting' }) + +-- Enable fast navigation between windows +vim.keymap.set('n', '', 'h') +vim.keymap.set('n', '', 'l') +vim.keymap.set('n', '', 'j') +vim.keymap.set('n', '', 'k') + +-- Disable the annoying and useless ex-mode +vim.keymap.set('n', 'Q', '') +vim.keymap.set('n', 'gQ', '') + +-- Disable arrow keys +vim.keymap.set('n', '', '') +vim.keymap.set('n', '', '') +vim.keymap.set('n', '', '') +vim.keymap.set('n', '', '') +vim.keymap.set('v', '', '') +vim.keymap.set('v', '', '') +vim.keymap.set('v', '', '') +vim.keymap.set('v', '', '') +-- ... instead of insert mode for rus lang +vim.keymap.set('i', '', '') +vim.keymap.set('i', '', '') +vim.keymap.set('i', '', '') +vim.keymap.set('i', '', '') + +-- Disable page up / down +vim.keymap.set('n', '', '') +vim.keymap.set('n', '', '') +vim.keymap.set('v', '', '') +vim.keymap.set('v', '', '') +vim.keymap.set('i', '', '') +vim.keymap.set('i', '', '') + +------------------------------------------------------------------------------- +-- +-- Abbreviatures +-- +vim.cmd 'cabbrev bsp belowright split' +vim.cmd 'cabbrev rvsp belowright vsplit'