nix-config/lib/helpers.nix
2024-05-23 15:02:20 -04:00

106 lines
3.4 KiB
Nix

{ self, inputs, outputs, stateVersion, ... }:
let
sshMatrix = import ./ssh-matrix.nix { };
in
{
# Helper function for generating home-manager configs
mkHome = { hostname, username, desktop ? null, platform ? "x86_64-linux" }: inputs.home-manager.lib.homeManagerConfiguration {
pkgs = inputs.nixpkgs.legacyPackages.${platform};
extraSpecialArgs = {
inherit inputs outputs desktop hostname platform username stateVersion sshMatrix;
};
modules = [ ../home-manager ];
};
# Helper function for generating host configs
# - installer: can be one of the following:
# - "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"
# - "/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nix"
mkHost = { hostname, username, systemType, desktop ? null, installer ? null }: inputs.nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs outputs desktop hostname username stateVersion systemType sshMatrix;
};
modules = [
../nixos
inputs.agenix.nixosModules.default
# TODO: enable when services.displayManager is fixed
#inputs.chaotic.nixosModules.default
] ++ (inputs.nixpkgs.lib.optionals (installer != null) [ installer ]);
};
mkDarwin = { hostname, username, stateVersion ? 4, platform ? "aarch64-darwin" }: inputs.nix-darwin.lib.darwinSystem {
specialArgs = {
inherit self inputs outputs hostname username platform stateVersion sshMatrix;
};
modules = [
../darwin
inputs.home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
}
];
};
mkSdImage = { hostname, username, platform ? "armv7l-linux" }: inputs.nixos-generators.nixosGenerate {
specialArgs = {
inherit self inputs outputs hostname username platform stateVersion sshMatrix;
};
system = platform;
format =
if platform == "armv7l-linux"
then "sd-armv7l-installer"
else "sd-aarch64-installer";
# pkgs = inputs.nixpkgs.legacyPackages."${platform}";
# lib = inputs.nixpkgs.legacyPackages."${platform}".lib;
modules = [
../nixos
inputs.agenix.nixosModules.default
];
};
mkRawImage = { hostname, username, systemType, desktop ? null, platform ? "x86_64-linux" }: inputs.nixos-generators.nixosGenerate {
specialArgs = {
inherit self inputs outputs desktop hostname username stateVersion systemType sshMatrix;
};
system = platform;
format =
if platform == "x86_64-linux"
then "raw-efi"
else "raw";
# pkgs = inputs.nixpkgs.legacyPackages."${platform}";
# lib = inputs.nixpkgs.legacyPackages."${platform}".lib;
modules = [
../nixos
inputs.agenix.nixosModules.default
{
boot.kernelParams = [ "console=tty0" ]; # enable physical display tty, not serial port
}
];
};
mkDroid = { hostname, username, platform ? "aarch64-linux" }: inputs.nix-on-droid.lib.nixOnDroidConfiguration {
specialArgs = {
inherit self inputs outputs hostname username platform stateVersion sshMatrix;
};
modules = [
../android
];
};
forAllSystems = inputs.nixpkgs.lib.genAttrs [
"armv7l-linux" # 32-bit ARM Linux
"aarch64-linux" # 64-bit ARM Linux
"i686-linux" # 32-bit x86 Linux
"x86_64-linux" # 64-bit x86 Linux
"aarch64-darwin" # 64-bit ARM Darwin
"x86_64-darwin" # 64-bit x86 Darwin
];
}