strato-infra/nixos/flake.nix

165 lines
4.5 KiB
Nix

{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05";
colmena = {
url = "github:zhaofengli/colmena";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-generators = {
url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, colmena, nixos-generators, ... }:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
machine = name: machineTagged name [ ];
machineTagged = name: tags: {
imports = [ "${./.}/machines/${name}" ];
deployment = {
targetHost = "${name}.lxd";
tags = tags;
};
};
in {
packages.x86_64-linux.hello = pkgs.hello;
packages.x86_64-linux.default = colmena.packages.x86_64-linux.colmena;
packages.x86_64-linux.register = let
lxc = nixos-generators.nixosGenerate {
pkgs = pkgs;
modules = [ ./machines/base ];
format = "lxc";
};
metadata = nixos-generators.nixosGenerate {
pkgs = pkgs;
modules = [ ./machines/base ];
format = "lxc-metadata";
};
in with import nixpkgs { system = "x86_64-linux"; };
stdenv.mkDerivation {
name = "register-lxc-container";
buildInputs = [ ];
src = self;
buildPhase =
"mkdir -p $out; ln -s ${lxc} $out/lxc; ln -s ${metadata} $out/metadata";
installPhase = ''
ln -s $out/lxc/tarball/nixos-system-x86_64-linux.tar.xz $out/lxc.tar.xz;
ln -s $out/metadata/tarball/nixos-system-x86_64-linux.tar.xz $out/metadata.tar.xz;
'';
};
packages.x86_64-linux.vm = let
vm = nixos-generators.nixosGenerate {
pkgs = pkgs;
modules = [ ./machines/base ];
format = "qcow";
};
metadata = nixos-generators.nixosGenerate {
pkgs = pkgs;
modules = [ ./machines/base ];
format = "lxc-metadata";
};
in with import nixpkgs { system = "x86_64-linux"; };
stdenv.mkDerivation {
name = "make-nixos-vm";
buildInputs = [ ];
src = self;
buildPhase =
"mkdir -p $out; ln -s ${vm} $out/vm; ln -s ${metadata} $out/metadata";
installPhase =
"ln -s $out/vm/nixos.qcow2 $out/nixos.qcow2;ln -s $out/metadata/tarball/nixos-system-x86_64-linux.tar.xz $out/metadata.tar.xz;";
};
colmena = {
meta = { nixpkgs = import nixpkgs { system = "x86_64-linux"; }; };
nginx = {
imports = [ ./machines/nginx ];
deployment = {
targetHost = "nginx.lxd";
tags = [ "website" ];
};
};
postgres = {
imports = [ ./machines/postgres ];
deployment = {
targetHost = "postgres.lxd";
tags = [ "database" ];
};
};
gitea = {
imports = [ ./machines/gitea ];
deployment = {
targetUser = "jdejeu";
targetHost = "gitea.lxd";
tags = [ "website" "system" ];
};
};
vault = {
imports = [ ./machines/vault ];
deployment = {
targetHost = "vault.lxd";
tags = [ "website" "system" ];
};
};
minio = {
imports = [ ./machines/minio ];
deployment = {
targetHost = "minio.lxd";
tags = [ "system" ];
};
};
registry = {
imports = [ ./machines/registry ];
deployment = {
targetHost = "registry.lxd";
tags = [ "system" ];
};
};
vaultwarden = {
imports = [ ./machines/vaultwarden ];
deployment = {
targetHost = "vaultwarden.lxd";
tags = [ "system" ];
};
};
misskey = {
imports = [ ./machines/misskey ];
deployment = {
targetHost = "misskey.lxd";
tags = [ ];
};
};
grafana = {
imports = [ ./machines/grafana ];
deployment = {
targetHost = "grafana.lxd";
tags = [ ];
};
};
prometheus = machine "prometheus";
};
devShells.x86_64-linux.default = pkgs.mkShell {
buildInputs = [
colmena.packages.x86_64-linux.colmena
pkgs.jq
pkgs.bundix
pkgs.nix-prefetch-git
];
};
};
}