117 lines
3.2 KiB
Nix
117 lines
3.2 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
domain = "tecosaur.net";
|
|
in {
|
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
|
networking.firewall.allowedUDPPorts = [ 443 ];
|
|
|
|
services.caddy = mkMerge [
|
|
{
|
|
enable = true;
|
|
package = pkgs.callPackage ../packages/caddy.nix {
|
|
externalPlugins = [
|
|
{name = "caddy-fs-git"; repo = "github.com/tecosaur/caddy-fs-git";
|
|
version = "ef9d0ab232f4fe5d7e86312cbba45ff8afea98a1";}
|
|
];
|
|
};
|
|
virtualHosts."${domain}".extraConfig = ''
|
|
respond "__ __ _
|
|
\ \ / /__| | ___ ___ _ __ ___ ___
|
|
\ \ /\ / / _ \ |/ __/ _ \| '_ ` _ \ / _ \
|
|
\ V V / __/ | (_| (_) | | | | | | __/
|
|
\_/\_/ \___|_|\___\___/|_| |_| |_|\___|
|
|
|
|
This is an in-progress replacement for tecosaur.com, done better.
|
|
|
|
For now, you can find an increasing number of my projects on code.${domain},
|
|
this includes the setup for this server, which is being constructed using:
|
|
+ NixOS (with flakes and deploy-rs)
|
|
+ Caddy (web server)
|
|
+ Forgejo (personal software forge)
|
|
+ Syncthing (cross-device folder sync tool)
|
|
|
|
In future, the following may be set up too:
|
|
+ Dendrite/Conduit (Matrix servers)
|
|
+ My TMiO blog
|
|
+ Kopia (backups)
|
|
+ Koel (music streaming)
|
|
"
|
|
'';
|
|
virtualHosts."blog.${domain}".extraConfig = ''
|
|
redir /tmio /tmio/
|
|
handle_path /tmio/* {
|
|
file_server {
|
|
fs git ${config.services.forgejo.stateDir}/repositories/tec/this-month-in-org.git html
|
|
}
|
|
}
|
|
handle {
|
|
respond 404
|
|
}
|
|
'';
|
|
}
|
|
(mkIf config.services.syncthing.enable {
|
|
virtualHosts."syncthing.${domain}".extraConfig =
|
|
''
|
|
reverse_proxy ${config.services.syncthing.guiAddress} {
|
|
header_up Host {upstream_hostport}
|
|
}
|
|
'';
|
|
})
|
|
(mkIf config.services.syncthing.enable {
|
|
virtualHosts."public.${domain}".extraConfig =
|
|
''
|
|
root * ${config.services.syncthing.dataDir}/public/.build
|
|
file_server
|
|
'';
|
|
})
|
|
(mkIf config.services.forgejo.enable {
|
|
virtualHosts."git.tecosaur.net".extraConfig = "redir https://code.${domain}{uri} 301";
|
|
})
|
|
(mkIf config.services.forgejo.enable {
|
|
virtualHosts."code.${domain}".extraConfig =
|
|
''
|
|
@not_tec {
|
|
not path /tec/*
|
|
not header Cookie *caddy_tec_redirect=true*
|
|
}
|
|
handle @not_tec {
|
|
reverse_proxy localhost:${toString config.services.forgejo.settings.server.HTTP_PORT} {
|
|
@404 status 404
|
|
handle_response @404 {
|
|
header +Set-Cookie "caddy_tec_redirect=true; Max-Age=5"
|
|
redir * /tec{uri}
|
|
}
|
|
}
|
|
}
|
|
@tec_redirect {
|
|
path /tec/*
|
|
header Cookie *caddy_tec_redirect=true*
|
|
}
|
|
handle @tec_redirect {
|
|
reverse_proxy localhost:${toString config.services.forgejo.settings.server.HTTP_PORT} {
|
|
@404 status 404
|
|
handle_response @404 {
|
|
header +Set-Cookie "caddy_tec_redirect=true; Max-Age=0"
|
|
handle_path /tec/* {
|
|
redir * {uri}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
handle {
|
|
reverse_proxy localhost:${toString config.services.forgejo.settings.server.HTTP_PORT}
|
|
}
|
|
'';
|
|
})
|
|
];
|
|
|
|
users.users.caddy = {
|
|
extraGroups =
|
|
lib.optional config.services.syncthing.enable config.services.syncthing.user ++
|
|
lib.optional config.services.forgejo.enable config.services.forgejo.user;
|
|
};
|
|
}
|