94 lines
2.1 KiB
Nix
94 lines
2.1 KiB
Nix
{ lib, config, ... }:
|
|
let
|
|
nixosModules = config.flake.modules.nixos;
|
|
|
|
resolvePackagePath =
|
|
{
|
|
pkgs,
|
|
path,
|
|
}:
|
|
lib.attrByPath path null pkgs;
|
|
|
|
mkCaddyReverseProxy =
|
|
{
|
|
domain,
|
|
port,
|
|
extraHeaders ? [ ],
|
|
extraConfigText ? "",
|
|
}:
|
|
let
|
|
headerLines = map (header: " header_up ${header.name} ${header.value}") extraHeaders;
|
|
extraConfigLines = map (line: " ${line}") (
|
|
lib.filter (line: line != "") (lib.splitString "\n" extraConfigText)
|
|
);
|
|
bodyLines = headerLines ++ extraConfigLines;
|
|
body = lib.concatStringsSep "\n" bodyLines;
|
|
in
|
|
{
|
|
services.caddy.virtualHosts.${domain}.extraConfig =
|
|
if body == "" then
|
|
"reverse_proxy :${toString port}"
|
|
else
|
|
''
|
|
reverse_proxy :${toString port} {
|
|
${body}
|
|
}
|
|
'';
|
|
};
|
|
|
|
mkHost =
|
|
name: machine:
|
|
{ pkgs, ... }:
|
|
let
|
|
account = config.repo.account;
|
|
accountHome = account.homeDirectory or "/home/${account.name}";
|
|
normalizedMachine = machine // {
|
|
inherit name;
|
|
displays = machine.displays or { };
|
|
hmStateVersion = machine.hmStateVersion or machine.stateVersion;
|
|
portable = machine.portable or false;
|
|
sshKeys = machine.sshKeys or { };
|
|
syncthingId = machine.syncthingId or null;
|
|
};
|
|
in
|
|
{
|
|
imports = [
|
|
nixosModules.${name}
|
|
];
|
|
|
|
facts.machine = normalizedMachine;
|
|
|
|
networking.hostName = name;
|
|
system.stateVersion = machine.stateVersion;
|
|
|
|
programs.zsh.enable = true;
|
|
|
|
users.users.${account.name} = {
|
|
isNormalUser = true;
|
|
home = accountHome;
|
|
extraGroups = [
|
|
"wheel"
|
|
"networkmanager"
|
|
];
|
|
shell = pkgs.zsh;
|
|
};
|
|
|
|
home-manager.users.${account.name} = {
|
|
home = {
|
|
username = account.name;
|
|
homeDirectory = accountHome;
|
|
stateVersion = normalizedMachine.hmStateVersion;
|
|
};
|
|
};
|
|
};
|
|
in
|
|
{
|
|
config.repo.helpers = {
|
|
inherit
|
|
mkCaddyReverseProxy
|
|
mkHost
|
|
resolvePackagePath
|
|
;
|
|
};
|
|
}
|