let modulesPath = ./modules; miscPath = modulesPath + "/misc"; 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 miscPath ( name: "misc-${ builtins.replaceStrings [ ".nix" ] [ "" ] name }" ) // ( path: builtins.listToAttrs ( map (name: { name = name; value = import (path + "/${name}"); }) ( builtins.filter (name: (builtins.readDir path).${name} == "directory" && name != "misc") ( builtins.attrNames (builtins.readDir path) ) ) ) ) modulesPath; in { flake.homeModules = { desktop = { imports = builtins.attrValues { inherit (modules) brave flameshot misc-android misc-desktop misc-internet misc-tracking ; }; }; entertainment = { imports = builtins.attrValues { inherit (modules) freetube misc-entertainment mpv steam ; }; }; firefox = { imports = builtins.attrValues { inherit (modules) firefox ; }; }; hyprland = { imports = builtins.attrValues { inherit (modules) gtk dunst easyEffects gammastep hyprland misc-hyprland network swaylock tofi waybar ; }; }; productionArt = { imports = builtins.attrValues { inherit (modules) misc-productionArt ; }; }; productionAudio = { imports = builtins.attrValues { inherit (modules) misc-productionAudio ; }; }; productionCode = { imports = builtins.attrValues { inherit (modules) neovim vscode zed ; }; }; productionVideo = { imports = builtins.attrValues { inherit (modules) misc-productionVideo obs-studio yt-dlp ; }; }; productionWriting = { imports = builtins.attrValues { inherit (modules) misc-productionWriting ; }; }; shared = { imports = builtins.attrValues { inherit (modules) bottom direnv fastfetch ghostty git helix homeManager lazygit misc-commandLine nushell starship yazi zellij zoxide ; }; }; }; }