# RPi4 as TV kiosk.

{ config, pkgs, workspace, ... }:

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";

  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} ${workspace.hswaw.signage.prod}/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?
}
