{
  config,
  lib,
  ...
}: let
  inherit (lib.options) mkEnableOption mkOption;
  inherit (lib.types) bool str nullOr;
  inherit (lib.modules) mkRenamedOptionModule;
  inherit (lib.nvim.types) mkPluginSetupOption;
in {
  imports = let
    renamedSetupOption = oldPath: newPath:
      mkRenamedOptionModule
      (["vim" "notes" "obsidian"] ++ oldPath)
      (["vim" "notes" "obsidian" "setupOpts"] ++ newPath);
  in [
    (renamedSetupOption ["dir"] ["dir"])
    (renamedSetupOption ["daily-notes" "folder"] ["daily_notes" "folder"])
    (renamedSetupOption ["daily-notes" "date-format"] ["daily_notes" "date_format"])
    (renamedSetupOption ["completion"] ["completion"])
  ];
  options.vim.notes = {
    obsidian = {
      enable = mkEnableOption "complementary neovim plugins for Obsidian editor";

      setupOpts = mkPluginSetupOption "Obsidian.nvim" {
        dir = mkOption {
          type = str;
          default = "~/my-vault";
          description = "Obsidian vault directory";
        };

        daily_notes = {
          folder = mkOption {
            type = nullOr str;
            default = null;
            description = "Directory in which daily notes should be created";
          };
          date_format = mkOption {
            type = nullOr str;
            default = null;
            description = "Date format used for creating daily notes";
          };
        };

        completion = {
          nvim_cmp = mkOption {
            # If using nvim-cmp, otherwise set to false
            type = bool;
            description = "If using nvim-cmp, otherwise set to false";
            default = config.vim.autocomplete.nvim-cmp.enable;
          };
        };
      };
    };
  };
}