2022-02-06 00:06:26 +00:00
|
|
|
{
|
|
|
|
description = "System configs";
|
|
|
|
|
|
|
|
inputs = {
|
|
|
|
flake-utils.url = "github:numtide/flake-utils";
|
2022-02-14 20:44:59 +00:00
|
|
|
devshell.url = "github:numtide/devshell";
|
|
|
|
devshell.inputs.nixpkgs.follows = "nixpkgs-unstable";
|
2022-02-15 20:50:27 +00:00
|
|
|
|
2022-02-06 00:06:26 +00:00
|
|
|
nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
|
2022-05-28 18:38:03 +01:00
|
|
|
nixpkgs-stable.url = "nixpkgs/nixos-22.05";
|
2022-04-03 19:01:21 +01:00
|
|
|
nixpkgs-mine.url = "github:devplayer0/nixpkgs/devplayer0";
|
2022-05-28 18:38:03 +01:00
|
|
|
nixpkgs-mine-stable.url = "github:devplayer0/nixpkgs/devplayer0-stable";
|
2022-02-16 01:40:03 +00:00
|
|
|
|
2022-02-15 20:50:27 +00:00
|
|
|
home-manager-unstable.url = "home-manager";
|
|
|
|
home-manager-unstable.inputs.nixpkgs.follows = "nixpkgs-unstable";
|
2022-05-28 18:38:03 +01:00
|
|
|
home-manager-stable.url = "home-manager/release-22.05";
|
2022-02-15 20:50:27 +00:00
|
|
|
home-manager-stable.inputs.nixpkgs.follows = "nixpkgs-stable";
|
2022-02-06 00:06:26 +00:00
|
|
|
|
2022-02-11 01:15:24 +00:00
|
|
|
# Stuff used by the flake for build / deployment
|
2022-02-06 00:06:26 +00:00
|
|
|
agenix.url = "github:ryantm/agenix";
|
|
|
|
agenix.inputs.nixpkgs.follows = "nixpkgs-unstable";
|
|
|
|
deploy-rs.url = "github:serokell/deploy-rs";
|
|
|
|
deploy-rs.inputs.nixpkgs.follows = "nixpkgs-unstable";
|
2022-02-11 01:15:24 +00:00
|
|
|
|
|
|
|
# Stuff used by systems
|
|
|
|
#impermanence.url = "github:nix-community/impermanence";
|
|
|
|
impermanence.url = "github:devplayer0/impermanence/qemu-vm-dirs";
|
2022-02-06 00:06:26 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
outputs =
|
|
|
|
inputs@{
|
|
|
|
self,
|
|
|
|
|
|
|
|
flake-utils,
|
|
|
|
|
2022-05-28 18:38:03 +01:00
|
|
|
nixpkgs-unstable, nixpkgs-stable, nixpkgs-mine, nixpkgs-mine-stable,
|
2022-02-15 20:50:27 +00:00
|
|
|
home-manager-unstable, home-manager-stable,
|
2022-02-06 00:06:26 +00:00
|
|
|
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
let
|
2022-02-20 15:59:07 +00:00
|
|
|
inherit (builtins) mapAttrs;
|
2022-07-17 03:16:41 +01:00
|
|
|
inherit (lib) genAttrs recurseIntoAttrs evalModules;
|
2022-02-17 20:50:53 +00:00
|
|
|
inherit (lib.flake) flattenTree eachDefaultSystem;
|
2022-02-20 15:59:07 +00:00
|
|
|
inherit (lib.my) mkDefaultSystemsPkgs flakePackageOverlay;
|
2022-02-06 00:06:26 +00:00
|
|
|
|
2022-02-15 20:50:27 +00:00
|
|
|
# Extend a lib with extras that _must not_ internally reference private nixpkgs. flake-utils doesn't, but many
|
|
|
|
# other flakes (e.g. home-manager) probably do internally.
|
|
|
|
libOverlay = final: prev: {
|
2022-06-11 23:51:37 +01:00
|
|
|
my = import ./lib { lib = final; };
|
2022-02-06 00:06:26 +00:00
|
|
|
flake = flake-utils.lib;
|
2022-02-15 20:50:27 +00:00
|
|
|
};
|
|
|
|
pkgsLibOverlay = final: prev: { lib = prev.lib.extend libOverlay; };
|
2022-02-06 00:06:26 +00:00
|
|
|
|
2022-02-15 20:50:27 +00:00
|
|
|
# Override the flake-level lib since we're going to use it for non-config specific stuff
|
|
|
|
pkgsFlakes = mapAttrs (_: pkgsFlake: pkgsFlake // { lib = pkgsFlake.lib.extend libOverlay; }) {
|
2022-02-06 00:06:26 +00:00
|
|
|
unstable = nixpkgs-unstable;
|
|
|
|
stable = nixpkgs-stable;
|
2022-02-16 01:40:03 +00:00
|
|
|
mine = nixpkgs-mine;
|
2022-05-28 18:38:03 +01:00
|
|
|
mine-stable = nixpkgs-mine-stable;
|
2022-02-06 00:06:26 +00:00
|
|
|
};
|
2022-05-28 18:38:03 +01:00
|
|
|
hmFlakes = rec {
|
2022-02-15 20:50:27 +00:00
|
|
|
unstable = home-manager-unstable;
|
|
|
|
stable = home-manager-stable;
|
2022-05-28 18:38:03 +01:00
|
|
|
|
|
|
|
# Don't actually have a fork right now...
|
|
|
|
mine = unstable;
|
|
|
|
mine-stable = stable;
|
2022-02-15 20:50:27 +00:00
|
|
|
};
|
2022-02-06 00:06:26 +00:00
|
|
|
|
2022-02-15 20:50:27 +00:00
|
|
|
# Should only be used for platform-independent flake stuff! This should never leak into a NixOS or home-manager
|
|
|
|
# config - they'll get their own.
|
2022-02-06 00:06:26 +00:00
|
|
|
lib = pkgsFlakes.unstable.lib;
|
|
|
|
|
2022-02-15 20:50:27 +00:00
|
|
|
# pkgs for dev shell etc
|
2022-02-13 14:28:49 +00:00
|
|
|
pkgs' = mapAttrs
|
2022-02-13 23:06:31 +00:00
|
|
|
(_: path: mkDefaultSystemsPkgs path (system: {
|
2022-02-13 14:28:49 +00:00
|
|
|
overlays = [
|
2022-02-15 20:50:27 +00:00
|
|
|
pkgsLibOverlay
|
2022-02-14 20:44:59 +00:00
|
|
|
inputs.devshell.overlay
|
2022-02-13 14:28:49 +00:00
|
|
|
inputs.agenix.overlay
|
|
|
|
inputs.deploy-rs.overlay
|
2022-02-15 20:50:27 +00:00
|
|
|
(flakePackageOverlay inputs.home-manager-unstable system)
|
2022-02-13 14:28:49 +00:00
|
|
|
];
|
2022-02-13 23:06:31 +00:00
|
|
|
}))
|
|
|
|
pkgsFlakes;
|
|
|
|
|
|
|
|
# Easiest to build the basic pkgs here (with our lib overlay too)
|
2022-02-15 20:50:27 +00:00
|
|
|
configPkgs' = mapAttrs
|
2022-02-13 23:06:31 +00:00
|
|
|
(_: path: mkDefaultSystemsPkgs path (_: {
|
|
|
|
overlays = [
|
2022-02-15 20:50:27 +00:00
|
|
|
pkgsLibOverlay
|
2022-02-13 23:06:31 +00:00
|
|
|
];
|
|
|
|
}))
|
2022-02-13 14:28:49 +00:00
|
|
|
pkgsFlakes;
|
2022-02-13 17:44:14 +00:00
|
|
|
|
2022-02-20 15:59:07 +00:00
|
|
|
configs = [
|
|
|
|
# Systems
|
|
|
|
nixos/installer.nix
|
2022-05-28 15:30:12 +01:00
|
|
|
nixos/boxes/colony
|
2022-09-08 20:31:44 +01:00
|
|
|
nixos/boxes/tower
|
2022-03-26 14:20:30 +00:00
|
|
|
|
2022-02-20 15:59:07 +00:00
|
|
|
# Homes
|
|
|
|
home-manager/configs/castle.nix
|
2022-02-21 13:19:21 +00:00
|
|
|
home-manager/configs/macsimum.nix
|
2022-02-20 15:59:07 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
nixfiles = evalModules {
|
|
|
|
modules = [
|
|
|
|
{
|
|
|
|
_module.args = {
|
|
|
|
inherit lib pkgsFlakes hmFlakes inputs;
|
|
|
|
pkgs' = configPkgs';
|
|
|
|
};
|
2022-02-22 00:59:57 +00:00
|
|
|
|
|
|
|
nixos.secretsPath = ./secrets;
|
2022-03-26 14:20:30 +00:00
|
|
|
deploy-rs.deploy.sshOpts = [ "-i" ".keys/deploy.key" ];
|
2022-02-20 15:59:07 +00:00
|
|
|
}
|
|
|
|
|
2022-02-20 20:16:49 +00:00
|
|
|
# Not an internal part of the module system apparently, but it doesn't have any dependencies other than lib
|
|
|
|
"${pkgsFlakes.unstable}/nixos/modules/misc/assertions.nix"
|
|
|
|
|
2022-02-20 15:59:07 +00:00
|
|
|
./nixos
|
|
|
|
./home-manager
|
2022-02-20 20:16:49 +00:00
|
|
|
./deploy-rs.nix
|
2022-02-20 15:59:07 +00:00
|
|
|
] ++ configs;
|
2022-02-13 23:06:31 +00:00
|
|
|
};
|
2022-02-13 13:10:21 +00:00
|
|
|
in
|
2022-02-13 14:28:49 +00:00
|
|
|
# Platform independent stuff
|
2022-02-13 13:10:21 +00:00
|
|
|
{
|
2022-02-13 17:44:14 +00:00
|
|
|
nixpkgs = pkgs';
|
2022-02-22 00:59:57 +00:00
|
|
|
inherit lib nixfiles;
|
2022-02-06 00:06:26 +00:00
|
|
|
|
2022-02-20 15:59:07 +00:00
|
|
|
nixosModules = nixfiles.config.nixos.modules;
|
|
|
|
homeModules = nixfiles.config.home-manager.modules;
|
2022-02-13 23:06:31 +00:00
|
|
|
|
2022-02-20 15:59:07 +00:00
|
|
|
nixosConfigurations = mapAttrs (_: s: s.configuration) nixfiles.config.nixos.systems;
|
|
|
|
homeConfigurations = mapAttrs (_: s: s.configuration) nixfiles.config.home-manager.homes;
|
2022-02-19 22:55:53 +00:00
|
|
|
|
2022-02-20 20:16:49 +00:00
|
|
|
deploy = nixfiles.config.deploy-rs.rendered;
|
2022-07-17 03:16:41 +01:00
|
|
|
|
|
|
|
# TODO: Modularise?
|
|
|
|
herculesCI =
|
|
|
|
let
|
|
|
|
system = n: self.nixosConfigurations."${n}".config.system.build.toplevel;
|
|
|
|
container = n: self.nixosConfigurations."${n}".config.my.buildAs.container;
|
|
|
|
home = n: self.homeConfigurations."${n}".activationPackage;
|
|
|
|
in
|
|
|
|
{
|
2022-06-19 21:30:49 +01:00
|
|
|
onPush = {
|
2022-07-17 12:08:24 +01:00
|
|
|
default.outputs = {
|
|
|
|
shell = self.devShells.x86_64-linux.default;
|
|
|
|
};
|
2022-07-17 03:16:41 +01:00
|
|
|
systems.outputs = {
|
|
|
|
colony = system "colony";
|
|
|
|
vms = genAttrs [ "estuary" "shill" ] system;
|
|
|
|
containers = genAttrs [ "jackflix" "middleman" "chatterbox" ] container;
|
|
|
|
};
|
|
|
|
homes.outputs = {
|
|
|
|
castle = home "dev@castle";
|
2022-06-19 21:30:49 +01:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2022-02-13 14:28:49 +00:00
|
|
|
} //
|
|
|
|
(eachDefaultSystem (system:
|
|
|
|
let
|
2022-05-16 00:05:02 +01:00
|
|
|
pkgs = pkgs'.mine.${system};
|
2022-02-13 14:28:49 +00:00
|
|
|
lib = pkgs.lib;
|
2022-07-17 12:08:24 +01:00
|
|
|
|
|
|
|
shell = pkgs.devshell.mkShell ./devshell;
|
2022-02-13 14:28:49 +00:00
|
|
|
in
|
|
|
|
# Stuff for each platform
|
|
|
|
{
|
2022-02-17 20:50:53 +00:00
|
|
|
checks = flattenTree {
|
2022-02-21 21:52:23 +00:00
|
|
|
homeConfigurations = recurseIntoAttrs (mapAttrs (_: h: h.activationPackage)
|
|
|
|
(lib.filterAttrs (_: h: h.config.nixpkgs.system == system) self.homeConfigurations));
|
2022-02-19 22:55:53 +00:00
|
|
|
deploy = recurseIntoAttrs (pkgs.deploy-rs.lib.deployChecks self.deploy);
|
2022-02-17 20:50:53 +00:00
|
|
|
};
|
|
|
|
|
2022-07-17 12:08:24 +01:00
|
|
|
devShells.default = shell;
|
|
|
|
devShell = shell;
|
2022-02-13 14:28:49 +00:00
|
|
|
}));
|
2022-02-06 00:06:26 +00:00
|
|
|
}
|