feat(flake)!: convert to fs-defined modules
Place all modules in either: - `modules/${manager}/${module}.nix` - `modules/${manager}/${module}/default.nix` - `${manager}` - One of `nixos`, `nix-on-droid`, `nix-darwin` or `home-manager` - `${module}` - Module name (autoimported by configurations, used for exporting)
This commit is contained in:
parent
beff7ad8a4
commit
de43011b22
10 changed files with 98 additions and 63 deletions
5
modules/home-manager/README.md
Normal file
5
modules/home-manager/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Add your reusable home-manager modules to this directory (<https://nixos.wiki/wiki/Module>)
|
||||||
|
|
||||||
|
These are considered modules:
|
||||||
|
- files, ending in `.nix` (excluding `default.nix`)
|
||||||
|
- directories, containing `default.nix`
|
|
@ -1,10 +0,0 @@
|
||||||
# Add your reusable home-manager modules to this directory, on their own file (https://nixos.wiki/wiki/Module).
|
|
||||||
# These should be stuff you would like to share with others, not your personal configurations.
|
|
||||||
|
|
||||||
{
|
|
||||||
# List your module files here
|
|
||||||
# my-module = import ./my-module.nix;
|
|
||||||
reo101-shell = import ./reo101-shell;
|
|
||||||
reo101-river = import ./reo101-river;
|
|
||||||
reo101-wezterm = import ./reo101-wezterm;
|
|
||||||
}
|
|
5
modules/nix-darwin/README.md
Normal file
5
modules/nix-darwin/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Add your reusable nix-darwin modules to this directory (<https://nixos.wiki/wiki/Module>)
|
||||||
|
|
||||||
|
These are considered modules:
|
||||||
|
- files, ending in `.nix` (excluding `default.nix`)
|
||||||
|
- directories, containing `default.nix`
|
|
@ -1,10 +0,0 @@
|
||||||
# Add your reusable nix-darwin modules to this directory, on their own file (https://nixos.wiki/wiki/Module).
|
|
||||||
# These should be stuff you would like to share with others, not your personal configurations.
|
|
||||||
|
|
||||||
{
|
|
||||||
# List your module files here
|
|
||||||
# my-module = import ./my-module.nix;
|
|
||||||
brew = import ./brew;
|
|
||||||
yabai = import ./yabai;
|
|
||||||
system = import ./system;
|
|
||||||
}
|
|
5
modules/nix-on-droid/README.md
Normal file
5
modules/nix-on-droid/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Add your reusable nix-on-droid modules to this directory (<https://nixos.wiki/wiki/Module>)
|
||||||
|
|
||||||
|
These are considered modules:
|
||||||
|
- files, ending in `.nix` (excluding `default.nix`)
|
||||||
|
- directories, containing `default.nix`
|
|
@ -1,7 +0,0 @@
|
||||||
# Add your reusable nix-on-droid modules to this directory, on their own file (https://nixos.wiki/wiki/Module).
|
|
||||||
# These should be stuff you would like to share with others, not your personal configurations.
|
|
||||||
|
|
||||||
{
|
|
||||||
# List your module files here
|
|
||||||
# my-module = import ./my-module.nix;
|
|
||||||
}
|
|
5
modules/nixos/README.md
Normal file
5
modules/nixos/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Add your reusable NixOS modules to this directory (<https://nixos.wiki/wiki/Module>)
|
||||||
|
|
||||||
|
These are considered modules:
|
||||||
|
- files, ending in `.nix` (excluding `default.nix`)
|
||||||
|
- directories, containing `default.nix`
|
|
@ -1,8 +0,0 @@
|
||||||
# Add your reusable NixOS modules to this directory, on their own file (https://nixos.wiki/wiki/Module).
|
|
||||||
# These should be stuff you would like to share with others, not your personal configurations.
|
|
||||||
|
|
||||||
{
|
|
||||||
# List your module files here
|
|
||||||
# my-module = import ./my-module.nix;
|
|
||||||
jellyfin = import ./jellyfin.nix;
|
|
||||||
}
|
|
100
util/default.nix
100
util/default.nix
|
@ -7,7 +7,12 @@ let
|
||||||
inherit (lib.attrsets) filterAttrs;
|
inherit (lib.attrsets) filterAttrs;
|
||||||
in
|
in
|
||||||
rec {
|
rec {
|
||||||
# Directory walker
|
# Boolean helpers
|
||||||
|
and = lib.all lib.id;
|
||||||
|
or = lib.any lib.id;
|
||||||
|
eq = x: y: x == y;
|
||||||
|
|
||||||
|
# Directory walking helpers
|
||||||
recurseDir = dir:
|
recurseDir = dir:
|
||||||
mapAttrs
|
mapAttrs
|
||||||
(file: type:
|
(file: type:
|
||||||
|
@ -17,27 +22,19 @@ rec {
|
||||||
)
|
)
|
||||||
(builtins.readDir dir);
|
(builtins.readDir dir);
|
||||||
|
|
||||||
# NOTE: Implying `attrs` is the output of `recurseDir`
|
allSatisfy = predicate: attrs: attrset:
|
||||||
hasFiles = files: attrs:
|
and
|
||||||
builtins.all
|
|
||||||
lib.id
|
|
||||||
(builtins.map
|
(builtins.map
|
||||||
(file:
|
(attr:
|
||||||
builtins.hasAttr file attrs &&
|
builtins.hasAttr attr attrset &&
|
||||||
builtins.getAttr file attrs == "regular")
|
predicate (builtins.getAttr attr attrset))
|
||||||
files);
|
attrs);
|
||||||
|
|
||||||
# NOTE: Implying `attrs` is the output of `recurseDir`
|
# NOTE: Implying last argument is the output of `recurseDir`
|
||||||
hasDirectories = directories: attrs:
|
hasFiles = allSatisfy (eq "regular");
|
||||||
builtins.all
|
|
||||||
lib.id
|
|
||||||
(builtins.map
|
|
||||||
(directory:
|
|
||||||
builtins.hasAttr directory attrs &&
|
|
||||||
lib.isAttrs (builtins.getAttr directory attrs))
|
|
||||||
directories);
|
|
||||||
|
|
||||||
and = lib.all lib.id;
|
# NOTE: Implying last argument is the output of `recurseDir`
|
||||||
|
hasDirectories = allSatisfy lib.isAttrs;
|
||||||
|
|
||||||
# pkgs helpers
|
# pkgs helpers
|
||||||
forEachSystem = lib.genAttrs [
|
forEachSystem = lib.genAttrs [
|
||||||
|
@ -53,11 +50,61 @@ rec {
|
||||||
(system:
|
(system:
|
||||||
f nixpkgs.legacyPackages.${system});
|
f nixpkgs.legacyPackages.${system});
|
||||||
|
|
||||||
|
# Modules helpers
|
||||||
|
createModules = baseDir: { passthru ? { inherit inputs outputs; }, ... }:
|
||||||
|
lib.pipe baseDir [
|
||||||
|
# Read given directory
|
||||||
|
builtins.readDir
|
||||||
|
# Map each entry to a module
|
||||||
|
(lib.mapAttrs'
|
||||||
|
(name: type:
|
||||||
|
let
|
||||||
|
moduleDir = baseDir + "/${name}";
|
||||||
|
in
|
||||||
|
if and [
|
||||||
|
(type == "directory")
|
||||||
|
(hasFiles ["default.nix"] (builtins.readDir moduleDir))
|
||||||
|
] then
|
||||||
|
# Classic module in a directory
|
||||||
|
lib.nameValuePair
|
||||||
|
name
|
||||||
|
(import moduleDir)
|
||||||
|
else if and [
|
||||||
|
(type == "regular")
|
||||||
|
(lib.hasSuffix ".nix" name)
|
||||||
|
] then
|
||||||
|
# Classic module in a file
|
||||||
|
lib.nameValuePair
|
||||||
|
(lib.removeSuffix ".nix" name)
|
||||||
|
(import moduleDir)
|
||||||
|
else
|
||||||
|
# Invalid module
|
||||||
|
lib.nameValuePair
|
||||||
|
name
|
||||||
|
null))
|
||||||
|
# Filter invalid modules
|
||||||
|
(lib.filterAttrs
|
||||||
|
(moduleName: module:
|
||||||
|
module != null))
|
||||||
|
# Passthru if needed
|
||||||
|
(lib.mapAttrs
|
||||||
|
(moduleName: module:
|
||||||
|
if and [
|
||||||
|
(builtins.isFunction
|
||||||
|
module)
|
||||||
|
(eq
|
||||||
|
(lib.pipe module [builtins.functionArgs builtins.attrNames])
|
||||||
|
(lib.pipe passthru [builtins.attrNames]))
|
||||||
|
]
|
||||||
|
then module passthru
|
||||||
|
else module))
|
||||||
|
];
|
||||||
|
|
||||||
# Modules
|
# Modules
|
||||||
nixosModules = import ../modules/nixos;
|
nixosModules = createModules ../modules/nixos { };
|
||||||
nixOnDroidModules = import ../modules/nix-on-droid;
|
nixOnDroidModules = createModules ../modules/nix-on-droid { };
|
||||||
nixDarwinModules = import ../modules/nix-darwin;
|
nixDarwinModules = createModules ../modules/nix-darwin { };
|
||||||
homeManagerModules = import ../modules/home-manager;
|
homeManagerModules = createModules ../modules/home-manager { };
|
||||||
|
|
||||||
# Machines
|
# Machines
|
||||||
machines = recurseDir ../machines;
|
machines = recurseDir ../machines;
|
||||||
|
@ -72,8 +119,8 @@ rec {
|
||||||
|
|
||||||
modules = [
|
modules = [
|
||||||
(root + "/configuration.nix")
|
(root + "/configuration.nix")
|
||||||
inputs.home-manager.nixosModules.home-manager
|
|
||||||
inputs.nur.nixosModules.nur
|
inputs.nur.nixosModules.nur
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
{
|
{
|
||||||
home-manager = {
|
home-manager = {
|
||||||
useGlobalPkgs = false;
|
useGlobalPkgs = false;
|
||||||
|
@ -87,6 +134,9 @@ rec {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
networking.hostName = hostname;
|
||||||
|
}
|
||||||
] ++ (builtins.attrValues nixosModules);
|
] ++ (builtins.attrValues nixosModules);
|
||||||
|
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
|
@ -166,7 +216,7 @@ rec {
|
||||||
(builtins.attrValues
|
(builtins.attrValues
|
||||||
(builtins.mapAttrs
|
(builtins.mapAttrs
|
||||||
(system: hosts:
|
(system: hosts:
|
||||||
lib.attrsets.filterAttrs
|
lib.filterAttrs
|
||||||
(host: config:
|
(host: config:
|
||||||
config != null)
|
config != null)
|
||||||
(builtins.mapAttrs
|
(builtins.mapAttrs
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue