config

NixOS config
Log | Files | Refs | README | LICENSE

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 }