freun.dev: add glance
This commit is contained in:
339
hosts/freun-dev/glance.nix
Normal file
339
hosts/freun-dev/glance.nix
Normal file
@@ -0,0 +1,339 @@
|
||||
{ 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";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user