From 6ab7d7667d0f7c43194c20b20c90b33e72ef95ff Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Mon, 7 Aug 2023 14:56:29 +0300 Subject: [PATCH] feat: build orgmode grammar manually --- modules/notes/orgmode/config.nix | 57 +++++++++++++++++-------------- modules/notes/orgmode/orgmode.nix | 9 +++++ 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/modules/notes/orgmode/config.nix b/modules/notes/orgmode/config.nix index 355610d..1dadb50 100644 --- a/modules/notes/orgmode/config.nix +++ b/modules/notes/orgmode/config.nix @@ -7,33 +7,40 @@ with lib; with builtins; let cfg = config.vim.notes.orgmode; in { - config = mkIf (cfg.enable) { - vim.startPlugins = [ - "orgmode-nvim" - ]; + config = mkIf cfg.enable (mkMerge [ + { + vim.startPlugins = [ + "orgmode-nvim" + ]; - vim.luaConfigRC.orgmode = nvim.dag.entryAnywhere '' - -- Load custom treesitter grammar for org filetype - require('orgmode').setup_ts_grammar() + vim.luaConfigRC.orgmode = nvim.dag.entryAnywhere '' + -- Load custom treesitter grammar for org filetype + require('orgmode').setup_ts_grammar() - -- Treesitter configuration - require('nvim-treesitter.configs').setup { + -- Treesitter configuration + require('nvim-treesitter.configs').setup { - -- If TS highlights are not enabled at all, or disabled via `disable` prop, - -- highlighting will fallback to default Vim syntax highlighting - highlight = { - enable = true, - -- Required for spellcheck, some LaTex highlights and - -- code block highlights that do not have ts grammar - additional_vim_regex_highlighting = {'org'}, - }, - ensure_installed = {'org'}, -- Or run :TSUpdate org - } + -- If TS highlights are not enabled at all, or disabled via `disable` prop, + -- highlighting will fallback to default Vim syntax highlighting + highlight = { + enable = true, + -- Required for spellcheck, some LaTex highlights and + -- code block highlights that do not have ts grammar + additional_vim_regex_highlighting = {'org'}, + }, + } - require('orgmode').setup({ - org_agenda_files = ${cfg.orgAgendaFiles}, - org_default_notes_file = '${cfg.orgDefaultNotesFile}', - }) - ''; - }; + require('orgmode').setup({ + org_agenda_files = ${cfg.orgAgendaFiles}, + org_default_notes_file = '${cfg.orgDefaultNotesFile}', + }) + ''; + } + + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + + vim.treesitter.grammars = [cfg.treesitter.orgPackage]; + }) + ]); } diff --git a/modules/notes/orgmode/orgmode.nix b/modules/notes/orgmode/orgmode.nix index 3ba9e30..fee0c4b 100644 --- a/modules/notes/orgmode/orgmode.nix +++ b/modules/notes/orgmode/orgmode.nix @@ -1,21 +1,30 @@ { config, lib, + pkgs, ... }: with lib; with builtins; { options.vim.notes.orgmode = { enable = mkEnableOption "nvim-orgmode: Neovim plugin for Emac Orgmode. Get the best of both worlds"; + orgAgendaFiles = mkOption { type = types.str; default = "{'~/Documents/org/*', '~/my-orgs/**/*'}"; description = "List of org files to be used as agenda files."; }; + orgDefaultNotesFile = mkOption { type = types.str; default = "~/Documents/org/refile.org"; description = "Default org file to be used for notes."; }; + + treesitter = { + enable = mkEnableOption "Enable Orgmode treesitter" // {default = config.vim.languages.enableTreesitter;}; + + orgPackage = nvim.types.mkGrammarOption pkgs "org"; + }; }; }