Use dashy for services homepage
All checks were successful
Check Flake / check-flake (push) Successful in 5m25s
All checks were successful
Check Flake / check-flake (push) Successful in 5m25s
This commit is contained in:
parent
c0c1ec5c67
commit
c4847bd39b
53
common/server/dashy.nix
Normal file
53
common/server/dashy.nix
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.dashy;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.dashy = {
|
||||||
|
enable = mkEnableOption "dashy";
|
||||||
|
imageTag = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "latest";
|
||||||
|
};
|
||||||
|
port = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 56815;
|
||||||
|
};
|
||||||
|
configFile = lib.mkOption {
|
||||||
|
type = lib.types.path;
|
||||||
|
description = "Path to the YAML configuration file";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
virtualisation.oci-containers.containers = {
|
||||||
|
dashy = {
|
||||||
|
image = "lissy93/dashy:${cfg.imageTag}";
|
||||||
|
environment = {
|
||||||
|
TZ = "${config.time.timeZone}";
|
||||||
|
};
|
||||||
|
ports = [
|
||||||
|
"127.0.0.1:${toString cfg.port}:80"
|
||||||
|
];
|
||||||
|
volumes = [
|
||||||
|
"${cfg.configFile}:/app/public/conf.yml"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.enable = true;
|
||||||
|
services.nginx.virtualHosts."s0.koi-bebop.ts.net" = {
|
||||||
|
default = true;
|
||||||
|
addSSL = true;
|
||||||
|
serverAliases = [ "s0" ];
|
||||||
|
sslCertificate = "/secret/ssl/s0.koi-bebop.ts.net.crt";
|
||||||
|
sslCertificateKey = "/secret/ssl/s0.koi-bebop.ts.net.key";
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:${toString cfg.port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -19,5 +19,6 @@
|
|||||||
./iodine.nix
|
./iodine.nix
|
||||||
./searx.nix
|
./searx.nix
|
||||||
./gitea-actions-runner.nix
|
./gitea-actions-runner.nix
|
||||||
|
./dashy.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
249
machines/storage/s0/dashy.yaml
Normal file
249
machines/storage/s0/dashy.yaml
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
appConfig:
|
||||||
|
theme: vaporware
|
||||||
|
customColors:
|
||||||
|
material-dark-original:
|
||||||
|
primary: '#f36558'
|
||||||
|
background: '#39434C'
|
||||||
|
background-darker: '#eb615c'
|
||||||
|
material-light: '#f36558'
|
||||||
|
item-text-color: '#ff948a'
|
||||||
|
curve-factor: 5px
|
||||||
|
enableErrorReporting: false
|
||||||
|
layout: auto
|
||||||
|
iconSize: large
|
||||||
|
language: en
|
||||||
|
startingView: default
|
||||||
|
defaultOpeningMethod: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckInterval: 20
|
||||||
|
faviconApi: faviconkit
|
||||||
|
routingMode: history
|
||||||
|
enableMultiTasking: false
|
||||||
|
webSearch:
|
||||||
|
disableWebSearch: false
|
||||||
|
searchEngine: duckduckgo
|
||||||
|
openingMethod: sametab
|
||||||
|
searchBangs: {}
|
||||||
|
enableFontAwesome: true
|
||||||
|
cssThemes: []
|
||||||
|
externalStyleSheet: []
|
||||||
|
hideComponents:
|
||||||
|
hideHeading: false
|
||||||
|
hideNav: false
|
||||||
|
hideSearch: false
|
||||||
|
hideSettings: false
|
||||||
|
hideFooter: false
|
||||||
|
hideSplashScreen: false
|
||||||
|
auth:
|
||||||
|
enableGuestAccess: false
|
||||||
|
users: []
|
||||||
|
enableKeycloak: false
|
||||||
|
keycloak: {}
|
||||||
|
allowConfigEdit: true
|
||||||
|
enableServiceWorker: false
|
||||||
|
disableContextMenu: false
|
||||||
|
disableUpdateChecks: false
|
||||||
|
disableSmartSort: false
|
||||||
|
pageInfo:
|
||||||
|
title: s0
|
||||||
|
description: s0
|
||||||
|
sections:
|
||||||
|
- name: Media & Entertainment
|
||||||
|
icon: fas fa-photo-video
|
||||||
|
displayData:
|
||||||
|
sortBy: most-used
|
||||||
|
cols: 1
|
||||||
|
rows: 1
|
||||||
|
collapsed: false
|
||||||
|
hideForGuests: false
|
||||||
|
items:
|
||||||
|
- &ref_0
|
||||||
|
title: Jellyfin
|
||||||
|
icon: hl-jellyfin
|
||||||
|
url: http://s0:8097
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckUrl: http://jellyfin.s0
|
||||||
|
id: 0_1956_jellyfin
|
||||||
|
- &ref_1
|
||||||
|
title: Sonarr
|
||||||
|
description: Manage TV
|
||||||
|
icon: hl-sonarr
|
||||||
|
url: http://s0:8989
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckUrl: http://sonarr.s0
|
||||||
|
id: 1_1956_sonarr
|
||||||
|
- &ref_2
|
||||||
|
title: Radarr
|
||||||
|
description: Manage Movies
|
||||||
|
icon: hl-radarr
|
||||||
|
url: http://s0:7878
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckUrl: http://radarr.s0
|
||||||
|
id: 2_1956_radarr
|
||||||
|
- &ref_3
|
||||||
|
title: Lidarr
|
||||||
|
description: Manage Music
|
||||||
|
icon: hl-lidarr
|
||||||
|
url: http://s0:8686
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckUrl: http://lidarr.s0
|
||||||
|
id: 3_1956_lidarr
|
||||||
|
- &ref_4
|
||||||
|
title: Prowlarr
|
||||||
|
description: Indexers
|
||||||
|
icon: hl-prowlarr
|
||||||
|
url: http://prowlarr.s0
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckUrl: http://prowlarr.s0
|
||||||
|
id: 4_1956_prowlarr
|
||||||
|
- &ref_5
|
||||||
|
title: Bazarr
|
||||||
|
description: Subtitles
|
||||||
|
icon: hl-bazarr
|
||||||
|
url: http://s0:6767
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckUrl: http://bazarr.s0
|
||||||
|
id: 5_1956_bazarr
|
||||||
|
- &ref_6
|
||||||
|
title: Navidrome
|
||||||
|
description: Play Music
|
||||||
|
icon: hl-navidrome
|
||||||
|
url: http://s0:4534
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckUrl: http://music.s0
|
||||||
|
id: 6_1956_navidrome
|
||||||
|
- &ref_7
|
||||||
|
title: Transmission
|
||||||
|
description: Torrenting
|
||||||
|
icon: hl-transmission
|
||||||
|
url: http://s0:9091
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
statusCheckUrl: http://transmission.s0
|
||||||
|
id: 7_1956_transmission
|
||||||
|
filteredItems:
|
||||||
|
- *ref_0
|
||||||
|
- *ref_1
|
||||||
|
- *ref_2
|
||||||
|
- *ref_3
|
||||||
|
- *ref_4
|
||||||
|
- *ref_5
|
||||||
|
- *ref_6
|
||||||
|
- *ref_7
|
||||||
|
- name: Network
|
||||||
|
icon: fas fa-network-wired
|
||||||
|
items:
|
||||||
|
- &ref_8
|
||||||
|
title: Gateway
|
||||||
|
description: openwrt
|
||||||
|
icon: hl-openwrt
|
||||||
|
url: http://openwrt.lan/
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 0_746_gateway
|
||||||
|
- &ref_9
|
||||||
|
title: Wireless
|
||||||
|
description: openwrt (ish)
|
||||||
|
icon: hl-openwrt
|
||||||
|
url: http://PacketProvocateur.lan
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 1_746_wireless
|
||||||
|
filteredItems:
|
||||||
|
- *ref_8
|
||||||
|
- *ref_9
|
||||||
|
displayData:
|
||||||
|
sortBy: default
|
||||||
|
rows: 1
|
||||||
|
cols: 1
|
||||||
|
collapsed: false
|
||||||
|
hideForGuests: false
|
||||||
|
- name: Services
|
||||||
|
icon: fas fa-monitor-heart-rate
|
||||||
|
items:
|
||||||
|
- &ref_10
|
||||||
|
title: Matrix
|
||||||
|
description: ''
|
||||||
|
icon: hl-matrix
|
||||||
|
url: https://chat.neet.space
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 0_836_matrix
|
||||||
|
- &ref_11
|
||||||
|
title: Radio
|
||||||
|
description: Radio service
|
||||||
|
icon: generative
|
||||||
|
url: https://radio.runyan.org
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 1_836_radio
|
||||||
|
- &ref_12
|
||||||
|
title: Mumble
|
||||||
|
description: voice.neet.space
|
||||||
|
icon: hl-mumble
|
||||||
|
url: https://voice.neet.space
|
||||||
|
target: sametab
|
||||||
|
statusCheck: false
|
||||||
|
id: 2_836_mumble
|
||||||
|
- &ref_13
|
||||||
|
title: IRC
|
||||||
|
description: irc.neet.dev
|
||||||
|
icon: hl-thelounge
|
||||||
|
url: https://irc.neet.dev
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 3_836_irc
|
||||||
|
- &ref_14
|
||||||
|
title: Git
|
||||||
|
description: git.neet.dev
|
||||||
|
icon: hl-gitea
|
||||||
|
url: https://git.neet.dev
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 4_836_git
|
||||||
|
- &ref_15
|
||||||
|
title: Nextcloud
|
||||||
|
description: neet.cloud
|
||||||
|
icon: hl-nextcloud
|
||||||
|
url: https://neet.cloud
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 5_836_nextcloud
|
||||||
|
- &ref_16
|
||||||
|
title: Roundcube
|
||||||
|
description: mail.neet.dev
|
||||||
|
icon: hl-roundcube
|
||||||
|
url: https://mail.neet.dev
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 6_836_roundcube
|
||||||
|
- &ref_17
|
||||||
|
title: Jitsi Meet
|
||||||
|
description: meet.neet.space
|
||||||
|
icon: hl-jitsimeet
|
||||||
|
url: https://meet.neet.space
|
||||||
|
target: sametab
|
||||||
|
statusCheck: true
|
||||||
|
id: 7_836_jitsimeet
|
||||||
|
filteredItems:
|
||||||
|
- *ref_10
|
||||||
|
- *ref_11
|
||||||
|
- *ref_12
|
||||||
|
- *ref_13
|
||||||
|
- *ref_14
|
||||||
|
- *ref_15
|
||||||
|
- *ref_16
|
||||||
|
- *ref_17
|
||||||
|
displayData:
|
||||||
|
sortBy: default
|
||||||
|
rows: 1
|
||||||
|
cols: 1
|
||||||
|
collapsed: false
|
||||||
|
hideForGuests: false
|
@ -39,9 +39,6 @@
|
|||||||
# samba
|
# samba
|
||||||
services.samba.enable = true;
|
services.samba.enable = true;
|
||||||
|
|
||||||
# disable suspend on lid close
|
|
||||||
services.logind.lidSwitch = "ignore";
|
|
||||||
|
|
||||||
# navidrome
|
# navidrome
|
||||||
services.navidrome = {
|
services.navidrome = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@ -51,7 +48,6 @@
|
|||||||
MusicFolder = "/data/samba/Public/Media/Music";
|
MusicFolder = "/data/samba/Public/Media/Music";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
networking.firewall.allowedTCPPorts = [ config.services.navidrome.settings.Port ];
|
|
||||||
|
|
||||||
# allow access to transmisson data
|
# allow access to transmisson data
|
||||||
users.users.googlebot.extraGroups = [ "transmission" ];
|
users.users.googlebot.extraGroups = [ "transmission" ];
|
||||||
@ -163,22 +159,64 @@
|
|||||||
|
|
||||||
# nginx
|
# nginx
|
||||||
services.nginx.enable = true;
|
services.nginx.enable = true;
|
||||||
services.nginx.virtualHosts."bazarr.s0".locations."/".proxyPass = "http://vpn.containers:6767";
|
services.nginx.virtualHosts."bazarr.s0" = {
|
||||||
services.nginx.virtualHosts."radarr.s0".locations."/".proxyPass = "http://vpn.containers:7878";
|
listen = [{ addr = "0.0.0.0"; port = 6767; } { addr = "0.0.0.0"; port = 80; }];
|
||||||
services.nginx.virtualHosts."lidarr.s0".locations."/".proxyPass = "http://vpn.containers:8686";
|
locations."/".proxyPass = "http://vpn.containers:6767";
|
||||||
services.nginx.virtualHosts."sonarr.s0".locations."/".proxyPass = "http://vpn.containers:8989";
|
};
|
||||||
services.nginx.virtualHosts."prowlarr.s0".locations."/".proxyPass = "http://vpn.containers:9696";
|
services.nginx.virtualHosts."radarr.s0" = {
|
||||||
services.nginx.virtualHosts."music.s0".locations."/".proxyPass = "http://localhost:4533";
|
listen = [{ addr = "0.0.0.0"; port = 7878; } { addr = "0.0.0.0"; port = 80; }];
|
||||||
services.nginx.virtualHosts."jellyfin.s0".locations."/" = {
|
locations."/".proxyPass = "http://vpn.containers:7878";
|
||||||
proxyPass = "http://localhost:8096";
|
};
|
||||||
proxyWebsockets = true;
|
services.nginx.virtualHosts."lidarr.s0" = {
|
||||||
|
listen = [{ addr = "0.0.0.0"; port = 8686; } { addr = "0.0.0.0"; port = 80; }];
|
||||||
|
locations."/".proxyPass = "http://vpn.containers:8686";
|
||||||
|
};
|
||||||
|
services.nginx.virtualHosts."sonarr.s0" = {
|
||||||
|
listen = [{ addr = "0.0.0.0"; port = 8989; } { addr = "0.0.0.0"; port = 80; }];
|
||||||
|
locations."/".proxyPass = "http://vpn.containers:8989";
|
||||||
|
};
|
||||||
|
services.nginx.virtualHosts."prowlarr.s0" = {
|
||||||
|
listen = [{ addr = "0.0.0.0"; port = 9696; } { addr = "0.0.0.0"; port = 80; }];
|
||||||
|
locations."/".proxyPass = "http://vpn.containers:9696";
|
||||||
|
};
|
||||||
|
services.nginx.virtualHosts."music.s0" = {
|
||||||
|
listen = [{ addr = "0.0.0.0"; port = 4534; } { addr = "0.0.0.0"; port = 80; }];
|
||||||
|
locations."/".proxyPass = "http://localhost:4533";
|
||||||
|
};
|
||||||
|
services.nginx.virtualHosts."jellyfin.s0" = {
|
||||||
|
listen = [{ addr = "0.0.0.0"; port = 8097; } { addr = "0.0.0.0"; port = 80; }];
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:8096";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
services.nginx.virtualHosts."jellyfin.neet.cloud".locations."/" = {
|
services.nginx.virtualHosts."jellyfin.neet.cloud".locations."/" = {
|
||||||
proxyPass = "http://localhost:8096";
|
proxyPass = "http://localhost:8096";
|
||||||
proxyWebsockets = true;
|
proxyWebsockets = true;
|
||||||
};
|
};
|
||||||
services.nginx.virtualHosts."transmission.s0".locations."/" = {
|
services.nginx.virtualHosts."transmission.s0" = {
|
||||||
proxyPass = "http://vpn.containers:9091";
|
listen = [{ addr = "0.0.0.0"; port = 9091; } { addr = "0.0.0.0"; port = 80; }];
|
||||||
proxyWebsockets = true;
|
locations."/" = {
|
||||||
|
proxyPass = "http://vpn.containers:9091";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
6767
|
||||||
|
7878
|
||||||
|
8686
|
||||||
|
8989
|
||||||
|
9696
|
||||||
|
4534
|
||||||
|
8097
|
||||||
|
9091
|
||||||
|
];
|
||||||
|
|
||||||
|
virtualisation.oci-containers.backend = "podman";
|
||||||
|
virtualisation.podman.dockerSocket.enable = true; # TODO needed?
|
||||||
|
services.dashy = {
|
||||||
|
enable = true;
|
||||||
|
configFile = ./dashy.yaml;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user