diff options
Diffstat (limited to 'users/wpcarro/website/default.nix')
-rw-r--r-- | users/wpcarro/website/default.nix | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/users/wpcarro/website/default.nix b/users/wpcarro/website/default.nix new file mode 100644 index 000000000000..56f5b02cc89d --- /dev/null +++ b/users/wpcarro/website/default.nix @@ -0,0 +1,77 @@ +{ 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" ]; +} |