mirror of
https://github.com/elkowar/dots-of-war.git
synced 2024-12-25 05:42:22 +00:00
109 lines
4.6 KiB
Fennel
109 lines
4.6 KiB
Fennel
(module plugins.galaxyline
|
||
{require {a aniseed.core
|
||
fennel aniseed.fennel
|
||
nvim aniseed.nvim
|
||
utils utils
|
||
|
||
galaxyline galaxyline
|
||
gl-condition galaxyline.condition
|
||
gl-fileinfo galaxyline.provider_fileinfo
|
||
gl-diagnostic galaxyline.provider_diagnostic
|
||
gl-vcs galaxyline.provider_vcs}
|
||
|
||
require-macros [macros]})
|
||
|
||
(local colors (utils.colors))
|
||
|
||
(local modes
|
||
{ :n { :text "NORMAL" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:i { :text "INSERT" :colors { :bg colors.neutral_yellow :fg colors.dark0}}
|
||
:c { :text "CMD" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:ce { :text "NORMEX" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:cv { :text "EX" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:ic { :text "INSCOMP" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:no { :text "OP-PENDING" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:r { :text "HIT-ENTER" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:r? { :text "CONFIRM" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:R { :text "REPLACE" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:Rv { :text "VIRTUAL" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:s { :text "SELECT" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:S { :text "SELECT" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:t { :text "TERM" :colors { :bg colors.neutral_aqua :fg colors.dark0}}
|
||
:v { :text "VISUAL" :colors { :bg colors.neutral_blue :fg colors.dark0}}
|
||
:V { :text "VISUAL LINE" :colors { :bg colors.neutral_blue :fg colors.dark0}}
|
||
"" { :text "VISUAL BLOCK" :colors { :bg colors.neutral_blue :fg colors.dark0}}})
|
||
|
||
|
||
(fn buf-name-empty? []
|
||
(a.empty? (nvim.fn.expand "%:t")))
|
||
|
||
(fn get-current-file-name []
|
||
(let [file (nvim.fn.expand "%:t")]
|
||
(if
|
||
(a.empty? file) ""
|
||
nvim.bo.readonly (.. "RO " file)
|
||
(and nvim.bo.modifiable nvim.bo.modified) (.. file " ")
|
||
file)))
|
||
|
||
(fn get-mode-data []
|
||
(or (. modes (nvim.fn.mode))
|
||
{ :text (nvim.fn.mode)
|
||
:colors {:bg colors.neutral_orange :fg colors.dark0}}))
|
||
|
||
(fn vim-mode-provider []
|
||
(let [modedata (get-mode-data)]
|
||
(utils.highlight "GalaxyViMode" modedata.colors)
|
||
(.. " " modedata.text " ")))
|
||
|
||
|
||
(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 vim-mode-provider}}
|
||
{ :FileName { :provider get-current-file-name
|
||
:highlight [colors.light4 colors.dark1]}}
|
||
{ :Space { :provider (fn [] "")
|
||
:highlight [colors.light0 colors.dark1]}}])
|
||
|
||
(fn make-lsp-diagnostic-provider [kind]
|
||
(fn []
|
||
(let [n (vim.lsp.diagnostic.get_count 0 kind)]
|
||
(if (= n 0) "" (.. " " n " ")))))
|
||
|
||
(fn git-branch-provider []
|
||
(let [branch (gl-vcs.get_git_branch)]
|
||
(if (= "master" branch) "" branch)))
|
||
|
||
(set galaxyline.section.right
|
||
[ { :GitBranch { :provider git-branch-provider
|
||
:highlight [colors.light4 colors.dark1]}}
|
||
{ :FileType { :provider (fn [] nvim.bo.filetype)
|
||
:highlight [colors.neutral_aqua colors.dark1]}}
|
||
|
||
{ :DiagnosticInfo { :provider (make-lsp-diagnostic-provider "Info")
|
||
:highlight [colors.dark1 colors.neutral_blue]}}
|
||
{ :DiagnosticWarn { :provider (make-lsp-diagnostic-provider "Warning")
|
||
:highlight [colors.dark1 colors.neutral_yellow]
|
||
:separator ""}}
|
||
{ :DiagnosticError { :provider (make-lsp-diagnostic-provider "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)))
|