{ outputs = { self, nur, nixpkgs, flake-parts, ... } @ inputs: let devenvModules.personal = ./modules/devenv; flakeModules = { personal = ./modules/flake-parts/personal.nix; devenv = import ./modules/flake-parts/devenv.nix devenvModules; }; in flake-parts.lib.mkFlake {inherit inputs;} { imports = [flakeModules.personal]; flake = { inherit devenvModules flakeModules; nixosModules.personal = ./modules/nixos; homeModules.personal = ./modules/home-manager; overlays.personal = _: super: let my-packages = import ./pkgs (super.extend nur.overlays.default); in { inherit (super.lib.recursiveUpdate super { personal = my-packages; lib.personal = my-packages.lib; }) personal lib ; }; lib = import ./lib; templates = let devenv = {path = ./templates/devenv;}; in { inherit devenv; default = devenv; }; }; perSystem = { config, system, pkgs, lib, ... }: let flatten = let aux = path: attrs: if lib.isAttrs attrs && !lib.isDerivation attrs then lib.foldlAttrs (prev: name: value: prev // aux (path ++ [name]) value) {} attrs else ( if lib.isDerivation attrs then { "${lib.concatStringsSep "_" path}" = attrs; } else {} ); in aux []; in { _module.args.pkgs = import nixpkgs { inherit system; overlays = [self.overlays.personal]; config = {}; }; packages = flatten pkgs.personal; }; }; }