diff --git a/post_install.sh b/post_install.sh index 8c9659e..4ff2943 100644 --- a/post_install.sh +++ b/post_install.sh @@ -54,9 +54,21 @@ tee /usr/lib/firefox-esr/distribution/policies.json > /dev/null <<'EOF' } EOF chown -R kiosk:kiosk /home/kiosk/.config +tee /etc/systemd/system/firefox-kiosk.service > /dev/null <<'EOF' +[Unit] +Description=Firefox Kiosk +After=graphical.target +Wants=graphical.target -tee /home/kiosk/.bash_profile > /dev/null <<'EOF' -if [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then - exec cage firefox --kiosk https://c3nav.de -fi -EOF \ No newline at end of file +[Service] +User=kiosk +Type=simple +ExecStart=/usr/bin/firefox --kiosk https://mahn.ke +Restart=always +RestartSec=5 +Environment=DISPLAY=:0 + +[Install] +WantedBy=graphical.target +EOF +systemctl enable firefox-kiosk.service \ No newline at end of file diff --git a/preseed.cfg b/preseed.cfg index b934651..be64c49 100644 --- a/preseed.cfg +++ b/preseed.cfg @@ -47,15 +47,19 @@ d-i apt-setup/disable-cdrom-entries boolean true tasksel tasksel/first multiselect standard, ssh-server d-i pkgsel/include string \ - xorg \ - openbox \ + sway \ + swaybg \ + swayidle \ + swaylock \ + wayland-protocols \ + xwayland \ chromium \ sudo \ - cage \ - firefox-esr \ curl -d-i pkgsel/exclude string gnome-software +d-i pkgsel/exclude string \ + gnome-software \ + xserver-xorg* d-i grub-installer/only_debian boolean true d-i grub-installer/bootdev string default diff --git a/tampermonkey/backtohome.js b/tampermonkey/backtohome.js deleted file mode 100644 index 5dbb51e..0000000 --- a/tampermonkey/backtohome.js +++ /dev/null @@ -1,122 +0,0 @@ -// ==UserScript== -// @name Back to Home (39C3 Kiosk) -// @namespace http://tampermonkey.net/ -// @version 2025-12-18 -// @description Adds buttons to every website to return to home page and prompts on idle -// @author You -// @match *://*/* -// @icon https://www.google.com/s2/favicons?sz=64&domain=google.com -// @grant GM_addStyle -// ==/UserScript== - -(function() { - 'use strict'; - - const btn = document.createElement('button'); - btn.textContent = 'Home'; - btn.style.cssText = ' all: unset; box-sizing: border-box; border: 2px solid #141414; background: #faf5f5; text-align: center; color: #141414; position: fixed; right: 10px; bottom: 10px; width: 60px; height: 60px; z-index: 2147483647; padding-top: 6px; border-radius: 60px;'; - btn.innerHTML = ''; - btn.addEventListener('click', () => { - window.location.href = 'http://127.0.0.1:8080'; - }); - (document.body || document.documentElement).appendChild(btn); - - - const IDLE_LIMIT_MS = 30_000; // 30 seconds - let idleTimer = null; - let promptVisible = false; - - const modal = document.createElement('div'); - modal.id = 'idle-modal'; - modal.hidden = true; - modal.style.cssText = ` - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - background-color: #141414 !important; - border-radius: 0.385em; - border: 2px solid #444; - padding: 20px; - z-index: 2147483647; - box-shadow: 0 4px 8px rgba(0,0,0,0.2); - `; - modal.innerHTML = ` -

You seem to be idle

-

Do you want to stay on this page or go back to the home page?

- - - `; - document.body.appendChild(modal); - - const backdrop = document.createElement('div'); - backdrop.id = 'idle-backdrop'; - backdrop.hidden = true; - backdrop.style.cssText = ` - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(0,0,0,0.5); - z-index: 2147483646; - `; - document.body.appendChild(backdrop); - - const userEvents = [ - 'mousemove', - 'mousedown', - 'keydown', - 'wheel', - 'touchstart', - 'scroll' - ]; - - function showPrompt() { - promptVisible = true; - modal.hidden = false; - backdrop.hidden = false; - debugger; - // Move focus to the primary action for accessibility - document.querySelector("#idle-stay").addEventListener("click", () => { - hidePrompt(); - resetIdleTimer(); - }); - document.querySelector("#idle-go").addEventListener("click", () => { - window.location.href = 'https://www.google.com'; - }); - } - - function hidePrompt() { - promptVisible = false; - modal.hidden = true; - backdrop.hidden = true; - } - - function onIdle() { - showPrompt(); - } - - function resetIdleTimer() { - if (promptVisible) return; // Don't auto-dismiss while prompt is visible - if (idleTimer) clearTimeout(idleTimer); - idleTimer = setTimeout(onIdle, IDLE_LIMIT_MS); - } - - // Any user activity resets the timer - userEvents.forEach(evt => { - document.addEventListener(evt, resetIdleTimer, { passive: true }); - }); - - // When returning to a visible tab, refresh the timer - document.addEventListener('visibilitychange', () => { - if (document.visibilityState === 'visible') { - resetIdleTimer(); - } - }); - - // Actions - - // Kick things off - resetIdleTimer(); -})(); diff --git a/tampermonkey/hvv.js b/tampermonkey/hvv.js deleted file mode 100644 index 7b59d14..0000000 --- a/tampermonkey/hvv.js +++ /dev/null @@ -1,214 +0,0 @@ -// ==UserScript== -// @name HVV Styling (39C3 Kiosk) -// @namespace http://tampermonkey.net/ -// @version 2025-12-18 -// @description try to take over the world! -// @author You -// @match https://www.hvv.de/de/fahrplaene/abruf-fahrplaninfos/abfahrten-auf-ihrem-monitor/abfahrten-anzeige?show=66c992574d6c4179a65009c84f0f74fc -// @icon https://www.google.com/s2/favicons?sz=64&domain=hvv.de -// @grant GM_addStyle -// ==/UserScript== - -(function() { - 'use strict'; - - GM_addStyle(`:root { - --color-neutral-50: #f2f0f5; - --color-neutral-100: #d1c6e0; - --color-neutral-200: #b2a0cb; - --color-neutral-300: #957eb5; - --color-neutral-400: #7a60a0; - --color-neutral-500: #61468b; - --color-neutral-600: #4b3176; - --color-neutral-700: #371f60; - --color-neutral-800: #26114b; - --color-neutral-900: #180736; - --color-neutral-950: #0c011f; - --color-argon-50: #e1abc9; - --color-argon-100: #da87b5; - --color-argon-200: #d464a1; - --color-argon-300: #cd448f; - --color-argon-400: #c6257d; - --color-argon-500: #b0166f; - --color-argon-600: #9a0a61; - --color-argon-700: #830755; - --color-argon-800: #6d0449; - --color-argon-900: #56023c; - --color-argon-950: #3f012d; - --color-krypton-50: #b2d9ea; - --color-krypton-100: #8cc9e4; - --color-krypton-200: #69bade; - --color-krypton-300: #4badd8; - --color-krypton-400: #2493c2; - --color-krypton-500: #167fac; - --color-krypton-600: #0a6c96; - --color-krypton-700: #075c81; - --color-krypton-800: #044c6b; - --color-krypton-900: #023c55; - --color-krypton-950: #012c3f; - --color-green-50: #c0f49a; - --color-green-100: #a7e57a; - --color-green-200: #8fd75d; - --color-green-300: #7ac843; - --color-green-400: #66b92d; - --color-green-500: #54aa18; - --color-green-600: #47990f; - --color-green-700: #397e0a; - --color-green-800: #2b6206; - --color-green-900: #1f4703; - --color-green-950: #122b01; - --color-red-50: #e6afaf; - --color-red-100: #dd9090; - --color-red-200: #d57272; - --color-red-300: #cc5757; - --color-red-400: #c33d3d; - --color-red-500: #bb2626; - --color-red-600: #b21010; - --color-red-700: #950808; - --color-red-800: #780404; - --color-red-900: #5c0202; - --color-red-950: #3f0101; - --color-yellow-50: #fefce8; - --color-yellow-100: #fef9c2; - --color-yellow-200: #fff085; - --color-yellow-300: #ffdf20; - --color-yellow-400: #fdc700; - --color-yellow-500: #efb100; - --color-yellow-600: #d08700; - --color-yellow-700: #a65f00; - --color-yellow-800: #894b00; - --color-yellow-900: #733e0a; - --color-yellow-950: #432004; - - --color-white: #ffffff; - - --color-dark-foreground: var(--color-neutral-50); - --color-dark-background: var(--color-neutral-950); - --color-dark-shade-1: var(--color-neutral-900); - --color-dark-shade-2: var(--color-neutral-800); - --color-dark-shade-3: var(--color-neutral-700); - --color-dark-shade-4: var(--color-neutral-600); - --color-dark-text-1: rgba(250, 245, 245, 0.8); - --color-dark-text-2: var(--color-neutral-300); - --color-dark-text-3: var(--color-neutral-400); - --color-dark-text-4: var(--color-neutral-500); - --color-dark-primary: var(--color-argon-400); - --color-dark-secondary: #9673ff; - --color-dark-error: var(--color-red-500); - --color-dark-success: var(--color-green-500); - --color-dark-warning: var(--color-yellow-500); - --color-dark-accent-1: #60a5f9; - --color-dark-accent-2: #d381f7; - --color-dark-accent-3: #ff7975; - - --color-light-foreground: var(--color-neutral-950); - --color-light-background: var(--color-neutral-50); - --color-light-shade-1: var(--color-neutral-100); - --color-light-shade-2: var(--color-neutral-200); - --color-light-shade-3: var(--color-neutral-300); - --color-light-shade-4: var(--color-neutral-400); - --color-light-text-1: var(--color-neutral-800); - --color-light-text-2: var(--color-neutral-700); - --color-light-text-3: var(--color-neutral-600); - --color-light-text-4: var(--color-neutral-500); - --color-light-primary: var(--color-argon-600); - --color-light-secondary: var(--color-krypton-500); - --color-light-error: var(--color-red-600); - --color-light-success: var(--color-green-600); - --color-light-warning: var(--color-yellow-600); - --color-light-accent-1: #303ec0; - --color-light-accent-2: #6c366c; - --color-light-accent-3: #932f0a; - - --color-cmyk-primary: var(--color-dark-primary); - --color-cmyk-secondary: var(--color-dark-secondary); - - --line-height-loose: 1.4; - --line-height-relaxed: 1.3; - --line-height-base: 1.2; - --line-height-snug: 1.1; - --line-height-tight: 1; - - --text-xs: 0.75rem; - --text-sm: 0.875rem; - --text-base: 1rem; - --text-lg: 1.125rem; - --text-xl: 1.25rem; - --text-2xl: 1.5rem; - --text-3xl: 1.875rem; - --text-4xl: 2.25rem; - --text-5xl: 3rem; - --text-6xl: 3.75rem; - --text-7xl: 4.5rem; - - --container-3xs: 16rem; - --container-2xs: 18rem; - --container-xs: 20rem; - --container-sm: 24rem; - --container-md: 28rem; - --container-lg: 32rem; - --container-xl: 36rem; - --container-2xl: 42rem; - --container-3xl: 48rem; - --container-4xl: 56rem; - --container-5xl: 64rem; - --container-6xl: 72rem; - --container-7xl: 80rem; -} - -#page-content, .f-body { - margin: 0; - padding: 0 -} - -.o-headline1 { - color: rgb(102, 246, 102); - font-size: 3em -} - -.o-headline2 { - color: var(--color-dark-secondary); - font-size: 3em -} - -.js-span-station-name { - color: var(--color-dark-text-1); - font-size: 1.5em -} - -.o-table table{ - color: var(--color-dark-text-1); - font-size: 2em -} - -.o-transport-icon { - transform: scale(2); - color: var(--color-argon-600); - margin-left: 20px !important; -} - -.c-departures-monitor__delay-time.is-late { - color: #ff3719; -} - -.c-departures-monitor__delay-time.is-on-time { - color: #009900; -} - -.c-departures-monitor__logo { - opacity: 0.7 -} - -body { - background-color: #141414; -} -.js-span-station-name { - margin: 0 !important; -} - -.o-transport-icon--transparent .o-transport-icon__number { -color: #faf5f5 !important; -} - - `); -})(); diff --git a/tampermonkey/mastodon.js b/tampermonkey/mastodon.js deleted file mode 100644 index 7e05e90..0000000 --- a/tampermonkey/mastodon.js +++ /dev/null @@ -1,130 +0,0 @@ -// ==UserScript== -// @name Mastodon Styling (39C3 Kiosk) -// @namespace http://tampermonkey.net/ -// @version 2025-12-18 -// @description Reduces actions not required to serve a Kiosk at 39C3 -// @author You -// @match https://chaos.social/tags/39c3/ -// @icon https://www.google.com/s2/favicons?sz=64&domain=chaos.social -// @grant GM_addStyle -// ==/UserScript== - -(function() { - 'use strict'; - - GM_addStyle(` -.columns-area__panels__pane.columns-area__panels__pane--compositional { - display: none; -} - -.columns-area__panels__pane.columns-area__panels__pane--start.columns-area__panels__pane--navigational { - display: none; -} - -div#tabs-bar__portal { - display: none; -} - -.hashtag-header__header__buttons { - display: none; -} - -span.display-name { - background-color: #9673ff; - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -span.display-name * { - display: inline !important; - font-weight: normal !important; - color: black !important; - text-transform: uppercase; -} - -span.display-name__account::before { - content: '('; -} - -span.display-name__account::after { - content: ')'; -} - -.hashtag-header__header__buttons { - display: none; -} - -span.display-name, .status__relative-time { - background-color: #9673ff; - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - padding: 5px 5px 2px; -} - -span.display-name *, .status__relative-time { - display: inline !important; - font-weight: normal !important; - color: black !important; - text-transform: uppercase; - height: auto; -} - -span.display-name__account::before { - content: '('; -} - -span.display-name__account::after { - content: ')'; -} - -.status { - border-bottom: 0 !important; -} -.status p { - color: rgba(250, 245, 245, 0.8) !important; -} -.status p a{ - color: rgba(102, 246, 102) !important; -} - -.status__action-bar { - display: none !important; -} - -.column>.scrollable { - border: 0 !important; - background: transparent !important; -} - -article { - background-color: #242424; - border-radius: 0.375rem; - margin-bottom: 40px !important; -} - -.columns-area__panels__main { - max-width: 60vw; -} - -.hashtag-bar a { - --hub-tag-bg: transparent; - --hub-tag-border: 1px solid #9673ff; - --hub-tag-color: #9673ff; - --bs-border-radius: 0.375rem; - background-color: var(--hub-tag-bg); - border-radius: var(--bs-border-radius) 0; - border: var(--hub-tag-border); - color: var(--hub-tag-color); - display: inline-flex; - gap: 5px; - min-width: 0; - overflow: hidden; - padding: 5px 5px 2px; - text-overflow: ellipsis; - text-transform: uppercase; - white-space: nowrap; -} - -.hashtag-header { - display: none; -} - `); -})();