From 9ed5585cdf093e9215a0000eaf096cfefbce957b Mon Sep 17 00:00:00 2001 From: Peng Lei Date: Mon, 29 Jun 2026 19:42:17 +0800 Subject: [PATCH 1/8] feat(wrapperModulers.stylua): init --- maintainers/default.nix | 6 ++ wrapperModules/s/stylua/module.nix | 113 +++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 wrapperModules/s/stylua/module.nix diff --git a/maintainers/default.nix b/maintainers/default.nix index ed6c2237..f5b21b58 100644 --- a/maintainers/default.nix +++ b/maintainers/default.nix @@ -116,4 +116,10 @@ github = "aliaslion"; githubId = "122117018"; }; + kuppo = { + name = "Peng Lei"; + email = "swk-pl@163.com"; + github = "kuppo"; + githubId = "17398733"; + }; } diff --git a/wrapperModules/s/stylua/module.nix b/wrapperModules/s/stylua/module.nix new file mode 100644 index 00000000..79098098 --- /dev/null +++ b/wrapperModules/s/stylua/module.nix @@ -0,0 +1,113 @@ +{ + wlib, + lib, + config, + pkgs, + ... +}: +{ + imports = [ wlib.modules.default ]; + + options = { + defaultStyle = lib.mkOption { + type = lib.types.attrs; + readOnly = true; + description = '' + Default settings for the `stylua.toml` (read only). + ''; + default = { + syntax = "All"; + column_width = 120; + line_endings = "Unix"; + indent_type = "Tabs"; + indent_width = 4; + quote_style = "AutoPreferDouble"; + call_parentheses = "Always"; + collapse_simple_statement = "Never"; + space_after_function_names = "Never"; + block_newline_gaps = "Never"; + sort_requires = { + enabled = false; + }; + }; + }; + customStyle = lib.mkOption { + type = wlib.types.structuredValueWith { + nullable = false; + typeName = "TOML"; + }; + default = { }; + description = '' + nix configuration for the stylua. + + Check [StyLua options](https://github.com/JohnnyMorganz/StyLua/blob/main/README.md#options). + ''; + example = lib.literalExpression '' + settings = { + call_parentheses = "Always"; + column_width = 100; + collapse_simple_statement = "Always"; + indent_type = "Spaces"; + indent_width = 2; + quote_style = "ForceDouble"; + sort_requires.enabled = true; + }; + ''; + }; + generateCpScript = lib.mkEnableOption '' + generate a copy script. + + The script `cp_stylua_toml` copys the generated `stylua.toml` file into the $CWD + in case you want to include it in the repo. + With the `-d|--default` option, will copy the default configuration file + (named `stylua.default.toml`). + Both files include all available options. + ''; + }; + config = { + package = lib.mkDefault pkgs.stylua; + constructFiles."stylua.default.toml" = { + content = builtins.toJSON config.defaultStyle; + relPath = "styles/stylua.default.toml"; + builder = ''${pkgs.remarshal}/bin/json2toml "$1" "$2"''; + }; + constructFiles."stylua.toml" = { + content = builtins.toJSON (lib.recursiveUpdate config.defaultStyle config.customStyle); + relPath = "styles/stylua.toml"; + builder = ''${pkgs.remarshal}/bin/json2toml "$1" "$2"''; + }; + constructFiles."cp_stylua_toml" = lib.mkIf config.generateCpScript { + relPath = "bin/cp_stylua_toml"; + builder = "cp $1 $2 && chmod +x $2"; + content = '' + #!${pkgs.bash}/bin/sh + help=$'cp_stylua_toml [-h|--help|-d|--default]\nCopy stylua files.\nOptions:\n\t-h|--help\tPrint this help\n\t-d|--default\tCopy the default style file' + if [ "$#" -ne 1 ]; then + source=${placeholder config.outputName}/styles/stylua.toml + elif [ "$1" == "-h" ] || [ "$1" == "--help" ]; then + echo "$help" + exit 0 + elif [ "$1" == "-d" ] || [ "$1" == "--default" ]; then + source=${placeholder config.outputName}/styles/stylua.default.toml + fi + cp $source $(pwd)/ + ''; + }; + flags."--config-path" = config.constructFiles."stylua.toml".path; + meta = { + maintainers = with wlib.maintainers; [ + kuppo + ]; + description = '' + Wrapper Module for [Stylua](https://github.com/JohnnyMorganz/StyLua). + + The wrapper is used to customize the `stylua.toml` file. + You can add you options into `config.customStyle` with pure nix expressions. + + The wrapper also provides a script which copys the generated `stylua.toml` or + the default style file into the CWD, + in case you want to include the confitugation into the repo. + ''; + }; + }; +} From e638bd7cfcbed3222dd5f9aa8b4030612594dbfe Mon Sep 17 00:00:00 2001 From: Peng Lei Date: Thu, 2 Jul 2026 21:27:36 +0800 Subject: [PATCH 2/8] feat(wrapperModules.stylua): remove the defaultStyle option --- wrapperModules/s/stylua/module.nix | 32 +++--------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/wrapperModules/s/stylua/module.nix b/wrapperModules/s/stylua/module.nix index 79098098..ec1293bb 100644 --- a/wrapperModules/s/stylua/module.nix +++ b/wrapperModules/s/stylua/module.nix @@ -9,28 +9,6 @@ imports = [ wlib.modules.default ]; options = { - defaultStyle = lib.mkOption { - type = lib.types.attrs; - readOnly = true; - description = '' - Default settings for the `stylua.toml` (read only). - ''; - default = { - syntax = "All"; - column_width = 120; - line_endings = "Unix"; - indent_type = "Tabs"; - indent_width = 4; - quote_style = "AutoPreferDouble"; - call_parentheses = "Always"; - collapse_simple_statement = "Never"; - space_after_function_names = "Never"; - block_newline_gaps = "Never"; - sort_requires = { - enabled = false; - }; - }; - }; customStyle = lib.mkOption { type = wlib.types.structuredValueWith { nullable = false; @@ -66,13 +44,9 @@ }; config = { package = lib.mkDefault pkgs.stylua; - constructFiles."stylua.default.toml" = { - content = builtins.toJSON config.defaultStyle; - relPath = "styles/stylua.default.toml"; - builder = ''${pkgs.remarshal}/bin/json2toml "$1" "$2"''; - }; - constructFiles."stylua.toml" = { - content = builtins.toJSON (lib.recursiveUpdate config.defaultStyle config.customStyle); + constructFiles.generatedConfig = lib.mkIf (config.customStyle + != {}) { + content = builtins.toJSON config.customStyle; relPath = "styles/stylua.toml"; builder = ''${pkgs.remarshal}/bin/json2toml "$1" "$2"''; }; From 04455cb354504234524f4a50620e5132dc30d8dc Mon Sep 17 00:00:00 2001 From: Peng Lei Date: Thu, 2 Jul 2026 21:30:11 +0800 Subject: [PATCH 3/8] feat(wrapperModules.stylua): update the cp script --- wrapperModules/s/stylua/module.nix | 58 ++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/wrapperModules/s/stylua/module.nix b/wrapperModules/s/stylua/module.nix index ec1293bb..b2c3e845 100644 --- a/wrapperModules/s/stylua/module.nix +++ b/wrapperModules/s/stylua/module.nix @@ -32,15 +32,35 @@ }; ''; }; - generateCpScript = lib.mkEnableOption '' - generate a copy script. + generateCpScript = lib.mkOption { + default = {}; + description = '' + Options for copy script which help you quickly copy your + settings into `$CWD` for further customization. + + The script `cp_stylua_toml` (name is customizable) copys the generated + `stylua.toml` file into '$CWD' in case you want to include it in the + repo or customize it. - The script `cp_stylua_toml` copys the generated `stylua.toml` file into the $CWD - in case you want to include it in the repo. - With the `-d|--default` option, will copy the default configuration file - (named `stylua.default.toml`). - Both files include all available options. - ''; + With the `-i|--add-doc` option, it will add the configuraiton + documentation to the end of the copied file. + ''; + type = lib.types.submodule { + options = { + enable = lib.mkEnableOption '' + generating a copy script. + ''; + name = lib.mkOption { + type = lib.types.str; + default = "cp_stylua_toml"; + description = '' + Customize the name of the copy script. If the name has `/` in it, + the wrapper will only take the file's base name. + ''; + }; + }; + }; + }; }; config = { package = lib.mkDefault pkgs.stylua; @@ -50,21 +70,29 @@ relPath = "styles/stylua.toml"; builder = ''${pkgs.remarshal}/bin/json2toml "$1" "$2"''; }; - constructFiles."cp_stylua_toml" = lib.mkIf config.generateCpScript { - relPath = "bin/cp_stylua_toml"; + constructFiles."${baseNameOf config.generateCpScript.name}" = lib.mkIf config.generateCpScript.enable { + relPath = "bin/${baseNameOf config.generateCpScript.name}"; builder = "cp $1 $2 && chmod +x $2"; content = '' #!${pkgs.bash}/bin/sh - help=$'cp_stylua_toml [-h|--help|-d|--default]\nCopy stylua files.\nOptions:\n\t-h|--help\tPrint this help\n\t-d|--default\tCopy the default style file' + help=$'cp_stylua_toml [-h|--help|-i|--add-doc]\nCopy stylua files.\nOptions:\n\t-h|--help\tPrint this help\n\t-i|--add-doc\tAdd the configuration doccumentation to the end of the stylua.toml' + + target=$(pwd)/stylua.toml + + doc=$(${placeholder config.outputName}/bin/stylua --help \ + | ${pkgs.gnused}/bin/sed -n \ + '/^FORMATTING OPTIONS:$/,$ {1d;s/^[[:space:]]*/ /;s/^[[:space:]]*--/** /;s/^/# /;p}') + if [ "$#" -ne 1 ]; then - source=${placeholder config.outputName}/styles/stylua.toml + cp -f ${placeholder config.outputName}/styles/stylua.toml $(pwd)/ \ + && chmod u+w "$target" elif [ "$1" == "-h" ] || [ "$1" == "--help" ]; then echo "$help" exit 0 - elif [ "$1" == "-d" ] || [ "$1" == "--default" ]; then - source=${placeholder config.outputName}/styles/stylua.default.toml + elif [ "$1" == "-i" ] || [ "$1" == "--add-doc" ]; then + cp -f ${placeholder config.outputName}/styles/stylua.toml $(pwd)/ \ + && chmod u+w "$target" && echo >> "$target" && echo "$doc" >> "$target" fi - cp $source $(pwd)/ ''; }; flags."--config-path" = config.constructFiles."stylua.toml".path; From 08de14021db781293411ea00c44e39500703e91f Mon Sep 17 00:00:00 2001 From: Peng Lei Date: Thu, 2 Jul 2026 21:48:20 +0800 Subject: [PATCH 4/8] docs(wrapperModules.stylua): update doc --- wrapperModules/s/stylua/module.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wrapperModules/s/stylua/module.nix b/wrapperModules/s/stylua/module.nix index b2c3e845..37e5f63f 100644 --- a/wrapperModules/s/stylua/module.nix +++ b/wrapperModules/s/stylua/module.nix @@ -103,12 +103,12 @@ description = '' Wrapper Module for [Stylua](https://github.com/JohnnyMorganz/StyLua). - The wrapper is used to customize the `stylua.toml` file. + The wrapper is used to customize the `stylua.toml` file. You can add you options into `config.customStyle` with pure nix expressions. - The wrapper also provides a script which copys the generated `stylua.toml` or - the default style file into the CWD, - in case you want to include the confitugation into the repo. + The wrapper also provides a script which copys the generated `stylua.toml` + into `$CWD`, in case you want to include the confitugation into the repo or + customize it somehow. ''; }; }; From 7737f00ca10da26d4b0f77b021918c1492a74b74 Mon Sep 17 00:00:00 2001 From: Peng Lei Date: Thu, 2 Jul 2026 21:48:45 +0800 Subject: [PATCH 5/8] style(wrapperModules.stylua): reformat the code a bit --- wrapperModules/s/stylua/module.nix | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/wrapperModules/s/stylua/module.nix b/wrapperModules/s/stylua/module.nix index 37e5f63f..5779f4a0 100644 --- a/wrapperModules/s/stylua/module.nix +++ b/wrapperModules/s/stylua/module.nix @@ -4,9 +4,8 @@ config, pkgs, ... -}: -{ - imports = [ wlib.modules.default ]; +}: { + imports = [wlib.modules.default]; options = { customStyle = lib.mkOption { @@ -14,7 +13,7 @@ nullable = false; typeName = "TOML"; }; - default = { }; + default = {}; description = '' nix configuration for the stylua. From 4fb88acee8e26f976740feb61d2a74a5c724bca9 Mon Sep 17 00:00:00 2001 From: Peng Lei Date: Thu, 2 Jul 2026 21:49:15 +0800 Subject: [PATCH 6/8] fix(wrapperModules.stylua): add condition to generate file --- wrapperModules/s/stylua/module.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wrapperModules/s/stylua/module.nix b/wrapperModules/s/stylua/module.nix index 5779f4a0..214fc404 100644 --- a/wrapperModules/s/stylua/module.nix +++ b/wrapperModules/s/stylua/module.nix @@ -94,7 +94,7 @@ fi ''; }; - flags."--config-path" = config.constructFiles."stylua.toml".path; + flags."--config-path" = lib.mkIf (config.customStyle != {}) config.constructFiles.generatedConfig.path; meta = { maintainers = with wlib.maintainers; [ kuppo From 8a699a4cfda9d06460d6249c3dee897800819546 Mon Sep 17 00:00:00 2001 From: Peng Lei Date: Thu, 2 Jul 2026 21:49:22 +0800 Subject: [PATCH 7/8] test(wrapperModules.stylua): add test for stylua wrapper --- wrapperModules/s/stylua/check.nix | 99 +++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 wrapperModules/s/stylua/check.nix diff --git a/wrapperModules/s/stylua/check.nix b/wrapperModules/s/stylua/check.nix new file mode 100644 index 00000000..72335a59 --- /dev/null +++ b/wrapperModules/s/stylua/check.nix @@ -0,0 +1,99 @@ +{ + pkgs, + self, + tlib, + ... +}: let + inherit + (tlib) + fileContains + isDirectory + isFile + notIsFile + areEqual + test + ; +in + test {wrapper = "stylua";} { + "stylua wrapper test" = let + default = self.wrappers.stylua.wrap { + inherit pkgs; + }; + styluaWrapper = default.wrap { + customStyle = { + call_parentheses = "Always"; + column_width = 100; + }; + }; + cpScriptWrapper = styluaWrapper.wrap { + generateCpScript = { + enable = true; + }; + }; + cpScriptNameWrapper = cpScriptWrapper.wrap { + generateCpScript = { + name = "./bin/test_script"; + }; + }; + styluaTomlContent = '' + call_parentheses = "Always" + column_width = 100 + ''; + in [ + (isDirectory default) + (notIsFile "${default}/styles/stylua.toml") + (notIsFile "${default}/bin/cp_stylua_toml") + + (isDirectory styluaWrapper) + (isFile "${styluaWrapper}/styles/stylua.toml") + ( + fileContains "${styluaWrapper}/styles/stylua.toml" "${styluaTomlContent}" + ) + (notIsFile "${styluaWrapper}/bin/cp_stylua_toml") + + (isDirectory cpScriptWrapper) + (isFile "${cpScriptWrapper}/styles/stylua.toml") + ( + fileContains "${cpScriptWrapper}/styles/stylua.toml" "${styluaTomlContent}" + ) + (isFile "${cpScriptWrapper}/bin/cp_stylua_toml") + (fileContains "${cpScriptWrapper}/bin/cp_stylua_toml" "bin/sh") + + (isDirectory cpScriptNameWrapper) + (isFile "${cpScriptNameWrapper}/styles/stylua.toml") + ( + fileContains "${cpScriptNameWrapper}/styles/stylua.toml" "${styluaTomlContent}" + ) + (isFile "${cpScriptNameWrapper}/bin/test_script") + (fileContains "${cpScriptNameWrapper}/bin/test_script" "bin/sh") + + # test the copy script + '' + cd /tmp && ${cpScriptNameWrapper}/bin/test_script && \ + [[ -e /tmp/stylua.toml ]] && [[ -w /tmp/stylua.toml ]] && \ + grep -i "always" /tmp/stylua.toml && rm -f /tmp/stylua.toml + '' + + '' + ${cpScriptNameWrapper}/bin/test_script -h | + grep -i "add-doc" + '' + + '' + ${cpScriptNameWrapper}/bin/test_script --help | + grep -i "add-doc" + '' + + '' + cd /tmp && ${cpScriptNameWrapper}/bin/test_script -i && \ + [[ -e /tmp/stylua.toml ]] && [[ -w /tmp/stylua.toml ]] && \ + grep -i "formatting options" /tmp/stylua.toml && rm -f /tmp/stylua.toml + '' + + '' + cd /tmp && ${cpScriptNameWrapper}/bin/test_script --add-doc && \ + [[ -e /tmp/stylua.toml ]] && [[ -w /tmp/stylua.toml ]] && \ + grep -i "formatting options" /tmp/stylua.toml && rm -f /tmp/stylua.toml + '' + ]; + } From 1fe53c88329b722ead55cae5734438b4b1b58493 Mon Sep 17 00:00:00 2001 From: Peng Lei Date: Thu, 2 Jul 2026 22:11:49 +0800 Subject: [PATCH 8/8] style(wapperModules.stylua): format code --- wrapperModules/s/stylua/check.nix | 28 ++++++-------- wrapperModules/s/stylua/module.nix | 62 ++++++++++++++++-------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/wrapperModules/s/stylua/check.nix b/wrapperModules/s/stylua/check.nix index 72335a59..2f0acaa9 100644 --- a/wrapperModules/s/stylua/check.nix +++ b/wrapperModules/s/stylua/check.nix @@ -3,9 +3,9 @@ self, tlib, ... -}: let - inherit - (tlib) +}: +let + inherit (tlib) fileContains isDirectory isFile @@ -14,8 +14,9 @@ test ; in - test {wrapper = "stylua";} { - "stylua wrapper test" = let +test { wrapper = "stylua"; } { + "stylua wrapper test" = + let default = self.wrappers.stylua.wrap { inherit pkgs; }; @@ -39,31 +40,26 @@ in call_parentheses = "Always" column_width = 100 ''; - in [ + in + [ (isDirectory default) (notIsFile "${default}/styles/stylua.toml") (notIsFile "${default}/bin/cp_stylua_toml") (isDirectory styluaWrapper) (isFile "${styluaWrapper}/styles/stylua.toml") - ( - fileContains "${styluaWrapper}/styles/stylua.toml" "${styluaTomlContent}" - ) + (fileContains "${styluaWrapper}/styles/stylua.toml" "${styluaTomlContent}") (notIsFile "${styluaWrapper}/bin/cp_stylua_toml") (isDirectory cpScriptWrapper) (isFile "${cpScriptWrapper}/styles/stylua.toml") - ( - fileContains "${cpScriptWrapper}/styles/stylua.toml" "${styluaTomlContent}" - ) + (fileContains "${cpScriptWrapper}/styles/stylua.toml" "${styluaTomlContent}") (isFile "${cpScriptWrapper}/bin/cp_stylua_toml") (fileContains "${cpScriptWrapper}/bin/cp_stylua_toml" "bin/sh") (isDirectory cpScriptNameWrapper) (isFile "${cpScriptNameWrapper}/styles/stylua.toml") - ( - fileContains "${cpScriptNameWrapper}/styles/stylua.toml" "${styluaTomlContent}" - ) + (fileContains "${cpScriptNameWrapper}/styles/stylua.toml" "${styluaTomlContent}") (isFile "${cpScriptNameWrapper}/bin/test_script") (fileContains "${cpScriptNameWrapper}/bin/test_script" "bin/sh") @@ -96,4 +92,4 @@ in grep -i "formatting options" /tmp/stylua.toml && rm -f /tmp/stylua.toml '' ]; - } +} diff --git a/wrapperModules/s/stylua/module.nix b/wrapperModules/s/stylua/module.nix index 214fc404..677b5152 100644 --- a/wrapperModules/s/stylua/module.nix +++ b/wrapperModules/s/stylua/module.nix @@ -4,8 +4,9 @@ config, pkgs, ... -}: { - imports = [wlib.modules.default]; +}: +{ + imports = [ wlib.modules.default ]; options = { customStyle = lib.mkOption { @@ -13,7 +14,7 @@ nullable = false; typeName = "TOML"; }; - default = {}; + default = { }; description = '' nix configuration for the stylua. @@ -32,7 +33,7 @@ ''; }; generateCpScript = lib.mkOption { - default = {}; + default = { }; description = '' Options for copy script which help you quickly copy your settings into `$CWD` for further customization. @@ -63,38 +64,41 @@ }; config = { package = lib.mkDefault pkgs.stylua; - constructFiles.generatedConfig = lib.mkIf (config.customStyle - != {}) { + constructFiles.generatedConfig = lib.mkIf (config.customStyle != { }) { content = builtins.toJSON config.customStyle; relPath = "styles/stylua.toml"; builder = ''${pkgs.remarshal}/bin/json2toml "$1" "$2"''; }; - constructFiles."${baseNameOf config.generateCpScript.name}" = lib.mkIf config.generateCpScript.enable { - relPath = "bin/${baseNameOf config.generateCpScript.name}"; - builder = "cp $1 $2 && chmod +x $2"; - content = '' - #!${pkgs.bash}/bin/sh - help=$'cp_stylua_toml [-h|--help|-i|--add-doc]\nCopy stylua files.\nOptions:\n\t-h|--help\tPrint this help\n\t-i|--add-doc\tAdd the configuration doccumentation to the end of the stylua.toml' + constructFiles."${baseNameOf config.generateCpScript.name}" = + lib.mkIf config.generateCpScript.enable + { + relPath = "bin/${baseNameOf config.generateCpScript.name}"; + builder = "cp $1 $2 && chmod +x $2"; + content = '' + #!${pkgs.bash}/bin/sh + help=$'cp_stylua_toml [-h|--help|-i|--add-doc]\nCopy stylua files.\nOptions:\n\t-h|--help\tPrint this help\n\t-i|--add-doc\tAdd the configuration doccumentation to the end of the stylua.toml' - target=$(pwd)/stylua.toml + target=$(pwd)/stylua.toml - doc=$(${placeholder config.outputName}/bin/stylua --help \ - | ${pkgs.gnused}/bin/sed -n \ - '/^FORMATTING OPTIONS:$/,$ {1d;s/^[[:space:]]*/ /;s/^[[:space:]]*--/** /;s/^/# /;p}') + doc=$(${placeholder config.outputName}/bin/stylua --help \ + | ${pkgs.gnused}/bin/sed -n \ + '/^FORMATTING OPTIONS:$/,$ {1d;s/^[[:space:]]*/ /;s/^[[:space:]]*--/** /;s/^/# /;p}') - if [ "$#" -ne 1 ]; then - cp -f ${placeholder config.outputName}/styles/stylua.toml $(pwd)/ \ - && chmod u+w "$target" - elif [ "$1" == "-h" ] || [ "$1" == "--help" ]; then - echo "$help" - exit 0 - elif [ "$1" == "-i" ] || [ "$1" == "--add-doc" ]; then - cp -f ${placeholder config.outputName}/styles/stylua.toml $(pwd)/ \ - && chmod u+w "$target" && echo >> "$target" && echo "$doc" >> "$target" - fi - ''; - }; - flags."--config-path" = lib.mkIf (config.customStyle != {}) config.constructFiles.generatedConfig.path; + if [ "$#" -ne 1 ]; then + cp -f ${placeholder config.outputName}/styles/stylua.toml $(pwd)/ \ + && chmod u+w "$target" + elif [ "$1" == "-h" ] || [ "$1" == "--help" ]; then + echo "$help" + exit 0 + elif [ "$1" == "-i" ] || [ "$1" == "--add-doc" ]; then + cp -f ${placeholder config.outputName}/styles/stylua.toml $(pwd)/ \ + && chmod u+w "$target" && echo >> "$target" && echo "$doc" >> "$target" + fi + ''; + }; + flags."--config-path" = lib.mkIf ( + config.customStyle != { } + ) config.constructFiles.generatedConfig.path; meta = { maintainers = with wlib.maintainers; [ kuppo