2024-01-14 03:04:31 +01:00
|
|
|
# flakelight -- Framework for simplifying flake setup
|
|
|
|
# Copyright (C) 2023 Archit Gupta <archit@accelbread.com>
|
|
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
|
|
|
|
# This provides a module that can be added to module systems nested inside of
|
|
|
|
# flakelight, for example NixOS or home-manager configurations.
|
|
|
|
|
|
|
|
{ lib, config, flakelight, moduleArgs, inputs, outputs, ... }:
|
|
|
|
let
|
2024-01-14 09:34:35 +01:00
|
|
|
inherit (lib) mapAttrs mkOption optionalAttrs;
|
2024-01-14 21:59:39 +01:00
|
|
|
inherit (flakelight) selectAttr;
|
2024-01-14 03:04:31 +01:00
|
|
|
inherit (flakelight.types) module;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options.propagationModule = mkOption { type = module; };
|
|
|
|
|
|
|
|
config.propagationModule =
|
|
|
|
{ lib, pkgs, options, ... }:
|
2024-01-14 21:59:39 +01:00
|
|
|
let inherit (pkgs.stdenv.hostPlatform) system; in {
|
2024-01-14 03:04:31 +01:00
|
|
|
config = (optionalAttrs (options ? nixpkgs.overlays) {
|
|
|
|
# Apply flakelight overlays to NixOS/home-manager configurations
|
2024-01-14 09:34:35 +01:00
|
|
|
nixpkgs.overlays = lib.mkOrder 10
|
|
|
|
(config.withOverlays ++ [ config.packageOverlay ]);
|
2024-01-14 03:04:31 +01:00
|
|
|
})
|
|
|
|
// (optionalAttrs (options ? home-manager.sharedModules) {
|
|
|
|
# Propagate module to home-manager when using its nixos module
|
|
|
|
home-manager.sharedModules = [ config.propagationModule ];
|
|
|
|
})
|
|
|
|
// {
|
|
|
|
# Give access to flakelight module args under `flake` arg.
|
|
|
|
# Also include inputs'/outputs' which depend on `pkgs`.
|
|
|
|
_module.args.flake = {
|
2024-01-14 21:59:39 +01:00
|
|
|
inputs' = mapAttrs (_: selectAttr system) inputs;
|
|
|
|
outputs' = selectAttr system outputs;
|
2024-01-14 03:04:31 +01:00
|
|
|
} // moduleArgs;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|