-- ── plugins/ui.lua ──────────────────────────────────────────────────────────── return { -- ── Colorscheme: Kanagawa Wave (desktop) / habamax (mobile) ─────────────── -- kanagawa requires termguicolors which Termius mangles as purple. -- habamax is built-in, renders cleanly in 256-color (retrobox caused -- redraw corruption on Termius, habamax does not). { "rebelot/kanagawa.nvim", priority = 1000, config = function() if vim.env.MOBILE == "1" then vim.cmd("colorscheme habamax") return end require("kanagawa").setup({ compile = true, undercurl = true, theme = "wave", background = { dark = "wave", light = "lotus", }, colors = { theme = { wave = { ui = { bg_gutter = "none", }, }, }, }, overrides = function(colors) local theme = colors.theme return { Pmenu = { fg = theme.ui.shade0, bg = theme.ui.bg_p1 }, PmenuSbar = { bg = theme.ui.bg_m1 }, PmenuThumb = { bg = theme.ui.bg_p2 }, CursorLine = { bg = theme.ui.bg_p1 }, } end, }) vim.cmd("colorscheme kanagawa-wave") end, }, -- ── Statusline: lualine ─────────────────────────────────────────────────── -- theme = "auto" derives from active colorscheme — works for both -- kanagawa (desktop) and habamax (mobile) without hex colors { "nvim-lualine/lualine.nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, config = function() require("lualine").setup({ options = { theme = "auto", component_separators = { left = "│", right = "│" }, section_separators = { left = "", right = "" }, globalstatus = true, }, sections = { lualine_a = { { "mode", icon = "" } }, lualine_b = { { "branch", icon = "" }, { "diff", symbols = { added = " ", modified = " ", removed = " " }, }, }, lualine_c = { { "filename", path = 1, symbols = { modified = "●", readonly = "" } }, }, lualine_x = { { "diagnostics", symbols = { error = " ", warn = " ", info = " ", hint = "󰌵 " }, }, "filetype", }, lualine_y = { "progress" }, lualine_z = { { "location", icon = "" } }, }, }) end, }, -- ── Bufferline (desktop only) ───────────────────────────────────────────── -- Renders truecolor backgrounds for tabs which Termius shows as purple bars. { "akinsho/bufferline.nvim", enabled = function() return vim.env.MOBILE ~= "1" end, dependencies = { "nvim-tree/nvim-web-devicons" }, config = function() require("bufferline").setup({ options = { mode = "buffers", separator_style = "slant", show_close_icon = false, show_buffer_close_icons = false, diagnostics = "nvim_lsp", diagnostics_indicator = function(_, _, diag) local icons = { error = " ", warning = " " } local ret = (diag.error and icons.error .. diag.error .. " " or "") .. (diag.warning and icons.warning .. diag.warning or "") return vim.trim(ret) end, offsets = { { filetype = "oil", text = "File Explorer", separator = true }, }, }, }) end, }, -- ── File explorer: oil.nvim ─────────────────────────────────────────────── -- Edit the filesystem like a buffer. Very Arch: does one thing, perfectly. { "stevearc/oil.nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, config = function() require("oil").setup({ default_file_explorer = true, columns = { "icon", "permissions", "size", "mtime", }, view_options = { show_hidden = true, }, keymaps = { [""] = false, -- don't hijack window nav [""] = false, ["q"] = "actions.close", }, }) end, }, -- ── Fuzzy finder: Telescope ─────────────────────────────────────────────── { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim", -- Native FZF sorter — faster than the lua one { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, }, config = function() local telescope = require("telescope") local actions = require("telescope.actions") telescope.setup({ defaults = { prompt_prefix = "❯ ", selection_caret = "▶ ", -- Kanagawa-inspired layout layout_strategy = "horizontal", layout_config = { prompt_position = "top", width = 0.9 }, sorting_strategy = "ascending", mappings = { i = { [""] = actions.close, [""] = actions.move_selection_next, [""] = actions.move_selection_previous, }, }, }, }) telescope.load_extension("fzf") end, }, -- ── Which-key ───────────────────────────────────────────────────────────── { "folke/which-key.nvim", event = "VeryLazy", config = function() require("which-key").setup({ preset = "modern", delay = 400, icons = { separator = "→" }, }) end, }, -- ── Git signs in gutter ─────────────────────────────────────────────────── { "lewis6991/gitsigns.nvim", config = function() require("gitsigns").setup({ signs = { add = { text = "▎" }, change = { text = "▎" }, delete = { text = "" }, topdelete = { text = "" }, changedelete = { text = "▎" }, untracked = { text = "▎" }, }, on_attach = function(buf) local gs = require("gitsigns") local m = function(k, fn, d) vim.keymap.set("n", k, fn, { buffer = buf, desc = d }) end m("]c", gs.next_hunk, "Next hunk") m("[c", gs.prev_hunk, "Prev hunk") m("hs", gs.stage_hunk, "Stage hunk") m("hr", gs.reset_hunk, "Reset hunk") m("hp", gs.preview_hunk, "Preview hunk") m("hb", gs.blame_line, "Blame line") end, }) end, }, -- ── Indent guides ───────────────────────────────────────────────────────── { "lukas-reineke/indent-blankline.nvim", main = "ibl", config = function() require("ibl").setup({ indent = { char = "│" }, scope = { char = "│" }, }) -- Link to existing highlight groups instead of hex (mobile-safe) vim.cmd("hi! link IblIndent Comment") vim.cmd("hi! link IblScope LineNr") end, }, -- ── Dashboard ───────────────────────────────────────────────────────────── { "goolord/alpha-nvim", event = "VimEnter", config = function() local alpha = require("alpha") local dashboard = require("alpha.themes.dashboard") -- Mobile-friendly ASCII (heavy blocks render as red bars in Termius) dashboard.section.header.val = { " ", " ┌─┐┬─┐┌─┐┬ ┬ ┌┬┐┌─┐┬ ┬ ", " ├─┤├┬┘│ ├─┤───│││├┤ └┐┌┘ ", " ┴ ┴┴└─└─┘┴ ┴ ─┴┘└─┘ └┘ ", " ", " riced neovim ide · arch linux · v1.7 ", } dashboard.section.buttons.val = { dashboard.button("f", " Find file", "Telescope find_files"), dashboard.button("r", " Recent files", "Telescope oldfiles"), dashboard.button("g", " Live grep", "Telescope live_grep"), dashboard.button("e", " Explorer", "Oil"), dashboard.button("l", " Lazy", "Lazy"), dashboard.button("q", " Quit", "qa"), } dashboard.section.header.opts.hl = "Comment" dashboard.section.footer.opts.hl = "NonText" alpha.setup(dashboard.opts) end, }, -- ── Smooth scrolling ────────────────────────────────────────────────────── { "karb94/neoscroll.nvim", config = function() require("neoscroll").setup({ mappings = { "","","","" } }) end, }, -- ── Color previews inline (desktop only) ────────────────────────────────── -- Renders hex as RGB which Termius mangles. Skip on mobile. { "NvChad/nvim-colorizer.lua", enabled = function() return vim.env.MOBILE ~= "1" end, config = function() require("colorizer").setup({ "*" }, { mode = "virtualtext" }) end, }, -- Web devicons (used everywhere) { "nvim-tree/nvim-web-devicons", lazy = true }, }