my nix configs for my servers and desktop

blep

Changed files
+30 -13
hosts
modules
caddy
+11
hosts/morax/default.nix
···
../../host-secrets.nix
];
system.stateVersion = "25.05";
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
···
../../host-secrets.nix
];
+
# Enable modules
+
modules.caddy.enable = true;
+
modules.garage.enable = true;
+
+
modules.caddy = {
+
email = "ana@nekomimi.pet";
+
reverseProxies = {
+
"s3.nkp.pet" = ["valefar:3900" "morax:3900"];
+
};
+
};
+
system.stateVersion = "25.05";
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
+5
hosts/morax/hardware.nix
···
fsType = "ext4";
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
···
fsType = "ext4";
};
+
fileSystems."/garage" = {
+
device = "/dev/sda1";
+
fsType = "ext4";
+
};
+
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+14 -13
modules/caddy/default.nix
···
# Generate Caddyfile content from the proxy configuration
generateCaddyfile = proxies:
let
-
proxyEntries = mapAttrsToList (domain: upstream: ''
${domain} {
-
reverse_proxy ${upstream}
# Optional: Add some common headers for better proxying
header_up Host {upstream_hostport}
···
caddy = {
enable = mkEnableOption "Deploy Caddy";
-
# New option for reverse proxy configuration
reverseProxies = mkOption {
-
type = types.attrsOf types.str;
default = {};
-
description = "Attribute set of domain to upstream mappings for reverse proxying";
example = {
"notes.nekomimi.pet" = "valefar:3009";
-
"git.nekomimi.pet" = "morax:3000";
};
};
-
# Optional: Allow custom Caddyfile content to be appended
extraConfig = mkOption {
type = types.lines;
default = "";
description = "Extra Caddyfile configuration to append";
};
-
# Optional: Email for ACME/Let's Encrypt
email = mkOption {
type = types.nullOr types.str;
default = null;
···
config = mkIf cfg.enable {
# Allow network access when building
# https://mdleom.com/blog/2021/12/27/caddy-plugins-nixos/#xcaddy
-
nix.settings.sandbox = false;
networking.firewall.allowedTCPPorts = [
80
···
services.caddy = {
enable = true;
-
package = pkgs.caddy.withPlugins {
-
plugins = [ "github.com/caddy-dns/cloudflare"];
hash = "sha256-1niaf801sijvjrqvw998y8x7b43a0g162h3ry530qwl8lrgkapii";
-
};
-
# Generate the Caddyfile from our configuration
extraConfig = ''
${optionalString (cfg.email != null) ''
{
···
# Generate Caddyfile content from the proxy configuration
generateCaddyfile = proxies:
let
+
proxyEntries = mapAttrsToList (domain: upstreams:
+
let
+
upstreamList = if isList upstreams then upstreams else [upstreams];
+
upstreamStr = concatStringsSep " " upstreamList;
+
in ''
${domain} {
+
reverse_proxy ${upstreamStr}
# Optional: Add some common headers for better proxying
header_up Host {upstream_hostport}
···
caddy = {
enable = mkEnableOption "Deploy Caddy";
reverseProxies = mkOption {
+
type = types.attrsOf (types.either types.str (types.listOf types.str));
default = {};
+
description = "Attribute set of domain to upstream mappings for reverse proxying. Upstreams can be a single string or a list of strings for load balancing.";
example = {
"notes.nekomimi.pet" = "valefar:3009";
+
"git.nekomimi.pet" = ["morax:3000" "valefar:3000"]; # Load balance between multiple upstreams
+
"api.nekomimi.pet" = ["server1:8080" "server2:8080" "server3:8080"];
};
};
extraConfig = mkOption {
type = types.lines;
default = "";
description = "Extra Caddyfile configuration to append";
};
email = mkOption {
type = types.nullOr types.str;
default = null;
···
config = mkIf cfg.enable {
# Allow network access when building
# https://mdleom.com/blog/2021/12/27/caddy-plugins-nixos/#xcaddy
+
#nix.settings.sandbox = false;
networking.firewall.allowedTCPPorts = [
80
···
services.caddy = {
enable = true;
+
/*package = pkgs.caddy.withPlugins {
+
plugins = [ "github.com/caddy-dns/cloudflare@v0.2.1"];
hash = "sha256-1niaf801sijvjrqvw998y8x7b43a0g162h3ry530qwl8lrgkapii";
+
};*/
extraConfig = ''
${optionalString (cfg.email != null) ''
{