A home/dotfiles/scripts/setup_mirrored_repo => home/dotfiles/scripts/setup_mirrored_repo +86 -0
@@ 0,0 1,86 @@
+#!/usr/bin/env bash
+
+set -euxo pipefail
+
+inspect_main_repo()
+{
+ # This script will print information about a repository.
+
+ if [[ $# -ne 1 ]]; then
+ echo "Usage: $0 repo"
+ exit 1
+ fi
+
+ repo="$1"
+
+ hut git show "$repo" | head -n1 | cut -d' ' -f2 | tr -d '()'
+}
+
+ensure_repo_created_forgejo()
+{
+ local repo
+ local instance
+ local repo_name
+ local visibility
+ local args
+
+ repo="$2"
+ host="$1"
+ repo_name=$(echo "$repo" | cut -d'/' -f2)
+ if ! fj --host "$host" repo view "$repo"; then
+ visibility=$(inspect_main_repo "~ruther/$repo_name")
+ args=""
+ if [[ $visibility == "private" ]]; then
+ args="$args -P"
+ fi
+
+ fj --host "$host" repo create "$repo_name" $args --description "Mirror of https://git.ditigal.xyz/~ruther/$repo_name"
+ else
+ echo "Repo already exists."
+ fi
+}
+
+ensure_repo_created_srht()
+{
+ local repo
+ local instance
+ local repo_name
+ local visibility
+
+ repo="$2"
+ instance="$1"
+ repo_name=$(echo "$repo" | cut -d'/' -f2)
+ if ! hut --instance "$instance" git show "~ruther/$repo_name"; then
+ visibility=$(inspect_main_repo "$repo")
+ hut --instance "$instance" git create "$repo_name" --visibility "$visibility" --description "Mirror of https://git.ditigal.xyz/$repo"
+ else
+ echo "Repo already exists."
+ fi
+}
+
+# Fails if not repo
+git status
+
+repo="$(git remote get-url origin | awk -F'/' '{ print $NF }')"
+
+# 1. Get url from remote origin (fetch url), the last part is name of repo
+# 2. Ensure created on sr.ht
+ensure_repo_created_srht "sr.ht" "$repo"
+
+# 3. Ensure created on codeberg
+# only if not --no-codeberg
+ensure_repo_created_forgejo "codeberg.org" "Rutherther/$repo"
+# 4. Remove and read push urls
+
+remotes=(
+ "git@codeberg.org:Rutherther/$repo"
+ "git@git.sr.ht:~ruther/$repo"
+ "git@ditigal.xyz:~ruther/$repo")
+
+set +e
+for remote in "${remotes[@]}"; do
+ git remote set-url --delete --push origin "$remote" 2>/dev/null
+ git remote set-url --add --push origin "$remote"
+done
+
+git remote show origin<
\ No newline at end of file
M home/home-configuration.scm => home/home-configuration.scm +33 -0
@@ 25,6 25,7 @@
(gnu packages man)
(guix git-download)
(guix build-system gnu)
+ (guix build-system copy)
((guix licenses) #:prefix license:)
(gnu packages fonts)
(gnu services)
@@ 57,6 58,33 @@
#~(job '(next-minute (range 0 60 5))
(string-append #$offlineimap "/bin/offlineimap")))
+(define (make-script-package name script-file dependencies)
+ (package
+ (name name)
+ (source script-file)
+ (build-system copy-build-system)
+ (version "0")
+ (inputs
+ (specifications->packages dependencies))
+ (arguments
+ (list
+ #:install-plan `'((,name ,(string-append "bin/" name)))
+ #:phases #~(modify-phases %standard-phases
+ (add-after 'unpack 'permissions
+ (lambda _
+ (chmod (string-append #$name) #o777)))
+ (add-after 'install 'wrap
+ (lambda _
+ (wrap-program (string-append #$output "/bin/" #$name)
+ `("PATH" ":" prefix
+ ,(map (lambda (folder) (string-append folder "/bin"))
+ '#$(map (lambda (pkg) (this-package-input pkg)) dependencies)))))))))
+
+ (synopsis #f)
+ (description #f)
+ (license #f)
+ (home-page #f)))
+
(define-public font-awesome-6
(package/inherit font-awesome
(version "6.5.2")
@@ 105,6 133,10 @@
(packages
(append
(cons*
+ (make-script-package
+ "setup_mirrored_repo"
+ (local-file "dotfiles/scripts/setup_mirrored_repo")
+ (list "hut" "forgejo-cli" "git-minimal" "bash" "gawk" "coreutils"))
dwl-mine
font-awesome-6
@@ 141,6 173,7 @@
;; Development
"git" "openssh"
+ "hut" "forgejo-cli"
;; Passwords
"gnupg" "password-store-wl" "pass-otp"