diff --git a/_sources/generated.nix b/_sources/generated.nix index 44376e15..d896266e 100644 --- a/_sources/generated.nix +++ b/_sources/generated.nix @@ -30,6 +30,17 @@ }; date = "2021-07-16"; }; + gh-pr-graph = { + pname = "gh-pr-graph"; + version = "v0.14.5"; + src = fetchFromGitHub { + owner = "orangain"; + repo = "gh-pr-graph"; + rev = "v0.14.5"; + fetchSubmodules = false; + sha256 = "sha256-kSbtyDA52fYvcT0hd6SZ/1E6lA6j+wbsXEGzLhUy5gg="; + }; + }; hydro = { pname = "hydro"; version = "f130b55ee3eaf099eccf588e2a62e5447068d120"; diff --git a/configs/.config/herdr/config.toml b/configs/.config/herdr/config.toml index e185aab6..aa0847eb 100644 --- a/configs/.config/herdr/config.toml +++ b/configs/.config/herdr/config.toml @@ -58,14 +58,16 @@ description = "open bottom (resource monitor) in popup" width = "90%" height = "90%" -# gh dash — PR / issue の一覧を差し込みで開く。 +# gh pr-graph — 自分が author / assignee / reviewer の PR を、base/head ブランチを +# たどった依存グラフとしてブラウザで開く。ローカル (127.0.0.1) にサーバを立てて +# ブラウザを起動し、Ctrl-C まで前面に居座るタイプなので popup ではなく pane で開く。 +# popup は session-modal でブラウザを見ている間ずっと herdr 側がブロックされるが、 +# pane なら他のペインを触りながらサーバを生かしておける (コマンド終了で pane も閉じる)。 [[keys.command]] key = "prefix+ctrl+p" -type = "popup" -command = "gh dash" -description = "open gh dash in popup" -width = "90%" -height = "90%" +type = "pane" +command = "gh pr-graph" +description = "open gh pr-graph (PR dependency graph) in a temporary pane" # scratch fish shell — 今のペインを汚さず 1 発コマンドを叩く用。 # exit で popup が閉じる。 diff --git a/home-manager/programs/gh/common.nix b/home-manager/programs/gh/common.nix new file mode 100644 index 00000000..39776534 --- /dev/null +++ b/home-manager/programs/gh/common.nix @@ -0,0 +1,22 @@ +# 全ホスト共通の gh 設定。 +# oberon は nixpkgs-stable (nixos-25.11) を使うため、ここには stable にも +# 存在するものだけを置く。unstable 限定の拡張は default.nix 側で足す。 +{ pkgs, ... }: +{ + programs.gh-prism.enable = true; + + programs.gh = { + enable = true; + extensions = [ + pkgs.gh-dash + pkgs.gh-poi + ]; + settings = { + git_protocol = "ssh"; + prompt = "enabled"; + aliases = { + co = ''!id="$(gh pr list -L100 | fzf | cut -f1)"; [ -n "$id" ] && gh pr checkout "$id"''; + }; + }; + }; +} diff --git a/home-manager/programs/gh/default.nix b/home-manager/programs/gh/default.nix index 30cb3577..fc0db472 100644 --- a/home-manager/programs/gh/default.nix +++ b/home-manager/programs/gh/default.nix @@ -1,20 +1,18 @@ -{ pkgs, ... }: +# darwin (nixpkgs unstable) 用の gh 設定。 +{ pkgs, sources, ... }: +let + gh-pr-graph = import ./gh-pr-graph.nix { inherit pkgs sources; }; +in { - programs.gh-prism.enable = true; + imports = [ ./common.nix ]; - programs.gh = { - enable = true; - extensions = with pkgs; [ - gh-dash - gh-poi - gh-stack - ]; - settings = { - git_protocol = "ssh"; - prompt = "enabled"; - aliases = { - co = ''!id="$(gh pr list -L100 | fzf | cut -f1)"; [ -n "$id" ] && gh pr checkout "$id"''; - }; - }; - }; + # ここに置く拡張が oberon に載らないのは意図的: + # - gh-stack は nixpkgs unstable にしか無い (nixos-25.11 には未収録)。 + # - gh-pr-graph はローカルサーバを立ててブラウザを開くツールなので、 + # ヘッドレスな oberon では使えない。 + # programs.gh.extensions は list なので common.nix の定義とマージされる。 + programs.gh.extensions = [ + pkgs.gh-stack + gh-pr-graph + ]; } diff --git a/home-manager/programs/gh/gh-pr-graph.nix b/home-manager/programs/gh/gh-pr-graph.nix new file mode 100644 index 00000000..3ba4d3f0 --- /dev/null +++ b/home-manager/programs/gh/gh-pr-graph.nix @@ -0,0 +1,14 @@ +# gh pr-graph — 自分が関わる PR を base/head ブランチ単位のグラフで一覧する gh 拡張。 +# nixpkgs 未収録なので nvfetcher + buildGoModule で自前ビルドする (tcmux と同じ形)。 +# home-manager の programs.gh.extensions は pname をそのまま +# ~/.local/share/gh/extensions/ に link farm するため、 +# pname と $out/bin のバイナリ名を両方 "gh-pr-graph" に揃える必要がある。 +{ pkgs, sources }: +pkgs.buildGoModule { + pname = "gh-pr-graph"; + inherit (sources.gh-pr-graph) version src; + # go.mod に require が無い (依存ゼロ) ため vendoring 不要。 + vendorHash = null; + subPackages = [ "cmd/gh-pr-graph" ]; + ldflags = [ "-X main.version=${sources.gh-pr-graph.version}" ]; +} diff --git a/home-manager/programs/gh/server.nix b/home-manager/programs/gh/server.nix new file mode 100644 index 00000000..fa2681a9 --- /dev/null +++ b/home-manager/programs/gh/server.nix @@ -0,0 +1,5 @@ +# oberon (サーバー) 用の gh 設定。common.nix だけで完結する。 +{ ... }: +{ + imports = [ ./common.nix ]; +} diff --git a/hosts/oberon/home.nix b/hosts/oberon/home.nix index 9ca9ac07..97de2b4c 100644 --- a/hosts/oberon/home.nix +++ b/hosts/oberon/home.nix @@ -21,7 +21,7 @@ in ../../home-manager/programs/direnv ../../home-manager/programs/fish/server.nix ../../home-manager/programs/fzf - ../../home-manager/programs/gh + ../../home-manager/programs/gh/server.nix ../../home-manager/programs/git/server.nix ../../home-manager/programs/htop ../../home-manager/programs/hunk diff --git a/nvfetcher.toml b/nvfetcher.toml index ee0261f1..d8e24040 100644 --- a/nvfetcher.toml +++ b/nvfetcher.toml @@ -25,3 +25,7 @@ fetch.github = "k1LoW/tcmux" src.git = "https://github.com/mattpocock/skills" src.branch = "main" fetch.github = "mattpocock/skills" + +[gh-pr-graph] +src.github = "orangain/gh-pr-graph" +fetch.github = "orangain/gh-pr-graph"