From b813061e9a302c0381f1cea0bad79fe14d2c5df7 Mon Sep 17 00:00:00 2001 From: Aditya Gupta Date: Thu, 25 Jun 2026 10:32:06 +0530 Subject: [PATCH] feat(installers): Added docker installer --- installers/install_docker.sh | 72 ++++++++++++++++++++++++++++++++++++ lib/registry.sh | 4 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 installers/install_docker.sh diff --git a/installers/install_docker.sh b/installers/install_docker.sh new file mode 100644 index 0000000..af0e477 --- /dev/null +++ b/installers/install_docker.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# Tool: docker +# DisplayName: Docker +# Description: Container runtime and orchestration platform +# +# Docker Installer Script +# + +# Prevent standalone execution +if [ -z "${_LIB_COMMON_SOURCED:-}" ]; then + echo "Error: This script must be run through the 'b' CLI." >&2 + exit 1 +fi + +set -euo pipefail + +# ─── Installation Logic ────────────────────────────────────────────── + +install_docker() { + if has_command docker; then + if ! confirm "Docker is already installed. Reinstall/Upgrade?"; then + log_info "Skipping Docker installation." + return + fi + else + if ! confirm "Install Docker?"; then + log_info "Skipping Docker installation." + return + fi + fi + + # Use pkg_install for distro packages (it automatically handles rollback hooks for the packages!) + pkg_install "arch:docker|debian:docker.io|fedora:docker" + + # Ensure docker group exists (some distros might not create it immediately) + if ! getent group docker >/dev/null 2>&1; then + log_info "Creating docker group..." + add_rollback_cmd "sudo groupdel docker || true" + sudo groupadd docker + fi + + # Configure user group + if ! groups "$USER" | grep -q "\bdocker\b"; then + log_info "Adding $USER to the docker group..." + add_rollback_cmd "sudo gpasswd -d $USER docker || true" + sudo usermod -aG docker "$USER" + log_warn "You will need to log out and log back in, or run 'newgrp docker' for the group changes to take effect." + fi + + # Enable and start systemd services + if has_command systemctl; then + log_info "Enabling and starting Docker services..." + + # Add rollback cmds for systemd + add_rollback_cmd "sudo systemctl disable --now docker.service || true" + add_rollback_cmd "sudo systemctl disable --now containerd.service || true" + + sudo systemctl enable --now docker.service || true + sudo systemctl enable --now containerd.service || true + fi +} + +# ─── Main ───────────────────────────────────────────────────────────── + +main() { + install_docker + + echo + log_success "Docker installation and configuration complete." +} + +main "$@" diff --git a/lib/registry.sh b/lib/registry.sh index d54f6a9..0d30023 100644 --- a/lib/registry.sh +++ b/lib/registry.sh @@ -4,6 +4,7 @@ declare -A INSTALLERS=( [agy]="Antigravity CLI" [asciicinema]="asciinema terminal recorder" [bat]="Bat (alternative to cat) and configure alias" + [docker]="Container runtime and orchestration platform" [node]="Node.js (LTS) and NVM" [nvim]="Neovim 0.12.0 and configuration" [pnpm]="pnpm package manager" @@ -19,6 +20,7 @@ declare -A INSTALLER_DISPLAYS=( [agy]="Antigravity" [asciicinema]="asciicinema" [bat]="Bat" + [docker]="Docker" [node]="Node" [nvim]="Neovim" [pnpm]="Pnpm" @@ -30,4 +32,4 @@ declare -A INSTALLER_DISPLAYS=( [zoxide]="Zoxide" ) -INSTALLER_KEYS=(agy asciicinema bat node nvim pnpm rust starship uv yay yazi zoxide) +INSTALLER_KEYS=(agy asciicinema bat docker node nvim pnpm rust starship uv yay yazi zoxide)