run nix format on this repository

This commit is contained in:
Jonas Rabenstein 2025-09-14 23:29:30 +02:00
commit d281a23a8a
17 changed files with 354 additions and 165 deletions

View file

@ -1,36 +1,81 @@
let
scan = import ./scan.nix;
flake' = self: { imports, exports , base }@schema: { ... }@inputs: { ... }@imports: let
lib = {
inherit scan schema inputs imports;
extend = flake schema inputs imports;
new = flake {} {} {};
# TODO: override
};
convert = attr: value: value self inputs imports;
flake' =
self:
{
imports,
exports,
base,
}@schema:
{ ... }@inputs:
{ ... }@imports:
let
lib = {
inherit
scan
schema
inputs
imports
;
extend = flake schema inputs imports;
new = flake { } { } { };
# TODO: override
};
convert = attr: value: value self inputs imports;
result = (builtins.mapAttrs convert schema.exports);
in {
formatter = builtins.mapAttrs (_: pkgs: pkgs.nixfmt-tree) inputs.nixpkgs.legacyPackages;
} // result // { lib = lib // (result.lib or {}); };
flake = { imports?{}, exports?{}, base?[] }@schema'old: { ... }@inputs'old: { ... }@imports'old: { ... }@inputs'new: base: let
schema = {
imports = (schema'old.imports or {}) // scan { base = base + "/import"; recursive = true; };
exports = (schema'old.exports or {}) // scan { base = base + "/export"; };
base = [ base ] ++ (schema'old.base or []);
result = (builtins.mapAttrs convert schema.exports);
in
{
formatter = builtins.mapAttrs (_: pkgs: pkgs.nixfmt-tree) inputs.nixpkgs.legacyPackages;
}
// result
// {
lib = lib // (result.lib or { });
};
merge = attr: let
old = imports'old.${attr} or {};
new = imports'new.${attr} or {};
in builtins.mapAttrs (attr: _: (old.${attr} or []) ++ (new.${attr} or [])) (old//new);
flake =
{
imports ? { },
exports ? { },
base ? [ ],
}@schema'old:
{ ... }@inputs'old:
{ ... }@imports'old:
{ ... }@inputs'new:
base:
let
schema = {
imports =
(schema'old.imports or { })
// scan {
base = base + "/import";
recursive = true;
};
exports = (schema'old.exports or { }) // scan { base = base + "/export"; };
base = [ base ] ++ (schema'old.base or [ ]);
};
imports'new = builtins.mapAttrs (name: value: scan { base = base + "/${name}"; convert = name: content: [ (value name content) ]; }) schema.imports;
result = flake' result schema
(inputs'old // (builtins.removeAttrs inputs'new ["self"]))
(builtins.mapAttrs (attr: _: merge attr) schema.imports);
in result;
merge =
attr:
let
old = imports'old.${attr} or { };
new = imports'new.${attr} or { };
in
builtins.mapAttrs (attr: _: (old.${attr} or [ ]) ++ (new.${attr} or [ ])) (old // new);
in flake {} {} {}
imports'new = builtins.mapAttrs (
name: value:
scan {
base = base + "/${name}";
convert = name: content: [ (value name content) ];
}
) schema.imports;
result = flake' result schema (inputs'old // (builtins.removeAttrs inputs'new [ "self" ])) (
builtins.mapAttrs (attr: _: merge attr) schema.imports
);
in
result;
in
flake { } { } { }

View file

@ -1 +0,0 @@
self:

View file

@ -1,23 +1,42 @@
{ base, convert ? name: value: value, recursive ? false }:
{
base,
convert ? name: value: value,
recursive ? false,
}:
let
scan = sub: let
all = builtins.readDir (base + "/${builtins.concatStringsSep "/" sub}");
names = filter: builtins.filter filter (builtins.attrNames all);
nix = name: all.${name} == "regular" && builtins.stringLength name > 4 && builtins.substring (builtins.stringLength name - 4) 4 name == ".nix";
dir = name: all.${name} == "directory";
files = map (name: sub ++ [ (builtins.substring 0 (builtins.stringLength name - 4) name) ]) (names nix);
dirs = builtins.concatLists (map (name: scan (sub ++ [name])) (names dir));
in if recursive then files ++ dirs else files;
scan =
sub:
let
all = builtins.readDir (base + "/${builtins.concatStringsSep "/" sub}");
names = filter: builtins.filter filter (builtins.attrNames all);
nix =
name:
all.${name} == "regular"
&& builtins.stringLength name > 4
&& builtins.substring (builtins.stringLength name - 4) 4 name == ".nix";
dir = name: all.${name} == "directory";
files = map (name: sub ++ [ (builtins.substring 0 (builtins.stringLength name - 4) name) ]) (
names nix
);
dirs = builtins.concatLists (map (name: scan (sub ++ [ name ])) (names dir));
in
if recursive then files ++ dirs else files;
root = scan [];
root = scan [ ];
item = relative: let
name = builtins.concatStringsSep "/" relative;
absolute = base + "/${name}.nix";
content = import absolute;
value = convert name content;
in { inherit name value; };
item =
relative:
let
name = builtins.concatStringsSep "/" relative;
absolute = base + "/${name}.nix";
content = import absolute;
value = convert name content;
in
{
inherit name value;
};
items = map item root;
in if builtins.pathExists base then builtins.listToAttrs (map item root) else {}
in
if builtins.pathExists base then builtins.listToAttrs (map item root) else { }