diff --git a/lib/icons/default.nix b/lib/icons/default.nix new file mode 100644 index 0000000..561c7ad --- /dev/null +++ b/lib/icons/default.nix @@ -0,0 +1,10 @@ +_: { + icons = { + diagnostics = { + error = " "; + warn = " "; + hint = " "; + info = " "; + }; + }; +} diff --git a/modules/nixvim/plugins/ui/bufferline/default.nix b/modules/nixvim/plugins/ui/bufferline/default.nix new file mode 100644 index 0000000..a8dd0f5 --- /dev/null +++ b/modules/nixvim/plugins/ui/bufferline/default.nix @@ -0,0 +1,98 @@ +{ + lib, + helpers, + ... +}: let + inherit (lib) flatten mapAttrsToList map; + inherit (lib.marleyvim) icons keys autocmds; + inherit (helpers) mkRaw; +in { + plugins.bufferline = { + enable = true; + + settings = { + options = { + close_command.__raw = "function(n) Snacks.bufdelete(n) end"; + right_mouse_command.__raw = "function(n) Snacks.bufdelete(n) end"; + + diagnostics = "nvim_lsp"; + diagnostics_indicator.__raw = + # lua + '' + function(_, _, diag) + local ret = (diag.error and "${icons.diagnostics.error}" .. diag.error .. " " or "") + .. (diag.warning and "${icons.diagnostics.warn}" .. diag.warning or "") + return vim.trim(ret) + end + ''; + + always_show_bufferline = true; + + offsets = [ + { + filetype = "neo-tree"; + text = "Explorer"; + highlight = "Directory"; + text_align = "left"; + } + ]; + + get_element_icon.__raw = '' + function(elem) + local icon, hl, _ = + require('mini.icons').get('filetype', elem.filetype) + return icon, hl + end + ''; + }; + }; + }; + + autoGroups.marleyos_bufferline.clear = true; + autoCmd = [ + (autocmds.mk' ["BufAdd" "BufDelete"] "bufferline" ( + mkRaw '' + function() + vim.schedule(function() + pcall(nvim_bufferline) + end) + end + '' + ) "Fix bufferline when restoring a session") + ]; + + keymaps = + [ + (keys.mk ["n"] "bp" "BufferLineTogglePin" "Toggle Pin") + (keys.mk ["n"] "bP" "BufferLineGroupClose ungrouped" + "Delete Non-Pinned Buffers") + (keys.mk ["n"] "br" "BufferLineCloseRight" + "Delete Buffers to the Right") + (keys.mk ["n"] "bl" "BufferLineCloseLeft" + "Delete Buffers to the Left") + (keys.mk ["n"] "" "BufferLineCyclePrev" "Prev Buffer") + (keys.mk ["n"] "" "BufferLineCycleNext" "Next Buffer") + ] + ++ (flatten (mapAttrsToList ( + a: ks: + map (k: keys.mk ["n"] k "BufferLineCycle${a}" "${a} Buffer") ks + ) { + Prev = ["" "[b"]; + Next = ["" "]b"]; + })) + ++ ( + mapAttrsToList ( + a: k: let + befAft = + if (a == "Prev") + then "After" + else "Before"; + in + keys.mk ["n"] "${k}B" "BufferLineMove${a}" + "Move Buffer ${befAft} ${a}" + ) { + Prev = "["; + After = "]"; + } + ); +} diff --git a/modules/nixvim/plugins/ui/mini.icons/default.nix b/modules/nixvim/plugins/ui/mini.icons/default.nix new file mode 100644 index 0000000..42d14f0 --- /dev/null +++ b/modules/nixvim/plugins/ui/mini.icons/default.nix @@ -0,0 +1,8 @@ +_: { + plugins.mini = { + enable = true; + + mockDevIcons = true; + modules.icons = {}; + }; +}