let collectDirs = path: let content = builtins.readDir path; subdirs = builtins.filter (name: content.${name} == "directory") (builtins.attrNames content); buildPath = name: path + "/${name}"; thisDirs = map buildPath subdirs; subDirs = builtins.concatMap collectDirs thisDirs; in [ path ] ++ subDirs; directoryImport = path: builtins.listToAttrs ( map (dir: { name = baseNameOf (toString dir); value = import dir; }) (collectDirs path) ); modules = directoryImport ./.; in { flake.nixosModules = { desktop = { imports = builtins.attrValues { inherit (modules) hypr wayland mullvad syncthing ollama xserver ; }; }; fallaryn = { imports = builtins.attrValues { inherit (modules) plasma sddm tablet ; }; }; laptop = { imports = builtins.attrValues { inherit (modules) gnome xserver ; }; }; server = { imports = builtins.attrValues { inherit (modules) acme caddy jellyfin logrotate mastodon minecraft ollama website postgresql samba vaultwarden forgejo ; }; }; sops = { imports = builtins.attrValues { inherit (modules) sops ; }; }; system = { imports = builtins.attrValues { inherit (modules) hardware programs ; }; }; core = { imports = builtins.attrValues { inherit (modules) core xserver ; }; }; }; }