diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 403e2841839b..de345f0e8bf2 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -4520,6 +4520,12 @@ githubId = 1708810; name = "Daniel Vianna"; }; + dmytrokyrychuk = { + email = "dmytro@kyrych.uk"; + github = "dmytrokyrychuk"; + githubId = 699961; + name = "Dmytro Kyrychuk"; + }; dnr = { email = "dnr@dnr.im"; github = "dnr"; diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 51dece192198..bd97ada9d02b 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -737,6 +737,7 @@ ./services/misc/soft-serve.nix ./services/misc/sonarr.nix ./services/misc/sourcehut + ./services/misc/spice-autorandr.nix ./services/misc/spice-vdagentd.nix ./services/misc/spice-webdavd.nix ./services/misc/ssm-agent.nix diff --git a/nixos/modules/services/misc/spice-autorandr.nix b/nixos/modules/services/misc/spice-autorandr.nix new file mode 100644 index 000000000000..8437441c752a --- /dev/null +++ b/nixos/modules/services/misc/spice-autorandr.nix @@ -0,0 +1,26 @@ +{ config, pkgs, lib, ... }: + +let + cfg = config.services.spice-autorandr; +in +{ + options = { + services.spice-autorandr = { + enable = lib.mkEnableOption (lib.mdDoc "spice-autorandr service that will automatically resize display to match SPICE client window size."); + package = lib.mkPackageOptionMD pkgs "spice-autorandr" { }; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ cfg.package ]; + + systemd.user.services.spice-autorandr = { + wantedBy = [ "default.target" ]; + after = [ "spice-vdagentd.service" ]; + serviceConfig = { + ExecStart = "${cfg.package}/bin/spice-autorandr"; + Restart = "on-failure"; + }; + }; + }; +} diff --git a/pkgs/by-name/sp/spice-autorandr/package.nix b/pkgs/by-name/sp/spice-autorandr/package.nix new file mode 100644 index 000000000000..e79f4cb18bd9 --- /dev/null +++ b/pkgs/by-name/sp/spice-autorandr/package.nix @@ -0,0 +1,50 @@ +{ lib +, stdenv +, fetchFromGitHub +, pkg-config +, autoreconfHook +, libX11 +, libXrandr +}: + +stdenv.mkDerivation { + pname = "spice-autorandr"; + version = "0.0.2"; + + src = fetchFromGitHub { + owner = "seife"; + repo = "spice-autorandr"; + rev = "0f61dc921b638761ee106b5891384c6348820b26"; + hash = "sha256-eBvzalWT3xI8+uNns0/ZyRes91ePpj0beKb8UBVqo0E="; + }; + + nativeBuildInputs = [ autoreconfHook pkg-config ]; + buildInputs = [ libX11 libXrandr ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp $pname $out/bin/ + + runHook postInstall + ''; + + meta = { + description = "Automatically adjust the client window resolution in Linux KVM guests using the SPICE driver."; + longDescription = '' + Some desktop environments update the display resolution automatically, + this package is only useful when running without a DE or with a DE that + does not update display resolution automatically. + + This package relies on `spice-vdagent` running an updating the xrandr modes. Enable + `spice-vdagent` by adding `services.spice-autorandr.enable = true` to your `configuration.nix`. + ''; + homepage = "https://github.com/seife/spice-autorandr"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ + dmytrokyrychuk + ]; + platforms = [ "x86_64-linux" ]; + }; +}