{
  description = "Peras Specification";

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

  outputs = { self, nixpkgs, flake-utils, ... }:
    flake-utils.lib.eachDefaultSystem
      (system:
        let
          pkgs = import nixpkgs { inherit system; };
          lib = pkgs.stdEnv.lib;
          localEmacs = (pkgs.emacs.pkgs.withPackages (epkgs: (with epkgs.melpaStablePackages; [
            epkgs.agda2-mode
          ])));
          agda-stdlib = pkgs.agdaPackages.standard-library.overrideAttrs (oldAtts: rec {
            version = "2.0";
            src = pkgs.fetchFromGitHub {
              repo = "agda-stdlib";
              owner = "agda";
              rev = "v${version}";
              sha256 = "sha256-TjGvY3eqpF+DDwatT7A78flyPcTkcLHQ1xcg+MKgCoE=";
            };
            preConfigure = ''
              runhaskell GenerateEverything.hs
              rm EverythingSafe.agda
            '';
          });
          iog-prelude = pkgs.agdaPackages.mkDerivation rec {
            pname = "iog-prelude";
            version = "0.1.0.0";
            meta = { };
            src = pkgs.fetchFromGitHub {
              repo = "iog-agda-prelude";
              owner = "input-output-hk";
              rev = "v${version}";
              sha256 = "sha256-OV2WvQkjyGcfsgj81tkk/tIWHBUKsPia1d2Lh3F8qf4=";
            };
            preConfigure = ''
              mv src/Everything.agda Everything.agda
            '';
            buildInputs = [ agda-stdlib ];
          };
          localAgda = pkgs.agda.withPackages (ps: [
            agda-stdlib
            iog-prelude
          ]);
          peras-agda = pkgs.agdaPackages.mkDerivation {
            pname = "peras-agda";
            version = "0.1";
            meta = { };
            src = ./.;
            preConfigure = ''
              echo "open import README" > Everything.agda
            '';
            buildInputs = [ localAgda ];
          };
        in
        {
          packages.default = peras-agda;
          defaultPackage = peras-agda;
          devShell = pkgs.mkShell {
            buildInputs = [
              pkgs.nixpkgs-fmt
              localAgda
              localEmacs
              pkgs.mononoki
            ];
          };
        }
      );

  nixConfig = {
    bash-prompt = "\\n\\[\\033[1;32m\\][peras-agda:\\w]\\$\\[\\033[0m\\] ";
  };
}