mirror of
https://github.com/nix-community/home-manager
synced 2024-12-22 09:49:47 +01:00
xfconf: add module
This commit is contained in:
parent
04e844090e
commit
916811c8f9
4 changed files with 113 additions and 0 deletions
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
|
@ -59,6 +59,8 @@ Makefile @thiagokokada
|
|||
/tests/modules/misc/xdg/desktop-full-expected.desktop @cwyc
|
||||
/tests/modules/misc/xdg/desktop-min-expected.desktop @cwyc
|
||||
|
||||
/modules/misc/xfconf.nix @chuangzhu
|
||||
|
||||
/modules/programs/aerc.nix @lukasngl
|
||||
/modules/programs/aerc-accounts.nix @lukasngl
|
||||
/tests/modules/programs/aerc @lukasngl
|
||||
|
|
|
@ -807,6 +807,14 @@ in
|
|||
A new module is available: 'programs.oh-my-posh'.
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
time = "2022-11-02T10:56:14+00:00";
|
||||
condition = hostPlatform.isLinux;
|
||||
message = ''
|
||||
A new module is available: 'xfconf'.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
102
modules/misc/xfconf.nix
Normal file
102
modules/misc/xfconf.nix
Normal file
|
@ -0,0 +1,102 @@
|
|||
{ 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);
|
||||
};
|
||||
}
|
|
@ -43,6 +43,7 @@ let
|
|||
./misc/xdg-system-dirs.nix
|
||||
./misc/xdg-user-dirs.nix
|
||||
./misc/xdg.nix
|
||||
./misc/xfconf.nix
|
||||
./programs/abook.nix
|
||||
./programs/aerc.nix
|
||||
./programs/afew.nix
|
||||
|
|
Loading…
Reference in a new issue