100 lines · 2.3 KB
#!/usr/bin/env bash

# Print the names of all public and private Charm repos.
getCharmRepos() {
    getRepos() {
        gh repo list charmbracelet --visibility="$1" --json name
    }

    getAllRepos() {
        printf '%s %s' "$(getRepos "public")" "$(getRepos "private")" | jq -s 'add'
    }

    getAllRepos |
        jq .[].name |
        tr -d '"' |
        sort
}

# Choose a Charm repo name with Gum.
pickCharmRepo() {
    getCharmRepos | gum filter --height=10 --header "$1"
}

# Interactively choose a Charm repo.
charm_clone() {
    local repo
    repo="$(pickCharmRepo "Clone which Charm™ repo?")"
    if [[ -z "$repo" ]]; then
        printf "Okay, never mind.\n"
        return 1
    fi
    git clone "git@github.com:charmbracelet/$repo" "$HOME/src/$repo"
}

# Interactively use "go get" against a Charm repo.
go_get_charm() {
    local repo
    repo="$(pickCharmRepo "Which Charm™ repo do you want to ‘go get?’")"
    if [[ -z "$repo" ]]; then
        printf "Okay, never mind.\n"