aboutsummaryrefslogtreecommitdiff
path: root/lua/user/opts.lua
diff options
context:
space:
mode:
authorsrdusr <trevorgray@srdusr.com>2025-09-24 00:14:04 +0200
committersrdusr <trevorgray@srdusr.com>2025-09-24 00:14:04 +0200
commit966d12ac730c83da90d60ab24eae539b2ea69441 (patch)
tree702f5f832796b572d0faee31c0eb15507e91f49a /lua/user/opts.lua
parent2a8020a2e9b7ef2ee77ddee14892127a4eb95187 (diff)
downloaddotfiles-966d12ac730c83da90d60ab24eae539b2ea69441.tar.gz
dotfiles-966d12ac730c83da90d60ab24eae539b2ea69441.zip
Update/Overhaul
Diffstat (limited to 'lua/user/opts.lua')
-rwxr-xr-x[-rw-r--r--]lua/user/opts.lua341
1 files changed, 214 insertions, 127 deletions
diff --git a/lua/user/opts.lua b/lua/user/opts.lua
index cc8debc..bac80c3 100644..100755
--- a/lua/user/opts.lua
+++ b/lua/user/opts.lua
@@ -1,40 +1,137 @@
---[[ opts.lua ]]
-
--- Environment
---vim.opt.shell = "zsh" --
-vim.o.updatetime = 250
-vim.o.shell = '/bin/zsh'
-vim.scriptencoding = 'utf-8' --
-vim.opt.encoding = 'utf-8' --
-vim.opt.fileencoding = 'utf-8' --
-vim.g.python3_host_prog = '/usr/bin/python3' --
+-- ============================================================================
+-- Options
+-- ============================================================================
+
+local uname = vim.loop.os_uname()
+local system = uname.sysname
+local shell = nil
+
+if system == "Windows_NT" then
+ -- Windows options
+ if vim.fn.executable("pwsh") == 1 then
+ shell = "pwsh"
+ elseif vim.fn.executable("powershell") == 1 then
+ shell = "powershell"
+ elseif vim.fn.executable("bash") == 1 then
+ shell = "bash"
+ end
+else
+ -- Unix-like systems: use the user's default shell
+ local env_shell = os.getenv("SHELL")
+ if env_shell and vim.fn.executable(env_shell) == 1 then
+ shell = env_shell
+ else
+ -- fallback logic
+ if vim.fn.executable("zsh") == 1 then
+ shell = vim.fn.exepath("zsh")
+ elseif vim.fn.executable("bash") == 1 then
+ shell = vim.fn.exepath("bash")
+ end
+ end
+end
+
+-- Finally set the shell if we found one
+if shell then
+ vim.o.shell = shell
+end
+
+-- Core Settings
+vim.opt.encoding = 'utf-8'
+vim.opt.fileencoding = 'utf-8'
+vim.scriptencoding = 'utf-8'
+vim.opt.termguicolors = true
+vim.opt.mouse = 'a'
+vim.opt.clipboard = 'unnamedplus'
+vim.opt.hidden = true
+vim.opt.updatetime = 300
+vim.opt.timeoutlen = 500
+vim.opt.ttimeoutlen = 10
+
+-- Display
+vim.opt.number = true
+vim.opt.relativenumber = true
+vim.opt.cursorline = true
+vim.opt.signcolumn = 'yes'
+vim.opt.showcmd = true
+vim.opt.showmode = true
+vim.opt.showmatch = true
+vim.opt.laststatus = 2
+vim.opt.cmdheight = 1
+vim.opt.scrolloff = 5
+vim.opt.sidescrolloff = 5
+vim.opt.display = 'lastline'
+
+-- Indentation
+vim.opt.autoindent = true
+vim.opt.smartindent = true
+vim.opt.expandtab = true
+vim.opt.tabstop = 2
+vim.opt.shiftwidth = 2
+vim.opt.softtabstop = 2
+vim.opt.shiftround = true
+
+-- Search
+vim.opt.hlsearch = true
+vim.opt.incsearch = true
+vim.opt.ignorecase = true
+vim.opt.smartcase = true
+vim.opt.inccommand = 'split'
+
+-- Window Management
+vim.opt.splitright = true
+vim.opt.splitbelow = true
+vim.opt.winminwidth = 1
+vim.opt.winwidth = 5
+
+-- File Handling
+vim.opt.autoread = true
+--vim.opt.autowrite = true
+vim.opt.backup = true
+vim.opt.backupdir = vim.fn.stdpath('cache') .. '/backup//'
+vim.opt.directory = vim.fn.stdpath('cache') .. '/swap//'
+vim.opt.undofile = true
+vim.opt.undodir = vim.fn.stdpath('cache') .. '/undo//'
+vim.opt.swapfile = false
+
+-- Wildmenu
+vim.opt.wildmenu = true
+vim.opt.wildmode = 'longest:full,full'
+vim.opt.wildignorecase = true
+vim.opt.wildignore = '*.o,*.obj,.git,*.rbc,*.pyc,__pycache__'
+
+
+vim.scriptencoding = "utf-8" --
+vim.opt.encoding = "utf-8" --
+vim.opt.fileencoding = "utf-8" --
+vim.g.python3_host_prog = "/usr/bin/python3" --
vim.g.loaded_python3_provider = 1 --
vim.g.sh_noisk = 1 -- iskeyword word boundaries when editing a 'sh' file
vim.o.autochdir = true
--vim.o.writeany= true
-- Clipboard
-vim.opt.clipboard:append({ 'unnamedplus' }) -- Install xclip or this will slowdown startup
+vim.opt.clipboard:append({ "unnamedplus" }) -- Install xclip or this will slowdown startup
-- Behaviour
-vim.opt.backspace = { 'start', 'eol', 'indent' } -- Make backspace work as you would expect.
+vim.opt.backspace = { "start", "eol", "indent" } -- Make backspace work as you would expect.
vim.opt.hidden = true -- Switch between buffers without having to save first.
+vim.opt.conceallevel = 2
vim.opt.splitbelow = true -- make split put the new buffer below the current buffer
vim.opt.splitright = true -- make vsplit put the new buffer on the right of the current buffer
vim.opt.scrolloff = 8 --
vim.opt.sidescrolloff = 8 -- how many lines to scroll when using the scrollbar
vim.opt.autoread = true -- reload files if changed externally
-vim.opt.display = 'lastline' -- Show as much as possible of the last line.
-vim.opt.inccommand = 'split' --
+vim.opt.display = "lastline" -- Show as much as possible of the last line.
+vim.opt.inccommand = "split" --
vim.opt.ttyfast = true -- Faster redrawing.
vim.opt.lazyredraw = false -- Only redraw when necessary
-vim.opt.keywordprg = ':help' -- :help options
+vim.opt.keywordprg = ":help" -- :help options
vim.opt.ruler = true --
vim.opt.errorbells = false --
vim.opt.list = true -- Show non-printable characters.
vim.opt.showmatch = true --
vim.opt.matchtime = 3 --
-vim.opt.showbreak = '↪ ' --
+vim.opt.showbreak = "↪ " --
vim.opt.linebreak = true --
vim.opt.exrc = true --
--vim.opt.autochdir = true -- or use this to use <:e> to create a file in current directory
@@ -59,10 +156,28 @@ vim.opt.shiftround = true -- >> indents to next multiple of 'shiftwidth'.
vim.opt.smartindent = true -- smart indent
-- Column/statusline/Cl
-vim.opt.number = true --
+
+-- Enable number and relativenumber by default
+vim.opt.number = true
+vim.opt.relativenumber = true
+
+-- Entering insert mode: disable relativenumber
+vim.api.nvim_create_autocmd("InsertEnter", {
+ callback = function()
+ vim.opt.relativenumber = false
+ end,
+})
+
+-- Leaving insert mode: enable relativenumber
+vim.api.nvim_create_autocmd("InsertLeave", {
+ callback = function()
+ vim.opt.relativenumber = true
+ end,
+})
+
vim.opt.title = true --
--vim.opt.colorcolumn = "+1" --
-vim.opt.signcolumn = 'yes:1' -- always show the sign column
+vim.opt.signcolumn = "yes:1" -- always show the sign column
--vim.opt.signcolumn = "yes:" .. vim.o.numberwidth
--vim.opt.signcolumn = "number"
--vim.opt.signcolumn = "no" --
@@ -90,51 +205,52 @@ vim.opt.report = 0 -- Always report changed lines.
--vim.opt.stl = " "
-- Backup/undo/swap
-local prefix = vim.env.XDG_CONFIG_HOME or vim.fn.expand('~/.config')
+local prefix = vim.env.XDG_CONFIG_HOME or vim.fn.expand("~/.config")
--vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir"
-vim.opt.undodir = { prefix .. '/nvim/tmp/.undo//' }
-vim.opt.directory = { prefix .. '/nvim/tmp/.swp//' }
-vim.opt.backupdir = { prefix .. '/nvim/tmp/.backup//' }
+--vim.opt.undodir = { prefix .. "/nvim/tmp/.undo//" }
+vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir"
+vim.opt.directory = { prefix .. "/nvim/tmp/.swp//" }
+vim.opt.backupdir = { prefix .. "/nvim/tmp/.backup//" }
vim.opt.undofile = true --
vim.opt.swapfile = true --
vim.opt.backup = true --
--vim.opt.backupcopy =
-- Add timestamp as extension for backup files
-vim.api.nvim_create_autocmd('BufWritePre', {
- group = vim.api.nvim_create_augroup('timestamp_backupext', { clear = true }),
- desc = 'Add timestamp to backup extension',
- pattern = '*',
+vim.api.nvim_create_autocmd("BufWritePre", {
+ group = vim.api.nvim_create_augroup("timestamp_backupext", { clear = true }),
+ desc = "Add timestamp to backup extension",
+ pattern = "*",
callback = function()
- vim.opt.backupext = '-' .. vim.fn.strftime('%Y%m%d%H%M')
+ vim.opt.backupext = "-" .. vim.fn.strftime("%Y%m%d%H%M")
end,
})
-- Format
--vim.opt.textwidth = 80 --
-vim.opt.isfname:append('@-@')
+vim.opt.isfname:append("@-@")
vim.cmd([[let &t_Cs = "\e[4:3m"]]) -- Undercurl
vim.cmd([[let &t_Ce = "\e[4:0m"]]) --
-vim.opt.path:append({ '**' }) -- Finding files - Search down into subfolder
-vim.cmd('set whichwrap+=<,>,[,],h,l') --
+vim.opt.path:append({ "**" }) -- Finding files - Search down into subfolder
+vim.cmd("set whichwrap+=<,>,[,],h,l") --
vim.cmd([[set iskeyword+=-]]) --
--vim.cmd([[set formatoptions-=cro]]) -- TODO: this doesn't seem to work
vim.opt.formatoptions = vim.opt.formatoptions
- - 't' -- wrap with text width
- + 'c' -- wrap comments
- + 'r' -- insert comment after enter
- - 'o' -- insert comment after o/O
- - 'q' -- allow formatting of comments with gq
- - 'a' -- format paragraphs
- + 'n' -- recognized numbered lists
- - '2' -- use indent of second line for paragraph
- + 'l' -- long lines are not broken
- + 'j' -- remove comment when joining lines
+ - "t" -- wrap with text width
+ + "c" -- wrap comments
+ + "r" -- insert comment after enter
+ - "o" -- insert comment after o/O
+ - "q" -- allow formatting of comments with gq
+ - "a" -- format paragraphs
+ + "n" -- recognized numbered lists
+ - "2" -- use indent of second line for paragraph
+ + "l" -- long lines are not broken
+ + "j" -- remove comment when joining lines
vim.opt.wrapscan = true -- " Searches wrap around end-of-file.
--vim.wo.number = true --
--vim.opt.wrap = false -- No Wrap lines
--vim.opt.foldmethod = 'manual' --
--vim.opt.foldmethod = "expr" --
-vim.opt.foldmethod = 'manual'
+vim.opt.foldmethod = "manual"
vim.opt.foldlevel = 3
vim.opt.confirm = false
--vim.opt.shortmess:append("sI")
@@ -142,42 +258,42 @@ vim.opt.confirm = false
--vim.opt.shortmess = "sI"
--vim.o.shortmess = vim.o.shortmess:gsub('s', '')
vim.opt.shortmess = table.concat({ -- Use abbreviations and short messages in command menu line.
- 'f', -- Use "(3 of 5)" instead of "(file 3 of 5)".
- 'i', -- Use "[noeol]" instead of "[Incomplete last line]".
- 'l', -- Use "999L, 888C" instead of "999 lines, 888 characters".
- 'm', -- Use "[+]" instead of "[Modified]".
- 'n', -- Use "[New]" instead of "[New File]".
- 'r', -- Use "[RO]" instead of "[readonly]".
- 'w', -- Use "[w]", "[a]" instead of "written", "appended".
- 'x', -- Use "[dos]", "[unix]", "[mac]" instead of "[dos format]", "[unix format]", "[mac format]".
- 'o', -- Overwrite message for writing a file with subsequent message.
- 'O', -- Message for reading a file overwrites any previous message.
- 's', -- Disable "search hit BOTTOM, continuing at TOP" such messages.
- 't', -- Truncate file message at the start if it is too long.
- 'T', -- Truncate other messages in the middle if they are too long.
- 'I', -- Don't give the :intro message when starting.
- 'c', -- Don't give ins-completion-menu messages.
- 'F', -- Don't give the file info when editing a file.
+ "f", -- Use "(3 of 5)" instead of "(file 3 of 5)".
+ "i", -- Use "[noeol]" instead of "[Incomplete last line]".
+ "l", -- Use "999L, 888C" instead of "999 lines, 888 characters".
+ "m", -- Use "[+]" instead of "[Modified]".
+ "n", -- Use "[New]" instead of "[New File]".
+ "r", -- Use "[RO]" instead of "[readonly]".
+ "w", -- Use "[w]", "[a]" instead of "written", "appended".
+ "x", -- Use "[dos]", "[unix]", "[mac]" instead of "[dos format]", "[unix format]", "[mac format]".
+ "o", -- Overwrite message for writing a file with subsequent message.
+ "O", -- Message for reading a file overwrites any previous message.
+ "s", -- Disable "search hit BOTTOM, continuing at TOP" such messages.
+ "t", -- Truncate file message at the start if it is too long.
+ "T", -- Truncate other messages in the middle if they are too long.
+ "I", -- Don't give the :intro message when starting.
+ "c", -- Don't give ins-completion-menu messages.
+ "F", -- Don't give the file info when editing a file.
})
vim.opt.fillchars = {
- horiz = '─',
- horizup = '┴',
- horizdown = '┬',
- vert = '│',
- vertleft = '┤',
- vertright = '├',
- verthoriz = '┼',
- foldopen = '',
- foldsep = '│',
- foldclose = '',
- fold = '─',
- eob = ' ',
+ horiz = "─",
+ horizup = "┴",
+ horizdown = "┬",
+ vert = "│",
+ vertleft = "┤",
+ vertright = "├",
+ verthoriz = "┼",
+ foldopen = "",
+ foldsep = "│",
+ foldclose = "",
+ fold = "─",
+ eob = " ",
--diff = "┃",
- diff = '░',
- msgsep = '━',
+ diff = "░",
+ msgsep = "━",
--msgsep = "‾",
}
-vim.opt.listchars = { tab = '▸ ', trail = '·' } --
+vim.opt.listchars = { tab = "▸ ", trail = "·" } --
--vim.opt.fillchars:append({ eob = " " }) -- remove the ~ from end of buffer
vim.opt.modeline = true --
vim.opt.modelines = 3 -- modelines (comments that set vim options on a per-file basis)
@@ -194,40 +310,45 @@ vim.opt.smartcase = true -- smart case
vim.opt.synmaxcol = 200 -- Only highlight the first 200 columns.
--vim.opt.winblend = 30
--vim.opt.winblend = 5
-vim.opt.wildoptions = 'pum' --
+vim.opt.wildoptions = "pum" --
--vim.opt.pumblend = 5 --
vim.opt.pumblend = 12 --
--vim.opt.pumblend=15
vim.opt.pumheight = 10 -- pop up menu height
-- Better Completion
-vim.opt.complete = { '.', 'w', 'b', 'u', 't' } --
+vim.opt.complete = { ".", "w", "b", "u", "t" } --
--vim.opt.completeopt = { "longest,menuone,preview" } --
-vim.opt.completeopt = { 'menu', 'menuone', 'noselect' }
+vim.opt.completeopt = { "menu", "menuone", "noselect" }
--vim.opt.completeopt = { "menuone", "noselect" } -- mostly just for cmp
--vim.opt.completeopt = { "menu", "menuone", "noselect" } --
+-- Spellcheck
+vim.opt.spelllang = { "en_gb", "en_us" } -- Set a list of preferred dictionaries
+vim.opt.spell = true
+--vim.opt.spellfile = "~/.config/nvim/spell/en.utf-8.add" -- Specify a personal dictionary file
+
-- Wildmenu completion --
vim.opt.wildmenu = true --
-vim.opt.wildmode = { 'list:longest' } --
-vim.opt.wildignore:append({ '.hg', '.git', '.svn' }) -- Version control
-vim.opt.wildignore:append({ '*.aux', '*.out', '*.toc' }) -- LaTeX intermediate files
-vim.opt.wildignore:append({ '*.jpg', '*.bmp', '*.gif', '*.png', '*.jpeg' }) -- binary images
-vim.opt.wildignore:append({ '*.o', '*.obj', '*.exe', '*.dll', '*.manifest' }) -- compiled object files
-vim.opt.wildignore:append({ '*.spl' }) -- compiled spelling word lists
-vim.opt.wildignore:append({ '*.sw?' }) -- Vim swap files
-vim.opt.wildignore:append({ '*.DS_Store' }) -- OSX bullshit
-vim.opt.wildignore:append({ '*.luac' }) -- Lua byte code
-vim.opt.wildignore:append({ 'migrations' }) -- Django migrations
-vim.opt.wildignore:append({ '*.pyc' }) -- Python byte code
-vim.opt.wildignore:append({ '*.orig' }) -- Merge resolution files
-vim.opt.wildignore:append({ '*/node_modules/*' }) --
+vim.opt.wildmode = { "list:longest" } --
+vim.opt.wildignore:append({ ".hg", ".git", ".svn" }) -- Version control
+vim.opt.wildignore:append({ "*.aux", "*.out", "*.toc" }) -- LaTeX intermediate files
+vim.opt.wildignore:append({ "*.jpg", "*.bmp", "*.gif", "*.png", "*.jpeg" }) -- binary images
+vim.opt.wildignore:append({ "*.o", "*.obj", "*.exe", "*.dll", "*.manifest" }) -- compiled object files
+vim.opt.wildignore:append({ "*.spl" }) -- compiled spelling word lists
+vim.opt.wildignore:append({ "*.sw?" }) -- Vim swap files
+vim.opt.wildignore:append({ "*.DS_Store" }) -- OSX bullshit
+vim.opt.wildignore:append({ "*.luac" }) -- Lua byte code
+vim.opt.wildignore:append({ "migrations" }) -- Django migrations
+vim.opt.wildignore:append({ "*.pyc" }) -- Python byte code
+vim.opt.wildignore:append({ "*.orig" }) -- Merge resolution files
+vim.opt.wildignore:append({ "*/node_modules/*" }) --
-- Shada
vim.opt.shada = "!,'1000,f1,<1000,s100,:1000,/1000,h"
-- Sessions
-vim.opt.sessionoptions = 'blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal'
+vim.opt.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal"
--vim.opt.sessionoptions = "curdir,folds,help,options,tabpages,winsize,winpos,terminal,globals" --
--vim.opt.sessionoptions = "buffers,curdir,folds,help,tabpages,winsize,winpos,terminal"
--vim.opt.sessionoptions:remove({ "blank", "buffers", "globals" })
@@ -241,13 +362,8 @@ vim.g.netrw_winsize = 25
--vim.cmd([[
-- "filetype plugin indent on
--]])
-vim.cmd('filetype plugin on')
-vim.cmd('filetype indent off')
-
--- Let clipboard register be +
-vim.cmd([[
- let g:clipbrdDefaultReg = '+'
-]])
+vim.cmd("filetype plugin on")
+vim.cmd("filetype indent off")
--vim.cmd([[
-- "autocmd BufEnter * :syntax sync fromstart
@@ -256,6 +372,7 @@ vim.cmd([[
-- "autocmd FileType lua set comments=s1:---,m:--,ex:--
--]])
+
-- Fast macros without lazyredraw
vim.cmd([[
set re=0
@@ -280,7 +397,7 @@ vim.cmd([[ " Only show cursorline in the
augroup END
]])
vim.opt.cursorline = true --
-vim.opt.guicursor = 'i:ver100,r:hor100' --
+vim.opt.guicursor = "i:ver100,r:hor100" --
-- Trailing whitespace
vim.cmd([[ " Only show in insert mode
@@ -319,33 +436,3 @@ vim.cmd([[
let &scrollback=s:scroll_value
endfunction
]])
-
--- Yank to clipboard in Termux
-if vim.fn.has('termux') == 1 then
- local Job = require('plenary.job')
- vim.api.nvim_create_autocmd('TextYankPost', {
- pattern = '*',
- callback = function()
- Job:new({
- command = 'termux-clipboard-set',
- writer = vim.fn.getreg('@'),
- }):start()
- end,
- })
-end
-
-function GetTermuxClipboard()
- if vim.fn.has('termux') == 1 then
- local sysclip = vim.fn.system('termux-clipboard-get')
- if sysclip ~= '@' then
- vim.fn.setreg('@', sysclip)
- end
- end
- return ''
-end
-
-if vim.fn.has('termux') == 1 then
- vim.cmd('autocmd TextYankPost * call GetTermuxClipboard()')
- vim.cmd('noremap <expr> p Paste("p")')
- vim.cmd('noremap <expr> P Paste("P")')
-end