{ description = "System config"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, ... }@inputs: with inputs; let defSystem = systemArch: baseConfig: nixpkgs.lib.nixosSystem { system = "${systemArch}"; modules = [ { _module.args.inputs = inputs; } { _module.args.self-overlay = self.overlay; } ({ ... }: { imports = builtins.attrValues self.nixosModules ++ [ { nix.nixPath = [ "nixpkgs=${nixpkgs}" ]; nixpkgs.overlays = [ self.overlay ]; } baseConfig home-manager.nixosModules.home-manager { home-manager.useUserPackages = true; } ]; system.configurationRevision = nixpkgs.lib.mkIf (self ? rev) self.rev; nix.registry.nixpkgs.flake = nixpkgs; }) ]; }; in { overlay = final: prev: (import ./overlays) final prev; # overlay = final: prev: { # unstable = import nixpkgs { # system = "x86_64-linux"; # config.allowUnfree = true; # }; # }; nixosModules = builtins.listToAttrs (map (x: { name = x; value = import (./modules + "/${x}"); }) (builtins.attrNames (builtins.readDir ./modules))); nixosConfigurations = { vm1 = defSystem "x86_64-linux" { imports = [ (import (./machines/vm1/configuration.nix) { inherit self; }) ]; }; vm2 = defSystem "x86_64-linux" { imports = [ (import (./machines/vm2/configuration.nix) { inherit self; }) ]; }; # loki = defSystem "x86_64-linux" { # imports = [ # (import (./machines/loki/configuration.nix) { inherit self; }) # ]; # }; }; } // (flake-utils.lib.eachSystem [ "aarch64-linux" "x86_64-linux" ]) (system: let pkgs = import nixpkgs { inherit system; overlays = [ self.overlay ]; config = { allowUnsupportedSystem = true; allowUnfree = true; }; }; in rec { packages = flake-utils.lib.flattenTree { rofi-wayland = pkgs.rofi-wayland; pamedia = pkgs.pamedia; }; apps = { rofi-wayland = flake-utils.lib.mkApp { drv = packages.rofi-wayland; }; pamedia = flake-utils.lib.mkApp { drv = packages.pamedia; }; }; } ); }