nix-config/flake.nix

213 lines
7.0 KiB
Nix
Raw Normal View History

2022-04-23 03:01:58 +02:00
{
2022-04-23 13:41:36 +02:00
inputs = {
2022-07-06 19:59:25 +02:00
dump-dvb = {
url = github:dump-dvb/dump-dvb.nix;
2022-06-06 22:41:04 +02:00
inputs.nixpkgs.follows = "nixpkgs";
2022-04-23 03:01:58 +02:00
};
2022-04-23 13:41:36 +02:00
2022-05-14 22:47:54 +02:00
microvm = {
url = github:astro/microvm.nix;
2022-06-06 22:41:04 +02:00
inputs.nixpkgs.follows = "nixpkgs";
2022-05-14 22:47:54 +02:00
};
nixpkgs.url = github:NixOS/nixpkgs/nixos-22.05;
sops-nix = {
url = github:Mic92/sops-nix;
inputs.nixpkgs.follows = "nixpkgs";
};
2022-04-28 14:43:40 +02:00
};
2022-04-23 13:41:36 +02:00
2022-07-06 20:58:15 +02:00
outputs =
inputs@{ self
, dump-dvb
, microvm
, nixpkgs
2022-07-06 20:58:15 +02:00
, sops-nix
, ...
}:
2022-04-30 23:41:24 +02:00
let
pkgs = nixpkgs.legacyPackages."x86_64-linux";
lib = pkgs.lib;
2022-05-28 06:12:39 +02:00
2022-05-28 21:24:15 +02:00
data-hoarder-modules = [
./modules/base.nix
./modules/data-hoarder
./modules/dump-dvb
sops-nix.nixosModules.sops
2022-07-06 20:58:15 +02:00
dump-dvb.nixosModules.default
2022-05-28 21:24:15 +02:00
{
nixpkgs.overlays = [
2022-07-06 19:59:25 +02:00
dump-dvb.overlays.default
2022-09-03 22:14:43 +02:00
(final: pref: {
options-docs = (pkgs.nixosOptionsDoc {
2022-09-04 15:06:02 +02:00
options = self.nixosConfigurations.data-hoarder.options.dump-dvb;
2022-09-03 22:14:43 +02:00
}).optionsCommonMark;
})
2022-05-28 21:24:15 +02:00
];
}
];
2022-05-28 06:12:39 +02:00
diskModule = { config, lib, pkgs, ... }: {
2022-08-21 21:32:19 +02:00
boot.growPartition = true;
2022-08-21 13:40:28 +02:00
system.build.diskImage = import ./modules/make-disk-image.nix {
name = "${config.networking.hostName}-disk";
2022-05-29 02:39:40 +02:00
partitionTableType = "efi";
2022-08-21 13:40:28 +02:00
additionalSpace = "0G";
2022-05-29 15:35:14 +02:00
copyChannel = false;
2022-08-21 21:32:19 +02:00
inherit config lib pkgs;
postVM = ''
mkdir -p $out/nix-support
echo file binary-dist $diskImage >> $out/nix-support/hydra-build-products
'';
};
2022-05-24 19:04:08 +02:00
};
# function that generates a system with the given number
2022-08-24 15:26:19 +02:00
generate_system = (id: arch: extraModules:
2022-04-30 23:41:24 +02:00
{
"traffic-stop-box-${toString id}" = nixpkgs.lib.nixosSystem {
system = arch;
2022-09-03 18:46:35 +02:00
specialArgs = inputs;
2022-04-30 23:41:24 +02:00
modules = [
sops-nix.nixosModules.sops
2022-07-06 20:58:15 +02:00
dump-dvb.nixosModules.default
./hosts/traffic-stop-box
2022-05-28 06:12:39 +02:00
./modules/base.nix
./modules/dump-dvb
2022-04-30 23:41:24 +02:00
{
2022-07-06 19:59:25 +02:00
nixpkgs.overlays = [
dump-dvb.overlays.default
];
dump-dvb.systemNumber = id;
2022-04-30 23:41:24 +02:00
}
] ++ extraModules;
2022-04-30 23:41:24 +02:00
};
}
2022-04-28 14:43:40 +02:00
);
id_list = [
2022-08-24 18:48:33 +02:00
{
# Barkhausen Bau
id = 0;
arch = "x86_64-linux";
extraModules = [
2022-08-24 18:47:03 +02:00
./hardware/dell-wyse-3040.nix
diskModule
];
}
2022-08-24 18:48:33 +02:00
{
# Zentralwerk
id = 1;
arch = "x86_64-linux";
extraModules = [
2022-08-24 18:47:03 +02:00
./hardware/dell-wyse-3040.nix
diskModule
];
}
2022-08-24 18:48:33 +02:00
{
# Chemnitz
id = 2;
arch = "x86_64-linux";
extraModules = [
2022-08-24 18:47:03 +02:00
./hardware/dell-wyse-3040.nix
diskModule
];
}
{
id = 3;
arch = "aarch64-linux";
extraModules = [
(import "${nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix")
2022-08-24 18:47:03 +02:00
./hardware/rpi-3b-4b.nix
2022-08-23 20:16:06 +02:00
./modules/user-stop-box/user.nix
];
}
2022-08-30 16:55:40 +02:00
{
# Wundstr. 9
id = 4;
arch = "x86_64-linux";
extraModules = [
./hardware/dell-wyse-3040.nix
diskModule
];
}
];
2022-04-30 23:41:24 +02:00
# attribute set of all traffic stop boxes
2022-08-24 15:26:19 +02:00
stop_boxes = nixpkgs.lib.foldl (x: y: nixpkgs.lib.mergeAttrs x (generate_system y.id y.arch y.extraModules)) { } id_list;
2022-05-14 20:47:17 +02:00
2022-05-29 01:57:24 +02:00
packages = {
default = self.nixosConfigurations.traffic-stop-box-0.config.system.build.vm;
2022-05-28 21:24:15 +02:00
traffic-stop-box = self.nixosConfigurations.traffic-stop-box-0.config.system.build.vm;
2022-06-05 19:09:35 +02:00
staging-data-hoarder = self.nixosConfigurations.staging-data-hoarder.config.system.build.vm;
2022-05-28 21:24:15 +02:00
data-hoarder = self.nixosConfigurations.data-hoarder.config.system.build.vm;
mobile-box-vm = self.nixosConfigurations.mobile-box.config.system.build.vm;
mobile-box-disk = self.nixosConfigurations.mobile-box.config.system.build.diskImage;
staging-microvm = self.nixosConfigurations.staging-data-hoarder.config.microvm.declaredRunner;
data-hoarder-microvm = self.nixosConfigurations.data-hoarder.config.microvm.declaredRunner;
2022-09-04 15:06:02 +02:00
docs = pkgs.callPackage ./pkgs/documentation.nix {
options-docs = (pkgs.nixosOptionsDoc {
options = self.nixosConfigurations.data-hoarder.options.dump-dvb;
}).optionsCommonMark;
};
} // (import ./pkgs/deployment.nix { inherit self pkgs; systems = stop_boxes; });
2022-04-30 23:41:24 +02:00
in
{
2022-05-14 20:47:17 +02:00
packages."x86_64-linux" = packages;
2022-04-28 14:43:40 +02:00
2022-05-28 06:12:39 +02:00
nixosConfigurations = stop_boxes // {
2022-05-20 14:34:56 +02:00
mobile-box = nixpkgs.lib.nixosSystem {
2022-05-09 16:50:23 +02:00
system = "x86_64-linux";
2022-09-03 18:46:35 +02:00
specialArgs = inputs;
2022-05-09 16:50:23 +02:00
modules = [
diskModule
2022-07-06 20:58:15 +02:00
dump-dvb.nixosModules.default
2022-05-09 16:50:23 +02:00
./hosts/mobile-box/configuration.nix
./hosts/mobile-box/hardware-configuration.nix
2022-08-24 18:47:03 +02:00
./hardware/dell-wyse-3040.nix
2022-05-28 06:12:39 +02:00
./modules/base.nix
2022-08-21 19:40:38 +02:00
./modules/user-stop-box/user.nix
2022-08-24 18:47:03 +02:00
./modules/mobile-box/dresden.nix
./modules/dump-dvb
sops-nix.nixosModules.sops
2022-05-09 16:50:23 +02:00
{
2022-07-10 21:55:04 +02:00
dump-dvb.telegramDecoder.configFile = "${self}/configs/mobile_box.json";
2022-05-09 16:50:23 +02:00
}
];
};
2022-05-28 21:24:15 +02:00
data-hoarder = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
2022-09-03 18:46:35 +02:00
specialArgs = inputs;
2022-05-29 01:57:24 +02:00
modules = [
microvm.nixosModules.microvm
2022-05-28 21:24:15 +02:00
./hosts/data-hoarder/configuration.nix
./hosts/data-hoarder/wireguard_server.nix
2022-05-29 01:57:24 +02:00
] ++ data-hoarder-modules;
2022-05-28 06:12:39 +02:00
};
2022-05-28 21:24:15 +02:00
staging-data-hoarder = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
2022-09-03 18:46:35 +02:00
specialArgs = inputs;
2022-05-29 01:57:24 +02:00
modules = [
2022-05-28 21:24:15 +02:00
./hosts/staging/configuration.nix
microvm.nixosModules.microvm
2022-06-14 21:00:00 +02:00
{
environment.systemPackages = with pkgs; [ tcpdump ];
2022-06-14 21:00:00 +02:00
}
2022-05-29 01:57:24 +02:00
] ++ data-hoarder-modules;
2022-05-28 21:24:15 +02:00
};
};
2022-04-29 11:52:57 +02:00
2022-04-30 23:41:24 +02:00
hydraJobs = {
2022-04-29 11:52:57 +02:00
data-hoarder."x86_64-linux" = self.nixosConfigurations.data-hoarder.config.system.build.toplevel;
2022-05-29 02:39:40 +02:00
staging-data-hoarder."x86_64-linux" = self.nixosConfigurations.staging-data-hoarder.config.system.build.toplevel;
2022-04-29 22:15:32 +02:00
traffic-stop-box-0."x86_64-linux" = self.nixosConfigurations.traffic-stop-box-0.config.system.build.toplevel;
traffic-stop-box-3."aarch64-linux" = self.nixosConfigurations.traffic-stop-box-3.config.system.build.toplevel;
2022-08-24 15:01:35 +02:00
traffic-stop-box-3-disk."aarch64-linux" = self.nixosConfigurations.traffic-stop-box-3.config.system.build.sdImage;
2022-05-08 14:12:31 +02:00
mobile-box."x86_64-linux" = self.nixosConfigurations.mobile-box.config.system.build.toplevel;
2022-05-26 01:29:29 +02:00
mobile-box-disk."x86_64-linux" = self.nixosConfigurations.mobile-box.config.system.build.diskImage;
sops-binaries."x86_64-linux" = sops-nix.packages."x86_64-linux".sops-install-secrets;
2022-04-29 11:52:57 +02:00
};
2022-08-24 18:48:33 +02:00
};
2022-04-23 03:01:58 +02:00
}