From 2cd9a4039c0c5f524df0a33605c9baef1f57917e Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 4 Jul 2026 18:12:10 +0530 Subject: Add git shell commands --- cgit/ssh/git-shell-commands/list | 13 +++++++++++++ cgit/ssh/git-shell-commands/new | 33 +++++++++++++++++++++++++++++++++ docker-compose.yml | 2 +- setup.sh | 15 +++++++++++---- 4 files changed, 58 insertions(+), 5 deletions(-) create mode 100755 cgit/ssh/git-shell-commands/list create mode 100755 cgit/ssh/git-shell-commands/new diff --git a/cgit/ssh/git-shell-commands/list b/cgit/ssh/git-shell-commands/list new file mode 100755 index 0000000..804a488 --- /dev/null +++ b/cgit/ssh/git-shell-commands/list @@ -0,0 +1,13 @@ +#!/usr/bin/env sh + +ls -1 /git | while IPS="" read name; do + echo "$name" + printf " description: " + if [ -f "/git/${name}/description" ]; then + cat "/git/${name}/description" + else + echo "" + fi + echo "" +done + diff --git a/cgit/ssh/git-shell-commands/new b/cgit/ssh/git-shell-commands/new new file mode 100755 index 0000000..ec2d8ca --- /dev/null +++ b/cgit/ssh/git-shell-commands/new @@ -0,0 +1,33 @@ +#!/usr/bin/env sh + +set -eu + +remote_host="git.ediblemonad.dev" +owner_info="Akshay Nair " + +if [ $# -lt 2 ]; then + echo "Usage: new <...description>" 1>&2 + exit 1 +fi + +repo_name="$1"; shift 1; +[ -z "$repo_name" ] && echo "Error: empty repo name" 1>&2 && exit 1 + +# Stupid cmdline parsing means I can't do $1 here for space separated stuff +description="$*" +[ -z "$description" ] && echo "Error: empty description" 1>&2 && exit 1 + +repo_dir="/git/${repo_name}.git" + +if [ -d "$repo_dir" ]; then + echo "Error: $repo_name already exists" 1>&2 + exit 1; +fi + +git --bare init "$repo_dir" + +cd "$repo_dir" +echo "$description" > description +echo "$owner_info" > owner_info + +echo "git@${remote_host}:${repo_dir}" diff --git a/docker-compose.yml b/docker-compose.yml index 646cb11..33051ad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -74,7 +74,7 @@ services: - DEFAULT_EMAIL=ediblemonad@gmail.com - NGINX_PROXY_CONTAINER=nginx-proxy - NGINX_DOCKER_GEN_CONTAINER=nginx-proxy - # - ACME_CA_URI=https://acme-staging-v02.api.letsencrypt.org/directory + - ACME_CA_URI=https://acme-staging-v02.api.letsencrypt.org/directory volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - proxy-certs:/etc/nginx/certs diff --git a/setup.sh b/setup.sh index 3f05f3b..efd3346 100755 --- a/setup.sh +++ b/setup.sh @@ -5,7 +5,7 @@ set -eu ROOT_DIR=${ROOT_DIR:-"/opt/project"} configure() { - configure_user && configure_fs && configure_packages && configure_firewall + configure_user && configure_fs && configure_packages && configure_git && configure_firewall } services() { cd "$ROOT_DIR"; docker compose --profile services "$@"; } @@ -22,7 +22,14 @@ stop() { services down; } configure_packages() { apt install \ docker.io docker-buildx docker-compose-v2 \ - ufw + git ufw +} + +configure_git() { + sudo -u git git config --global init.defaultBranch main + # kept explicit shell setup + chsh -s "$(which git-shell)" git + cp -rf "$ROOT_DIR/cgit/ssh/git-shell-commands" /home/git/ } configure_firewall() { @@ -34,7 +41,7 @@ configure_firewall() { configure_user() { groupadd -f -g 1001 git - useradd --shell /usr/sbin/nologin --no-create-home git --uid 1001 --gid 1001 || true + useradd --shell /usr/sbin/nologin git --uid 1001 --gid 1001 || true groupadd -f -g 1002 send useradd --shell /usr/sbin/nologin --no-create-home send --uid 1002 --gid 1002 || true } @@ -54,6 +61,6 @@ update() { cmd="$1"; shift; case "$cmd" in update|start|startfg|stop|services|core) "$cmd" "$@" ;; - configure|configure_firewall|configure_user|configure_fs|configure_packages) "$cmd" "$@" ;; + configure|configure_firewall|configure_user|configure_fs|configure_packages|configure_git) "$cmd" "$@" ;; *) echo "Invalid command: $cmd"; exit 1 ;; esac -- cgit v1.3.1