{
  description = "Development flake for this ROS project";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";

    ros-overlay.url = "github:lopsided98/nix-ros-overlay";
    ros-overlay.inputs.nixpkgs.follows = "nixpkgs";
  };


  outputs = { self, nixpkgs, flake-utils, ros-overlay }:
    flake-utils.lib.eachDefaultSystem (system: let

      pkgs = import nixpkgs {
        inherit system;
        overlays = [ ros-overlay.overlays.default ];
      };

    in {
      devShells.default = pkgs.mkShell {
        nativeBuildInputs = with pkgs; [
          # Non-ROS packages
        ] ++ (with rosPackages.humble; [
          # ROS packages
          (buildEnv {
            paths = [
              # Core
              ros-environment
              colcon
              # Ros2
              ros2run
              ros2param
              ros2topic
              ros2node
              ros2interface
              ros2service
              ros2action
              ros2pkg
              # RQT
              rqt
              rqt-msg
              rqt-topic
              rqt-action
              rqt-service-caller
              rqt-graph
              # Extra
           ];
          })
        ]);

      };
    });
}
