Yazi: Difference between revisions
m Removed numbering |
Yazi has changed some of its syntax, which broke the advanced configuration. |
||
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'''. | |||
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 == | == Installation == | ||
Line 10: | Line 10: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== | ==== Using global configuration ==== | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
environment.systemPackages = [ | environment.systemPackages = [ | ||
Line 19: | Line 19: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== | ==== Using home configuration ==== | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
home.packages = [ | home.packages = [ | ||
Line 38: | Line 38: | ||
==== Advanced ==== | ==== Advanced ==== | ||
<syntaxhighlight lang="nix"> | |||
programs.yazi = { | programs.yazi = { | ||
enable = true; | enable = true; | ||
settings = { | settings = { | ||
manager = { | manager = { | ||
layout = [ | |||
1 | |||
4 | |||
3 | |||
]; | |||
sort_by = "natural"; | sort_by = "natural"; | ||
sort_sensitive = true; | |||
sort_reverse = false; | |||
sort_dir_first = true; | |||
linemode = "none"; | |||
show_hidden = true; | show_hidden = true; | ||
show_symlink = true; | show_symlink = true; | ||
Line 50: | Line 59: | ||
preview = { | preview = { | ||
image_filter = "lanczos3"; | image_filter = "lanczos3"; | ||
image_quality = | image_quality = 90; | ||
tab_size = 1; | |||
max_width = 600; | max_width = 600; | ||
max_height = 900; | max_height = 900; | ||
cache_dir = ""; | |||
ueberzug_scale = 1; | ueberzug_scale = 1; | ||
ueberzug_offset = [0 0 0 0]; | ueberzug_offset = [ | ||
0 | |||
0 | |||
0 | |||
0 | |||
]; | |||
}; | }; | ||
Line 62: | Line 78: | ||
bizarre_retry = 5; | bizarre_retry = 5; | ||
}; | }; | ||
}; | |||
} | |||
</syntaxhighlight> | |||
== Tips and Tricks == | |||
==== Location of options ==== | |||
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]. | |||
==== Bleeding edge ==== | |||
The upstream repository provides a flake so that Nix users can easily keep up with the bleeding edge.<ref>https://yazi-rs.github.io/docs/installation/#nix-flakes</ref><syntaxhighlight lang="nix"> | |||
inputs = { | |||
yazi.url = "github:sxyazi/yazi"; | |||
}; | |||
</syntaxhighlight>Afterwords, you can use the new package.<syntaxhighlight lang="nix"> | |||
# Global | |||
environment.systemPackages = [ yazi.packages.${pkgs.system}.default ]; | |||
# Home Manager | |||
home.packages = [ 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"> | |||
nix = { | |||
settings = { | |||
substitute = true; | |||
substituters = [ | |||
"https://yazi.cachix.org" | |||
]; | ]; | ||
trusted-public-keys = [ | |||
"yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k=" | |||
]; | ]; | ||
}; | }; | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | ==== Stylix integration ==== | ||
<syntaxhighlight lang="nix"> | |||
theme = with config.stylix.base16Scheme; { | theme = with config.stylix.base16Scheme; { | ||
filetype = { | filetype = { | ||
Line 254: | Line 139: | ||
}; | }; | ||
}; | }; | ||
</syntaxhighlight>Stylix can | </syntaxhighlight>Stylix can do it automatically for you if the following option is set:<syntaxhighlight lang="nix"> | ||
stylix.targets.yazi.enable = true; | stylix.targets.yazi.enable = true; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== | ==== Key mapping ==== | ||
<syntaxhighlight lang="nix"> | |||
# Hyprland | |||
bind = [ | bind = [ | ||
"$mod, E, exec, kitty -e yazi" | "$mod, E, exec, kitty -e yazi" | ||
Line 268: | Line 154: | ||
== References == | == References == | ||
[[Category:Applications]] | [[Category:Applications]] | ||
[[Category:File Manager]] | [[Category:File Manager]] |
Revision as of 10:32, 7 September 2024
Yazi[1] 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.
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 MyNixOS.
Bleeding edge
The upstream repository provides a flake so that Nix users can easily keep up with the bleeding edge.[2]
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.[3]
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"
];