-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshell.nix
More file actions
140 lines (116 loc) ยท 3.64 KB
/
shell.nix
File metadata and controls
140 lines (116 loc) ยท 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
{ pkgs ? import <nixpkgs> {} }:
let
# Python environment with required packages
pythonEnv = pkgs.python3.withPackages (ps: with ps; [
fastapi
uvicorn
# Add any additional Python packages from requirements.txt here
]);
# Node.js environment
nodeEnv = pkgs.nodejs_20; # Use specific Node.js version for consistency
# Shell scripts for running the application
runBackend = pkgs.writeShellScriptBin "adj-backend" ''
echo "๐ Starting ADJ Valet Rust Backend..."
cd ${toString ./.}/backend
cargo run -- --port 8000
'';
runFrontend = pkgs.writeShellScriptBin "adj-frontend" ''
echo "๐ Starting ADJ Valet Frontend..."
cd ${toString ./.}/adj-valet-front
# Check if node_modules exists, install if not
if [ ! -d "node_modules" ]; then
echo "๐ฆ Installing frontend dependencies..."
npm install
fi
npm run dev
'';
runAll = pkgs.writeShellScriptBin "adj-valet" ''
echo "๐ Starting ADJ Valet Application..."
echo "Press Ctrl+C to stop all services"
# Function to cleanup on exit
cleanup() {
echo -e "\n๐ Stopping all services..."
kill $BACKEND_PID $FRONTEND_PID 2>/dev/null
exit 0
}
# Set up trap for cleanup
trap cleanup INT TERM
# Start backend
echo "๐ง Starting backend service..."
adj-backend &
BACKEND_PID=$!
# Wait a bit for backend to start
sleep 2
# Start frontend
echo "๐จ Starting frontend service..."
adj-frontend &
FRONTEND_PID=$!
# Wait for both processes
wait $BACKEND_PID $FRONTEND_PID
'';
# Development utilities
formatPython = pkgs.writeShellScriptBin "format-python" ''
echo "๐ง Formatting Python code..."
${pkgs.black}/bin/black ${toString ./.}/backend
'';
lintPython = pkgs.writeShellScriptBin "lint-python" ''
echo "๐ Linting Python code..."
${pkgs.python3Packages.pylint}/bin/pylint ${toString ./.}/backend
'';
in
pkgs.mkShell {
name = "adj-valet-dev";
buildInputs = with pkgs; [
# Core development tools
pythonEnv
nodeEnv
# Shell scripts
runBackend
runFrontend
runAll
formatPython
lintPython
# Additional development tools
git
curl
jq
ripgrep
# Python development tools
python3Packages.black
python3Packages.pylint
python3Packages.mypy
# Node.js tools
nodePackages.npm
nodePackages.typescript
nodePackages.eslint
];
# Environment variables
PYTHONPATH = "${toString ./.}/backend";
# Shell hook for initialization
shellHook = ''
echo "โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ"
echo "โ ๐ ADJ Valet Development Shell โ"
echo "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ"
echo ""
echo "Available commands:"
echo " โข adj-valet - Run both frontend and backend"
echo " โข adj-backend - Run backend only"
echo " โข adj-frontend - Run frontend only"
echo " โข format-python - Format Python code with Black"
echo " โข lint-python - Lint Python code with Pylint"
echo ""
echo "Backend: http://localhost:8000"
echo "Frontend: http://localhost:5173"
echo ""
# Create .env file if it doesn't exist
if [ ! -f "${toString ./.}/.env" ]; then
echo "Creating .env file with default values..."
cat > "${toString ./.}/.env" << EOF
# ADJ Valet Environment Configuration
BACKEND_HOST=0.0.0.0
BACKEND_PORT=8000
FRONTEND_PORT=5173
EOF
fi
'';
}