Skip to content

Rolv-Apneseth/starship.yazi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

starship.yazi

Starship prompt plugin for Yazi

starship.mp4

Requirements

Installation

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.

Config

Here is an example with all available config options:

require("starship"):setup({
    -- Hide flags (such as filter, find and search). This is recommended for starship themes which
    -- are intended to go across the entire width of the terminal.
    hide_flags = false, -- Default: false
    -- Whether to place flags after the starship prompt. False means the flags will be placed before the prompt.
    flags_after_prompt = true, -- Default: true
    -- Custom starship configuration file to use
    config_file = "~/.config/starship_full.toml", -- Default: nil
})

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.Bar.TOP):area(ui.Rect.default)
        end

        return ui.Bar(ui.Bar.TOP)
            :area(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),
            }))
            :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 {}, {
        ui.Border(ui.Border.ALL):area(self._area):type(ui.Border.ROUNDED):style(style),
        ui.Bar(ui.Bar.RIGHT):area(self._chunks[1]):style(style),
        ui.Bar(ui.Bar.LEFT):area(self._chunks[1]):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[2].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