nixos-config/flake.nix
Christoph Heiss 3af6484a0c
flake: add all custom in-repo packages to flake checks
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
2024-01-18 00:27:29 +01:00

109 lines
3.3 KiB
Nix

{
description = "c8h4.io NixOS configuration";
inputs = {
nixpkgs = {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
ref = "refs/heads/nixos-unstable";
rev = "d44d59d2b5bd694cd9d996fd8c51d03e3e9ba7f7"; # 31-12-2023
};
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.eachDefaultSystem (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 --passwd --${selector} "${name}" ./default.nix switch
'';
mkMorphBuild = selector: name:
pkgs.writeShellScript "build-${selector}-${name}" ''
set -x
${pkgs.morph}/bin/morph build --${selector} "${name}" ./default.nix
'';
mkMorphUploadSecrets = selector: name:
pkgs.writeShellScript "deploy-${selector}-${name}" ''
set -x
${pkgs.morph}/bin/morph upload-secrets --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 ]; };
});
}