diff --git a/modules/default.nix b/modules/default.nix index 327a548..4e2ff10 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -38,6 +38,7 @@ in { ./user/kitty.nix ./user/mpv.nix ./user/neovim.nix + ./user/neovim-minimal.nix ./user/npm.nix ./user/packages-rin.nix ./user/pass.nix diff --git a/modules/user/neovim-minimal.nix b/modules/user/neovim-minimal.nix new file mode 100644 index 0000000..cfbae30 --- /dev/null +++ b/modules/user/neovim-minimal.nix @@ -0,0 +1,44 @@ +{ config, lib, pkgs, ... }: { + systemd.user.tmpfiles.rules = [ + "D %t/vim/swap 0755 - - - -" + "D %t/vim/undo 0755 - - - -" + ]; + programs.neovim = { + enable = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + withNodeJs = false; + + plugins = with pkgs.vimPlugins; [ + ctrlp-vim + lualine-nvim + nerdtree + tokyonight-nvim + vim-fugitive + vim-nix + vim-repeat + vim-signify + vim-surround + + nvim-cmp + nvim-lspconfig + cmp-nvim-lsp + cmp_luasnip + luasnip + + (pkgs.me.nvim-treesitter-nightly.withPlugins (p: with p; [ + tree-sitter-comment + tree-sitter-json + tree-sitter-lua + tree-sitter-nix + tree-sitter-toml + tree-sitter-yaml + ])) + ]; + + extraConfig = '' + luafile ${../../res/config-minimal.lua} + ''; + }; +} diff --git a/res/config-minimal.lua b/res/config-minimal.lua new file mode 100644 index 0000000..7aade79 --- /dev/null +++ b/res/config-minimal.lua @@ -0,0 +1,98 @@ +-- Keybindings +local map = vim.api.nvim_set_keymap +map('n', '', 'h', { noremap = true }) +map('n', '', 'j', { noremap = true }) +map('n', '', 'k', { noremap = true }) +map('n', '', 'l', { noremap = true }) +map('n', '', ':q', { noremap = true }) + +-- Autocommands +vim.cmd('au BufEnter * set noro') + +-- Settings +vim.opt.relativenumber = true +vim.opt.number = true +vim.opt.cursorline = true +vim.opt.signcolumn = "yes:3" +vim.opt.title = true +vim.opt.updatetime = 0 +vim.opt.clipboard:prepend('unnamedplus') + +local runtimedir = os.getenv('XDG_RUNTIME_DIR') +vim.opt.directory:prepend(runtimedir..'/vim/swap//') +vim.opt.undodir:prepend(runtimedir..'/vim/undo//') +vim.opt.swapfile = true +vim.opt.undofile = true + +vim.opt.hlsearch = true +vim.opt.ignorecase = true +vim.opt.smartcase = true +vim.opt.incsearch = true + +vim.opt.tabstop = 8 +vim.opt.softtabstop = 0 +vim.opt.expandtab = true +vim.opt.shiftwidth = 4 +vim.opt.smarttab = true + +vim.g.signify_priority = 5 +vim.g.signify_sign_show_count = 0 +vim.g.signify_sign_add = '┃' +vim.g.signify_sign_delete = vim.g.signify_sign_add +vim.g.signify_sign_delete_first_line = '┏━' +vim.g.signify_sign_change = vim.g.signify_sign_add +vim.g.signify_sign_change_delete = vim.g.signify_sign_delete + +-- Theming +vim.g.tokyonight_style = 'night' +vim.cmd[[ + syntax enable + colorscheme tokyonight +]] +local colors = require("tokyonight.colors").setup {} +vim.cmd("highlight SignifySignAdd guifg="..colors.green) +vim.cmd("highlight SignifySignChange guifg="..colors.orange) +vim.cmd("highlight SignifySignDelete guifg="..colors.red) +vim.cmd("highlight SignifySignDeleteFirstLine guifg="..colors.red) +vim.cmd("highlight SignifySignChangeDelete guifg="..colors.red) + +-- Plugins +require('nvim-treesitter.configs').setup { + highlight = { enable = true }, + indent = { enable = false } +} +require('lualine').setup { + options = { + theme = 'tokyonight' + } +} + +-- LSP +local nvim_lsp = require('lspconfig') + +local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + local opts = { noremap = true, silent = true } + + buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) + buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'e', 'lua vim.diagnostic.open_float(0, { scope = "line" })', opts) + buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) + buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) + buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) +end diff --git a/users/hana/default.nix b/users/hana/default.nix index 8e4b267..4bef521 100644 --- a/users/hana/default.nix +++ b/users/hana/default.nix @@ -18,7 +18,7 @@ imports = with modules.user; [ direnv git - neovim + neovim-minimal sessionVariables zsh ];