{
  description = "Flake to build and develop Nyxi";

  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 {};

        # Setting variables that everything uses
        LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
        CLANG_PATH = "${pkgs.llvmPackages.clang}/bin/clang";

      in rec {
        # For `nix build` & `nix run`:
        defaultPackage = naersk'.buildPackage {
          inherit LIBCLANG_PATH CLANG_PATH;
          buildInputs = with pkgs; [ pkg-config openssl ];
          nativeBuildInputs = with pkgs; [ util-linux.dev ];
          src = ./.;
        };

        # For `nix develop` (optional, can be skipped):
        devShell = pkgs.mkShell {
          inherit LIBCLANG_PATH CLANG_PATH;
          buildInputs = with pkgs; [ pkg-config openssl ];
          nativeBuildInputs = with pkgs; [ rustc cargo util-linux.dev ];
        };
      }
    );
}