dconf: add module
This module allows unified configuration of dconf settings.
This commit is contained in:
parent
235a6617c4
commit
b2cc186d22
83
modules/misc/dconf.nix
Normal file
83
modules/misc/dconf.nix
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
cfg = config.dconf;
|
||||||
|
dag = config.lib.dag;
|
||||||
|
|
||||||
|
toDconfIni = generators.toINI { mkKeyValue = mkIniKeyValue; };
|
||||||
|
|
||||||
|
mkIniKeyValue = key: value:
|
||||||
|
let
|
||||||
|
tweakVal = v:
|
||||||
|
if isString v then "'${v}'"
|
||||||
|
else if isList v then "[" + concatMapStringsSep "," tweakVal v + "]"
|
||||||
|
else if isBool v then (if v then "true" else "false")
|
||||||
|
else toString v;
|
||||||
|
in
|
||||||
|
"${key}=${tweakVal value}";
|
||||||
|
|
||||||
|
primitive = with types; either bool (either int str);
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
meta.maintainers = [ maintainers.gnidorah maintainers.rycee ];
|
||||||
|
|
||||||
|
options = {
|
||||||
|
dconf = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
visible = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable dconf settings.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = mkOption {
|
||||||
|
type = with types;
|
||||||
|
attrsOf (attrsOf (either primitive (listOf primitive)));
|
||||||
|
default = {};
|
||||||
|
example = literalExample ''
|
||||||
|
{
|
||||||
|
"org/gnome/calculator" = {
|
||||||
|
button-mode = "programming";
|
||||||
|
show-thousands = true;
|
||||||
|
base = 10;
|
||||||
|
word-size = 64;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Settings to write to the dconf configuration system.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf (cfg.enable && cfg.settings != {}) {
|
||||||
|
home.activation.dconfSettings = dag.entryAfter ["installPackages"] (
|
||||||
|
let
|
||||||
|
iniFile = pkgs.writeText "hm-dconf.ini" (toDconfIni cfg.settings);
|
||||||
|
in
|
||||||
|
''
|
||||||
|
if [[ -v DBUS_SESSION_BUS_ADDRESS ]]; then
|
||||||
|
DCONF_DBUS_RUN_SESSION=""
|
||||||
|
else
|
||||||
|
DCONF_DBUS_RUN_SESSION="${pkgs.dbus}/bin/dbus-run-session"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -v DRY_RUN ]]; then
|
||||||
|
echo $DCONF_DBUS_RUN_SESSION ${pkgs.gnome3.dconf}/bin/dconf load / "<" ${iniFile}
|
||||||
|
else
|
||||||
|
$DCONF_DBUS_RUN_SESSION ${pkgs.gnome3.dconf}/bin/dconf load / < ${iniFile}
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset DCONF_DBUS_RUN_SESSION
|
||||||
|
''
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
|
@ -904,6 +904,13 @@ in
|
||||||
A new module is available: 'programs.jq'.
|
A new module is available: 'programs.jq'.
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
time = "2018-12-24T16:26:16+00:00";
|
||||||
|
message = ''
|
||||||
|
A new module is available: 'dconf'.
|
||||||
|
'';
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ let
|
||||||
(loadModule ./files.nix { })
|
(loadModule ./files.nix { })
|
||||||
(loadModule ./home-environment.nix { })
|
(loadModule ./home-environment.nix { })
|
||||||
(loadModule ./manual.nix { })
|
(loadModule ./manual.nix { })
|
||||||
|
(loadModule ./misc/dconf.nix { })
|
||||||
(loadModule ./misc/fontconfig.nix { })
|
(loadModule ./misc/fontconfig.nix { })
|
||||||
(loadModule ./misc/gtk.nix { })
|
(loadModule ./misc/gtk.nix { })
|
||||||
(loadModule ./misc/lib.nix { })
|
(loadModule ./misc/lib.nix { })
|
||||||
|
|
Loading…
Reference in a new issue