{
  inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "github:nixos/nixpkgs";
  };

  outputs =
    { self
    , nixpkgs
    , flake-utils
    , ...
    }:
    let
      system = "x86_64-linux";
      pkgs = import nixpkgs { inherit system; };
    in
    {
      formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixpkgs-fmt;

      packages.${system}.default =
        pkgs.stdenv.mkDerivation
          {
            src = "./.";
            name = "birdy-0.1.8";
            inherit system;
            nativeBuildInputs = [ pkgs.cargo ];
            dontUnpack = true;
            #sourceRoot = ".";
            buildPhase = ''
              cargo build
            '';
            installPhase = ''
              mkdir -p $out/bin
              cp target/release/birdy $out/bin/birdy
              chmod +x $out
            '';
          };

      devShell.${system} = pkgs.mkShell rec {
        buildInputs = [
          pkgs.pkg-config
          # pkgs.musl
          pkgs.libxkbcommon
          pkgs.libGL
          # pkgs.xorg.libxcb
          # pkgs.glibc
          # pkgs.gcc

          # WINIT_UNIX_BACKEND=wayland
          pkgs.wayland

          # WINIT_UNIX_BACKEND=x11
          pkgs.xorg.libXcursor
          pkgs.xorg.libXrandr
          pkgs.xorg.libXi
          pkgs.xorg.libX11
        ];
        LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath buildInputs}";
      };
    };
}