ooknet/outputs/pkgs/ook-vim/modules/plugins/notes/obsidian/obsidian.nix

117 lines
3.4 KiB
Nix

{
lib,
config,
...
}: let
inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) str nullOr bool enum;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.binds) mkMappingOption;
inherit (lib.nvim.types) mkPluginSetupOption luaInline;
in {
options.vim.notes.obsidianExtended = {
enable = mkEnableOption "Complementary neovim plugin for Obsidian editor";
setupOpts = mkPluginSetupOption "Obsidian.nvim" {
dir = mkOption {
type = str;
default = "~/my-vault";
description = "Location of 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;
};
};
new_notes_location = mkOption {
type = nullOr (enum ["current_dir" "notes_subdir"]);
default = null;
description = ''
Where to put new notes. Valid options are:
* "current_dir" - put notes in same directory as current buffer
* "notes_subdir" - put notes in the default notes subdirectory
default option: "current_dir"
'';
};
templates = {
folder = mkOption {
type = nullOr str;
default = null;
description = "Obsidian templates directory";
};
date_format = mkOption {
type = nullOr str;
default = null;
description = "Date format used for templates";
};
time_format = mkOption {
type = nullOr str;
default = null;
description = "Time format used for templates";
};
};
preferred_link_style = mkOption {
type = nullOr (enum ["wiki" "markdown"]);
default = null;
description = ''
Either "wiki" or "markdown"
'';
};
note_id_func = mkOption {
type = nullOr luaInline;
default =
mkLuaInline
# lua
''
function(title)
return title
end
'';
description = ''
Customize how a note ID is generated given an optional title
'';
};
follow_url_func = mkOption {
type = nullOr luaInline;
default =
mkLuaInline
# lua
''
function(url)
vim.fn.jobstart({"xdg-open", url})
end
'';
};
ui = {
enable = mkOption {
type = nullOr bool;
default = null;
description = ''
Set to false to disable all additional syntax features
'';
};
# TODO: add rest of ui options
};
};
mappings = {
openNote = mkMappingOption "Open note in obsidian" "<leader>oo";
findNote = mkMappingOption "Open finder in obsidian vault" "<leader>of";
newNote = mkMappingOption "Create new note" "<leader>on";
};
};
}