" --- custom format settings ------------------------------------------
" {{{
function FormatFileType(indent, expandtab, foldmethod, foldlevel, spell)
	let &l:tabstop = a:indent
	let &l:softtabstop = a:indent
	let &l:shiftwidth = a:indent

	let &l:expandtab = a:expandtab

	let &l:foldmethod = a:foldmethod
	let &l:foldlevel = a:foldlevel

	let &l:spell = a:spell
endfunction

augroup forced_filetype_recognition
	autocmd!
	autocmd BufRead,BufNewFile *.tmux          setfiletype tmux
	autocmd BufRead,BufNewFile *.clisp         setfiletype lisp
	autocmd BufRead,BufNewFile *.lsp           setfiletype lisp
	autocmd BufRead,BufNewFile Dockerfile*     setfiletype dockerfile
	autocmd BufRead,BufNewFile *i3.conf        setfiletype i3config
	autocmd BufRead,BufNewFile *.template.yaml set filetype=yaml.cloudformation
	autocmd BufRead,BufNewFile git.conf        setfiletype gitconfig

	autocmd BufRead,BufNewFile */scwrypts/* execute "set filetype=".&filetype.".scwrypts"

	let g:tex_flavor = "latex"
augroup end

augroup filetype_specific_formatting
	autocmd!
	autocmd FileType python     call FormatFileType(4, v:true,  'indent', 99, v:false)
	autocmd FileType java       call FormatFileType(4, v:true,  'indent', 99, v:false)
	autocmd FileType cpp        call FormatFileType(4, v:true,  'indent', 99, v:false)
	autocmd FileType cmake      call FormatFileType(4, v:true,  'indent', 99, v:false)
	autocmd FileType cs         call FormatFileType(4, v:true,  'indent', 99, v:false)
	autocmd FileType css        call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType sass       call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType html       call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType javascript call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType typescript call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType vim        call FormatFileType(4, v:false, 'marker', 99, v:false)
	autocmd FileType sh         call FormatFileType(4, v:false, 'indent', 99, v:false)
	autocmd FileType zsh        call FormatFileType(4, v:false, 'indent', 99, v:false)
	autocmd FileType lisp       call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType markdown   call FormatFileType(2, v:false, 'indent', 99, v:true )
	autocmd FileType tex        call FormatFileType(8, v:false, 'indent', 99, v:true )
	autocmd FileType postscr    call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType haskell    call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType perl       call FormatFileType(4, v:true,  'indent', 99, v:false)
	autocmd FileType kotlin     call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType dockerfile call FormatFileType(4, v:true,  'indent', 99, v:false)
	autocmd FileType vue        call FormatFileType(2, v:true,  'indent', 99, v:false)
	autocmd FileType go         call FormatFileType(4, v:false, 'manual', 99, v:false)
	autocmd FileType json       call FormatFileType(2, v:false, 'indent', 99, v:false)
	autocmd FileType smarty     call FormatFileType(2, v:true,  'indent', 99, v:false)
augroup end

let g:markdown_fenced_languages = ['javascript', 'json', 'python', 'bash', 'yaml', 'shell=zsh', 'sql']
" }}}

syntax on