47 lines
1.7 KiB
Bash
Executable File
47 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
command -v podman >/dev/null 2>&1 || { echo "Error: podman not found"; exit 1; }
|
|
command -v distrobox >/dev/null 2>&1 || { echo "Error: distrobox not found"; exit 1; }
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
CONTAINER="nnm"
|
|
|
|
ALA_DATE="$(grep '^ala_date' "$SCRIPT_DIR/manifest.toml" | sed 's/.*"\(.*\)"/\1/')"
|
|
BASE_DIGEST="$(grep '^base_image_digest' "$SCRIPT_DIR/manifest.toml" | sed 's/.*"\(.*\)"/\1/')"
|
|
|
|
TAG_INPUT="$(find "$SCRIPT_DIR/config" "$SCRIPT_DIR/Containerfile" -type f | sort | xargs -d'\n' sha256sum; cat "$SCRIPT_DIR/packages.list" "$SCRIPT_DIR/manifest.toml")"
|
|
IMAGE_TAG="nnm:$(echo -n "$TAG_INPUT" | sha256sum | cut -c1-16)"
|
|
IMAGE="localhost/$IMAGE_TAG"
|
|
|
|
if ! podman image exists "$IMAGE"; then
|
|
echo "==> Building image..."
|
|
podman build \
|
|
--build-arg "ALA_DATE=$ALA_DATE" \
|
|
--build-arg "BASE_IMAGE_DIGEST=$BASE_DIGEST" \
|
|
-t "$IMAGE" -f "$SCRIPT_DIR/Containerfile" "$SCRIPT_DIR"
|
|
fi
|
|
|
|
echo "==> Copying configs to ~/.config/nvimnemodel/..."
|
|
mkdir -p ~/.config/nvimnemodel
|
|
cp -r "$SCRIPT_DIR/config/"* ~/.config/nvimnemodel/
|
|
|
|
if ! distrobox list 2>/dev/null | grep -qw "$CONTAINER"; then
|
|
echo "==> Creating distrobox container..."
|
|
NVIDIA_FLAG=""
|
|
[[ -d /dev/nvidia0 ]] && NVIDIA_FLAG="--nvidia"
|
|
distrobox create --name "$CONTAINER" --image "$IMAGE" $NVIDIA_FLAG
|
|
else
|
|
echo "==> Upgrading container..."
|
|
distrobox upgrade "$CONTAINER"
|
|
fi
|
|
|
|
echo "==> Installing /usr/local/bin/nnm..."
|
|
sudo cp "$SCRIPT_DIR/nnm" /usr/local/bin/nnm
|
|
sudo chmod +x /usr/local/bin/nnm
|
|
|
|
echo ""
|
|
echo "==> nnm installed"
|
|
echo " Run 'nnm' to open a container terminal"
|
|
echo " Run 'nnm init' to create .envrc for direnv"
|