110 lines
3.4 KiB
Nix
110 lines
3.4 KiB
Nix
{
|
|
description = "c8h4.io NixOS configuration";
|
|
|
|
inputs = {
|
|
nixpkgs = {
|
|
type = "github";
|
|
owner = "NixOS";
|
|
repo = "nixpkgs";
|
|
ref = "refs/heads/nixos-unstable";
|
|
rev = "bdeca2c42d6c16adc216ffb87bbe27ebebbd5705"; # 31-03-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)
|
|
// (import ./pkgs/vim-plugins.nix { } pkgs);
|
|
|
|
formatter = treefmt.config.build.wrapper;
|
|
|
|
devShells.default =
|
|
pkgs.mkShell { inputsFrom = [ treefmt.config.build.devShell ]; };
|
|
});
|
|
}
|