Signed-off-by: Oliver Davies <oliver@oliverdavies.uk>
This commit is contained in:
parent
6bf7a5f97a
commit
239fb86c5d
14 changed files with 0 additions and 331 deletions
|
|
@ -9,7 +9,6 @@
|
||||||
services = {
|
services = {
|
||||||
audiobookshelf.enable = true;
|
audiobookshelf.enable = true;
|
||||||
home-assistant.enable = true;
|
home-assistant.enable = true;
|
||||||
homepage-dashboard.enable = true;
|
|
||||||
freshrss.enable = true;
|
freshrss.enable = true;
|
||||||
paperless.enable = true;
|
paperless.enable = true;
|
||||||
peertube.enable = true;
|
peertube.enable = true;
|
||||||
|
|
|
||||||
|
|
@ -15,26 +15,6 @@ in
|
||||||
default = "audiobookshelf.${homelab.domain}";
|
default = "audiobookshelf.${homelab.domain}";
|
||||||
type = types.str;
|
type = types.str;
|
||||||
};
|
};
|
||||||
|
|
||||||
homepage.name = mkOption {
|
|
||||||
default = "Audiobookshelf";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.description = mkOption {
|
|
||||||
default = "Self-hosted audiobook and podcast server";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.icon = mkOption {
|
|
||||||
default = "audiobookshelf";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.category = mkOption {
|
|
||||||
default = "Media";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
|
||||||
|
|
@ -23,26 +23,6 @@ in
|
||||||
default = "${service}.${homelab.domain}";
|
default = "${service}.${homelab.domain}";
|
||||||
type = types.str;
|
type = types.str;
|
||||||
};
|
};
|
||||||
|
|
||||||
homepage.name = mkOption {
|
|
||||||
default = "Tube Archivist";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.description = mkOption {
|
|
||||||
default = "Your self hosted YouTube media server";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.icon = mkOption {
|
|
||||||
default = "tube-archivist";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.category = mkOption {
|
|
||||||
default = "Media";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
|
||||||
|
|
@ -15,26 +15,6 @@ in
|
||||||
default = "home.${homelab.domain}";
|
default = "home.${homelab.domain}";
|
||||||
type = types.str;
|
type = types.str;
|
||||||
};
|
};
|
||||||
|
|
||||||
homepage.name = mkOption {
|
|
||||||
default = "Home Assisant";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.description = mkOption {
|
|
||||||
default = "Open source home automation that puts local control and privacy first.";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.icon = mkOption {
|
|
||||||
default = "home-assistant";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.category = mkOption {
|
|
||||||
default = "Services";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
|
||||||
|
|
@ -15,26 +15,6 @@ in
|
||||||
default = "${service}.${homelab.domain}";
|
default = "${service}.${homelab.domain}";
|
||||||
type = types.str;
|
type = types.str;
|
||||||
};
|
};
|
||||||
|
|
||||||
homepage.name = mkOption {
|
|
||||||
default = "Paperless-ngx";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.description = mkOption {
|
|
||||||
default = "Document management system";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.icon = mkOption {
|
|
||||||
default = "paperless";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.category = mkOption {
|
|
||||||
default = "Services";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
|
||||||
|
|
@ -25,26 +25,6 @@ in
|
||||||
default = "videos.${homelab.domain}";
|
default = "videos.${homelab.domain}";
|
||||||
type = types.str;
|
type = types.str;
|
||||||
};
|
};
|
||||||
|
|
||||||
homepage.name = mkOption {
|
|
||||||
default = "Peertube";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.description = mkOption {
|
|
||||||
default = "A free and open-source, decentralized, ActivityPub federated video platform";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.icon = mkOption {
|
|
||||||
default = "peertube";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.category = mkOption {
|
|
||||||
default = "Media";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
config.homelab.ports = {
|
config.homelab.ports = {
|
||||||
homepage-dashboard = 8097;
|
|
||||||
mealie = 9001;
|
mealie = 9001;
|
||||||
pihole = 8082;
|
pihole = 8082;
|
||||||
tubearchivist = 8099;
|
tubearchivist = 8099;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./homepage
|
|
||||||
./mealie.nix
|
./mealie.nix
|
||||||
./samba.nix
|
./samba.nix
|
||||||
./uptime-kuma.nix
|
./uptime-kuma.nix
|
||||||
|
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
||||||
{ config, lib, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = homelab.services.${service};
|
|
||||||
homelab = config.homelab;
|
|
||||||
service = "homepage-dashboard";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.homelab.services.${service} = {
|
|
||||||
enable = mkEnableOption "Enable ${service}";
|
|
||||||
|
|
||||||
url = mkOption {
|
|
||||||
default = "${config.networking.hostName}.${homelab.domain}";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
services = {
|
|
||||||
${service} = {
|
|
||||||
enable = true;
|
|
||||||
listenPort = homelab.ports.${service};
|
|
||||||
openFirewall = true;
|
|
||||||
|
|
||||||
customCSS = ''
|
|
||||||
#information-widgets {
|
|
||||||
padding-left: 1.5rem;
|
|
||||||
padding-right: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#footer {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.services-group {
|
|
||||||
margin-bottom: 3rem;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
|
|
||||||
services = (import ./services.nix { inherit config lib; });
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
headerStyle = "clean";
|
|
||||||
hideVersion = "true";
|
|
||||||
layout = (import ./layout.nix);
|
|
||||||
statusStyle = "dot";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
glances.enable = true;
|
|
||||||
|
|
||||||
nginx.virtualHosts.${cfg.url} = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = homelab.domain;
|
|
||||||
|
|
||||||
locations."/".proxyPass =
|
|
||||||
"http://localhost:${toString config.services.homepage-dashboard.listenPort}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
{ config }:
|
|
||||||
|
|
||||||
{
|
|
||||||
Glances =
|
|
||||||
let
|
|
||||||
port = toString config.services.glances.port;
|
|
||||||
in
|
|
||||||
[
|
|
||||||
{
|
|
||||||
Info = {
|
|
||||||
widget = {
|
|
||||||
type = "glances";
|
|
||||||
url = "http://localhost:${port}";
|
|
||||||
metric = "info";
|
|
||||||
chart = false;
|
|
||||||
version = 4;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
"CPU Temp" = {
|
|
||||||
widget = {
|
|
||||||
type = "glances";
|
|
||||||
url = "http://localhost:${port}";
|
|
||||||
metric = "sensor:Package id 0";
|
|
||||||
chart = false;
|
|
||||||
version = 4;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
Processes = {
|
|
||||||
widget = {
|
|
||||||
type = "glances";
|
|
||||||
url = "http://localhost:${port}";
|
|
||||||
metric = "process";
|
|
||||||
chart = false;
|
|
||||||
version = 4;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
Network = {
|
|
||||||
widget = {
|
|
||||||
type = "glances";
|
|
||||||
url = "http://localhost:${port}";
|
|
||||||
metric = "network:enp0s20f0u1";
|
|
||||||
chart = false;
|
|
||||||
version = 4;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
Glances = {
|
|
||||||
columns = 4;
|
|
||||||
header = false;
|
|
||||||
style = "row";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
Media = {
|
|
||||||
header = true;
|
|
||||||
style = "column";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
Services = {
|
|
||||||
header = true;
|
|
||||||
style = "column";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
{ config, lib }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
homelab = config.homelab.services;
|
|
||||||
|
|
||||||
homepageCategories = [
|
|
||||||
"Media"
|
|
||||||
"Services"
|
|
||||||
];
|
|
||||||
|
|
||||||
homepageServices =
|
|
||||||
category:
|
|
||||||
(attrsets.filterAttrs (
|
|
||||||
name: value: value ? homepage && value.homepage.category == category
|
|
||||||
) homelab);
|
|
||||||
|
|
||||||
services = lists.forEach homepageCategories (cat: {
|
|
||||||
"${cat}" =
|
|
||||||
lib.lists.forEach (lib.attrsets.mapAttrsToList (name: value: name) (homepageServices "${cat}"))
|
|
||||||
(x: {
|
|
||||||
"${homelab.${x}.homepage.name}" = {
|
|
||||||
icon = homelab.${x}.homepage.icon;
|
|
||||||
description = homelab.${x}.homepage.description;
|
|
||||||
href = "https://${homelab.${x}.url}";
|
|
||||||
siteMonitor = "https://${homelab.${x}.url}";
|
|
||||||
};
|
|
||||||
});
|
|
||||||
});
|
|
||||||
in
|
|
||||||
services ++ [ (import ./glances.nix { inherit config; }) ]
|
|
||||||
|
|
@ -15,26 +15,6 @@ in
|
||||||
default = "uptime.${homelab.domain}";
|
default = "uptime.${homelab.domain}";
|
||||||
type = types.str;
|
type = types.str;
|
||||||
};
|
};
|
||||||
|
|
||||||
homepage.name = mkOption {
|
|
||||||
default = "Uptime Kuma";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.description = mkOption {
|
|
||||||
default = "A fancy self-hosted monitoring tool";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.icon = mkOption {
|
|
||||||
default = "uptime-kuma";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.category = mkOption {
|
|
||||||
default = "Services";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,6 @@
|
||||||
return {
|
return {
|
||||||
s("home_packages", fmta("home.packages = with pkgs; [ <> ];", i(0))),
|
s("home_packages", fmta("home.packages = with pkgs; [ <> ];", i(0))),
|
||||||
|
|
||||||
s(
|
|
||||||
"homepage_options",
|
|
||||||
fmta(
|
|
||||||
[[
|
|
||||||
homepage.name = mkOption {
|
|
||||||
default = "<name>";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.description = mkOption {
|
|
||||||
default = "<description>";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.icon = mkOption {
|
|
||||||
default = "<icon>";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
|
|
||||||
homepage.category = mkOption {
|
|
||||||
default = "<finish>";
|
|
||||||
type = types.str;
|
|
||||||
};
|
|
||||||
]],
|
|
||||||
{
|
|
||||||
description = i(2),
|
|
||||||
finish = i(0),
|
|
||||||
icon = i(3),
|
|
||||||
name = i(1),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
s(
|
||||||
"imports",
|
"imports",
|
||||||
fmta(
|
fmta(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue