{
  description = "pub.solar NixOS flake";

  nixConfig.extra-experimental-features = "nix-command flakes";

  inputs = {
    # Track channels with commits tested and built by hydra
    nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05";
    unstable.url = "github:nixos/nixpkgs/nixos-unstable";

    flake-compat.url = "github:edolstra/flake-compat";
    flake-compat.flake = false;

    nix-darwin.url = "github:lnl7/nix-darwin/master";
    nix-darwin.inputs.nixpkgs.follows = "nixpkgs";

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

    flake-parts.url = "github:hercules-ci/flake-parts";
    nixos-flake.url = "github:srid/nixos-flake";

    deploy-rs.url = "github:serokell/deploy-rs";
    deploy-rs.inputs.nixpkgs.follows = "nixpkgs";
    deploy-rs.inputs.flake-compat.follows = "flake-compat";

    agenix.url = "github:ryantm/agenix";
    agenix.inputs.nixpkgs.follows = "nixpkgs";
    agenix.inputs.darwin.follows = "nix-darwin";

    nixos-hardware.url = "github:nixos/nixos-hardware";
    master.url = "github:nixos/nixpkgs/master";

    # hensoko additions
    musnix.url = "github:musnix/musnix";
    musnix.inputs.nixpkgs.follows = "nixpkgs";

    nixpkgs-hensoko.url = "git+https://git.b12f.io/hensoko/nixpkgs";

    factorio-pr.url = "github:werner291/nixpkgs/master";
  };

  outputs = inputs@{ self, ... }:
    inputs.flake-parts.lib.mkFlake { inherit inputs; } {
      systems = [
        "x86_64-linux"
        "aarch64-linux"
        "x86_64-darwin"
        "aarch64-darwin"
      ];

      imports = [
        inputs.nixos-flake.flakeModule
        ./lib
        ./modules
        ./hosts
        ./users
      ];

      perSystem = args@{ system, pkgs, config, ... }: {
        _module.args = {
          inherit inputs;
          pkgs = import inputs.nixpkgs {
            inherit system;
            overlays = [
              inputs.agenix.overlays.default
            ];
          };

          unstable = import inputs.unstable { inherit system; };
          master = import inputs.master { inherit system; };
        };

        devShells.default = pkgs.mkShell {
          buildInputs = with pkgs; [
            deploy-rs
            nixpkgs-fmt
            agenix
            cachix
            editorconfig-checker
            nix
            nodePackages.prettier
            nvfetcher
            shellcheck
            shfmt
            treefmt
            nixos-generators
          ];
        };
      };

      flake = {
        deploy.nodes = self.pub-solar-os.lib.deploy.mkDeployNodes self.nixosConfigurations {
          companion = {
            sshUser = "iot";
          };
          cox = {
            sshUser = "iot";
          };
          falcone = {
            sshUser = "iot";
          };
          giggles = {
            sshUser = "iot";
          };

          norman = {};

          harrison = {
            sshUser = "iot";
          };

          surfplace = {
            sshUser = "iot";
          };
        };
      };
    };
}