feat(flake): clean up

Move helpers to `./helpers.nix`
This commit is contained in:
reo101 2023-02-14 11:10:08 +02:00
parent ed27e11b54
commit 5cf9fcd62e
Signed by: reo101
GPG key ID: 675AA7EF13964ACB
3 changed files with 240 additions and 211 deletions

192
flake.nix
View file

@ -75,18 +75,9 @@
let let
inherit (self) outputs; inherit (self) outputs;
inherit (nixpkgs) lib; inherit (nixpkgs) lib;
helpers = (import ./lib/helpers.nix) { inherit lib; }; helpers = import ./helpers.nix { inherit inputs outputs lib; };
inherit (helpers) recurseDir hasFiles hasDirectories;
forEachSystem = lib.genAttrs [
"aarch64-linux"
"i686-linux"
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
forEachPkgs = f: forEachSystem (system': f nixpkgs.legacyPackages.${system'});
in in
rec { with helpers; rec {
# Packages (`nix build`) # Packages (`nix build`)
packages = forEachPkgs (pkgs: packages = forEachPkgs (pkgs:
import ./pkgs { inherit pkgs; } import ./pkgs { inherit pkgs; }
@ -111,172 +102,23 @@
# Overlays # Overlays
overlays = import ./overlays { inherit inputs outputs; }; overlays = import ./overlays { inherit inputs outputs; };
# Modules
nixosModules = import ./modules/nixos;
nixOnDroidModules = import ./modules/nix-on-droid;
nixDarwinModules = import ./modules/nix-darwin;
homeManagerModules = import ./modules/home-manager;
# Machines # Machines
machines = recurseDir ./machines; inherit machines;
homeManagerMachines = machines.home-manager or { }; inherit homeManagerMachines;
nixDarwinMachines = machines.nix-darwin or { }; inherit nixDarwinMachines;
nixOnDroidMachines = machines.nix-on-droid or { }; inherit nixOnDroidMachines;
nixosMachines = machines.nixos or { }; inherit nixosMachines;
# mkHost helpers # Modules
mkNixosHost = system: hostname: users: lib.nixosSystem { inherit nixosModules;
inherit system; inherit nixOnDroidModules;
inherit nixDarwinModules;
inherit homeManagerModules;
modules = [ # Configurations
./machines/nixos/${system}/${hostname}/configuration.nix nixosConfigurations = autoNixosConfigurations;
home-manager.nixosModules.home-manager nixOnDroidConfigurations = autoNixOnDroidConfigurations;
{ darwinConfigurations = autoDarwinConfigurations;
home-manager = { homeConfigurations = autoHomeConfigurations;
useGlobalPkgs = false;
useUserPackages = true;
users = lib.attrsets.genAttrs
users
(user: import ./machines/nixos/${system}/${hostname}/home/${user}.nix);
extraSpecialArgs = {
inherit inputs outputs;
};
};
}
] ++ (builtins.attrValues nixosModules);
specialArgs = {
inherit inputs outputs;
};
};
mkNixOnDroidHost = system: hostname: nix-on-droid.lib.nixOnDroidConfiguration {
pkgs = import nixpkgs {
inherit system;
overlays = [
nix-on-droid.overlays.default
];
};
modules = [
./machines/nix-on-droid/${system}/${hostname}/configuration.nix
{ nix.registry.nixpkgs.flake = nixpkgs; }
] ++ (builtins.attrValues nixOnDroidModules);
extraSpecialArgs = {
inherit inputs outputs;
# rootPath = ./.;
};
home-manager-path = home-manager.outPath;
};
mkNixDarwinHost = system: hostname: users: nix-darwin.lib.darwinSystem {
inherit system;
modules = [
./machines/nix-darwin/${system}/${hostname}/configuration.nix
home-manager.darwinModules.home-manager
{
home-manager = {
useGlobalPkgs = false;
useUserPackages = true;
users = lib.attrsets.genAttrs
users
(user: import ./machines/nix-darwin/${system}/${hostname}/home/${user}.nix);
extraSpecialArgs = { inherit inputs outputs; };
};
}
] ++ (builtins.attrValues nixDarwinModules);
inputs = { inherit inputs outputs nix-darwin nixpkgs; };
};
mkHomeManagerHost = system: hostname: home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.${system};
modules = [
./machines/home-manager/${system}/${hostname}/home.nix
] ++ (builtins.attrValues homeManagerModules);
extraSpecialArgs = { inherit inputs outputs; };
};
createConfigurations =
pred: mkHost: machines:
lib.foldAttrs
(acc: x: acc)
[ ]
(builtins.attrValues
(builtins.mapAttrs
(system: hosts:
lib.attrsets.filterAttrs
(host: config: config != null)
(builtins.mapAttrs
(host: config:
if (pred system host config)
then mkHost system host config
else null)
hosts))
machines));
# Final configurations
nixosConfigurations =
createConfigurations
(system: host: config:
hasFiles
[ "configuration.nix" ]
config)
(system: host: config:
mkNixosHost
system
host
(builtins.map
(lib.strings.removeSuffix ".nix")
(builtins.attrNames (config."home" or { }))))
nixosMachines;
nixOnDroidConfigurations =
createConfigurations
(system: host: config:
hasFiles
[ "configuration.nix" "home.nix" ]
config)
(system: host: config:
mkNixOnDroidHost
system
host)
nixOnDroidMachines;
darwinConfigurations =
createConfigurations
(system: host: config:
hasFiles
[ "configuration.nix" ]
config)
(system: host: config:
mkNixDarwinHost
system
host
(builtins.map
(lib.strings.removeSuffix ".nix")
(builtins.attrNames (config."home" or { }))))
nixDarwinMachines;
homeConfigurations =
createConfigurations
(system: host: config:
hasFiles
[ "home.nix" ]
config)
(system: host: config:
mkHomeManagerHost
system
host)
homeManagerMachines;
}; };
} }

223
helpers.nix Normal file
View file

@ -0,0 +1,223 @@
{ inputs, outputs, lib, ... }:
let
inherit (inputs) nixpkgs;
inherit (lib) mapAttrs;
inherit (lib.attrsets) filterAttrs;
in
rec {
# Directory walker
recurseDir = dir:
mapAttrs
(file: type:
if type == "directory"
then recurseDir "${dir}/${file}"
else type
)
(builtins.readDir dir);
# NOTE: Implying `attrs` is the output of `recurseDir`
hasFiles = files: attrs:
builtins.all
(b: b)
(builtins.map
(file:
builtins.hasAttr file attrs &&
builtins.getAttr file attrs == "regular")
files);
# NOTE: Implying `attrs` is the output of `recurseDir`
hasDirectories = directories: attrs:
builtins.all
(b: b)
(builtins.map
(directory:
builtins.hasAttr directory attrs &&
builtins.getAttr directory attrs == "set")
directories);
# pkgs helpers
forEachSystem = lib.genAttrs [
"aarch64-linux"
"i686-linux"
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
forEachPkgs = f:
forEachSystem
(system:
f nixpkgs.legacyPackages.${system});
# Modules
nixosModules = import ./modules/nixos;
nixOnDroidModules = import ./modules/nix-on-droid;
nixDarwinModules = import ./modules/nix-darwin;
homeManagerModules = import ./modules/home-manager;
# Machines
machines = recurseDir ./machines;
homeManagerMachines = machines.home-manager or { };
nixDarwinMachines = machines.nix-darwin or { };
nixOnDroidMachines = machines.nix-on-droid or { };
nixosMachines = machines.nixos or { };
# Configuration helpers
mkNixosHost = root: system: hostname: users: lib.nixosSystem {
inherit system;
modules = [
(root + "/configuration.nix")
inputs.home-manager.nixosModules.home-manager
{
home-manager = {
useGlobalPkgs = false;
useUserPackages = true;
users = lib.attrsets.genAttrs
users
(user: import (root + "/home/${user}.nix"));
extraSpecialArgs = {
inherit inputs outputs;
};
};
}
] ++ (builtins.attrValues nixosModules);
specialArgs = {
inherit inputs outputs;
};
};
mkNixOnDroidHost = root: system: hostname: inputs.nix-on-droid.lib.nixOnDroidConfiguration {
pkgs = import nixpkgs {
inherit system;
overlays = [
inputs.nix-on-droid.overlays.default
];
};
modules = [
(root + "/configuration.nix")
{ nix.registry.nixpkgs.flake = nixpkgs; }
] ++ (builtins.attrValues nixOnDroidModules);
extraSpecialArgs = {
inherit inputs outputs;
# rootPath = ./.;
};
home-manager-path = inputs.home-manager.outPath;
};
mkNixDarwinHost = root: system: hostname: users: inputs.nix-darwin.lib.darwinSystem {
inherit system;
modules = [
(root + "/configuration.nix")
inputs.home-manager.darwinModules.home-manager
{
home-manager = {
useGlobalPkgs = false;
useUserPackages = true;
users = lib.attrsets.genAttrs
users
(user: import (root + "/home/${user}.nix"));
extraSpecialArgs = { inherit inputs outputs; };
};
}
] ++ (builtins.attrValues nixDarwinModules);
inputs = { inherit inputs outputs nixpkgs; };
};
mkHomeManagerHost = root: system: hostname: inputs.home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.${system};
modules = [
(root + "/home.nix")
] ++ (builtins.attrValues homeManagerModules);
extraSpecialArgs = { inherit inputs outputs; };
};
createConfigurations =
pred: mkHost: machines:
lib.foldAttrs
(acc: x: acc)
[ ]
(builtins.attrValues
(builtins.mapAttrs
(system: hosts:
lib.attrsets.filterAttrs
(host: config: config != null)
(builtins.mapAttrs
(host: config:
if (pred system host config)
then mkHost system host config
else null)
hosts))
machines));
# Configurations
autoNixosConfigurations =
createConfigurations
(system: host: config:
hasFiles
[ "configuration.nix" ]
config)
(system: host: config:
mkNixosHost
./machines/nixos/${system}/${host}
system
host
(builtins.map
(lib.strings.removeSuffix ".nix")
(builtins.attrNames (config."home" or { }))))
nixosMachines;
autoNixOnDroidConfigurations =
createConfigurations
(system: host: config:
hasFiles
[ "configuration.nix" "home.nix" ]
config)
(system: host: config:
mkNixOnDroidHost
./machines/nix-on-droid/${system}/${host}
system
host)
nixOnDroidMachines;
autoDarwinConfigurations =
createConfigurations
(system: host: config:
hasFiles
[ "configuration.nix" ]
config)
(system: host: config:
mkNixDarwinHost
./machines/nix-darwin/${system}/${host}
system
host
(builtins.map
(lib.strings.removeSuffix ".nix")
(builtins.attrNames (config."home" or { }))))
nixDarwinMachines;
autoHomeConfigurations =
createConfigurations
(system: host: config:
hasFiles
[ "home.nix" ]
config)
(system: host: config:
mkHomeManagerHost
./machines/home-manager/${system}/${host}
system
host)
homeManagerMachines;
}

View file

@ -1,36 +0,0 @@
{ lib, ... }:
let
inherit (lib) mapAttrs;
inherit (lib.attrsets) filterAttrs;
in
rec {
recurseDir = dir:
mapAttrs
(file: type:
if type == "directory"
then recurseDir "${dir}/${file}"
else type
)
(builtins.readDir dir);
# VVV - Implying `attrs` is the output of `recurseDir` - VVV
hasFiles = files: attrs:
builtins.all
(b: b)
(builtins.map
(file:
builtins.hasAttr file attrs &&
builtins.getAttr file attrs == "regular")
files);
hasDirectories = directories: attrs:
builtins.all
(b: b)
(builtins.map
(directory:
builtins.hasAttr directory attrs &&
builtins.getAttr directory attrs == "set")
directories);
}