Nix configurations for my homelab

Move all custom configuration options under `garden`

This makes it more clear when an option is specific to my nixos
configurations versus something that is available to everyone out of
the box.

yemou.pink 07f6ecde 54219cea

verified
+1 -1
dandelion/config.nix
···
networking.hostName = "dandelion";
nix.settings.max-jobs = 0;
-
mInfo = {
+
garden.info.host = {
sss-mount = true;
vps = true;
};
+1 -1
dandelion/hardware.nix
···
networks."10-wan" = {
matchConfig.Name = "enp1s0";
networkConfig.DHCP = "ipv4";
-
address = [ "${config.nInfo.${config.networking.hostName}.ipv6}/64" ];
+
address = [ "${config.garden.info.network.${config.networking.hostName}.ipv6}/64" ];
routes = [ { Gateway = "fe80::1"; } ];
};
};
+2 -4
dandelion/services/caddy.nix
···
# TODO: Separate caddy config into separate files
{ config, pkgs, ... }:
let
-
lily = config.nInfo.lily.netbird-ip;
+
lily = config.garden.info.network.lily.netbird-ip;
cpCerts = pkgs.writeShellApplication {
name = "cpCerts";
runtimeInputs = with pkgs; [ coreutils ];
···
esac
'';
};
-
cpCertsCommand =
-
"${cpCerts}/bin/cpCerts {event.data.identifier} {event.data.certificate_path} "
-
+ "{event.data.private_key_path}";
+
cpCertsCommand = "${cpCerts}/bin/cpCerts {event.data.identifier} {event.data.certificate_path} {event.data.private_key_path}";
in
{
environment.persistence."/data/persistent".directories = [
+3 -1
flake.nix
···
{
# TODO: replace this with treefmt or something since the functionality to scan for all nix files is being
# deprecated
-
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree;
+
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree.override {
+
settings.formatter.nixfmt.options = [ "-w 120" ];
+
};
nixosConfigurations = genSystemConfigs (
hostname:
nixpkgs.lib.nixosSystem {
+1 -1
lily/config.nix
···
./services/fail2ban.nix
];
-
mInfo = {
+
garden.info.host = {
server = true;
};
+1 -1
lily/services/fail2ban.nix
···
{ config, ... }:
{
# Since this server is on my local network, I'm also ignoring my local ip
-
services.fail2ban.ignoreIP = [ config.nInfo.lutea.ipv4-local ];
+
services.fail2ban.ignoreIP = [ config.garden.info.network.lutea.ipv4-local ];
}
+2 -2
lutea/hardware.nix
···
swapDevices = [ { device = "/swap/swapfile"; } ];
systemd.services.zswap = {
-
description = "Enable zswap";
+
description = "Enable zswap";
enable = true;
-
wantedBy = ["basic.target"];
+
wantedBy = [ "basic.target" ];
serviceConfig = {
ExecStart = ''
${pkgs.bash}/bin/bash -c 'cd /sys/module/zswap/parameters && \
+1 -1
modules/basic.nix
···
services = {
acpid.enable = true;
# TODO: Setup email
-
smartd.enable = config.mInfo.vps == false;
+
smartd.enable = config.garden.info.host.vps == false;
};
systemd.network.enable = true;
+3 -5
modules/binary-cache.nix
···
substituters = [
(lib.mkIf (
config.networking.hostName != "dandelion"
-
) "ssh-ng://nix-ssh@${config.nInfo.dandelion.netbird-ip}")
-
(lib.mkIf (config.networking.hostName != "lily") "ssh-ng://nix-ssh@${config.nInfo.lily.netbird-ip}")
-
(lib.mkIf (
-
config.networking.hostName != "lutea"
-
) "ssh-ng://nix-ssh@${config.nInfo.lutea.netbird-ip}")
+
) "ssh-ng://nix-ssh@${config.garden.info.network.dandelion.netbird-ip}")
+
(lib.mkIf (config.networking.hostName != "lily") "ssh-ng://nix-ssh@${config.garden.info.network.lily.netbird-ip}")
+
(lib.mkIf (config.networking.hostName != "lutea") "ssh-ng://nix-ssh@${config.garden.info.network.lutea.netbird-ip}")
];
};
sshServe = {
-3
modules/browsers.nix
···
{ pkgs, ... }:
{
-
imports = [ ./unfree.nix ];
-
unfree.allowed = [ "microsoft-edge" ];
-
nixpkgs.overlays = [
(final: prev: {
firefox-unwrapped = prev.firefox-unwrapped.overrideAttrs (
+3 -3
modules/fail2ban.nix
···
rndtime = "1h";
};
ignoreIP = [
-
(lib.mkIf (config.networking.hostName != "dandelion") config.nInfo.dandelion.netbird-ip)
-
(lib.mkIf (config.networking.hostName != "lily") config.nInfo.lily.netbird-ip)
-
(lib.mkIf (config.networking.hostName != "lutea") config.nInfo.lutea.netbird-ip)
+
(lib.mkIf (config.networking.hostName != "dandelion") config.garden.info.network.dandelion.netbird-ip)
+
(lib.mkIf (config.networking.hostName != "lily") config.garden.info.network.lily.netbird-ip)
+
(lib.mkIf (config.networking.hostName != "lutea") config.garden.info.network.lutea.netbird-ip)
];
maxretry = 1;
};
+1 -1
modules/games.nix
···
{ pkgs, ... }:
{
imports = [ ./unfree.nix ];
-
unfree.allowed = [
+
garden.unfree = [
"modrinth-app"
"modrinth-app-unwrapped"
"steam"
+1 -1
modules/gui.nix
···
];
imports = [ ./machineInfo.nix ];
-
mInfo.gui = true;
+
garden.info.host.gui = true;
xdg = {
portal = {
-2
modules/im.nix
···
{ pkgs, ... }:
{
-
imports = [ ./unfree.nix ];
-
users.users.mou.packages = with pkgs; [
senpai
signal-desktop
+1 -1
modules/machineInfo.nix
···
{ lib, ... }:
{
-
options.mInfo = {
+
options.garden.info.host = {
gui = lib.mkOption {
type = with lib.types; bool;
default = false;
+1 -1
modules/netbird.nix
···
services.netbird.clients.homelab = {
port = 51820;
-
ui.enable = config.mInfo.gui;
+
ui.enable = config.garden.info.host.gui;
};
}
+2 -2
modules/networkInfo.nix
···
{ lib, ... }:
{
-
options.nInfo = lib.mkOption {
+
options.garden.info.network = lib.mkOption {
description = "Information about every host in the network.";
type =
with lib.types;
···
);
};
-
config.nInfo = builtins.fromJSON (builtins.readFile ../hidden/network.json);
+
config.garden.info.network = builtins.fromJSON (builtins.readFile ../hidden/network.json);
}
+4 -4
modules/remoteBuildMachines.nix
···
programs.ssh = {
knownHosts = {
nixremote-lily = {
-
hostNames = [ config.nInfo.lily.netbird-ip ];
+
hostNames = [ config.garden.info.network.lily.netbird-ip ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINaReNM+eSIzbZvqahaAlanf0z89rJQIYWx/rlaS4f1Y";
};
nixremote-lutea = {
-
hostNames = [ config.nInfo.lutea.netbird-ip ];
+
hostNames = [ config.garden.info.network.lutea.netbird-ip ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICNMTxa2zRmHIXt3ARlCplboWRdCsAmDlN8gDLik4vNs";
};
};
···
'';
in
''
-
${mkSshConfig "lily" config.nInfo.lily.netbird-ip}
-
${mkSshConfig "lutea" config.nInfo.lutea.netbird-ip}
+
${mkSshConfig "lily" config.garden.info.network.lily.netbird-ip}
+
${mkSshConfig "lutea" config.garden.info.network.lutea.netbird-ip}
'';
};
}
+1 -1
modules/remoteBuilder.nix
···
nix.settings.trusted-users = [ "nixremote" ];
-
services.openssh.settings.AllowUsers = [ "nixremote@${config.nInfo.dandelion.netbird-ip}" ];
+
services.openssh.settings.AllowUsers = [ "nixremote@${config.garden.info.network.dandelion.netbird-ip}" ];
}
+1 -2
modules/services/dendrite.nix
···
}
];
-
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts =
-
[ 8008 ];
+
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts = [ 8008 ];
services.postgresql = {
ensureDatabases = [ "dendrite" ];
+4 -5
modules/services/nextcloud.nix
···
};
# This is the port that nginx listens on by default
-
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts =
-
[ 80 ];
+
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts = [ 80 ];
services = {
redis.package = pkgs.valkey;
···
maxUploadSize = "1G";
notify_push = {
enable = true;
-
nextcloudUrl = "http://${config.nInfo.${config.networking.hostName}.netbird-ip}";
+
nextcloudUrl = "http://${config.garden.info.network.${config.networking.hostName}.netbird-ip}";
};
phpOptions = {
"opcache.interned_strings_buffer" = "16";
···
};
"simpleSignUpLink.shown" = false;
trusted_proxies = [
-
config.nInfo.${config.networking.hostName}.netbird-ip
-
config.nInfo.dandelion.netbird-ip
+
config.garden.info.network.${config.networking.hostName}.netbird-ip
+
config.garden.info.network.dandelion.netbird-ip
];
};
};
+2 -2
modules/services/openssh.nix
···
};
services.openssh.settings.AllowUsers = [
-
"mou@${config.nInfo.lutea.netbird-ip}"
-
(lib.mkIf (config.networking.hostName == "lily") "mou@${config.nInfo.lutea.ipv4-local}")
+
"mou@${config.garden.info.network.lutea.netbird-ip}"
+
(lib.mkIf (config.networking.hostName == "lily") "mou@${config.garden.info.network.lutea.ipv4-local}")
];
}
+1 -2
modules/services/pds.nix
···
'';
};
-
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts =
-
[ 3000 ];
+
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts = [ 3000 ];
services.pds = {
enable = true;
+2 -3
modules/services/tangled.nix
···
};
services.openssh.settings.AllowUsers = [
-
"${config.services.tangled-knotserver.gitUser}@${config.nInfo.dandelion.netbird-ip}"
+
"${config.services.tangled-knotserver.gitUser}@${config.garden.info.network.dandelion.netbird-ip}"
];
-
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts =
-
[ 5555 ];
+
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts = [ 5555 ];
services.tangled-knotserver = {
enable = true;
+2 -2
modules/sss-mount.nix
···
pkgs,
...
}:
-
lib.mkIf (config.mInfo.sss-mount == true) {
+
lib.mkIf (config.garden.info.host.sss-mount == true) {
environment.systemPackages = [ pkgs.rclone ];
fileSystems."/sss" = {
···
"config=${pkgs.writeText "rclone-mnt.conf" ''
[sss]
type = sftp
-
host = ${config.nInfo.lily.netbird-ip}
+
host = ${config.garden.info.network.lily.netbird-ip}
port = 2222
user = seedling
key_file = /data/seedling/id_ed25519
+2 -3
modules/unfree.nix
···
{ config, lib, ... }:
{
-
options.unfree.allowed = lib.mkOption {
+
options.garden.unfree = lib.mkOption {
type = with lib.types; listOf str;
default = [ ];
description = "A list of unfree packages that are allowed to be installed";
};
-
config.nixpkgs.config.allowUnfreePredicate =
-
pkg: builtins.elem (lib.getName pkg) config.unfree.allowed;
+
config.nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) config.garden.unfree;
}