feat(homepage): switch to NixOS module
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
09be304b8e
commit
ea737420e9
7 changed files with 288 additions and 339 deletions
|
@ -1,6 +1,7 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./docker
|
||||
./homepage.nix
|
||||
./jellyfin
|
||||
./qbittorrent
|
||||
./subtitles
|
||||
|
|
|
@ -6,7 +6,6 @@ in {
|
|||
./freshrss/compose.nix
|
||||
./gameyfin/compose.nix
|
||||
./hauk/compose.nix
|
||||
./homepage/compose.nix
|
||||
./immich/compose.nix
|
||||
./music/jbots/compose.nix
|
||||
./nextcloud/compose.nix
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (config.sops) secrets;
|
||||
inherit (pkgs.writers) writeYAML;
|
||||
in {
|
||||
khepri.compositions."homepage" = {
|
||||
networks.proxy_net = {external = true;};
|
||||
|
||||
services."homepage" = {
|
||||
image = import ./images/homepage.nix pkgs;
|
||||
restart = "always";
|
||||
|
||||
ports = [
|
||||
"3020:3000"
|
||||
];
|
||||
|
||||
networks = ["proxy_net"];
|
||||
|
||||
extraHosts = ["lan.nelim.org:10.0.0.130"];
|
||||
|
||||
environmentFiles = [secrets.homepage.path];
|
||||
|
||||
volumes = let
|
||||
services = writeYAML "services.yaml" (import ./services.nix);
|
||||
|
||||
bookmarks = writeYAML "bookmarks.yaml" {};
|
||||
|
||||
settings = writeYAML "settings.yaml" {
|
||||
# FIXME: title not working
|
||||
title = "bruh";
|
||||
theme = "dark";
|
||||
color = "gray";
|
||||
target = "_self";
|
||||
|
||||
layout.video = {
|
||||
style = "columns";
|
||||
row = 4;
|
||||
# columns = 2;
|
||||
};
|
||||
};
|
||||
|
||||
widgets = writeYAML "widgets.yaml" [
|
||||
{
|
||||
resources = {
|
||||
cpu = true;
|
||||
memory = true;
|
||||
disk = "/";
|
||||
};
|
||||
}
|
||||
{
|
||||
search = {
|
||||
provider = "duckduckgo";
|
||||
target = "_blank";
|
||||
};
|
||||
}
|
||||
];
|
||||
in [
|
||||
"${bookmarks}:/app/config/bookmarks.yaml:ro"
|
||||
"${services}:/app/config/services.yaml:ro"
|
||||
"${settings}:/app/config/settings.yaml:ro"
|
||||
"${widgets}:/app/config/widgets.yaml:ro"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
pkgs:
|
||||
pkgs.dockerTools.pullImage rec {
|
||||
imageName = "ghcr.io/gethomepage/homepage";
|
||||
imageDigest = "sha256:d41dca72f3a68d2c675eb232a448104af200096f05e2610ffbfdb16bc7f71410";
|
||||
sha256 = "0x97p3d22qb43p653qrf29aknxwla1nnss3sk32wn6gapg1v05iy";
|
||||
finalImageName = imageName;
|
||||
finalImageTag = "latest";
|
||||
}
|
|
@ -1,262 +0,0 @@
|
|||
[
|
||||
#####################################################
|
||||
## PUBLIC
|
||||
#####################################################
|
||||
{
|
||||
public = [
|
||||
{
|
||||
jellyfin = rec {
|
||||
href = "https://jelly.nelim.org";
|
||||
icon = "jellyfin.png";
|
||||
description = "ourflix";
|
||||
widget = {
|
||||
type = "jellyfin";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_JELLY_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
accounts = {
|
||||
href = "https://jelly.nelim.org/accounts";
|
||||
icon = "jellyfin.png";
|
||||
description = "manage jellyfin users";
|
||||
};
|
||||
}
|
||||
{
|
||||
jellyseerr = rec {
|
||||
href = "https://seerr.nelim.org";
|
||||
icon = "jellyseerr.png";
|
||||
description = "request handler";
|
||||
widget = {
|
||||
type = "jellyseerr";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_SEERR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
gitea = {
|
||||
href = "https://git.nelim.org";
|
||||
icon = "gitea.png";
|
||||
description = "git";
|
||||
};
|
||||
}
|
||||
{
|
||||
immich = rec {
|
||||
href = "https://photos.nelim.org";
|
||||
icon = "immich.png";
|
||||
description = "gphotos replacement";
|
||||
widget = {
|
||||
type = "immich";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_IMMICH_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
gameyfin = {
|
||||
href = "https://games.nelim.org";
|
||||
description = "steam (tm)";
|
||||
};
|
||||
}
|
||||
{
|
||||
nextcloud = rec {
|
||||
href = "https://cloud.nelim.org";
|
||||
icon = "nextcloud.png";
|
||||
description = "PDrive";
|
||||
widget = {
|
||||
type = "nextcloud";
|
||||
url = href;
|
||||
username = "mathis";
|
||||
password = "{{HOMEPAGE_VAR_CLOUD_PASS}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
"public vaultwarden" = {
|
||||
href = "https://vault.nelim.org";
|
||||
icon = "bitwarden.png";
|
||||
description = "password manager";
|
||||
};
|
||||
}
|
||||
{
|
||||
calibre-web = {
|
||||
href = "https://books.nelim.org";
|
||||
icon = "calibreweb.png";
|
||||
description = "online library";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
#####################################################
|
||||
## VIDEO AUTOMATION
|
||||
#####################################################
|
||||
{
|
||||
"video automation" = [
|
||||
{
|
||||
qbit = {
|
||||
href = "https://lan.nelim.org/qbt";
|
||||
icon = "qbittorrent.png";
|
||||
description = "torrent client";
|
||||
widget = {
|
||||
type = "qbittorrent";
|
||||
url = "http://10.0.0.121:8080";
|
||||
username = "admin";
|
||||
password = "{{HOMEPAGE_VAR_QBIT_PASS}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
sabnzbd = {
|
||||
href = "https://lan.nelim.org/sabnzbd";
|
||||
icon = "sabnzbd.png";
|
||||
description = "nzb client";
|
||||
widget = {
|
||||
type = "sabnzbd";
|
||||
url = "http://10.0.0.121:8382";
|
||||
key = "{{HOMEPAGE_VAR_SAB_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
sonarr = {
|
||||
href = "https://lan.nelim.org/sonarr";
|
||||
icon = "sonarr.png";
|
||||
description = "fetches tv shows";
|
||||
widget = {
|
||||
type = "sonarr";
|
||||
url = "http://sonarr:8989";
|
||||
key = "{{HOMEPAGE_VAR_SONARR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
radarr = {
|
||||
href = "https://lan.nelim.org/radarr";
|
||||
icon = "radarr.png";
|
||||
description = "fetches movies";
|
||||
widget = {
|
||||
type = "radarr";
|
||||
url = "http://radarr:7878";
|
||||
key = "{{HOMEPAGE_VAR_RADARR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
bazarr = {
|
||||
href = "https://lan.nelim.org/bazarr";
|
||||
icon = "bazarr.png";
|
||||
description = "fetches subs";
|
||||
widget = {
|
||||
type = "bazarr";
|
||||
url = "http://bazarr:6767/bazarr";
|
||||
key = "{{HOMEPAGE_VAR_BAZARR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
prowlarr = {
|
||||
href = "https://lan.nelim.org/prowlarr";
|
||||
icon = "prowlarr.png";
|
||||
description = "fetches tracker queries";
|
||||
widget = {
|
||||
type = "prowlarr";
|
||||
url = "http://prowlarr:9696";
|
||||
key = "{{HOMEPAGE_VAR_PROWLARR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
joal = {
|
||||
href = "https://joal.nelim.org";
|
||||
icon = "joal.png";
|
||||
description = "boosts YGGTorrent ratio";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
#####################################################
|
||||
## MISC PROJECTS
|
||||
#####################################################
|
||||
{
|
||||
"misc projects" = [
|
||||
{
|
||||
freshrss = {
|
||||
href = "https://rss.nelim.org";
|
||||
icon = "freshrss.png";
|
||||
description = "rss client";
|
||||
};
|
||||
}
|
||||
{
|
||||
docker-hub-rss = {
|
||||
href = "https://drss.nelim.org";
|
||||
icon = "freshrss.png";
|
||||
description = "dockerhub feed maker";
|
||||
};
|
||||
}
|
||||
{
|
||||
rss-bridge = {
|
||||
href = "https://bridge.nelim.org";
|
||||
icon = "rss-bridge.png";
|
||||
description = "make rss feeds from anything";
|
||||
};
|
||||
}
|
||||
{
|
||||
calibre = {
|
||||
href = "https://lan.nelim.org/calibre";
|
||||
icon = "calibre.png";
|
||||
description = "library backend";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
#####################################################
|
||||
## MANAGEMENT
|
||||
#####################################################
|
||||
{
|
||||
management = [
|
||||
{
|
||||
cloudflare = {
|
||||
href = "https://dash.cloudflare.com/3152abbe78daf6d91c57b6fcc424f958/nelim.org/dns";
|
||||
icon = "cloudflare.png";
|
||||
description = "dns to the world";
|
||||
};
|
||||
}
|
||||
{
|
||||
vaultwarden = {
|
||||
href = "https://lan.nelim.org/vault";
|
||||
icon = "bitwarden.png";
|
||||
description = "password manager";
|
||||
};
|
||||
}
|
||||
{
|
||||
wireguard = {
|
||||
href = "https://wg.nelim.org";
|
||||
icon = "wireguard.png";
|
||||
description = "wireguard gui";
|
||||
};
|
||||
}
|
||||
{
|
||||
steampunk = {
|
||||
icon = "minecraft.png";
|
||||
description = "minecwaf";
|
||||
widget = {
|
||||
type = "minecraft";
|
||||
url = "udp://mc.nelim.org";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
creative = {
|
||||
icon = "minecraft.png";
|
||||
description = "minecwaf";
|
||||
widget = {
|
||||
type = "minecraft";
|
||||
url = "udp://cv.nelim.org";
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
]
|
287
devices/nos/modules/homepage.nix
Normal file
287
devices/nos/modules/homepage.nix
Normal file
|
@ -0,0 +1,287 @@
|
|||
{config, ...}: {
|
||||
services.homepage-dashboard = {
|
||||
enable = true;
|
||||
listenPort = 3020;
|
||||
|
||||
environmentFile = config.sops.secrets.homepage.path;
|
||||
|
||||
settings = {
|
||||
title = "bruh";
|
||||
theme = "dark";
|
||||
color = "gray";
|
||||
target = "_self";
|
||||
|
||||
layout.video = {
|
||||
style = "columns";
|
||||
row = 4;
|
||||
# columns = 2;
|
||||
};
|
||||
};
|
||||
|
||||
widgets = [
|
||||
{
|
||||
resources = {
|
||||
cpu = true;
|
||||
memory = true;
|
||||
disk = "/";
|
||||
};
|
||||
}
|
||||
{
|
||||
search = {
|
||||
provider = "duckduckgo";
|
||||
target = "_blank";
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
services = [
|
||||
#####################################################
|
||||
## PUBLIC
|
||||
#####################################################
|
||||
{
|
||||
public = [
|
||||
{
|
||||
jellyfin = rec {
|
||||
href = "https://jelly.nelim.org";
|
||||
icon = "jellyfin.png";
|
||||
description = "ourflix";
|
||||
widget = {
|
||||
type = "jellyfin";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_JELLY_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
accounts = {
|
||||
href = "https://jelly.nelim.org/accounts";
|
||||
icon = "jellyfin.png";
|
||||
description = "manage jellyfin users";
|
||||
};
|
||||
}
|
||||
{
|
||||
jellyseerr = rec {
|
||||
href = "https://seerr.nelim.org";
|
||||
icon = "jellyseerr.png";
|
||||
description = "request handler";
|
||||
widget = {
|
||||
type = "jellyseerr";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_SEERR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
gitea = {
|
||||
href = "https://git.nelim.org";
|
||||
icon = "gitea.png";
|
||||
description = "git";
|
||||
};
|
||||
}
|
||||
{
|
||||
immich = rec {
|
||||
href = "https://photos.nelim.org";
|
||||
icon = "immich.png";
|
||||
description = "gphotos replacement";
|
||||
widget = {
|
||||
type = "immich";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_IMMICH_API}}";
|
||||
version = 2;
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
gameyfin = {
|
||||
href = "https://games.nelim.org";
|
||||
description = "steam (tm)";
|
||||
};
|
||||
}
|
||||
{
|
||||
nextcloud = rec {
|
||||
href = "https://cloud.nelim.org";
|
||||
icon = "nextcloud.png";
|
||||
description = "PDrive";
|
||||
widget = {
|
||||
type = "nextcloud";
|
||||
url = href;
|
||||
username = "mathis";
|
||||
password = "{{HOMEPAGE_VAR_CLOUD_PASS}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
"public vaultwarden" = {
|
||||
href = "https://vault.nelim.org";
|
||||
icon = "bitwarden.png";
|
||||
description = "password manager";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
#####################################################
|
||||
## VIDEO AUTOMATION
|
||||
#####################################################
|
||||
{
|
||||
"video automation" = [
|
||||
{
|
||||
qbit = rec {
|
||||
href = "https://lan.nelim.org/qbt";
|
||||
icon = "qbittorrent.png";
|
||||
description = "torrent client";
|
||||
widget = {
|
||||
type = "qbittorrent";
|
||||
url = href;
|
||||
username = "admin";
|
||||
password = "{{HOMEPAGE_VAR_QBIT_PASS}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
sabnzbd = rec {
|
||||
href = "https://lan.nelim.org/sabnzbd";
|
||||
icon = "sabnzbd.png";
|
||||
description = "nzb client";
|
||||
widget = {
|
||||
type = "sabnzbd";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_SAB_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
sonarr = rec {
|
||||
href = "https://lan.nelim.org/sonarr";
|
||||
icon = "sonarr.png";
|
||||
description = "fetches tv shows";
|
||||
widget = {
|
||||
type = "sonarr";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_SONARR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
radarr = rec {
|
||||
href = "https://lan.nelim.org/radarr";
|
||||
icon = "radarr.png";
|
||||
description = "fetches movies";
|
||||
widget = {
|
||||
type = "radarr";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_RADARR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
bazarr = rec {
|
||||
href = "https://lan.nelim.org/bazarr";
|
||||
icon = "bazarr.png";
|
||||
description = "fetches subs";
|
||||
widget = {
|
||||
type = "bazarr";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_BAZARR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
prowlarr = rec {
|
||||
href = "https://lan.nelim.org/prowlarr";
|
||||
icon = "prowlarr.png";
|
||||
description = "fetches tracker queries";
|
||||
widget = {
|
||||
type = "prowlarr";
|
||||
url = href;
|
||||
key = "{{HOMEPAGE_VAR_PROWLARR_API}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
joal = {
|
||||
href = "https://joal.nelim.org";
|
||||
icon = "joal.png";
|
||||
description = "boosts YGGTorrent ratio";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
#####################################################
|
||||
## MISC PROJECTS
|
||||
#####################################################
|
||||
{
|
||||
"misc projects" = [
|
||||
{
|
||||
freshrss = {
|
||||
href = "https://rss.nelim.org";
|
||||
icon = "freshrss.png";
|
||||
description = "rss client";
|
||||
};
|
||||
}
|
||||
{
|
||||
docker-hub-rss = {
|
||||
href = "https://drss.nelim.org";
|
||||
icon = "freshrss.png";
|
||||
description = "dockerhub feed maker";
|
||||
};
|
||||
}
|
||||
{
|
||||
rss-bridge = {
|
||||
href = "https://bridge.nelim.org";
|
||||
icon = "rss-bridge.png";
|
||||
description = "make rss feeds from anything";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
#####################################################
|
||||
## MANAGEMENT
|
||||
#####################################################
|
||||
{
|
||||
management = [
|
||||
{
|
||||
cloudflare = {
|
||||
href = "https://dash.cloudflare.com/3152abbe78daf6d91c57b6fcc424f958/nelim.org/dns";
|
||||
icon = "cloudflare.png";
|
||||
description = "dns to the world";
|
||||
};
|
||||
}
|
||||
{
|
||||
vaultwarden = {
|
||||
href = "https://lan.nelim.org/vault";
|
||||
icon = "bitwarden.png";
|
||||
description = "password manager";
|
||||
};
|
||||
}
|
||||
{
|
||||
wireguard = {
|
||||
href = "https://wg.nelim.org";
|
||||
icon = "wireguard.png";
|
||||
description = "wireguard gui";
|
||||
};
|
||||
}
|
||||
{
|
||||
survie = {
|
||||
icon = "minecraft.png";
|
||||
description = "minecwaf";
|
||||
widget = {
|
||||
type = "minecraft";
|
||||
url = "udp://mc.nelim.org";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
creative = {
|
||||
icon = "minecraft.png";
|
||||
description = "minecwaf";
|
||||
widget = {
|
||||
type = "minecraft";
|
||||
url = "udp://cv.nelim.org";
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
BIN
flake.lock
BIN
flake.lock
Binary file not shown.
Loading…
Reference in a new issue