nixos_dots/archive/yazi/plugins/starship.yazi
2024-12-12 19:12:55 +03:00
..
init.lua Initial Commit 2024-12-12 19:12:55 +03:00
LICENSE Initial Commit 2024-12-12 19:12:55 +03:00
README.md Initial Commit 2024-12-12 19:12:55 +03:00

starship.yazi

Starship prompt plugin for Yazi

https://github.com/Rolv-Apneseth/starship.yazi/assets/69486699/f7314687-5cb1-4d66-8d9d-cca960ba6716

Requirements

Package manager

ya pack -a Rolv-Apneseth/starship

Manual

Linux / MacOS

git clone https://github.com/Rolv-Apneseth/starship.yazi.git ~/.config/yazi/plugins/starship.yazi

Windows

git clone https://github.com/Rolv-Apneseth/starship.yazi.git %AppData%\yazi\config\plugins\starship.yazi

Usage

Add this to ~/.config/yazi/init.lua:

require("starship"):setup()

Make sure you have starship installed and in your PATH.

Extra

If you use a starship theme with a background colour, it might look a bit to cramped on just the one line Yazi gives the header by default. To fix this, you can add this to your init.lua:

Click to expand
local old_build = Tab.build
Tab.build = function(self, ...)
    local bar = function(c, x, y)
        if x <= 0 or x == self._area.w - 1 then
            return ui.Bar(ui.Rect.default, ui.Bar.TOP)
        end

        return ui.Bar(
            ui.Rect({
                x = x,
                y = math.max(0, y),
                w = ya.clamp(0, self._area.w - x, 1),
                h = math.min(1, self._area.h),
            }),
            ui.Bar.TOP
        ):symbol(c)
    end

    local c = self._chunks
    self._chunks = {
        c[1]:padding(ui.Padding.y(1)),
        c[2]:padding(ui.Padding(c[1].w > 0 and 0 or 1, c[3].w > 0 and 0 or 1, 1, 1)),
        c[3]:padding(ui.Padding.y(1)),
    }

    local style = THEME.manager.border_style
    self._base = ya.list_merge(self._base or {}, {
        -- Enable for full border
        --[[ ui.Border(self._area, ui.Border.ALL):type(ui.Border.ROUNDED):style(style), ]]
        ui.Bar(self._chunks[1], ui.Bar.RIGHT):style(style),
        ui.Bar(self._chunks[3], ui.Bar.LEFT):style(style),

        bar("┬", c[1].right - 1, c[1].y),
        bar("┴", c[1].right - 1, c[1].bottom - 1),
        bar("┬", c[2].right, c[2].y),
        bar("┴", c[2].right, c[1].bottom - 1),
    })

    old_build(self, ...)
end

Note

This works by overriding your Tab.build function so make sure this is the only place you're doing that in your config. For example, this would be incompatible with the full-border plugin

Thanks