diff options
Diffstat (limited to 'modules/home/herdr.nix')
| -rw-r--r-- | modules/home/herdr.nix | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/modules/home/herdr.nix b/modules/home/herdr.nix index 886f24c..55e6b7a 100644 --- a/modules/home/herdr.nix +++ b/modules/home/herdr.nix @@ -1,18 +1,33 @@ { pkgs, ... }: let + # ghq lays repos out as ~/ghq/<host>/<org>/<repo>. Spaces are labelled + # "<org>/<repo>", elided to fit herdr's narrow sidebar: an org over 4 chars + # keeps its first 4 ("simenandre.no" -> "sime.."), a repo over 12 keeps its + # first and last 5 ("frontend-panel" -> "front..panel"). + spaceLabel = '' + space_label() { + local path org repo parent + path=''${1%/} + repo=''${path##*/} + parent=''${path%/*} + org=''${parent##*/} + if [ ''${#org} -gt 4 ]; then org="''${org:0:4}.."; fi + if [ ''${#repo} -gt 12 ]; then repo="''${repo:0:5}..''${repo: -5}"; fi + printf '%s/%s\n' "$org" "$repo" + } + ''; + # twm replacement: fuzzy-pick a repo under ~/ghq and open it as a herdr # workspace, reusing an already-open workspace with the same name. repoPicker = pkgs.writeShellApplication { name = "herdr-repo-picker"; runtimeInputs = [ pkgs.ghq pkgs.fzf pkgs.jq pkgs.herdr ]; - text = '' + text = spaceLabel + '' sel=$(ghq list -p | fzf --prompt 'repo ❯ ' --reverse) || exit 0 [ -n "''${sel:-}" ] || exit 0 - # ghq lays repos out as ~/ghq/<host>/<org>/<repo>; label the space <org>/<repo>. - parent=''${sel%/*} - label="''${parent##*/}/''${sel##*/}" + label=$(space_label "$sel") existing=$(herdr workspace list \ | jq -r --arg l "$label" '.result.workspaces[] | select(.label == $l) | .workspace_id' \ | head -n1) @@ -29,7 +44,7 @@ let repoGet = pkgs.writeShellApplication { name = "herdr-repo-get"; runtimeInputs = [ pkgs.ghq pkgs.herdr ]; - text = '' + text = spaceLabel + '' read -r -p 'ghq get ❯ ' q || exit 0 [ -n "''${q:-}" ] || exit 0 @@ -41,8 +56,7 @@ let [ -n "$dir" ] || dir=$(ghq list -p "$q" | head -n1) [ -n "$dir" ] || exit 0 - parent=''${dir%/*} - label="''${parent##*/}/''${dir##*/}" + label=$(space_label "$dir") herdr workspace create --cwd "$dir" --label "$label" --focus >/dev/null ''; }; |
