diff --git a/Firefox.zip b/Firefox.zip new file mode 100644 index 0000000..c4020ce Binary files /dev/null and b/Firefox.zip differ diff --git a/desktop/README.md b/desktop/README.md deleted file mode 100644 index 384d819..0000000 --- a/desktop/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Kioskmodus -- Firefox autostart -- Sway -- Restart Firefox via short cut: ALT+Enter -- Close Firefox via short cut: ALT+Q -## Systemd Service für restart -- Inaktiv wegen wayland - diff --git a/desktop/config.toml b/desktop/config.toml deleted file mode 100755 index 76abbc8..0000000 --- a/desktop/config.toml +++ /dev/null @@ -1,20 +0,0 @@ -[terminal] -# The VT to run the greeter on. Can be "next", "current" or a number -# designating the VT. -vt = 1 - -# The default session, also known as the greeter. -[default_session] -# with whatever you want started, such as `sway`. -command = "sway --config /etc/kiosk-setting/sway/config" -# if using wlgreet -#command = "sway --config /etc/greetd/sway-config" -# The user to run the command as. The privileges this user must have depends -# on the greeter. A graphical greeter may for example require the user to be -# in the `video` group. -user = "kiosk" - -[initial_session] -command = "sway'" -user = "kiosk" - diff --git a/desktop/firefox.sh b/desktop/firefox.sh deleted file mode 100755 index 3a703e2..0000000 --- a/desktop/firefox.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -killall firefox && firefox --kiosk mahn.ke/kiosk diff --git a/desktop/kiosk-setting/sway/config b/desktop/kiosk-setting/sway/config deleted file mode 100755 index 780f59f..0000000 --- a/desktop/kiosk-setting/sway/config +++ /dev/null @@ -1,163 +0,0 @@ -# Default config for sway -# -# Copy this to ~/.config/sway/config and edit it to your liking. -# -# Read `man 5 sway` for a complete reference. -#exec firefox kiosk mahn.ke/kiosk -### Variables -# -# Logo key. Use Mod1 for Alt. -set $mod Mod1 -# Home row direction keys, like vim -#set $left h -#set $down j -#set $up k -#set $right l -# Your preferred application launcher -set $menu wmenu-run - -include /etc/sway/config-vars.d/* - -bindsym $mod+Return firefox kiosk mahn.ke/kiosk -bindsym $mod+q kill - - # Start your launcher - # bindsym $mod+d exec $menu - - # floating_modifier $mod normal - - # Reload the configuration file - # bindsym $mod+Shift+c reload - - # Exit sway (logs you out of your Wayland session) - bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' -# - # Move your focus around - #bindsym $mod+$left focus left - #bindsym $mod+$down focus down - #bindsym $mod+$up focus up - #bindsym $mod+$right focus right - # Or use $mod+[up|down|left|right] - #bindsym $mod+Left focus left - #bindsym $mod+Down focus down - #bindsym $mod+Up focus up - #bindsym $mod+Right focus right - - # Move the focused window with the same, but add Shift - #bindsym $mod+Shift+$left move left - #bindsym $mod+Shift+$down move down - #bindsym $mod+Shift+$up move up - #bindsym $mod+Shift+$right move right - # Ditto, with arrow keys - # bindsym $mod+Shift+Left move left - # bindsym $mod+Shift+Down move down - # bindsym $mod+Shift+Up move up - #bindsym $mod+Shift+Right move right -# -# Workspaces: -# - # Switch to workspace - # bindsym $mod+1 workspace number 1 - # bindsym $mod+2 workspace number 2 - # bindsym $mod+3 workspace number 3 - # bindsym $mod+4 workspace number 4 - # bindsym $mod+5 workspace number 5 - #bindsym $mod+6 workspace number 6 - #bindsym $mod+7 workspace number 7 - #bindsym $mod+8 workspace number 8 - #bindsym $mod+9 workspace number 9 - #bindsym $mod+0 workspace number 10 - # Move focused container to workspace - #bindsym $mod+Shift+1 move container to workspace number 1 - #bindsym $mod+Shift+2 move container to workspace number 2 - #bindsym $mod+Shift+3 move container to workspace number 3 - #bindsym $mod+Shift+4 move container to workspace number 4 - #bindsym $mod+Shift+5 move container to workspace number 5 - #bindsym $mod+Shift+6 move container to workspace number 6 - #bindsym $mod+Shift+7 move container to workspace number 7 - #bindsym $mod+Shift+8 move container to workspace number 8 - #bindsym $mod+Shift+9 move container to workspace number 9 - #bindsym $mod+Shift+0 move container to workspace number 10 - # Note: workspaces can have any name you want, not just numbers. - # We just use 1-10 as the default. -# -# Layout stuff: -# - # You can "split" the current object of your focus with - # $mod+b or $mod+v, for horizontal and vertical splits - # respectively. - #bindsym $mod+b splith - #bindsym $mod+v splitv - - # Switch the current container between different layout styles - #bindsym $mod+s layout stacking - #bindsym $mod+w layout tabbed - #bindsym $mod+e layout toggle split - - # Make the current focus fullscreen - #bindsym $mod+f fullscreen - - # Toggle the current focus between tiling and floating mode - #bindsym $mod+Shift+space floating toggle - - # Swap focus between the tiling area and the floating area - #bindsym $mod+space focus mode_toggle - - # Move focus to the parent container - #bindsym $mod+a focus parent -# -# Scratchpad: -# - # Sway has a "scratchpad", which is a bag of holding for windows. - # You can send windows there and get them back later. - - # Move the currently focused window to the scratchpad - #bindsym $mod+Shift+minus move scratchpad - - # Show the next scratchpad window or hide the focused scratchpad window. - # If there are multiple scratchpad windows, this command cycles through them. - #bindsym $mod+minus scratchpad show -# -# Resizing containers: -# -#mode "resize" { - # left will shrink the containers width - # right will grow the containers width - # up will shrink the containers height - # down will grow the containers height - # bindsym $left resize shrink width 10px - # bindsym $down resize grow height 10px - # bindsym $up resize shrink height 10px - # bindsym $right resize grow width 10px - - # Ditto, with arrow keys - # bindsym Left resize shrink width 10px - # bindsym Down resize grow height 10px - # bindsym Up resize shrink height 10px - # bindsym Right resize grow width 10px - - # Return to default mode - # bindsym Return mode "default" - # bindsym Escape mode "default" -#} -#bindsym $mod+r mode "resize" -# -# Utilities: -# - # Special keys to adjust volume via PulseAudio - # bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle - # bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5% - # bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5% - #bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle - # Special keys to adjust brightness via brightnessctl - # bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- - # bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ - # Special key to take a screenshot with grim - # bindsym Print exec grim - -# -# Status Bar: -# -# Read `man 5 sway-bar` for more information about this section. - -include /etc/sway/config.d/* diff --git a/desktop/kiosk-setting/sway/config.d/50-systemd-user.conf b/desktop/kiosk-setting/sway/config.d/50-systemd-user.conf deleted file mode 100755 index ab04a90..0000000 --- a/desktop/kiosk-setting/sway/config.d/50-systemd-user.conf +++ /dev/null @@ -1,9 +0,0 @@ -# import variables into system-user enviroment -# based on the instructions in the sway wiki -# see also https://github.com/swaywm/sway/issues/5732 -# and https://github.com/systemd/systemd/blob/dfc637d0ff756889e8e5b7cb4ec991eb06069aa1/xorg/50-systemd-user.sh - -exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP - -exec hash dbus-update-activation-environment 2>/dev/null && \ - dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP=sway diff --git a/desktop/kiosk-setting/sway/loop.sh b/desktop/kiosk-setting/sway/loop.sh deleted file mode 100755 index 419919c..0000000 --- a/desktop/kiosk-setting/sway/loop.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -while true; do - ./firefox.sh - sleep 1 -done diff --git a/desktop/setup.sh b/desktop/setup.sh deleted file mode 100755 index 7d2250f..0000000 --- a/desktop/setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -sudo apt install greetd sway && \ -sudo cp -r desktop/kiosk-setting/ /etc/ && \ -sudo cp config.toml /etc/greetd/config.toml && \ -sudo reboot - diff --git a/desktop/sway/.config.swp b/desktop/sway/.config.swp deleted file mode 100755 index 8a0e427..0000000 Binary files a/desktop/sway/.config.swp and /dev/null differ diff --git a/desktop/sway/config b/desktop/sway/config deleted file mode 100755 index c33050a..0000000 --- a/desktop/sway/config +++ /dev/null @@ -1,104 +0,0 @@ -set $mod Mod4 -# Home row direction keys, like vim -set $left h -set $down j -set $up k -set $right l -# Your preferred terminal emulator -set $term konsole -# Your preferred application launcher -set $menu wmenu-run - - -default_border none - -include /etc/sway/config-vars.d/* -exec firefox-esr -# Basics: -# - # Start a terminal - bindsym $mod+Space exec firefox-esr - bindsym $mod+Return exec killall firefox-esr && firefox-esr - - # Kill focused window - bindsym $mod+Shift+q kill - - # Start your launcher - - # Drag floating windows by holding down $mod and left mouse button. - # Resize them with right mouse button + $mod. - # Despite the name, also works for non-floating windows. - # Change normal to inverse to use left mouse button for resizing and right - # mouse button for dragging. - floating_modifier $mod normal - - # Reload the configuration file - bindsym $mod+Shift+c reload - - # Exit sway (logs you out of your Wayland session) - bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' - # Move your focus around - bindsym $mod+$left focus left - bindsym $mod+$down focus down - bindsym $mod+$up focus up - bindsym $mod+$right focus right - # Or use $mod+[up|down|left|right] - bindsym $mod+Left focus left - bindsym $mod+Down focus down - bindsym $mod+Up focus up - bindsym $mod+Right focus right - - # Move the focused window with the same, but add Shift - bindsym $mod+Shift+$left move left - bindsym $mod+Shift+$down move down - bindsym $mod+Shift+$up move up - bindsym $mod+Shift+$right move right - # Ditto, with arrow keys - bindsym $mod+Shift+Left move left - bindsym $mod+Shift+Down move down - bindsym $mod+Shift+Up move up - bindsym $mod+Shift+Right move right - # Show the next scratchpad window or hide the focused scratchpad window. - # If there are multiple scratchpad windows, this command cycles through them. - bindsym $mod+minus scratchpad show -# -# Resizing containers: -# -mode "resize" { - # left will shrink the containers width - # right will grow the containers width - # up will shrink the containers height - # down will grow the containers height - bindsym $left resize shrink width 10px - bindsym $down resize grow height 10px - bindsym $up resize shrink height 10px - bindsym $right resize grow width 10px - - # Ditto, with arrow keys - bindsym Left resize shrink width 10px - bindsym Down resize grow height 10px - bindsym Up resize shrink height 10px - bindsym Right resize grow width 10px - - # Return to default mode - bindsym Return mode "default" - bindsym Escape mode "default" -} -# -# Utilities: -# - # Special keys to adjust volume via PulseAudio - bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle - bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5% - bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5% - bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle - # Special keys to adjust brightness via brightnessctl - bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- - bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ - # Special key to take a screenshot with grim - bindsym Print exec grim - -# -# Status Bar: -# -include /etc/sway/config.d/* diff --git a/desktop/sway/config.d/50-systemd-user.conf b/desktop/sway/config.d/50-systemd-user.conf deleted file mode 100755 index ab04a90..0000000 --- a/desktop/sway/config.d/50-systemd-user.conf +++ /dev/null @@ -1,9 +0,0 @@ -# import variables into system-user enviroment -# based on the instructions in the sway wiki -# see also https://github.com/swaywm/sway/issues/5732 -# and https://github.com/systemd/systemd/blob/dfc637d0ff756889e8e5b7cb4ec991eb06069aa1/xorg/50-systemd-user.sh - -exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP - -exec hash dbus-update-activation-environment 2>/dev/null && \ - dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP=sway diff --git a/desktop/sway/ffrun.sh b/desktop/sway/ffrun.sh deleted file mode 100755 index a46b0fd..0000000 --- a/desktop/sway/ffrun.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -APP_NAME="firefox-esr" -APP_COMMAND="firefox-esr" - -while true; do - if ! pgrep -x "$APP_NAME" > /dev/null; then - swaymsg exec "$APP_COMMAND" - fi - sleep 1 # Wait a second before checking again -done - diff --git a/desktop/sway/preseed b/desktop/sway/preseed deleted file mode 160000 index 84281c0..0000000 --- a/desktop/sway/preseed +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 84281c058648cd18ee702d772766cf1a170670e8 diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..032fb8b --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1751274312, + "narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..b991131 --- /dev/null +++ b/flake.nix @@ -0,0 +1,28 @@ +{ + description = "Kiosk NixOS ISO with Firefox in kiosk mode"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: { + # Build a bootable ISO image using the built-in NixOS iso module + packages.iso = ( + (nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./nixos/kiosk.nix + (import "${nixpkgs}/nixos/modules/installer/cd-dvd/iso-image.nix") + ]; + }).config.system.build.isoImage + ); + + # Expose the NixOS configuration for direct use if desired + nixosConfigurations.kiosk = (nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ ./nixos/kiosk.nix ]; + }); + }); +} diff --git a/nixos/kiosk.nix b/nixos/kiosk.nix new file mode 100644 index 0000000..e2688f7 --- /dev/null +++ b/nixos/kiosk.nix @@ -0,0 +1,151 @@ +{ config, pkgs, lib, ... }: + +{ + ############################################ + # Base system + ############################################ + nixpkgs.hostPlatform = "x86_64-linux"; + system.stateVersion = "24.11"; + + # Simple console-based kiosk using cage (Wayland single-app compositor) + services.xserver.enable = false; # Not using an X11 display manager + + # Autologin to TTY1 as kiosk user + services.getty.autologinUser = "kiosk"; + + # Kiosk user + users.users.kiosk = { + isNormalUser = true; + description = "Kiosk User"; + home = "/home/kiosk"; + extraGroups = [ "wheel" ]; + initialPassword = "kiosk"; + }; + + # Packages required (aligning with the Debian preseed intent) + environment.systemPackages = with pkgs; [ + firefox + cage + curl + unzip + # chromium # available if you want it in addition to Firefox + ]; + + ############################################ + # Firefox policies (preconfigured profile settings) + ############################################ + programs.firefox = { + enable = true; + policies = { + DisableDeveloperTools = true; + BlockAboutAddons = true; + BlockAboutConfig = true; + BlockAboutProfiles = true; + BlockAboutSupport = true; + DisableFirefoxAccounts = true; + DisablePrivateBrowsing = true; + DisableProfileImport = true; + DisableProfileRefresh = true; + DisableSafeMode = true; + DisablePocket = true; + DisableFirefoxScreenshots = true; + DisableSetDesktopBackground = true; + + Homepage = { + URL = "https://mahn.ke"; + Locked = true; + }; + + NewTabPage = { Enabled = false; }; + + # Use a Linux path for downloads in kiosk + DownloadDirectory = { + Path = "/home/kiosk/Downloads"; + Locked = true; + }; + + PromptForDownloadLocation = false; + StartDownloadsInTempDirectory = false; + DisableAppUpdate = true; + + Permissions = { + Camera = "deny"; + Microphone = "deny"; + Location = "deny"; + Notifications = "deny"; + }; + + ShowHomeButton = false; + DisplayMenuBar = false; + DisplayBookmarksToolbar = false; + + # Extension & user messaging controls (per your Debian policy JSON) + UserMessaging = { + ExtensionRecommendations = false; + FeatureRecommendations = false; + UrlbarInterventions = false; + SkipOnboarding = false; + MoreFromMozilla = false; + FirefoxLabs = false; + Locked = false; + }; + + # Install Tampermonkey automatically (Firefox will fetch at runtime). + # Note: AMO URL may change; this is the typical latest channel. + Extensions = { + Install = [ + "https://addons.mozilla.org/firefox/downloads/latest/tampermonkey/latest.xpi" + ]; + }; + }; + + # Helpful preferences to keep Firefox minimal + preferences = { + "browser.fullscreen.autohide" = true; + "browser.shell.checkDefaultBrowser" = false; + "browser.startup.page" = 1; # Start with homepage + }; + }; + + ############################################ + # Kiosk launch behavior (replicates your bash_profile approach) + ############################################ + # Create a bash_profile for the kiosk user that launches cage + firefox + system.activationScripts.kioskBashProfile = lib.stringAfter ["users"] '' + mkdir -p /home/kiosk + chown kiosk:kiosk /home/kiosk + sudo -u kiosk mkdir -p /home/kiosk/.config + cat > /home/kiosk/.bash_profile <<'EOF' +if [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then + exec ${pkgs.cage}/bin/cage ${pkgs.firefox}/bin/firefox --kiosk https://c3nav.de +fi +EOF + chown kiosk:kiosk /home/kiosk/.bash_profile + ''; + + # Unpack preconfigured Firefox profile from the repository into kiosk's home + system.activationScripts.kioskFirefoxProfile = lib.stringAfter ["users"] '' + mkdir -p /home/kiosk/.mozilla/firefox + # Only unzip if directory is empty (first activation) + if [ -z "$(ls -A /home/kiosk/.mozilla/firefox 2>/dev/null)" ]; then + ${pkgs.unzip}/bin/unzip -o ${../Firefox.zip} -d /home/kiosk/.mozilla/firefox + chown -R kiosk:kiosk /home/kiosk/.mozilla/firefox + fi + ''; + + ############################################ + # Include your userscripts in the image for easy import + ############################################ + environment.etc."kiosk/tampermonkey".source = ./../tampermonkey; + + ############################################ + # Networking & basic services + ############################################ + networking.hostName = "kiosk"; + time.timeZone = "UTC"; + services.openssh.enable = true; # optional, mirrors preseed tasksel ssh-server + + + # Keep system simple, disable unneeded DM + services.displayManager.enable = false; +} diff --git a/profile/post_install.sh b/post_install.sh old mode 100755 new mode 100644 similarity index 84% rename from profile/post_install.sh rename to post_install.sh index 6b4889a..a847cc0 --- a/profile/post_install.sh +++ b/post_install.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env bash printf "[daemon]\nAutomaticLoginEnable=true\nAutomaticLogin=kiosk\n\n[security]\n\n[xdmcp]\n\n[chooser]\n\n[debug]\n" > /etc/gdm3/daemon.conf - mkdir -p /usr/lib/firefox-esr/distribution tee /usr/lib/firefox-esr/distribution/policies.json > /dev/null <<'EOF' { @@ -8,7 +6,7 @@ tee /usr/lib/firefox-esr/distribution/policies.json > /dev/null <<'EOF' "DisableDeveloperTools": true, "BlockAboutAddons": true, "BlockAboutConfig": true, - "BlockAboutProf#!/usr/bin/env basshiles": true, + "BlockAboutProfiles": true, "BlockAboutSupport": true, "DisableFirefoxAccounts": true, "DisablePrivateBrowsing": true, @@ -59,6 +57,12 @@ chown -R kiosk:kiosk /home/kiosk/.config tee /home/kiosk/.bash_profile > /dev/null <<'EOF' if [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then - exec cage firefox --kiosk mahn.ke/kiosk + exec cage firefox --kiosk https://c3nav.de fi EOF + +mkdir -p /home/kiosk/.mozilla/firefox +curl -fsSL -o /tmp/Firefox.zip "https://git.hamburg.ccc.de/Firefox.zip" +unzip -o /tmp/Firefox.zip -d /home/kiosk/.mozilla/firefox +chown -R kiosk:kiosk /home/kiosk/.mozilla/firefox +rm -f /tmp/Firefox.zip \ No newline at end of file diff --git a/profile/preseed.cfg b/preseed.cfg similarity index 97% rename from profile/preseed.cfg rename to preseed.cfg index b934651..527a83b 100644 --- a/profile/preseed.cfg +++ b/preseed.cfg @@ -53,6 +53,7 @@ d-i pkgsel/include string \ sudo \ cage \ firefox-esr \ + unzip \ curl d-i pkgsel/exclude string gnome-software @@ -64,4 +65,4 @@ d-i finish-install/reboot_in_progress note d-i preseed/late_command string \ in-target curl -o /tmp/post_install.sh https://git.hamburg.ccc.de/ViMaSter/preseed/raw/branch/main/post_install.sh; \ in-target chmod +x /tmp/post_install.sh; \ - in-target /tmp/post_install.sh + in-target /tmp/post_install.sh; \ No newline at end of file diff --git a/setup.sh b/setup.sh deleted file mode 100755 index 50213a9..0000000 --- a/setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -apt install gdm3 greetd sway && \ -cp -r desktop/kiosk-setting/ /etc/ && \ -cp config.toml /etc/greetd/config.toml && \ -systemctl enable gdm3 && \ # greetd if gdm3 is buggy -./profile/post_install.sh diff --git a/profile/tampermonkey/backtohome.js b/tampermonkey/backtohome.js similarity index 64% rename from profile/tampermonkey/backtohome.js rename to tampermonkey/backtohome.js index 5dbb51e..a7a0935 100644 --- a/profile/tampermonkey/backtohome.js +++ b/tampermonkey/backtohome.js @@ -9,22 +9,31 @@ // @grant GM_addStyle // ==/UserScript== +const target = "https://kiosk.39c3.by.vincent.mahn.ke/"; (function() { 'use strict'; + // if the user is on target already or subdomain, do nothing + if (window.location.href === target || window.location.href.startsWith(target + '/')) { + return; + } + 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'; + window.location.href = target; }); (document.body || document.documentElement).appendChild(btn); - const IDLE_LIMIT_MS = 30_000; // 30 seconds + const IDLE_LIMIT_MS = 60_000; let idleTimer = null; let promptVisible = false; + const PROMPT_LIMIT_MS = 30_000; + let promptInterval = null; + let promptTimeout = null; const modal = document.createElement('div'); modal.id = 'idle-modal'; @@ -46,6 +55,7 @@

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

+

Auto return in 30s

`; document.body.appendChild(modal); @@ -76,21 +86,57 @@ promptVisible = true; modal.hidden = false; backdrop.hidden = false; - debugger; - // Move focus to the primary action for accessibility - document.querySelector("#idle-stay").addEventListener("click", () => { + + // Clear any previous prompt timers + if (promptInterval) { clearInterval(promptInterval); promptInterval = null; } + if (promptTimeout) { clearTimeout(promptTimeout); promptTimeout = null; } + + // Wire button actions (once to avoid duplicates) + const stayBtn = document.querySelector("#idle-stay"); + const goBtn = document.querySelector("#idle-go"); + + if (stayBtn) { + stayBtn.addEventListener("click", () => { hidePrompt(); resetIdleTimer(); - }); - document.querySelector("#idle-go").addEventListener("click", () => { - window.location.href = 'https://www.google.com'; - }); + }, { once: true }); + } + + if (goBtn) { + goBtn.addEventListener("click", () => { + window.location.href = target; + }, { once: true }); + } + + // 30s countdown visible to the user + let remaining = PROMPT_LIMIT_MS / 1000; // seconds + const countdownEl = document.querySelector("#idle-countdown"); + if (countdownEl) countdownEl.textContent = String(remaining); + + promptInterval = setInterval(() => { + remaining -= 1; + if (remaining >= 0 && countdownEl) { + countdownEl.textContent = String(remaining); + } + }, 1000); + + // Auto-go when expired + promptTimeout = setTimeout(() => { + const go = document.querySelector("#idle-go"); + if (go) { + go.click(); + } else { + window.location.href = target; + } + }, PROMPT_LIMIT_MS); } function hidePrompt() { promptVisible = false; modal.hidden = true; backdrop.hidden = true; + if (promptInterval) { clearInterval(promptInterval); promptInterval = null; } + if (promptTimeout) { clearTimeout(promptTimeout); promptTimeout = null; } } function onIdle() { diff --git a/profile/tampermonkey/hvv.js b/tampermonkey/hvv.js similarity index 100% rename from profile/tampermonkey/hvv.js rename to tampermonkey/hvv.js diff --git a/profile/tampermonkey/mastodon.js b/tampermonkey/mastodon.js similarity index 100% rename from profile/tampermonkey/mastodon.js rename to tampermonkey/mastodon.js