Files
homepage/flake.nix
T

145 lines
3.4 KiB
Nix
Raw Normal View History

2024-04-21 23:30:44 -05:00
# github.com/brianmcgee has lots of great ideas for going above and beyond for this
2022-10-10 16:04:24 -05:00
{
2024-04-21 22:17:01 -05:00
description = "Greg's homepage";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
2024-04-21 23:30:44 -05:00
devshell.url = "github:numtide/devshell";
2024-04-21 22:17:01 -05:00
flake-parts.url = "github:hercules-ci/flake-parts";
2024-04-21 22:39:55 -05:00
flake-root.url = "github:srid/flake-root";
2024-04-21 23:30:44 -05:00
process-compose.url = "github:Platonic-Systems/process-compose-flake";
2024-04-21 22:39:55 -05:00
treefmt-nix.url = "github:numtide/treefmt-nix";
2024-04-21 22:17:01 -05:00
};
2022-10-10 16:04:24 -05:00
2024-04-21 23:30:44 -05:00
outputs = { devshell, flake-parts, flake-root, process-compose, treefmt-nix, ... }@inputs:
2024-04-21 22:17:01 -05:00
flake-parts.lib.mkFlake { inherit inputs; } {
2024-04-21 22:39:55 -05:00
imports = [
2024-04-21 23:30:44 -05:00
inputs.devshell.flakeModule
2024-04-21 22:39:55 -05:00
inputs.flake-root.flakeModule
2024-04-21 23:30:44 -05:00
inputs.process-compose.flakeModule
2024-04-21 22:39:55 -05:00
inputs.treefmt-nix.flakeModule
];
2024-04-21 22:17:01 -05:00
flake = {
# Universal things
};
systems = [
2024-06-21 20:33:10 +00:00
"x86_64-darwin"
2024-04-21 22:17:01 -05:00
"x86_64-linux"
"aarch64-linux"
];
2024-04-22 01:12:55 -05:00
perSystem = { config, pkgs, self', ... }: let
lib = pkgs.lib;
in {
2024-04-22 01:19:49 -05:00
# https://numtide.github.io/devshell/intro.html
2024-04-21 23:30:44 -05:00
devshells.default = {
commands = [
{
package = pkgs.hugo;
category = "server";
}
{
package = self'.packages.dev-server;
category = "server";
help = "Start the development server";
}
2024-04-22 01:12:55 -05:00
{
package = self'.packages.prod-server;
category = "server";
help = "Start the prod server";
}
2024-04-21 22:17:01 -05:00
];
2024-04-21 23:30:44 -05:00
};
2024-04-22 01:19:49 -05:00
# This is not special, this is just flakes
2024-04-22 01:12:55 -05:00
packages = {
default = pkgs.dockerTools.buildLayeredImage {
name = "gregs-homepage";
tag = "latest";
contents = [
self'.packages.site
(pkgs.buildEnv {
name = "image";
paths = with pkgs; [
dockerTools.fakeNss
nginx
];
pathsToLink = [ "/bin" "/etc" "/var" ];
})
];
fakeRootCommands = ''
mkdir tmp
chmod 0777 tmp
'';
config = {
Cmd = [ (lib.getExe pkgs.nginx) "-c" self'.packages.nginx-config "-e" "stderr" ];
Port = [ 80 ];
};
};
site = pkgs.stdenv.mkDerivation {
name = "Greg's homepage";
nativeBuildInputs = [ pkgs.hugo ];
buildPhase = ''
hugo -v
'';
installPhase = ''
mkdir -p $out
cp -R public/* public/.* $out
'';
src = ./.;
};
nginx-config = pkgs.writeText "nginx.conf" ''
user root root;
worker_processes 10;
pid /tmp/nginx.pid;
daemon off;
error_log stderr;
events {
}
http {
access_log stdout;
include ${pkgs.nginx}/conf/mime.types;
server {
listen 80;
root ${self'.packages.site};
autoindex off;
}
}
'';
};
2024-04-22 01:19:49 -05:00
# https://community.flake.parts/process-compose-flake
2024-04-21 23:30:44 -05:00
process-compose = {
dev-server.settings.processes = {
2024-04-22 01:12:55 -05:00
hugo.command = "${lib.getExe pkgs.hugo} serve";
};
prod-server.settings.processes = {
import.command = "${lib.getExe pkgs.podman} load -i ${self'.packages.default}";
run = {
command = "${lib.getExe pkgs.podman} run --rm -p 8000:80 gregs-homepage:latest";
depends_on.import.condition = "process_completed_successfully";
readiness_probe.http_get = {
host = "localhost";
port = 8000;
};
};
2024-04-21 23:30:44 -05:00
};
2024-04-21 22:17:01 -05:00
};
2024-04-21 22:39:55 -05:00
2024-04-22 01:19:49 -05:00
# https://numtide.github.io/treefmt/
2024-04-21 22:39:55 -05:00
treefmt.config = {
inherit (config.flake-root) projectRootFile;
package = pkgs.treefmt;
programs = {
deadnix.enable = true;
};
settings.formatter = {
};
};
2024-04-21 22:17:01 -05:00
};
};
2022-10-10 16:04:24 -05:00
}