buckets/shell.nix

148 lines
3.7 KiB
Nix
Raw Normal View History

2025-12-29 17:05:44 +01:00
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = with pkgs; [
# PHP and tools
php83
php83Packages.composer
2025-12-29 17:05:44 +01:00
# Node.js and npm
nodejs_22
2025-12-29 17:05:44 +01:00
# Container tools
podman
podman-compose
# Database client (for direct DB access)
mariadb.client
2025-12-29 17:05:44 +01:00
# Utilities
git
curl
gnumake
];
2025-12-29 17:05:44 +01:00
shellHook = ''
export USER_ID=$(id -u)
export GROUP_ID=$(id -g)
export PODMAN_USERNS=keep-id
# Compose file location
COMPOSE_FILE="$PWD/docker/dev/docker-compose.yml"
# ===================
# ALIASES
# ===================
alias pc='podman-compose -f $COMPOSE_FILE'
# ===================
# DEV COMMANDS
# ===================
2025-12-29 17:05:44 +01:00
dev-up() {
echo "Starting services..."
PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE up -d "$@"
echo ""
podman-compose -f $COMPOSE_FILE ps
2025-12-29 19:47:58 +01:00
echo ""
echo "App available at: http://localhost:8100"
2025-12-29 17:05:44 +01:00
}
2025-12-29 17:05:44 +01:00
dev-down() {
if [[ "$1" == "-v" ]]; then
echo "Stopping services and removing volumes..."
podman-compose -f $COMPOSE_FILE down -v
else
echo "Stopping services..."
podman-compose -f $COMPOSE_FILE down
fi
2025-12-29 17:05:44 +01:00
}
2025-12-29 17:05:44 +01:00
dev-restart() {
echo "Restarting services..."
podman-compose -f $COMPOSE_FILE restart "$@"
2025-12-29 17:05:44 +01:00
}
dev-rebuild() {
echo "Rebuilding services (down -v + up)..."
podman-compose -f $COMPOSE_FILE down -v
PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE up -d "$@"
echo ""
podman-compose -f $COMPOSE_FILE ps
echo ""
echo "App available at: http://localhost:8100"
}
2025-12-29 17:05:44 +01:00
dev-logs() {
podman-compose -f $COMPOSE_FILE logs -f app "$@"
2025-12-29 17:05:44 +01:00
}
dev-logs-db() {
podman-compose -f $COMPOSE_FILE logs -f db "$@"
}
2025-12-29 17:05:44 +01:00
dev-shell() {
podman-compose -f $COMPOSE_FILE exec app sh
2025-12-29 17:05:44 +01:00
}
2025-12-29 17:05:44 +01:00
dev-artisan() {
podman-compose -f $COMPOSE_FILE exec app php artisan "$@"
2025-12-29 17:05:44 +01:00
}
# ===================
# BUILD COMMANDS
# ===================
base-build() {
local image="forge.lvl0.xyz/lvl0/buckets:latest"
# Check if logged in, prompt if not
if ! podman login --get-login forge.lvl0.xyz &>/dev/null; then
echo "Not logged in to forge.lvl0.xyz"
podman login forge.lvl0.xyz || return 1
fi
echo "Building image: $image"
if ! podman build -t "$image" -f Dockerfile .; then
echo "Build failed!"
2025-12-29 17:05:44 +01:00
return 1
fi
echo ""
echo "Pushing to registry..."
if ! podman push "$image"; then
echo "Push failed!"
return 1
fi
echo ""
echo "Done! Image pushed: $image"
2025-12-29 17:05:44 +01:00
}
# ===================
# WELCOME MESSAGE
# ===================
2025-12-29 17:05:44 +01:00
echo ""
echo "================================================="
echo " Buckets Dev Environment "
echo "================================================="
2025-12-29 17:05:44 +01:00
echo ""
echo " Podman: $(podman --version | cut -d' ' -f3)"
echo ""
echo "Commands:"
echo " dev-up [services] Start all or specific services"
echo " dev-down [-v] Stop services (-v removes volumes)"
echo " dev-rebuild Fresh start (down -v + up)"
echo " dev-restart Restart services"
echo " dev-logs Tail app logs"
echo " dev-logs-db Tail database logs"
echo " dev-shell Shell into app container"
echo " dev-artisan <cmd> Run artisan command"
echo " base-build Build and push image"
echo ""
echo "Services:"
echo " app Laravel + Vite http://localhost:8100"
echo " db MariaDB localhost:3307"
echo " mailhog Web UI http://localhost:8026"
2025-12-29 17:05:44 +01:00
echo ""
'';
}