From 941e573e22d1c4b01e05b8cacc7a317bfb8eeaf8 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Fri, 6 Dec 2024 21:49:13 +0100 Subject: Experimental neovim configuration with lua Currently, using the neovim appimage, nvimserver cannot be installed --- install | 18 +++++----------- nvim/init.lua | 3 +++ nvim/lazy-lock.json | 5 +++++ nvim/lua/config/lazy.lua | 47 ++++++++++++++++++++++++++++++++++++++++ nvim/lua/plugins/R.lua | 48 +++++++++++++++++++++++++++++++++++++++++ nvim/lua/plugins/treesitter.lua | 10 +++++++++ 6 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 nvim/init.lua create mode 100644 nvim/lazy-lock.json create mode 100644 nvim/lua/config/lazy.lua create mode 100644 nvim/lua/plugins/R.lua create mode 100644 nvim/lua/plugins/treesitter.lua diff --git a/install b/install index e35190d..09e0a9c 100755 --- a/install +++ b/install @@ -6,21 +6,20 @@ cd $(dirname $BASH_SOURCE) BASE=$(pwd) # dotfiles to install -for dotfile in bashrc vimrc gitconfig gitignore Rprofile tmux.conf reportbugrc; do +for dotfile in gitconfig gitignore Rprofile reportbugrc; do mkdir -pv bak [ -e ~/.$dotfile ] && mv -v ~/.$dotfile bak/.$dotfile ln -sfv $BASE/$dotfile ~/.$dotfile done # nvim config -if [ ! -e ~/.config/nvim ]; then - ln -sfv ~/.vim ~/.config/nvim +if [ ! -e ~/.config ]; then + mkdir -pv ~/.config fi -if [ ! -e ~/.config/nvim/init.vim ]; then - ln -sfv ~/.vimrc ~/.config/nvim/init.vim +if [ ! -e ~/.config/nvim ]; then + ln -sfv $BASE/nvim ~/.config/nvim fi - # git-prompt if [ ! -e ~/.git-prompt.sh ]; then curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -o ~/.git-prompt.sh @@ -31,10 +30,3 @@ mkdir -pv ~/bin for bin in $BASE/bin/*; do ln -svf $bin ~/bin done - -# install vim-plug -if [ ! -e ~/.vim/autoload/plug.vim ]; then - echo Installing plug.vim from https://github.com/junegunn/vim-plug to ~/.vim/autoload/ - curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ - https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim -fi diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..a9edd2d --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,3 @@ +require("config.lazy") + + diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json new file mode 100644 index 0000000..d8bbbbe --- /dev/null +++ b/nvim/lazy-lock.json @@ -0,0 +1,5 @@ +{ + "R.nvim": { "branch": "main", "commit": "e1655b5616dff71edae0f52a651afc8d7433037c" }, + "lazy.nvim": { "branch": "main", "commit": "a44e9cd165e11fa61ccfbea2a3cc1aaa3bcfc4f1" }, + "nvim-treesitter": { "branch": "master", "commit": "53e20aa728713af5cb4a3e0e2dcfea18975d49fc" } +} diff --git a/nvim/lua/config/lazy.lua b/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..11d41e0 --- /dev/null +++ b/nvim/lua/config/lazy.lua @@ -0,0 +1,47 @@ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +vim.g.mapleader = " " +vim.g.maplocalleader = "," + +-- Create some keymaps for moving between vim windows without , as it +-- closes the browser tab if vim is run via a browser. +vim.api.nvim_set_keymap('n', '', 'h', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', '', 'j', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', '', 'k', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', '', 'l', { noremap = true, silent = true }) + +-- +vim.opt.ts = 2 +vim.opt.sw = 2 +vim.opt.expandtab = true + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, +}) diff --git a/nvim/lua/plugins/R.lua b/nvim/lua/plugins/R.lua new file mode 100644 index 0000000..b4dec39 --- /dev/null +++ b/nvim/lua/plugins/R.lua @@ -0,0 +1,48 @@ +-- Adapted from the R.nvim README.md file on github +return { + "R-nvim/R.nvim", + -- Only required if you also set defaults.lazy = true + lazy = false, + -- R.nvim is still young and we may make some breaking changes from time + -- to time. For now we recommend pinning to the latest minor version + -- like so: + version = "~0.1.0", + config = function() + -- Create a table with the options to be passed to setup() + ---@type RConfigUserOpts + local opts = { + hook = { + on_filetype = function() + vim.api.nvim_buf_set_keymap(0, "n", "", "RDSendLine", {}) + vim.api.nvim_buf_set_keymap(0, "n", "", "w", {}) + vim.api.nvim_buf_set_keymap(0, "v", "", "RSendSelection", {}) + end + }, + R_args = {"--quiet", "--no-save"}, + min_editor_width = 72, + rconsole_width = 78, + objbr_mappings = { -- Object browser keymap + c = 'class', -- Call R functions + ['gg'] = 'head({object}, n = 15)', -- Use {object} notation to write arbitrary R code. + v = function() + -- Run lua functions + require('r.browser').toggle_view() + end + }, + disable_cmds = { + "RClearConsole", + "RCustomStart", + "RSPlot", + "RSaveClose", + }, + } + -- Check if the environment variable "R_AUTO_START" exists. + -- If using fish shell, you could put in your config.fish: + -- alias r "R_AUTO_START=true nvim" + if vim.env.R_AUTO_START == "true" then + opts.auto_start = "on startup" + opts.objbr_auto_start = true + end + require("r").setup(opts) + end, +} diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..07c4586 --- /dev/null +++ b/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,10 @@ +return { + "nvim-treesitter/nvim-treesitter", + run = ":TSUpdate", + config = function () + require("nvim-treesitter.configs").setup({ + ensure_installed = { "markdown", "markdown_inline", "r", "rnoweb", "yaml", "csv" }, + highlight = { enable = true }, + }) + end +} -- cgit v1.2.1