let concat = strings: builtins.concatStringsSep " " strings; displays = let primary = "DP-2"; secondary = "HDMI-0"; in { inherit primary secondary; xrandr = concat [ "--output ${primary}" "--mode 1920x1080" "--pos 0x0" "--rate 144" "--primary" "" "--output ${secondary}" "--mode 1920x1080" "--pos 1920x0" "--rate 144" ]; }; in { inherit displays; nixosModule = { pkgs, config, lib ? pkgs.lib, ... }: let wacom.src = let xsetwacom = "${pkgs.xf86_input_wacom}/bin/xsetwacom"; awk = lib.getExe pkgs.gawk; in '' #!/bin/sh # Wait for X socket for i in $(seq 30); do [ -S /tmp/.X11-unix/X0 ] && break sleep 0.5 done # Just to be sure that the displays are ready... sleep 5 export DISPLAY=:0 export XAUTHORITY="$HOME/.Xauthority" for i in $(seq 10); do if ${xsetwacom} list devices | grep -q Wacom; then break fi sleep 1 done stylus=$(${xsetwacom} list devices | ${awk} -F' \t' '/stylus/{print $1}') if [ -z "$${stylus}" ]; then exit 0 fi ${xsetwacom} set "$stylus" MapToOutput HEAD-0 ''; in { services.xserver.videoDrivers = [ "nvidia" ]; services.xserver.wacom.enable = true; hardware.nvidia = { modesetting.enable = true; open = true; nvidiaSettings = true; package = config.boot.kernelPackages.nvidiaPackages.stable; }; systemd.user.services.wacom = { enable = true; description = "Configure my Wacom (One) tablet"; wantedBy = [ "default.target" ]; after = [ "graphical-session.target" ]; serviceConfig = { Type = "oneshot"; ExecStart = pkgs.writeShellScript "wacom.sh" wacom.src; }; }; services.udev.extraRules = '' ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="056a", TAG+="systemd", ENV{SYSTEMD_USER_WANTS}+="wacom.service" ''; }; homeManager = { programs.git.signing = { signByDefault = true; key = "60649DFDEAACD73D"; }; }; }