{
  description = "Simple flutter and dart flake, creating the fart stack";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  inputs.flake-utils.url = "github:numtide/flake-utils";

  outputs = {
    flake-utils,
    nixpkgs,
    ...
  }:
    flake-utils.lib.eachDefaultSystem (system: let
      lib = nixpkgs.lib;
      pkgs = import nixpkgs {
        inherit system;
        config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
          "android-studio-stable"
        ];
      };
    in {
      devShell = pkgs.mkShell {
          buildInputs = with pkgs; [
            flutter
            dart
            clang
            cmake
            ninja
            pkg-config
            gtk3
            pcre
            libepoxy

            # This group all seem not strictly necessary -- commands like
            # `flutter run -d linux` seem to *work* fine without them, but
            # the build does print messages about missing packages, like:
            #   Package mount was not found in the pkg-config search path.
            #   Perhaps you should add the directory containing `mount.pc'
            #   to the PKG_CONFIG_PATH environment variable
            # To add to this list on NixOS upgrades, the Nix package
            # `nix-index` is handy: then `nix-locate mount.pc`.
            libuuid  # for mount.pc
            xorg.libXdmcp.dev
            python310Packages.libselinux.dev # for libselinux.pc
            libsepol.dev
            libthai.dev
            libdatrie.dev
            libxkbcommon.dev
            dbus.dev
            at-spi2-core.dev
            xorg.libXtst.out
            pcre2.dev

            jdk11
            android-studio
            android-tools
          ];
          shellHook = ''
            export PATH="$PATH":"$HOME/.pub-cache/bin"
            echo -e "\e[44m                          \e[0m"
            echo "   FartStack Enabled 💨"
            echo -e "\e[44m                          \e[0m"
          '';
        };
    });
}