28 lines
794 B
Nix
28 lines
794 B
Nix
{ lib, writeShellScriptBin, xrandr }:
|
|
let
|
|
inherit (builtins) getAttr hasAttr isAttrs concatStringsSep;
|
|
inherit (lib) assertMsg lists escapeShellArgs getExe;
|
|
inherit (lib.attrsets) mapAttrsToList;
|
|
inherit (lib.cli) toGNUCommandLine;
|
|
in
|
|
name: config:
|
|
assert assertMsg (isAttrs config)
|
|
"config should be an attrs, found ${lib.typeOf config}";
|
|
let
|
|
isPrimary = config:
|
|
(hasAttr "primary" config) && (getAttr "primary" config);
|
|
|
|
getArgList = output: config:
|
|
(escapeShellArgs (lists.flatten [
|
|
(toGNUCommandLine { } { inherit output; })
|
|
(lists.optional (isPrimary config) "--primary")
|
|
(toGNUCommandLine { } config)
|
|
]));
|
|
|
|
args = mapAttrsToList getArgList config;
|
|
in
|
|
writeShellScriptBin name ''
|
|
${getExe xrandr} \
|
|
${concatStringsSep " \\\n " args}
|
|
''
|