From 75ae399b5a063a285f6ffa629f80816f66e7b8b1 Mon Sep 17 00:00:00 2001 From: Zuckerberg Date: Fri, 28 Mar 2025 21:05:37 -0700 Subject: [PATCH] Update nixpkgs. Move to new dashy service --- common/pc/kde.nix | 2 +- common/server/dashy.nix | 41 ---- common/server/default.nix | 1 - common/server/gitea.nix | 2 +- flake.lock | 6 +- flake.nix | 1 + machines/storage/s0/dashy.nix | 307 +++++++++++++++++++++++++++++ machines/storage/s0/dashy.yaml | 241 ---------------------- machines/storage/s0/default.nix | 21 +- patches/dont-break-nix-serve.patch | 15 ++ 10 files changed, 342 insertions(+), 295 deletions(-) delete mode 100644 common/server/dashy.nix create mode 100644 machines/storage/s0/dashy.nix delete mode 100644 machines/storage/s0/dashy.yaml create mode 100644 patches/dont-break-nix-serve.patch diff --git a/common/pc/kde.nix b/common/pc/kde.nix index 30958f8..0f425ae 100644 --- a/common/pc/kde.nix +++ b/common/pc/kde.nix @@ -14,7 +14,7 @@ in # akonadi # kmail # plasma5Packages.kmail-account-wizard - kate + kdePackages.kate ]; }; } diff --git a/common/server/dashy.nix b/common/server/dashy.nix deleted file mode 100644 index 54cfb96..0000000 --- a/common/server/dashy.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ 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" - ]; - }; - }; - }; -} diff --git a/common/server/default.nix b/common/server/default.nix index 64e7952..74a543e 100644 --- a/common/server/default.nix +++ b/common/server/default.nix @@ -18,7 +18,6 @@ ./iodine.nix ./searx.nix ./gitea-actions-runner.nix - ./dashy.nix ./librechat.nix ./actualbudget.nix ./unifi.nix diff --git a/common/server/gitea.nix b/common/server/gitea.nix index fd8d822..38be6a1 100644 --- a/common/server/gitea.nix +++ b/common/server/gitea.nix @@ -24,7 +24,7 @@ in SHOW_FOOTER_VERSION = false; }; ui = { - DEFAULT_THEME = "arc-green"; + DEFAULT_THEME = "gitea-dark"; }; service = { DISABLE_REGISTRATION = true; diff --git a/flake.lock b/flake.lock index 5448419..7c90dd6 100644 --- a/flake.lock +++ b/flake.lock @@ -208,11 +208,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1731278633, - "narHash": "sha256-3yxgMFssoDGm9rWJiAGfJRPctr06gaefjnpUltphkAQ=", + "lastModified": 1740374225, + "narHash": "sha256-Dnmzy5YWUVj3BNaZo5jRpZslXexbNKEk3ADGGcz9RpY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "871087c18d344abaa569e7d1b7c1af576aab877f", + "rev": "3349acd765bdffe454f7c8bbc450855577c1a6cf", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index fbffdd2..5fc6d10 100644 --- a/flake.nix +++ b/flake.nix @@ -137,6 +137,7 @@ src = nixpkgs; patches = [ ./patches/gamepadui.patch + ./patches/dont-break-nix-serve.patch ]; }; patchedNixpkgs = nixpkgs.lib.fix (self: (import "${patchedNixpkgsSrc}/flake.nix").outputs { self = nixpkgs; }); diff --git a/machines/storage/s0/dashy.nix b/machines/storage/s0/dashy.nix new file mode 100644 index 0000000..780dc44 --- /dev/null +++ b/machines/storage/s0/dashy.nix @@ -0,0 +1,307 @@ +{ + 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 = [ + ( + let + # Define the media section items once. + mediaItems = { + jellyfin = { + title = "Jellyfin"; + icon = "hl-jellyfin"; + url = "https://jellyfin.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "0_1956_jellyfin"; + }; + sonarr = { + title = "Sonarr"; + description = "Manage TV"; + icon = "hl-sonarr"; + url = "https://sonarr.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "1_1956_sonarr"; + }; + radarr = { + title = "Radarr"; + description = "Manage Movies"; + icon = "hl-radarr"; + url = "https://radarr.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "2_1956_radarr"; + }; + lidarr = { + title = "Lidarr"; + description = "Manage Music"; + icon = "hl-lidarr"; + url = "https://lidarr.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "3_1956_lidarr"; + }; + prowlarr = { + title = "Prowlarr"; + description = "Indexers"; + icon = "hl-prowlarr"; + url = "https://prowlarr.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "4_1956_prowlarr"; + }; + bazarr = { + title = "Bazarr"; + description = "Subtitles"; + icon = "hl-bazarr"; + url = "https://bazarr.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "5_1956_bazarr"; + }; + navidrome = { + title = "Navidrome"; + description = "Play Music"; + icon = "hl-navidrome"; + url = "https://music.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "6_1956_navidrome"; + }; + transmission = { + title = "Transmission"; + description = "Torrenting"; + icon = "hl-transmission"; + url = "https://transmission.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "7_1956_transmission"; + }; + }; + # Build the list once. + mediaList = [ + mediaItems.jellyfin + mediaItems.sonarr + mediaItems.radarr + mediaItems.lidarr + mediaItems.prowlarr + mediaItems.bazarr + mediaItems.navidrome + mediaItems.transmission + ]; + in + { + name = "Media & Entertainment"; + icon = "fas fa-photo-video"; + displayData = { + sortBy = "most-used"; + cols = 1; + rows = 1; + collapsed = false; + hideForGuests = false; + }; + items = mediaList; + filteredItems = mediaList; + } + ) + ( + let + networkItems = { + gateway = { + title = "Gateway"; + description = "openwrt"; + icon = "hl-openwrt"; + url = "http://openwrt.lan/"; + target = "sametab"; + statusCheck = true; + id = "0_746_gateway"; + }; + wireless = { + title = "Wireless"; + description = "openwrt (ish)"; + icon = "hl-openwrt"; + url = "http://PacketProvocateur.lan"; + target = "sametab"; + statusCheck = true; + id = "1_746_wireless"; + }; + }; + networkList = [ + networkItems.gateway + networkItems.wireless + ]; + in + { + name = "Network"; + icon = "fas fa-network-wired"; + items = networkList; + filteredItems = networkList; + displayData = { + sortBy = "default"; + rows = 1; + cols = 1; + collapsed = false; + hideForGuests = false; + }; + } + ) + + ( + let + servicesItems = { + matrix = { + title = "Matrix"; + description = ""; + icon = "hl-matrix"; + url = "https://chat.neet.space"; + target = "sametab"; + statusCheck = true; + id = "0_836_matrix"; + }; + radio = { + title = "Radio"; + description = "Radio service"; + icon = "generative"; + url = "https://radio.runyan.org"; + target = "sametab"; + statusCheck = true; + id = "1_836_radio"; + }; + mumble = { + title = "Mumble"; + description = "voice.neet.space"; + icon = "hl-mumble"; + url = "https://voice.neet.space"; + target = "sametab"; + statusCheck = false; + id = "2_836_mumble"; + }; + irc = { + title = "IRC"; + description = "irc.neet.dev"; + icon = "hl-thelounge"; + url = "https://irc.neet.dev"; + target = "sametab"; + statusCheck = true; + id = "3_836_irc"; + }; + git = { + title = "Git"; + description = "git.neet.dev"; + icon = "hl-gitea"; + url = "https://git.neet.dev"; + target = "sametab"; + statusCheck = true; + id = "4_836_git"; + }; + nextcloud = { + title = "Nextcloud"; + description = "neet.cloud"; + icon = "hl-nextcloud"; + url = "https://neet.cloud"; + target = "sametab"; + statusCheck = true; + id = "5_836_nextcloud"; + }; + roundcube = { + title = "Roundcube"; + description = "mail.neet.dev"; + icon = "hl-roundcube"; + url = "https://mail.neet.dev"; + target = "sametab"; + statusCheck = true; + id = "6_836_roundcube"; + }; + jitsimeet = { + title = "Jitsi Meet"; + description = "meet.neet.space"; + icon = "hl-jitsimeet"; + url = "https://meet.neet.space"; + target = "sametab"; + statusCheck = true; + id = "7_836_jitsimeet"; + }; + }; + servicesList = [ + servicesItems.matrix + servicesItems.radio + servicesItems.mumble + servicesItems.irc + servicesItems.git + servicesItems.nextcloud + servicesItems.roundcube + servicesItems.jitsimeet + ]; + in + { + name = "Services"; + icon = "fas fa-monitor-heart-rate"; + items = servicesList; + filteredItems = servicesList; + displayData = { + sortBy = "default"; + rows = 1; + cols = 1; + collapsed = false; + hideForGuests = false; + }; + } + ) + ]; +} diff --git a/machines/storage/s0/dashy.yaml b/machines/storage/s0/dashy.yaml deleted file mode 100644 index 48e93c0..0000000 --- a/machines/storage/s0/dashy.yaml +++ /dev/null @@ -1,241 +0,0 @@ -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: https://jellyfin.s0.neet.dev - target: sametab - statusCheck: false - id: 0_1956_jellyfin - - &ref_1 - title: Sonarr - description: Manage TV - icon: hl-sonarr - url: https://sonarr.s0.neet.dev - target: sametab - statusCheck: false - id: 1_1956_sonarr - - &ref_2 - title: Radarr - description: Manage Movies - icon: hl-radarr - url: https://radarr.s0.neet.dev - target: sametab - statusCheck: false - id: 2_1956_radarr - - &ref_3 - title: Lidarr - description: Manage Music - icon: hl-lidarr - url: https://lidarr.s0.neet.dev - target: sametab - statusCheck: false - id: 3_1956_lidarr - - &ref_4 - title: Prowlarr - description: Indexers - icon: hl-prowlarr - url: https://prowlarr.s0.neet.dev - target: sametab - statusCheck: false - id: 4_1956_prowlarr - - &ref_5 - title: Bazarr - description: Subtitles - icon: hl-bazarr - url: https://bazarr.s0.neet.dev - target: sametab - statusCheck: false - id: 5_1956_bazarr - - &ref_6 - title: Navidrome - description: Play Music - icon: hl-navidrome - url: https://music.s0.neet.dev - target: sametab - statusCheck: false - id: 6_1956_navidrome - - &ref_7 - title: Transmission - description: Torrenting - icon: hl-transmission - url: https://transmission.s0.neet.dev - target: sametab - statusCheck: false - 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 diff --git a/machines/storage/s0/default.nix b/machines/storage/s0/default.nix index 7e00b88..b3a90b4 100644 --- a/machines/storage/s0/default.nix +++ b/machines/storage/s0/default.nix @@ -171,17 +171,24 @@ openFirewall = false; # All nginx services are internal virtualHosts = let - mkVirtualHost = external: internal: + mkHost = external: config: { ${external} = { useACMEHost = "s0.neet.dev"; # Use wildcard cert forceSSL = true; - locations."/" = { - proxyPass = internal; - proxyWebsockets = true; - }; + locations."/" = config; }; }; + mkVirtualHost = external: internal: + mkHost external { + proxyPass = internal; + proxyWebsockets = true; + }; + mkStaticHost = external: static: + mkHost external { + root = static; + tryFiles = "$uri /index.html "; + }; in lib.mkMerge [ (mkVirtualHost "bazarr.s0.neet.dev" "http://vpn.containers:6767") @@ -193,7 +200,7 @@ (mkVirtualHost "unifi.s0.neet.dev" "https://localhost:8443") (mkVirtualHost "music.s0.neet.dev" "http://localhost:4533") (mkVirtualHost "jellyfin.s0.neet.dev" "http://localhost:8096") - (mkVirtualHost "s0.neet.dev" "http://localhost:56815") + (mkStaticHost "s0.neet.dev" config.services.dashy.finalDrv) { # Landing page LAN redirect "s0" = { @@ -255,7 +262,7 @@ virtualisation.podman.dockerSocket.enable = true; # TODO needed? services.dashy = { enable = true; - configFile = ./dashy.yaml; + settings = import ./dashy.nix; }; services.unifi = { diff --git a/patches/dont-break-nix-serve.patch b/patches/dont-break-nix-serve.patch new file mode 100644 index 0000000..197faa8 --- /dev/null +++ b/patches/dont-break-nix-serve.patch @@ -0,0 +1,15 @@ +diff --git a/nixos/modules/services/video/frigate.nix b/nixos/modules/services/video/frigate.nix +index 49f8ed673816..643b59d68dde 100644 +--- a/nixos/modules/services/video/frigate.nix ++++ b/nixos/modules/services/video/frigate.nix +@@ -482,10 +482,6 @@ in + }; + }; + extraConfig = '' +- # Frigate wants to connect on 127.0.0.1:5000 for unauthenticated requests +- # https://github.com/NixOS/nixpkgs/issues/370349 +- listen 127.0.0.1:5000; +- + # vod settings + vod_base_url ""; + vod_segments_base_url "";