{
  description = "Fabric is an open-source framework for augmenting humans using AI. It provides a modular framework for solving specific problems using a crowdsourced set of AI prompts that can be used anywhere";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    systems.url = "github:nix-systems/default";

    treefmt-nix = {
      url = "github:numtide/treefmt-nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    gomod2nix = {
      url = "github:nix-community/gomod2nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    {
      self,
      nixpkgs,
      systems,
      treefmt-nix,
      gomod2nix,
      ...
    }:
    let
      forAllSystems = nixpkgs.lib.genAttrs (import systems);

      getGoVersion = system: nixpkgs.legacyPackages.${system}.go_latest;

      treefmtEval = forAllSystems (
        system:
        let
          pkgs = nixpkgs.legacyPackages.${system};
        in
        treefmt-nix.lib.evalModule pkgs (
          { ... }:
          {
            imports = [ ./nix/treefmt.nix ];
            # Set environment variable to prevent Go toolchain auto-download
            settings.global.excludes = [ ];
          }
        )
      );
    in
    {
      formatter = forAllSystems (system: treefmtEval.${system}.config.build.wrapper);

      checks = forAllSystems (system: {
        formatting = treefmtEval.${system}.config.build.check self;
      });

      devShells = forAllSystems (
        system:
        let
          pkgs = nixpkgs.legacyPackages.${system};
          goVersion = getGoVersion system;
          goEnv = gomod2nix.legacyPackages.${system}.mkGoEnv {
            pwd = ./.;
            go = goVersion;
          };
        in
        import ./nix/shell.nix {
          inherit pkgs goEnv goVersion;
          inherit (gomod2nix.legacyPackages.${system}) gomod2nix;
        }
      );

      packages = forAllSystems (
        system:
        let
          pkgs = nixpkgs.legacyPackages.${system};
          goVersion = getGoVersion system;
          fabricSlim = pkgs.callPackage ./nix/pkgs/fabric {
            go = goVersion;
            inherit self;
            inherit (gomod2nix.legacyPackages.${system}) buildGoApplication;
          };
          fabric = pkgs.symlinkJoin {
            name = "fabric-${fabricSlim.version}";
            inherit (fabricSlim) version;
            paths = [
              fabricSlim
              pkgs.yt-dlp
            ];
            nativeBuildInputs = [ pkgs.makeWrapper ];
            postBuild = ''
              wrapProgram $out/bin/fabric \
                --prefix PATH : $out/bin
            '';
            meta = fabricSlim.meta // {
              description = "${fabricSlim.meta.description} (includes yt-dlp)";
              mainProgram = "fabric";
            };
          };
        in
        {
          default = fabric;
          inherit fabric;
          "fabric-slim" = fabricSlim;
          inherit (gomod2nix.legacyPackages.${system}) gomod2nix;
        }
      );
    };
}
