commit ad6e32ff3f6e7daee50d96704a9067ebc620622e Author: myrmidex Date: Sun Jun 14 20:42:06 2026 +0200 Add shell nix file diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..586d816 --- /dev/null +++ b/shell.nix @@ -0,0 +1,155 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = with pkgs; [ + # PHP and tools + php84 + php84Packages.composer + symfony-cli + + # Node.js and npm (React/Vite SPA) + nodejs_22 + + # Container tools + podman + podman-compose + + # Database client (for direct DB access) + mariadb.client + + # Utilities + git + curl + gnumake + ]; + + 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 + # =================== + dev-up() { + echo "Starting services..." + 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" + } + + 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 + } + + dev-restart() { + echo "Restarting services..." + podman-compose -f $COMPOSE_FILE restart "$@" + } + + 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" + } + + dev-logs() { + podman-compose -f $COMPOSE_FILE logs -f app "$@" + } + + dev-logs-db() { + podman-compose -f $COMPOSE_FILE logs -f db "$@" + } + + dev-shell() { + podman-compose -f $COMPOSE_FILE exec app sh + } + + dev-console() { + podman-compose -f $COMPOSE_FILE exec app php bin/console "$@" + } + + dev-composer() { + podman-compose -f $COMPOSE_FILE exec app composer "$@" + } + + # =================== + # 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!" + 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" + } + + # =================== + # WELCOME MESSAGE + # =================== + echo "" + echo "=================================================" + echo " Buckets Dev Environment " + echo "=================================================" + echo "" + echo " PHP: $(php --version | head -1 | cut -d' ' -f2)" + echo " Symfony: $(symfony version 2>/dev/null | head -1 || echo 'symfony-cli')" + 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-console Run Symfony console command" + echo " dev-composer Run composer in the container" + echo " base-build Build and push image" + echo "" + echo "Services:" + echo " app Symfony + Vite http://localhost:8100" + echo " db MariaDB localhost:3307" + echo " mailhog Web UI http://localhost:8026" + echo "" + ''; +}