nixos-config/flake-module.nix
2024-09-28 18:01:53 -04:00

52 lines
1.4 KiB
Nix

# An opinionated module that creates flake outputs based on a known directory structure.
#
# cf. Convention over configuration
#
# TODO: Upstream this in some fashion. To srid/nixos-flake?
# cf. https://github.com/juspay/nix-dev-home/issues/86
{ inputs, self, ... }:
let
inherit (inputs.nixpkgs) lib;
forAllNixFiles = dir: f:
lib.pipe dir [
builtins.readDir
(lib.filterAttrs (_: type: type == "regular"))
(lib.mapAttrs' (fn: _:
let name = lib.removeSuffix ".nix" fn; in
lib.nameValuePair name (f "${dir}/${fn}")
))
];
in
{
flake = {
darwinConfigurations =
forAllNixFiles "${self}/configurations/darwin"
(fn: self.nixos-flake.lib.mkMacosSystem { home-manager = true; } fn);
nixosConfigurations =
forAllNixFiles "${self}/configurations/nixos"
(fn: self.nixos-flake.lib.mkLinuxSystem { home-manager = true; } fn);
darwinModules =
forAllNixFiles "${self}/modules/darwin"
(fn: fn);
nixosModules =
forAllNixFiles "${self}/modules/nixos"
(fn: fn);
homeModules =
forAllNixFiles "${self}/modules/home"
(fn: fn);
overlays =
forAllNixFiles "${self}/overlays"
(fn: import fn self.nixos-flake.lib.specialArgsFor.common);
};
perSystem = { pkgs, ... }: {
legacyPackages.homeConfigurations =
forAllNixFiles "${self}/configurations/home"
(fn: self.nixos-flake.lib.mkHomeConfiguration pkgs fn);
};
}