mirror of
https://github.com/nix-community/home-manager
synced 2024-11-24 03:59:46 +01:00
lib: use generators from Nixpkgs
(cherry picked from commit 61042c7606
)
This commit is contained in:
parent
4b09df1809
commit
21a4dedd6f
5 changed files with 9 additions and 102 deletions
|
@ -1,93 +0,0 @@
|
||||||
/* Functions that generate widespread file
|
|
||||||
* formats from nix data structures.
|
|
||||||
*
|
|
||||||
* They all follow a similar interface:
|
|
||||||
* generator { config-attrs } data
|
|
||||||
*
|
|
||||||
* Tests can be found in ./tests.nix
|
|
||||||
* Documentation in the manual, #sec-generators
|
|
||||||
*/
|
|
||||||
with import <nixpkgs/lib/trivial.nix>;
|
|
||||||
let
|
|
||||||
libStr = import <nixpkgs/lib/strings.nix>;
|
|
||||||
libAttr = import <nixpkgs/lib/attrsets.nix>;
|
|
||||||
|
|
||||||
flipMapAttrs = flip libAttr.mapAttrs;
|
|
||||||
in
|
|
||||||
|
|
||||||
rec {
|
|
||||||
|
|
||||||
/* Generate a line of key k and value v, separated by
|
|
||||||
* character sep. If sep appears in k, it is escaped.
|
|
||||||
* Helper for synaxes with different separators.
|
|
||||||
*
|
|
||||||
* mkKeyValueDefault ":" "f:oo" "bar"
|
|
||||||
* > "f\:oo:bar"
|
|
||||||
*/
|
|
||||||
mkKeyValueDefault = sep: k: v:
|
|
||||||
"${libStr.escape [sep] k}${sep}${toString v}";
|
|
||||||
|
|
||||||
|
|
||||||
/* Generate a key-value-style config file from an attrset.
|
|
||||||
*
|
|
||||||
* mkKeyValue is the same as in toINI.
|
|
||||||
*/
|
|
||||||
toKeyValue = {
|
|
||||||
mkKeyValue ? mkKeyValueDefault "="
|
|
||||||
}: attrs:
|
|
||||||
let mkLine = k: v: mkKeyValue k v + "\n";
|
|
||||||
in libStr.concatStrings (libAttr.mapAttrsToList mkLine attrs);
|
|
||||||
|
|
||||||
|
|
||||||
/* Generate an INI-style config file from an
|
|
||||||
* attrset of sections to an attrset of key-value pairs.
|
|
||||||
*
|
|
||||||
* generators.toINI {} {
|
|
||||||
* foo = { hi = "${pkgs.hello}"; ciao = "bar"; };
|
|
||||||
* baz = { "also, integers" = 42; };
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
*> [baz]
|
|
||||||
*> also, integers=42
|
|
||||||
*>
|
|
||||||
*> [foo]
|
|
||||||
*> ciao=bar
|
|
||||||
*> hi=/nix/store/y93qql1p5ggfnaqjjqhxcw0vqw95rlz0-hello-2.10
|
|
||||||
*
|
|
||||||
* The mk* configuration attributes can generically change
|
|
||||||
* the way sections and key-value strings are generated.
|
|
||||||
*
|
|
||||||
* For more examples see the test cases in ./tests.nix.
|
|
||||||
*/
|
|
||||||
toINI = {
|
|
||||||
# apply transformations (e.g. escapes) to section names
|
|
||||||
mkSectionName ? (name: libStr.escape [ "[" "]" ] name),
|
|
||||||
# format a setting line from key and value
|
|
||||||
mkKeyValue ? mkKeyValueDefault "="
|
|
||||||
}: attrsOfAttrs:
|
|
||||||
let
|
|
||||||
# map function to string for each key val
|
|
||||||
mapAttrsToStringsSep = sep: mapFn: attrs:
|
|
||||||
libStr.concatStringsSep sep
|
|
||||||
(libAttr.mapAttrsToList mapFn attrs);
|
|
||||||
mkSection = sectName: sectValues: ''
|
|
||||||
[${mkSectionName sectName}]
|
|
||||||
'' + toKeyValue { inherit mkKeyValue; } sectValues;
|
|
||||||
in
|
|
||||||
# map input to ini sections
|
|
||||||
mapAttrsToStringsSep "\n" mkSection attrsOfAttrs;
|
|
||||||
|
|
||||||
|
|
||||||
/* Generates JSON from an arbitrary (non-function) value.
|
|
||||||
* For more information see the documentation of the builtin.
|
|
||||||
*/
|
|
||||||
toJSON = {}: builtins.toJSON;
|
|
||||||
|
|
||||||
|
|
||||||
/* YAML has been a strict superset of JSON since 1.2, so we
|
|
||||||
* use toJSON. Before it only had a few differences referring
|
|
||||||
* to implicit typing rules, so it should work with older
|
|
||||||
* parsers as well.
|
|
||||||
*/
|
|
||||||
toYAML = {}@args: toJSON args;
|
|
||||||
}
|
|
|
@ -8,7 +8,7 @@ let
|
||||||
cfg2 = config.gtk.gtk2;
|
cfg2 = config.gtk.gtk2;
|
||||||
cfg3 = config.gtk.gtk3;
|
cfg3 = config.gtk.gtk3;
|
||||||
|
|
||||||
toGtk3Ini = (import ../lib/generators.nix).toINI {
|
toGtk3Ini = generators.toINI {
|
||||||
mkKeyValue = key: value:
|
mkKeyValue = key: value:
|
||||||
let
|
let
|
||||||
value' =
|
value' =
|
||||||
|
|
|
@ -6,8 +6,6 @@ let
|
||||||
|
|
||||||
cfg = config.programs.git;
|
cfg = config.programs.git;
|
||||||
|
|
||||||
toINI = (import ../lib/generators.nix).toINI {};
|
|
||||||
|
|
||||||
signModule = types.submodule {
|
signModule = types.submodule {
|
||||||
options = {
|
options = {
|
||||||
key = mkOption {
|
key = mkOption {
|
||||||
|
@ -93,7 +91,8 @@ in
|
||||||
{
|
{
|
||||||
home.packages = [ cfg.package ];
|
home.packages = [ cfg.package ];
|
||||||
|
|
||||||
home.file.".gitconfig".text = toINI ini + "\n" + cfg.extraConfig;
|
home.file.".gitconfig".text =
|
||||||
|
generators.toINI {} ini + "\n" + cfg.extraConfig;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,7 +90,7 @@ let
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
toINI = (import ../lib/generators.nix).toINI { mkKeyValue = mkIniKeyValue; };
|
toDconfIni = generators.toINI { mkKeyValue = mkIniKeyValue; };
|
||||||
|
|
||||||
mkIniKeyValue = key: value:
|
mkIniKeyValue = key: value:
|
||||||
let
|
let
|
||||||
|
@ -181,14 +181,15 @@ in
|
||||||
# The dconf service needs to be installed and prepared.
|
# The dconf service needs to be installed and prepared.
|
||||||
home.activation.gnomeTerminal = dagEntryAfter ["installPackages"] (
|
home.activation.gnomeTerminal = dagEntryAfter ["installPackages"] (
|
||||||
let
|
let
|
||||||
sf = pkgs.writeText "gnome-terminal.ini" (toINI (buildIniSet cfg));
|
iniText = toDconfIni (buildIniSet cfg);
|
||||||
|
iniFile = pkgs.writeText "gnome-terminal.ini" iniText;
|
||||||
dconfPath = "/org/gnome/terminal/legacy/";
|
dconfPath = "/org/gnome/terminal/legacy/";
|
||||||
in
|
in
|
||||||
''
|
''
|
||||||
if [[ -v DRY_RUN ]]; then
|
if [[ -v DRY_RUN ]]; then
|
||||||
echo ${pkgs.gnome3.dconf}/bin/dconf load ${dconfPath} "<" ${sf}
|
echo ${pkgs.gnome3.dconf}/bin/dconf load ${dconfPath} "<" ${iniFile}
|
||||||
else
|
else
|
||||||
${pkgs.gnome3.dconf}/bin/dconf load ${dconfPath} < ${sf}
|
${pkgs.gnome3.dconf}/bin/dconf load ${dconfPath} < ${iniFile}
|
||||||
fi
|
fi
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
|
|
|
@ -12,7 +12,7 @@ let
|
||||||
|| cfg.targets != {}
|
|| cfg.targets != {}
|
||||||
|| cfg.timers != {};
|
|| cfg.timers != {};
|
||||||
|
|
||||||
toSystemdIni = (import lib/generators.nix).toINI {
|
toSystemdIni = generators.toINI {
|
||||||
mkKeyValue = key: value:
|
mkKeyValue = key: value:
|
||||||
let
|
let
|
||||||
value' =
|
value' =
|
||||||
|
|
Loading…
Reference in a new issue