Yazi: Difference between revisions
m Minor change for stylix integration |
m chill with the excessive boldface and add some external links for Yazi and Uberzug++. |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Yazi is a blazing-fast terminal file manager developed in Rust, | <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 [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 == | ||
==== | ==== Using nix-shell ==== | ||
<syntaxhighlight lang="bash" start="3"> | <syntaxhighlight lang="bash" start="3"> | ||
nix-shell -p yazi | nix-shell -p yazi | ||
</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 30: | Line 30: | ||
== Configuration == | == Configuration == | ||
==== | ==== Basic ==== | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
programs.yazi = { | programs.yazi = { | ||
Line 37: | Line 37: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== | ==== 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 {{nixos:option|programs.yazi.*}}. | |||
==== 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:File Manager]] | |||
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"
];