{ description = "picoGym Practice Challenges"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; }; outputs = { self, nixpkgs, }: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; exercises = builtins.attrNames (builtins.readDir ./exercises); forAllExercises = nixpkgs.lib.genAttrs exercises; in { formatter.${system} = pkgs.alejandra; packages.${system} = forAllExercises ( exercise: pkgs.writers.writePython3Bin "picoCTF_${exercise}" { libraries = with pkgs.python3.pkgs; [cryptography]; } "${builtins.readFile ./exercises/${exercise}/main.py}" ); apps.${system} = forAllExercises ( exercise: { type = "app"; program = "${self.packages.${system}.${exercise}}/bin/picoCTF_${exercise}"; } ); devShells.${system} = forAllExercises ( exercise: pkgs.mkShellNoCC { packages = with pkgs; [python3]; } ) // { default = pkgs.mkShellNoCC { packages = with pkgs; [python3]; }; }; }; }