{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11"; nixos-unstable.url = "github:NixOS/nixpkgs/master"; home-manager = { url = "github:nix-community/home-manager/release-22.11"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, nixos-unstable, home-manager }: let sysLinuxX64 = "x86_64-linux"; sysDarwin = "aarch64-darwin"; sysLinuxAarch = "aarch64-linux"; wrapPkgsSystem = { system }: import nixpkgs rec { inherit system; unstablePkgs = wrapUnstablePkgsSystem { inherit system; }; config.allowUnfree = true; overlays = [ (final: prev: { inherit unstablePkgs; }) ]; }; wrapUnstablePkgsSystem = { system }: import nixos-unstable { inherit system; config.allowUnfree = true; }; wrapUtils = { pkgs, unstablePkgs, system }: let inherit (pkgs.lib) makeScope; inherit (pkgs) newScope; in makeScope newScope (self: rec { inherit nixpkgs home-manager nixos-unstable; inherit (self.callPackage ./lib/utils.nix { }) mkSysRole mkHomeRole; inherit (user) mkUser; user = self.callPackage ./lib/user.nix { }; host = self.callPackage ./lib/host.nix { }; }); pkgsLinuxX64 = wrapPkgsSystem { system = sysLinuxX64; }; unstableLinuxX64 = wrapUnstablePkgsSystem { system = sysLinuxX64; }; utilsLinuxX64 = wrapUtils { system = sysLinuxX64; pkgs = pkgsLinuxX64; unstablePkgs = unstableLinuxX64; }; pkgsLinuxAarch = wrapPkgsSystem { system = sysLinuxAarch; }; unstableLinuxAarch = wrapUnstablePkgsSystem { system = sysLinuxAarch; }; utilsLinuxAarch = wrapUtils { system = sysLinuxAarch; pkgs = pkgsLinuxAarch; unstablePkgs = unstableLinuxAarch; }; pkgsDarwin = wrapPkgsSystem { system = sysDarwin; }; unstableDarwin = wrapUnstablePkgsSystem { system = sysDarwin; }; utilsDarwin = wrapUtils { system = sysDarwin; pkgs = pkgsDarwin; unstablePkgs = unstableDarwin; }; in { nixosConfigurations = { architect = utilsLinuxX64.host.mkHost { name = "architect"; users = [{ user = "giulio"; roles = [ ]; }]; }; gAluminum = utilsLinuxX64.host.mkHost { name = "gAluminum"; users = [{ user = "giulio"; roles = [ "desktop" "ssh" "git" ]; }]; roles = [ "gnome" ]; }; }; homeConfigurations = { giulioMac = utilsDarwin.user.mkHMUser { name = "giulio"; roles = [ "ssh" ]; }; giulioAarch = utilsLinuxAarch.user.mkHMUser { name = "giulio"; roles = [ "ssh" ]; }; giulioX64 = utilsLinuxX64.user.mkHMUser { name = "giulio"; roles = [ "ssh" ]; }; giulioX64NoSSH = utilsLinuxX64.user.mkHMUser { name = "giulio"; }; }; defaultTemplate = self.templates.basicShell; templates = { basicShell.path = ./templates/basicShell; description = "A barebone shell with custom defined packages"; }; }; }