diff --git a/apps/irc/irc.yaml b/apps/irc/irc.yaml
index c2bf64b..796970c 100644
--- a/apps/irc/irc.yaml
+++ b/apps/irc/irc.yaml
@@ -62,7 +62,7 @@ data:
port: 9000,
reverseProxy: true,
maxHistory: 2500,
- theme: "default",
+ theme: "thelounge-theme-flowercore",
prefetch: false,
disableMediaPreview: true,
fileUpload: {
@@ -84,6 +84,458 @@ data:
leaveMessage: "BlueJay Web IRC"
};
---
+# FlowerCore / Blue Jay theme package for The Lounge
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: thelounge-flowercore-theme
+ namespace: irc
+data:
+ package.json: |
+ {
+ "name": "thelounge-theme-flowercore",
+ "version": "1.0.0",
+ "description": "FlowerCore Blue Jay theme for The Lounge",
+ "main": "package.json",
+ "keywords": [
+ "thelounge",
+ "thelounge-theme"
+ ],
+ "thelounge": {
+ "type": "theme",
+ "name": "FlowerCore Blue Jay",
+ "css": "theme.css",
+ "files": [
+ "bluejay-logo.svg",
+ "bluejay-bg.svg"
+ ]
+ }
+ }
+ theme.css: |
+ :root {
+ --fc-bg: #0a1628;
+ --fc-surface: #111d33;
+ --fc-surface-2: #162844;
+ --fc-border: #1e3a5f;
+ --fc-accent: #2b8aff;
+ --fc-accent-soft: rgba(43, 138, 255, 0.22);
+ --fc-gold: #ffb300;
+ --fc-text: #e8edf5;
+ --fc-text-muted: #9db1c8;
+ --fc-success: #3db86a;
+ --fc-danger: #e84545;
+ --body-color: var(--fc-text);
+ --body-color-muted: var(--fc-text-muted);
+ --body-bg-color: var(--fc-bg);
+ --button-color: var(--fc-accent);
+ --button-text-color-hover: #ffffff;
+ --overlay-bg-color: rgba(5, 12, 22, 0.84);
+ --link-color: #8bc3ff;
+ --window-bg-color: var(--fc-surface);
+ --window-heading-color: #f5f8ff;
+ --date-marker-color: rgba(43, 138, 255, 0.45);
+ --unread-marker-color: rgba(255, 179, 0, 0.6);
+ --highlight-bg-color: rgba(43, 138, 255, 0.12);
+ --highlight-border-color: var(--fc-gold);
+ --upload-progressbar-color: var(--fc-gold);
+ }
+
+ body {
+ background:
+ radial-gradient(circle at top right, rgba(43, 138, 255, 0.22), transparent 30%),
+ linear-gradient(145deg, rgba(10, 22, 40, 0.98), rgba(12, 25, 46, 0.98)),
+ url("/packages/thelounge-theme-flowercore/bluejay-bg.svg");
+ color: var(--fc-text);
+ font-family: "Trebuchet MS", "Segoe UI", Verdana, sans-serif;
+ }
+
+ a,
+ a:focus,
+ a:hover {
+ color: var(--link-color);
+ }
+
+ .window,
+ #confirm-dialog,
+ #context-menu,
+ .mentions-popup,
+ .textcomplete-menu {
+ background: rgba(17, 29, 51, 0.97);
+ border: 1px solid var(--fc-border);
+ box-shadow: 0 24px 60px rgba(3, 10, 18, 0.55);
+ }
+
+ #loading .window,
+ #confirm-dialog {
+ background:
+ linear-gradient(180deg, rgba(14, 30, 54, 0.98), rgba(17, 29, 51, 0.98)),
+ url("/packages/thelounge-theme-flowercore/bluejay-bg.svg");
+ border-color: rgba(43, 138, 255, 0.4);
+ }
+
+ #loading .logo,
+ #loading .logo-inverted,
+ #sidebar .logo,
+ #sidebar .logo-inverted {
+ display: none !important;
+ }
+
+ #loading-status-container,
+ #sidebar .logo-container {
+ position: relative;
+ }
+
+ #loading-status-container::before {
+ content: "";
+ display: block;
+ width: 96px;
+ height: 96px;
+ margin: 0 auto 16px;
+ background: url("/packages/thelounge-theme-flowercore/bluejay-logo.svg") center / contain no-repeat;
+ filter: drop-shadow(0 10px 24px rgba(0, 0, 0, 0.45));
+ }
+
+ #loading-page-message::before {
+ content: "FlowerCore IRC";
+ display: block;
+ margin-bottom: 10px;
+ color: #ffffff;
+ font-size: 30px;
+ font-weight: 700;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ }
+
+ #loading-page-message::after {
+ content: "Blue Jay web chat for iamworkin.lan";
+ display: block;
+ margin-top: 10px;
+ color: var(--fc-text-muted);
+ font-size: 14px;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ }
+
+ #loading-page-message {
+ color: var(--fc-text);
+ font-size: 15px;
+ line-height: 1.7;
+ max-width: 30rem;
+ text-align: center;
+ }
+
+ #sidebar {
+ background:
+ linear-gradient(180deg, rgba(10, 22, 40, 0.98), rgba(17, 29, 51, 0.98)),
+ url("/packages/thelounge-theme-flowercore/bluejay-bg.svg");
+ border-right: 1px solid var(--fc-border);
+ color: #d5e3f5;
+ }
+
+ #sidebar .logo-container {
+ padding: 20px 14px 8px;
+ }
+
+ #sidebar .logo-container::before {
+ content: "";
+ display: block;
+ width: 72px;
+ height: 72px;
+ margin: 0 auto 10px;
+ background: url("/packages/thelounge-theme-flowercore/bluejay-logo.svg") center / contain no-repeat;
+ filter: drop-shadow(0 8px 18px rgba(0, 0, 0, 0.35));
+ }
+
+ #sidebar .logo-container::after {
+ content: "FlowerCore IRC";
+ display: block;
+ color: #ffffff;
+ font-size: 18px;
+ font-weight: 700;
+ letter-spacing: 0.06em;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ #sidebar .network {
+ margin-bottom: 16px;
+ }
+
+ .channel-list-item,
+ #footer button {
+ border-radius: 10px;
+ transition: background-color 0.2s ease, box-shadow 0.2s ease, color 0.2s ease;
+ }
+
+ .channel-list-item:hover,
+ #footer button:hover {
+ background: rgba(43, 138, 255, 0.12);
+ color: #ffffff;
+ }
+
+ .channel-list-item.active,
+ #footer button.active {
+ background: linear-gradient(90deg, rgba(43, 138, 255, 0.24), rgba(22, 40, 68, 0.92));
+ box-shadow: inset 3px 0 0 var(--fc-gold);
+ color: #ffffff;
+ }
+
+ .channel-list-item[data-type="lobby"] {
+ color: #8bc3ff;
+ }
+
+ .channel-list-item .badge {
+ background: rgba(255, 255, 255, 0.08);
+ color: var(--fc-text-muted);
+ }
+
+ .channel-list-item .badge.highlight {
+ background: var(--fc-gold);
+ color: #08111e;
+ font-weight: 700;
+ }
+
+ #footer {
+ background: rgba(10, 22, 40, 0.92);
+ border-top: 1px solid var(--fc-border);
+ }
+
+ #viewport .lt,
+ #viewport .rt,
+ #chat button.close,
+ #chat button.menu,
+ #chat button.mentions,
+ #chat button.search,
+ #form #submit,
+ #form #upload,
+ .password-container .reveal-password span {
+ color: #8bc3ff;
+ }
+
+ #viewport .lt:hover,
+ #viewport .rt:hover,
+ #chat button.close:hover,
+ #chat button.menu:hover,
+ #chat button.mentions:hover,
+ #chat button.search:hover,
+ #form #submit:hover,
+ #form #upload:hover,
+ .password-container .reveal-password span:hover {
+ background: rgba(43, 138, 255, 0.16);
+ border-radius: 8px;
+ color: #ffffff;
+ opacity: 1;
+ }
+
+ #chat .header {
+ background: linear-gradient(135deg, #0e1e36, #1a3a6a, #2b8aff);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
+ color: #ffffff;
+ }
+
+ .header .title,
+ .header .topic,
+ #chat .header button {
+ color: #ffffff;
+ text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
+ }
+
+ #chat .messages {
+ background:
+ linear-gradient(180deg, rgba(17, 29, 51, 0.98), rgba(11, 21, 39, 0.98)),
+ radial-gradient(circle at top right, rgba(43, 138, 255, 0.08), transparent 35%);
+ }
+
+ #chat .msg {
+ border-radius: 6px;
+ transition: background-color 0.2s ease;
+ }
+
+ #chat .msg:hover {
+ background: rgba(255, 255, 255, 0.03);
+ }
+
+ #chat .chat-view[data-type="channel"] .msg.highlight,
+ .mentions-popup .msg .content {
+ background: linear-gradient(90deg, rgba(43, 138, 255, 0.16), rgba(255, 179, 0, 0.1));
+ box-shadow: inset 3px 0 0 var(--fc-gold);
+ }
+
+ #chat .msg-statusmsg {
+ background: rgba(255, 179, 0, 0.18);
+ color: #ffe4a0;
+ }
+
+ #chat .userlist,
+ #form,
+ .mentions-popup,
+ .textcomplete-menu,
+ #context-menu {
+ background: rgba(17, 29, 51, 0.98);
+ border-color: var(--fc-border);
+ }
+
+ #chat .userlist .count,
+ #chat .user-mode:before {
+ background: rgba(8, 17, 30, 0.95);
+ }
+
+ .input,
+ #connect input,
+ #connect select,
+ #settings input,
+ #settings select,
+ #settings textarea,
+ #form #nick,
+ #chat .userlist .search,
+ form.message-search input,
+ .jump-to-input .input,
+ .password-container input {
+ background: rgba(8, 17, 30, 0.72);
+ border: 1px solid var(--fc-border);
+ border-radius: 10px;
+ color: var(--fc-text);
+ }
+
+ #form {
+ border-top: 1px solid var(--fc-border);
+ padding: 8px;
+ }
+
+ #form #nick {
+ color: #8bc3ff;
+ line-height: 28px;
+ }
+
+ #form #input {
+ margin: 0 8px;
+ min-height: 36px;
+ padding: 8px 10px;
+ }
+
+ ::placeholder,
+ .jump-to-input .input::placeholder,
+ form.message-search input::placeholder {
+ color: rgba(232, 237, 245, 0.45);
+ }
+
+ .jump-to-input:before,
+ #chat .count:before {
+ color: rgba(232, 237, 245, 0.45);
+ }
+
+ .btn {
+ background: linear-gradient(180deg, rgba(24, 62, 112, 0.28), rgba(14, 30, 54, 0.38));
+ border-color: var(--fc-accent);
+ border-radius: 999px;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
+ color: var(--fc-text);
+ letter-spacing: 0.12em;
+ }
+
+ .btn:hover,
+ .btn:focus,
+ .btn:disabled {
+ background: linear-gradient(180deg, #2b8aff, #1c6fe3);
+ color: #ffffff;
+ }
+
+ .btn:active,
+ .btn:focus,
+ .input:focus {
+ box-shadow: 0 0 0 3px rgba(43, 138, 255, 0.26);
+ }
+
+ #version-checker,
+ #settings .settings-sync-panel,
+ #connect .connect-sasl-external {
+ background: rgba(8, 17, 30, 0.78);
+ border: 1px solid var(--fc-border);
+ color: var(--fc-text);
+ }
+
+ #version-checker.loading {
+ border-left: 3px solid var(--fc-accent);
+ color: #9dd3ff;
+ }
+
+ #version-checker.up-to-date {
+ border-left: 3px solid var(--fc-success);
+ color: #87e9a9;
+ }
+
+ #version-checker.new-packages,
+ #version-checker.new-version {
+ border-left: 3px solid var(--fc-gold);
+ color: #ffe4a0;
+ }
+
+ #version-checker.error,
+ #settings .error,
+ #sign-in .error {
+ border-left: 3px solid var(--fc-danger);
+ color: #ffb3b3;
+ }
+
+ #upload-progressbar {
+ box-shadow: 0 0 14px rgba(255, 179, 0, 0.75);
+ }
+
+ ::-webkit-scrollbar:hover {
+ background-color: rgba(255, 255, 255, 0.04);
+ }
+
+ ::-webkit-scrollbar-thumb:vertical {
+ background: linear-gradient(180deg, rgba(43, 138, 255, 0.72), rgba(30, 58, 95, 0.95));
+ }
+
+ ::-webkit-scrollbar-thumb:vertical:active {
+ background: linear-gradient(180deg, rgba(255, 179, 0, 0.85), rgba(43, 138, 255, 0.9));
+ }
+
+ @media (max-width: 768px) {
+ #sidebar {
+ box-shadow: 0 0 28px rgba(0, 0, 0, 0.5);
+ }
+
+ #chat .header {
+ padding-right: 6px;
+ }
+ }
+ bluejay-logo.svg: |
+
+ bluejay-bg.svg: |
+
+---
# UnrealIRCd configuration template (passwords replaced by placeholders)
apiVersion: v1
kind: ConfigMap
@@ -699,6 +1151,23 @@ spec:
labels:
app: thelounge
spec:
+ initContainers:
+ - name: install-flowercore-theme
+ image: ghcr.io/thelounge/thelounge:4.4.3
+ command:
+ - sh
+ - -lc
+ - |
+ set -eu
+ THELOUNGE_HOME=/var/opt/thelounge thelounge install file:/flowercore-theme
+ volumeMounts:
+ - name: thelounge-config
+ mountPath: /var/opt/thelounge/config.js
+ subPath: config.js
+ - name: thelounge-packages
+ mountPath: /var/opt/thelounge/packages
+ - name: thelounge-flowercore-theme
+ mountPath: /flowercore-theme
containers:
- name: thelounge
image: ghcr.io/thelounge/thelounge:4.4.3
@@ -728,10 +1197,17 @@ spec:
- name: thelounge-config
mountPath: /var/opt/thelounge/config.js
subPath: config.js
+ - name: thelounge-packages
+ mountPath: /var/opt/thelounge/packages
volumes:
- name: thelounge-config
configMap:
name: thelounge-config
+ - name: thelounge-packages
+ emptyDir: {}
+ - name: thelounge-flowercore-theme
+ configMap:
+ name: thelounge-flowercore-theme
---
# UnrealIRCd Service
apiVersion: v1