let modulesPath = ./modules; servicePath = modulesPath + /services; moduleImport = path: nameTransform: builtins.listToAttrs ( map (name: { name = nameTransform name; value = import (path + "/${name}"); }) ( builtins.filter (name: (builtins.readDir path).${name} == "regular" && builtins.match ".*\\.nix$" name != null) (builtins.attrNames (builtins.readDir path)) ) ); modules = moduleImport modulesPath (name: builtins.replaceStrings [".nix"] [""] name) // moduleImport servicePath (name: builtins.replaceStrings [".nix"] [""] name); in { flake.nixosModules = { personal = { imports = builtins.attrValues { inherit (modules) android audio bluetooth corectrl dconf disks firejail flatpak fonts nur plasma printing sddm steam sysstat virtualization ; }; }; desktop = { imports = builtins.attrValues { inherit (modules) syncthing ollama ; }; }; server = { imports = builtins.attrValues { inherit (modules) services ; }; }; shared = { imports = builtins.attrValues { inherit (modules) accounts doas environment gvfs home-manager locale nix rsyncd sops ssh system xserver ; }; }; }; }