{ config, lib, pkgs, ... }: let cfg = { enable = config.services.xserver.enable && config.tv.Xresources != {}; user = config.krebs.build.user; }; local.types.Xresources = lib.types.attrsOf lib.types.str; mapAttrNames = f: lib.mapAttrs' (name: lib.nameValuePair (f name)); mapAttrValues = f: lib.mapAttrs (_: f); in { options.tv.Xresources = lib.mkOption { default = {}; type = lib.types.attrsOf lib.types.str; }; config = { nixpkgs.overlays = lib.singleton (self: super: { tv = super.tv or {} // { Xresources = self.writeText "Xresources" (lib.concatStrings (lib.mapAttrsToList (name: value: /* xdefaults */ '' ${name}: ${value} '') config.tv.Xresources)); }; }); systemd.services.${if cfg.enable then "Xresources" else null} = { wantedBy = [ "graphical.target" ]; after = [ "xmonad.service" ]; environment = { DISPLAY = ":${toString config.services.xserver.display}"; }; serviceConfig = { ExecStart = "${pkgs.xorg.xrdb}/bin/xrdb ${pkgs.tv.Xresources}"; RemainAfterExit = true; SyslogIdentifier = "Xresources"; Type = "oneshot"; User = cfg.user.name; WorkingDirectory = cfg.user.home; }; }; }; }