feat(flake): clean up
Move helpers to `./helpers.nix`
This commit is contained in:
parent
ed27e11b54
commit
5cf9fcd62e
3 changed files with 240 additions and 211 deletions
192
flake.nix
192
flake.nix
|
@ -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
223
helpers.nix
Normal 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;
|
||||||
|
}
|
|
@ -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);
|
|
||||||
}
|
|
Loading…
Reference in a new issue