{ config, pkgs, lib, ... }: { unfreePackages = [ "gh-copilot" ]; home-manager.users.${config.user} = { programs.gh = lib.mkIf config.home-manager.users.${config.user}.programs.git.enable { enable = true; gitCredentialHelper.enable = true; settings.git_protocol = "https"; extensions = [ pkgs.gh-collaborators pkgs.gh-dash pkgs.gh-copilot ]; }; programs.fish = lib.mkIf config.home-manager.users.${config.user}.programs.gh.enable { shellAbbrs = { ghr = "gh repo view -w"; gha = "gh run list | head -1 | awk '{ print \\$\\(NF-2\\) }' | xargs gh run view"; grw = "gh run watch"; grf = "gh run view --log-failed"; grl = "gh run view --log"; ghpr = "gh pr create && sleep 3 && gh run watch"; # https://github.com/cli/cli/discussions/4067 prs = "gh search prs --state=open --review-requested=@me"; }; functions = { repos = { description = "Clone GitHub repositories"; argumentNames = "organization"; body = '' set directory (gh-repos $organization) and cd $directory ''; }; }; }; home.packages = [ (pkgs.writeShellScriptBin "gh-repos" '' case $1 in t2) organization="take-two" ;; d2c) organization="take-two-t2gp" ;; t2gp) organization="take-two-t2gp" ;; pd) organization="private-division" ;; dots) organization="playdots" ;; *) organization="nmasur" ;; esac selected=$(gh repo list "$organization" \ --limit 1000 \ --no-archived \ --json=name,description,isPrivate,updatedAt,primaryLanguage \ | jq -r '.[] | .name + "," + if .description == "" then "-" else .description |= gsub(","; " ") | .description end + "," + .updatedAt + "," + .primaryLanguage.name' \ | (echo "REPO,DESCRIPTION,UPDATED,LANGUAGE"; cat -) \ | column -s , -t \ | fzf \ --header-lines=1 \ --layout=reverse \ --height=100% \ --bind "ctrl-o:execute:gh repo view -w ''${organization}/{1}" \ --bind "shift-up:preview-half-page-up" \ --bind "shift-down:preview-half-page-down" \ --preview "GH_FORCE_TTY=49% gh repo view ''${organization}/{1} | glow -" \ --preview-window up ) [ -n "''${selected}" ] && { directory="$HOME/dev/work" if [ $organization = "nmasur" ]; then directory="$HOME/dev/personal"; fi repo=$(echo "''${selected}" | awk '{print $1}') repo_full="''${organization}/''${repo}" if [ ! -d "''${directory}/''${repo}" ]; then gh repo clone "$repo_full" "''${directory}/''${repo}" fi echo "''${directory}/''${repo}" } '') ]; }; }