{
  pkgs,
  config,
  lib,
  ...
}:
with lib;
let
  cfg = config.eboskma.services.wayvnc;

  wayvncArgs = builtins.concatStringsSep " " (
    (lib.optional cfg.gpuAcceleration "--gpu") ++ [ cfg.listenAddress ]
  );
in
{
  options.eboskma.services.wayvnc = {
    enable = mkEnableOption "wayvnc";
    listenAddress = mkOption {
      description = "Bind wayvnc to this address";
      type = types.str;
      default = "0.0.0.0";
    };
    gpuAcceleration = mkEnableOption "GPU Accelerated encoding";
  };

  config = mkIf cfg.enable {

    # [Unit]
    # Description=A VNC server for wlroots based Wayland compositors
    # Requires=sway.service
    # After=sway.service

    # [Service]
    # Type=simple
    # ExecStart=/usr/bin/wayvnc
    # Restart=on-failure
    # RestartSec=1
    # TimeoutStopSec=10

    # [Install]
    # WantedBy=multi-user.target

    systemd.user = {
      services = {
        wayvnc = {
          Unit = {
            Description = "A VNC server for wlroots based Wayland compositors";
            Requires = [ "sway-session.target" ];
            After = [ "sway-session.target" ];
          };

          Service = {
            ExecStart = "${pkgs.wayvnc}/bin/wayvnc ${wayvncArgs}";
            Restart = "on-failure";
            RestartSec = 1;
            TimeoutStopSec = 10;
          };

          Install = {
            WantedBy = [ "multi-user.target" ];
          };
        };
      };
    };
  };
}