mirror of
				https://github.com/nmasur/dotfiles
				synced 2025-11-04 11:43:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  config,
 | 
						|
  pkgs,
 | 
						|
  lib,
 | 
						|
  ...
 | 
						|
}:
 | 
						|
 | 
						|
let
 | 
						|
  cfg = config.nmasur.presets.programs.github;
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
  options.nmasur.presets.programs.github.enable = lib.mkEnableOption "GitHub features";
 | 
						|
 | 
						|
  config = lib.mkIf cfg.enable {
 | 
						|
 | 
						|
    programs.gh = {
 | 
						|
      enable = true;
 | 
						|
      gitCredentialHelper.enable = true;
 | 
						|
      settings.git_protocol = "https";
 | 
						|
      extensions = [
 | 
						|
        pkgs.nmasur.gh-collaborators
 | 
						|
        pkgs.gh-dash
 | 
						|
        pkgs.gh-copilot
 | 
						|
      ];
 | 
						|
    };
 | 
						|
 | 
						|
    programs.fish = {
 | 
						|
      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" ;;
 | 
						|
            *) 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}"
 | 
						|
        }
 | 
						|
      '')
 | 
						|
    ];
 | 
						|
 | 
						|
  };
 | 
						|
}
 |