Commit 63fce4ce authored by Thiago Kenji Okada's avatar Thiago Kenji Okada
Browse files

nixos/sway: add enableRealtime option

This option wraps the `sway` binary to allow it to request realtime
scheduling (SCHED_RR). This allow for possible lower latency, specially
when the system is under high load.

Available since Sway 1.8. See:
- https://github.com/swaywm/sway/pull/6994
- https://github.com/swaywm/sway/releases/tag/1.8
parent 2f4249e4
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -42,6 +42,11 @@ in {
      <https://github.com/swaywm/sway/wiki> and
      "man 5 sway" for more information'');

    enableRealtime = mkEnableOption (lib.mdDoc ''
      add CAP_SYS_NICE capability on `sway` binary for realtime scheduling
      privileges. This may improve latency and reduce stuttering, specially in
      high load scenarios'') // { default = true; };

    package = mkOption {
      type = with types; nullOr package;
      default = defaultSwayPackage;
@@ -149,6 +154,14 @@ in {
            "sway/config".source = mkOptionDefault "${cfg.package}/etc/sway/config";
          };
        };
        security.wrappers = mkIf (cfg.enableRealtime && cfg.package != null) {
          sway = {
            owner = "root";
            group = "root";
            source = "${cfg.package}/bin/sway";
            capabilities = "cap_sys_nice+ep";
          };
        };
        # To make a Sway session available if a display manager like SDDM is enabled:
        services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; }
      (import ./wayland-session.nix { inherit lib pkgs; })