{
  inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    naersk.url = "github:nix-community/naersk";
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  };

  outputs = {
    self,
    flake-utils,
    naersk,
    nixpkgs,
  }:
    flake-utils.lib.eachDefaultSystem (
      system: let
        pkgs = (import nixpkgs) {
          inherit system;
        };

        naersk' = pkgs.callPackage naersk {};
      in rec {
        defaultPackage = naersk'.buildPackage {
          src = ./.;
          buildInputs = with pkgs; [dbus];
          nativeBuildInputs = with pkgs; [pkg-config];
        };

        devShell = pkgs.mkShell {
          buildInputs = with pkgs; [dbus];
          nativeBuildInputs = with pkgs; [rustc cargo rust-analyzer pkg-config clippy];
        };

        formatter = nixpkgs.legacyPackages.${system}.alejandra;
      }
    )
    // {
      nixosModules.home-manager.nm-reactor = import ./home-manager.nix self;
    };
}