{
  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";
    naersk.url = "github:nix-community/naersk";
    blowfish = {
      url = "github:nunocoracao/blowfish?rev=b6744efbf2d76023084498552a916b49d5a764d8";
      flake = false;
    };
  };

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

          naersk' = pkgs.callPackage naersk {};

          # sbcl' = pkgs.sbcl.withPackages (ps: with ps; [
          #   hunchentoot
          #   dexador
          #   jzon
          #   serapeum
          #   deploy
          #   spinneret
          #   lass
          #   cl-smtp
          #   log4cl
          #   cl_plus_ssl
          #   fiveam
          #   slite
          #   clack
          #   jingle
          #   lack-middleware-static
          #   lack-middleware-session
          #   lack-middleware-mount
          #   lack
          #   lack-util
          #   lack-component
          #   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 = ''
              cp -r public $out/
            '';
            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 = naersk'.buildPackage {
            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;
        }
      );
}