local o          = vim.opt

-- set options
o.clipboard      = "unnamedplus"                           -- keep the clipboard in sync with the one provided by the OS
o.termguicolors  = true                                    -- allows for colour in the terminal
o.number         = true                                    -- show line numbers
o.cursorline     = true                                    -- highlight the current line
o.cursorcolumn   = false                                   -- highlight the current column
o.dir            = vim.fn.stdpath('cache') .. '/swp'       -- swap directory location for recovery
o.sessionoptions = 'buffers,curdir,folds,help,localoptions,tabpages,terminal'
o.expandtab      = false                                   -- whether tabs are expanded to spaces (overridden by .editorconfig)
o.diffopt        = 'internal,filler,closeoff,linematch:60' -- diff visualisation
o.foldenable     = true                                    -- whether folding is enabled
o.wrap           = false                                   -- whether to wrap text to a new line when it goes off-screen
o.breakindent    = true                                    -- wrapped lines start at the same location as the start of the line
o.list           = true                                    -- shows invisible characters
o.listchars      = {                                       -- whitespace characters
	eol = nil,
	trail = '~',
	extends = nil,
	precedes = '<',
	tab = '•-',
	space = '·',
	nbsp = '␣',
}
o.mouse          = 'nv'                               -- which modes the mouse is enabled in 'a:all'
o.relativenumber = true                               -- whether line numbers are relative to the cursor
o.scrolloff      = 10                                 -- minimal number of screen lines to keep above and below the cursor
o.showtabline    = 2                                  -- whether to show the tab line
o.signcolumn     = 'yes'                              -- always show the signcolumn, otherwise it shifts text all the time
o.tabstop        = 8                                  -- visual spaces per tab
o.softtabstop    = 8                                  -- spaces inserted per tab in insert mode
o.shiftwidth     = 8                                  -- spaces for auto-indent
o.smartindent    = true                               -- behave a bit more nuanced with when to indent
o.ignorecase     = true                               -- whether case should be ignored whilst searching
o.smartcase      = true                               -- overrides the above option if contains capital letters
o.inccommand     = 'split'                            -- split|nosplit whether substitutions should appear whilst typing.
o.splitbelow     = true                               -- force all horizontal splits below the current window
o.splitright     = true                               -- force all vertical splits to the right of this window
o.showmode       = false                              -- don't show mode as this is already in the status line
o.undodir        = vim.fn.stdpath('cache') .. '/undo' -- directory for undo files
o.undofile       = true                               -- for saving the undo history
o.undolevels     = 1024                               -- the amount of changes that can be undone
o.timeoutlen     = 300                                -- number of MS to wait for a mapped sequence to complete
o.ttimeoutlen    = 0                                  -- number of MS to wait for a key sequence to complete
o.updatetime     = 250                                -- number of MS of nothing typed to write a swap file to disk.
o.spell          = true                               -- whether spell checking is enabled
o.spelllang      = 'en_gb,nl'                         -- set the spell languages
o.spellfile      = vim.fn.stdpath('config') .. '/spell/user.utf-8.add'

vim.diagnostic.config({
	underline        = true, -- use underline for diagnostics
	virtual_text     = true, -- shows diagnostics at the end of the line
	virtual_lines    = false, -- shows one diagnostic per line
	severity_sort    = true, -- sort diagnostics by severity
	update_in_insert = true, -- update diagnostics whilst in insert mode
	float            = true, -- options for floating windows
	signs            = true,
})
