nixos/flake.nix
2023-02-19 06:01:34 +01:00

104 lines
3.1 KiB
Nix

{
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 sysLinuxX64;
unstableLinuxX64 = wrapUnstablePkgsSystem sysLinuxX64;
utilsLinuxX64 = wrapUtils { system = sysLinuxX64; pkgs = pkgsLinuxX64; unstablePkgs = unstableLinuxX64; };
pkgsLinuxAarch = wrapPkgsSystem sysLinuxAarch;
unstableLinuxAarch = wrapUnstablePkgsSystem sysLinuxAarch;
utilsLinuxAarch = wrapUtils { system = sysLinuxAarch; pkgs = pkgsLinuxAarch; unstablePkgs = unstableLinuxAarch; };
pkgsDarwin = wrapPkgsSystem sysDarwin;
unstableDarwin = wrapUnstablePkgsSystem 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";
};
};
}