feat: add static website

This commit is contained in:
Moritz Böhme 2025-05-16 09:57:24 +02:00
parent b714d906d8
commit d4e8bde4cd
No known key found for this signature in database
GPG key ID: 970C6E89EB0547A9
9 changed files with 110 additions and 11 deletions

19
flake.lock generated
View file

@ -1137,7 +1137,8 @@
"nur": "nur",
"pre-commit-hooks": "pre-commit-hooks",
"stable": "stable",
"timers": "timers"
"timers": "timers",
"zola-theme": "zola-theme"
}
},
"rust-analyzer-src": {
@ -1402,6 +1403,22 @@
"repo": "xwayland-satellite",
"type": "github"
}
},
"zola-theme": {
"flake": false,
"locked": {
"lastModified": 1745542545,
"narHash": "sha256-hXNJaz/F5t1ZwbCq61eMxoA8MlKZM8ZXoyMJb27+5QI=",
"owner": "Speyll",
"repo": "anemone",
"rev": "b5ecf8e3063c9e57c2d83b90ffd67b5037bba395",
"type": "github"
},
"original": {
"owner": "Speyll",
"repo": "anemone",
"type": "github"
}
}
},
"root": "root",

View file

@ -57,6 +57,9 @@
# Firefox user.js
arkenfox-userjs.url = "github:arkenfox/user.js";
arkenfox-userjs.flake = false;
zola-theme.url = "github:Speyll/anemone";
zola-theme.flake = false;
};
outputs = inputs @ {flake-parts, ...}:
@ -78,9 +81,23 @@
pkgs,
...
}: {
devShells.default = pkgs.mkShell {
inherit (config.pre-commit.devShell) shellHook nativeBuildInputs;
packages = [inputs'.clan-core.packages.clan-cli pkgs.alejandra];
devShells = rec {
default = pkgs.mkShell {
inherit (config.pre-commit.devShell) shellHook nativeBuildInputs;
packages = [inputs'.clan-core.packages.clan-cli pkgs.alejandra];
};
zola = let
theme = inputs.zola-theme;
themeName = (builtins.fromTOML (builtins.readFile "${theme}/theme.toml")).name;
in
pkgs.mkShell {
inputsFrom = [default];
packages = [pkgs.zola];
shellHook = ''
mkdir themes
ln -s ${inputs.zola-theme} themes/${themeName}
'';
};
};
pre-commit.settings.hooks = {
alejandra.enable = true;

View file

@ -6,6 +6,7 @@
./reverse-proxy.nix
./ddns.nix
./mail-server.nix
./website/root
];
time.timeZone = "Europe/Berlin";

View file

@ -1,4 +1,8 @@
{config, ...}: {
{
config,
lib,
...
}: {
services.fail2ban = {
enable = true;
bantime-increment.enable = true;
@ -63,17 +67,17 @@
forceSSL = true;
useACMEHost = "any.moritz.place";
locations."/" = {
extraConfig = ''
add_header Content-Type text/html;
'';
return = "200 '<html><body>Hello World</body></html>'";
return = "301 https://moritz.place";
};
};
"moritz.place" = {
forceSSL = true;
useACMEHost = "moritz.place";
locations."/" = {
return = "301 https://www.moritz.place";
locations."/" = lib.mkDefault {
extraConfig = ''
add_header Content-Type text/html;
'';
return = "200 '<html><body>Hello World</body></html>'";
};
};
"_" = {

View file

@ -0,0 +1 @@
use flake .#zola --builders ""

View file

@ -0,0 +1 @@
themes/

View file

@ -0,0 +1,29 @@
# The URL the site will be built for
base_url = "https://moritz.place"
# The site title and description; used in feeds by default.
title = "Moritz Place on the Internet"
description = "Stay a while :)"
# Whether to automatically compile all Sass files in the sass directory
compile_sass = true
# Whether to build a search index to be used later on by a JavaScript library
build_search_index = true
# The site theme to use.
theme = "anemone"
[markdown]
# Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
highlight_code = true
[extra]
# Put all your custom variables here
header_nav = [
{ url = "/", name_en = "/home/"},
# { url = "/about", name_en = "/about/"},
# { url = "/journal", name_en = "/journal/"},
# { url = "/blog", name_en = "/blog/"}
]

View file

@ -0,0 +1,3 @@
+++
+++
Hello World!

View file

@ -0,0 +1,26 @@
{
pkgs,
inputs,
lib,
...
}: let
theme = inputs.zola-theme;
themeName = (builtins.fromTOML (builtins.readFile "${theme}/theme.toml")).name;
package = pkgs.stdenv.mkDerivation {
name = "static-website";
src = with lib.fileset;
toSource {
root = ./.;
fileset = difference (gitTracked ./.) (unions [./default.nix ./.envrc]);
};
nativeBuildInputs = [pkgs.zola];
configurePhase = ''
mkdir themes
ln -s ${theme} themes/${themeName}
'';
buildPhase = "zola build";
installPhase = "cp -r public $out";
};
in {
services.nginx.virtualHosts."moritz.place".locations."/".root = "${package}";
}