feat: init

This commit is contained in:
Nick 2025-03-29 23:08:26 -05:00
commit 96c6f790fc
804 changed files with 33411 additions and 0 deletions

178
modules/config/default.nix Executable file
View file

@ -0,0 +1,178 @@
{ lib, ... }:
let
stringType = lib.mkOption {
type = lib.types.str;
};
intType = lib.mkOption {
type = lib.types.int;
};
listType = lib.mkOption {
type = lib.types.listOf lib.types.str;
};
attrList = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
};
numOptions = 20;
genOptions =
config: prefix:
builtins.listToAttrs (
map (i: {
name = "${prefix}${toString i}";
value = config;
}) (builtins.genList (i: i) numOptions)
);
mkOptionsFromDir =
path:
builtins.listToAttrs (
map
(name: {
name = builtins.substring 0 (builtins.stringLength name - 4) name;
value = stringType;
})
(
builtins.filter (name: builtins.match ".*\\.nix$" name != null) (
builtins.attrNames (builtins.readDir path)
)
)
);
userSubmodule = lib.types.submodule {
options = {
name = stringType;
label = stringType;
sshKeys = listType;
group = stringType;
aliases = genOptions stringType "name";
email = genOptions stringType "address";
paths = genOptions stringType "path";
};
};
instanceSubmodule = lib.types.submodule {
options = {
subdomain = stringType;
label = stringType;
name = stringType;
hostname = stringType;
domains = genOptions stringType "url";
dns = genOptions stringType "provider";
localhost = genOptions stringType "address";
email = genOptions stringType "address";
sops = genOptions stringType "path";
paths = genOptions stringType "path";
ports = genOptions intType "port";
ssl = {
cert = stringType;
key = stringType;
};
};
};
deviceSubmodule = lib.types.submodule {
options =
let
mountConfig = {
mount = stringType;
device = stringType;
options = listType;
};
in
{
boot = mountConfig;
ip = genOptions stringType "address";
label = stringType;
name = stringType;
sync = genOptions stringType "address";
}
// genOptions mountConfig "folder"
// genOptions mountConfig "samba"
// genOptions mountConfig "storage";
};
themesSubmodule = lib.types.submodule {
options = {
currentTheme = genOptions stringType "theme";
fonts = {
names = genOptions stringType "name";
sizes = {
applications = genOptions intType "size";
desktop = genOptions intType "size";
popups = genOptions intType "size";
terminal = genOptions intType "size";
};
};
cursor = {
name = stringType;
size = intType;
};
palettes = lib.mkOption {
type = lib.types.attrsOf (
lib.types.submodule {
options = {
colours = attrList;
font = stringType;
};
}
);
};
};
};
in
{
options = {
services = lib.mkOption {
type = lib.types.submodule {
options = mkOptionsFromDir ./instances/config // {
instances = lib.mkOption {
type = lib.types.attrsOf instanceSubmodule;
};
};
};
};
machines = lib.mkOption {
type = lib.types.submodule {
options =
let
devicesPath = ./devices/config;
printerPath = devicesPath + /printers;
in
mkOptionsFromDir devicesPath
// mkOptionsFromDir printerPath
// {
devices = lib.mkOption {
type = lib.types.attrsOf deviceSubmodule;
};
};
};
};
people = lib.mkOption {
type = lib.types.submodule {
options = mkOptionsFromDir ./users/config // {
users = lib.mkOption {
type = lib.types.attrsOf userSubmodule;
};
};
};
};
aesthetics = lib.mkOption {
type = lib.types.submodule {
options = mkOptionsFromDir ./themes // {
themes = lib.mkOption {
type = themesSubmodule;
};
};
};
};
};
config = {
people = import ./users;
services = import ./instances;
machines = import ./devices;
aesthetics = import ./themes;
};
}

View file

@ -0,0 +1,36 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
fileModeAndDirMode
ownerExclusiveReadWriteMask
readWritePermissions
sambaPermissions
userIdForUser0
ceresIP
;
ceresName = "ceres";
ceresStorageDriveName = "NAS1";
in
{
label = "Ceres";
name = ceresName;
sync = {
address0 = "";
};
ip = {
address0 = ceresIP;
};
boot = {
options = ownerExclusiveReadWriteMask;
};
storage0 = {
mount = "/mnt/media/${ceresStorageDriveName}";
device = "/dev/disk/by-label/${ceresStorageDriveName}";
options = readWritePermissions;
};
samba0 = {
mount = "/mnt/media/${ceresName}";
device = "//${ceresIP}";
options = sambaPermissions ++ fileModeAndDirMode ++ userIdForUser0;
};
}

View file

@ -0,0 +1,20 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
ownerExclusiveReadWriteMask
charonIP
;
in
{
label = "Charon";
name = "charon";
sync = {
address0 = "";
};
ip = {
address0 = charonIP;
};
boot = {
options = ownerExclusiveReadWriteMask;
};
}

View file

@ -0,0 +1,20 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
ownerWriteOthersReadMask
deimosIP
;
in
{
label = "Deimos";
name = "deimos";
sync = {
address0 = deimosIP;
};
ip = {
address0 = deimosIP;
};
boot = {
options = ownerWriteOthersReadMask;
};
}

View file

@ -0,0 +1,31 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
ownerWriteOthersReadMask
readWritePermissions
marsIP
;
in
{
label = "Mars";
name = "mars";
sync = {
address0 = "";
};
ip = {
address0 = marsIP;
};
boot = {
options = ownerWriteOthersReadMask;
};
storage0 = {
mount = "/mnt/media/games";
device = "/dev/disk/by-label/Games";
options = readWritePermissions;
};
storage1 = {
mount = "/mnt/media/storage";
device = "/dev/disk/by-label/Storage";
options = readWritePermissions;
};
}

View file

@ -0,0 +1,18 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
phoneIP
dummy
;
in
{
name = "pixel";
label = dummy;
sync = {
address0 = "RMDKNJY-BTX6FYF-G6SR332-WS6HARI-PF74SC6-VPBSGRQ-MKVQZEQ-KSIB6QV"; # User0
address1 = "RUKSHY4-UCBYRVG-CVYFCMU-M3NLA3Q-JINRF5V-YPR5W32-TEIBJN6-DNQRCAR"; # User2
};
ip = {
address0 = phoneIP;
};
}

View file

@ -0,0 +1,13 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
dummy
;
in
{
name = dummy;
label = "Canon-TR7620a";
ip = {
address0 = "";
};
}

View file

@ -0,0 +1,14 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
brotherIP
dummy
;
in
{
name = dummy;
label = "Brother-HL-2170W";
ip = {
address0 = brotherIP;
};
}

View file

@ -0,0 +1,53 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
sambaPermissions
userIdForUser0
userIdForUser1
userIdForUser3
synologyIP
;
user0 = "nick";
user1 = "garnet";
user3 = "streaming";
user0Name = "Nick";
user1Name = "Garnet";
user3Name = "Streaming";
synologyName = "synology";
in
{
label = "Synology";
sync = {
address0 = "MWRGX2V-F5XKE5E-REP6ECT-OOPFBMF-22NHSMW-YFBU6MB-PLFUN63-R3MW2QX"; # User0
address1 = ""; # User2
};
name = synologyName;
ip = {
address0 = synologyIP;
};
# Nick Home Folder
folder0 = {
mount = "/mnt/media/${synologyName}/${user0}";
device = "//${synologyIP}/homes/${user0Name}";
options = sambaPermissions ++ userIdForUser0;
};
# Garnet Home Folder
folder1 = {
mount = "/mnt/media/${synologyName}/${user1}";
device = "//${synologyIP}/homes/${user1Name}";
options = sambaPermissions ++ userIdForUser1;
};
# Minecraft Worlds
folder2 = {
mount = "/home/${user1}/.local/share/PrismLauncher/instances/1.21/.minecraft/saves";
device = "//${synologyIP}/homes/${user1Name}/Minecraft";
options = sambaPermissions ++ userIdForUser1;
};
# Streaming Folder
folder3 = {
mount = "/mnt/media/${synologyName}/${user3}";
device = "//${synologyIP}/homes/${user0Name}";
options = sambaPermissions ++ userIdForUser3;
};
}

View file

@ -0,0 +1,33 @@
{ devicesFunctions }:
let
inherit (devicesFunctions)
readWritePermissions
venusIP
;
drivePath = "/run/media";
byLabel = "/dev/disk/by-label";
in
{
label = "Venus";
name = "venus";
ip = {
address0 = venusIP;
};
boot = {
options = [
"fmask=0022"
"dmask=0022"
];
};
storage0 = {
mount = "${drivePath}/games";
device = "${byLabel}/Games";
options = readWritePermissions;
};
storage1 = {
mount = "${drivePath}/entertainment";
device = "${byLabel}/Entertainment";
options = readWritePermissions;
};
}

View file

@ -0,0 +1,87 @@
let
configPath = ./config;
printerPath = configPath + /printers;
devicesFunctions = {
ownerWriteOthersReadMask = [
"fmask=0022"
"dmask=0022"
];
ownerExclusiveReadWriteMask = [
"fmask=0077"
"dmask=0077"
];
readWritePermissions = [
"rw"
];
sambaPermissions = [
"rw"
"gid=100"
"vers=3.0"
"x-systemd.automount"
"x-systemd.requires=network-online.target"
];
fileModeAndDirMode = [
"file_mode=0644"
"dir_mode=0755"
];
userIdForUser0 = [
"uid=1000"
];
userIdForUser1 = [
"uid=1001"
];
userIdForUser3 = [
"uid=1002"
];
dummy = [
];
ceresIP = "192.168.50.140";
charonIP = "192.168.50.42";
deimosIP = "192.168.50.142";
marsIP = "192.168.50.196";
phoneIP = "192.168.50.243";
synologyIP = "192.168.50.209";
venusIP = "192.168.58.104";
brotherIP = "192.168.50.195";
};
deviceswithFunctions = builtins.listToAttrs (
map
(name: {
name = builtins.substring 0 (builtins.stringLength name - 4) name;
value = import (configPath + "/${name}") {
inherit
devicesFunctions
;
};
})
(
builtins.filter (name: builtins.match ".*\\.nix$" name != null) (
builtins.attrNames (builtins.readDir configPath)
)
)
);
devicesPrinters = builtins.listToAttrs (
map
(name: {
name = builtins.substring 0 (builtins.stringLength name - 4) name;
value = import (printerPath + "/${name}") {
inherit
devicesFunctions
;
};
})
(
builtins.filter (name: builtins.match ".*\\.nix$" name != null) (
builtins.attrNames (builtins.readDir printerPath)
)
)
);
devices = deviceswithFunctions // devicesPrinters;
in
{
devices = devices;
}

View file

@ -0,0 +1,20 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
sslPath
sopsPath
;
acmeLabel = "Acme";
acmeName = "acme";
in
{
label = acmeLabel;
name = acmeName;
paths = {
path0 = sslPath;
};
sops = {
path0 = "${sopsPath}/${acmeName}";
};
}

View file

@ -0,0 +1,30 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
audiobookshelfLabel
audiobookshelfName
domain0
servicePath
sslPath
sopsPath
;
audiobookshelfSubdomain = "books";
in
{
label = audiobookshelfLabel;
name = audiobookshelfName;
sops = {
path0 = "${sopsPath}/${audiobookshelfName}";
};
subdomain = audiobookshelfSubdomain;
paths = {
path0 = "${servicePath}/${audiobookshelfLabel}";
};
ports = {
port0 = 8000;
};
ssl = {
cert = "${sslPath}/${audiobookshelfSubdomain}.${domain0}/fullchain.pem";
key = "${sslPath}/${audiobookshelfSubdomain}.${domain0}/key.pem";
};
}

View file

@ -0,0 +1,20 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
sopsPath
;
caddyLabel = "Caddy";
caddyName = "caddy";
in
{
label = caddyLabel;
name = caddyName;
sops = {
path0 = "${sopsPath}/${caddyName}";
};
ports = {
port0 = 80;
port1 = 443;
};
}

View file

@ -0,0 +1,34 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain3
servicePath
sslPath
sopsPath
;
forgejoLabel = "Forgejo";
forgejoName = "forgejo";
forgejoSubdomain = "source";
in
{
label = forgejoLabel;
name = forgejoName;
email = {
address0 = "noreply@${domain3}";
};
sops = {
path0 = "${sopsPath}/${forgejoName}";
};
subdomain = forgejoSubdomain;
paths = {
path0 = "${servicePath}/${forgejoLabel}";
};
ports = {
port0 = 3033;
};
ssl = {
cert = "${sslPath}/${forgejoSubdomain}.${domain3}/fullchain.pem";
key = "${sslPath}/${forgejoSubdomain}.${domain3}/key.pem";
};
}

View file

@ -0,0 +1,31 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain0
jellyfinLabel
jellyfinName
servicePath
sslPath
sopsPath
;
in
{
label = jellyfinLabel;
name = jellyfinName;
sops = {
path0 = "${sopsPath}/${jellyfinName}";
};
subdomain = jellyfinName;
paths = {
path0 = "${servicePath}/${jellyfinLabel}";
};
ports = {
port0 = 5055; # Jellyseer
port1 = 8096; # Jellyfin HTTP
port2 = 8920; # Jellyfin HTTPS
};
ssl = {
cert = "${sslPath}/${jellyfinName}.${domain0}/fullchain.pem";
key = "${sslPath}/${jellyfinName}.${domain0}/key.pem";
};
}

View file

@ -0,0 +1,33 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain3
servicePath
sslPath
sopsPath
;
mastodonLabel = "Mastodon";
mastodonName = "mastodon";
mastodonSubdomain = "social";
in
{
label = mastodonLabel;
name = mastodonName;
email = {
address0 = "noreply@${domain3}";
};
subdomain = mastodonSubdomain;
sops = {
path0 = "${sopsPath}/${mastodonName}";
};
paths = {
path0 = "${servicePath}/${mastodonLabel}";
path1 = "";
path2 = "";
};
ssl = {
cert = "${sslPath}/${mastodonSubdomain}.${domain3}/fullchain.pem";
key = "${sslPath}/${mastodonSubdomain}.${domain3}/key.pem";
};
}

View file

@ -0,0 +1,23 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
servicePath
sopsPath
;
matrixLabel = "Matrix";
matrixName = "matrix";
in
{
label = matrixLabel;
name = matrixName;
sops = {
path0 = "${sopsPath}/${matrixName}";
};
subdomain = matrixName;
paths = {
path0 = "${servicePath}/${matrixLabel}";
path1 = "";
path2 = "";
};
}

View file

@ -0,0 +1,30 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain0
servicePath
sslPath
sopsPath
;
minecraftLabel = "Minecraft";
minecraftName = "minecraft";
in
{
label = minecraftLabel;
name = minecraftName;
sops = {
path0 = "${sopsPath}/${minecraftName}";
};
subdomain = minecraftName;
paths = {
path0 = "${servicePath}/${minecraftLabel}";
};
ports = {
port0 = 43000; # Minecraft (Brix on Nix)
};
ssl = {
cert = "${sslPath}/${minecraftName}.${domain0}/fullchain.pem";
key = "${sslPath}/${minecraftName}.${domain0}/key.pem";
};
}

View file

@ -0,0 +1,30 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain1
servicePath
sslPath
sopsPath
;
nextcloudLabel = "Nextcloud";
nextcloudName = "nextcloud";
in
{
label = nextcloudLabel;
name = nextcloudName;
sops = {
path0 = "${sopsPath}/${nextcloudName}";
};
subdomain = nextcloudName;
paths = {
path0 = "${servicePath}/${nextcloudLabel}";
};
ports = {
port0 = 8354; # Nextcloud
};
ssl = {
cert = "${sslPath}/${nextcloudName}.${domain1}/fullchain.pem";
key = "${sslPath}/${nextcloudName}.${domain1}/key.pem";
};
}

View file

@ -0,0 +1,32 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain0
servicePath
sslPath
sopsPath
;
ollamaLabel = "Ollama";
ollamaName = "ollama";
in
{
label = ollamaLabel;
name = ollamaName;
sops = {
path0 = "${sopsPath}/${ollamaName}";
};
subdomain = ollamaName;
paths = {
path0 = "${servicePath}/${ollamaLabel}";
path1 = "/mnt/media/storage/${ollamaName}";
};
ports = {
port0 = 8088; # Open-WebUI (Ollama Front End)
port1 = 11434; # Ollama API
};
ssl = {
cert = "${sslPath}/${ollamaName}.${domain0}/fullchain.pem";
key = "${sslPath}/${ollamaName}.${domain0}/key.pem";
};
}

View file

@ -0,0 +1,33 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain1
servicePath
sslPath
sopsPath
;
owncastLabel = "Owncast";
owncastName = "owncast";
owncastSubdomain = "stream";
in
{
label = owncastLabel;
name = owncastName;
sops = {
path0 = "${sopsPath}/${owncastName}";
};
subdomain = owncastSubdomain;
paths = {
path0 = "${servicePath}/${owncastLabel}";
path1 = "/mnt/media/storage/${owncastName}";
};
ports = {
port0 = 9454;
port1 = 1935;
};
ssl = {
cert = "${sslPath}/${owncastSubdomain}.${domain1}/fullchain.pem";
key = "${sslPath}/${owncastSubdomain}.${domain1}/key.pem";
};
}

View file

@ -0,0 +1,38 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain3
servicePath
sslPath
sopsPath
;
peertubeLabel = "PeerTube";
peertubeName = "peertube";
peertubeSubdomain = "video";
in
{
label = peertubeLabel;
name = peertubeName;
email = {
address0 = "noreply@${domain3}";
};
sops = {
path0 = "${sopsPath}/${peertubeName}";
};
subdomain = peertubeSubdomain;
paths = {
path0 = "${servicePath}/${peertubeLabel}";
};
ports = {
port0 = 9000; # HTTP
port1 = 1935;
port2 = 1936;
port3 = 5432;
port4 = 52800;
};
ssl = {
cert = "${sslPath}/${peertubeSubdomain}.${domain3}/fullchain.pem";
key = "${sslPath}/${peertubeSubdomain}.${domain3}/key.pem";
};
}

View file

@ -0,0 +1,27 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain3
servicePath
sslPath
sopsPath
;
postfixLabel = "Postfix";
postfixName = "postfix";
in
{
label = postfixLabel;
name = postfixName;
sops = {
path0 = "${sopsPath}/${postfixName}";
};
subdomain = postfixName;
paths = {
path0 = "${servicePath}/${postfixLabel}";
};
ssl = {
cert = "${sslPath}/${domain3}/fullchain.pem";
key = "${sslPath}/${domain3}/key.pem";
};
}

View file

@ -0,0 +1,23 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
servicePath
sopsPath
;
postgresLabel = "PostgreSQL";
postgresName = "postgres";
in
{
label = postgresLabel;
name = postgresName;
sops = {
path0 = "${sopsPath}/${postgresName}";
};
paths = {
path0 = "${servicePath}/${postgresLabel}";
};
ports = {
port0 = 5432;
};
}

View file

@ -0,0 +1,21 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
sopsPath
;
sambaLabel = "Samba";
sambaName = "samba";
in
{
label = sambaLabel;
name = sambaName;
sops = {
path0 = "${sopsPath}/${sambaName}";
};
paths = {
};
ports = {
port0 = 445; # Samba
};
}

View file

@ -0,0 +1,34 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain0
servicePath
sslPath
sopsPath
;
searxLabel = "SearXNG";
searxName = "searx";
searxSubdomain = "search";
in
{
label = searxLabel;
name = searxName;
email = {
address0 = "noreply@${domain0}";
};
sops = {
path0 = "${sopsPath}/${searxName}";
};
subdomain = searxSubdomain;
paths = {
path0 = "${servicePath}/${searxLabel}";
};
ports = {
port0 = 8888;
};
ssl = {
cert = "${sslPath}/${searxSubdomain}.${domain0}/fullchain.pem";
key = "${sslPath}/${searxSubdomain}.${domain0}/key.pem";
};
}

View file

@ -0,0 +1,13 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
dummy
;
in
{
hostname = "mail.smtp2go.com";
name = dummy;
ports = {
port0 = 2525;
};
}

View file

@ -0,0 +1,28 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain0
sslPath
sopsPath
;
syncthingLabel = "Syncthing";
syncthingName = "syncthing";
in
{
label = syncthingLabel;
name = syncthingName;
sops = {
path0 = "${sopsPath}/${syncthingName}";
};
subdomain = syncthingName;
ports = {
port0 = 8388; # Syncthing (WebUI)
port1 = 21027; # Syncthing (Discovery)
port2 = 22000; # Syncthing (Transfer)
};
ssl = {
cert = "${sslPath}/${syncthingName}.${domain0}/fullchain.pem";
key = "${sslPath}/${syncthingName}.${domain0}/key.pem";
};
}

View file

@ -0,0 +1,19 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
sopsPath
;
synologyLabel = "Synology";
synologyName = "synology";
in
{
label = synologyLabel;
name = synologyName;
sops = {
path0 = "${sopsPath}/${synologyName}";
};
ports = {
port0 = 5001; # Synology HTTPS
};
}

View file

@ -0,0 +1,33 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain3
sslPath
sopsPath
;
upRootNutritionLabel = "upRootNutrition";
upRootNutritionName = "uprootnutrition";
in
{
label = upRootNutritionLabel;
name = upRootNutritionName;
email = {
address0 = "nick@${domain3}";
};
sops = {
path0 = "${sopsPath}/${upRootNutritionName}";
};
paths = {
path0 = "/var/lib/website/dist";
path1 = "";
path2 = "";
};
ports = {
port0 = 1234;
};
ssl = {
cert = "${sslPath}/${domain3}/fullchain.pem";
key = "${sslPath}/${domain3}/key.pem";
};
}

View file

@ -0,0 +1,33 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain0
servicePath
sslPath
sopsPath
;
vaultwardenLabel = "Vaultwarden";
vaultwardenName = "vaultwarden";
in
{
label = vaultwardenLabel;
name = vaultwardenName;
email = {
address0 = "noreply@${vaultwardenName}.${domain0}";
};
sops = {
path0 = "${sopsPath}/${vaultwardenName}";
};
subdomain = vaultwardenName;
paths = {
path0 = "${servicePath}/${vaultwardenLabel}/BackupDir";
};
ports = {
port0 = 8085; # Vaultwarden WebUI
};
ssl = {
cert = "${sslPath}/${vaultwardenName}.${domain0}/fullchain.pem";
key = "${sslPath}/${vaultwardenName}.${domain0}/key.pem";
};
}

View file

@ -0,0 +1,26 @@
{ instancesFunctions }:
let
inherit (instancesFunctions)
domain0
domain1
domain2
domain3
;
in
{
domains = {
url0 = domain0;
url1 = domain1;
url2 = domain2;
url3 = domain3;
};
dns = {
provider0 = "namecheap";
};
localhost = {
address0 = "127.0.0.1"; # Local
address1 = "0.0.0.0"; # All
address2 = "192.168.50.1"; # Router
address3 = "192.168.50.0"; # Router
};
}

View file

@ -0,0 +1,39 @@
let
configPath = ./config;
instancesFunctions = {
jellyfinLabel = "Jellyfin";
jellyfinName = "jellyfin";
audiobookshelfLabel = "Audiobookshelf";
audiobookshelfName = "audiobookshelf";
domain0 = "cloudbert.fun";
domain1 = "the-nutrivore.social";
domain2 = "the-nutrivore.com";
domain3 = "uprootnutrition.com";
servicePath = "/mnt/media/NAS1";
sopsPath = "/var/lib/secrets";
sslPath = "/var/lib/acme";
varLib = "/var/lib";
dummy = "";
};
instances = builtins.listToAttrs (
map
(name: {
name = builtins.substring 0 (builtins.stringLength name - 4) name;
value = import (configPath + "/${name}") {
inherit
instancesFunctions
;
};
})
(
builtins.filter (name: builtins.match ".*\\.nix$" name != null) (
builtins.attrNames (builtins.readDir configPath)
)
)
);
in
{
instances = instances;
}

View file

@ -0,0 +1,92 @@
let
currentTheme0 = catppuccin-mocha; # User0 Theme
currentTheme1 = catppuccin-mocha; # User1 Theme
currentTheme2 = catppuccin-mocha; # User2 Theme
brogrammer = "brogrammer";
catppuccin-frappe = "catppuccin-frappe";
catppuccin-latte = "catppuccin-latte";
catppuccin-macchiato = "catppuccin-macchiato";
catppuccin-mocha = "catppuccin-mocha";
chalk = "chalk";
deep-oceanic-next = "deep-oceanic-next";
dracula = "dracula";
espresso = "espresso";
flat = "flat";
framer = "framer";
github = "github";
hardcore = "hardcore";
one-black = "one-black";
one-dark = "one-dark";
one-light = "one light";
sparky = "sparky";
in
{
themes = {
currentTheme = {
theme0 = currentTheme0; # User0 Theme
theme1 = currentTheme1; # User1 Theme
theme2 = currentTheme2; # User2 Theme
};
cursor = {
name = "";
size = 18;
};
fonts = {
names = {
name0 = "MonaspiceNe Nerd Font"; # User0 Font
name1 = ""; # User1 Font
name2 = ""; # User2 Font
};
sizes = {
applications = {
size0 = 14; # User0 Size
size1 = 14; # User1 Size
size2 = 14; # User2 Size
};
desktop = {
size0 = 12; # User0 Size
size1 = 12; # User1 Size
size2 = 12; # User2 Size
};
popups = {
size0 = 10; # User0 Size
size1 = 10; # User1 Size
size2 = 10; # User2 Size
};
terminal = {
size0 = 10; # User0 Size
size1 = 10; # User1 Size
size2 = 10; # User2 Size
};
};
};
palettes =
let
palettePath = ./palettes;
catppuccinPath = /catppuccin;
onePath = /one;
in
{
${brogrammer} = import (palettePath + /brogrammer);
${catppuccin-frappe} = import (palettePath + catppuccinPath + /frappe);
${catppuccin-latte} = import (palettePath + catppuccinPath + /latte);
${catppuccin-macchiato} = import (palettePath + catppuccinPath + /macchiato);
${catppuccin-mocha} = import (palettePath + catppuccinPath + /mocha);
${chalk} = import (palettePath + /chalk);
${deep-oceanic-next} = import (palettePath + /deep-oceanic-next);
${dracula} = import (palettePath + /dracula);
${espresso} = import (palettePath + /espresso);
${flat} = import (palettePath + /flat);
${framer} = import (palettePath + /framer);
${github} = import (palettePath + /github);
${hardcore} = import (palettePath + /hardcore);
${one-black} = import (palettePath + onePath + /black);
${one-dark} = import (palettePath + onePath + /dark);
${one-light} = import (palettePath + onePath + /light);
${sparky} = import (palettePath + /sparky);
};
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "131313";
base01 = "1f1f1f";
base02 = "2a3141";
base03 = "343d50";
base04 = "d6dae4";
base05 = "c1c8d7";
base06 = "e3e6ed";
base07 = "ffffff";
base08 = "f71118";
base09 = "ecb90f";
base0A = "0f80d5";
base0B = "2cc55d";
base0C = "0f80d5";
base0D = "2a84d2";
base0E = "4e59b7";
base0F = "7b080c";
base10 = "0a0a0a";
base11 = "020202";
base12 = "de342e";
base13 = "f2bd09";
base14 = "1dd260";
base15 = "289af0";
base16 = "509bdc";
base17 = "524fb9";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "303446"; # base
base01 = "292c3c"; # mantle
base02 = "414559"; # surface0
base03 = "51576d"; # surface1
base04 = "626880"; # surface2
base05 = "c6d0f5"; # text
base06 = "f2d5cf"; # rosewater label
base07 = "babbf1"; # lavender
base08 = "e78284"; # red
base09 = "ef9f76"; # peach
base0A = "e5c890"; # yellow
base0B = "a6d189"; # green
base0C = "81c8be"; # teal character
base0D = "8caaee"; # blue function
base0E = "ca9ee6"; # mauve
base0F = "eebebe"; # flamingo
base10 = "292c3c"; # mantle - darker background
base11 = "232634"; # crust - darkest background
base12 = "ea999c"; # maroon - bright red parameter
base13 = "f2d5cf"; # rosewater - bright yellow
base14 = "a6d189"; # green - bright green
base15 = "99d1db"; # sky - bright cyan operator
base16 = "85c1dc"; # sapphire - bright blue constructor
base17 = "f4b8e4"; # pink - bright purple
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "eff1f5"; # base
base01 = "e6e9ef"; # mantle
base02 = "ccd0da"; # surface0
base03 = "bcc0cc"; # surface1
base04 = "acb0be"; # surface2
base05 = "4c4f69"; # text
base06 = "dc8a78"; # rosewater
base07 = "7287fd"; # lavender
base08 = "d20f39"; # red
base09 = "fe640b"; # peach
base0A = "df8e1d"; # yellow
base0B = "40a02b"; # green
base0C = "179299"; # teal
base0D = "1e66f5"; # blue
base0E = "8839ef"; # mauve
base0F = "dd7878"; # flamingo
base10 = "e6e9ef"; # mantle - darker background
base11 = "dce0e8"; # crust - darkest background
base12 = "e64553"; # maroon - bright red
base13 = "dc8a78"; # rosewater - bright yellow
base14 = "40a02b"; # green - bright green
base15 = "04a5e5"; # sky - bright cyan
base16 = "209fb5"; # sapphire - bright blue
base17 = "ea76cb"; # pink - bright purple
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "24273a"; # base
base01 = "1e2030"; # mantle
base02 = "363a4f"; # surface0
base03 = "494d64"; # surface1
base04 = "5b6078"; # surface2
base05 = "cad3f5"; # text
base06 = "f4dbd6"; # rosewater
base07 = "b7bdf8"; # lavender
base08 = "ed8796"; # red
base09 = "f5a97f"; # peach
base0A = "eed49f"; # yellow
base0B = "a6da95"; # green
base0C = "8bd5ca"; # teal
base0D = "8aadf4"; # blue
base0E = "c6a0f6"; # mauve
base0F = "f0c6c6"; # flamingo
base10 = "1e2030"; # mantle - darker background
base11 = "181926"; # crust - darkest background
base12 = "ee99a0"; # maroon - bright red
base13 = "f4dbd6"; # rosewater - bright yellow
base14 = "a6da95"; # green - bright green
base15 = "91d7e3"; # sky - bright cyan
base16 = "7dc4e4"; # sapphire - bright blue
base17 = "f5bde6"; # pink - bright purple
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "1e1e2e"; # base
base01 = "181825"; # mantle
base02 = "313244"; # surface0
base03 = "45475a"; # surface1
base04 = "585b70"; # surface2
base05 = "cdd6f4"; # text
base06 = "f5e0dc"; # rosewater
base07 = "b4befe"; # lavender
base08 = "f38ba8"; # red
base09 = "fab387"; # peach
base0A = "f9e2af"; # yellow
base0B = "a6e3a1"; # green
base0C = "94e2d5"; # teal
base0D = "89b4fa"; # blue
base0E = "cba6f7"; # mauve
base0F = "f2cdcd"; # flamingo
base10 = "181825"; # mantle - darker background
base11 = "11111b"; # crust - darkest background
base12 = "eba0ac"; # maroon - bright red
base13 = "f5e0dc"; # rosewater - bright yellow
base14 = "a6e3a1"; # green - bright green
base15 = "89dceb"; # sky - bright cyan
base16 = "74c7ec"; # sapphire - bright blue
base17 = "f5c2e7"; # pink - bright purple
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "151515";
base01 = "202020";
base02 = "303030";
base03 = "505050";
base04 = "b0b0b0";
base05 = "d0d0d0";
base06 = "e0e0e0";
base07 = "f5f5f5";
base08 = "fa859c";
base09 = "ea9971";
base0A = "ddb26f";
base0B = "a1bb54";
base0C = "10bcad";
base0D = "5ab9ed";
base0E = "db8fea";
base0F = "deaf8f";
base10 = "0b0b0b";
base11 = "060606";
base12 = "fb9fb1";
base13 = "eda987";
base14 = "acc267";
base15 = "12cfc0";
base16 = "6fc2ef";
base17 = "e1a3ee";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "001c1f";
base01 = "002931";
base02 = "003640";
base03 = "004852";
base04 = "0093a3";
base05 = "d4e1e8";
base06 = "e0e9ef";
base07 = "f2f7f9";
base08 = "d3464d";
base09 = "e37552";
base0A = "f3b863";
base0B = "63b784";
base0C = "4fb7ae";
base0D = "568ccf";
base0E = "8b66d6";
base0F = "d0658e";
base10 = "1f2628";
base11 = "2a2f30";
base12 = "ff6670";
base13 = "ffe08a";
base14 = "72e1a6";
base15 = "4de3e3";
base16 = "5caeff";
base17 = "b788ff";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "282a36";
base01 = "363447";
base02 = "44475a";
base03 = "6272a4";
base04 = "9ea8c7";
base05 = "f8f8f2";
base06 = "f0f1f4";
base07 = "ffffff";
base08 = "ff5555";
base09 = "ffb86c";
base0A = "f1fa8c";
base0B = "50fa7b";
base0C = "8be9fd";
base0D = "80bfff";
base0E = "ff79c6";
base0F = "bd93f9";
base10 = "1e2029";
base11 = "16171d";
base12 = "f28c8c";
base13 = "eef5a3";
base14 = "a3f5b8";
base15 = "baedf7";
base16 = "a3ccf5";
base17 = "f5a3d2";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "262626";
base01 = "343434";
base02 = "535353";
base03 = "797979";
base04 = "a0a09f";
base05 = "c7c7c5";
base06 = "eeeeec";
base07 = "ffffff";
base08 = "d25151";
base09 = "ffc66d";
base0A = "8ab7d9";
base0B = "a5c261";
base0C = "bed6ff";
base0D = "6c99bb";
base0E = "d197d9";
base0F = "692828";
base10 = "373737";
base11 = "1b1b1b";
base12 = "f00c0c";
base13 = "e1e38b";
base14 = "c2e075";
base15 = "dcf3ff";
base16 = "8ab7d9";
base17 = "efb5f7";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "082845";
base01 = "1d2845";
base02 = "2e2e45";
base03 = "444e5b";
base04 = "68717b";
base05 = "8c939a";
base06 = "b0b6ba";
base07 = "e7eced";
base08 = "a82320";
base09 = "e58d11";
base0A = "3c7dd2";
base0B = "2d9440";
base0C = "2c9370";
base0D = "3167ac";
base0E = "781aa0";
base0F = "541110";
base10 = "002240";
base11 = "001629";
base12 = "d4312e";
base13 = "e5be0c";
base14 = "32a548";
base15 = "35b387";
base16 = "3c7dd2";
base17 = "8230a7";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "111111";
base01 = "141414";
base02 = "414141";
base03 = "636363";
base04 = "868686";
base05 = "a9a9a9";
base06 = "cccccc";
base07 = "ffffff";
base08 = "ff5555";
base09 = "ffcc33";
base0A = "33bbff";
base0B = "98ec65";
base0C = "88ddff";
base0D = "00aaff";
base0E = "aa88ff";
base0F = "7f2a2a";
base10 = "2b2b2b";
base11 = "151515";
base12 = "ff8888";
base13 = "ffd966";
base14 = "b6f292";
base15 = "bbecff";
base16 = "33bbff";
base17 = "cebbff";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "f4f4f4";
base01 = "3e3e3e";
base02 = "666666";
base03 = "8c8c8c";
base04 = "b2b2b2";
base05 = "d8d8d8";
base06 = "ffffff";
base07 = "ffffff";
base08 = "970b16";
base09 = "f8eec7";
base0A = "2e6cba";
base0B = "07962a";
base0C = "89d1ec";
base0D = "003e8a";
base0E = "e94691";
base0F = "4b050b";
base10 = "444444";
base11 = "222222";
base12 = "de0000";
base13 = "f1d007";
base14 = "87d5a2";
base15 = "1cfafe";
base16 = "2e6cba";
base17 = "ffa29f";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "111111";
base01 = "141414";
base02 = "414141";
base03 = "636363";
base04 = "868686";
base05 = "a9a9a9";
base06 = "cccccc";
base07 = "ffffff";
base08 = "ff5555";
base09 = "ffcc33";
base0A = "33bbff";
base0B = "98ec65";
base0C = "88ddff";
base0D = "00aaff";
base0E = "aa88ff";
base0F = "7f2a2a";
base10 = "0a0a0a";
base11 = "060606";
base12 = "ff8888";
base13 = "ffd966";
base14 = "b6f292";
base15 = "bbecff";
base16 = "33bbff";
base17 = "cebbff";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "000000";
base01 = "000000";
base02 = "4f5666";
base03 = "545862";
base04 = "9196a1";
base05 = "abb2bf";
base06 = "e6e6e6";
base07 = "ffffff";
base08 = "e05561";
base09 = "d18f52";
base0A = "e6b965";
base0B = "8cc265";
base0C = "42b3c2";
base0D = "4aa5f0";
base0E = "c162de";
base0F = "bf4034";
base10 = "000000";
base11 = "000000";
base12 = "ff616e";
base13 = "f0a45d";
base14 = "a5e075";
base15 = "4cd1e0";
base16 = "4dc4ff";
base17 = "de73ff";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "282c34";
base01 = "3f4451";
base02 = "4f5666";
base03 = "545862";
base04 = "9196a1";
base05 = "abb2bf";
base06 = "e6e6e6";
base07 = "ffffff";
base08 = "e05561";
base09 = "d18f52";
base0A = "e6b965";
base0B = "8cc265";
base0C = "42b3c2";
base0D = "4aa5f0";
base0E = "c162de";
base0F = "bf4034";
base10 = "21252b";
base11 = "181a1f";
base12 = "ff616e";
base13 = "f0a45d";
base14 = "a5e075";
base15 = "4cd1e0";
base16 = "4dc4ff";
base17 = "de73ff";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "e7e7e9";
base01 = "dfdfe1";
base02 = "cacace";
base03 = "a0a1a7";
base04 = "696c77";
base05 = "383a42";
base06 = "202227";
base07 = "090a0b";
base08 = "ca1243";
base09 = "c18401";
base0A = "febb2a";
base0B = "50a14f";
base0C = "0184bc";
base0D = "4078f2";
base0E = "a626a4";
base0F = "986801";
base10 = "f0f0f1";
base11 = "fafafa";
base12 = "ec2258";
base13 = "f4a701";
base14 = "6db76c";
base15 = "01a7ef";
base16 = "709af5";
base17 = "d02fcd";
};
}

View file

@ -0,0 +1,29 @@
{
font = "";
colours = {
base00 = "072B31";
base01 = "00313C";
base02 = "003C46";
base03 = "003B49";
base04 = "00778B";
base05 = "F4F5F0";
base06 = "F5F5F1";
base07 = "FFFFFF";
base08 = "FF585D";
base09 = "FF8F1C";
base0A = "FBDD40";
base0B = "78D64B";
base0C = "2DCCD3";
base0D = "4698CB";
base0E = "D59ED7";
base0F = "9B704D";
base10 = "4B4F54";
base11 = "212322";
base12 = "FF7276";
base13 = "F6EB61";
base14 = "8EDD65";
base15 = "00C1D5";
base16 = "69B3E7";
base17 = "F99FC9";
};
}

View file

@ -0,0 +1,27 @@
{ user0 }:
let
inherit
user0
;
in
{
name = "Nick";
aliases = {
name0 = "BRBWaffles";
name1 = "brbwaffles";
name2 = "Nutrivore";
name3 = "nutrivore";
name4 = "upRootNutrition";
};
email = {
address0 = "nickjhiebert@proton.me";
address1 = "thenutrivore@proton.me";
address2 = "nick@uprootnutrition.com";
};
paths = {
path0 = "/home/${user0}/Files/Projects"; # Git path
};
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBF9TmImDoYDpsW5VMFbOcuK3aH4TWRtx/xGxT3yUtEN nick@desktop"
];
}

View file

@ -0,0 +1,15 @@
{ user1 }:
let
inherit
user1
;
in
{
name = "Garnet";
email = {
address0 = "ninaeffler@gmail.com";
};
paths = {
path0 = "/home/${user1}/Files/Projects"; # Git path
};
}

View file

@ -0,0 +1,19 @@
{ user2 }:
let
inherit
user2
;
in
{
name = "Stacie";
email = {
address0 = "staciesimonson@gmail.com";
};
paths = {
path0 = "/home/${user2}"; # Git path
};
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILQQDw0NigCC76G/GlHWIMunckaBmfgqbfJXFGWB+8fe stacie@desktop"
];
}

View file

@ -0,0 +1,20 @@
{ user3 }:
let
inherit
user3
;
in
{
name = "Streaming";
aliases = {
};
email = {
address0 = "nick@upRootNutrition.com";
};
paths = {
path0 = "/home/${user3}/Files/Projects"; # Git path
};
sshKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBF9TmImDoYDpsW5VMFbOcuK3aH4TWRtx/xGxT3yUtEN nick@desktop"
];
}

View file

@ -0,0 +1,22 @@
let
configPath = ./config;
user0 = "nick";
user1 = "garnet";
user2 = "fallaryn";
user3 = "streaming";
in
{
inherit
user0
user1
user2
user3
;
users = {
"${user0}" = import (configPath + /user0.nix) { inherit user0; };
"${user1}" = import (configPath + /user1.nix) { inherit user1; };
"${user2}" = import (configPath + /user2.nix) { inherit user2; };
"${user3}" = import (configPath + /user3.nix) { inherit user3; };
};
}