103 lines
2.6 KiB
Nix
103 lines
2.6 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
|
||
|
with lib;
|
||
|
|
||
|
let
|
||
|
|
||
|
cfg = config.xfconf;
|
||
|
|
||
|
withType = v:
|
||
|
if builtins.isBool v then [
|
||
|
"-t"
|
||
|
"bool"
|
||
|
"-s"
|
||
|
(if v then "true" else "false")
|
||
|
] else if builtins.isInt v then [
|
||
|
"-t"
|
||
|
"int"
|
||
|
"-s"
|
||
|
(toString v)
|
||
|
] else if builtins.isFloat v then [
|
||
|
"-t"
|
||
|
"double"
|
||
|
"-s"
|
||
|
(toString v)
|
||
|
] else if builtins.isString v then [
|
||
|
"-t"
|
||
|
"string"
|
||
|
"-s"
|
||
|
v
|
||
|
] else if builtins.isList v then
|
||
|
[ "-a" ] ++ concatMap withType v
|
||
|
else
|
||
|
throw "unexpected xfconf type: ${builtins.typeOf v}";
|
||
|
|
||
|
in {
|
||
|
meta.maintainers = [ maintainers.chuangzhu ];
|
||
|
|
||
|
options.xfconf = {
|
||
|
enable = mkOption {
|
||
|
type = types.bool;
|
||
|
default = true;
|
||
|
visible = false;
|
||
|
description = ''
|
||
|
Whether to enable Xfconf settings.
|
||
|
</para><para>
|
||
|
Note, if you use NixOS then you must add
|
||
|
<code>programs.xfconf.enable = true</code>
|
||
|
to your system configuration. Otherwise you will see a systemd error
|
||
|
message when your configuration is activated.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
settings = mkOption {
|
||
|
type = with types;
|
||
|
attrsOf (attrsOf (oneOf [
|
||
|
bool
|
||
|
int
|
||
|
float
|
||
|
str
|
||
|
(listOf (oneOf [ bool int float str ]))
|
||
|
])) // {
|
||
|
description = "xfconf settings";
|
||
|
};
|
||
|
default = { };
|
||
|
example = literalExpression ''
|
||
|
{
|
||
|
xfce4-session = {
|
||
|
"startup/ssh-agent/enabled" = false;
|
||
|
"general/LockCommand" = "''${pkgs.lightdm}/bin/dm-tool lock";
|
||
|
};
|
||
|
xfce4-desktop = {
|
||
|
"backdrop/screen0/monitorLVDS-1/workspace0/last-image" =
|
||
|
"''${pkgs.nixos-artwork.wallpapers.stripes-logo.gnomeFilePath}";
|
||
|
};
|
||
|
}
|
||
|
'';
|
||
|
description = ''
|
||
|
Settings to write to the Xfconf configuration system.
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = mkIf (cfg.enable && cfg.settings != { }) {
|
||
|
assertions =
|
||
|
[ (hm.assertions.assertPlatform "xfconf" pkgs platforms.linux) ];
|
||
|
|
||
|
home.activation.xfconfSettings = hm.dag.entryAfter [ "installPackages" ]
|
||
|
(let
|
||
|
mkCommand = channel: property: value: ''
|
||
|
$DRY_RUN_CMD ${pkgs.xfce.xfconf}/bin/xfconf-query \
|
||
|
${
|
||
|
escapeShellArgs
|
||
|
([ "-n" "-c" channel "-p" "/${property}" ] ++ withType value)
|
||
|
}
|
||
|
'';
|
||
|
|
||
|
commands = mapAttrsToList
|
||
|
(channel: properties: mapAttrsToList (mkCommand channel) properties)
|
||
|
cfg.settings;
|
||
|
in concatMapStrings concatStrings commands);
|
||
|
};
|
||
|
}
|