1{ config, lib, pkgs, ... }:
2
3let
4 cfg = config.programs.yazi;
5
6 settingsFormat = pkgs.formats.toml { };
7
8 names = [ "yazi" "theme" "keymap" ];
9in
10{
11 options.programs.yazi = {
12 enable = lib.mkEnableOption (lib.mdDoc "yazi terminal file manager");
13
14 package = lib.mkPackageOptionMD pkgs "yazi" { };
15
16 settings = lib.mkOption {
17 type = with lib.types; submodule {
18 options = lib.listToAttrs (map
19 (name: lib.nameValuePair name (lib.mkOption {
20 inherit (settingsFormat) type;
21 default = { };
22 description = lib.mdDoc ''
23 Configuration included in `${name}.toml`.
24
25 See https://github.com/sxyazi/yazi/blob/v${cfg.package.version}/config/docs/${name}.md for documentation.
26 '';
27 }))
28 names);
29 };
30 default = { };
31 description = lib.mdDoc ''
32 Configuration included in `$YAZI_CONFIG_HOME`.
33 '';
34 };
35 };
36
37 config = lib.mkIf cfg.enable {
38 environment = {
39 systemPackages = [ cfg.package ];
40 variables.YAZI_CONFIG_HOME = "/etc/yazi/";
41 etc = lib.attrsets.mergeAttrsList (map
42 (name: lib.optionalAttrs (cfg.settings.${name} != { }) {
43 "yazi/${name}.toml".source = settingsFormat.generate "${name}.toml" cfg.settings.${name};
44 })
45 names);
46 };
47 };
48 meta = {
49 maintainers = with lib.maintainers; [ linsui ];
50 # The version of the package is used in the doc.
51 buildDocsInSandbox = false;
52 };
53}