mirror of
https://github.com/nmasur/dotfiles
synced 2024-12-27 08:44:52 +00:00
90 lines
2.9 KiB
Nix
90 lines
2.9 KiB
Nix
{
|
|
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}"
|
|
}
|
|
'')
|
|
];
|
|
};
|
|
}
|