340 lines
11 KiB
Nix
340 lines
11 KiB
Nix
{ config, ... }:
|
|
let
|
|
secrets = config.age.secrets;
|
|
in
|
|
{
|
|
services.tailscaledGlance = {
|
|
enable = true;
|
|
subdomain = "glance";
|
|
settings = {
|
|
server.port = 4114;
|
|
pages = [
|
|
{
|
|
name = "Home";
|
|
columns = [
|
|
{
|
|
size = "small";
|
|
widgets = [
|
|
{
|
|
type = "clock";
|
|
hour-format = "24h";
|
|
timezones = [
|
|
{
|
|
timezone = "Europe/Zurich";
|
|
label = "Zürich";
|
|
}
|
|
];
|
|
}
|
|
{
|
|
type = "group";
|
|
title = "Weather";
|
|
widgets =
|
|
let
|
|
buildWeatherWidget =
|
|
{ location, title }:
|
|
{
|
|
type = "weather";
|
|
hide-location = true;
|
|
hour-format = "24h";
|
|
units = "metric";
|
|
inherit location title;
|
|
};
|
|
in
|
|
builtins.map buildWeatherWidget [
|
|
{
|
|
title = "Espoo";
|
|
location = "Espoo, Finland";
|
|
}
|
|
{
|
|
title = "Mökki";
|
|
location = "Pellosniemi, Finland";
|
|
}
|
|
{
|
|
title = "Frankfurt";
|
|
location = "Frankfurt, Germany";
|
|
}
|
|
];
|
|
}
|
|
{
|
|
type = "markets";
|
|
markets = [
|
|
{
|
|
symbol = "KOZ0.F";
|
|
name = "Kongsberg Gruppen";
|
|
}
|
|
{
|
|
symbol = "AMD";
|
|
name = "AMD";
|
|
}
|
|
];
|
|
}
|
|
{
|
|
type = "group";
|
|
widgets = [
|
|
{
|
|
type = "rss";
|
|
title = "News";
|
|
limit = 10;
|
|
collapse-after = 3;
|
|
cache = "12h";
|
|
feeds = [
|
|
{
|
|
url = "https://yle.fi/rss/uutiset/paauutiset";
|
|
title = "Yle";
|
|
}
|
|
];
|
|
}
|
|
{
|
|
type = "rss";
|
|
title = "Tech";
|
|
limit = 10;
|
|
collapse-after = 3;
|
|
cache = "12h";
|
|
feeds = [
|
|
{
|
|
url = "https://nixos.org/blog/announcements-rss.xml";
|
|
title = "NixOS";
|
|
}
|
|
{
|
|
url = "https://selfh.st/rss";
|
|
title = "selfh.st";
|
|
}
|
|
];
|
|
}
|
|
{
|
|
type = "rss";
|
|
title = "Blogs";
|
|
limit = 10;
|
|
collapse-after = 3;
|
|
cache = "12h";
|
|
feeds = [
|
|
{
|
|
url = "https://samharris.substack.com/feed";
|
|
title = "Sam Harris";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
}
|
|
{
|
|
type = "custom-api";
|
|
title = "Steam Specials";
|
|
cache = "12h";
|
|
url = "https://store.steampowered.com/api/featuredcategories?cc=fi";
|
|
template = ''
|
|
<ul class="list list-gap-10 collapsible-container" data-collapse-after="5">
|
|
{{ range .JSON.Array "specials.items" }}
|
|
<li>
|
|
<a class="size-h4 color-highlight block text-truncate" href="https://store.steampowered.com/app/{{ .Int "id" }}/">{{ .String "name" }}</a>
|
|
<ul class="list-horizontal-text">
|
|
<li>{{ div (.Int "final_price" | toFloat) 100 | printf "$%.2f" }}</li>
|
|
{{ $discount := .Int "discount_percent" }}
|
|
<li{{ if ge $discount 40 }} class="color-positive"{{ end }}>{{ $discount }}% off</li>
|
|
</ul>
|
|
</li>
|
|
{{ end }}
|
|
</ul>
|
|
'';
|
|
}
|
|
];
|
|
}
|
|
{
|
|
size = "full";
|
|
widgets = [
|
|
{
|
|
type = "group";
|
|
widgets = [
|
|
{ type = "hacker-news"; }
|
|
{ type = "lobsters"; }
|
|
];
|
|
}
|
|
{
|
|
type = "videos";
|
|
channels = [
|
|
"UCXuqSBlHAE6Xw-yeJA0Tunw" # Linus Tech Tips
|
|
"UCshObcm-nLhbu8MY50EZ5Ng" # Benn Jordan
|
|
];
|
|
}
|
|
{
|
|
type = "group";
|
|
widgets =
|
|
let
|
|
type = "reddit";
|
|
show-thumbnails = true;
|
|
app-auth = {
|
|
name = "Glance";
|
|
id = {
|
|
_secret = secrets."glance/reddit/app-id".path;
|
|
};
|
|
secret = {
|
|
_secret = secrets."glance/reddit/app-secret".path;
|
|
};
|
|
};
|
|
in
|
|
[
|
|
{
|
|
inherit type app-auth show-thumbnails;
|
|
subreddit = "nixos";
|
|
}
|
|
{
|
|
inherit type app-auth show-thumbnails;
|
|
subreddit = "technology";
|
|
}
|
|
{
|
|
inherit type app-auth show-thumbnails;
|
|
subreddit = "selfhosted";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
}
|
|
{
|
|
size = "small";
|
|
widgets = [
|
|
{
|
|
type = "server-stats";
|
|
servers = [
|
|
{
|
|
type = "local";
|
|
name = "freun.dev";
|
|
}
|
|
];
|
|
}
|
|
{
|
|
type = "group";
|
|
title = "Services";
|
|
widgets =
|
|
let
|
|
buildSite =
|
|
domain:
|
|
{
|
|
subdomain,
|
|
title,
|
|
alt-status-codes ? [ ],
|
|
}:
|
|
{
|
|
inherit title alt-status-codes;
|
|
url = "https://${subdomain}.${domain}";
|
|
};
|
|
buildMonitor =
|
|
{ domain, sites }:
|
|
{
|
|
type = "monitor";
|
|
cache = "1m";
|
|
title = domain;
|
|
style = "compact";
|
|
sites = builtins.map (buildSite domain) sites;
|
|
};
|
|
in
|
|
builtins.map buildMonitor [
|
|
{
|
|
domain = "freun.dev";
|
|
sites = [
|
|
{
|
|
subdomain = "img";
|
|
title = "Immich";
|
|
}
|
|
{
|
|
subdomain = "pw";
|
|
title = "Vaultwarden";
|
|
}
|
|
{
|
|
subdomain = "social";
|
|
title = "Gotosocial";
|
|
}
|
|
{
|
|
subdomain = "graph";
|
|
title = "Grafana";
|
|
}
|
|
{
|
|
subdomain = "home";
|
|
title = "Home Assistant";
|
|
}
|
|
{
|
|
subdomain = "cook";
|
|
title = "Mealie";
|
|
}
|
|
{
|
|
subdomain = "sync";
|
|
title = "Syncthing";
|
|
}
|
|
{
|
|
subdomain = "bin";
|
|
title = "Hastebin";
|
|
alt-status-codes = [ 404 ];
|
|
}
|
|
{
|
|
subdomain = "ledger";
|
|
title = "Ledger";
|
|
}
|
|
{
|
|
subdomain = "note";
|
|
title = "Dnote";
|
|
}
|
|
{
|
|
subdomain = "trackmap";
|
|
title = "Trackmap";
|
|
}
|
|
{
|
|
subdomain = "fit";
|
|
title = "Workout Tracker";
|
|
}
|
|
{
|
|
subdomain = "stream";
|
|
title = "Owncast";
|
|
}
|
|
{
|
|
subdomain = "read";
|
|
title = "Readeck";
|
|
}
|
|
];
|
|
}
|
|
{
|
|
domain = "alderaan.space";
|
|
sites = [
|
|
{
|
|
subdomain = "jelly";
|
|
title = "Jellyfin";
|
|
}
|
|
{
|
|
subdomain = "radarr";
|
|
title = "Radarr";
|
|
}
|
|
{
|
|
subdomain = "sonarr";
|
|
title = "Sonarr";
|
|
}
|
|
{
|
|
subdomain = "deluge";
|
|
title = "qBittorrent";
|
|
}
|
|
{
|
|
subdomain = "lidarr";
|
|
title = "Lidarr";
|
|
}
|
|
{
|
|
subdomain = "bazarr";
|
|
title = "Bazarr";
|
|
}
|
|
{
|
|
subdomain = "req";
|
|
title = "Jellyseer";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
}
|
|
{
|
|
type = "dns-stats";
|
|
service = "adguard";
|
|
url = "http://localhost:3006";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
}
|
|
];
|
|
};
|
|
};
|
|
}
|