{lib, ...}: with lib; rec { # This should be used instead of mkRemovedOptionModule, when the option still works, # but is just deprecated and should be changed now and for the future mkDeprecatedOption = { option, # an array of the path to the option alternative ? null, message ? null, visible ? false, }: { options, config, ... }: let fromOpt = getAttrFromPath option options; fromValue = getAttrFromPath option config; fullMessage = "The option `${showOption option}` has been deprecated, but might still work." + (optionalString (alternative != null) " You may want to use `${showOption alternative}` instead.") + (optionalString (message != null) " Message: ${message}"); in { config = mkIf (fromOpt.isDefined && fromValue != fromOpt.default) { warnings = [ "Nixvim: ${fullMessage}" ]; }; }; mkRenamedOption = { option, newOption, visible ? false, warn ? true, overrideDescription ? null, }: {options, ...}: let fromOpt = getAttrFromPath option options; # toOf = attrByPath newOption # (abort "Renaming error: option `${showOption newOption}` does not exist."); toType = let opt = attrByPath newOption {} options; in opt.type or (types.submodule {}); message = "`${showOption option}` has been renamed to `${showOption newOption}`, but can still be used for compatibility"; in { options = setAttrByPath option (mkOption { inherit visible; description = if overrideDescription == null then message else overrideDescription; } // optionalAttrs (toType != null) { type = toType; }); config = mkMerge [ { warnings = mkIf (warn && fromOpt.isDefined) ["Nixvim: ${message}"]; } (mkAliasAndWrapDefinitions (setAttrByPath newOption) fromOpt) ]; }; mkAliasOption = option: newOption: mkRenamedOption { inherit option newOption; visible = true; warn = false; overrideDescription = "Alias of ${showOption newOption}"; }; mkRemovedOption = { option, # an array of the path to the option alternative ? null, message ? null, visible ? false, }: { options, config, ... }: let fromOpt = getAttrFromPath option options; fromValue = getAttrFromPath option config; fullMessage = "The option `${showOption option}` has been removed." + (optionalString (alternative != null) " You may want to use `${showOption alternative}` instead.") + (optionalString (message != null) " Message: ${message}"); in { config = mkIf (fromOpt.isDefined && fromValue != fromOpt.default) { warnings = [ "Nixvim: ${fullMessage}" ]; }; }; }