Jump to content

Yazi: Difference between revisions

From NixOS Wiki
m Fixed a incorrect usage of the word "Afterwords", which is normally used to mean "epilogue" / "postsript" / "appendix", see https://en.wiktionary.org/wiki/afterword. The correct word in this context is "Afterwards", see https://en.wiktionary.org/wiki/afterwards.
Mention where to find yazi plugins.
(One intermediate revision by the same user not shown)
Line 11: Line 11:


==== Using global configuration ====
==== Using global configuration ====
<syntaxhighlight lang="text">
<syntaxhighlight lang="nix">programs.yazi = {
environment.systemPackages = [
  enable = true;
  pkgs.yazi
  # There are more options available:
];
  # https://search.nixos.org/options?channel=unstable&type=packages&query=programs.yazi
</syntaxhighlight>After modifying your configuration, apply the changes by running:<syntaxhighlight lang="bash">
};</syntaxhighlight>After modifying your configuration, apply the changes by running:<syntaxhighlight lang="bash">sudo nixos-rebuild switch</syntaxhighlight>
sudo nixos-rebuild switch
</syntaxhighlight>


==== Using home configuration ====
==== Using home configuration ====
<syntaxhighlight lang="text">
<syntaxhighlight lang="nix">programs.yazi = {
home.packages = [
  enable = true;
   pkgs.yazi  
   # There are more options available:
];
  # https://nix-community.github.io/home-manager/options.xhtml#opt-programs.yazi.enable
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="bash">
};</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="bash">
home-manager switch
home-manager switch
</syntaxhighlight>
</syntaxhighlight>


== Configuration ==
== Configuration ==
As mentioned above, there are both [https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=programs.yazi NixOS options] and [https://nix-community.github.io/home-manager/options.xhtml#opt-programs.yazi.enable home-manager options] for configuring Yazi.


==== Basic ====
==== Advanced Example ====
<syntaxhighlight lang="nix">
programs.yazi = {
    enable = true;
};
</syntaxhighlight>
 
==== Advanced ====
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
programs.yazi = {
programs.yazi = {
Line 89: Line 81:


The system-wide options are listed on {{nixos:option|programs.yazi.*}}.
The system-wide options are listed on {{nixos:option|programs.yazi.*}}.
==== Installing Plugins ====
Many yazi plugins are [https://search.nixos.org/packages?channel=unstable&from=0&size=50&buckets=%7B%22package_attr_set%22%3A%5B%22yaziPlugins%22%5D%2C%22package_license_set%22%3A%5B%5D%2C%22package_maintainers_set%22%3A%5B%5D%2C%22package_platforms%22%3A%5B%5D%7D&sort=relevance&type=packages&query=yaziPlugins packaged in nixpkgs].
There are some additional yazi plugins packaged in the [https://github.com/lordkekz/nix-yazi-plugins nix-yazi-plugins] flake. It also provides home-manager modules for configuring the plugins' options.


==== Bleeding edge ====
==== Bleeding edge ====
Line 98: Line 95:
# Global
# Global
environment.systemPackages = [ yazi.packages.${pkgs.system}.default ];
environment.systemPackages = [ yazi.packages.${pkgs.system}.default ];
# or, if you use the module
programs.yazi.package = yazi.packages.${pkgs.system}.default;


# Home Manager
# Home Manager
home.packages = [ yazi.packages.${pkgs.system}.default ];            
home.packages = [ yazi.packages.${pkgs.system}.default ];
# or, if you use the module
programs.yazi.package = yazi.packages.${pkgs.system}.default;
</syntaxhighlight>Pre-built artifacts are served at https://yazi.cachix.org, so that Nix users don't have to build Yazi on their machine.<ref>https://yazi-rs.github.io/docs/installation/#cache</ref><syntaxhighlight lang="nix">
</syntaxhighlight>Pre-built artifacts are served at https://yazi.cachix.org, so that Nix users don't have to build Yazi on their machine.<ref>https://yazi-rs.github.io/docs/installation/#cache</ref><syntaxhighlight lang="nix">
nix = {
nix = {

Revision as of 15:20, 4 May 2025

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

programs.yazi = {
  enable = true;
  # There are more options available:
  # https://search.nixos.org/options?channel=unstable&type=packages&query=programs.yazi
};

After modifying your configuration, apply the changes by running:

sudo nixos-rebuild switch

Using home configuration

programs.yazi = {
  enable = true;
  # There are more options available:
  # https://nix-community.github.io/home-manager/options.xhtml#opt-programs.yazi.enable
};

After updating your configuration, apply the changes by running:

home-manager switch

Configuration

As mentioned above, there are both NixOS options and home-manager options for configuring Yazi.

Advanced Example

programs.yazi = {
  enable = true;
  settings = {
    manager = {
      ratio = [
        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.*.

Installing Plugins

Many yazi plugins are packaged in nixpkgs.

There are some additional yazi plugins packaged in the nix-yazi-plugins flake. It also provides home-manager modules for configuring the plugins' options.

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";
};

Afterwards, you can use the new package.

# Global
environment.systemPackages = [ yazi.packages.${pkgs.system}.default ];
# or, if you use the module
programs.yazi.package = yazi.packages.${pkgs.system}.default;

# Home Manager
home.packages = [ yazi.packages.${pkgs.system}.default ];
# or, if you use the module
programs.yazi.package = 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