fw + avahi

This commit is contained in:
Evan Reichard 2025-04-06 12:52:25 -04:00
parent cddaa01e99
commit 7705f24e0f
9 changed files with 83 additions and 58 deletions

View File

@ -16,8 +16,8 @@ keybind = ctrl+left=goto_split:left
keybind = ctrl+right=goto_split:right keybind = ctrl+right=goto_split:right
keybind = ctrl+up=goto_split:up keybind = ctrl+up=goto_split:up
keybind = ctrl+down=goto_split:down keybind = ctrl+down=goto_split:down
keybind = ctrl+]=next_tab keybind = ctrl+]=goto_split:next
keybind = ctrl+[=previous_tab keybind = ctrl+[=goto_split:previous
# Keybindings - Navigation - Tabs # Keybindings - Navigation - Tabs
keybind = ctrl+1=goto_tab:1 keybind = ctrl+1=goto_tab:1

View File

@ -5,6 +5,7 @@ let
mkIf mkIf
mkDefault mkDefault
mkMerge mkMerge
mkEnableOption
; ;
inherit (lib.${namespace}) mkOpt; inherit (lib.${namespace}) mkOpt;
@ -20,7 +21,7 @@ let
in in
{ {
options.${namespace}.user = { options.${namespace}.user = {
enable = mkOpt types.bool false "Whether to configure the user account."; enable = mkEnableOption "Whether to configure the user account.";
email = mkOpt types.str "evan@reichard.io" "The email of the user."; email = mkOpt types.str "evan@reichard.io" "The email of the user.";
fullName = mkOpt types.str "Evan Reichard" "The full name of the user."; fullName = mkOpt types.str "Evan Reichard" "The full name of the user.";
home = mkOpt (types.nullOr types.str) home-directory "The user's home directory."; home = mkOpt (types.nullOr types.str) home-directory "The user's home directory.";

View File

@ -1,6 +1,6 @@
{ config, lib, pkgs, namespace, ... }: { config, lib, pkgs, namespace, ... }:
let let
inherit (lib) mkIf mkForce; inherit (lib) mkIf;
inherit (lib.${namespace}) mkBoolOpt; inherit (lib.${namespace}) mkBoolOpt;
cfg = config.${namespace}.hardware.opengl; cfg = config.${namespace}.hardware.opengl;

View File

@ -0,0 +1,27 @@
{ config, lib, namespace, ... }:
let
inherit (lib) mkIf;
cfg = config.${namespace}.services.avahi;
in
{
options.${namespace}.services.avahi = {
enable = lib.mkEnableOption "Avahi";
};
config = mkIf cfg.enable {
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
publish = {
enable = true;
addresses = true;
domain = true;
hinfo = true;
userServices = true;
workstation = true;
};
};
};
}

View File

@ -1,7 +1,7 @@
{ config, pkgs, lib, namespace, host, ... }: { config, pkgs, lib, namespace, host, ... }:
let let
inherit (lib) types mkIf; inherit (lib) types mkIf;
inherit (lib.${namespace}) mkOpt; inherit (lib.${namespace}) mkOpt mkBoolOpt;
cfg = config.${namespace}.services.openiscsi; cfg = config.${namespace}.services.openiscsi;
in in
@ -9,7 +9,7 @@ in
options.${namespace}.services.openiscsi = { options.${namespace}.services.openiscsi = {
enable = lib.mkEnableOption "Open iSCSI support"; enable = lib.mkEnableOption "Open iSCSI support";
name = mkOpt types.str "iqn.2025.reichard.io:${host}" "iSCSI name"; name = mkOpt types.str "iqn.2025.reichard.io:${host}" "iSCSI name";
symlink = mkOpt types.bool false "Create a symlink to the iSCSI binaries"; symlink = mkBoolOpt false "Create a symlink to the iSCSI binaries";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View File

@ -1,7 +1,7 @@
{ config, lib, namespace, ... }: { config, lib, namespace, ... }:
let let
inherit (lib) types mkIf; inherit (lib) types mkIf;
inherit (lib.${namespace}) mkOpt; inherit (lib.${namespace}) mkOpt mkBoolOpt;
cfg = config.${namespace}.services.rke2; cfg = config.${namespace}.services.rke2;
in in
@ -9,6 +9,7 @@ in
options.${namespace}.services.rke2 = with types; { options.${namespace}.services.rke2 = with types; {
enable = lib.mkEnableOption "Enable RKE2"; enable = lib.mkEnableOption "Enable RKE2";
disable = mkOpt (listOf str) [ ] "Disable services"; disable = mkOpt (listOf str) [ ] "Disable services";
openFirewall = mkBoolOpt true "Open firewall";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -16,5 +17,23 @@ in
enable = true; enable = true;
disable = cfg.disable; disable = cfg.disable;
}; };
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [
# RKE2 Ports - https://docs.rke2.io/install/requirements#networking
6443 # Kubernetes API
9345 # RKE2 supervisor API
2379 # etcd Client Port
2380 # etcd Peer Port
2381 # etcd Metrics Port
10250 # kubelet metrics
9099 # Canal CNI health checks
];
networking.firewall.allowedUDPPorts = mkIf cfg.openFirewall [
# RKE2 Ports - https://docs.rke2.io/install/requirements#networking
8472 # Canal CNI with VXLAN
# 51820 # Canal CNI with WireGuard IPv4 (if using encryption)
# 51821 # Canal CNI with WireGuard IPv6 (if using encryption)
];
}; };
} }

View File

@ -1,14 +1,16 @@
{ config, lib, pkgs, namespace, ... }: { config, lib, pkgs, namespace, ... }:
let let
inherit (lib) mkIf mkForce; inherit (lib) mkIf mkDefault mkEnableOption;
inherit (lib.${namespace}) mkBoolOpt; inherit (lib.${namespace}) mkBoolOpt enabled;
cfg = config.${namespace}.system.networking; cfg = config.${namespace}.system.networking;
in in
{ {
options.${namespace}.system.networking = { options.${namespace}.system.networking = {
enable = lib.mkEnableOption "networking support"; enable = mkEnableOption "Enable Networking";
enableIWD = mkBoolOpt false "enable iwd"; enableIWD = mkEnableOption "Enable IWD";
useDHCP = mkBoolOpt true "Use DHCP";
useNetworkd = mkBoolOpt false "Use networkd";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -21,8 +23,9 @@ in
reichard.user.extraGroups = [ "network" ]; reichard.user.extraGroups = [ "network" ];
networking = { networking = {
firewall.enable = true; firewall = enabled;
usePredictableInterfaceNames = mkForce true; useDHCP = mkDefault cfg.useDHCP;
useNetworkd = cfg.useNetworkd;
} // (lib.optionalAttrs cfg.enableIWD) { } // (lib.optionalAttrs cfg.enableIWD) {
wireless.iwd = { wireless.iwd = {
enable = true; enable = true;

View File

@ -31,6 +31,10 @@ in
}; };
}; };
services = {
avahi = enabled;
};
security = { security = {
sops = { sops = {
enable = true; enable = true;

View File

@ -8,6 +8,16 @@ in
]; ];
config = { config = {
# Basic System
system.stateVersion = "24.11";
time.timeZone = "UTC";
fileSystems."/" = {
device = "/dev/disk/by-label/nixos";
fsType = "ext4";
autoResize = true;
};
reichard = { reichard = {
nix = enabled; nix = enabled;
@ -16,9 +26,15 @@ in
enable = true; enable = true;
xenGuest = true; xenGuest = true;
}; };
networking = {
enable = true;
useDHCP = false;
useNetworkd = true;
};
}; };
services = { services = {
avahi = enabled;
openssh = enabled; openssh = enabled;
cloud-init = enabled; cloud-init = enabled;
rke2 = { rke2 = {
@ -39,50 +55,6 @@ in
}; };
}; };
# Basic System
system.stateVersion = "24.11";
time.timeZone = "UTC";
fileSystems."/" = {
device = "/dev/disk/by-label/nixos";
fsType = "ext4";
autoResize = true;
};
# Network Configuration
networking = {
hostName = lib.mkForce "";
useNetworkd = true;
useDHCP = false;
firewall = {
enable = true;
allowedTCPPorts = [
# RKE2 Ports - https://docs.rke2.io/install/requirements#networking
6443 # Kubernetes API
9345 # RKE2 supervisor API
2379 # etcd Client Port
2380 # etcd Peer Port
2381 # etcd Metrics Port
10250 # kubelet metrics
9099 # Canal CNI health checks
];
allowedUDPPorts = [
# RKE2 Ports - https://docs.rke2.io/install/requirements#networking
8472 # Canal CNI with VXLAN
# 51820 # Canal CNI with WireGuard IPv4 (if using encryption)
# 51821 # Canal CNI with WireGuard IPv6 (if using encryption)
];
# Allow Multicast
extraCommands = ''
iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPT
'';
};
};
systemd.services = { systemd.services = {
# RKE2 - Wait Cloud Init # RKE2 - Wait Cloud Init
rke2-server = { rke2-server = {
@ -112,7 +84,6 @@ in
}; };
}; };
# System Packages
environment = { environment = {
systemPackages = with pkgs; [ systemPackages = with pkgs; [
htop htop