at 23.11-pre 1.6 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 cfg = config.programs.dconf; 7 cfgDir = pkgs.symlinkJoin { 8 name = "dconf-system-config"; 9 paths = map (x: "${x}/etc/dconf") cfg.packages; 10 postBuild = '' 11 mkdir -p $out/profile 12 mkdir -p $out/db 13 '' + ( 14 concatStringsSep "\n" ( 15 mapAttrsToList ( 16 name: path: '' 17 ln -s ${path} $out/profile/${name} 18 '' 19 ) cfg.profiles 20 ) 21 ) + '' 22 ${pkgs.dconf}/bin/dconf update $out/db 23 ''; 24 }; 25in 26{ 27 ###### interface 28 29 options = { 30 programs.dconf = { 31 enable = mkEnableOption (lib.mdDoc "dconf"); 32 33 profiles = mkOption { 34 type = types.attrsOf types.path; 35 default = {}; 36 description = lib.mdDoc "Set of dconf profile files, installed at {file}`/etc/dconf/profiles/«name»`."; 37 internal = true; 38 }; 39 40 packages = mkOption { 41 type = types.listOf types.package; 42 default = []; 43 description = lib.mdDoc "A list of packages which provide dconf profiles and databases in {file}`/etc/dconf`."; 44 }; 45 }; 46 }; 47 48 ###### implementation 49 50 config = mkIf (cfg.profiles != {} || cfg.enable) { 51 environment.etc.dconf = mkIf (cfg.profiles != {} || cfg.packages != []) { 52 source = cfgDir; 53 }; 54 55 services.dbus.packages = [ pkgs.dconf ]; 56 57 systemd.packages = [ pkgs.dconf ]; 58 59 # For dconf executable 60 environment.systemPackages = [ pkgs.dconf ]; 61 62 # Needed for unwrapped applications 63 environment.sessionVariables.GIO_EXTRA_MODULES = mkIf cfg.enable [ "${pkgs.dconf.lib}/lib/gio/modules" ]; 64 }; 65 66}