summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix68
1 files changed, 68 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..42ff254
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,68 @@
+{
+ description = "Witryna - Git-based static site deployment orchestrator";
+
+ inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
+
+ outputs = { self, nixpkgs }:
+ let
+ supportedSystems = [ "x86_64-linux" "aarch64-linux" ];
+ forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
+ in
+ {
+ packages = forAllSystems (system:
+ let pkgs = nixpkgs.legacyPackages.${system}; in
+ {
+ witryna = pkgs.rustPlatform.buildRustPackage {
+ pname = "witryna";
+ version = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.version;
+ src = ./.;
+ cargoLock.lockFile = ./Cargo.lock;
+ nativeBuildInputs = [ pkgs.installShellFiles pkgs.pkg-config ];
+ buildInputs = [ pkgs.openssl ];
+ nativeCheckInputs = [ pkgs.git ];
+ postInstall = ''
+ installManPage man/witryna.1
+ installManPage man/witryna.toml.5
+ mkdir -p $out/share/doc/witryna/examples
+ cp -r examples/* $out/share/doc/witryna/examples/
+ cp README.md $out/share/doc/witryna/
+ '';
+ meta = with pkgs.lib; {
+ description = "Minimalist Git-based static site deployment orchestrator";
+ homepage = "https://git.craftknight.com/dawid/witryna";
+ license = licenses.mit;
+ mainProgram = "witryna";
+ };
+ };
+ default = self.packages.${system}.witryna;
+ }
+ );
+
+ nixosModules.witryna = import ./nix/module.nix self;
+ nixosModules.default = self.nixosModules.witryna;
+
+ # NixOS VM test - verifies the module works
+ checks.x86_64-linux.nixos-test = nixpkgs.legacyPackages.x86_64-linux.nixosTest {
+ name = "witryna";
+ nodes.machine = { pkgs, ... }: {
+ imports = [ self.nixosModules.witryna ];
+ environment.systemPackages = [ pkgs.podman ];
+ virtualisation.podman.enable = true;
+ services.witryna = {
+ enable = true;
+ configFile = pkgs.writeText "witryna.toml" ''
+ listen_address = "127.0.0.1:8080"
+ base_dir = "/var/lib/witryna"
+ log_dir = "/var/log/witryna"
+ log_level = "debug"
+ container_runtime = "podman"
+ '';
+ };
+ };
+ testScript = ''
+ machine.wait_for_unit("witryna.service")
+ machine.succeed("curl -sf http://127.0.0.1:8080/health")
+ '';
+ };
+ };
+}