plasma.nix (2005B) - Raw
1 # thanks k900 2 { 3 config, 4 lib, 5 pkgs, 6 ... 7 }: 8 let 9 cfg = config.mj.plasma; 10 11 setValue = 12 v: 13 let 14 setValueArgs = ty: vs: "--type ${ty} ${lib.escapeShellArg vs}"; 15 in 16 if builtins.isBool v then 17 setValueArgs "bool" (if v then "true" else "false") 18 else 19 setValueArgs "str" (builtins.toString v); 20 21 pathToArgs = 22 path: 23 let 24 groupArg = item: "--group ${lib.escapeShellArg item}"; 25 groupArgs = builtins.map groupArg path; 26 in 27 groupArgs; 28 29 entryToArgs = 30 { path, value }: 31 let 32 file = builtins.head path; 33 subpath = builtins.tail path; 34 groups = lib.lists.init subpath; 35 name = lib.lists.last subpath; 36 37 fileArg = "--file ${lib.escapeShellArg file}"; 38 pathArgs = pathToArgs groups; 39 keyArg = "--key ${lib.escapeShellArg name}"; 40 valueArg = setValue value; 41 allArgs = pathArgs ++ [ 42 fileArg 43 keyArg 44 valueArg 45 ]; 46 in 47 lib.strings.concatStringsSep " " allArgs; 48 49 flattenAttrs = 50 attrs: pathSoFar: 51 lib.lists.flatten ( 52 lib.attrsets.mapAttrsToList ( 53 name: value: 54 if builtins.isAttrs value then 55 flattenAttrs value (pathSoFar ++ [ name ]) 56 else 57 { 58 path = pathSoFar ++ [ name ]; 59 inherit value; 60 } 61 ) attrs 62 ); 63 64 configToArgs = attrs: builtins.map entryToArgs (flattenAttrs attrs [ ]); 65 66 configToScript = 67 attrs: 68 let 69 args = configToArgs attrs; 70 argToCommand = arg: "${pkgs.kdePackages.kconfig}/bin/kwriteconfig6 ${arg}"; 71 commands = builtins.map argToCommand args; 72 in 73 lib.strings.concatStringsSep "\n" commands; 74 75 writeConfig = attrs: pkgs.writeScript "kconfig-setup" (configToScript attrs); 76 in 77 { 78 options.mj.plasma = { 79 kconfig = lib.mkOption { 80 type = lib.types.attrs; 81 default = { }; 82 }; 83 }; 84 85 config = lib.mkIf (cfg.kconfig != { }) { 86 home.activation.kconfig-setup = "$DRY_RUN_CMD ${writeConfig cfg.kconfig}"; 87 }; 88 }