DashNix/lib/default.nix

292 lines
7.8 KiB
Nix

{
inputs,
unstable,
self,
system,
permittedPackages,
dashNixAdditionalProps ? {},
...
}: let
defaultConfig = {
config = {
allowUnfree = true;
permittedInsecurePackages = permittedPackages;
};
overlays = [
inputs.cachy.overlays.default
inputs.nur.overlays.default
];
inherit system;
};
mkPkgs = {
pkgs,
config,
}: let
overlays =
if (config ? overlays)
then config.overlays
else [];
comnbinedConfig = config // {overlays = overlays ++ defaultConfig.overlays;};
in
import pkgs comnbinedConfig;
in rec {
mkNixos = {
root,
inputLib,
lib,
stablePkgs,
unstablePkgs,
stableMods,
unstableMods,
overridePkgs,
...
}:
builtins.listToAttrs (
map
(name: {
inherit name;
value = let
mod = root + /hosts/${name}/configuration.nix;
additionalNixosConfig = root + /hosts/${name}/hardware.nix;
additionalHomeConfig = root + /hosts/${name}/home.nix;
args = {
inherit
self
inputs
mod
additionalHomeConfig
system
root
dashNixAdditionalProps
lib
;
stable = stablePkgs;
unstable = unstablePkgs;
pkgs = lib.mkForce (
if overridePkgs
then stablePkgs
else unstablePkgs
);
alternativePkgs =
if overridePkgs
then unstablePkgs
else stablePkgs;
hostName = name;
homeMods =
if overridePkgs
then unstableMods.home
else stableMods.home;
mkDashDefault = import ./override.nix {inherit lib;};
};
nixosMods =
if overridePkgs
then unstableMods.nixos
else stableMods.nixos;
in
inputLib.nixosSystem {
modules =
[
{_module.args = args;}
mod
]
++ nixosMods
++ lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig
++ lib.optional (builtins.pathExists mod) mod;
};
})
(
lib.lists.remove "" (
lib.attrsets.mapAttrsToList (name: fType:
if fType == "directory"
then name
else "") (
builtins.readDir (root + /hosts)
)
)
)
);
mkHome = {
root,
lib,
stablePkgs,
unstablePkgs,
stableMods,
unstableMods,
overridePkgs,
...
}:
builtins.listToAttrs (
map
(name: {
inherit name;
value = let
mod = root + /homes/${name}/configuration.nix;
additionalHomeConfig = root + /homes/${name}/home.nix;
args = {
inherit
self
inputs
mod
additionalHomeConfig
system
root
dashNixAdditionalProps
lib
;
stable = stablePkgs;
unstable = unstablePkgs;
pkgs = lib.mkForce (
if overridePkgs
then stablePkgs
else unstablePkgs
);
alternativePkgs =
if overridePkgs
then unstablePkgs
else stablePkgs;
userName = name;
mkDashDefault = import ./override.nix {inherit lib;};
};
homeMods =
if overridePkgs
then unstableMods.home
else stableMods.home;
in
inputs.home-manager.lib.homeManagerConfiguration
{
inherit (args) pkgs;
modules =
[
{_module.args = args;}
mod
]
++ homeMods
++ [
../home/common.nix
../home/themes
../home/sync.nix
./foxwrappers.nix
]
++ lib.optional (builtins.pathExists mod) mod;
};
})
(
lib.lists.remove "" (
lib.attrsets.mapAttrsToList (name: fType:
if fType == "directory"
then name
else "") (
builtins.readDir (root + /homes)
)
)
)
);
/*
*
# buildSystems
Builds system given a list of system names which are placed within your hosts/ directory. Note that each system has its own directory in hosts/ as well.
A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration.
The second parameter is the root of your configuration, which should be ./. in most cases.
`root`
: the root path of your configuration
# Example usage
:::{.example}
```nix
nixosConfigurations = buildSystems { root = ./.; };
```
:::
*/
# let
# paths = builtins.readDir ;
# names = lib.lists.remove "default" (
# map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths)
# );
# in
buildFunc = func: {
root,
unstableBundle ? {},
stableBundle ? {},
overridePkgs ? false,
...
}: let
defaultNixosMods = inputs: [
inputs.lanzaboote.nixosModules.lanzaboote
inputs.nixos-wsl.nixosModules.default
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
inputs.disko.nixosModules.disko
inputs.superfreq.nixosModules.default
inputs.sops-nix.nixosModules.sops
../base
../home
../modules
];
defaultHomeMods = inputs: [
inputs.anyrun.homeManagerModules.default
inputs.ironbar.homeManagerModules.default
inputs.oxicalc.homeManagerModules.default
inputs.oxishut.homeManagerModules.default
inputs.oxinoti.homeManagerModules.default
inputs.oxidash.homeManagerModules.default
inputs.oxipaste.homeManagerModules.default
inputs.oxirun.homeManagerModules.default
inputs.hyprdock.homeManagerModules.default
inputs.hyprland.homeManagerModules.default
inputs.reset.homeManagerModules.default
inputs.sops-nix.homeManagerModules.sops
inputs.dashvim.homeManagerModules.dashvim
../modules
];
unstableInput = unstableBundle.pkgs or inputs.unstable;
stableInput = stableBundle.pkgs or inputs.stable;
unstableConfig = unstableBundle.config or defaultConfig;
stableConfig = stableBundle.config or defaultConfig;
unstableInputs = (unstableBundle.inputs or {}) // inputs;
stableInputs = (stableBundle.inputs or {}) // inputs;
unstableMods = {
home = (defaultHomeMods unstableInputs) ++ (unstableBundle.mods.home or []);
nixos = (defaultNixosMods unstableInputs) ++ (unstableBundle.mods.nixos or []);
};
stableMods = {
home = (defaultHomeMods stableInputs) ++ (stableBundle.mods.home or []);
nixos = (defaultNixosMods stableInputs) ++ (stableBundle.mods.nixos or []);
};
unstablePkgs = mkPkgs {
pkgs = unstableInput;
config = unstableConfig;
};
stablePkgs = mkPkgs {
pkgs = stableInput;
config = stableConfig;
};
inputLib = unstableInput.lib;
inherit (unstablePkgs) lib;
in
func {
inherit lib inputLib stablePkgs unstablePkgs stableMods unstableMods stableInputs unstableInputs root overridePkgs;
};
buildSystems = buildFunc mkNixos;
buildHome = buildFunc mkHome;
buildIso = inputs.unstable.lib.nixosSystem {
specialArgs = {
inherit self inputs unstable;
};
modules = [
../iso/configuration.nix
];
};
}