feat: Add flake and ragenix package generation and dev environment
This commit is contained in:
155
default.nix
155
default.nix
@@ -30,157 +30,12 @@
|
||||
}:
|
||||
|
||||
let
|
||||
# Camera SDK derivation - extracts and installs the SDK
|
||||
camera-sdk = pkgs.stdenv.mkDerivation {
|
||||
pname = "mindvision-camera-sdk";
|
||||
version = "2.1.0.49";
|
||||
|
||||
# Use the camera_sdk directory as source
|
||||
src = ./usda-vision/camera-management-api/camera_sdk;
|
||||
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
buildInputs = [ pkgs.libusb1 ];
|
||||
|
||||
unpackPhase = ''
|
||||
cp -r $src/* .
|
||||
tar xzf "linuxSDK_V2.1.0.49(250108).tar.gz"
|
||||
cd "linuxSDK_V2.1.0.49(250108)"
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib $out/include
|
||||
|
||||
# Copy x64 library files (SDK has arch-specific subdirs)
|
||||
if [ -d lib/x64 ]; then
|
||||
cp -r lib/x64/* $out/lib/ || true
|
||||
fi
|
||||
|
||||
# Copy header files
|
||||
if [ -d include ]; then
|
||||
cp -r include/* $out/include/ || true
|
||||
fi
|
||||
|
||||
# Make libraries executable
|
||||
chmod +x $out/lib/*.so* 2>/dev/null || true
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "MindVision Camera SDK";
|
||||
platforms = pkgs.lib.platforms.linux;
|
||||
};
|
||||
};
|
||||
# Import the usda-vision flake
|
||||
usda-vision-flake = (builtins.getFlake (toString ./usda-vision)).packages.${pkgs.system};
|
||||
|
||||
# Create a derivation that packages the usda-vision directory
|
||||
usda-vision-app = pkgs.stdenv.mkDerivation {
|
||||
pname = "usda-vision";
|
||||
version = "1.0.0";
|
||||
|
||||
# Use the directory from this repository with explicit source filtering
|
||||
# The ./usda-vision path is relative to this module file
|
||||
src = lib.cleanSourceWith {
|
||||
src = ./usda-vision;
|
||||
filter = path: type:
|
||||
let
|
||||
baseName = baseNameOf path;
|
||||
in
|
||||
# Exclude git, but include everything else
|
||||
baseName != ".git" &&
|
||||
baseName != ".cursor" &&
|
||||
baseName != "__pycache__" &&
|
||||
baseName != "node_modules" &&
|
||||
baseName != ".venv";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgs.makeWrapper pkgs.rsync ];
|
||||
|
||||
# Don't run these phases, we'll do everything in installPhase
|
||||
dontBuild = true;
|
||||
dontConfigure = true;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/opt/usda-vision
|
||||
|
||||
# Debug: show what's in source
|
||||
echo "Source directory contents:"
|
||||
ls -la $src/ || true
|
||||
|
||||
# Process docker-compose.yml - replace paths, hostnames, and configure SDK from Nix
|
||||
if [ -f $src/docker-compose.yml ]; then
|
||||
# Basic path and hostname replacements with sed
|
||||
${pkgs.gnused}/bin/sed \
|
||||
-e 's|env_file:.*management-dashboard-web-app/\.env|env_file: /var/lib/usda-vision/.env|g' \
|
||||
-e 's|\./management-dashboard-web-app/\.env|/var/lib/usda-vision/.env|g' \
|
||||
-e 's|\./management-dashboard-web-app|/var/lib/usda-vision/management-dashboard-web-app|g' \
|
||||
-e 's|\./media-api|/var/lib/usda-vision/media-api|g' \
|
||||
-e 's|\./video-remote|/var/lib/usda-vision/video-remote|g' \
|
||||
-e 's|\./scheduling-remote|/var/lib/usda-vision/scheduling-remote|g' \
|
||||
-e 's|\./vision-system-remote|/var/lib/usda-vision/vision-system-remote|g' \
|
||||
-e 's|\./camera-management-api|/var/lib/usda-vision/camera-management-api|g' \
|
||||
-e 's|exp-dash|192.168.1.156|g' \
|
||||
-e 's|localhost|192.168.1.156|g' \
|
||||
-e '/^ - \/etc\/timezone:\/etc\/timezone:ro$/a\ - ${camera-sdk}/lib:/opt/camera-sdk/lib:ro' \
|
||||
-e 's|LD_LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib|LD_LIBRARY_PATH=/opt/camera-sdk/lib:/usr/local/lib:/lib:/usr/lib|' \
|
||||
$src/docker-compose.yml > $TMPDIR/docker-compose-step1.yml
|
||||
|
||||
# Remove SDK installation blocks using awk for better multi-line handling
|
||||
${pkgs.gawk}/bin/awk '
|
||||
/# Only install system packages if not already installed/ { skip=1 }
|
||||
skip && /^ fi$/ { skip=0; next }
|
||||
/# Install camera SDK if not already installed/ { skip_sdk=1 }
|
||||
skip_sdk && /^ fi;$/ { skip_sdk=0; next }
|
||||
!skip && !skip_sdk { print }
|
||||
' $TMPDIR/docker-compose-step1.yml > $TMPDIR/docker-compose.yml
|
||||
|
||||
rm -f $TMPDIR/docker-compose-step1.yml
|
||||
fi
|
||||
|
||||
# Copy all application files using rsync with chmod, excluding files we'll provide separately
|
||||
${pkgs.rsync}/bin/rsync -av --chmod=Du+w --exclude='.git' --exclude='docker-compose.yml' --exclude='.env' --exclude='management-dashboard-web-app/.env' $src/ $out/opt/usda-vision/
|
||||
|
||||
# Copy the processed docker-compose.yml
|
||||
if [ -f $TMPDIR/docker-compose.yml ]; then
|
||||
cp $TMPDIR/docker-compose.yml $out/opt/usda-vision/docker-compose.yml
|
||||
fi
|
||||
|
||||
# Verify files were copied
|
||||
echo "Destination directory contents:"
|
||||
ls -la $out/opt/usda-vision/ || true
|
||||
|
||||
# Create convenience scripts
|
||||
mkdir -p $out/bin
|
||||
|
||||
cat > $out/bin/usda-vision-start <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
cd $out/opt/usda-vision
|
||||
${pkgs.docker-compose}/bin/docker-compose up -d --build
|
||||
EOF
|
||||
|
||||
cat > $out/bin/usda-vision-stop <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
cd $out/opt/usda-vision
|
||||
${pkgs.docker-compose}/bin/docker-compose down
|
||||
EOF
|
||||
|
||||
cat > $out/bin/usda-vision-logs <<'EOF'
|
||||
#!/usr%bin/env bash
|
||||
cd $out/opt/usda-vision
|
||||
${pkgs.docker-compose}/bin/docker-compose logs -f "$@"
|
||||
EOF
|
||||
|
||||
cat > $out/bin/usda-vision-restart <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
cd $out/opt/usda-vision
|
||||
${pkgs.docker-compose}/bin/docker-compose restart "$@"
|
||||
EOF
|
||||
|
||||
chmod +x $out/bin/usda-vision-*
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "USDA Vision camera management system";
|
||||
maintainers = [ "UGA Innovation Factory" ];
|
||||
};
|
||||
};
|
||||
# Get packages from the flake
|
||||
camera-sdk = usda-vision-flake.camera-sdk;
|
||||
usda-vision-app = usda-vision-flake.usda-vision;
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user