Merge pull request #1217 from alfarelcynthesis/obsidian-nvim-fork
Some checks are pending
Set up binary cache / cachix (default) (push) Waiting to run
Set up binary cache / cachix (maximal) (push) Waiting to run
Set up binary cache / cachix (nix) (push) Waiting to run
Treewide Checks / Validate flake (push) Waiting to run
Treewide Checks / Check formatting (push) Waiting to run
Treewide Checks / Check source tree for typos (push) Waiting to run
Treewide Checks / Validate documentation builds (push) Waiting to run
Treewide Checks / Validate hyperlinks in documentation sources (push) Waiting to run
Treewide Checks / Validate Editorconfig conformance (push) Waiting to run
Build and deploy documentation / Check latest commit (push) Waiting to run
Build and deploy documentation / publish (push) Blocked by required conditions

notes/obsidian-nvim: use a maintained fork
This commit is contained in:
raf 2026-01-08 23:59:13 +03:00 committed by GitHub
commit 328e096c8b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 201 additions and 67 deletions

View file

@ -214,7 +214,6 @@ isMaximal: {
}; };
notes = { notes = {
obsidian.enable = false; # FIXME: neovim fails to build if obsidian is enabled
neorg.enable = false; neorg.enable = false;
orgmode.enable = false; orgmode.enable = false;
mind-nvim.enable = isMaximal; mind-nvim.enable = isMaximal;

View file

@ -19,20 +19,13 @@ To use **nvf** with flakes, we first need to add the input to our `flake.nix`.
# flake.nix # flake.nix
{ {
inputs = { inputs = {
# Optional, if you intend to follow nvf's obsidian-nvim input # nvf works best with and only directly supports flakes
# you must also add it as a flake input.
obsidian-nvim.url = "github:epwalsh/obsidian.nvim";
# Required, nvf works best and only directly supports flakes
nvf = { nvf = {
url = "github:NotAShelf/nvf"; url = "github:NotAShelf/nvf";
# You can override the input nixpkgs to follow your system's # You can override the input nixpkgs to follow your system's
# instance of nixpkgs. This is safe to do as nvf does not depend # instance of nixpkgs. This is safe to do as nvf does not depend
# on a binary cache. # on a binary cache.
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
# Optionally, you can also override individual plugins
# for example:
inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- this will use the obsidian-nvim from your inputs
}; };
# ... # ...
@ -44,8 +37,8 @@ Followed by importing the home-manager module somewhere in your configuration.
```nix ```nix
{ {
# Assuming "nvf" is in your inputs and inputs is in the argument set. # Assuming nvf is in your inputs and inputs is in the argument set.
# See example installation below # See example installation below.
imports = [ inputs.nvf.homeManagerModules.default ]; imports = [ inputs.nvf.homeManagerModules.default ];
} }
``` ```

View file

@ -19,20 +19,13 @@ To use **nvf** with flakes, we first need to add the input to our `flake.nix`.
# flake.nix # flake.nix
{ {
inputs = { inputs = {
# Optional, if you intend to follow nvf's obsidian-nvim input # nvf works best with and only directly supports flakes
# you must also add it as a flake input.
obsidian-nvim.url = "github:epwalsh/obsidian.nvim";
# Required, nvf works best and only directly supports flakes
nvf = { nvf = {
url = "github:NotAShelf/nvf"; url = "github:NotAShelf/nvf";
# You can override the input nixpkgs to follow your system's # You can override the input nixpkgs to follow your system's
# instance of nixpkgs. This is safe to do as nvf does not depend # instance of nixpkgs. This is safe to do as nvf does not depend
# on a binary cache. # on a binary cache.
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
# Optionally, you can also override individual plugins
# for example:
inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- this will use the obsidian-nvim from your inputs
}; };
# ... # ...
@ -44,8 +37,8 @@ Followed by importing the NixOS module somewhere in your configuration.
```nix ```nix
{ {
# assuming nvf is in your inputs and inputs is in the argset # Assuming nvf is in your inputs and inputs is in the argument set.
# see example below # See example below.
imports = [ inputs.nvf.nixosModules.default ]; imports = [ inputs.nvf.nixosModules.default ];
} }
``` ```
@ -79,7 +72,6 @@ configure **nvf**.
{ {
programs.nvf = { programs.nvf = {
enable = true; enable = true;
# Your settings need to go into the settings attribute set # Your settings need to go into the settings attribute set
# most settings are documented in the appendix # most settings are documented in the appendix
settings = { settings = {

View file

@ -6,6 +6,24 @@
`vimPlugins.nvim-treesitter`. Namely, it changes from the frozen `master` `vimPlugins.nvim-treesitter`. Namely, it changes from the frozen `master`
branch to the new main branch. This change removes incremental selections, so branch to the new main branch. This change removes incremental selections, so
it is no longer available. it is no longer available.
- [obsidian.nvim] now uses a maintained fork which has removed the `dir`
setting. Use `workspaces` instead:
```nix
{
workspaces = [
{
name = "any-string";
path = "~/old/dir/path/value";
}
];
}
```
Some other settings and commands are now deprecated but are still supported.
- The `setupOpts.mappings` options were also removed. Use the built-in
Neovim settings (nvf's {option}`vim.keymaps`)
## Changelog {#sec-release-0-9-changelog} ## Changelog {#sec-release-0-9-changelog}
@ -40,3 +58,57 @@
[jtliang24](https://github.com/jtliang24): [jtliang24](https://github.com/jtliang24):
- Updated nix language plugin to use pkgs.nixfmt instead of pkgs.nixfmt-rfc-style - Updated nix language plugin to use pkgs.nixfmt instead of pkgs.nixfmt-rfc-style
[alfarel](https://github.com/alfarelcynthesis):
[obsidian.nvim]: https://github.com/obsidian-nvim/obsidian.nvim
[blink.cmp]: https://cmp.saghen.dev/
[snacks.nvim]: https://github.com/folke/snacks.nvim
[mini.nvim]: https://nvim-mini.org/mini.nvim/
[telescope.nvim]: https://github.com/nvim-telescope/telescope.nvim
[fzf-lua]: https://github.com/ibhagwan/fzf-lua
[render-markdown.nvim]: https://github.com/MeanderingProgrammer/render-markdown.nvim
[markview.nvim]: https://github.com/OXY2DEV/markview.nvim
[which-key.nvim]: https://github.com/folke/which-key.nvim
- Upgrade [obsidian.nvim] to use a maintained fork, instead of the unmaintained
upstream.
- Various upstream improvements:
- Support [blink.cmp] and completion plugin autodetection.
- Support various pickers for prompts, including [snacks.nvim]'s
`snacks.picker`, [mini.nvim]'s `mini.pick`, [telescope.nvim], and
[fzf-lua].
- Merge commands like `ObsidianBacklinks` into `Obisidian backlinks`. The
old format is still supported by default.
- Some `setupOpts` options have changed:
- `disable_frontmatter` -> `frontmatter.enabled` (and inverted), still
supported.
- `note_frontmatter_func` -> `frontmatter.func`, still supported.
- `statusline` module is now deprecated in favour of `footer`, still
supported.
- `dir` is no longer supported, use `workspaces`:
```nix
{
workspaces = [
{
name = "any-string";
path = "~/old/dir/path/value";
}
];
}
```
- `use_advanced_uri` -> `open.use_advanced_uri`.
- Mappings are now expected to be set using the built-in Neovim APIs,
managed by `vim.keymaps` in nvf, instead of `mappings` options.
- Some option defaults have changed.
- And more.
- Automatically configure an enabled picker in the order mentioned above, if
any are enabled.
- Add integration with `snacks.image` for rendering workspace/vault assets.
- Detect if [render-markdown.nvim] or [markview.nvim] are enabled and disable
the `ui` module if so. It should work without this, but `render-markdown`'s
{command}`:healthcheck` doesn't know that.
- Remove [which-key.nvim] `<leader>o` `+Notes` description which did not
actually correspond to any keybinds.

View file

@ -3,9 +3,9 @@
lib, lib,
... ...
}: let }: let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf mkMerge;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.binds) pushDownDefault;
inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.notes.obsidian; cfg = config.vim.notes.obsidian;
@ -18,13 +18,58 @@ in {
"tabular" "tabular"
]; ];
binds.whichKey.register = pushDownDefault {
"<leader>o" = "+Notes";
};
pluginRC.obsidian = entryAnywhere '' pluginRC.obsidian = entryAnywhere ''
require("obsidian").setup(${toLuaObject cfg.setupOpts}) require("obsidian").setup(${toLuaObject cfg.setupOpts})
''; '';
notes.obsidian.setupOpts = let
# may not be defined
snacks-picker.enable = config.vim.utility.snacks-nvim.setupOpts.picker.enabled or false;
mini-pick = config.vim.mini.pick;
inherit (config.vim) telescope fzf-lua;
inherit (config.vim.languages.markdown.extensions) render-markdown-nvim markview-nvim;
in
mkMerge [
# Don't set option unless we have a useful setting for it.
(mkIf (snacks-picker.enable || mini-pick.enable || telescope.enable || fzf-lua.enable) {
# It doesn't detect/choose this.
# Some pickers and completion plugins don't get detected correctly by the checkhealth, but they all work.
# Values taken from the [config's](https://github.com/obsidian-nvim/obsidian.nvim/blob/main/lua/obsidian/config/init.lua) valid ones.
picker.name =
if snacks-picker.enable
then "snacks.pick"
else if mini-pick.enable
then "mini.pick"
else if telescope.enable
then "telescope.nvim"
else if fzf-lua.enable
then "fzf-lua"
# NOTE: Shouldn't happen with the if-guard.
else null;
})
# Should be disabled automatically, but still shows up in render-markdown's checkhealth.
# This is also useful in that it will conflict with a user explicitly enabling it
# without mkForce, which is probably a copy paste issue and a sign to look at
# whether this option is useful.
(mkIf (render-markdown-nvim.enable || markview-nvim.enable) {ui.enable = false;})
];
# Resolve markdown image paths in the vault.
# Only actually used by snacks if image.enabled is set to true and
# required programs are supplied and `attachments.img_folder` is correct.
# From https://github.com/obsidian-nvim/obsidian.nvim/wiki/Images,
# which notes the API might change.
utility.snacks-nvim.setupOpts = mkIf config.vim.utility.snacks-nvim.enable {
image.resolve = mkLuaInline ''
function(path, src)
if require("obsidian.api").path_is_note(path) then
return require("obsidian.api").resolve_image_path(src)
end
end
'';
};
}; };
}; };
} }

View file

@ -1,14 +1,7 @@
{ {lib, ...}: let
config, inherit (lib.options) mkEnableOption;
lib, inherit (lib.modules) mkRenamedOptionModule mkRemovedOptionModule;
...
}: let
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) bool str nullOr;
inherit (lib.modules) mkRenamedOptionModule;
inherit (lib.nvim.types) mkPluginSetupOption; inherit (lib.nvim.types) mkPluginSetupOption;
autocompleteCfg = config.vim.autocomplete;
in { in {
imports = let imports = let
renamedSetupOption = oldPath: newPath: renamedSetupOption = oldPath: newPath:
@ -16,38 +9,60 @@ in {
(["vim" "notes" "obsidian"] ++ oldPath) (["vim" "notes" "obsidian"] ++ oldPath)
(["vim" "notes" "obsidian" "setupOpts"] ++ newPath); (["vim" "notes" "obsidian" "setupOpts"] ++ newPath);
in [ in [
(renamedSetupOption ["dir"] ["dir"]) (
mkRemovedOptionModule ["vim" "notes" "obsidian" "dir"]
''
`obsidian.nvim` has migrated to the `setupOpts.workspaces` option to support multiple vaults with a single interface.
To continue using a single vault, set:
```nix
{
notes.obsidian.setupOpts.workspaces = [
{
name = "any-string";
path = "~/old/dir/path/value";
}
];
}
```
See the [wiki](https://github.com/obsidian-nvim/obsidian.nvim/wiki/Workspace#vault-based-workspaces) for more information.
''
)
(renamedSetupOption ["daily-notes" "folder"] ["daily_notes" "folder"]) (renamedSetupOption ["daily-notes" "folder"] ["daily_notes" "folder"])
(renamedSetupOption ["daily-notes" "date-format"] ["daily_notes" "date_format"]) (renamedSetupOption ["daily-notes" "date-format"] ["daily_notes" "date_format"])
(renamedSetupOption ["completion"] ["completion"]) (renamedSetupOption ["completion"] ["completion"])
]; ];
options.vim.notes = { options.vim.notes = {
obsidian = { obsidian = {
enable = mkEnableOption "complementary neovim plugins for Obsidian editor"; enable =
mkEnableOption ""
// {
description = ''
Whether to enable plugins to complement the Obsidian markdown editor [obsidian.nvim].
setupOpts = mkPluginSetupOption "Obsidian.nvim" { Enables [vim-markdown] which automatically folds markdown headings inside and outside of workspaces/vaults.
daily_notes = { Set {option}`vim.globals.vim_markdown_folding_disable = 1;` to disable automatic folding,
folder = mkOption { or {option}`vim.globals.vim_markdown_folding_level = <heading-level-int>;` to set the default fold level for new buffers.
type = nullOr str;
default = null; nvf will choose one of `snacks.picker`, `mini.pick`, `telescope`, or `fzf-lua` as the `obsidian.nvim` picker based on whether they are enabled, in that order.
description = "Directory in which daily notes should be created";
}; You can enable one of them with one of the following:
date_format = mkOption {
type = nullOr str; - {option}`vim.utility.snacks-nvim.setupOpts.picker.enabled` and {option}`vim.utility.snacks-nvim.enable`
default = null; - {option}`vim.mini.pick.enable`
description = "Date format used for creating daily notes"; - {option}`vim.telescope.enable`
}; - {option}`vim.fzf-lua.enable`
{option}`vim.notes.obsidian.setupOpts.ui.enable` is automatically disabled if `render-markdown.nvim` or `markview.nvim` are enabled.
[vim-markdown]: https://github.com/preservim/vim-markdown?tab=readme-ov-file#options
'';
}; };
completion = { setupOpts = mkPluginSetupOption "obsidian.nvim" {};
nvim_cmp = mkOption {
# If using nvim-cmp, otherwise set to false
type = bool;
description = "If using nvim-cmp, otherwise set to false";
default = autocompleteCfg.nvim-cmp.enable || autocompleteCfg.blink-cmp.enable;
};
};
};
}; };
}; };
} }

View file

@ -46,6 +46,21 @@
# Disable failing require check hook checks # Disable failing require check hook checks
doCheck = false; doCheck = false;
}; };
# Checkhealth fails to get the plugin's commit and therefore to
# show the rest of the useful diagnostics if not built like this.
obsidian-nvim = pkgs.vimUtils.buildVimPlugin {
# If set to `"obsidian-nvim"`, this breaks like `buildPlug` and `noBuildPlug`.
name = "obsidian.nvim";
src = getPin "obsidian-nvim";
nvimSkipModules = [
"minimal"
# require picker plugins
"obsidian.picker._telescope"
"obsidian.picker._snacks"
"obsidian.picker._fzf"
"obsidian.picker._mini"
];
};
# Get plugins built from source from self.packages # Get plugins built from source from self.packages
# If adding a new plugin to be built from source, it must also be inherited # If adding a new plugin to be built from source, it must also be inherited

View file

@ -2108,17 +2108,20 @@
"hash": "1qbyh8r2gbaw2n0mm7qwi4y8r9ywyz37q35vlxjzy879ba8dlnlm" "hash": "1qbyh8r2gbaw2n0mm7qwi4y8r9ywyz37q35vlxjzy879ba8dlnlm"
}, },
"obsidian-nvim": { "obsidian-nvim": {
"type": "Git", "type": "GitRelease",
"repository": { "repository": {
"type": "GitHub", "type": "GitHub",
"owner": "epwalsh", "owner": "obsidian-nvim",
"repo": "obsidian.nvim" "repo": "obsidian.nvim"
}, },
"branch": "main", "pre_releases": false,
"version_upper_bound": null,
"release_prefix": null,
"submodules": false, "submodules": false,
"revision": "14e0427bef6c55da0d63f9a313fd9941be3a2479", "version": "v3.15.3",
"url": "https://github.com/epwalsh/obsidian.nvim/archive/14e0427bef6c55da0d63f9a313fd9941be3a2479.tar.gz", "revision": "3121b4b52a167949c4126254272346d363cc92b6",
"hash": "15ycmhn48ryaqzch6w3w6llq2qgmjx8xwkb9dn0075z60dybpflr" "url": "https://api.github.com/repos/obsidian-nvim/obsidian.nvim/tarball/v3.15.3",
"hash": "0m6lwqb2y19xrs11hj818ja36z5ql34xk81x393b20jwnd0bar5l"
}, },
"oil-git-status.nvim": { "oil-git-status.nvim": {
"type": "Git", "type": "Git",