{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; mkNocheck = drv: drv.overrideAttrs (o: { doCheck = false; checkInputs = [ ]; }); in { packages = rec { u01 = pkgs.callPackage ({ stdenv, catch2_3, cmake }: stdenv.mkDerivation { name = "ecg-u01"; src = ./u01; nativeBuildInputs = [ cmake ]; checkInputs = [ catch2_3 ]; doCheck = true; }) { }; u02 = pkgs.callPackage ({ stdenv, catch2_3, cmake, freeglut, libGL, libGLU }: stdenv.mkDerivation { name = "ecg-u02"; src = ./u02; nativeBuildInputs = [ cmake ]; buildInputs = [ freeglut libGL libGLU ]; checkInputs = [ catch2_3 ]; doCheck = true; }) { }; u03 = pkgs.callPackage ({ stdenv, cmake, freeglut, libGL, libGLU }: stdenv.mkDerivation { name = "ecg-u03"; src = ./u03; nativeBuildInputs = [ cmake ]; buildInputs = [ freeglut libGL libGLU ]; }) { }; u01-nocheck = mkNocheck u01; u02-nocheck = mkNocheck u02; }; devShells.default = pkgs.mkShell { nativeBuildInputs = with pkgs; [ catch2_3 cmake freeglut libGL libGLU reuse ]; }; }); }