feat: add centralized environment configuration

- Add dns.nix: environment-specific DNS domain, name servers, forwarders
- Add time.nix: NTP servers (gateway), timezone, hardware clock
- Add proxy.nix: placeholder for future proxy settings (no proxy for now)
- Add smtp.nix: SMTP relay configuration for system emails
- Add default.nix: unified entry point for all network parameters

These files allow environment-specific settings to be managed in one place
and imported by host configurations.
This commit is contained in:
2026-05-11 11:31:41 +02:00
parent 236e454e22
commit 13c3d63785
10 changed files with 208 additions and 0 deletions
@@ -0,0 +1,16 @@
# Central network data source for the dev environment.
#
# Usage from a configuration.nix:
# network = import ../../network { };
# network.dns.domain → "dev.lagraula.fr"
# network.time.timeZone → "Europe/Paris"
#
# Usage from a shell script (via `nix eval`):
# nix eval --json -f network/default.nix dns
{
dns = import ./dns.nix;
time = import ./time.nix;
proxy = import ./proxy.nix;
smtp = import ./smtp.nix;
}
@@ -0,0 +1,23 @@
{ config, pkgs, lib, ... }:
{
# Environment-specific DNS domain
domain = "dev.lagraula.fr";
# Default DNS servers for this environment
# These are the IPs of the DNS servers (e.g., dns-dev01, dns-dev02)
# that will be deployed in this environment.
defaultNameServers = [ "10.40.128.10" "10.40.128.11" ];
# Forwarders for this environment (e.g., upstream DNS)
forwarders = [ "1.1.1.1" "8.8.8.8" ];
# Allow zone transfers only to secondary DNS servers in this environment
allowZoneTransfer = [ "10.40.128.11" ];
# Recursion policy for this environment
recursion = "AllowOnlyForPrivateNetworks";
# Email for Let's Encrypt (Caddy) — can be environment-specific
letsEncryptEmail = "xavier@lagraula.fr";
}
@@ -0,0 +1,27 @@
{ config, pkgs, lib, ... }:
{
# Proxy configuration for this environment
# Currently no proxy is used — direct access for all hosts
# Workstations: no proxy
workstations = {
httpProxy = "";
httpsProxy = "";
noProxy = "";
};
# Servers: no proxy
servers = {
httpProxy = "";
httpsProxy = "";
noProxy = "";
};
# To enable a proxy later, uncomment and set the proxy URLs:
# workstations = {
# httpProxy = "http://proxy.dev.lagraula.fr:3128";
# httpsProxy = "http://proxy.dev.lagraula.fr:3128";
# noProxy = "localhost,127.0.0.1,::1,10.0.0.0/8";
# };
}
@@ -0,0 +1,22 @@
{ config, pkgs, lib, ... }:
{
# SMTP relay configuration for this environment
# Used by services that need to send email (e.g., monitoring alerts)
# SMTP relay host — can be an internal relay or external service
relayHost = "smtp.lagraula.fr";
relayPort = 587;
# TLS settings
useTLS = true;
useSTARTTLS = true;
# Authentication — currently none (open relay for internal use)
# To add authentication later:
# username = "noreply@dev.lagraula.fr";
# passwordFile = config.age.secrets.smtp-password.path;
# Default "From" address for system emails
fromAddress = "noreply@dev.lagraula.fr";
}
@@ -0,0 +1,16 @@
{ config, pkgs, lib, ... }:
{
# NTP servers for this environment
# The gateway acts as the NTP server (IPv4 .1, IPv6 ::1)
ntpServers = [
"10.10.128.1" # IPv4 gateway
"fd00::1" # IPv6 gateway
];
# Time zone for this environment
timeZone = "Europe/Paris";
# Hardware clock setting
hardwareClock = "UTC";
}
@@ -0,0 +1,16 @@
# Central network data source for the stage environment.
#
# Usage from a configuration.nix:
# network = import ../../network { };
# network.dns.domain → "stage.lagraula.fr"
# network.time.timeZone → "Europe/Paris"
#
# Usage from a shell script (via `nix eval`):
# nix eval --json -f network/default.nix dns
{
dns = import ./dns.nix;
time = import ./time.nix;
proxy = import ./proxy.nix;
smtp = import ./smtp.nix;
}
@@ -0,0 +1,23 @@
{ config, pkgs, lib, ... }:
{
# Environment-specific DNS domain
domain = "stage.lagraula.fr";
# Default DNS servers for this environment
# These are the IPs of the DNS servers (e.g., dns-stage01, dns-stage02)
# that will be deployed in this environment.
defaultNameServers = [ "10.40.128.10" "10.40.128.11" ];
# Forwarders for this environment (e.g., upstream DNS)
forwarders = [ "1.1.1.1" "8.8.8.8" ];
# Allow zone transfers only to secondary DNS servers in this environment
allowZoneTransfer = [ "10.40.128.11" ];
# Recursion policy for this environment
recursion = "AllowOnlyForPrivateNetworks";
# Email for Let's Encrypt (Caddy) — can be environment-specific
letsEncryptEmail = "xavier@lagraula.fr";
}
@@ -0,0 +1,27 @@
{ config, pkgs, lib, ... }:
{
# Proxy configuration for this environment
# Currently no proxy is used — direct access for all hosts
# Workstations: no proxy
workstations = {
httpProxy = "";
httpsProxy = "";
noProxy = "";
};
# Servers: no proxy
servers = {
httpProxy = "";
httpsProxy = "";
noProxy = "";
};
# To enable a proxy later, uncomment and set the proxy URLs:
# workstations = {
# httpProxy = "http://proxy.stage.lagraula.fr:3128";
# httpsProxy = "http://proxy.stage.lagraula.fr:3128";
# noProxy = "localhost,127.0.0.1,::1,10.0.0.0/8";
# };
}
@@ -0,0 +1,22 @@
{ config, pkgs, lib, ... }:
{
# SMTP relay configuration for this environment
# Used by services that need to send email (e.g., monitoring alerts)
# SMTP relay host — can be an internal relay or external service
relayHost = "smtp.lagraula.fr";
relayPort = 587;
# TLS settings
useTLS = true;
useSTARTTLS = true;
# Authentication — currently none (open relay for internal use)
# To add authentication later:
# username = "noreply@stage.lagraula.fr";
# passwordFile = config.age.secrets.smtp-password.path;
# Default "From" address for system emails
fromAddress = "noreply@stage.lagraula.fr";
}
@@ -0,0 +1,16 @@
{ config, pkgs, lib, ... }:
{
# NTP servers for this environment
# The gateway acts as the NTP server (IPv4 .1, IPv6 ::1)
ntpServers = [
"10.10.128.1" # IPv4 gateway
"fd00::1" # IPv6 gateway
];
# Time zone for this environment
timeZone = "Europe/Paris";
# Hardware clock setting
hardwareClock = "UTC";
}