diff --git a/modules/programs/yazi.nix b/modules/programs/yazi.nix index 11f4e75cf11f..518178f9d76f 100644 --- a/modules/programs/yazi.nix +++ b/modules/programs/yazi.nix @@ -39,6 +39,21 @@ let rm -fp $tmp } ''; + + xonshIntegration = '' + def __yazi_init(): + def yy(args): + tmp = $(mktemp -t "yazi-cwd.XXXXX").strip() + $[yazi @(args) @(f"--cwd-file={tmp}")] + cwd = fp"{tmp}".read_text() + if cwd != "" and cwd != $PWD: + xonsh.dirstack.cd((cwd,)) + $[rm -f -- @(tmp)] + + aliases['yy'] = yy + __yazi_init() + del __yazi_init + ''; in { meta.maintainers = with maintainers; [ xyenon ]; @@ -55,6 +70,8 @@ in { enableNushellIntegration = mkEnableOption "Nushell integration"; + enableXonshIntegration = mkEnableOption "Xonsh integration"; + keymap = mkOption { type = tomlFormat.type; default = { }; @@ -187,6 +204,8 @@ in { programs.nushell.extraConfig = mkIf cfg.enableNushellIntegration nushellIntegration; + programs.xonsh.xonshrc = mkIf cfg.enableXonshIntegration xonshIntegration; + xdg.configFile = { "yazi/keymap.toml" = mkIf (cfg.keymap != { }) { source = tomlFormat.generate "yazi-keymap" cfg.keymap; diff --git a/tests/modules/programs/yazi/default.nix b/tests/modules/programs/yazi/default.nix index 09d52ac3df5c..820042a5cc21 100644 --- a/tests/modules/programs/yazi/default.nix +++ b/tests/modules/programs/yazi/default.nix @@ -4,4 +4,5 @@ yazi-zsh-integration-enabled = ./zsh-integration-enabled.nix; yazi-fish-integration-enabled = ./fish-integration-enabled.nix; yazi-nushell-integration-enabled = ./nushell-integration-enabled.nix; + yazi-xonsh-integration-enabled = ./xonsh-integration-enabled.nix; } diff --git a/tests/modules/programs/yazi/xonsh-integration-enabled.nix b/tests/modules/programs/yazi/xonsh-integration-enabled.nix new file mode 100644 index 000000000000..313198140fe3 --- /dev/null +++ b/tests/modules/programs/yazi/xonsh-integration-enabled.nix @@ -0,0 +1,31 @@ +{ ... }: + +let + shellIntegration = '' + def __yazi_init(): + def ya(args): + tmp = $(mktemp -t "yazi-cwd.XXXXX") + $[yazi @(args) @(f"--cwd-file={tmp}")] + cwd = fp"{tmp}".read_text() + if cwd != "" and cwd != $PWD: + xonsh.dirstack.cd(cwd) + $[rm -f -- @(tmp)] + + aliases['ya'] = ya + __yazi_init() + del __yazi_init + ''; +in { + programs.xonsh.enable = true; + + programs.yazi = { + enable = true; + enableXonshIntegration = true; + }; + + test.stubs.yazi = { }; + + nmt.script = '' + assertFileContains home-files/.config/xonsh/rc.xsh '${shellIntegration}' + ''; +}