summaryrefslogtreecommitdiffstats
path: root/lua/conf/opts.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/conf/opts.lua')
-rw-r--r--lua/conf/opts.lua82
1 files changed, 81 insertions, 1 deletions
diff --git a/lua/conf/opts.lua b/lua/conf/opts.lua
index db75358..5d8a24f 100644
--- a/lua/conf/opts.lua
+++ b/lua/conf/opts.lua
@@ -1,3 +1,6 @@
+local misc = require('core.misc')
+local auto = misc.auto
+
-- color stuff
if vim.fn.has("termguicolors") then
vim.opt.termguicolors = true
@@ -5,6 +8,10 @@ end
vim.opt.laststatus = 3
+-- numbers
+vim.opt.number = true
+vim.opt.relativenumber = true
+
-- buffer
vim.opt.scrolloff = 5
vim.opt.wrap = true -- wraping lines
@@ -21,7 +28,12 @@ vim.opt.tabstop = tabwidth
vim.opt.shiftwidth = tabwidth
vim.opt.softtabstop = tabwidth
-vim.opt.clipboard = 'unnamedplus' -- system clipboard
+-- Schedule the setting after `UiEnter` because it can increase startup-time.
+-- (yoinked from kickstart.nvim)
+vim.schedule(function()
+ vim.opt.clipboard = 'unnamedplus' -- system clipboard
+end)
+
vim.opt.updatetime = 200
-- file saving
@@ -50,3 +62,71 @@ vim.g.netrw_winsize = 30
vim.g.netrw_liststyle = 1
vim.g.netrw_sizestyle = "H"
vim.g.netrw_hide = 1
+
+-- folding
+auto("FileType", {
+ callback = function()
+ -- support lsp folding
+ if vim.fn.has("nvim-0.11") then
+ auto('LspAttach', {
+ callback = function(args)
+ local client = vim.lsp.get_client_by_id(args.data.client_id)
+ if not client then
+ return
+ end
+
+ if client:supports_method('textDocument/foldingRange') then
+ local win = vim.api.nvim_get_current_win()
+ vim.wo[win][0].foldmethod = "expr"
+ vim.wo[win][0].foldexpr = 'v:lua.vim.lsp.foldexpr()'
+ end
+ end,
+ })
+ end
+
+ -- or just rely on treesitter
+ if require("nvim-treesitter.parsers").has_parser() then
+ vim.opt.foldmethod = "expr"
+ vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
+ else
+ vim.opt.foldmethod = "syntax"
+ end
+ end
+})
+
+-- lsp folding: vim.o.foldexpr = "v:lua.vim.lsp.foldexpr()"
+-- waiting on https://github.com/neovim/neovim/pull/31311 to hit a release
+require('core.lsp.functions').add_capabilities({
+ textDocument = {
+ foldingRange = {
+ dynamicRegistration = false,
+ lineFoldingOnly = true
+ }
+ }
+})
+
+vim.opt.foldlevelstart = 99
+vim.opt.foldlevel = 99
+vim.opt.foldenable = true
+vim.o.fillchars = 'fold: '
+
+_G.Fold_text = require('core.folding')
+vim.opt.foldtext = 'v:lua.Fold_text()'
+
+-- statusline
+function _G.Status()
+ return table.concat {
+ "%t", -- file name
+ " %h", -- help buffer tag
+ "%m", -- modify tag
+ "%r", -- readonly flag
+ "%=", -- seperate left and right side
+
+ -- print out the number of lsp clients attached
+ "λ"..#vim.lsp.get_clients({ bufnr = 0 }).." ",
+
+ "%l,%c%V", -- line, column-virtual column
+ " %P" -- percentage through display window
+ }
+end
+vim.o.statusline="%!v:lua.Status()"