mirror of
https://github.com/nix-community/home-manager.git
synced 2026-06-05 21:02:51 +00:00
`literalExpression` is intended just to signify code that needs to stay a string that gets represented exactly as-is for docs. It has been misused heavily and people get confused repeatedly on when or not to use it because of the rampant misuse.
100 lines
2.2 KiB
Nix
100 lines
2.2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
|
|
let
|
|
inherit (lib)
|
|
mkOption
|
|
types
|
|
;
|
|
|
|
cfg = config.services.xsettingsd;
|
|
|
|
renderSettings = settings: lib.concatStrings (lib.mapAttrsToList renderSetting settings);
|
|
|
|
renderSetting = key: value: ''
|
|
${key} ${renderValue value}
|
|
'';
|
|
|
|
renderValue =
|
|
value:
|
|
{
|
|
int = toString value;
|
|
bool = if value then "1" else "0";
|
|
string = ''"${value}"'';
|
|
}
|
|
.${builtins.typeOf value};
|
|
|
|
in
|
|
{
|
|
meta.maintainers = [ lib.maintainers.imalison ];
|
|
|
|
options = {
|
|
services.xsettingsd = {
|
|
enable = lib.mkEnableOption "xsettingsd";
|
|
|
|
package = lib.mkPackageOption pkgs "xsettingsd" { };
|
|
|
|
settings = mkOption {
|
|
type =
|
|
with types;
|
|
attrsOf (oneOf [
|
|
bool
|
|
int
|
|
str
|
|
]);
|
|
default = { };
|
|
example = {
|
|
"Net/ThemeName" = "Numix";
|
|
"Xft/Antialias" = true;
|
|
"Xft/Hinting" = true;
|
|
"Xft/RGBA" = "rgb";
|
|
};
|
|
description = ''
|
|
Xsettingsd options for configuration file. See
|
|
<https://github.com/derat/xsettingsd/wiki/Settings>
|
|
for documentation on these values.
|
|
'';
|
|
};
|
|
|
|
configFile = mkOption {
|
|
type = types.nullOr types.package;
|
|
internal = true;
|
|
readOnly = true;
|
|
default =
|
|
if cfg.settings == { } then
|
|
null
|
|
else
|
|
pkgs.writeText "xsettingsd.conf" (renderSettings cfg.settings);
|
|
};
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
assertions = [
|
|
(lib.hm.assertions.assertPlatform "services.xsettingsd" pkgs lib.platforms.linux)
|
|
];
|
|
|
|
systemd.user.services.xsettingsd = {
|
|
Unit = {
|
|
Description = "xsettingsd";
|
|
After = [ "graphical-session-pre.target" ];
|
|
PartOf = [ "graphical-session.target" ];
|
|
};
|
|
|
|
Install.WantedBy = [ "graphical-session.target" ];
|
|
|
|
Service = {
|
|
Environment = [ "PATH=${config.home.profileDirectory}/bin" ];
|
|
ExecStart =
|
|
"${cfg.package}/bin/xsettingsd"
|
|
+ lib.optionalString (cfg.configFile != null) " -c ${lib.escapeShellArg cfg.configFile}";
|
|
Restart = "on-abort";
|
|
};
|
|
};
|
|
};
|
|
}
|