feat: add window manager options

This commit is contained in:
danny 2026-02-04 18:21:40 +08:00
parent b4b7997ac5
commit 601dfb9217
31 changed files with 2006 additions and 821 deletions

View file

@ -1,4 +1,3 @@
{ config, ... }:
{
imports = [
./actual-budget.nix
@ -15,5 +14,6 @@
./dns.nix
./acme.nix
./ntfy.nix
./homepage.nix
];
}

View file

@ -102,7 +102,7 @@ in
"192.168.100.0/24"
];
dns.port = 5300;
yaml-settings = {
settings = {
webservice.webserver = true;
recordcache.max_negative_ttl = 60;
};

View file

@ -0,0 +1,194 @@
{ config, ... }:
let
inherit (config.networking) domain;
cfg = config.services.homepage-dashboard;
in
{
sops.secrets = {
"homepage" = {
};
};
services.homepage-dashboard = {
enable = true;
openFirewall = true;
listenPort = 8044;
environmentFile = config.sops.secrets."homepage".path;
allowedHosts = "www.${domain},${domain},localhost:${toString cfg.listenPort}";
docker = {
docker = {
socket = "/var/run/docker.sock";
};
};
widgets = [
{
search = {
provider = "duckduckgo";
target = "_blank";
};
}
{
datetime = {
text_size = "x1";
format = {
dateStyle = "short";
timeStyle = "short";
hour12 = true;
};
};
}
];
services = [
{
"Files & Documents" = [
{
"Nextcloud" = {
icon = "nextcloud.svg";
description = " Cloud drive";
href = "https://${config.services.nextcloud.hostName}";
widgets = [
{
type = "nextcloud";
url = "https://${config.services.nextcloud.hostName}";
key = "{{HOMEPAGE_VAR_NEXTCLOUD_NC_TOKEN}}";
}
];
};
}
{
"Paperless" = {
icon = "paperless.svg";
description = "PDF editing, tagging, and viewing";
href = config.services.paperless.settings.PAPERLESS_URL;
};
}
];
}
{
"VPN & IDP" = [
{
"Netbird" = {
icon = "netbird.svg";
description = "VPN Service: access internal services";
href = "https://${config.services.netbird.server.domain}";
};
}
{
"Keycloak" = {
icon = "keycloak.svg";
description = "Identity provider";
href = "https://${config.services.keycloak.settings.hostname}";
};
}
];
}
{
"Monitor" = [
{
"Grafana" = {
icon = "grafana.svg";
description = "Show metrics!";
href = config.services.grafana.settings.server.root_url;
};
}
{
"Prometheus" = {
icon = "prometheus.svg";
description = "The web is not that useful 🥀";
href = config.services.prometheus.webExternalUrl;
};
}
{
"Uptime Kuma" = {
icon = "uptime-kuma.svg";
description = "Service health check";
href = "https://uptime.${domain}";
};
}
];
}
{
"Utility" = [
{
"Vaultwarden" = {
icon = "vaultwarden-light.svg";
description = "Password manager";
href = config.services.vaultwarden.config.DOMAIN;
};
}
{
"PowerDNS" = {
icon = "powerdns.svg";
description = "DNS record management";
href = "https://powerdns.${domain}";
};
}
{
"Actual Budget" = {
icon = "actual-budget.svg";
description = "Financial budget management";
href = "https://actual.${domain}";
};
}
{
"Ntfy" = {
icon = "ntfy.svg";
description = "Notification service";
href = config.services.ntfy-sh.settings.base-url;
};
}
];
}
{
"Games" = [
{
"Minecraft" = {
icon = "minecraft.svg";
description = "Minecraft servers";
widgets = [
{
type = "minecraft";
fields = [
"players"
"version"
"status"
];
url = "udp://mc.${domain}:${toString config.services.velocity.port}";
}
];
};
}
];
}
];
settings = {
base = "https://www.${domain}";
headerStyle = "boxed";
title = "DN Home";
description = "Welcome! maybe?";
disableUpdateCheck = true;
providers = {
};
quicklaunch = {
searchDescriptions = true;
hideInternetSearch = true;
showSearchSuggestions = true;
hideVisitURL = true;
provider = "google";
};
};
};
services.nginx.virtualHosts."${domain}" = {
useACMEHost = domain;
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${toString cfg.listenPort}";
};
serverAliases = [
"www.${domain}"
];
};
}

View file

@ -65,6 +65,7 @@ forgejo:
password: ENC[AES256_GCM,data:dcIotYpgtdFLcunAB3ttlczzQ68=,iv:vH3rckAfntFAEtH3dolF7NCAdj142cAzre56x7oBdDA=,tag:TaxRn8g/TVloM60D6Ud0Jg==,type:str]
velocity: ENC[AES256_GCM,data:PYGSXfivm7OyKhBMKPOVDs+efpcb0hhwCAxlT05pM+kg9t0lH4TEMuxBXFRs80LUiQx+CYXyw8UvBkkKwPEc,iv:PppenjXIQ+eirCor3PxT16r2S7wO8bww5v/RyjQh9MI=,tag:Dc3BzmyQcTwYsvWShQ/JqQ==,type:str]
fabricProxy: ENC[AES256_GCM,data:srGYmqHgfkxAKKSjy9uGX1mQpE3N0rXb06MYiycbYESj/sZu/vjsPspvUdzTHHb9zkF5SWLWkmP6llIpimkss/dm7A1pGlagin3+,iv:yoWQdWeP9UjoRO5rJ9FQGbBu3iypIdXGrSDqBfFhw6w=,tag:+d/Tp/m3vENZAXJyHOMJEA==,type:str]
homepage: ENC[AES256_GCM,data:SqRtz4xrwCTQulgFsRAgTcQNQZRyRes+K4UzlhQZW3GuAmQaRBIHJyFttgIQYDKlc21QAiM2zxa9IBOtGNpQAdkplUptaRTq0fZH/OYcNw==,iv:NLEiWjfPvsw2Tq+pqrIPy8pKlWFD8wVXt9TMH8Y8+jA=,tag:N91DrYQoYeyJ3AH3ujTI+g==,type:str]
sops:
age:
- recipient: age17rjcght2y5p4ryr76ysnxpy2wff62sml7pyc5udcts48985j05vqpwdfq2
@ -94,7 +95,7 @@ sops:
OFloWEFuTC9GTXJsMG5NNktmdmIrY1kK0yN0ae0xNaydujV5lt2FiwXdyursG0DK
9i/B3TTAm9csDMMSTSFbiAUJDzG7kIqn++JU/cxvsGScSnhMqjEK/g==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-01-20T06:31:45Z"
mac: ENC[AES256_GCM,data:ad8EP8zk6mxlmMZaEijW0NWF72y2EikJPct7qxiCp6/sWGKKrGv8mRnC1zahgpRqpGR0jZKQ8Ot204EdGrJF9WI03+ZB9GgKi9ipQvXlGOCJq6m/Mp6WygI2hFAzRKCeoPqAPjVQxQ3Ctt/WEYXzvEp7CIKUq7WD6gTEFk6FDg0=,iv:20rJb79QnUW0DFbXTr0XXjiXjm7bK0CVs4oVan5SAKw=,tag:+mnMTBYQ1fhwe/abwGYNOA==,type:str]
lastmodified: "2026-01-30T04:08:29Z"
mac: ENC[AES256_GCM,data:egK9zlAccBV2IeJ+DYTP3AKQUUMFPmts8eZMilQlyh+EE/oXhNnKeKkmNg9h1RwoZ6zh0LRDsyjubCc06PI/wVx2lJ0JfPs4bt6PckC1hZglRSHHjmocyx1eF5bMVfBLmluDzQ3Zms1Ryvuh+M+EjtdhttBljAIb0JIRx8Wzwks=,iv:wWrRiOvzZDboZSMgTzmbVVWzpSIhLdlgxgUIFXCFet0=,tag:YLBtLivKLBvByyfm4PbVXQ==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0