diff --git a/packages/devkit/default.nix b/packages/devkit/default.nix index c76c18f..92ad749 100644 --- a/packages/devkit/default.nix +++ b/packages/devkit/default.nix @@ -3,4 +3,5 @@ git = pkgs.callPackage ./git {}; lazygit = pkgs.callPackage ./lazygit {}; starship = pkgs.callPackage ./starship {}; + yazi = pkgs.callPackage ./yazi {}; } diff --git a/packages/devkit/yazi/default.nix b/packages/devkit/yazi/default.nix new file mode 100644 index 0000000..ab5a5a5 --- /dev/null +++ b/packages/devkit/yazi/default.nix @@ -0,0 +1,43 @@ +{ + symlinkJoin, + makeWrapper, + pkgs, + lib, + yazi ? pkgs.yazi, + paths ? [], +}: let + drv = symlinkJoin ({ + paths = yazi; + + nativeBuildInputs = [makeWrapper]; + + postBuild = '' + wrapProgram $out/bin/yazi ${ + if (builtins.length paths) > 0 + then "$PATH:${lib.makeBinPath paths}" + else "" + } --set-default YAZI_CONFIG_HOME ${./.} + ''; + } + // {inherit (yazi) name pname meta;}); +in + pkgs.stdenv.mkDerivation (rec { + name = drv.name; + pname = drv.pname; + + buildCommand = let + desktopEntry = pkgs.makeDesktopItem { + name = pname; + desktopName = name; + exec = "${lib.getExe drv}"; + terminal = true; + }; + in '' + mkdir -p $out/bin + cp ${lib.getExe drv} $out/bin + + mkdir -p $out/share/applications + cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop + ''; + } + // {inherit (yazi) meta;}) diff --git a/packages/devkit/yazi/init.lua b/packages/devkit/yazi/init.lua new file mode 100644 index 0000000..770dcc1 --- /dev/null +++ b/packages/devkit/yazi/init.lua @@ -0,0 +1,24 @@ +-- Add username and hostname in header +-- https://yazi-rs.github.io/docs/tips#username-hostname-in-header +Header:children_add(function() + if ya.target_family() ~= "unix" then + return "" + end + return ui.Span(ya.user_name() .. "@" .. ya.host_name() .. ":"):fg("blue") +end, 500, Header.LEFT) + +-- Add user and group owner of file in status line +-- https://yazi-rs.github.io/docs/tips#user-group-in-status +Status:children_add(function() + local h = cx.active.current.hovered + if h == nil or ya.target_family() ~= "unix" then + return "" + end + + return ui.Line({ + ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"), + ":", + ui.Span(ya.user_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"), + " ", + }) +end, 500, Status.RIGHT) diff --git a/packages/devkit/yazi/keymaps.toml b/packages/devkit/yazi/keymaps.toml new file mode 100644 index 0000000..e69de29 diff --git a/packages/devkit/yazi/theme.toml b/packages/devkit/yazi/theme.toml new file mode 100644 index 0000000..e69de29 diff --git a/packages/devkit/yazi/yazi.toml b/packages/devkit/yazi/yazi.toml new file mode 100644 index 0000000..d821e15 --- /dev/null +++ b/packages/devkit/yazi/yazi.toml @@ -0,0 +1,10 @@ +[manager] +show_hidden = true +show_symlink = true + +sort_by = "natural" +sort_dir_first = true +sort_sensitive = false +sort_translit = true + +linemode = "size"