4o1x5.dev/content/post/guides/nix/setting-up-a-hugo-site-using-nix/index.en.md
2024-04-28 11:42:37 +02:00

83 lines
1.7 KiB
Markdown

---
title: Setting up a SSG on NixOs with nginx
description: Using hugo we can compile a project into a static site which can be later served with Nginx
date: 2024-04-24 00:00:00+0000
image: daniele-levis-pelusi-YKsqkazGaOw-unsplash.jpg
categories:
- Nix
- Guide
tags:
- Nix
- Nginx
- Short
- Hugo
draft: false
---
## Overview
After conducting research and finding insufficient guidance online on how to properly set up a Hugo site
with nginx, I decided to create my own guide. I will provide you with step-by-step instructions on how to
compile your Hugo project into a static site, which can then be served through nginx's `root` option.
## Defining the derivation to build the site
```nix
# /website/default.nix
{ pkgs }:
pkgs.stdenv.mkDerivation rec {
name = "website";
version = "0.1.0";
src = /home/user/website;
buildInputs = with pkgs; [ hugo ];
dontConfigure = true;
buildPhase = ''
cp -r $src/* .
${pkgs.hugo}/bin/hugo
'';
installPhase = ''
mkdir -p $out
cp -r public/* $out/
'';
}
```
## Setting up Nginx
```nix
# /services/nginx.nix
{...}: {
services.nginx = {
enable = true;
virtualHosts = {
"example.com" = {
forceSSL = true;
enableACME = true;
locations."/" = {
# Relative path to current file
root = pkgs.callPackage ../website/default.nix { };
};
# setting error page as hugo error page
extraConfig = ''
error_page 404 /404.html;
'';
};
};
};
}
```
## Rebuild the system
After importing this module to your `flake.nix`/`configuration.nix` you can rebuild the system and see that the site is up!
```bash
sudo nixos-rebuild switch
```