{ description = "Robossembler Development Environments on Nix"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs?ref=master"; flake-utils.follows = "ros-flake/flake-utils"; ros-flake.url = "github:lopsided98/nix-ros-overlay?ref=develop"; gazebo = { url = "github:movefasta/gazebo-sim-overlay"; inputs.flake-utils.follows = "ros-flake/flake-utils"; inputs.nixpkgs.follows = "ros-flake/nixpkgs"; # Transitive inputs "not in registry" https://github.com/NixOS/nix/issues/5790 # inputs.nixgl.inputs.nixpkgs.follows = "ros-flake/nixpkgs"; # inputs.nixgl.inputs.flake-utils.follows = "ros-flake/flake-utils"; }; }; outputs = { self, nixpkgs, ros-flake, gazebo, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let # pkgs = nixpkgs.legacyPackages.${system}.extend overlay; ros = ros-flake.legacyPackages.${system}; pkgs = import nixpkgs { inherit system; overlays = [ overlay gazebo.overlays.default ]; }; overlay = final: prev: { # -- PLACEHOLDER for overlay # freecad = prev.freecad.overrideAttrs # (old: { cmakeFlags = old.cmakeFlags ++ [ "-DBUILD_GUI=OFF" ]; }); # cmakeFlag -BUILD_GUI=OFF for build without gui pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ ( python-final: python-prev: { iopath = python-prev.iopath.overridePythonAttrs (oldAttrs: { version = "unstable"; src = pkgs.fetchFromGitHub { owner = "facebookresearch"; repo = "iopath"; rev = "9dcb63a46447556460fdb65c21aa6d094a7a788c"; hash = "sha256-X1LTOfbIAMy6gToNYS0JpeJpHi0jHPsEjrnCq2c9U0E="; }; }); } ) ]; }; # overrided packages and attributes for nix-ros-overlay humble-overrided = ros.humble.overrideScope (final: prev: { # remove after update github:lopsided98/nixpkgs/nix-ros for https://github.com/NixOS/nixpkgs/pull/224099 behaviortree-cpp-v3 = prev.behaviortree-cpp-v3.overrideAttrs (old: { propagatedBuildInputs = old.propagatedBuildInputs ++ [ pkgs.zeromq ]; }); moveit-core = prev.moveit-core.overrideAttrs (old: { propagatedBuildInputs = old.propagatedBuildInputs ++ [ prev.tf2-kdl ]; }); moveit-kinematics = prev.moveit-kinematics.overrideAttrs (old: { propagatedBuildInputs = old.propagatedBuildInputs ++ [ final.moveit-ros-planning ]; }); }); # robossembler custom packages; defined here for share between devShells and packages cg_preferences = pkgs.fetchgit { url = "https://gitflic.ru/project/brothermechanic/cg_preferences.git"; sha256 = "sha256-/mNNjvrhIxSZVv1/LSJ7+c/dXH3E0Orh5Zr0oVPLquY="; }; rs_logo = pkgs.fetchgit { url = "https://gitlab.com/robossembler/logo.git"; rev = "0a0235cd154a59b711e87456206ccd7ba69a7e4e"; sha256 = "sha256-/QsgKdtDHNymsTEmhIzSrOKNUqqkXl8coy+5LwIEkas="; fetchLFS = true; }; blender' = pkgs.blender.override { cudaSupport = true; spaceNavSupport = false; waylandSupport = false; }; blender = blender'.overrideAttrs (old: { optix = pkgs.fetchzip { # url taken from the archlinux blender PKGBUILD url = "https://developer.download.nvidia.com/redist/optix/v7.4/OptiX-7.4.0-Include.zip"; sha256 = "sha256-ca08XetwaUYC9foeP5bff9kcDfuFgEzopvjspn2s8RY="; }; patches = old.patches ++ [ "${cg_preferences}/patches/cg-defaults.patch" ]; buildInputs = old.buildInputs ++ [ pkgs.imath pkgs.git ]; postPatch = old.postPatch + '' cp ${cg_preferences}/share/00_cg_preferences_service.py scripts/startup/ cp ${cg_preferences}/share/startup.blend release/datafiles/ cp ${rs_logo}/raster/robossembler_1024x512_roboty-rossii.png release/datafiles/splash.png ''; env.NIX_CFLAGS_COMPILE = old.env.NIX_CFLAGS_COMPILE + " -I${pkgs.imath}/include/Imath"; postInstall = old.postInstall + '' cp -r ${cg_preferences}/cg_preferences $out/share/blender/${ pkgs.lib.versions.majorMinor pkgs.blender.version }/scripts/addons/ ''; }); bpy = blender.overrideAttrs (old: { pname = "bpy"; src = pkgs.fetchurl { url = "https://download.blender.org/source/${old.pname}-${old.version}.tar.xz"; hash = "sha256-3AAtguPDQMk4VcZoRzDQGAG2aaKbHMa3XuuZC6aecj8="; }; cmakeFlags = old.cmakeFlags ++ [ "-DWITH_PYTHON_INSTALL=OFF" "-DWITH_AUDASPACE=OFF" "-DWITH_PYTHON_MODULE=ON" "-DWITH_MEM_JEMALLOC=OFF" "-DWITH_INSTALL_PORTABLE=ON" ]; postInstall = '' mkdir -p $out/lib/python${pkgs.python3.pythonVersion}/site-packages mkdir -p $out/nix-support mv $out/bpy $out/lib/python${pkgs.python3.pythonVersion}/site-packages/ echo ${pkgs.python3} >> $out/nix-support/propagated-build-inputs ''; postFixup = '' buildPythonPath $out/lib/python${pkgs.python3.pythonVersion}/site-packages ''; }); bpy-wheel = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/bpy-wheel { }; pysdf = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/pysdf { }; pytorch3d = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/pytorch3d { }; mayo = pkgs.libsForQt5.callPackage ./pkgs/misc/mayo { }; fstl = pkgs.libsForQt5.callPackage ./pkgs/misc/fstl { }; open3d = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/open3d { }; unified-planning = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/unified-planning { }; blenderproc = pkgs.python3Packages.callPackage ./blenderproc.nix { }; test-script = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/test-script { }; webdataset = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/webdataset { }; ansitable = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/ansitable { }; megapose6d = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/megapose6d { inherit webdataset; }; spatialmath = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/spatialmath { inherit ansitable; }; rcg-pipeline = pkgs.python3Packages.callPackage ./pkgs/development/python-modules/rcg-pipeline { inherit bpy-wheel; }; in { inherit pkgs; rlib = import ./. { inherit (pkgs.stdenv) mkDerivation; inherit (pkgs) lib; inherit mayo; inherit (pkgs.libsForQt5) wrapQtAppsHook; }; packages = { inherit mayo pysdf fstl unified-planning test-script blender bpy bpy-wheel rcg-pipeline; }; devShells.ci = pkgs.mkShell { buildInputs = [ pkgs.jq ]; }; devShells.gazebo = gazebo.devShells.${system}.default; devShells.ros = pkgs.mkShell { buildInputs = (with humble-overrided; [ ros2run rmw-fastrtps-dynamic-cpp urdf ament-pep257 ament-lint-auto xacro ament-cmake rclcpp-action tf2 action-msgs ament-copyright pythonPackages.pytest rosidl-default-generators behaviortree-cpp-v3 geometry-msgs rosidl-default-runtime rclpy std-msgs ament-lint-common ament-flake8 tf2-ros rclcpp moveit-core moveit-msgs moveit-ros-planning moveit-ros-planning-interface gazebo-ros2-control plansys2-bringup image-transport cv-bridge example-interfaces ]) ++ (with pkgs; [ nlohmann_json glog lua5_3_compat gazebo_sim ]); RMW_IMPLEMENTATION = "rmw_fastrtps_dynamic_cpp"; }; devShells.all = pkgs.mkShell { packages = [ blender fstl mayo ]; }; devShells.perception = let rbs-packages = p: with p; [ torch torchvision torchaudio detectron2 ]; in pkgs.mkShell { packages = [ (pkgs.python3.withPackages rbs-packages) ]; }; devShells.default = let my-python-packages = p: with p; [ unified-planning pybullet scipy spatialmath rcg-pipeline ]; in pkgs.mkShell { packages = [ (pkgs.python3.withPackages my-python-packages) pkgs.freecad mayo pkgs.bashInteractive ]; buildInputs = [ ]; # Run when the shell is started up shellHook = '' ${pkgs.python3}/bin/python --version ''; }; } ); nixConfig = { extra-substituters = [ "https://ros.cachix.org" "https://robossembler.cachix.org" ]; extra-trusted-public-keys = [ "ros.cachix.org-1:dSyZxI8geDCJrwgvCOHDoAfOm5sV1wCPjBkKL+38Rvo=" "robossembler.cachix.org-1:56jBJHroRQSGpZFkW8XMquuzQTjAF/XTo6MogmBM7SQ=" ]; }; }