mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-27 11:08:53 +02:00
plugins/obsidian: switch to mkNeovimPlugin
This commit is contained in:
parent
becfe75a67
commit
8226d825de
5 changed files with 1002 additions and 806 deletions
175
plugins/utils/obsidian/default.nix
Normal file
175
plugins/utils/obsidian/default.nix
Normal file
|
@ -0,0 +1,175 @@
|
|||
{
|
||||
lib,
|
||||
helpers,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
helpers.neovim-plugin.mkNeovimPlugin config {
|
||||
name = "obsidian";
|
||||
originalName = "obsidian.nvim";
|
||||
defaultPackage = pkgs.vimPlugins.obsidian-nvim;
|
||||
|
||||
maintainers = [maintainers.GaetanLepage];
|
||||
|
||||
## DEPRECATIONS
|
||||
# Introduced 2024-03-12
|
||||
# TODO: remove 2024-05-12
|
||||
deprecateExtraOptions = true;
|
||||
optionsRenamedToSettings = [
|
||||
"dir"
|
||||
"logLevel"
|
||||
"notesSubdir"
|
||||
["templates" "subdir"]
|
||||
["templates" "dateFormat"]
|
||||
["templates" "timeFormat"]
|
||||
["templates" "substitutions"]
|
||||
"noteIdFunc"
|
||||
"followUrlFunc"
|
||||
"noteFrontmatterFunc"
|
||||
"disableFrontmatter"
|
||||
["completion" "nvimCmp"]
|
||||
["completion" "minChars"]
|
||||
"mappings"
|
||||
["dailyNotes" "folder"]
|
||||
["dailyNotes" "dateFormat"]
|
||||
["dailyNotes" "aliasFormat"]
|
||||
["dailyNotes" "template"]
|
||||
"useAdvancedUri"
|
||||
"openAppForeground"
|
||||
"sortBy"
|
||||
"sortReversed"
|
||||
"openNotesIn"
|
||||
["ui" "enable"]
|
||||
["ui" "updateDebounce"]
|
||||
["ui" "externalLinkIcon" "char"]
|
||||
["ui" "externalLinkIcon" "hlGroup"]
|
||||
["ui" "referenceText" "hlGroup"]
|
||||
["ui" "highlightText" "hlGroup"]
|
||||
["ui" "tags" "hlGroup"]
|
||||
["ui" "hlGroups"]
|
||||
["attachments" "imgFolder"]
|
||||
["attachments" "imgTextFunc"]
|
||||
"yamlParser"
|
||||
];
|
||||
imports = let
|
||||
basePluginPath = ["plugins" "obsidian"];
|
||||
in
|
||||
[
|
||||
( # We have to remove the option here because the user could set old-style camelCase options in each workspaces element.
|
||||
mkRemovedOptionModule
|
||||
(basePluginPath ++ ["workspaces"])
|
||||
"Please use `plugins.obsidian.settings.workspaces` instead."
|
||||
)
|
||||
(
|
||||
mkRenamedOptionModule
|
||||
(basePluginPath ++ ["finder"])
|
||||
(basePluginPath ++ ["settings" "picker" "name"])
|
||||
)
|
||||
(
|
||||
# https://github.com/epwalsh/obsidian.nvim/blob/656d9c2c64528839db8b2d9a091843b3c90155a2/CHANGELOG.md?plain=1#L184
|
||||
mkRenamedOptionModule
|
||||
(basePluginPath ++ ["completion" "newNotesLocation"])
|
||||
(basePluginPath ++ ["settings" "new_notes_location"])
|
||||
)
|
||||
( # We have to remove the option here because the user could set old-style camelCase options in each checkbox element.
|
||||
mkRemovedOptionModule
|
||||
(basePluginPath ++ ["ui" "checkboxes"])
|
||||
"Please use `plugins.obsidian.settings.ui.checkboxes` instead."
|
||||
)
|
||||
]
|
||||
++ (map (
|
||||
optionPath:
|
||||
mkRemovedOptionModule
|
||||
(basePluginPath ++ optionPath)
|
||||
"This option was deprecated by upstream."
|
||||
)
|
||||
[
|
||||
["detectCwd"]
|
||||
["backlinks"]
|
||||
["completion" "prependNoteId"]
|
||||
["completion" "prependNotePath"]
|
||||
["completion" "usePathOnly"]
|
||||
]);
|
||||
|
||||
settingsOptions = let
|
||||
opts = import ./options.nix {inherit lib helpers;};
|
||||
in
|
||||
{
|
||||
dir = helpers.mkNullOrOption types.str ''
|
||||
Alternatively to `workspaces` - and for backwards compatibility - you can set `dir` to a
|
||||
single path instead of `workspaces`.
|
||||
|
||||
For example:
|
||||
```nix
|
||||
dir = "~/vaults/work";
|
||||
```
|
||||
'';
|
||||
|
||||
workspaces =
|
||||
helpers.defaultNullOpts.mkNullable
|
||||
(
|
||||
with types;
|
||||
listOf
|
||||
(types.submodule {
|
||||
options = {
|
||||
name = mkOption {
|
||||
type = with helpers.nixvimTypes; maybeRaw str;
|
||||
description = "The name for this workspace";
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
type = with helpers.nixvimTypes; maybeRaw str;
|
||||
description = "The of the workspace.";
|
||||
};
|
||||
|
||||
overrides = opts;
|
||||
};
|
||||
})
|
||||
)
|
||||
"[]"
|
||||
''
|
||||
A list of vault names and paths.
|
||||
Each path should be the path to the vault root.
|
||||
If you use the Obsidian app, the vault root is the parent directory of the `.obsidian`
|
||||
folder.
|
||||
You can also provide configuration overrides for each workspace through the `overrides`
|
||||
field.
|
||||
'';
|
||||
}
|
||||
// opts;
|
||||
|
||||
settingsExample = {
|
||||
workspaces = [
|
||||
{
|
||||
name = "work";
|
||||
path = "~/obsidian/work";
|
||||
}
|
||||
{
|
||||
name = "startup";
|
||||
path = "~/obsidian/startup";
|
||||
}
|
||||
];
|
||||
new_notes_location = "current_dir";
|
||||
completion = {
|
||||
nvim_cmp = true;
|
||||
min_chars = 2;
|
||||
};
|
||||
};
|
||||
|
||||
extraConfig = cfg: {
|
||||
assertions = [
|
||||
{
|
||||
assertion = let
|
||||
nvimCmpEnabled = isBool cfg.settings.completion.nvim_cmp && cfg.settings.completion.nvim_cmp;
|
||||
in
|
||||
nvimCmpEnabled -> config.plugins.nvim-cmp.enable;
|
||||
message = ''
|
||||
Nixvim (plugins.obsidian): You have enabled `completion.nvim_cmp` but `plugins.cmp.enable` is `false`.
|
||||
You need to enable `nvim-cmp` to use this setting.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue