yazi: support plugins and flavors

This commit is contained in:
XYenon 2024-05-29 11:01:52 +08:00
parent a9b36cbe92
commit 04bc391a90
5 changed files with 64 additions and 8 deletions

View file

@ -40,17 +40,12 @@ let
} }
''; '';
in { in {
meta.maintainers = [ maintainers.xyenon ]; meta.maintainers = with maintainers; [ xyenon ];
options.programs.yazi = { options.programs.yazi = {
enable = mkEnableOption "yazi"; enable = mkEnableOption "yazi";
package = mkOption { package = mkPackageOption pkgs "yazi" { };
type = types.package;
default = pkgs.yazi;
defaultText = literalExpression "pkgs.yazi";
description = "Yazi package to install.";
};
enableBashIntegration = mkEnableOption "Bash integration"; enableBashIntegration = mkEnableOption "Bash integration";
@ -135,6 +130,48 @@ in {
for the full list of options for the full list of options
''; '';
}; };
initLua = mkOption {
type = with types; nullOr path;
default = null;
description = ''
The init.lua for Yazi itself.
'';
example = literalExpression "./init.lua";
};
plugins = mkOption {
type = with types; attrsOf (oneOf [ path package ]);
default = { };
description = ''
Lua plugins.
See https://yazi-rs.github.io/docs/plugins/overview/ for documentation.
'';
example = literalExpression ''
{
foo = ./foo;
bar = pkgs.bar;
}
'';
};
flavors = mkOption {
type = with types; attrsOf (oneOf [ path package ]);
default = { };
description = ''
Pre-made themes.
See https://yazi-rs.github.io/docs/flavors/overview/ for documentation.
'';
example = literalExpression ''
{
foo = ./foo;
bar = pkgs.bar;
}
'';
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -160,6 +197,11 @@ in {
"yazi/theme.toml" = mkIf (cfg.theme != { }) { "yazi/theme.toml" = mkIf (cfg.theme != { }) {
source = tomlFormat.generate "yazi-theme" cfg.theme; source = tomlFormat.generate "yazi-theme" cfg.theme;
}; };
}; "yazi/init.lua" = mkIf (cfg.initLua != null) { source = cfg.initLua; };
} // (mapAttrs'
(name: value: nameValuePair "yazi/plugins/${name}" { source = value; })
cfg.plugins) // (mapAttrs'
(name: value: nameValuePair "yazi/flavors/${name}" { source = value; })
cfg.flavors);
}; };
} }

View file

@ -0,0 +1 @@
-- This is a flavor.

View file

@ -0,0 +1,3 @@
require("zoxide"):setup {
update_db = true,
}

View file

@ -0,0 +1 @@
-- This is a plugin.

View file

@ -69,6 +69,9 @@
]; ];
}; };
}; };
initLua = ./init.lua;
plugins = { "test.yazi" = ./plugin; };
flavors = { "test.yazi" = ./flavor; };
}; };
test.stubs.yazi = { }; test.stubs.yazi = { };
@ -80,5 +83,11 @@
${./settings-expected.toml} ${./settings-expected.toml}
assertFileContent home-files/.config/yazi/theme.toml \ assertFileContent home-files/.config/yazi/theme.toml \
${./theme-expected.toml} ${./theme-expected.toml}
assertFileContent home-files/.config/yazi/init.lua \
${./init.lua}
assertFileContent home-files/.config/yazi/plugins/test.yazi/init.lua \
${./plugin/init.lua}
assertFileContent home-files/.config/yazi/flavors/test.yazi/init.lua \
${./flavor/init.lua}
''; '';
} }