diff --git a/lib/modules/init.nix b/lib/modules/init.nix index ba4886f..848b787 100644 --- a/lib/modules/init.nix +++ b/lib/modules/init.nix @@ -1,6 +1,56 @@ -{pkgs, ...}: let +{ + pkgs, + callModule, + ... +}: let inherit (builtins) isAttrs isPath isString readFile; - inherit (pkgs.lib) fix mkOption types; + inherit + (pkgs.lib) + fileContents + fix + mkOption + optionalAttrs + optionalString + types + ; + + lua = callModule ../lua.nix {}; + + textOrContent = content: + if isPath content + then fileContents content + else content; + + buildInit = { + init ? null, + postInit ? null, + config ? null, + }: let + initStr = optionalString (! isNull init) '' + (function() + ${textOrContent init} + end)(); + + ''; + + postInitContent = optionalAttrs (! isNull postInit) { + post_init = lua.lambda [] (textOrContent (lua.raw postInit)); + }; + + slothCall = "require('sloth-flake').setup ${lua.renderLua {} postInitContent}"; + + configStr = optionalString (! isNull config) '' + + (function() + ${textOrContent config} + end)() + ''; + in '' + -- Generated by sloth-flake + ${initStr} + ${slothCall} + ${configStr} + ''; in fix (self: { module = types.submodule { @@ -46,6 +96,6 @@ in else if isPath init then readFile init else if isAttrs init - then "print('not implmented yet')" + then buildInit init else null; })