diff --git a/fnl/init.fnl b/fnl/init.fnl index 56eb9d1..7780d65 100644 --- a/fnl/init.fnl +++ b/fnl/init.fnl @@ -19,15 +19,15 @@ (local compe (require "compe")) -;(fn on_attach [client bufnr] - ;(if client.resolved_capabilities.document_highlight - ;(nvim.api.nvim_exec - ;"hi LspReferenceRead cterm=bold ctermbg=red guibg='#8ec07c' guifg='#282828' hi LspReferenceText cterm=bold ctermbg=red guibg='#8ec07c' guifg='#282828' hi LspReferenceWrite cterm=bold ctermbg=red guibg='#8ec07c' guifg='#282828' - ;augroup lsp_document_highlight - ;autocmd! * autocmd CursorHold lua vim.lsp.buf.document_highlight() autocmd CursorMoved lua vim.lsp.buf.clear_references() - ;augroup END " false))) +(fn on_attach [client bufnr] + (if client.resolved_capabilities.document_highlight + (nvim.api.nvim_exec + "hi LspReferenceRead cterm=bold ctermbg=red guibg='#8ec07c' guifg='#282828' hi LspReferenceText cterm=bold ctermbg=red guibg='#8ec07c' guifg='#282828' hi LspReferenceWrite cterm=bold ctermbg=red guibg='#8ec07c' guifg='#282828' + augroup lsp_document_highlight + autocmd! * autocmd CursorHold lua vim.lsp.buf.document_highlight() autocmd CursorMoved lua vim.lsp.buf.clear_references() + augroup END " false))) -(fn on_attach [client bufnr] (print "hi")) +;(fn on_attach [client bufnr] (print "hi")) (lsp.rust_analyzer.setup { :on_attach on_attach}) @@ -72,12 +72,16 @@ :vsplit "v" :split "b" :scroll_up "" - :scroll_down ""}} + :scroll_down ""}}) - (local galaxyline (require "galaxyline")) - (local colors (utils.colors))) +(local galaxyline (require "galaxyline")) +(local gl-condition (require "galaxyline.condition")) +(local gl-fileinfo (require "galaxyline.provider_fileinfo")) +(local gl-diagnostic (require "galaxyline.provider_diagnostic")) +(local gl-vcs (require "galaxyline.provider_vcs")) +(local colors (utils.colors)) (local modes { :n { :text "NORMAL" :colors { :bg colors.neutral_aqua :fg colors.dark0}} @@ -101,17 +105,89 @@ -(fn viModeProvider [] - (let [modedata (or (. modes (nvim.fn.mode)) - { :text (nvim.fn.mode) :colors {:bg colors.neutral_orange :fg colors.dark0}})] - (utils.highlight "GalaxyViMode" modedata.colors) - modedata.text)) +(fn get-mode-data [] + (or (. modes (nvim.fn.mode)) + { :text (nvim.fn.mode) + :colors {:bg colors.neutral_orange :fg colors.dark0}})) +(fn buf-empty? [] + (= 1 (nvim.fn.empty (nvim.fn.expand "%:t")))) + +(fn checkwidth [] + (and (< 35 (/ (nvim.fn.winwidth 0) 2)) + (not buf-empty?))) + + +(fn file-readonly-or-help? [] + (and nvim.bo.readonly (~= nvim.bo.filetype "help"))) -(tset galaxyline.section.left 1 - { :ViMode { :provider viModeProvider :icon " "}}) -(tset galaxyline.section.left 2 - { :FileSize { :provider "FileSize"}}) +(fn get-current-file-name [] + (let [file (nvim.fn.expand "%:t")] + (if + (= 1 (nvim.fn.empty file)) "" + (file-readonly-or-help?) (.. "RO " file) + (and nvim.bo.modifiable nvim.bo.modified) (.. file " ") + file))) +(utils.highlight "StatusLine" {:bg colors.dark1 :fg colors.light0}) +(set galaxyline.short_line_list ["dbui" "diff" "peekaboo" "undotree" "vista" "vista_markdown"]) + + +(set galaxyline.section.left + [ { :ViMode { :provider + (fn [] + (let [modedata (get-mode-data)] + (utils.highlight "GalaxyViMode" modedata.colors) + (.. " " modedata.text " ")))}} + + { :FileName { :provider get-current-file-name + :highlight [colors.light4 colors.dark1]}} + { :Space { :provider (fn [] "") + :highlight [colors.light0 colors.dark1]}}]) + + +(fn provider-lsp-diag [kind] + (fn [] + (let [n (vim.lsp.diagnostic.get_count 0 kind)] + (if + (= n 0) "" + (.. " " n " "))))) + +(set galaxyline.section.right + [ { :GitBranch { :provider (fn [] + (let [branch (gl-vcs.get_git_branch)] + (if (= "master" branch) "" branch))) + :highlight [colors.light4 colors.dark1]}} + { :FileType { :provider (fn [] nvim.bo.filetype) + :highlight [colors.neutral_aqua colors.dark1]}} + + { :DiagnosticInfo { :provider (provider-lsp-diag "Info") + :highlight [colors.dark1 colors.neutral_blue]}} + { :DiagnosticWarn { :provider (provider-lsp-diag "Warning") + :highlight [colors.dark1 colors.neutral_yellow] + :separator ""}} + { :DiagnosticError { :provider (provider-lsp-diag "Error") + :highlight [colors.dark1 colors.bright_red] + :separator ""}} + { :LineInfo { :provider (fn [] (.. " " (gl-fileinfo.line_column) " ")) + :highlight "GalaxyViMode" + :separator ""}}]) + + + + +(do + (fn add-segment-defaults [data] + (a.merge { :highlight [colors.light0 colors.dark1] + :separator " " + :separator_highlight "StatusLine"} + data)) + + (fn map-gl-section [f section] + (icollect [_ elem (ipairs section)] + (collect [k v (pairs elem)] (values k (f v))))) + + (set galaxyline.section.left (map-gl-section add-segment-defaults galaxyline.section.left)) + (set galaxyline.section.right (map-gl-section add-segment-defaults galaxyline.section.right))) diff --git a/fnl/utils.fnl b/fnl/utils.fnl index b1f33e2..4498a1c 100644 --- a/fnl/utils.fnl +++ b/fnl/utils.fnl @@ -53,4 +53,8 @@ (defn highlight [group colset] - (nvim.command (.. "hi " group " guifg='" colset.fg "' guibg='" colset.bg "'"))) + (nvim.command (.. "hi " group " guifg='" colset.fg "' guibg='" colset.bg "' gui=NONE"))) + + +(defn comp [f g ...] + (f (g ...)))