{
  description = "TFC Website";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
    cl-nix-lite.url = "github:hraban/cl-nix-lite";
    rust-overlay.url = "github:oxalica/rust-overlay";
    blowfish = {
      url = "github:nunocoracao/blowfish?rev=b6744efbf2d76023084498552a916b49d5a764d8";
      flake = false;
    };
  };

  outputs = inputs: with inputs;
    flake-utils.lib.eachDefaultSystem
      (system:
        let
          pkgs = nixpkgs.legacyPackages.${system};
          src = ./.;

          sbcl' = pkgs.sbcl.withPackages (ps: with ps; [
            hunchentoot
            dexador
            jzon
            serapeum
            deploy
            spinneret
            lass
            cl-smtp
            log4cl
            cl_plus_ssl
            fiveam
            slite
            clack
            woo
            ningle
            pkgs.openssl
            pkgs.openssl.out
            pkgs.openssl.dev
          ]);
          nbi = with pkgs; [
            gcc
            stdenv
            gnumake
            gdb
            pkg-config
            makeWrapper
            openssl
            openssl.out
            openssl.dev
          ];

          bi = with pkgs; [
            git
            hugo
            go
            nodejs
            sbcl'
            clippy
            rustc
            cargo
            rustfmt
            rust-analyzer
            just
            openssl
            openssl.out
            openssl.dev
          ];

          blowfish = inputs.blowfish;

          nativeLibs = with pkgs; [
            openssl
            openssl.out
            openssl.dev
          ];

          site = pkgs.stdenv.mkDerivation rec {
            name = "site";
            version = "2.0.0";
            src = ./.;
            configurePhase = ''
              ls
              mkdir -p themes
              ls themes
              cp -r ${blowfish} themes/blowfish
              ls themes/blowfish
            '';
            buildPhase = ''
              NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit && hugo --gc --minify
              ${pkgs.hugo}/bin/hugo --minify
            '';
            installPhase = ''
              mkdir -p $out/public
              cp -r public $out/public
            '';
            buildInputs = bi;
            nativeBuildInputs = nbi;
          };
          
        in 
        {
          devShell = pkgs.mkShell {
            name = "tfc-api";
            version = "0.0.1";
            src = src;
            nativeBuildInputs = nbi;
            buildInputs = bi;
            nativeLibs = nativeLibs;
          };
          packages.default = pkgs.rustPlatform.buildRustPackage rec {
            pname = "tfcapi";
            version = "0.0.1";
            src = ./.;
            cargoBuildFlags = "";
            doCheck = false;

            cargoLock = {
              lockFile = ./Cargo.lock;
            };
            nativeBuildInputs = nbi;
            buildInputs = bi;
            fixupPhase = ''
              ls -l
              ls -l $out
              cp -r ${site}/public $out/public
            '';
          };
          packages.site = site;
        }
      );
}