{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/c0b0e0fddf73fd517c3471e546c0df87a42d53f4";
    utils.url = "github:numtide/flake-utils";
    flake-parts = {
      inputs = {
        nixpkgs-lib.follows = "nixpkgs";
      };
    };
  };

  outputs =
    inputs@{
      flake-parts,
      self,
      ...
    }:
    flake-parts.lib.mkFlake { inherit inputs; } (
      { withSystem, ... }:
      {
        systems = [
          "x86_64-linux"
          "aarch64-linux"
        ];
        perSystem =
          {
            pkgs,
            lib,
            self',
            system,
            config,
            ...
          }:
          let
            gtk-deps = with pkgs; [
              glib.dev
              gtk4.dev
              gobject-introspection
              cairo
              libnma-gtk4
              pango
              gdk-pixbuf
              graphene
              freetype
              networkmanager
            ];
          in
          {
            formatter = pkgs.nixfmt-rfc-style;

            devShells.default = pkgs.mkShell {
              buildInputs =
                (with pkgs; [
                  cargo
                  rustc
                  rustfmt
                  pre-commit
                  rustPackages.clippy
                  pkg-config
                  gir-rs
                  nushell
                  rust-analyzer
                ])
                ++ gtk-deps;

              LD_LIBRARY_PATH = lib.makeLibraryPath gtk-deps;

              GIR_DIRS = lib.makeSearchPathOutput "dev" "share/gir-1.0" (
                with pkgs;
                [
                  networkmanager
                  libnma-gtk4
                ]
              );

              RUST_SRC_PATH = pkgs.rustPlatform.rustLibSrc;
            };
          };
      }
    );
}
