templates/flake.nix

29 lines
892 B
Nix

{
description = "The Sieve of Eratosthenes implemented in many different languages";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
inherit (pkgs) lib;
# Check if project has a shell.nix
hasShell = dir: (builtins.readDir ./${dir}) ? "shell.nix";
# Get all project directories
currentDir = builtins.readDir ./.;
dirs = lib.filterAttrs (_: v: v == "directory") currentDir;
in
lib.concatMapAttrs (dir: _: {
packages.${dir} = pkgs.callPackage ./${dir} {};
} // lib.optionalAttrs (hasShell dir) {
devShells.${dir} = pkgs.callPackage ./${dir}/shell.nix {};
}) dirs
);
}