colmena/flake.nix

137 lines
3.9 KiB
Nix
Raw Normal View History

{
description = "A simple, stateless NixOS deployment tool modeled after NixOps.";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
stable.url = "github:NixOS/nixpkgs/nixos-24.11";
nix-github-actions = {
url = "github:nix-community/nix-github-actions";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};
outputs = {
self,
nixpkgs,
stable,
flake-utils,
nix-github-actions,
...
} @ inputs: let
supportedSystems = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
colmenaOptions = import ./src/nix/hive/options.nix;
colmenaModules = import ./src/nix/hive/modules.nix;
in flake-utils.lib.eachSystem supportedSystems (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [
];
};
in rec {
# We still maintain the expression in a Nixpkgs-acceptable form
2021-09-19 22:03:39 -07:00
defaultPackage = self.packages.${system}.colmena;
packages = rec {
colmena = pkgs.callPackage ./package.nix { };
2021-11-18 13:15:20 -08:00
# Full user manual
manual = let
suppressModuleArgsDocs = { lib, ... }: {
options = {
_module.args = lib.mkOption {
internal = true;
};
};
};
colmena = self.packages.${system}.colmena;
deploymentOptionsMd = (pkgs.nixosOptionsDoc {
inherit (pkgs.lib.evalModules {
modules = [ colmenaOptions.deploymentOptions suppressModuleArgsDocs];
specialArgs = { name = "nixos"; nodes = {}; };
}) options;
2022-01-01 16:41:35 -08:00
}).optionsCommonMark;
metaOptionsMd = (pkgs.nixosOptionsDoc {
inherit (pkgs.lib.evalModules {
modules = [ colmenaOptions.metaOptions suppressModuleArgsDocs];
}) options;
2022-01-01 16:41:35 -08:00
}).optionsCommonMark;
in pkgs.callPackage ./manual {
inherit colmena deploymentOptionsMd metaOptionsMd;
};
2021-11-18 13:15:20 -08:00
# User manual without the CLI reference
manualFast = manual.override { colmena = null; };
2021-11-18 13:15:20 -08:00
# User manual with the version treated as stable
manualForceStable = manual.override { unstable = false; };
};
defaultApp = self.apps.${system}.colmena;
2022-06-02 16:39:45 -07:00
apps.default = self.apps.${system}.colmena;
apps.colmena = {
type = "app";
program = "${defaultPackage}/bin/colmena";
};
devShell = pkgs.mkShell {
RUST_SRC_PATH = "${pkgs.rustPlatform.rustcSrc}/library";
NIX_PATH = "nixpkgs=${pkgs.path}";
2022-03-07 22:02:04 -08:00
inputsFrom = [ defaultPackage packages.manualFast ];
packages = with pkgs; [
bashInteractive
2022-06-24 17:34:37 -07:00
editorconfig-checker
2022-08-16 20:15:43 -06:00
clippy rust-analyzer cargo-outdated cargo-audit rustfmt
2022-06-24 17:34:37 -07:00
python3 python3Packages.flake8
2022-03-07 22:02:04 -08:00
];
};
checks = let
inputsOverlay = final: prev: {
_inputs = inputs;
};
in if pkgs.stdenv.isLinux then import ./integration-tests {
pkgs = import nixpkgs {
inherit system;
overlays = [
self.overlays.default
inputsOverlay
];
};
pkgsStable = import stable {
inherit system;
overlays = [
self.overlays.default
inputsOverlay
];
};
} else {};
2021-09-19 22:03:39 -07:00
}) // {
overlay = self.overlays.default;
overlays.default = final: prev: {
colmena = final.callPackage ./package.nix { };
2021-09-19 22:03:39 -07:00
};
nixosModules = {
2022-09-18 17:27:46 -06:00
inherit (colmenaOptions) deploymentOptions metaOptions;
2022-10-22 21:34:48 -05:00
inherit (colmenaModules) keyChownModule keyServiceModule assertionModule;
};
lib.makeHive = rawHive: import ./src/nix/hive/eval.nix {
inherit rawHive colmenaOptions colmenaModules;
hermetic = true;
};
githubActions = nix-github-actions.lib.mkGithubMatrix {
checks = {
inherit (self.checks) x86_64-linux;
};
};
2021-09-19 22:03:39 -07:00
};
}