From 89f68f71332687197f60617c305e638a0014222f Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Mon, 11 Nov 2024 01:38:52 +0300 Subject: [PATCH] neovim/init: set basic options via `vim.options` Less DAGs, more customizability. --- modules/neovim/init/basic.nix | 79 ++++++++++++++++------------------- 1 file changed, 36 insertions(+), 43 deletions(-) diff --git a/modules/neovim/init/basic.nix b/modules/neovim/init/basic.nix index 2114dcb..77d1eeb 100644 --- a/modules/neovim/init/basic.nix +++ b/modules/neovim/init/basic.nix @@ -3,11 +3,12 @@ lib, ... }: let - inherit (lib.options) mkOption mkEnableOption literalExpression literalMD; + inherit (lib.options) mkOption mkEnableOption literalMD; inherit (lib.strings) optionalString; inherit (lib.types) enum bool str int either; inherit (lib.generators) mkLuaInline; inherit (lib.nvim.dag) entryAfter; + inherit (lib.nvim.binds) pushDownDefault; inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.types) luaInline; @@ -79,7 +80,7 @@ in { lineNumberMode = mkOption { type = enum ["relative" "number" "relNumber" "none"]; default = "relNumber"; - example = literalExpression "none"; + example = "none"; description = "How line numbers are displayed."; }; @@ -128,7 +129,7 @@ in { mapTimeout = mkOption { type = int; default = 500; - description = "Timeout in ms that neovim will wait for mapped action to complete"; + description = "Timeout in ms that Neovim will wait for mapped action to complete"; }; splitBelow = mkOption { @@ -181,46 +182,50 @@ in { }; }; - config = { - vim.luaConfigRC.basic = entryAfter ["globalsScript"] '' + config.vim = { + # Set options that were previously interpolated in 'luaConfigRC.basic' as vim.options (vim.o) + # and 'vim.globals' (vim.g). Future options, if possible, should be added here instead of the + # luaConfigRC section below. + options = pushDownDefault { + encoding = "utf-8"; + hidden = true; + expandtab = true; + mouse = cfg.mouseSupport; + tabstop = cfg.tabWidth; + shiftwidth = cfg.tabWidth; + softtabstop = cfg.tabWidth; + cmdheight = cfg.cmdHeight; + updatetime = cfg.updateTime; + tm = cfg.mapTimeout; + cursorlineopt = cfg.cursorlineOpt; + splitbelow = cfg.splitBelow; + splitright = cfg.splitRight; + autoindent = cfg.autoIndent; + termguicolors = cfg.colourTerm; + wrap = cfg.wordWrap; + }; + + globals = pushDownDefault { + mapleader = cfg.leaderKey; + maplocalleader = cfg.leaderKey; + editorconfig = cfg.enableEditorconfig; + }; + + # Options that are more difficult to set through 'vim.options'. Fear not, though + # as the Lua DAG is still as powerful as it could be. + luaConfigRC.basic = entryAfter ["globalsScript"] '' -- Settings that are set for everything - vim.o.encoding = "utf-8" - vim.o.hidden = true vim.opt.shortmess:append("c") - vim.o.expandtab = true - vim.o.mouse = ${toLuaObject cfg.mouseSupport} - vim.o.tabstop = ${toLuaObject cfg.tabWidth} - vim.o.shiftwidth = ${toLuaObject cfg.tabWidth} - vim.o.softtabstop = ${toLuaObject cfg.tabWidth} - vim.o.cmdheight = ${toLuaObject cfg.cmdHeight} - vim.o.updatetime = ${toLuaObject cfg.updateTime} - vim.o.tm = ${toLuaObject cfg.mapTimeout} - vim.o.cursorlineopt = ${toLuaObject cfg.cursorlineOpt} - vim.o.scrolloff = ${toLuaObject cfg.scrollOffset} - vim.g.mapleader = ${toLuaObject cfg.leaderKey} - vim.g.maplocalleader = ${toLuaObject cfg.leaderKey} ${optionalString cfg.undoFile.enable '' vim.o.undofile = true vim.o.undodir = ${toLuaObject cfg.undoFile.path} ''} - ${optionalString cfg.splitBelow '' - vim.o.splitbelow = true - ''} - - ${optionalString cfg.splitRight '' - vim.o.splitright = true - ''} - ${optionalString cfg.showSignColumn '' vim.o.signcolumn = "yes" ''} - ${optionalString cfg.autoIndent '' - vim.o.autoindent = true - ''} - ${optionalString cfg.preventJunkFiles '' vim.o.swapfile = false vim.o.backup = false @@ -261,23 +266,11 @@ in { vim.cmd("syntax on") ''} - ${optionalString (!cfg.wordWrap) '' - vim.o.wrap = false - ''} - ${optionalString cfg.hideSearchHighlight '' vim.o.hlsearch = false vim.o.incsearch = true ''} - ${optionalString cfg.colourTerm '' - vim.o.termguicolors = true - ''} - - ${optionalString (!cfg.enableEditorconfig) '' - vim.g.editorconfig = false - ''} - ${optionalString (cfg.searchCase == "ignore") '' vim.o.smartcase = false vim.o.ignorecase = true