about summary refs log tree commit diff
path: root/users/wpcarro/website/default.nix
{ pkgs, depot, ... }:

let
  inherit (builtins) readFile;
  inherit (depot.users) wpcarro;

  domain = "billandhiscomputer.com";

  globalVars = {
    inherit domain;
    homepage = "https://${domain}/";
    blog = "https://${domain}/blog";
    habits = "https://${domain}/habits";
    github = "https://github.com/wpcarro";
    linkedin = "https://linkedin.com/in/williampatrickcarroll";
    depotWork = "https://cs.tvl.fyi/depot/-/blob/users/wpcarro";
  };

  renderTemplate = src: vars: pkgs.substituteAll (globalVars // vars // {
    inherit src;
  });

  withBrand = contentHtml: renderTemplate ./fragments/template.html {
    inherit contentHtml;
  };

  # Create a simple static file server using nginx to serve `content`.
  nginxCfgFor = content: pkgs.writeText "nginx.conf" ''
    user nobody nobody;
    daemon off;
    error_log /dev/stdout info;
    pid /dev/null;
    events {}
    http {
      server {
        listen 8080;
        location / {
          root ${content};
        }
      }
    }
  '';
in
rec {
  inherit domain renderTemplate withBrand;

  content = pkgs.runCommand "wpcarro.dev" { } ''
    mkdir -p $out

    # /
    cp ${withBrand (readFile (renderTemplate ./fragments/homepage.html {}))} $out/index.html

    # /habits
    mkdir -p $out/habits
    cp -r ${wpcarro.website.habit-screens} $out/habits/index.html

    # /blog
    cp -r ${wpcarro.website.blog} $out/blog
  '';

  # Create a docker image suitable for Google Cloud Run (to save costs).
  image = pkgs.dockerTools.buildLayeredImage {
    name = "website";
    tag = "latest";
    contents = [ pkgs.fakeNss ];
    extraCommands = ''
      mkdir -p tmp/nginx_client_body
      mkdir -p var/log/nginx
    '';
    config = {
      Cmd = [ "${pkgs.nginx}/bin/nginx" "-c" (nginxCfgFor content) ];
      ExposedPorts = { "8080/tcp" = { }; };
    };
  };

  meta.ci.targets = [ "root" "image" ];
}