diff --git a/modules/home/helix/home-helix-keys.ulu.nix b/modules/home/helix/home-helix-keys.ulu.nix index 713fe2a..7c59552 100644 --- a/modules/home/helix/home-helix-keys.ulu.nix +++ b/modules/home/helix/home-helix-keys.ulu.nix @@ -3,8 +3,8 @@ flake.homeModules.home-helix-keys = { ... }: let - float = cmd: ":sh zellij run --floating --close-on-exit -- ${cmd}"; - floatKeep = cmd: ":sh zellij run --floating -- ${cmd}"; + float = cmd: ":sh zellij run --floating --close-on-exit -- ${cmd} | ignore"; + floatKeep = cmd: ":sh zellij run --floating -- ${cmd} | ignore"; in { programs.helix.settings.keys = { diff --git a/modules/home/helix/home-helix-languages.ulu.nix b/modules/home/helix/home-helix-languages.ulu.nix index 33dc357..442355b 100644 --- a/modules/home/helix/home-helix-languages.ulu.nix +++ b/modules/home/helix/home-helix-languages.ulu.nix @@ -283,7 +283,6 @@ }; } { - # Written every time `jj describe`/`jj commit` opens $EDITOR. name = "jjdescription"; rulers = [ 51 diff --git a/modules/home/helix/home-helix-sidebar.ulu.nix b/modules/home/helix/home-helix-sidebar.ulu.nix index 48a409a..972c7cb 100644 --- a/modules/home/helix/home-helix-sidebar.ulu.nix +++ b/modules/home/helix/home-helix-sidebar.ulu.nix @@ -3,44 +3,78 @@ flake.homeModules.home-helix-sidebar = { config, pkgs, ... }: let + open = pkgs.writeShellApplication { + name = "hx-open"; + runtimeInputs = [ + config.programs.zellij.finalPackage + pkgs.gnused + ]; + text = '' + if [ "$#" -eq 0 ]; then + exit 0 + fi + quote() { + printf "'%s'" "$(printf '%s' "$1" | sed "s/'/&&/g")" + } + zellij action move-focus right >/dev/null 2>&1 || true + + if [ "$#" -eq 1 ] && [ -d "$1" ]; then + command=":cd $(quote "$1")" + else + args="" + for path in "$@"; do + args="$args $(quote "$path")" + done + command=":open$args" + fi + + zellij action write 27 >/dev/null 2>&1 + zellij action write-chars "$command" >/dev/null 2>&1 + zellij action write 13 >/dev/null 2>&1 + ''; + }; + sidebarConfig = pkgs.writeTextDir "yazi.toml" '' [mgr] - ratio = [ 0, 1, 0 ] + ratio = [ 1, 1, 2 ] show_hidden = false - show_symlink = false - linemode = "none" + show_symlink = true + linemode = "size" scrolloff = 4 + sort_by = "natural" + sort_dir_first = true + + [[plugin.prepend_fetchers]] + url = "*" + run = "git" + group = "git" + + [[plugin.prepend_fetchers]] + url = "*/" + run = "git" + group = "git" + + [opener] + edit = [ + { run = '$EDITOR "$@"', block = false, for = "unix" }, + ] ''; sidebar = pkgs.writeShellApplication { name = "hx-sidebar"; runtimeInputs = [ pkgs.yazi - config.programs.zellij.finalPackage - pkgs.coreutils + pkgs.git ]; text = '' cd "''${1:-.}" export YAZI_CONFIG_HOME=${sidebarConfig} + export EDITOR=${open}/bin/hx-open + export VISUAL="$EDITOR" - marker="''${XDG_RUNTIME_DIR:-/tmp}/hx-sidebar.''${ZELLIJ_SESSION_NAME:-none}" - chooser=$(mktemp -t hx-sidebar.XXXXXX) - trap 'rm -f "$chooser" "$marker"' EXIT - echo $$ > "$marker" - - while true; do - : > "$chooser" - yazi . --chooser-file="$chooser" - - picked=$(head -n 1 "$chooser") - [ -n "$picked" ] || break - - zellij action move-focus right - zellij action write 27 - zellij action write-chars ":open '$picked'" - zellij action write 13 - done + echo $$ > "''${XDG_RUNTIME_DIR:-/tmp}/hx-sidebar.''${ZELLIJ_SESSION_NAME:-none}" + exec yazi . ''; }; @@ -57,28 +91,35 @@ fi marker="''${XDG_RUNTIME_DIR:-/tmp}/hx-sidebar.''${ZELLIJ_SESSION_NAME}" - - if [ -e "$marker" ] && kill -0 "$(cat "$marker")" 2>/dev/null; then - zellij action toggle-fullscreen - else - rm -f "$marker" - - id=$(zellij action new-pane \ - --direction right \ - --name files \ - --close-on-exit \ - -- ${sidebar}/bin/hx-sidebar "$PWD") - - zellij action move-pane --pane-id "$id" left - for _ in 1 2 3 4 5; do - zellij action resize --pane-id "$id" decrease right - done + pid="" + if [ -r "$marker" ]; then + pid=$(cat "$marker") fi + + if [ -n "$pid" ] && [ "$(cat "/proc/$pid/comm" 2>/dev/null || true)" = "yazi" ]; then + kill "$pid" + rm -f "$marker" + exit 0 + fi + + rm -f "$marker" + + id=$(zellij action new-pane \ + --direction right \ + --name files \ + --close-on-exit \ + -- ${sidebar}/bin/hx-sidebar "$PWD") + + zellij action move-pane --pane-id "$id" left >/dev/null + for _ in 1 2 3 4 5; do + zellij action resize --pane-id "$id" decrease right >/dev/null 2>&1 + done ''; }; in { home.packages = [ + open sidebar toggle ];