mirror of
https://gitlab.com/upRootNutrition/dotfiles.git
synced 2025-08-08 21:04:38 -05:00
Compare commits
38 commits
cd118791e5
...
77a31e9688
Author | SHA1 | Date | |
---|---|---|---|
![]() |
77a31e9688 | ||
![]() |
85117d2dca | ||
![]() |
da476c8d83 | ||
![]() |
9fc9a411d8 | ||
![]() |
60b1d395d4 | ||
![]() |
f67c2794d6 | ||
![]() |
42fa5f15a1 | ||
![]() |
6804acfc28 | ||
![]() |
17b17a866e | ||
![]() |
11b3634d56 | ||
![]() |
1e99a5aff9 | ||
![]() |
9a32cc9f72 | ||
![]() |
34828ec16b | ||
![]() |
d557f2c07c | ||
![]() |
10961d5dba | ||
![]() |
954a7d83bc | ||
![]() |
7b7e2f85ff | ||
![]() |
89e4a72dae | ||
![]() |
d33328926e | ||
![]() |
537619237e | ||
![]() |
fa54767e7f | ||
![]() |
6e3ce364a5 | ||
![]() |
da32d96346 | ||
![]() |
625e1ffd2f | ||
![]() |
c6911defae | ||
![]() |
c40d8064d5 | ||
![]() |
6905ba746b | ||
![]() |
9c65eb3d71 | ||
![]() |
3ab2ef86b9 | ||
![]() |
9a37c3b357 | ||
![]() |
1535f418b5 | ||
![]() |
e763a580ca | ||
![]() |
8cf23010b7 | ||
![]() |
aa0e210939 | ||
![]() |
c6db591e36 | ||
![]() |
df578da148 | ||
![]() |
8b136c2c9c | ||
![]() |
12e7183973 |
27 changed files with 243 additions and 74 deletions
|
@ -57,6 +57,7 @@ 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";
|
||||||
|
@ -241,6 +242,7 @@ 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 = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,9 @@ in
|
||||||
url0 = audiobookshelfDomain;
|
url0 = audiobookshelfDomain;
|
||||||
};
|
};
|
||||||
subdomain = audiobookshelfSubdomain;
|
subdomain = audiobookshelfSubdomain;
|
||||||
|
tags = [
|
||||||
|
|
||||||
|
];
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${audiobookshelfLabel}";
|
path0 = "${servicePath}/${audiobookshelfLabel}";
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,6 +25,11 @@ in
|
||||||
url0 = domain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = subdomain;
|
subdomain = subdomain;
|
||||||
|
tags = [
|
||||||
|
name
|
||||||
|
"forge"
|
||||||
|
"git"
|
||||||
|
];
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${label}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,6 +25,12 @@ in
|
||||||
url0 = domain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = subdomain;
|
subdomain = subdomain;
|
||||||
|
tags = [
|
||||||
|
"glance"
|
||||||
|
"dashboard"
|
||||||
|
"weather"
|
||||||
|
"podcasts"
|
||||||
|
];
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${label}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,6 +19,14 @@ 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}";
|
||||||
|
|
|
@ -22,6 +22,11 @@ in
|
||||||
url0 = domain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = subdomain;
|
subdomain = subdomain;
|
||||||
|
tags = [
|
||||||
|
name
|
||||||
|
"mast"
|
||||||
|
"md"
|
||||||
|
];
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${name}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,6 +15,9 @@ in
|
||||||
path0 = "${sopsPath}/${name}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
subdomain = name;
|
subdomain = name;
|
||||||
|
tags = [
|
||||||
|
|
||||||
|
];
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${label}";
|
path0 = "${servicePath}/${label}";
|
||||||
path1 = "";
|
path1 = "";
|
||||||
|
|
|
@ -24,6 +24,12 @@ in
|
||||||
url0 = domain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = name;
|
subdomain = name;
|
||||||
|
tags = [
|
||||||
|
name
|
||||||
|
"next"
|
||||||
|
"cloud"
|
||||||
|
"calendar"
|
||||||
|
];
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${label}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,6 +21,11 @@ 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}";
|
||||||
|
|
43
modules/config/instances/config/opencloud.nix
Executable file
43
modules/config/instances/config/opencloud.nix
Executable file
|
@ -0,0 +1,43 @@
|
||||||
|
{ 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";
|
||||||
|
};
|
||||||
|
}
|
|
@ -22,6 +22,9 @@ 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}";
|
||||||
|
|
|
@ -25,6 +25,9 @@ in
|
||||||
url0 = domain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = subdomain;
|
subdomain = subdomain;
|
||||||
|
tags = [
|
||||||
|
|
||||||
|
];
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${label}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,6 +25,11 @@ in
|
||||||
url0 = domain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = subdomain;
|
subdomain = subdomain;
|
||||||
|
tags = [
|
||||||
|
"search"
|
||||||
|
"sear"
|
||||||
|
"searx"
|
||||||
|
];
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${label}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,6 +4,7 @@ let
|
||||||
domain0
|
domain0
|
||||||
sslPath
|
sslPath
|
||||||
sopsPath
|
sopsPath
|
||||||
|
synologyName
|
||||||
;
|
;
|
||||||
|
|
||||||
label = "Syncthing";
|
label = "Syncthing";
|
||||||
|
@ -20,6 +21,12 @@ 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)
|
||||||
|
|
|
@ -2,14 +2,20 @@
|
||||||
let
|
let
|
||||||
inherit (moduleFunctions.instancesFunctions)
|
inherit (moduleFunctions.instancesFunctions)
|
||||||
sopsPath
|
sopsPath
|
||||||
|
synologyName
|
||||||
;
|
;
|
||||||
|
|
||||||
label = "Synology";
|
label = "Synology";
|
||||||
name = "synology";
|
name = synologyName;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = label;
|
label = label;
|
||||||
name = name;
|
name = name;
|
||||||
|
tags = [
|
||||||
|
name
|
||||||
|
"dsm"
|
||||||
|
"cloud"
|
||||||
|
];
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${name}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,6 +18,13 @@ 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 = "";
|
||||||
|
|
|
@ -24,6 +24,13 @@ 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";
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,6 +8,8 @@ let
|
||||||
;
|
;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
name = "router";
|
||||||
|
label = "Router";
|
||||||
domains = {
|
domains = {
|
||||||
url0 = domain0;
|
url0 = domain0;
|
||||||
url1 = domain1;
|
url1 = domain1;
|
||||||
|
@ -17,6 +19,10 @@ 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
|
||||||
|
|
|
@ -15,25 +15,6 @@ 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";
|
||||||
|
@ -49,35 +30,39 @@ 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 = jellyfinTags;
|
tags = [ ];
|
||||||
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 = jellyfinTags;
|
tags = [ ];
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@ -96,51 +81,34 @@ 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 = ollamaTags;
|
tags = [ ];
|
||||||
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 = ollamaTags;
|
tags = [ ];
|
||||||
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";
|
||||||
}
|
}
|
||||||
|
@ -148,9 +116,7 @@ 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;
|
||||||
}
|
}
|
||||||
|
@ -158,25 +124,21 @@ 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;
|
||||||
}
|
}
|
||||||
|
@ -184,11 +146,7 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ let
|
||||||
localhost = web.localhost.address0;
|
localhost = web.localhost.address0;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
assistant = {
|
agent = {
|
||||||
enabled = true;
|
enabled = true;
|
||||||
default_model = {
|
default_model = {
|
||||||
provider = "zed.dev";
|
provider = "zed.dev";
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -84,11 +84,14 @@ 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) [
|
||||||
|
@ -108,10 +111,6 @@ 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) [
|
||||||
|
|
|
@ -58,6 +58,7 @@ in
|
||||||
mastodon
|
mastodon
|
||||||
minecraft
|
minecraft
|
||||||
ollama
|
ollama
|
||||||
|
opencloud
|
||||||
postgresql
|
postgresql
|
||||||
samba
|
samba
|
||||||
searx
|
searx
|
||||||
|
|
|
@ -41,6 +41,7 @@ in
|
||||||
"searx"
|
"searx"
|
||||||
"syncthing"
|
"syncthing"
|
||||||
"vaultwarden"
|
"vaultwarden"
|
||||||
|
"opencloud"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
++ (map
|
++ (map
|
||||||
|
|
|
@ -107,7 +107,6 @@ in
|
||||||
})
|
})
|
||||||
[
|
[
|
||||||
"pass"
|
"pass"
|
||||||
"smtp"
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
79
modules/nixos/services/opencloud/default.nix
Executable file
79
modules/nixos/services/opencloud/default.nix
Executable file
|
@ -0,0 +1,79 @@
|
||||||
|
{ 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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -47,6 +47,8 @@ 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
|
||||||
|
@ -58,7 +60,7 @@ sops:
|
||||||
bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD
|
bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD
|
||||||
aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig==
|
aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2025-07-04T00:40:18Z"
|
lastmodified: "2025-07-07T22:29:06Z"
|
||||||
mac: ENC[AES256_GCM,data:N2BwAzga2/Ig96p49rqNhhZ2udYWt7mQ9JD8DFXuxa3HOh3gtx7FWeWpGjvLnLWCgGcT4R61RKmgZQZRADNxYPE3vtdpPOFz0XvgcYSDlwslzBdSsVc08sh77P0LDgZsCzE1MxYynQ6nzFcc6gW5sorInLarsHoCCBC+Z5YpOVg=,iv:H6d3VrERM02/1zI5boFemEpMYD3greYZRqlSpBqROzM=,tag:TEakUvOlKoZYo/XPS6HVnA==,type:str]
|
mac: ENC[AES256_GCM,data:MmVn9KJcM92hiubQti6vbw5sg4NldFU7uxAgX4b6lL7+6LaaIznrqBcplIAcelVWCvZhcQ25L4oQP0da7JgJDzMsiPYawy33MsSWatdST3PPr7ozvQqSgucbUcPja7Fyl6Yr0ijqkH2d8EdOg5km15LaEGir2jkDi+lBRmL2Msc=,iv:VYsheWRXrih4SYgtS5qVa9ZM8kw0k7ZOlKpEkCmBsHQ=,tag:eByH+iVgznc7A0F3HSX9/g==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.10.2
|
version: 3.10.2
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue