nixos-systems/modules/system/frps.nix

73 lines
1.6 KiB
Nix
Raw Normal View History

{ config, configFiles, inputs, lib, pkgs, ... }:
with lib;
let
2025-10-14 03:45:43 +00:00
cfg = config.myModules.frps;
group = "frps";
user = "frps";
in {
options.myModules.frps = {
2025-10-14 18:55:30 +00:00
domains = mkOption {
2025-10-14 03:45:43 +00:00
type = types.listOf types.str;
2025-10-14 18:55:30 +00:00
description = "All the domains to handle";
2025-10-14 03:45:43 +00:00
};
2025-10-14 18:55:30 +00:00
enable = mkEnableOption "custom frps configuration";
};
config = mkIf config.myModules.frps.enable {
2025-10-13 17:10:22 +00:00
environment = {
etc."frps.toml".source = "${configFiles}/frps/frps.toml";
systemPackages = [
pkgs.frp
];
};
2025-10-14 03:45:43 +00:00
services.caddy.virtualHosts = mkMerge (
2025-10-14 18:55:30 +00:00
map (domain: {
"${domain}" = {
2025-10-14 03:45:43 +00:00
extraConfig = ''
reverse_proxy [::1]:8000
'';
};
2025-10-14 18:55:30 +00:00
}) cfg.domains
2025-10-14 03:45:43 +00:00
);
sops.secrets.frps-env = {
format = "dotenv";
group = "${group}";
mode = "0440";
owner = "${user}";
restartUnits = [];
sopsFile = ../../secrets/frps.env;
};
systemd.services.frps = {
after=["network.target" "network-online.target"];
description="FRP server process";
environment = {
FRPS_BIND_PORT="7000";
FRPS_VHOST_HTTP_PORT="8000";
};
requires=["network-online.target"];
restartIfChanged = true;
restartTriggers = [
config.environment.etc."frps.toml".source
];
stopIfChanged = true;
serviceConfig = {
EnvironmentFile = "/var/run/secrets/frps-env";
Type = "simple";
User = "${user}";
Group = "${group}";
ExecStart = "${pkgs.frp}/bin/frps -c /etc/frps.toml";
TimeoutStopSec = "5s";
PrivateTmp = true;
WorkingDirectory = "/tmp";
};
wantedBy = ["multi-user.target"];
};
users.groups.${group} = {};
users.users.${user} = {
group = "${group}";
isNormalUser = false;
isSystemUser = true;
2025-10-13 17:10:22 +00:00
};
};
}