# 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?
}
