hswaw/machines: add tv2

Change-Id: I657c316bcc663c79b6886d5843b9de5cbf17f1c3
Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1333
Reviewed-by: informatic <informatic@hackerspace.pl>
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?
+}