Yazi: Difference between revisions

From NixOS Wiki
Layer-09 (talk | contribs)
Yazi has changed some of its syntax, which broke the advanced configuration.
m chill with the excessive boldface and add some external links for Yazi and Uberzug++.
 
Line 1: Line 1:
'''Yazi'''<ref>https://yazi-rs.github.io/</ref> is a '''blazing-fast''' terminal file manager developed in '''Rust''', using '''non-blocking async I/O''' for an efficient, user-friendly, and highly customizable experience. It features '''full asynchronous support''', distributing CPU tasks across multiple threads to maximize resource use and improve '''performance'''.
<strong>[https://yazi-rs.github.io Yazi]</strong> is a blazing-fast terminal file manager developed in Rust, using non-blocking async I/O for an efficient, user-friendly, and highly customizable file management experience. It features full asynchronous support, distributing CPU tasks across multiple threads to maximize resource use and improve performance.


It offers powerful '''async task scheduling''' with real-time progress updates, task cancellation, and internal prioritization. It supports multiple image protocols natively and integrates with '''Überzug++''' for broad terminal compatibility. Additionally, Yazi includes built-in '''code highlighting''' and '''image decoding''' functionalities, along with a '''pre-loading''' mechanism to speed up file loading processes.
It offers powerful async task scheduling with real-time progress updates, task cancellation, and internal prioritization. It supports multiple image protocols natively and integrates with [https://github.com/jstkdng/ueberzugpp Überzug++] for broad terminal compatibility. Additionally, Yazi includes built-in code highlighting and image decoding functionalities, along with a pre-loading mechanism to speed up file loading processes.


== Installation ==
== Installation ==
Line 88: Line 88:
The home manager options are defined in the following [https://nix-community.github.io/home-manager/options.xhtml#opt-programs.yazi.enable Home Manager Options Manual].
The home manager options are defined in the following [https://nix-community.github.io/home-manager/options.xhtml#opt-programs.yazi.enable Home Manager Options Manual].


The system-wide options are listed on [https://mynixos.com/search?q=yazi MyNixOS].
The system-wide options are listed on {{nixos:option|programs.yazi.*}}.


==== Bleeding edge ====
==== Bleeding edge ====

Latest revision as of 15:04, 30 October 2024

Yazi is a blazing-fast terminal file manager developed in Rust, using non-blocking async I/O for an efficient, user-friendly, and highly customizable file management experience. It features full asynchronous support, distributing CPU tasks across multiple threads to maximize resource use and improve performance.

It offers powerful async task scheduling with real-time progress updates, task cancellation, and internal prioritization. It supports multiple image protocols natively and integrates with Überzug++ for broad terminal compatibility. Additionally, Yazi includes built-in code highlighting and image decoding functionalities, along with a pre-loading mechanism to speed up file loading processes.

Installation

Using nix-shell

nix-shell -p yazi

Using global configuration

environment.systemPackages = [
  pkgs.yazi
];

After modifying your configuration, apply the changes by running:

sudo nixos-rebuild switch

Using home configuration

home.packages = [ 
  pkgs.yazi 
];

After updating your configuration, apply the changes by running:

home-manager switch

Configuration

Basic

programs.yazi = {
    enable = true;
};

Advanced

programs.yazi = {
  enable = true;
  settings = {
    manager = {
      layout = [
        1
        4
        3
      ];
      sort_by = "natural";
      sort_sensitive = true;
      sort_reverse = false;
      sort_dir_first = true;
      linemode = "none";
      show_hidden = true;
      show_symlink = true;
    };

    preview = {
      image_filter = "lanczos3";
      image_quality = 90;
      tab_size = 1;
      max_width = 600;
      max_height = 900;
      cache_dir = "";
      ueberzug_scale = 1;
      ueberzug_offset = [
        0
        0
        0
        0
      ];
    };

    tasks = {
      micro_workers = 5;
      macro_workers = 10;
      bizarre_retry = 5;
    };
  };
}

Tips and Tricks

Location of options

The home manager options are defined in the following Home Manager Options Manual.

The system-wide options are listed on programs.yazi.*.

Bleeding edge

The upstream repository provides a flake so that Nix users can easily keep up with the bleeding edge.[1]

inputs = {
    yazi.url = "github:sxyazi/yazi";
};

Afterwords, you can use the new package.

# Global
environment.systemPackages = [ yazi.packages.${pkgs.system}.default ];

# Home Manager
home.packages = [ yazi.packages.${pkgs.system}.default ];

Pre-built artifacts are served at https://yazi.cachix.org, so that Nix users don't have to build Yazi on their machine.[2]

nix = {
  settings = {
    substitute = true;
    substituters = [
      "https://yazi.cachix.org"
    ];
    trusted-public-keys = [
      "yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k="
    ];
  };
};

Stylix integration

theme = with config.stylix.base16Scheme; {
  filetype = {
    rules = [
      # Images
      {
        mime = "image/*";
        fg = "#${base0B}";
      }

      # Videos
      {
        mime = "video/*";
        fg = "#${base03}";
      }
      # Audio
      {
        mime = "audio/*";
        fg = "#${base08}";
      }
    ];
  };
};

Stylix can do it automatically for you if the following option is set:

stylix.targets.yazi.enable = true;

Key mapping

# Hyprland
bind = [
  "$mod, E, exec, kitty -e yazi"
];

Troubleshooting

References