nixos-config/flake.nix
2024-03-05 10:46:38 +01:00

109 lines
3.4 KiB
Nix

{
description = "c8h4.io NixOS configuration";
inputs = {
nixpkgs = {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
ref = "refs/heads/nixos-unstable";
rev = "11a19b61065a7165c763688be3d1f63859389ba5"; # 29-02-2024
};
flake-utils.url = "github:numtide/flake-utils";
treefmt-nix = {
url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, flake-utils, treefmt-nix, ... }:
flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system:
let
pkgs = import nixpkgs { inherit system; };
inherit (pkgs) lib;
treefmt = treefmt-nix.lib.evalModule pkgs {
projectRootFile = "flake.nix";
programs = {
nixfmt.enable = true;
stylua.enable = true;
statix.enable = true;
deadnix.enable = true;
shellcheck.enable = true;
};
};
mkMorphDeploy = selector: name:
pkgs.writeShellScript "deploy-${selector}-${name}" ''
set -x
${pkgs.morph}/bin/morph deploy --show-trace --passwd --${selector} "${name}" ./default.nix switch
'';
mkMorphBuild = selector: name:
pkgs.writeShellScript "build-${selector}-${name}" ''
set -x
${pkgs.morph}/bin/morph build --show-trace --${selector} "${name}" ./default.nix
'';
mkMorphUploadSecrets = selector: name:
pkgs.writeShellScript "deploy-${selector}-${name}" ''
set -x
${pkgs.morph}/bin/morph upload-secrets --show-trace --passwd --${selector} "${name}" ./default.nix
'';
mkStandaloneHmDeploy = name:
pkgs.writeShellScript "standalone-hm-deploy-${name}" ''
set -x
${pkgs.home-manager}/bin/home-manager \
--flake ./system/home-manager/standalone/${name} \
switch -b bak
'';
machines = [ "back" "fort" "tank" "trek" "zero" ];
tags = [ "baremetal" "desktop" "external" "homelab" "server" "vm" ];
in {
apps = (builtins.listToAttrs (map (name: {
inherit name;
value = {
type = "app";
program = "${mkMorphDeploy "on" name}";
};
}) machines)) // {
tags = builtins.listToAttrs (map (name: {
inherit name;
value = {
type = "app";
program = "${mkMorphDeploy "tagged" name}";
};
}) tags);
build = builtins.listToAttrs (map (name: {
inherit name;
value = {
type = "app";
program = "${mkMorphBuild "on" name}";
};
}) machines);
upload-secrets = builtins.listToAttrs (map (name: {
inherit name;
value = {
type = "app";
program = "${mkMorphUploadSecrets "on" name}";
};
}) machines);
maui = {
type = "app";
program = "${mkStandaloneHmDeploy "maui"}";
};
};
checks = {
formatting = treefmt.config.build.check self;
} // (import ./pkgs { } pkgs);
formatter = treefmt.config.build.wrapper;
devShells.default =
pkgs.mkShell { inputsFrom = [ treefmt.config.build.devShell ]; };
});
}