Compare commits

..

No commits in common. "77a31e96885c84e3d4ae6d6e8d6b02b976bc3239" and "cd118791e5b6b67c0d12bd18ea8a55e0f0d52f19" have entirely different histories.

27 changed files with 74 additions and 243 deletions

View file

@ -57,7 +57,6 @@ let
label = stringType; label = stringType;
name = stringType; name = stringType;
hostname = stringType; hostname = stringType;
tags = listType;
domains = genOptions stringType "url"; domains = genOptions stringType "url";
dns = genOptions stringType "provider"; dns = genOptions stringType "provider";
localhost = genOptions stringType "address"; localhost = genOptions stringType "address";
@ -242,7 +241,6 @@ in
sopsPath = "/var/lib/secrets"; sopsPath = "/var/lib/secrets";
sslPath = "/var/lib/acme"; sslPath = "/var/lib/acme";
varLib = "/var/lib"; varLib = "/var/lib";
synologyName = "synology";
dummy = ""; dummy = "";
}; };

View file

@ -21,9 +21,6 @@ in
url0 = audiobookshelfDomain; url0 = audiobookshelfDomain;
}; };
subdomain = audiobookshelfSubdomain; subdomain = audiobookshelfSubdomain;
tags = [
];
paths = { paths = {
path0 = "${servicePath}/${audiobookshelfLabel}"; path0 = "${servicePath}/${audiobookshelfLabel}";
}; };

View file

@ -25,11 +25,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = subdomain; subdomain = subdomain;
tags = [
name
"forge"
"git"
];
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";
}; };

View file

@ -25,12 +25,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = subdomain; subdomain = subdomain;
tags = [
"glance"
"dashboard"
"weather"
"podcasts"
];
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";
}; };

View file

@ -19,14 +19,6 @@ in
domains = { domains = {
url0 = domain; url0 = domain;
}; };
tags = [
"jelly"
"video"
"streaming"
"movies"
"shows"
"music"
];
subdomain = name; subdomain = name;
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";

View file

@ -22,11 +22,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = subdomain; subdomain = subdomain;
tags = [
name
"mast"
"md"
];
sops = { sops = {
path0 = "${sopsPath}/${name}"; path0 = "${sopsPath}/${name}";
}; };

View file

@ -15,9 +15,6 @@ in
path0 = "${sopsPath}/${name}"; path0 = "${sopsPath}/${name}";
}; };
subdomain = name; subdomain = name;
tags = [
];
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";
path1 = ""; path1 = "";

View file

@ -24,12 +24,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = name; subdomain = name;
tags = [
name
"next"
"cloud"
"calendar"
];
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";
}; };

View file

@ -21,11 +21,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = name; subdomain = name;
tags = [
name
"chat"
"ai"
];
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";
path1 = "/mnt/media/storage/${name}"; path1 = "/mnt/media/storage/${name}";

View file

@ -1,43 +0,0 @@
{ moduleFunctions }:
let
inherit (moduleFunctions.instancesFunctions)
domain0
servicePath
sslPath
sopsPath
;
label = "OpenCloud";
name = "opencloud";
subdomain = "cloud";
domain = "${subdomain}.${domain0}";
in
{
label = label;
name = name;
email = {
address0 = "noreply@${domain0}";
};
sops = {
path0 = "${sopsPath}/${name}";
};
domains = {
url0 = domain;
};
subdomain = subdomain;
tags = [
name
"opencloud"
"cloud"
];
paths = {
path0 = "${servicePath}/${label}";
};
ports = {
port0 = 9200;
};
ssl = {
cert = "${sslPath}/${subdomain}.${domain0}/fullchain.pem";
key = "${sslPath}/${subdomain}.${domain0}/key.pem";
};
}

View file

@ -22,9 +22,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = subdomain; subdomain = subdomain;
tags = [
];
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";
path1 = "/mnt/media/storage/${name}"; path1 = "/mnt/media/storage/${name}";

View file

@ -25,9 +25,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = subdomain; subdomain = subdomain;
tags = [
];
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";
}; };

View file

@ -25,11 +25,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = subdomain; subdomain = subdomain;
tags = [
"search"
"sear"
"searx"
];
paths = { paths = {
path0 = "${servicePath}/${label}"; path0 = "${servicePath}/${label}";
}; };

View file

@ -4,7 +4,6 @@ let
domain0 domain0
sslPath sslPath
sopsPath sopsPath
synologyName
; ;
label = "Syncthing"; label = "Syncthing";
@ -21,12 +20,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = name; subdomain = name;
tags = [
name
synologyName
"sync"
"thing"
];
ports = { ports = {
port0 = 8388; # Syncthing (WebUI) port0 = 8388; # Syncthing (WebUI)
port1 = 21027; # Syncthing (Discovery) port1 = 21027; # Syncthing (Discovery)

View file

@ -2,20 +2,14 @@
let let
inherit (moduleFunctions.instancesFunctions) inherit (moduleFunctions.instancesFunctions)
sopsPath sopsPath
synologyName
; ;
label = "Synology"; label = "Synology";
name = synologyName; name = "synology";
in in
{ {
label = label; label = label;
name = name; name = name;
tags = [
name
"dsm"
"cloud"
];
sops = { sops = {
path0 = "${sopsPath}/${name}"; path0 = "${sopsPath}/${name}";
}; };

View file

@ -18,13 +18,6 @@ in
sops = { sops = {
path0 = "${sopsPath}/${name}"; path0 = "${sopsPath}/${name}";
}; };
domains = {
url0 = domain3;
};
tags = [
name
"blog"
];
paths = { paths = {
path0 = "/var/lib/website/dist"; path0 = "/var/lib/website/dist";
path1 = ""; path1 = "";

View file

@ -24,13 +24,6 @@ in
url0 = domain; url0 = domain;
}; };
subdomain = name; subdomain = name;
tags = [
name
"bitwarden"
"vault"
"bit"
"warden"
];
paths = { paths = {
path0 = "${servicePath}/${label}/BackupDir"; path0 = "${servicePath}/${label}/BackupDir";
}; };

View file

@ -8,8 +8,6 @@ let
; ;
in in
{ {
name = "router";
label = "Router";
domains = { domains = {
url0 = domain0; url0 = domain0;
url1 = domain1; url1 = domain1;
@ -19,10 +17,6 @@ in
dns = { dns = {
provider0 = "namecheap"; provider0 = "namecheap";
}; };
tags = [
"router"
"asus"
];
localhost = { localhost = {
address0 = "127.0.0.1"; # Local address0 = "127.0.0.1"; # Local
address1 = "0.0.0.0"; # All address1 = "0.0.0.0"; # All

View file

@ -15,6 +15,25 @@ let
instances instances
; ;
jellyfinTags = [
"jelly"
"video"
"streaming"
"movies"
"shows"
"music"
];
ollamaTags = [
instances.ollama.name
"chat"
"ai"
];
syncthingTags = [
instances.syncthing.name
"sync"
"thing"
instances.synology.name
];
in in
{ {
name = "Self Hosted"; name = "Self Hosted";
@ -30,39 +49,35 @@ in
]; ];
keyword = "Website"; keyword = "Website";
} }
{
name = instances.opencloud.label;
url = "https://${instances.opencloud.domains.url0}";
tags = [
];
keyword = "Cloud";
}
{ {
name = instances.forgejo.label; name = instances.forgejo.label;
url = "https://${instances.forgejo.domains.url0}"; url = "https://${instances.forgejo.domains.url0}";
tags = [ tags = [
instances.forgejo.name
"forge"
"git"
]; ];
keyword = instances.forgejo.label; keyword = instances.forgejo.label;
} }
{ {
name = "${instances.jellyfin.label} (Internet)"; name = "${instances.jellyfin.label} (Internet)";
url = "https://${instances.jellyfin.domains.url0}"; url = "https://${instances.jellyfin.domains.url0}";
tags = [ ]; tags = jellyfinTags;
keyword = instances.jellyfin.label; keyword = instances.jellyfin.label;
} }
{ {
name = "${instances.jellyfin.label} (Local)"; name = "${instances.jellyfin.label} (Local)";
url = "http://${ceres.ip.address0}:${toString instances.jellyfin.ports.port1}"; url = "http://${ceres.ip.address0}:${toString instances.jellyfin.ports.port1}";
tags = [ ]; tags = jellyfinTags;
keyword = instances.jellyfin.label; keyword = instances.jellyfin.label;
} }
{ {
name = instances.mastodon.label; name = instances.mastodon.label;
url = "https://${instances.mastodon.domains.url0}"; url = "https://${instances.mastodon.domains.url0}";
tags = [ tags = [
instances.mastodon.name
"mast"
"md"
]; ];
keyword = instances.mastodon.label; keyword = instances.mastodon.label;
} }
@ -81,34 +96,51 @@ in
name = instances.nextcloud.label; name = instances.nextcloud.label;
url = "https://${instances.nextcloud.domains.url0}"; url = "https://${instances.nextcloud.domains.url0}";
tags = [ tags = [
instances.nextcloud.name
"next"
"cloud"
"calendar"
]; ];
keyword = instances.nextcloud.label; keyword = instances.nextcloud.label;
} }
{
name = aliases.name2;
url = instances.web.domains.url2;
tags = [
aliases.name3
"blog"
];
keyword = aliases.name2;
}
{ {
name = "${instances.glance.label} (Local)"; name = "${instances.glance.label} (Local)";
url = "https://${instances.glance.domains.url0}"; url = "https://${instances.glance.domains.url0}";
tags = [ tags = [
"glance"
"dashboard"
"weather"
"podcasts"
]; ];
keyword = instances.glance.label; keyword = instances.glance.label;
} }
{ {
name = "${instances.ollama.label} (Server)"; name = "${instances.ollama.label} (Server)";
url = "https://${instances.ollama.domains.url0}"; url = "https://${instances.ollama.domains.url0}";
tags = [ ]; tags = ollamaTags;
keyword = instances.ollama.label; keyword = instances.ollama.label;
} }
{ {
name = "${instances.ollama.label} (Desktop)"; name = "${instances.ollama.label} (Desktop)";
url = "http://${mars.ip.address0}:${toString instances.ollama.ports.port0}"; url = "http://${mars.ip.address0}:${toString instances.ollama.ports.port0}";
tags = [ ]; tags = ollamaTags;
keyword = instances.ollama.label; keyword = instances.ollama.label;
} }
{ {
name = "Router"; name = "Router";
url = "http://${instances.web.localhost.address2}"; url = "http://${instances.web.localhost.address2}";
tags = [ tags = [
"router"
"asus"
]; ];
keyword = "Router"; keyword = "Router";
} }
@ -116,7 +148,9 @@ in
name = "${instances.searx.label} (Internet)"; name = "${instances.searx.label} (Internet)";
url = "https://${instances.searx.domains.url0}"; url = "https://${instances.searx.domains.url0}";
tags = [ tags = [
"search"
"sear"
"searx"
]; ];
keyword = instances.searx.label; keyword = instances.searx.label;
} }
@ -124,21 +158,25 @@ in
name = "${instances.syncthing.label} (${instances.synology.label})"; name = "${instances.syncthing.label} (${instances.synology.label})";
url = "http://${synology.ip.address0}:${toString instances.syncthing.ports.port0}"; url = "http://${synology.ip.address0}:${toString instances.syncthing.ports.port0}";
tags = [ tags = [
]; "synology"
] ++ syncthingTags;
keyword = instances.syncthing.label; keyword = instances.syncthing.label;
} }
{ {
name = "${instances.syncthing.label} (Desktop)"; name = "${instances.syncthing.label} (Desktop)";
url = "http://localhost:${toString instances.syncthing.ports.port0}"; url = "http://localhost:${toString instances.syncthing.ports.port0}";
tags = [ tags = [
]; "desktop"
] ++ syncthingTags;
keyword = instances.syncthing.label; keyword = instances.syncthing.label;
} }
{ {
name = instances.synology.label; name = instances.synology.label;
url = "https://${synology.ip.address0}:${toString instances.synology.ports.port0}"; url = "https://${synology.ip.address0}:${toString instances.synology.ports.port0}";
tags = [ tags = [
instances.synology.name
"dsm"
"cloud"
]; ];
keyword = instances.synology.label; keyword = instances.synology.label;
} }
@ -146,7 +184,11 @@ in
name = instances.vaultwarden.label; name = instances.vaultwarden.label;
url = "https://${instances.vaultwarden.domains.url0}"; url = "https://${instances.vaultwarden.domains.url0}";
tags = [ tags = [
instances.vaultwarden.name
"bitwarden"
"vault"
"bit"
"warden"
]; ];
keyword = instances.vaultwarden.label; keyword = instances.vaultwarden.label;
} }

View file

@ -11,7 +11,7 @@ let
localhost = web.localhost.address0; localhost = web.localhost.address0;
in in
{ {
agent = { assistant = {
enabled = true; enabled = true;
default_model = { default_model = {
provider = "zed.dev"; provider = "zed.dev";

View file

@ -23,7 +23,7 @@ in
{ {
programs.zed-editor = { programs.zed-editor = {
enable = true; enable = true;
# package = packagePath; package = packagePath;
extraPackages = extraPackagesPath; extraPackages = extraPackagesPath;
extensions = extensionsPath; extensions = extensionsPath;
userKeymaps = userKeymapsPath; userKeymaps = userKeymapsPath;

View file

@ -84,14 +84,11 @@ let
"3, movetoworkspacesilent, 3" "3, movetoworkspacesilent, 3"
"4, movetoworkspacesilent, 4" "4, movetoworkspacesilent, 4"
"5, movetoworkspacesilent, 5" "5, movetoworkspacesilent, 5"
# Window Move
"C, movewindow, l" "C, movewindow, l"
"A, movewindow, u" "A, movewindow, u"
"E, movewindow, d" "E, movewindow, d"
"I, movewindow, r" "I, movewindow, r"
"Left, movewindow, l"
"Up, movewindow, u"
"Down, movewindow, d"
"Right, movewindow, r"
]; ];
shiftBinds = builtins.map (x: "SHIFT, " + x) [ shiftBinds = builtins.map (x: "SHIFT, " + x) [
@ -111,6 +108,10 @@ let
"3, movetoworkspacesilent, 3" "3, movetoworkspacesilent, 3"
"4, movetoworkspacesilent, 4" "4, movetoworkspacesilent, 4"
"5, movetoworkspacesilent, 5" "5, movetoworkspacesilent, 5"
"Left, movewindow, l"
"Up, movewindow, u"
"Down, movewindow, d"
"Right, movewindow, r"
]; ];
functionBinds = builtins.map (x: " , " + x) [ functionBinds = builtins.map (x: " , " + x) [

View file

@ -58,7 +58,6 @@ in
mastodon mastodon
minecraft minecraft
ollama ollama
opencloud
postgresql postgresql
samba samba
searx searx

View file

@ -41,7 +41,6 @@ in
"searx" "searx"
"syncthing" "syncthing"
"vaultwarden" "vaultwarden"
"opencloud"
] ]
) )
++ (map ++ (map

View file

@ -107,6 +107,7 @@ in
}) })
[ [
"pass" "pass"
"smtp"
] ]
); );
}; };

View file

@ -1,79 +0,0 @@
{ config, flake, ... }:
let
inherit (flake.config.machines.devices) ceres;
inherit (flake.config.services.instances) opencloud web;
service = opencloud;
localhost = web.localhost.address0;
host = service.domains.url0;
in
{
services = {
opencloud = {
enable = true;
url = "https://${host}";
port = service.ports.port0;
address = localhost;
stateDir = "/var/lib/${service.name}";
environmentFile = config.sops.secrets."${service.name}/env".path;
};
caddy = {
virtualHosts = {
"${host}" = {
extraConfig = ''
reverse_proxy https://${localhost}:${toString service.ports.port0} {
transport http {
tls_insecure_skip_verify
}
}
tls ${service.ssl.cert} ${service.ssl.key}
'';
};
};
};
};
sops =
let
sopsPath = secret: {
path = "${service.sops.path0}/${service.name}-${secret}";
owner = service.name;
mode = "600";
};
in
{
secrets = builtins.listToAttrs (
map
(secret: {
name = "${service.name}/${secret}";
value = sopsPath secret;
})
[
"env"
]
);
};
fileSystems."/var/lib/${service.name}" = {
device = service.paths.path0;
fsType = "none";
options = [
"bind"
];
depends = [
ceres.storage0.mount
];
};
systemd.tmpfiles.rules = [
"Z ${service.paths.path0} 755 ${service.name} ${service.name} -"
"Z ${service.sops.path0} 755 ${service.name} ${service.name} -"
];
networking = {
firewall = {
allowedTCPPorts = [
service.ports.port0
];
};
};
}

View file

@ -47,8 +47,6 @@ kanboard-smtp: ENC[AES256_GCM,data:eOIEGwJZlvbJaTfDRU3IFQ==,iv:Jex01WlHG3uxqUnTS
podgrab-pass: ENC[AES256_GCM,data:DVmJDb4VqcZDKNcedSaRA5dqKOzx1tSzDiK3i23+a6v3nK+4Kh7n8EA=,iv:SiiUjJLHkCOO1VKCmubftKx06laFqNv79tIPnkVYrJU=,tag:kdkT+03DemlNAsuzps8fnw==,type:str] podgrab-pass: ENC[AES256_GCM,data:DVmJDb4VqcZDKNcedSaRA5dqKOzx1tSzDiK3i23+a6v3nK+4Kh7n8EA=,iv:SiiUjJLHkCOO1VKCmubftKx06laFqNv79tIPnkVYrJU=,tag:kdkT+03DemlNAsuzps8fnw==,type:str]
firefly-iii-key: ENC[AES256_GCM,data:tLJfwB8De1vdGeccr4SxifU7KYAfnasoXISvz5mSR28=,iv:vknG+h2D04lECHE/PPA53aZqWk4ouYcH+WfP7WooPYU=,tag:HKma2cydw58pAnvOFH53fA==,type:str] firefly-iii-key: ENC[AES256_GCM,data:tLJfwB8De1vdGeccr4SxifU7KYAfnasoXISvz5mSR28=,iv:vknG+h2D04lECHE/PPA53aZqWk4ouYcH+WfP7WooPYU=,tag:HKma2cydw58pAnvOFH53fA==,type:str]
firefly-iii-pass: ENC[AES256_GCM,data:eJwIM4YHnXTqTOUfU/0CKMSS534VEZIxkBviI1pd7R4=,iv:pUv8ok5nLDGeCcP2hsTculk+MPPAjkupidQO0Jkc3Wc=,tag:zq7+lFjdOr5ORpthqXW8EA==,type:str] firefly-iii-pass: ENC[AES256_GCM,data:eJwIM4YHnXTqTOUfU/0CKMSS534VEZIxkBviI1pd7R4=,iv:pUv8ok5nLDGeCcP2hsTculk+MPPAjkupidQO0Jkc3Wc=,tag:zq7+lFjdOr5ORpthqXW8EA==,type:str]
opencloud:
env: ENC[AES256_GCM,data:JZOs+86/jhHtXuOb4fsk4ceZuFpSa6PAMN2/vmGlvlXvsx/Yk2ZXeZZU0jtwweN8Sk61A2538OdPpfKynBgwsZ2SgoxAIyJtQl3HZWdZzNZ6+/t+AFvvav/x9nUv1O5704FP5OYOMniQAmqu0ds0JIX3YV/cstoo+rNhNW2emlVhj2ABYhTxy0BFJ8A+Re9y5FN5WT4tmloF/21ZrIwtTw8ULQPCksJfTFwEE+cCN3aIWZn00/4zUuv6CEtZeKeOeLxgQL+G2pPhNrQzG+lw+AKLzXA2mJM+3Zfq0MplyXeFCLkV1GCHksrMPp2w5j2RdtfcdE9IP+tXoD/fZNfYgCK1Pk/JhkXcV9EPbz4KUL/+OpgFqh+RvKGPXH2iTV0B8t2Ag7NowxULI2jKw0c=,iv:1ClzjY1n48cQ9bdBewM5A5Lr/c13HbSSYJ7xYCwZDzA=,tag:FavwE2sX+wSgKOEpywFeMw==,type:str]
sops: sops:
age: age:
- recipient: age19dpncsdphdt2tmknjs99eghk527pvdrw0m29qjn2z2gg3et5tdtqycqhl0 - recipient: age19dpncsdphdt2tmknjs99eghk527pvdrw0m29qjn2z2gg3et5tdtqycqhl0
@ -60,7 +58,7 @@ sops:
bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD
aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig== aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-07-07T22:29:06Z" lastmodified: "2025-07-04T00:40:18Z"
mac: ENC[AES256_GCM,data:MmVn9KJcM92hiubQti6vbw5sg4NldFU7uxAgX4b6lL7+6LaaIznrqBcplIAcelVWCvZhcQ25L4oQP0da7JgJDzMsiPYawy33MsSWatdST3PPr7ozvQqSgucbUcPja7Fyl6Yr0ijqkH2d8EdOg5km15LaEGir2jkDi+lBRmL2Msc=,iv:VYsheWRXrih4SYgtS5qVa9ZM8kw0k7ZOlKpEkCmBsHQ=,tag:eByH+iVgznc7A0F3HSX9/g==,type:str] mac: ENC[AES256_GCM,data:N2BwAzga2/Ig96p49rqNhhZ2udYWt7mQ9JD8DFXuxa3HOh3gtx7FWeWpGjvLnLWCgGcT4R61RKmgZQZRADNxYPE3vtdpPOFz0XvgcYSDlwslzBdSsVc08sh77P0LDgZsCzE1MxYynQ6nzFcc6gW5sorInLarsHoCCBC+Z5YpOVg=,iv:H6d3VrERM02/1zI5boFemEpMYD3greYZRqlSpBqROzM=,tag:TEakUvOlKoZYo/XPS6HVnA==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.10.2 version: 3.10.2