mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-02-07 06:19:00 +00:00
wrapper-manager/dconf: add env-wide dconf options
This commit is contained in:
parent
496527e76b
commit
8f6c4a7a46
@ -8,9 +8,11 @@
|
|||||||
# upstream and it may be here for the rest of time.
|
# upstream and it may be here for the rest of time.
|
||||||
#
|
#
|
||||||
# In other words, dconf is just not built for this case.
|
# In other words, dconf is just not built for this case.
|
||||||
{ lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
cfg = config.dconf;
|
||||||
|
|
||||||
settingsFormat = {
|
settingsFormat = {
|
||||||
type = with lib.types;
|
type = with lib.types;
|
||||||
let
|
let
|
||||||
@ -29,8 +31,72 @@ let
|
|||||||
generate = name: value:
|
generate = name: value:
|
||||||
pkgs.writeTextDir "/dconf/${name}" (lib.generators.toDconfINI value);
|
pkgs.writeTextDir "/dconf/${name}" (lib.generators.toDconfINI value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
dconfModuleFactory = { isGlobal ? false }: {
|
||||||
|
enable = lib.mkEnableOption "configuration with dconf" // lib.optionalAttrs (!isGlobal) {
|
||||||
|
default = cfg.enable;
|
||||||
|
};
|
||||||
|
|
||||||
|
package = lib.mkPackageOption pkgs "dconf" { } // lib.optionalAttrs (!isGlobal) {
|
||||||
|
default = cfg.package;
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = lib.mkOption {
|
||||||
|
type = settingsFormat.type;
|
||||||
|
default = { };
|
||||||
|
description = if isGlobal then ''
|
||||||
|
Global settings to be applied per dconf-enabled wrapper.
|
||||||
|
'' else ''
|
||||||
|
The settings of the dconf database that the wrapper uses.
|
||||||
|
'';
|
||||||
|
example = lib.literalExpression ''
|
||||||
|
{
|
||||||
|
"org/gnome/nautilus/list-view".use-tree-view = true;
|
||||||
|
"org/gnome/nautilus/preferences".show-create-link = true;
|
||||||
|
"org/gtk/settings/file-chooser" = {
|
||||||
|
sort-directories-first = true;
|
||||||
|
show-hidden = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
keyfiles = lib.mkOption {
|
||||||
|
type = with lib.types; listOf path;
|
||||||
|
description = if isGlobal then ''
|
||||||
|
Global list of keyfiles to be included to each dconf-enabled wrapper.
|
||||||
|
'' else ''
|
||||||
|
Additional list of keyfiles to be included as part of the dconf
|
||||||
|
database.
|
||||||
|
'';
|
||||||
|
default = if isGlobal then [ ] else [ "user-db" ];
|
||||||
|
example = lib.literalExpression ''
|
||||||
|
[
|
||||||
|
./config/dconf/90-extra-settings.conf
|
||||||
|
]
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
profile = lib.mkOption {
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = if isGlobal then ''
|
||||||
|
Global list of dconf database that will be used for each dconf-enabled
|
||||||
|
wrappers.
|
||||||
|
'' else ''
|
||||||
|
A list of dconf databases that will be used for the main dconf
|
||||||
|
profile of the dconf-configured wrapper.
|
||||||
|
'';
|
||||||
|
default = [ "user-db:user" ];
|
||||||
|
defaultText = ''
|
||||||
|
"user-db:user" as the writeable database alongside the generated
|
||||||
|
database file from our settings.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
options.dconf = dconfModuleFactory { isGlobal = true; };
|
||||||
|
|
||||||
options.wrappers =
|
options.wrappers =
|
||||||
let
|
let
|
||||||
dconfSubmodule = { config, lib, name, ... }: let
|
dconfSubmodule = { config, lib, name, ... }: let
|
||||||
@ -56,56 +122,7 @@ in
|
|||||||
dconf compile ${builtins.placeholder "out"} "${keyfilesDir}"
|
dconf compile ${builtins.placeholder "out"} "${keyfilesDir}"
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
options.dconf = {
|
options.dconf = dconfModuleFactory { isGlobal = false; } // {
|
||||||
enable = lib.mkEnableOption "configuration with dconf";
|
|
||||||
|
|
||||||
package = lib.mkPackageOption pkgs "dconf" { };
|
|
||||||
|
|
||||||
settings = lib.mkOption {
|
|
||||||
type = settingsFormat.type;
|
|
||||||
default = { };
|
|
||||||
description = ''
|
|
||||||
The settings of the dconf database that the wrapper uses.
|
|
||||||
'';
|
|
||||||
example = lib.literalExpression ''
|
|
||||||
{
|
|
||||||
"org/gnome/nautilus/list-view".use-tree-view = true;
|
|
||||||
"org/gnome/nautilus/preferences".show-create-link = true;
|
|
||||||
"org/gtk/settings/file-chooser" = {
|
|
||||||
sort-directories-first = true;
|
|
||||||
show-hidden = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
keyfiles = lib.mkOption {
|
|
||||||
type = with lib.types; listOf path;
|
|
||||||
description = ''
|
|
||||||
Additional list of keyfiles to be included as part of the dconf
|
|
||||||
database.
|
|
||||||
'';
|
|
||||||
default = [ ];
|
|
||||||
example = lib.literalExpression ''
|
|
||||||
[
|
|
||||||
./config/dconf/90-extra-settings.conf
|
|
||||||
]
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
profile = lib.mkOption {
|
|
||||||
type = with lib.types; listOf str;
|
|
||||||
description = ''
|
|
||||||
A list of dconf databases that will be used for the main dconf
|
|
||||||
profile of the dconf-configured wrapper.
|
|
||||||
'';
|
|
||||||
default = [ "user-db:user" "file-db:${dconfSettingsDatabase}" ];
|
|
||||||
defaultText = ''
|
|
||||||
"user-db:user" as the writeable database alongside the generated
|
|
||||||
database file from our settings.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
databaseDrv = lib.mkOption {
|
databaseDrv = lib.mkOption {
|
||||||
type = lib.types.package;
|
type = lib.types.package;
|
||||||
description = ''
|
description = ''
|
||||||
@ -118,7 +135,17 @@ in
|
|||||||
|
|
||||||
config = lib.mkIf submoduleCfg.enable {
|
config = lib.mkIf submoduleCfg.enable {
|
||||||
env.DCONF_PROFILE.value = dconfProfileFile;
|
env.DCONF_PROFILE.value = dconfProfileFile;
|
||||||
dconf.databaseDrv = dconfSettingsDatabase;
|
|
||||||
|
dconf = {
|
||||||
|
profile = lib.mkMerge [
|
||||||
|
cfg.profile
|
||||||
|
|
||||||
|
(lib.mkAfter [ (builtins.toString submoduleCfg.databaseDrv) ])
|
||||||
|
];
|
||||||
|
keyfiles = cfg.keyfiles;
|
||||||
|
settings = cfg.settings;
|
||||||
|
databaseDrv = dconfSettingsDatabase;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
Loading…
Reference in New Issue
Block a user