{
  description = "Configuration for NAS Server";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    disko = {
      url = "github:nix-community/disko";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    agenix = {
      url = "github:ryantm/agenix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    simple-nixos-mailserver = {
      url = "gitlab:simple-nixos-mailserver/nixos-mailserver";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    microvm = {
      url = "github:astro/microvm.nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = {
    self,
    nixpkgs,
    ...
  } @ inputs: let
    lib = import ./lib {
      inherit nixpkgs;
      inherit self;
    };
    system = "x86_64-linux";
    pkgs = import nixpkgs {inherit system;};
  in {
    formatter.${system} = pkgs.alejandra;

    nixosConfigurations = let
      modules = [
        inputs.disko.nixosModules.default
        inputs.agenix.nixosModules.default
        inputs.home-manager.nixosModules.default
        inputs.simple-nixos-mailserver.nixosModule
        inputs.microvm.nixosModules.microvm
        {microvm.hypervisor = "qemu";}
      ];
    in {
      server-vm = nixpkgs.lib.nixosSystem {
        specialArgs = {inherit inputs lib;};
        modules =
          [
            (import ./disko.nix {
              lib = pkgs.lib;
              swap-size = "16G";
              root-disk = "/dev/vda";
              raid-disks = [
                "vdb"
                "vdc"
                "vdd"
              ];
            })

            ./vm-hardware-configuration.nix
            ./configuration.nix
          ]
          ++ modules;
      };

      server = nixpkgs.lib.nixosSystem {
        specialArgs = {inherit inputs lib;};
        modules =
          [
            (import ./disko.nix {
              lib = pkgs.lib;
              swap-size = "128G";
              root-disk = "/dev/nvme0n1";
              raid-disks = [
                # "sda"
                # "sdb"
                # "sdc"
                # "sdd"
              ];
            })

            ./modules/networking-metal.nix
            ./hardware-configuration.nix
            ./configuration.nix
          ]
          ++ modules;
      };
    };
  };
}