diff --git a/flake.lock b/flake.lock index 3a2a7ec..c2bb2da 100644 --- a/flake.lock +++ b/flake.lock @@ -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", diff --git a/flake.nix b/flake.nix index 50601a6..8c1744f 100644 --- a/flake.nix +++ b/flake.nix @@ -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; diff --git a/machines/moritz-server/configuration.nix b/machines/moritz-server/configuration.nix index 1fce48d..57a1055 100644 --- a/machines/moritz-server/configuration.nix +++ b/machines/moritz-server/configuration.nix @@ -6,6 +6,7 @@ ./reverse-proxy.nix ./ddns.nix ./mail-server.nix + ./website/root ]; time.timeZone = "Europe/Berlin"; diff --git a/machines/moritz-server/reverse-proxy.nix b/machines/moritz-server/reverse-proxy.nix index 35fd916..10649d4 100644 --- a/machines/moritz-server/reverse-proxy.nix +++ b/machines/moritz-server/reverse-proxy.nix @@ -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 'Hello World'"; + 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 'Hello World'"; }; }; "_" = { diff --git a/machines/moritz-server/website/root/.envrc b/machines/moritz-server/website/root/.envrc new file mode 100644 index 0000000..ae68aef --- /dev/null +++ b/machines/moritz-server/website/root/.envrc @@ -0,0 +1 @@ +use flake .#zola --builders "" diff --git a/machines/moritz-server/website/root/.gitignore b/machines/moritz-server/website/root/.gitignore new file mode 100644 index 0000000..98478da --- /dev/null +++ b/machines/moritz-server/website/root/.gitignore @@ -0,0 +1 @@ +themes/ diff --git a/machines/moritz-server/website/root/config.toml b/machines/moritz-server/website/root/config.toml new file mode 100644 index 0000000..d7d05a2 --- /dev/null +++ b/machines/moritz-server/website/root/config.toml @@ -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/"} +] diff --git a/machines/moritz-server/website/root/content/_index.md b/machines/moritz-server/website/root/content/_index.md new file mode 100644 index 0000000..c95e864 --- /dev/null +++ b/machines/moritz-server/website/root/content/_index.md @@ -0,0 +1,3 @@ ++++ ++++ +Hello World! diff --git a/machines/moritz-server/website/root/default.nix b/machines/moritz-server/website/root/default.nix new file mode 100644 index 0000000..ee987fb --- /dev/null +++ b/machines/moritz-server/website/root/default.nix @@ -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}"; +}