lib: {
  imports = [
    # TODO: introduced 2025-08-20: remove after 25.11
    (
      let
        oldOptPath = [
          "plugins"
          "lspsaga"
          "finder"
          "filter"
        ];
      in
      lib.mkChangedOptionModule oldOptPath
        [
          "plugins"
          "lspsaga"
          "settings"
          "finder"
          "filter"
        ]
        (
          config:
          let
            oldFilter = lib.getAttrFromPath oldOptPath config;
          in
          lib.nixvim.ifNonNull' oldFilter (lib.mapAttrs (_: lib.nixvim.mkRaw) oldFilter)
        )
    )
  ];

  # TODO: introduced 2025-08-20: remove after 25.11
  deprecateExtraOptions = true;
  optionsRenamedToSettings = map (lib.splitString ".") [
    "ui.border"
    "ui.devicon"
    "ui.title"
    "ui.expand"
    "ui.collapse"
    "ui.codeAction"
    "ui.actionfix"
    "ui.lines"
    "ui.kind"
    "ui.impSign"

    "hover.maxWidth"
    "hover.maxHeight"
    "hover.openLink"
    "hover.openCmd"

    "diagnostic.showCodeAction"
    "diagnostic.showLayout"
    "diagnostic.showNormalHeight"
    "diagnostic.jumpNumShortcut"
    "diagnostic.maxWidth"
    "diagnostic.maxHeight"
    "diagnostic.maxShowWidth"
    "diagnostic.maxShowHeight"
    "diagnostic.textHlFollow"
    "diagnostic.borderFollow"
    "diagnostic.extendRelatedInformation"
    "diagnostic.diagnosticOnlyCurrent"
    "diagnostic.keys.execAction"
    "diagnostic.keys.quit"
    "diagnostic.keys.toggleOrJump"
    "diagnostic.keys.quitInShow"

    "codeAction.numShortcut"
    "codeAction.showServerName"
    "codeAction.extendGitSigns"
    "codeAction.onlyInCursor"
    "codeAction.keys.quit"
    "codeAction.keys.exec"

    "lightbulb.enable"
    "lightbulb.sign"
    "lightbulb.debounce"
    "lightbulb.signPriority"
    "lightbulb.virtualText"

    "scrollPreview.scrollDown"
    "scrollPreview.scrollUp"

    "finder.maxHeight"
    "finder.leftWidth"
    "finder.rightWidth"
    "finder.methods"
    "finder.default"
    "finder.layout"
    "finder.silent"
    "finder.keys.shuttle"
    "finder.keys.toggleOrOpen"
    "finder.keys.vsplit"
    "finder.keys.split"
    "finder.keys.tabe"
    "finder.keys.tabnew"
    "finder.keys.quit"
    "finder.keys.close"

    "definition.width"
    "definition.height"
    "definition.keys.edit"
    "definition.keys.vsplit"
    "definition.keys.split"
    "definition.keys.tabe"
    "definition.keys.quit"
    "definition.keys.close"

    "rename.inSelect"
    "rename.autoSave"
    "rename.projectMaxWidth"
    "rename.projectMaxHeight"
    "rename.keys.quit"
    "rename.keys.exec"
    "rename.keys.select"

    "symbolInWinbar.enable"
    "symbolInWinbar.separator"
    "symbolInWinbar.hideKeyword"
    "symbolInWinbar.showFile"
    "symbolInWinbar.folderLevel"
    "symbolInWinbar.colorMode"
    "symbolInWinbar.delay"

    "outline.winPosition"
    "outline.winWidth"
    "outline.autoPreview"
    "outline.detail"
    "outline.autoClose"
    "outline.closeAfterJump"
    "outline.layout"
    "outline.maxHeight"
    "outline.leftWidth"
    "outline.keys.toggleOrJump"
    "outline.keys.quit"
    "outline.keys.jump"

    "callhierarchy.layout"
    "callhierarchy.keys.edit"
    "callhierarchy.keys.vsplit"
    "callhierarchy.keys.split"
    "callhierarchy.keys.tabe"
    "callhierarchy.keys.close"
    "callhierarchy.keys.quit"
    "callhierarchy.keys.shuttle"
    "callhierarchy.keys.toggleOrReq"

    "implement.enable"
    "implement.sign"
    "implement.virtualText"
    "implement.priority"

    "beacon.enable"
    "beacon.frequency"
  ];
}
