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;
in
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:
mapAttrs
(file: type:
@ -17,27 +22,19 @@ rec {
)
(builtins.readDir dir);
# NOTE: Implying `attrs` is the output of `recurseDir`
hasFiles = files: attrs:
builtins.all
lib.id
allSatisfy = predicate: attrs: attrset:
and
(builtins.map
(file:
builtins.hasAttr file attrs &&
builtins.getAttr file attrs == "regular")
files);
(attr:
builtins.hasAttr attr attrset &&
predicate (builtins.getAttr attr attrset))
attrs);
# NOTE: Implying `attrs` is the output of `recurseDir`
hasDirectories = directories: attrs:
builtins.all
lib.id
(builtins.map
(directory:
builtins.hasAttr directory attrs &&
lib.isAttrs (builtins.getAttr directory attrs))
directories);
# NOTE: Implying last argument is the output of `recurseDir`
hasFiles = allSatisfy (eq "regular");
and = lib.all lib.id;
# NOTE: Implying last argument is the output of `recurseDir`
hasDirectories = allSatisfy lib.isAttrs;
# pkgs helpers
forEachSystem = lib.genAttrs [
@ -53,11 +50,61 @@ rec {
(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
nixosModules = import ../modules/nixos;
nixOnDroidModules = import ../modules/nix-on-droid;
nixDarwinModules = import ../modules/nix-darwin;
homeManagerModules = import ../modules/home-manager;
nixosModules = createModules ../modules/nixos { };
nixOnDroidModules = createModules ../modules/nix-on-droid { };
nixDarwinModules = createModules ../modules/nix-darwin { };
homeManagerModules = createModules ../modules/home-manager { };
# Machines
machines = recurseDir ../machines;
@ -72,8 +119,8 @@ rec {
modules = [
(root + "/configuration.nix")
inputs.home-manager.nixosModules.home-manager
inputs.nur.nixosModules.nur
inputs.home-manager.nixosModules.home-manager
{
home-manager = {
useGlobalPkgs = false;
@ -87,6 +134,9 @@ rec {
};
};
}
{
networking.hostName = hostname;
}
] ++ (builtins.attrValues nixosModules);
specialArgs = {
@ -166,7 +216,7 @@ rec {
(builtins.attrValues
(builtins.mapAttrs
(system: hosts:
lib.attrsets.filterAttrs
lib.filterAttrs
(host: config:
config != null)
(builtins.mapAttrs