diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..51511d1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +test-results/ diff --git a/CLAUDE.md b/CLAUDE.md index ace31a5..b78b69b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,13 +11,24 @@ Custom CSS + JS theme for Unraid 7.2.3 WebGUI. B&W mountain wallpaper with frost | File | Purpose | Deploy path (persistent) | Deploy path (live) | |------|---------|--------------------------|---------------------| | `style.css` | Main CSS theme | `/boot/config/plugins/custom.css/style.css` | `/usr/local/emhttp/plugins/custom.css/style.css` | -| `sidebar.js` | Sidebar toggle + search overlay | `/boot/config/plugins/custom.css/assets/sidebar.js` | `/usr/local/emhttp/plugins/custom.css/assets/sidebar.js` | -| `update-icons.sh` | Replace Docker/VM icons with selfh.st CDN icons | `/boot/config/plugins/custom.css/assets/update-icons.sh` | `/usr/local/emhttp/plugins/custom.css/assets/update-icons.sh` | +| `sidebar.js` | Sidebar toggle + search overlay + icon replacement | `/boot/config/plugins/custom.css/assets/sidebar.js` | `/usr/local/emhttp/plugins/custom.css/assets/sidebar.js` | +| `update-icons.sh` | Replace Docker/VM cached icons with selfh.st icons | `/boot/config/plugins/custom.css/assets/update-icons.sh` | `/usr/local/emhttp/plugins/custom.css/assets/update-icons.sh` | | `vm-icons.conf` | VM name → icon name mapping | `/boot/config/plugins/custom.css/assets/vm-icons.conf` | — | +| `assets/icons/` | Self-hosted selfh.st icons (34 PNG + 34 light SVG + unraid.svg) | `/boot/config/plugins/custom.css/assets/icons/` | `/usr/local/emhttp/custom/assets/icons/` | +| `assets/wallpaper.jpg` | Mountain wallpaper background | `/boot/config/plugins/custom.css/assets/wallpaper.jpg` | `/usr/local/emhttp/custom/assets/wallpaper.jpg` | + +## Web-Accessible Paths + +Unraid nginx serves `/usr/local/emhttp/` as document root. Key mapping: +- `/custom/` → `/usr/local/emhttp/custom/` (NOT `plugins/custom.css/`!) +- `/plugins/custom.css/` → `/usr/local/emhttp/plugins/custom.css/` + +Static assets (icons, wallpaper) that need HTTP access go to `/usr/local/emhttp/custom/assets/`. +JS/CSS loaded via plugin pages go to `/usr/local/emhttp/plugins/custom.css/`. ## Deployment -Both files must be deployed to TWO paths — persistent (survives reboot) and live (active now): +Code files deploy to TWO paths — persistent (survives reboot) and live (active now): ```bash scp -i ~/.ssh/id_ed25519_unraid -P 422 style.css root@192.168.10.20:/boot/config/plugins/custom.css/style.css scp -i ~/.ssh/id_ed25519_unraid -P 422 style.css root@192.168.10.20:/usr/local/emhttp/plugins/custom.css/style.css @@ -28,6 +39,18 @@ scp -i ~/.ssh/id_ed25519_unraid -P 422 update-icons.sh root@192.168.10.20:/usr/l scp -i ~/.ssh/id_ed25519_unraid -P 422 vm-icons.conf root@192.168.10.20:/boot/config/plugins/custom.css/assets/vm-icons.conf ``` +Static assets deploy to persistent + web-accessible paths: +```bash +# Icons +scp -i ~/.ssh/id_ed25519_unraid -P 422 -r assets/icons/ root@192.168.10.20:/boot/config/plugins/custom.css/assets/icons/ +ssh -i ~/.ssh/id_ed25519_unraid root@192.168.10.20 -p 422 'mkdir -p /usr/local/emhttp/custom/assets && cp -r /boot/config/plugins/custom.css/assets/icons /usr/local/emhttp/custom/assets/' +# Wallpaper +scp -i ~/.ssh/id_ed25519_unraid -P 422 assets/wallpaper.jpg root@192.168.10.20:/boot/config/plugins/custom.css/assets/wallpaper.jpg +ssh -i ~/.ssh/id_ed25519_unraid root@192.168.10.20 -p 422 'cp /boot/config/plugins/custom.css/assets/wallpaper.jpg /usr/local/emhttp/custom/assets/' +``` + +Boot persistence is handled by `/boot/config/go` which copies icons/wallpaper to `/usr/local/emhttp/custom/assets/` on startup. + JS injection is handled by `CustomJS_Loader.page` on the server (persisted via `/boot/config/go`). ## Unraid Sidebar DOM Structure @@ -113,7 +136,7 @@ The `dynamix.gui.search` plugin uses hover-trigger in sidebar theme. We replace ## Custom Docker/VM Icons -Icons are sourced from [selfh.st/icons](https://selfh.st/icons/) via jsDelivr CDN. +Icons are sourced from [selfh.st/icons](https://selfh.st/icons/) and self-hosted locally in `assets/icons/` (no CDN dependency). ### How it works `update-icons.sh` reads a `glass.icon` Docker label from each container, downloads the matching PNG from `https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/{name}.png`, and replaces Unraid's cached icon files. This works on Docker page, VM page, and Dashboard — no client-side JS needed. @@ -144,4 +167,6 @@ ssh -i ~/.ssh/id_ed25519_unraid root@192.168.10.20 -p 422 'bash /boot/config/plu ## Wallpaper -Place wallpaper at `/boot/config/plugins/custom.css/assets/wallpaper.jpg` — accessible at `/custom/wallpaper.jpg`. +Source: Unsplash NuBvAE6VfSM (B&W mountains). Tracked in repo as `assets/wallpaper.jpg`. +- Persistent: `/boot/config/plugins/custom.css/assets/wallpaper.jpg` +- Web-accessible: `/usr/local/emhttp/custom/assets/wallpaper.jpg` → `/custom/assets/wallpaper.jpg` diff --git a/assets/icons/actual-budget-light.svg b/assets/icons/actual-budget-light.svg new file mode 100644 index 0000000..e2dc22b --- /dev/null +++ b/assets/icons/actual-budget-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/actual-budget.png b/assets/icons/actual-budget.png new file mode 100644 index 0000000..c16f3c6 Binary files /dev/null and b/assets/icons/actual-budget.png differ diff --git a/assets/icons/adguard-home-light.svg b/assets/icons/adguard-home-light.svg new file mode 100644 index 0000000..f7b85d1 --- /dev/null +++ b/assets/icons/adguard-home-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/adguard-home.png b/assets/icons/adguard-home.png new file mode 100644 index 0000000..54770f6 Binary files /dev/null and b/assets/icons/adguard-home.png differ diff --git a/assets/icons/apple-light.svg b/assets/icons/apple-light.svg new file mode 100644 index 0000000..5289452 --- /dev/null +++ b/assets/icons/apple-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/apple.png b/assets/icons/apple.png new file mode 100644 index 0000000..655a42e Binary files /dev/null and b/assets/icons/apple.png differ diff --git a/assets/icons/audible-light.svg b/assets/icons/audible-light.svg new file mode 100644 index 0000000..fc09b89 --- /dev/null +++ b/assets/icons/audible-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/audible.png b/assets/icons/audible.png new file mode 100644 index 0000000..9e1160c Binary files /dev/null and b/assets/icons/audible.png differ diff --git a/assets/icons/authentik-light.svg b/assets/icons/authentik-light.svg new file mode 100644 index 0000000..01de461 --- /dev/null +++ b/assets/icons/authentik-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/authentik.png b/assets/icons/authentik.png new file mode 100644 index 0000000..98de0bb Binary files /dev/null and b/assets/icons/authentik.png differ diff --git a/assets/icons/databasement-light.svg b/assets/icons/databasement-light.svg new file mode 100644 index 0000000..a75ec0e --- /dev/null +++ b/assets/icons/databasement-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/databasement.png b/assets/icons/databasement.png new file mode 100644 index 0000000..cac156e Binary files /dev/null and b/assets/icons/databasement.png differ diff --git a/assets/icons/docker-light.svg b/assets/icons/docker-light.svg new file mode 100644 index 0000000..d09597c --- /dev/null +++ b/assets/icons/docker-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/docker.png b/assets/icons/docker.png new file mode 100644 index 0000000..08dc032 Binary files /dev/null and b/assets/icons/docker.png differ diff --git a/assets/icons/dockge-light.svg b/assets/icons/dockge-light.svg new file mode 100644 index 0000000..32a52e9 --- /dev/null +++ b/assets/icons/dockge-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/dockge.png b/assets/icons/dockge.png new file mode 100644 index 0000000..049d636 Binary files /dev/null and b/assets/icons/dockge.png differ diff --git a/assets/icons/gitea-light.svg b/assets/icons/gitea-light.svg new file mode 100644 index 0000000..677bff8 --- /dev/null +++ b/assets/icons/gitea-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/gitea.png b/assets/icons/gitea.png new file mode 100644 index 0000000..9c90c6f Binary files /dev/null and b/assets/icons/gitea.png differ diff --git a/assets/icons/homarr-light.svg b/assets/icons/homarr-light.svg new file mode 100644 index 0000000..7e6c2b3 --- /dev/null +++ b/assets/icons/homarr-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/homarr.png b/assets/icons/homarr.png new file mode 100644 index 0000000..9cdb5d4 Binary files /dev/null and b/assets/icons/homarr.png differ diff --git a/assets/icons/home-assistant-light.svg b/assets/icons/home-assistant-light.svg new file mode 100644 index 0000000..7ef8b1b --- /dev/null +++ b/assets/icons/home-assistant-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/home-assistant.png b/assets/icons/home-assistant.png new file mode 100644 index 0000000..fc6b190 Binary files /dev/null and b/assets/icons/home-assistant.png differ diff --git a/assets/icons/karakeep-light.svg b/assets/icons/karakeep-light.svg new file mode 100644 index 0000000..7820a99 --- /dev/null +++ b/assets/icons/karakeep-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/karakeep.png b/assets/icons/karakeep.png new file mode 100644 index 0000000..7508127 Binary files /dev/null and b/assets/icons/karakeep.png differ diff --git a/assets/icons/n8n-light.svg b/assets/icons/n8n-light.svg new file mode 100644 index 0000000..4b1e3a7 --- /dev/null +++ b/assets/icons/n8n-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/n8n.png b/assets/icons/n8n.png new file mode 100644 index 0000000..a6e9673 Binary files /dev/null and b/assets/icons/n8n.png differ diff --git a/assets/icons/netalertx-light.svg b/assets/icons/netalertx-light.svg new file mode 100644 index 0000000..991dfae --- /dev/null +++ b/assets/icons/netalertx-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/netalertx.png b/assets/icons/netalertx.png new file mode 100644 index 0000000..77ea6f8 Binary files /dev/null and b/assets/icons/netalertx.png differ diff --git a/assets/icons/netbox-light.svg b/assets/icons/netbox-light.svg new file mode 100644 index 0000000..df1f01d --- /dev/null +++ b/assets/icons/netbox-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/netbox.png b/assets/icons/netbox.png new file mode 100644 index 0000000..11b1408 Binary files /dev/null and b/assets/icons/netbox.png differ diff --git a/assets/icons/networking-toolbox-light.svg b/assets/icons/networking-toolbox-light.svg new file mode 100644 index 0000000..533bdcf --- /dev/null +++ b/assets/icons/networking-toolbox-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/networking-toolbox.png b/assets/icons/networking-toolbox.png new file mode 100644 index 0000000..4f07486 Binary files /dev/null and b/assets/icons/networking-toolbox.png differ diff --git a/assets/icons/nextcloud-light.svg b/assets/icons/nextcloud-light.svg new file mode 100644 index 0000000..fa2adc7 --- /dev/null +++ b/assets/icons/nextcloud-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/nextcloud.png b/assets/icons/nextcloud.png new file mode 100644 index 0000000..65a8df1 Binary files /dev/null and b/assets/icons/nextcloud.png differ diff --git a/assets/icons/ntfy-light.svg b/assets/icons/ntfy-light.svg new file mode 100644 index 0000000..991bc32 --- /dev/null +++ b/assets/icons/ntfy-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/ntfy.png b/assets/icons/ntfy.png new file mode 100644 index 0000000..1ab64e1 Binary files /dev/null and b/assets/icons/ntfy.png differ diff --git a/assets/icons/ollama-light.svg b/assets/icons/ollama-light.svg new file mode 100644 index 0000000..aced617 --- /dev/null +++ b/assets/icons/ollama-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/ollama.png b/assets/icons/ollama.png new file mode 100644 index 0000000..54c1c2b Binary files /dev/null and b/assets/icons/ollama.png differ diff --git a/assets/icons/open-webui-light.svg b/assets/icons/open-webui-light.svg new file mode 100644 index 0000000..f61d92f --- /dev/null +++ b/assets/icons/open-webui-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/open-webui.png b/assets/icons/open-webui.png new file mode 100644 index 0000000..8afc439 Binary files /dev/null and b/assets/icons/open-webui.png differ diff --git a/assets/icons/pgadmin-light.svg b/assets/icons/pgadmin-light.svg new file mode 100644 index 0000000..f6e85f3 --- /dev/null +++ b/assets/icons/pgadmin-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/pgadmin.png b/assets/icons/pgadmin.png new file mode 100644 index 0000000..95fdf14 Binary files /dev/null and b/assets/icons/pgadmin.png differ diff --git a/assets/icons/plex-light.svg b/assets/icons/plex-light.svg new file mode 100644 index 0000000..ba9da99 --- /dev/null +++ b/assets/icons/plex-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/plex.png b/assets/icons/plex.png new file mode 100644 index 0000000..0e8377d Binary files /dev/null and b/assets/icons/plex.png differ diff --git a/assets/icons/postgresql-light.svg b/assets/icons/postgresql-light.svg new file mode 100644 index 0000000..df20cd6 --- /dev/null +++ b/assets/icons/postgresql-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/postgresql.png b/assets/icons/postgresql.png new file mode 100644 index 0000000..5cad371 Binary files /dev/null and b/assets/icons/postgresql.png differ diff --git a/assets/icons/redis-light.svg b/assets/icons/redis-light.svg new file mode 100644 index 0000000..ec49fea --- /dev/null +++ b/assets/icons/redis-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/redis.png b/assets/icons/redis.png new file mode 100644 index 0000000..723bd57 Binary files /dev/null and b/assets/icons/redis.png differ diff --git a/assets/icons/rustdesk-light.svg b/assets/icons/rustdesk-light.svg new file mode 100644 index 0000000..5d62d5f --- /dev/null +++ b/assets/icons/rustdesk-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/rustdesk.png b/assets/icons/rustdesk.png new file mode 100644 index 0000000..aebc525 Binary files /dev/null and b/assets/icons/rustdesk.png differ diff --git a/assets/icons/speedtest-tracker-light.svg b/assets/icons/speedtest-tracker-light.svg new file mode 100644 index 0000000..f90dc9a --- /dev/null +++ b/assets/icons/speedtest-tracker-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/speedtest-tracker.png b/assets/icons/speedtest-tracker.png new file mode 100644 index 0000000..c8fd0e2 Binary files /dev/null and b/assets/icons/speedtest-tracker.png differ diff --git a/assets/icons/tailscale-light.svg b/assets/icons/tailscale-light.svg new file mode 100644 index 0000000..64dd14c --- /dev/null +++ b/assets/icons/tailscale-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/tailscale.png b/assets/icons/tailscale.png new file mode 100644 index 0000000..f93f967 Binary files /dev/null and b/assets/icons/tailscale.png differ diff --git a/assets/icons/traefik-light.svg b/assets/icons/traefik-light.svg new file mode 100644 index 0000000..52713b7 --- /dev/null +++ b/assets/icons/traefik-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/traefik.png b/assets/icons/traefik.png new file mode 100644 index 0000000..3efe3da Binary files /dev/null and b/assets/icons/traefik.png differ diff --git a/assets/icons/transmission-light.svg b/assets/icons/transmission-light.svg new file mode 100644 index 0000000..e5513f9 --- /dev/null +++ b/assets/icons/transmission-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/transmission.png b/assets/icons/transmission.png new file mode 100644 index 0000000..b7e955f Binary files /dev/null and b/assets/icons/transmission.png differ diff --git a/assets/icons/unimus-light.svg b/assets/icons/unimus-light.svg new file mode 100644 index 0000000..ff33c66 --- /dev/null +++ b/assets/icons/unimus-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/unimus.png b/assets/icons/unimus.png new file mode 100644 index 0000000..ea1923a Binary files /dev/null and b/assets/icons/unimus.png differ diff --git a/assets/icons/unraid-light.svg b/assets/icons/unraid-light.svg new file mode 100644 index 0000000..ba87cf1 --- /dev/null +++ b/assets/icons/unraid-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/unraid.png b/assets/icons/unraid.png new file mode 100644 index 0000000..7676f5d Binary files /dev/null and b/assets/icons/unraid.png differ diff --git a/assets/icons/unraid.svg b/assets/icons/unraid.svg new file mode 100644 index 0000000..6287894 --- /dev/null +++ b/assets/icons/unraid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/uptime-kuma-light.svg b/assets/icons/uptime-kuma-light.svg new file mode 100644 index 0000000..88f26a7 --- /dev/null +++ b/assets/icons/uptime-kuma-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/uptime-kuma.png b/assets/icons/uptime-kuma.png new file mode 100644 index 0000000..eb4fc9e Binary files /dev/null and b/assets/icons/uptime-kuma.png differ diff --git a/assets/icons/vaultwarden-light.svg b/assets/icons/vaultwarden-light.svg new file mode 100644 index 0000000..6a88fba --- /dev/null +++ b/assets/icons/vaultwarden-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/vaultwarden.png b/assets/icons/vaultwarden.png new file mode 100644 index 0000000..b0b64ea Binary files /dev/null and b/assets/icons/vaultwarden.png differ diff --git a/assets/icons/woodpecker-ci-light.svg b/assets/icons/woodpecker-ci-light.svg new file mode 100644 index 0000000..a3b5e4b --- /dev/null +++ b/assets/icons/woodpecker-ci-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/woodpecker-ci.png b/assets/icons/woodpecker-ci.png new file mode 100644 index 0000000..8ec0eb3 Binary files /dev/null and b/assets/icons/woodpecker-ci.png differ diff --git a/assets/wallpaper.jpg b/assets/wallpaper.jpg new file mode 100644 index 0000000..4a43153 Binary files /dev/null and b/assets/wallpaper.jpg differ diff --git a/sidebar.js b/sidebar.js index 4d3df04..9560204 100644 --- a/sidebar.js +++ b/sidebar.js @@ -15,7 +15,7 @@ if (!document.getElementById('sidebar-logo')) { var logo = document.createElement('img'); logo.id = 'sidebar-logo'; - logo.src = 'https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/unraid.svg'; + logo.src = '/custom/assets/icons/unraid.svg'; logo.alt = ''; menu.appendChild(logo); } @@ -152,8 +152,8 @@ (function() { 'use strict'; - var CDN_PNG = 'https://cdn.jsdelivr.net/gh/selfhst/icons@main/png'; - var CDN_SVG = 'https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg'; + var CDN_PNG = '/custom/assets/icons'; + var CDN_SVG = '/custom/assets/icons'; // Container name → selfh.st icon name (lowercase) // Only needed for names that don't auto-match. diff --git a/style.css b/style.css index a7a26a1..2a9ce46 100644 --- a/style.css +++ b/style.css @@ -51,7 +51,7 @@ ============================================ */ body { background: #0a0a0f !important; - background-image: url('/custom/wallpaper.jpg') !important; + background-image: url('/custom/assets/wallpaper.jpg') !important; background-size: cover !important; background-position: center center !important; background-attachment: fixed !important;