From a830246ed986bccfd9ba1c1cc19ba27556ffff03 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Sun, 12 Oct 2025 21:40:09 +0200 Subject: [PATCH] plugins/obsidian: drop settings options declarations --- plugins/by-name/obsidian/default.nix | 57 +- plugins/by-name/obsidian/settings-options.nix | 582 ------------------ 2 files changed, 3 insertions(+), 636 deletions(-) delete mode 100644 plugins/by-name/obsidian/settings-options.nix diff --git a/plugins/by-name/obsidian/default.nix b/plugins/by-name/obsidian/default.nix index 4f9a1c4b..26355020 100644 --- a/plugins/by-name/obsidian/default.nix +++ b/plugins/by-name/obsidian/default.nix @@ -1,65 +1,14 @@ { lib, - helpers, config, ... }: -with lib; lib.nixvim.plugins.mkNeovimPlugin { name = "obsidian"; package = "obsidian-nvim"; description = "Neovim plugin for writing and navigating Obsidian vaults."; - maintainers = [ maintainers.GaetanLepage ]; - - settingsOptions = - let - opts = import ./settings-options.nix { inherit lib; }; - 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 lib.types; maybeRaw str; - description = "The name for this workspace"; - }; - - path = mkOption { - type = with lib.types; maybeRaw str; - description = "The path 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; + maintainers = [ lib.maintainers.GaetanLepage ]; settingsExample = { workspaces = [ @@ -82,14 +31,14 @@ lib.nixvim.plugins.mkNeovimPlugin { extraConfig = cfg: { warnings = lib.nixvim.mkWarnings "plugins.obsidian" [ { - when = (cfg.settings.completion.nvim_cmp == true) && (!config.plugins.cmp.enable); + when = ((cfg.settings.completion.nvim_cmp or false) == true) && (!config.plugins.cmp.enable); message = '' You have enabled `completion.nvim_cmp` but `plugins.cmp.enable` is `false`. You should probably enable `nvim-cmp`. ''; } { - when = (cfg.settings.completion.blink == true) && (!config.plugins.blink-cmp.enable); + when = ((cfg.settings.completion.blink or false) == true) && (!config.plugins.blink-cmp.enable); message = '' You have enabled `completion.blink` but `plugins.blink-cmp.enable` is `false`. You should probably enable `blink-cmp`. diff --git a/plugins/by-name/obsidian/settings-options.nix b/plugins/by-name/obsidian/settings-options.nix deleted file mode 100644 index d34f36fe..00000000 --- a/plugins/by-name/obsidian/settings-options.nix +++ /dev/null @@ -1,582 +0,0 @@ -{ lib }: -let - inherit (lib) types; - inherit (lib.nixvim) defaultNullOpts; -in -{ - # https://github.com/epwalsh/obsidian.nvim/blob/main/lua/obsidian/config.lua - - log_level = defaultNullOpts.mkLogLevel "info" '' - Set the log level for obsidian.nvim. - ''; - - notes_subdir = lib.nixvim.mkNullOrStr '' - If you keep notes in a specific subdirectory of your vault. - ''; - - templates = { - subdir = lib.nixvim.mkNullOrStr '' - The name of the directory where templates are stored. - - Example: "templates" - ''; - - date_format = lib.nixvim.mkNullOrStr '' - Which date format to use. - - Example: "%Y-%m-%d" - ''; - - time_format = lib.nixvim.mkNullOrStr '' - Which time format to use. - - Example: "%H:%M" - ''; - - substitutions = defaultNullOpts.mkAttrsOf ( - with lib.types; either str rawLua - ) { } "A map for custom variables, the key should be the variable and the value a function."; - }; - - new_notes_location = - defaultNullOpts.mkEnumFirstDefault - [ - "current_dir" - "notes_subdir" - ] - '' - Where to put new notes created from completion. - - Valid options are - - "current_dir" - put new notes in same directory as the current buffer. - - "notes_subdir" - put new notes in the default notes subdirectory. - ''; - - note_id_func = lib.nixvim.mkNullOrLuaFn '' - Customize how names/IDs for new notes are created. - - Example: - ```lua - function(title) - -- Create note IDs in a Zettelkasten format with a timestamp and a suffix. - -- In this case a note with the title 'My new note' will be given an ID that looks - -- like '1657296016-my-new-note', and therefore the file name '1657296016-my-new-note.md' - local suffix = "" - if title ~= nil then - -- If title is given, transform it into valid file name. - suffix = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower() - else - -- If title is nil, just add 4 random uppercase letters to the suffix. - for _ = 1, 4 do - suffix = suffix .. string.char(math.random(65, 90)) - end - end - return tostring(os.time()) .. "-" .. suffix - end - ``` - ''; - - note_path_func = lib.nixvim.mkNullOrLuaFn '' - Customize how note file names are generated given the ID, target directory, and title. - - ```lua - ---@param spec { id: string, dir: obsidian.Path, title: string|? } - ---@return string|obsidian.Path The full path to the new note. - ``` - - Example: - ```lua - function(spec) - -- This is equivalent to the default behavior. - local path = spec.dir / tostring(spec.id) - return path:with_suffix(".md") - end - ``` - ''; - - wiki_link_func = lib.nixvim.mkNullOrLuaFn '' - Customize how wiki links are formatted. - - ```lua - ---@param opts {path: string, label: string, id: string|?} - ---@return string - ``` - - Example: - ```lua - function(opts) - if opts.id == nil then - return string.format("[[%s]]", opts.label) - elseif opts.label ~= opts.id then - return string.format("[[%s|%s]]", opts.id, opts.label) - else - return string.format("[[%s]]", opts.id) - end - end - ``` - - Default: See source - ''; - - markdown_link_func = lib.nixvim.mkNullOrLuaFn '' - Customize how markdown links are formatted. - - ```lua - ---@param opts {path: string, label: string, id: string|?} - ---@return string links are formatted. - ``` - - Example: - ```lua - function(opts) - return string.format("[%s](%s)", opts.label, opts.path) - end - ``` - - Default: See source - ''; - - preferred_link_style = - defaultNullOpts.mkEnumFirstDefault - [ - "wiki" - "markdown" - ] - '' - Either 'wiki' or 'markdown'. - ''; - - follow_url_func = lib.nixvim.mkNullOrLuaFn '' - By default when you use `:ObsidianFollowLink` on a link to an external URL it will be - ignored but you can customize this behavior here. - - Example: - ```lua - function(url) - -- Open the URL in the default web browser. - vim.fn.jobstart({"open", url}) -- Mac OS - -- vim.fn.jobstart({"xdg-open", url}) -- linux - end - ``` - ''; - - image_name_func = lib.nixvim.mkNullOrLuaFn '' - Customize the default name or prefix when pasting images via `:ObsidianPasteImg`. - - Example: - ```lua - function() - -- Prefix image names with timestamp. - return string.format("%s-", os.time()) - end - ``` - ''; - - note_frontmatter_func = lib.nixvim.mkNullOrLuaFn '' - You can customize the frontmatter data. - - Example: - ```lua - function(note) - -- Add the title of the note as an alias. - if note.title then - note:add_alias(note.title) - end - - local out = { id = note.id, aliases = note.aliases, tags = note.tags } - - -- `note.metadata` contains any manually added fields in the frontmatter. - -- So here we just make sure those fields are kept in the frontmatter. - if note.metadata ~= nil and not vim.tbl_isempty(note.metadata) then - for k, v in pairs(note.metadata) do - out[k] = v - end - end - - return out - end - ``` - ''; - - disable_frontmatter = lib.nixvim.mkNullOrStrLuaFnOr types.bool '' - Boolean or a function that takes a filename and returns a boolean. - `true` indicates that you don't want obsidian.nvim to manage frontmatter. - - Default: `false` - ''; - - completion = { - # FIXME should this accept raw types? - nvim_cmp = lib.nixvim.mkNullOrOption' { - type = types.bool; - description = '' - Set to false to disable completion. - ''; - defaultText = lib.literalMD "`true` if `plugins.cmp.enable` is enabled (otherwise `null`)."; - }; - - blink = defaultNullOpts.mkBool false '' - Enable completion using blink.cmp. - ''; - - min_chars = defaultNullOpts.mkUnsignedInt 2 '' - Trigger completion at this many chars. - ''; - }; - - mappings = - defaultNullOpts.mkNullable - (types.attrsOf ( - types.submodule { - options = { - action = lib.mkOption { - type = lib.types.strLua; - description = "The lua code for this keymap action."; - }; - opts = lib.nixvim.keymaps.mapConfigOptions // { - buffer = defaultNullOpts.mkBool false '' - If true, the mapping will be effective in the current buffer only. - ''; - }; - }; - } - )) - { - gf = { - action = "require('obsidian').util.gf_passthrough"; - opts = { - noremap = false; - expr = true; - buffer = true; - }; - }; - - "ch" = { - action = "require('obsidian').util.toggle_checkbox"; - opts.buffer = true; - }; - } - '' - Configure key mappings. - ''; - - picker = { - name = - lib.nixvim.mkNullOrOption - (types.enum [ - "telescope.nvim" - "fzf-lua" - "mini.pick" - "snacks.pick" - ]) - '' - Set your preferred picker. - ''; - - note_mappings = - defaultNullOpts.mkAttrsOf types.str - { - new = ""; - insert_link = ""; - } - '' - Optional, configure note mappings for the picker. These are the defaults. - Not all pickers support all mappings. - ''; - - tag_mappings = - defaultNullOpts.mkAttrsOf types.str - { - tag_note = ""; - insert_tag = ""; - } - '' - Optional, configure tag mappings for the picker. These are the defaults. - Not all pickers support all mappings. - ''; - }; - - daily_notes = { - folder = lib.nixvim.mkNullOrStr '' - Optional, if you keep daily notes in a separate directory. - ''; - - date_format = lib.nixvim.mkNullOrStr '' - Optional, if you want to change the date format for the ID of daily notes. - - Example: "%Y-%m-%d" - ''; - - alias_format = lib.nixvim.mkNullOrStr '' - Optional, if you want to change the date format of the default alias of daily notes. - - Example: "%B %-d, %Y" - ''; - - template = lib.nixvim.mkNullOrStr '' - Optional, if you want to automatically insert a template from your template directory like - 'daily.md'. - ''; - }; - - use_advanced_uri = defaultNullOpts.mkBool false '' - Set to true to force ':ObsidianOpen' to bring the app to the foreground. - ''; - - open_app_foreground = defaultNullOpts.mkBool false '' - Set to true to force `:ObsidianOpen` to bring the app to the foreground. - ''; - - sort_by = - defaultNullOpts.mkEnum - [ - "path" - "modified" - "accessed" - "created" - ] - "modified" - '' - Sort search results by "path", "modified", "accessed", or "created". - The recommend value is "modified" and `true` for `sortReversed`, which means, for example, - that `:ObsidianQuickSwitch` will show the notes sorted by latest modified time. - ''; - - sort_reversed = defaultNullOpts.mkBool true '' - Whether search results should be reversed. - ''; - - open_notes_in = - defaultNullOpts.mkEnumFirstDefault - [ - "current" - "vsplit" - "hsplit" - ] - '' - Determines how certain commands open notes. - - The valid options are: - - "current" (the default) - to always open in the current window - - "vsplit" - to open in a vertical split if there's not already a vertical split - - "hsplit" - to open in a horizontal split if there's not already a horizontal split - ''; - - ui = { - enable = defaultNullOpts.mkBool true '' - Set to false to disable all additional syntax features. - ''; - - update_debounce = defaultNullOpts.mkUnsignedInt 200 '' - Update delay after a text change (in milliseconds). - ''; - - checkboxes = - defaultNullOpts.mkAttrsOf - ( - with types; - submodule { - options = { - char = lib.mkOption { - type = with lib.types; maybeRaw str; - description = "The character to use for this checkbox."; - }; - - hl_group = lib.mkOption { - type = with lib.types; maybeRaw str; - description = "The name of the highlight group to use for this checkbox."; - }; - }; - } - ) - { - " " = { - char = "󰄱"; - hl_group = "ObsidianTodo"; - }; - "x" = { - char = ""; - hl_group = "ObsidianDone"; - }; - ">" = { - char = ""; - hl_group = "ObsidianRightArrow"; - }; - "~" = { - char = "󰰱"; - hl_group = "ObsidianTilde"; - }; - } - '' - Define how various check-boxes are displayed. - You can also add more custom ones... - - NOTE: the 'char' value has to be a single character, and the highlight groups are defined - in the `ui.hl_groups` option. - ''; - - bullets = { - char = defaultNullOpts.mkStr "•" '' - Which character to use for the bullets. - ''; - - hl_group = defaultNullOpts.mkStr "ObsidianBullet" '' - The name of the highlight group to use for the bullets. - ''; - }; - - external_link_icon = { - char = defaultNullOpts.mkStr "" '' - Which character to use for the external link icon. - ''; - - hl_group = defaultNullOpts.mkStr "ObsidianExtLinkIcon" '' - The name of the highlight group to use for the external link icon. - ''; - }; - - reference_text = { - hl_group = defaultNullOpts.mkStr "ObsidianRefText" '' - The name of the highlight group to use for reference text. - ''; - }; - - highlight_text = { - hl_group = defaultNullOpts.mkStr "ObsidianHighlightText" '' - The name of the highlight group to use for highlight text. - ''; - }; - - tags = { - hl_group = defaultNullOpts.mkStr "ObsidianTag" '' - The name of the highlight group to use for tags. - ''; - }; - - hl_groups = defaultNullOpts.mkAttrsOf lib.types.highlight { - ObsidianTodo = { - bold = true; - fg = "#f78c6c"; - }; - ObsidianDone = { - bold = true; - fg = "#89ddff"; - }; - ObsidianRightArrow = { - bold = true; - fg = "#f78c6c"; - }; - ObsidianTilde = { - bold = true; - fg = "#ff5370"; - }; - ObsidianRefText = { - underline = true; - fg = "#c792ea"; - }; - ObsidianExtLinkIcon = { - fg = "#c792ea"; - }; - ObsidianTag = { - italic = true; - fg = "#89ddff"; - }; - ObsidianHighlightText = { - bg = "#75662e"; - }; - } "Highlight group definitions."; - }; - - attachments = { - img_folder = defaultNullOpts.mkStr "assets/imgs" '' - The default folder to place images in via `:ObsidianPasteImg`. - - If this is a relative path it will be interpreted as relative to the vault root. - You can always override this per image by passing a full path to the command instead of just - a filename. - ''; - - img_text_func = - defaultNullOpts.mkLuaFn - '' - function(client, path) - ---@type string - local link_path - local vault_relative_path = client:vault_relative_path(path) - if vault_relative_path ~= nil then - -- Use relative path if the image is saved in the vault dir. - link_path = vault_relative_path - else - -- Otherwise use the absolute path. - link_path = tostring(path) - end - local display_name = vim.fs.basename(link_path) - return string.format("![%s](%s)", display_name, link_path) - end - '' - '' - A function that determines the text to insert in the note when pasting an image. - It takes two arguments, the `obsidian.Client` and a plenary `Path` to the image file. - - ```lua - @param client obsidian.Client - @param path Path the absolute path to the image file - @return string - ``` - ''; - - confirm_img_paste = defaultNullOpts.mkBool true '' - Whether to prompt for confirmation when pasting an image. - ''; - }; - - callbacks = { - post_setup = lib.nixvim.mkNullOrLuaFn '' - `fun(client: obsidian.Client)` - - Runs right after the `obsidian.Client` is initialized. - ''; - - enter_note = lib.nixvim.mkNullOrLuaFn '' - `fun(client: obsidian.Client, note: obsidian.Note)` - - Runs when entering a note buffer. - ''; - - leave_note = lib.nixvim.mkNullOrLuaFn '' - `fun(client: obsidian.Client, note: obsidian.Note)` - - Runs when leaving a note buffer. - ''; - - pre_write_note = lib.nixvim.mkNullOrLuaFn '' - `fun(client: obsidian.Client, note: obsidian.Note)` - - Runs right before writing a note buffer. - ''; - - post_set_workspace = lib.nixvim.mkNullOrLuaFn '' - `fun(client: obsidian.Client, workspace: obsidian.Workspace)` - - Runs anytime the workspace is set/changed. - ''; - }; - - yaml_parser = - defaultNullOpts.mkEnumFirstDefault - [ - "native" - "yq" - ] - '' - Set the YAML parser to use. - - The valid options are: - - "native" - uses a pure Lua parser that's fast but potentially misses some edge cases. - - "yq" - uses the command-line tool yq (https://github.com/mikefarah/yq), which is more robust - but much slower and needs to be installed separately. - - In general you should be using the native parser unless you run into a bug with it, in which - case you can temporarily switch to the "yq" parser until the bug is fixed. - ''; -}