Add a homepage module
This commit is contained in:
@@ -12,7 +12,6 @@
|
|||||||
../../modules/nixos/firewall.nix
|
../../modules/nixos/firewall.nix
|
||||||
../../modules/nixos/filebrowser.nix
|
../../modules/nixos/filebrowser.nix
|
||||||
../../modules/nixos/home-assistant.nix
|
../../modules/nixos/home-assistant.nix
|
||||||
../../modules/nixos/glance.nix
|
|
||||||
../../modules/nixos/radicale.nix
|
../../modules/nixos/radicale.nix
|
||||||
../../modules/nixos/actual-budget.nix
|
../../modules/nixos/actual-budget.nix
|
||||||
../../modules/nixos/gitea.nix
|
../../modules/nixos/gitea.nix
|
||||||
|
|||||||
165
modules/nixos/homepage.nix
Normal file
165
modules/nixos/homepage.nix
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
# Define standard colors/icons for consistency
|
||||||
|
domain = "jelles.net";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# Enable the Homepage Dashboard service
|
||||||
|
services.homepage-dashboard = {
|
||||||
|
enable = true;
|
||||||
|
listenPort = 8082; # Different from Glance (8101)
|
||||||
|
allowedHosts = "dashboard.${domain}";
|
||||||
|
|
||||||
|
# 1. Service Discovery & API Secrets
|
||||||
|
# For live stats (widgets), Homepage needs API keys.
|
||||||
|
# You can reference sops secrets here if you map them to a file readable by the homepage user.
|
||||||
|
# For now, I have set them to placeholders or disabled the API widgets where secrets are required.
|
||||||
|
|
||||||
|
services = [
|
||||||
|
{
|
||||||
|
"Personal" = [
|
||||||
|
{
|
||||||
|
"Home Assistant" = {
|
||||||
|
href = "https://home.${domain}";
|
||||||
|
description = "Smart Home Control";
|
||||||
|
icon = "home-assistant.png";
|
||||||
|
# To enable live stats (lights on, etc), un-comment and add a Long Lived Access Token:
|
||||||
|
# widget = {
|
||||||
|
# type = "homeassistant";
|
||||||
|
# url = "http://127.0.0.1:8123";
|
||||||
|
# key = "YOUR_LONG_LIVED_TOKEN";
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"Actual Budget" = {
|
||||||
|
href = "https://finance.${domain}";
|
||||||
|
description = "Finance Tracking";
|
||||||
|
icon = "actual-budget.png";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"Vaultwarden" = {
|
||||||
|
href = "https://vault.${domain}";
|
||||||
|
description = "Password Manager";
|
||||||
|
icon = "bitwarden.png";
|
||||||
|
# Widget to show status
|
||||||
|
widget = {
|
||||||
|
type = "vaultwarden";
|
||||||
|
url = "https://vault.${domain}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"Radicale" = {
|
||||||
|
href = "https://radicale.${domain}";
|
||||||
|
description = "Calendar & Contacts";
|
||||||
|
icon = "radicale.png";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"Code & Files" = [
|
||||||
|
{
|
||||||
|
"Gitea" = {
|
||||||
|
href = "https://git.${domain}";
|
||||||
|
description = "Git Server";
|
||||||
|
icon = "gitea.png";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"FileBrowser" = {
|
||||||
|
href = "https://files.${domain}";
|
||||||
|
description = "Web File Manager";
|
||||||
|
icon = "filebrowser.png";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"Websites" = [
|
||||||
|
{
|
||||||
|
"Community" = {
|
||||||
|
href = "https://community.${domain}";
|
||||||
|
icon = "globe.png";
|
||||||
|
description = "Community Site";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"Zentire" = {
|
||||||
|
href = "https://zentire.${domain}";
|
||||||
|
icon = "globe.png";
|
||||||
|
description = "Zentire Site";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
# 2. Widgets (Calendar, Search, Resources)
|
||||||
|
widgets = [
|
||||||
|
{
|
||||||
|
search = {
|
||||||
|
provider = "google";
|
||||||
|
target = "_blank";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# Shows system stats. Requires 'glances' or similar installed,
|
||||||
|
# but Homepage can also just show simple resources if running locally.
|
||||||
|
resources = {
|
||||||
|
cpu = true;
|
||||||
|
memory = true;
|
||||||
|
disk = "/";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# Calendar Widget linked to Radicale
|
||||||
|
# You need the "Private Export URL" for your calendar from Radicale.
|
||||||
|
calendar = {
|
||||||
|
showTime = true;
|
||||||
|
maxEvents = 10;
|
||||||
|
integrations = [
|
||||||
|
{
|
||||||
|
type = "ical";
|
||||||
|
url = "https://radicale.${domain}/kiri/personal.ics"; # Verify this path in your Radicale
|
||||||
|
name = "Personal";
|
||||||
|
color = "blue";
|
||||||
|
# If your Radicale is private, you might need to pass auth in the URL
|
||||||
|
# e.g. https://user:pass@radicale.jelles.net/...
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
title = "Orion Dashboard";
|
||||||
|
background = {
|
||||||
|
# Using the wallpaper from your config if accessible, or a hex color
|
||||||
|
image = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/leef_dark_purple_minimalist.png";
|
||||||
|
opacity = 50;
|
||||||
|
};
|
||||||
|
layout = {
|
||||||
|
"Personal" = {
|
||||||
|
style = "row";
|
||||||
|
columns = 4;
|
||||||
|
};
|
||||||
|
"Code & Files" = {
|
||||||
|
style = "row";
|
||||||
|
columns = 2;
|
||||||
|
};
|
||||||
|
"Websites" = {
|
||||||
|
style = "row";
|
||||||
|
columns = 2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Expose Homepage via Caddy
|
||||||
|
services.caddy.virtualHosts."dashboard.${domain}".extraConfig = ''
|
||||||
|
reverse_proxy :8082
|
||||||
|
'';
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user