# yaziline.yazi

Simple lualine-like status line for yazi.

Read more about features and configuration [here](#features).

> ⚠️ **Note**:
> If you experience any issues after updating, please refer to the latest release notes. This repository is continuously synced with the upstream Yazi source code, which is actively maintained and frequently updated.

![preview](https://github.com/llanosrocas/yaziline.yazi/blob/master/.github/images/preview.png)

## Requirements

- yazi version >= [25.4.8](https://github.com/sxyazi/yazi/releases/tag/v25.4.8)
- Font with symbol support. For example [Nerd Fonts](https://www.nerdfonts.com/).

## Installation

```sh
ya pack -a llanosrocas/yaziline
```

Or manually copy `init.lua` to the `~/.config/yazi/plugins/yaziline.yazi/init.lua`

## Usage

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

```lua
require("yaziline"):setup()
```

Optionally, configure line:

```lua
require("yaziline"):setup({
  color = "#98c379", -- main theme color
  default_files_color = "darkgray", -- color of the file counter when it's inactive
  selected_files_color = "white",
  yanked_files_color = "green",
  cut_files_color = "red",

  separator_style = "angly", -- "angly" | "curvy" | "liney" | "empty"
  separator_open = "",
  separator_close = "",
  separator_open_thin = "",
  separator_close_thin = "",
  separator_head = "",
  separator_tail = "",

  select_symbol = "",
  yank_symbol = "󰆐",

  filename_max_length = 24, -- truncate when filename > 24
  filename_truncate_length = 6, -- leave 6 chars on both sides
  filename_truncate_separator = "..." -- the separator of the truncated filename
})
```

## Features

### Preconfigured separators

Choose your style:

- `angly`
  ![angly](https://github.com/llanosrocas/yaziline.yazi/blob/master/.github/images/angly.png)
- `curvy`
  ![curvy](https://github.com/llanosrocas/yaziline.yazi/blob/master/.github/images/curvy.png)
- `liney`
  ![liney](https://github.com/llanosrocas/yaziline.yazi/blob/master/.github/images/liney.png)
- `empty`
  ![empty](https://github.com/llanosrocas/yaziline.yazi/blob/master/.github/images/empty.png)

### Separator customization

You can provide your own symbols for separators combined with preconfigured separators. For example:

```lua
require("yaziline"):setup({
  -- Optinal config
  separator_style = "angly", -- preconfigured style
  separator_open = "", -- instead of 
  separator_close = "", -- instead of 
  separator_open_thin = "", -- change to anything
  separator_close_thin = "", -- change to anything
  separator_head = "", -- to match the style
  separator_tail = "" -- to match the style
})
```

![empty](https://github.com/llanosrocas/yaziline.yazi/blob/master/.github/images/separator-combination.png)

_You can find more symbols [here](https://www.nerdfonts.com/cheat-sheet)_

### File actions icons

You can provide your own symbols for `select` and `yank`. For example:

```lua
require("yaziline"):setup({
  -- Optinal config
  select_symbol = "", -- "S" by default
  yank_symbol = "󰆐" -- "Y" by default
})
```

![empty](https://github.com/llanosrocas/yaziline.yazi/blob/master/.github/images/file-actions.png)

_You can find more symbols [here](https://www.nerdfonts.com/cheat-sheet)_

### Colors and font weight

By default yaziline uses color values from your `theme.toml` (or flavor) but you can set custom colors in the `init.lua`:

```lua
require("yaziline"):setup({
  color = "#98c379",
  default_files_color = "darkgray",
  selected_files_color = "white",
  yanked_files_color = "green",
  cut_files_color = "red",
})
```

For example, here is how my line looks like:

![preview-2](https://github.com/llanosrocas/yaziline.yazi/blob/master/.github/images/preview-2.png)

### Selected and Yanked Counter

Displays the number of selected ('S') and yanked ('Y') files on the left. If files are cut, the yank counter changes color, since its `yank --cut` under the hood.

### Truncated filename

Displays the truncated filename on the left, which is useful for smaller windows or long filenames. By default, it's 24 characters with trimming to 12 (6 + 6). Adjust in the `setup`.

```lua
require("yaziline"):setup({
  filename_max_length = 24, -- truncate when filename > 24
  filename_truncate_length = 6, -- leave 6 chars on both sides
  filename_truncate_separator = "..." -- the separator of the truncated filename
})
```

### ISO Date for 'Modified'

On the right, you'll find the date and time the file was modified, formatted in an [ISO](https://en.wikipedia.org/wiki/ISO_8601)-like string for universal date representation. Adjust in the `Status:date` function.

## Credits

- [yazi source code](https://github.com/sxyazi/yazi)
- [yatline.yazi](https://github.com/imsi32/yatline.yazi/tree/main)
- [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim)
