{ lib, ... }:
let
  inherit (lib.lists) singleton;

  peripheralsLinux =
    { pkgs, ... }:
    {
      hjem.extraModules = singleton {
        packages = [ pkgs.vial ];
      };

      services.libinput = {
        enable = true;
        mouse.leftHanded = true;
        touchpad.leftHanded = true;
      };

      # Udev rule for Vial keyboard access
      services.udev.extraRules = # udev
        ''
          # Universal Vial rule.
          KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{serial}=="*vial:f64c2b3c*", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
          # Specific rule for Corne v4.
          KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="4653", ATTRS{idProduct}=="0004", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
        '';
    };

  peripheralsDarwin =
    { pkgs, ... }:
    {
      hjem.extraModules = singleton {
        packages = [ pkgs.karabiner-elements ];
      };
    };
in
{
  flake.modules.nixos.peripherals = peripheralsLinux;
  flake.modules.darwin.peripherals = peripheralsDarwin;
}