mirror of
https://github.com/hoppscotch/hoppscotch.git
synced 2025-12-23 22:29:53 -05:00
190 lines
5.1 KiB
Nix
190 lines
5.1 KiB
Nix
{ pkgs, lib, config, inputs, ... }:
|
|
|
|
let
|
|
rosettaPkgs =
|
|
if pkgs.stdenv.isDarwin && pkgs.stdenv.isAarch64
|
|
then pkgs.pkgsx86_64Darwin
|
|
else pkgs;
|
|
|
|
darwinPackages = with pkgs; [
|
|
apple-sdk
|
|
];
|
|
|
|
linuxPackages = with pkgs; [
|
|
libsoup_3
|
|
webkitgtk_4_1
|
|
librsvg
|
|
libappindicator
|
|
libayatana-appindicator
|
|
];
|
|
|
|
in {
|
|
packages = with pkgs; [
|
|
git
|
|
lima
|
|
colima
|
|
docker
|
|
jq
|
|
# NOTE: In case there's `Cannot find module: ... bcrypt ...` error, try `npm rebuild bcrypt`
|
|
# See: https://github.com/kelektiv/node.bcrypt.js/issues/800
|
|
# See: https://github.com/kelektiv/node.bcrypt.js/issues/1055
|
|
nodejs_22
|
|
nodePackages.typescript-language-server
|
|
nodePackages."@volar/vue-language-server"
|
|
nodePackages.prisma
|
|
prisma-engines
|
|
cargo-edit
|
|
cargo-tauri
|
|
] ++ lib.optionals pkgs.stdenv.isDarwin darwinPackages
|
|
++ lib.optionals pkgs.stdenv.isLinux linuxPackages;
|
|
|
|
env = {
|
|
APP_GREET = "Hoppscotch";
|
|
DATABASE_URL = "postgresql://postgres:testpass@localhost:5432/hoppscotch?connect_timeout=300";
|
|
DOCKER_BUILDKIT = "1";
|
|
COMPOSE_DOCKER_CLI_BUILD = "1";
|
|
} // lib.optionalAttrs pkgs.stdenv.isLinux {
|
|
# NOTE: Setting these `PRISMA_*` environment variable fixes
|
|
# "Error: Failed to fetch sha256 checksum at https://binaries.prisma.sh/all_commits/<hash>/linux-nixos/libquery_engine.so.node.gz.sha256 - 404 Not Found"
|
|
# See: https://github.com/prisma/prisma/discussions/3120
|
|
PRISMA_QUERY_ENGINE_LIBRARY = "${pkgs.prisma-engines}/lib/libquery_engine.node";
|
|
PRISMA_QUERY_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/query-engine";
|
|
PRISMA_SCHEMA_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/schema-engine";
|
|
|
|
LD_LIBRARY_PATH = lib.makeLibraryPath [
|
|
pkgs.libappindicator
|
|
pkgs.libayatana-appindicator
|
|
];
|
|
} // lib.optionalAttrs pkgs.stdenv.isDarwin {
|
|
# Place to put macOS-specific environment variables
|
|
};
|
|
|
|
scripts = {
|
|
hello.exec = "echo hello from $APP_GREET";
|
|
e.exec = "emacs";
|
|
lima-setup.exec = "limactl start template://docker";
|
|
lima-clean.exec = "limactl rm -f $(limactl ls -q)";
|
|
colima-start.exec = "colima start --cpu 8 --memory 50";
|
|
|
|
docker-prune.exec = ''
|
|
echo "Cleaning up unused Docker resources..."
|
|
docker system prune -f
|
|
'';
|
|
|
|
docker-logs.exec = "docker logs -f hoppscotch-aio";
|
|
|
|
docker-status.exec = ''
|
|
echo "Container Status:"
|
|
docker ps -a --filter "name=hoppscotch-aio" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
|
'';
|
|
|
|
db-reset.exec = ''
|
|
echo "Resetting database..."
|
|
psql -U postgres -d hoppscotch -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;'
|
|
echo "Database reset complete."
|
|
'';
|
|
|
|
docker-clean-all.exec = ''
|
|
echo "Starting complete Docker cleanup..."
|
|
|
|
echo "1/6: Stopping all running containers..."
|
|
CONTAINERS=$(docker ps -q)
|
|
if [ -n "$CONTAINERS" ]; then
|
|
docker stop $CONTAINERS
|
|
echo "✓ Containers stopped"
|
|
else
|
|
echo "• No running containers found"
|
|
fi
|
|
|
|
echo "2/6: Removing all containers..."
|
|
CONTAINERS=$(docker ps -aq)
|
|
if [ -n "$CONTAINERS" ]; then
|
|
docker rm $CONTAINERS
|
|
echo "✓ Containers removed"
|
|
else
|
|
echo "• No containers to remove"
|
|
fi
|
|
|
|
echo "3/6: Removing all images..."
|
|
IMAGES=$(docker images -q)
|
|
if [ -n "$IMAGES" ]; then
|
|
docker rmi --force $IMAGES
|
|
echo "✓ Images removed"
|
|
else
|
|
echo "• No images to remove"
|
|
fi
|
|
|
|
echo "4/6: Removing all volumes..."
|
|
VOLUMES=$(docker volume ls -q)
|
|
if [ -n "$VOLUMES" ]; then
|
|
docker volume rm $VOLUMES
|
|
echo "✓ Volumes removed"
|
|
else
|
|
echo "• No volumes to remove"
|
|
fi
|
|
|
|
echo "5/6: Removing custom networks..."
|
|
NETWORKS=$(docker network ls --filter type=custom -q)
|
|
if [ -n "$NETWORKS" ]; then
|
|
docker network rm $NETWORKS
|
|
echo "✓ Networks removed"
|
|
else
|
|
echo "• No custom networks to remove"
|
|
fi
|
|
|
|
echo "6/6: Running system prune..."
|
|
docker system prune --all --force --volumes
|
|
echo "✓ System pruned"
|
|
|
|
echo "Done!"
|
|
'';
|
|
};
|
|
|
|
enterShell = ''
|
|
git --version
|
|
echo "Hoppscotch development environment ready!"
|
|
${lib.optionalString pkgs.stdenv.isDarwin ''
|
|
# Place to put macOS-specific shell initialization
|
|
''}
|
|
${lib.optionalString pkgs.stdenv.isLinux ''
|
|
# Place to put Linux-specific shell initialization
|
|
''}
|
|
'';
|
|
|
|
enterTest = ''
|
|
echo "Running tests"
|
|
'';
|
|
|
|
dotenv.enable = true;
|
|
|
|
languages = {
|
|
typescript = {
|
|
enable = true;
|
|
};
|
|
javascript = {
|
|
package = pkgs.nodejs_22;
|
|
enable = true;
|
|
npm.enable = true;
|
|
pnpm.enable = true;
|
|
};
|
|
go = {
|
|
enable = true;
|
|
package = pkgs.go_1_24;
|
|
};
|
|
rust = {
|
|
enable = true;
|
|
channel = "nightly";
|
|
components = [
|
|
"rustc"
|
|
"cargo"
|
|
"clippy"
|
|
"rustfmt"
|
|
"rust-analyzer"
|
|
"llvm-tools-preview"
|
|
"rust-src"
|
|
"rustc-codegen-cranelift-preview"
|
|
];
|
|
};
|
|
};
|
|
}
|