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:
reo101 2023-07-25 10:32:30 +03:00
parent beff7ad8a4
commit de43011b22
Signed by: reo101
GPG key ID: 675AA7EF13964ACB
10 changed files with 98 additions and 63 deletions

View 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`

View file

@ -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;
}

View 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`

View file

@ -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;
}

View 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`

View file

@ -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
View 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`

View file

@ -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;
}

View file

@ -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