diff --git a/hswaw/machines/tv/common.nix b/hswaw/machines/tv/common.nix
new file mode 100644
index 0000000..c1b8e7c
--- /dev/null
+++ b/hswaw/machines/tv/common.nix
@@ -0,0 +1,123 @@
+# RPi4 as TV kiosk.
+
+{ config, pkgs, ... }:
+
+let
+  nixos-hardware = builtins.fetchGit {
+    url = "https://github.com/NixOS/nixos-hardware.git";
+    rev = "3bf48d3587d3f34f745a19ebc968b002ef5b5c5a";
+  };
+
+in {
+  imports = [
+    "${nixos-hardware}/raspberry-pi/4"
+  ];
+
+  boot.initrd.availableKernelModules = [ "xhci_pci" "usbhid" ];
+  boot.initrd.kernelModules = [ ];
+  boot.kernelModules = [ ];
+  boot.extraModulePackages = [ ];
+  boot.loader.grub.enable = false;
+  boot.loader.generic-extlinux-compatible.enable = true;
+  powerManagement.cpuFreqGovernor = "ondemand";
+
+  networking.useDHCP = true;
+
+  swapDevices = [ ];
+  fileSystems."/" =
+    { device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
+      fsType = "ext4";
+    };
+
+  networking.domain = "waw.hackerspace.pl";
+  time.timeZone = "Europe/Warsaw";
+
+  nixpkgs.overlays = [
+    (self: super: {
+      signage = self.callPackage ./signage.nix {};
+    })
+  ];
+
+  sound.enable = true;
+  services.pipewire = {
+    enable = true;
+    alsa.enable = true;
+    pulse.enable = true;
+  };
+
+  services.dbus.enable = true;
+
+  programs.sway = {
+    enable = true;
+    wrapperFeatures.gtk = true;
+    extraSessionCommands = ''
+      export WLR_LIBINPUT_NO_DEVICES=1
+      export WLR_NO_HARDWARE_CURSORS=1
+    '';
+  };
+  hardware.raspberry-pi."4".fkms-3d.enable = true;
+  hardware.raspberry-pi."4".poe-hat.enable = true;
+
+  services.greetd = {
+    enable = true;
+    settings = rec {
+      initial_session = let
+         sway = builtins.elemAt config.services.xserver.displayManager.sessionPackages 0;
+        in {
+        command = "${sway}/bin/sway";
+        user = "kiosk";
+      };
+      default_session = initial_session;
+    };
+  };
+
+  users.users.root = {
+    openssh.authorizedKeys.keys = [
+      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG599UildOrAq+LIOQjKqtGMwjgjIxozI1jtQQRKHtCP q3k@mimeomia"
+      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFhaCaC/CVYv6hphqmEdKaPrIn+Q946+myvL9SSnzFZk vuko@eagle"
+      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICTR292kx/2CNuWYIsZ6gykQ036aBGrmheIuZa6S1D2x implr@thonk"
+      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGfIRe1nH6vwjQTjqHNnkKAdr1VYqGEeQnqInmf3A6UN ar@khas"
+      "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQb3YQoiYFZLKwvHYKbu1bMqzNeDCAszQhAe1+QI5SLDOotclyY/vFmOReZOsmyMFl71G2d7d+FbYNusUnNNjTxRYQ021tVc+RkMdLJaORRURmQfEFEKbai6QSFTwErXzuoIzyEPK0lbsQuGgqT9WaVnRzHJ2Q/4+qQbxAS34PuR5NqEkmn4G6LMo3OyJ5mwPkCj9lsqz4BcxRaMWFO3mNcwGDfSW+sqgc3E8N6LKrTpZq3ke7xacpQmcG5DU9VO+2QVPdltl9jWbs3gXjmF92YRNOuKPVfAOZBBsp8JOznfx8s9wDgs7RwPmDpjIAJEyoABqW5hlXfqRbTnfnMvuR informatic@InformaticPC"
+      "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDVQI/uYdp3km0NBSK7s80VAw7k6zH2Y5hYg1fkPfTjN7/hPCvyuIvSYYNdb6APWevUcw5+1Mpv0YMc+GOFCsJEXnSAcppNhZTPM6ic6HeaIHEC5QBv6qMWbCNLf5M9ZqYdBHEIeCYg0VGJMzgkSor7sk3gEwnKgCMaJ0Bmqv++qtBOLKhCgUn3KTORAn2BAtkXEe8ASfkdWWPMoq20eshsV26h4N4C2bvAgm7ucFtziOtp7TpGY5L8snv7twAeriMkifLbF7J3vy+l6qYBb990HkRadAHAYtt0viPEjTzkFlTubxMPqrmFh4xK8HdKawAw8KFy0SYBqQnKU9oiZ5biyLJvFzaLn+YJL4BcM3A8DRvdeaHiD4PnEJh8bWHCBER5hhGYcNZhA+qBxPYXFjYEiAfsXxD1AYNVep6lpnPtK0vvcPKSxr5eLBM8ZoSofKtA0Xa+7ySuAnzWSdy9EspLNzA8TSFUhQcsZmsUE1cPeLoS2+8I9QFDwQbyPAwWKpfCkLaWd1cK4J1KPn6XzH8iARifX4F/oAEzmfYz5yXrGJQV6HhNAntKXt8dsZhME3kYVgHB/8Ls8PRwAe/9N92JR+DjdDvGKLoPf3BqOq4fq6JcrUT6FPRtGCz0bl4Cgnsb+UY1d2Ue2I7Wcpuqgv5HLY0beTE6CSEfDNmPad/EPw== cz3"
+    ];
+  };
+  users.groups.kiosk = {};
+  users.users.kiosk = {
+    isNormalUser = true;
+    group = "kiosk";
+    extraGroups = [ "users" "lp" "dialout" "tty" ];
+  };
+
+  environment.systemPackages = with pkgs; [
+    (let 
+       config = pkgs.writeText "config.lua" ''
+         return {
+           displayTime = 2,
+           transitionTime = 0.5,
+           showProgress = true,
+           nodes = {
+             {'nodes.weather', displayTime = 10},
+             {'nodes.newdash', displayTime = 10},
+             {'nodes.misery', displayTime = 10},
+           },
+           environment = os.getenv('ENV') or 'prod',
+           renderWidth = 1280,
+           renderHeight = 720,
+         }
+       '';
+    in pkgs.writeScriptBin "signage-wrapped" ''
+      #!/usr/bin/env bash
+      SIGNAGE_CONFIG=${config} ${signage}/bin/signage
+    '')
+    firefox foot wayvnc
+    vim rxvt-unicode-unwrapped.terminfo
+
+    alacritty foot
+    wayland glib dracula-theme gnome3.adwaita-icon-theme
+    swaylock swayidle grim slurp wl-clipboard bemenu mako
+  ];
+
+  services.openssh.enable = true;
+
+  system.stateVersion = "22.05"; # Did you read the comment?
+}
