Files
nvim/pwnvim/options.lua
2023-04-02 13:46:42 +03:00

428 lines
15 KiB
Lua

local M = {}
SimpleUI = (os.getenv("SIMPLEUI") == "1" or os.getenv("TERM_PROGRAM") ==
"Apple_Terminal" or os.getenv("TERM") == "linux") and
not vim.g.neovide
M.defaults = function()
-- disable builtin vim plugins
vim.g.loaded_gzip = 0
vim.g.loaded_tar = 0
vim.g.loaded_tarPlugin = 0
vim.g.loaded_zipPlugin = 0
vim.g.loaded_2html_plugin = 0
vim.g.loaded_netrw = 1 -- disable netrw
vim.g.loaded_netrwPlugin = 1 -- disable netrw
-- we just use lua plugins here so disable others
vim.g.loaded_perl_provider = 0
vim.g.loaded_node_provider = 0
vim.g.loaded_python3_provider = 0
vim.g.loaded_ruby_provider = 0
-- vim.g.loaded_matchit = 0
-- vim.g.loaded_matchparen = 0
vim.g.loaded_spec = 0
vim.g.vim_markdown_no_default_key_mappings = 1
vim.g.markdown_folding = 1
vim.g.vim_markdown_strikethrough = 1
vim.g.vim_markdown_auto_insert_bullets = 1
vim.g.vim_markdown_new_list_item_indent = 0
vim.g.vim_markdown_conceal = 1
vim.g.vim_markdown_math = 0
vim.g.vim_markdown_conceal_code_blocks = 0
vim.g.vim_markdown_frontmatter = 1
vim.g.db_ui_use_nerd_fonts = true
-- this would allow spaces in filenames for commands like `gf` but results are really mixed.
-- commenting for now 2022-12-22
-- vim.opt.isfname:append { "32" }
vim.opt.grepprg =
"rg\\ --vimgrep\\ --no-heading\\ --smart-case\\ --color\\ never"
vim.opt.grepformat = "%f:%l:%c:%m,%f:%l:%m,%f"
-- ignore completions and menus for the below
vim.opt.wildignore =
"*/node_modules/*,_site,*/__pycache__/,*/venv/*,*/target/*,*/.vim$,\\~$,*/.log,*/.aux,*/.cls,*/.aux,*/.bbl,*/.blg,*/.fls,*/.fdb*/,*/.toc,*/.out,*/.glo,*/.log,*/.ist,*/.fdb_latexmk,*.bak,*.o,*.a,*.sw?,.git/,*.class,.direnv/,.DS_Store"
vim.opt.wildmenu = true -- cmd line completion a-la zsh
vim.opt.wildmode = "list:longest" -- matches mimic that of bash or zsh
vim.opt.swapfile = false
vim.opt.spell = true
vim.opt.spelllang = "en_us"
vim.opt.ruler = true -- show the cursor position all the time
vim.opt.cursorline = true -- add indicator for current line
vim.opt.secure = true -- don't execute shell cmds in .vimrc not owned by me
vim.opt.history = 50 -- keep 50 lines of command line history
vim.opt.shell = "zsh"
vim.opt.modelines = 0 -- Don't allow vim settings embedded in text files for security reasons
vim.opt.showcmd = true -- display incomplete commands
vim.opt.showmode = true -- display current mode
-- with backup off and writebackup on: backup current file, deleted afterwards
vim.opt.backup = false
vim.opt.writebackup = true
vim.opt.backupcopy = "auto"
vim.opt.hidden = true
vim.opt.cf = true -- jump to errors based on error files
vim.o.listchars = "tab:⇥ ,trail:␣,extends:⇉,precedes:⇇,nbsp:·"
vim.opt.list = true -- render special chars (tabs, trails, ...)
vim.opt.ttyfast = true
vim.opt.expandtab = true
vim.opt.splitbelow = true -- allow splits below
vim.opt.splitright = true -- and to the right
vim.opt.dictionary:append { '/usr/share/dict/words', '~/.aspell.english.pws' }
vim.opt.complete = vim.opt.complete + { 'k', ']' }
vim.opt.complete = vim.opt.complete - { 'i' }
vim.opt.encoding = "utf-8"
vim.opt.backspace = "indent,eol,start" -- allow backspacing over everything in insert mode
vim.opt.joinspaces = false -- don't insert two spaces after sentences on joins
vim.opt.binary = false
vim.opt.display = "lastline"
vim.opt.viewoptions = "folds,cursor,unix,slash" -- better unix / windows compatibility
vim.o.shortmess = "filnxtToSAcOF"
vim.opt.foldnestmax = 5
-- wrapping
vim.opt.wrap = true
vim.opt.sidescroll = 2 -- min number of columns to scroll from edge
vim.opt.scrolloff = 8 -- when 4 away from edge start scrolling
vim.opt.sidescrolloff = 8 -- keep cursor one col from end of line
vim.opt.textwidth = 0
vim.opt.breakindent = true
vim.opt.showbreak = "» "
vim.opt.breakat:remove { '/', '*', '_', '`' }
vim.opt.linebreak = true -- wraps on word boundaries but only if nolist is set
-- Make tabs be spaces of 4 characters by default
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.softtabstop = 4
vim.opt.expandtab = true -- turn tabs to spaces by default
vim.opt.autoindent = true -- autoindent to same level as previous line
vim.opt.smartindent = true -- indent after { and cinwords words
vim.opt.smartcase = true -- intelligently ignore case in searches
vim.opt.ignorecase = true -- default to not being case sensitive
vim.opt.smarttab = true
vim.opt.icm = "nosplit" -- show substitutions as you type
vim.opt.hlsearch = true
vim.opt.updatetime = 250 -- Decrease update time
vim.wo.signcolumn = 'yes'
vim.opt.visualbell = true
vim.opt.autoread = true -- auto reload files changed on disk if not changed in buffer
vim.opt.cursorline = false
vim.opt.ttyfast = true
vim.opt.formatoptions = 'jcroqlt' -- t=text, c=comments, q=format with "gq"
vim.opt.showmatch = true -- auto hilights matching bracket or paren
vim.opt.nrformats = vim.opt.nrformats - { 'octal' }
vim.opt.shiftround = true
vim.opt.ttimeout = true
vim.opt.ttimeoutlen = 50
vim.opt.fileformats = "unix,dos,mac"
vim.o.matchpairs = "(:),{:},[:],<:>"
vim.opt.number = false
vim.opt.relativenumber = false
-- noinsert: don't insert until selection made, noselect: don't select automatically
vim.opt.completeopt = "menu,menuone,noinsert,noselect" -- needed for autocompletion stuff
vim.opt.conceallevel = 2
vim.opt.fileencoding = "utf-8"
-- Globals
vim.g.vimsyn_embed = 'l' -- Highlight Lua code inside .vim files
-- vim.g.polyglot_disabled = { 'sensible', 'autoindent' } -- preserve in case I want to bring back polyglot
vim.g.foldlevelstart = 3
-- map the leader key
vim.api.nvim_set_keymap('n', ',', '', {})
vim.g.mapleader = ',' -- Namespace for custom shortcuts
if not SimpleUI then
vim.g.termguicolors = true
vim.o.termguicolors = true
else
vim.g.termguicolors = false
vim.o.termguicolors = false
end
vim.o.background = "dark"
if not SimpleUI then
require("onedarkpro").setup({
-- Call :OnedarkproCache if you make changes below and to speed startups
caching = true,
highlights = {
mkdLink = { fg = "${blue}", style = "underline" },
bareLink = { fg = "${blue}", style = "underline" },
mkdURL = { fg = "${green}", style = "underline" },
mkdInlineURL = { fg = "${blue}", style = "underline" },
mkdListItem = { fg = "${cyan}" },
markdownListMarker = { fg = "${cyan}" },
mkdListItemCheckbox = { fg = "${green}" },
-- markdownCheckbox = { fg = "${purple}" },
-- markdownCheckboxUnchecked = { fg = "${purple}" },
-- markdownCheckboxChecked = { fg = "${green}" },
markdownCheckboxCanceled = {
fg = "${comment}",
style = "strikethrough"
},
markdownCheckboxPostponed = { fg = "${comment}" },
markdownStrikethrough = {
fg = "${comment}",
style = "strikethrough"
},
markdownTag = { fg = "${comment}" },
doneTag = { fg = "${comment}", style = "italic" },
highPrioTask = { fg = "${red}", style = "bold" },
-- mkdLinkTitle
-- mkdID
-- mkdDelimiter
-- mkdInlineURL
-- mkdCode
-- mkdFootnote
-- mkdMath
-- htmlLink
TSURI = { fg = "${blue}", style = "underline" },
TSPunctSpecial = { fg = "${red}" },
markdownTSTitle = { fg = "${cyan}", style = "bold" },
markdownAutomaticLink = { fg = "${blue}", style = "underline" },
markdownLink = { fg = "${green}", style = "underline" },
markdownLinkText = { fg = "${blue}", style = "underline" },
markdownUrl = { fg = "${green}", style = "underline" },
markdownWikiLink = { fg = "${blue}", style = "underline" },
markdownH1 = { fg = "${yellow}", style = "bold" },
markdownH2 = { fg = "${yellow}", style = "bold" },
markdownH3 = { fg = "${yellow}" },
markdownH4 = { fg = "${green}", style = "italic" },
markdownH5 = { fg = "${green}", style = "italic" },
markdownH6 = { fg = "${green}", style = "italic" },
htmlH1 = { fg = "${yellow}", style = "bold" },
htmlH2 = { fg = "${yellow}", style = "bold" },
htmlH3 = { fg = "${yellow}" },
htmlH4 = { fg = "${green}", style = "italic" },
htmlH5 = { fg = "${green}", style = "italic" },
htmlH6 = { fg = "${green}", style = "italic" },
markdownBold = { fg = "#ffffff", style = "bold" },
htmlBold = { fg = "#ffffff", style = "bold" },
markdownItalic = { fg = "#eeeeee", style = "italic" },
htmlItalic = { fg = "#eeeeee", style = "italic" },
markdownBoldItalic = { fg = "#ffffff", style = "bold,italic" },
htmlBoldItalic = { fg = "#ffffff", style = "bold,italic" },
SpellBad = { style = "undercurl", sp = "${red}" },
SpellCap = { style = "undercurl", sp = "${cyan}" },
SpellRare = { style = "undercurl", sp = "Magenta" },
SpellLocal = { style = "undercurl", sp = "${cyan}" },
IndentBlanklineChar = { fg = "#444444" },
-- Todo = { fg = "#282c34", bg = "${highlight}", style = "bold" },
VertSplit = { fg = "#202020", bg = "#606060" },
Folded = { fg = "#c0c8d0", bg = "#384058" },
["@comment.markdown"] = { fg = "${comment}" },
["@field.markdown_inline"] = { fg = "${purple}" },
["@text.literal.markdown_inline"] = { fg = "${green}" },
["@text.reference.markdown_inline"] = {
fg = "${blue}",
style = "underline"
},
["@text.underline"] = { style = "underline" },
["@text.strong.markdown_inline"] = {
fg = "#ffffff",
style = "bold"
},
["@text.emphasis.markdown_inline"] = {
fg = "#eeeeee",
style = "italic"
},
["@strikethrough.markdown_inline"] = {
fg = "${comment}",
style = "strikethrough"
},
["@tag"] = { fg = "${comment}" },
["@block_quote.markdown"] = { fg = "${purple}", style = "italic" },
["@text.title.markdown"] = { fg = "${yellow}", style = "bold" },
-- ["@parameter.markdown_inline"] = { fg = theme.palette.fg },
["@punctuation.special.markdown"] = { fg = "${cyan}" },
["@punctuation.delimiter.markdown_inline"] = { fg = "${orange}" },
["@text.uri.markdown_inline"] = { fg = "${blue}" },
["@text.todo.unchecked"] = {
fg = "#ffffff",
bg = "",
style = "bold"
},
["@text.todo.checked"] = { fg = "${green}", style = "bold" },
TelescopeBorder = {
fg = "${telescope_results}",
bg = "${telescope_results}"
},
TelescopePromptBorder = {
fg = "${telescope_prompt}",
bg = "${telescope_prompt}"
},
TelescopePromptCounter = { fg = "${fg}" },
TelescopePromptNormal = {
fg = "${fg}",
bg = "${telescope_prompt}"
},
TelescopePromptPrefix = {
fg = "${purple}",
bg = "${telescope_prompt}"
},
TelescopePromptTitle = {
fg = "${telescope_prompt}",
bg = "${purple}"
},
TelescopePreviewTitle = {
fg = "${telescope_results}",
bg = "${green}"
},
TelescopeResultsTitle = {
fg = "${telescope_results}",
bg = "${telescope_results}"
},
TelescopeMatching = { fg = "${blue}" },
TelescopeNormal = { bg = "${telescope_results}" },
TelescopeSelection = { bg = "${telescope_prompt}" }
},
styles = { -- Choose from "bold,italic,underline"
virtual_text = "italic" -- Style that is applied to virtual text
},
plugins = { all = true },
options = {
bold = not SimpleUI,
italic = not SimpleUI,
underline = not SimpleUI,
undercurl = not SimpleUI,
cursorline = true,
transparency = false,
terminal_colors = false,
highlight_inactive_windows = true
},
colors = {
onedark = {
telescope_prompt = "#2e323a",
telescope_results = "#21252d"
},
onelight = {
telescope_prompt = "#f5f5f5",
telescope_results = "#eeeeee"
}
}
})
end
local cscheme
if SimpleUI then
cscheme = "ir_black"
else
cscheme = "onedark"
end
vim.cmd("colorscheme " .. cscheme)
vim.api.nvim_exec([[
filetype plugin indent on
syntax on
syntax sync minlines=5000
]], false)
-- Brief highlight on yank
vim.api.nvim_exec([[
augroup YankHighlight
autocmd!
autocmd TextYankPost * silent! lua vim.highlight.on_yank()
augroup end
]], false)
end
M.gui = function()
vim.opt.title = true
vim.opt.switchbuf = "useopen,usetab,newtab"
-- vim.opt.guifont = "Liga DejaVuSansMono Nerd Font:h16"
-- vim.opt.guifont = "FiraCode Nerd Font:h16" -- no italics
-- if vim.loop.os_uname().sysname == "Darwin" then
if vim.fn.has('mac') == 1 then
vim.opt.guifont = "Hasklug Nerd Font:h18"
else
vim.opt.guifont = "Hasklug Nerd Font:h9"
end
vim.g.neovide_transparency = 0.92
vim.g.neovide_cursor_animation_length = 0.01
vim.g.neovide_cursor_trail_length = 0.1
vim.g.neovide_cursor_antialiasing = true
vim.g.neovide_refresh_rate = 60
vim.g.neovide_remember_window_size = true
vim.g.neovide_input_macos_alt_is_meta = false
vim.g.neovide_hide_mouse_when_typing = false
vim.opt.mouse = "nv" -- only use mouse in normal and visual modes (notably not insert and command)
vim.opt.mousemodel = "popup_setpos"
-- use the system clipboard for all unnamed yank operations
vim.opt.clipboard = "unnamedplus"
vim.cmd([[set guioptions="gmrLae"]])
-- nvim-qt options
-- Disable GUI Tabline
vim.api.nvim_exec([[
if exists(':GuiTabline')
GuiTabline 0
endif
]], false)
end
M.twospaceindent = function()
vim.bo.textwidth = 0
vim.bo.tabstop = 2
vim.bo.shiftwidth = 2
vim.bo.softtabstop = 2
vim.bo.expandtab = true -- turn tabs to spaces by default
vim.bo.autoindent = true
-- vim.cmd('retab')
end
M.fourspaceindent = function()
vim.bo.textwidth = 0
vim.bo.tabstop = 4
vim.bo.shiftwidth = 4
vim.bo.softtabstop = 4
vim.bo.expandtab = true -- turn tabs to spaces by default
vim.bo.autoindent = true
-- vim.cmd('retab')
end
M.tabindent = function()
vim.bo.textwidth = 0
vim.bo.tabstop = 4
vim.bo.shiftwidth = 4
vim.bo.softtabstop = 4
vim.bo.expandtab = false -- don't turn tabs to spaces
vim.bo.autoindent = true
end
M.retab = function() vim.cmd('%retab!') end
M.programming = function()
vim.opt.number = true
vim.wo.number = true
vim.wo.spell = false
vim.wo.relativenumber = false
vim.wo.cursorline = true -- add indicator for current line
M.twospaceindent()
-- Could be a performance penalty on this
-- Will make periodic checks to see if the file changed
vim.api.nvim_exec([[
augroup programming
autocmd!
autocmd CursorHold,CursorHoldI * silent! checktime
augroup END
]], false)
-- Load direnv when we're in a programming file as we may want
-- the nix environment provided. Run explicitly since the autocmds
-- might not otherwise fire.
vim.cmd('packadd direnv.vim')
vim.cmd('DirenvExport')
end
return M