dotfiles

My dotfiles.
git clone git://git.ryanmj.xyz/dotfiles.git
Log | Files | Refs | LICENSE

init.lua (4839B)


      1 require('plugins')
      2 
      3 local g = vim.g   -- Global options.
      4 local o = vim.o   -- Vim options.
      5 local A = vim.api -- Vim API.
      6 local wo = vim.wo -- Window options.
      7 
      8 local absGrp = A.nvim_create_augroup("AbsoluteGroup", { clear = true }) -- Autocmd group
      9 
     10 -- Editor options.
     11 -- Do not save when switching buffers
     12 -- o.hidden = true
     13 
     14 -- Decrease update time
     15 o.timeoutlen = 500
     16 o.updatetime = 200
     17 
     18 -- Show 80'th column.
     19 vim.wo.colorcolumn = "80"
     20 
     21 -- TODO this in lua
     22 vim.cmd 'hi ColorColumn ctermbg=gray guibg=gray'
     23 
     24 -- Number of screen lines to keep above and below the cursor
     25 o.scrolloff = 8
     26 o.number = true
     27 
     28 -- Line numbers.
     29 o.relativenumber = true
     30 o.cursorline = true
     31 o.signcolumn = 'yes'
     32 
     33 -- Better editing experience
     34 o.expandtab = true
     35 -- o.smarttab = true
     36 o.cindent = true
     37 -- o.autoindent = true
     38 o.wrap = true
     39 o.textwidth = 300
     40 o.tabstop = 4
     41 o.shiftwidth = 0
     42 o.softtabstop = -1 -- If negative, shiftwidth value is used
     43 
     44 -- Undo and backup options
     45 o.backup = false
     46 o.writebackup = false
     47 o.undofile = true
     48 o.swapfile = false
     49 
     50 -- Remember 69 items in commandline history
     51 o.history = 69
     52 
     53 -- Better buffer splitting
     54 o.splitright = true
     55 o.splitbelow = true
     56 
     57 -- Grahics options.
     58 o.termguicolors = true
     59 
     60 -- Better whitespace.
     61 g.strip_whitespace_on_save=1
     62 
     63 --local ok, _ = pcall(vim.cmd, 'colorscheme sakura')
     64 
     65 -- LSP
     66 
     67 lsp = require 'lspconfig'
     68 
     69 -- Mappings.
     70 -- See `:help vim.diagnostic.*` for documentation on any of the below functions
     71 local opts = { noremap=true, silent=true }
     72 vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
     73 vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
     74 vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
     75 vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
     76 
     77 -- Use an on_attach function to only map the following keys
     78 -- after the language server attaches to the current buffer
     79 local on_attach = function(client, bufnr)
     80     -- Enable completion triggered by <c-x><c-o>
     81     vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
     82 
     83     -- Mappings.
     84     -- See `:help vim.lsp.*` for documentation on any of the below functions
     85     local bufopts = { noremap=true, silent=true, buffer=bufnr }
     86     vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
     87     vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
     88     vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
     89     vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
     90     vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
     91     vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
     92     vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
     93     vim.keymap.set('n', '<space>wl', function()
     94         print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
     95     end, bufopts)
     96     vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
     97     vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
     98     vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
     99     vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
    100     vim.keymap.set('n', '<space>f', vim.lsp.buf.formatting, bufopts)
    101 end
    102 
    103 local lsp_flags = {
    104     -- This is the default in Nvim 0.7+
    105     debounce_text_changes = 150,
    106 }
    107 lsp['pyright'].setup{
    108     on_attach = on_attach,
    109     flags = lsp_flags,
    110 }
    111 lsp['tsserver'].setup{
    112     on_attach = on_attach,
    113     flags = lsp_flags,
    114 }
    115 lsp['rust_analyzer'].setup{
    116     on_attach = on_attach,
    117     flags = lsp_flags,
    118     -- Server-specific settings...
    119     settings = {
    120         ["rust-analyzer"] = {}
    121     }
    122 }
    123 lsp.clangd.setup{
    124     on_attach = on_attach,
    125     flags = lsp_flags,
    126 }
    127 
    128 -- YouCompleteMe
    129 --
    130 g.ycm_language_server = {{
    131     name = 'c',
    132     cmdline = {'/usr/bin/clangd'},
    133     filetypes = {'c'},
    134     project_root_files = {'Makefile', 'compile_commands.json'}
    135 }}
    136 
    137 -- Clang-format
    138 
    139 -- Autostart.
    140 A.nvim_create_autocmd("FileType", {
    141     command = 'ClangFormatAutoEnable',
    142     group = absGrp,
    143     pattern = 'c,cpp,objc'
    144 })
    145 
    146 
    147 -- Code formatting.
    148 
    149 -- If nvim version >= 0.7, use native lua functionality to handle autocmd.
    150 -------------------------------------- Note: This does not work. ---------------------------------
    151 if vim.fn.has "nvim-0.7" then
    152     vim.api.nvim_create_autocmd("BufWritePre", {
    153         pattern = '.*',
    154         callback = function()
    155             vim.schedule(AbsCodeFormat)
    156         end,
    157     })
    158 else
    159     vim.cmd "autocmd BufWritePre * lua AbsCodeFormat()"
    160 end
    161 
    162 -- Function to format the code in the current buffer.
    163 function AbsCodeFormat()
    164     local bufnr = vim.api.nvim_get_current_buf()
    165     local ft = vim.api.nvim_buf_get_option(bufnr, "filetype")
    166     local fname = vim.fn.expand "%:p:t"
    167     local keymap_c = {}
    168 
    169     --        if ft == 'c' or ft == 'cpp' or ft == 'objc' then
    170     --            ClangFormat()
    171     --        end
    172 end
    173 
    174 g.user_emmet_leader_key = ','
    175 g.user_emmet_mode = 'n'