From 1679f84978c07f88699e49d3442e06ac2cf3e586 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Feb 2026 11:48:11 -0800 Subject: [PATCH] working on converting app.nix --- hmModules/apps/neovim.old/app.nix | 169 +++++++++++++ hmModules/apps/neovim.old/options.lua | 60 +++++ hmModules/apps/neovim.old/plugin/lsp.nix | 53 ++++ hmModules/apps/neovim.old/plugin/nvimcmp.nix | 72 ++++++ .../apps/neovim.old/plugin/telescope.nix | 43 ++++ .../apps/neovim.old/plugin/treesitter.nix | 38 +++ hmModules/apps/neovim/app.nix | 235 ++++++++---------- 7 files changed, 545 insertions(+), 125 deletions(-) create mode 100644 hmModules/apps/neovim.old/app.nix create mode 100644 hmModules/apps/neovim.old/options.lua create mode 100644 hmModules/apps/neovim.old/plugin/lsp.nix create mode 100644 hmModules/apps/neovim.old/plugin/nvimcmp.nix create mode 100644 hmModules/apps/neovim.old/plugin/telescope.nix create mode 100644 hmModules/apps/neovim.old/plugin/treesitter.nix diff --git a/hmModules/apps/neovim.old/app.nix b/hmModules/apps/neovim.old/app.nix new file mode 100644 index 0000000..d655103 --- /dev/null +++ b/hmModules/apps/neovim.old/app.nix @@ -0,0 +1,169 @@ +{ config, pkgs, lib, ... }: + +{ + options.neovim = { + enable = lib.mkEnableOption "Enables neovim"; + languages = { + c.enable = lib.mkEnableOption "Enables c support"; + go.enable = lib.mkEnableOption "Enables go support"; + nix.enable = lib.mkEnableOption "Enables nix support"; + rust.enable = lib.mkEnableOption "Enables rust support"; + typescript.enable = lib.mkEnableOption "Enables typescript support"; + }; + themes = { + catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; + }; + plugins = { + comments.enable = lib.mkEnableOption "Enables nvim-comment"; + fugitive.enable = lib.mkEnableOption "Enables git-fugitive"; + lualine.enable = lib.mkEnableOption "Enables lualine"; + luasnip.enable = lib.mkEnableOption "Enables luasnip snippets"; + nvimcmp.enable = lib.mkEnableOption "Enables nvim completion"; + telescope = { + enable = lib.mkEnableOption "Enables telescope"; + fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; + }; + treesitter.enable = lib.mkEnableOption "Enables treesitter"; + wiki.enable = lib.mkEnableOption "Enables a wiki"; + }; + }; + + imports = [ + ./plugin/lsp.nix + ./plugin/nvimcmp.nix + ./plugin/telescope.nix + ./plugin/treesitter.nix + ]; + + config = lib.mkIf config.neovim.enable { + home.sessionVariables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + }; + + programs.neovim = { + enable = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + + extraLuaConfig = '' + ${builtins.readFile ./options.lua} + ''; + + extraPackages = with pkgs; [ + (lib.mkIf config.neovim.languages.c.enable libclang) + (lib.mkIf config.neovim.languages.go.enable gopls) + (lib.mkIf config.neovim.languages.nix.enable nil) + (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) + ]; + + # Additional packages are added through imports + plugins = let + lopts = lib.lists.optionals; + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; + cfgt = config.neovim.themes; + + comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [ + { + plugin = comment-nvim; + type = "lua"; + config = "require(\"Comment\").setup()"; + } + ]); + + fugitive = lopts cfgp.fugitive.enable (with pkgs.vimPlugins; [ + vim-fugitive + ]); + + luasnip-pkg = lopts cfgp.luasnip.enable (with pkgs.vimPlugins; [ + luasnip + friendly-snippets + (lib.mkIf cfgp.nvimcmp.enable cmp_luasnip) + ]); + + lualine = lopts cfgp.lualine.enable (with pkgs.vimPlugins; [ + { + plugin = lualine-nvim; + type = "lua"; + config = '' + require("lualine").setup { + options = { + icons_enabled = true, + '' + lib.strings.optionalString cfgt.catppuccin.enable '' + theme = "catppuccin" + '' + '' + } + } + ''; + } + nvim-web-devicons + ]); + + nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ + vim-nix + ]); + + rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ + { + plugin = rustaceanvim; + type = "lua"; + config = '' + vim.g.rust_recommended_style = 0 + ''; + } + ]); + + go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ + go-nvim + ]); + + typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [ + { + plugin = typescript-tools-nvim; + type = "lua"; + config = '' + require("typescript-tools").setup {} + ''; + } + ]); + + catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [ + { + plugin = catppuccin-nvim; + type = "lua"; + config = '' + vim.cmd.colorscheme "catppuccin-mocha" + require('catppuccin').setup({ + integrations = { + '' + lib.strings.optionalString cfgp.wiki.enable '' + vimwiki = true + '' + '' + } + }) + ''; + } + ]); + + wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ + { + plugin = vimwiki; + type = "lua"; + config = '' + vim.g.vimwiki_list = { + { + path = '${config.xdg.userDirs.documents}/wiki', + links_space_char = '_', + ext = '.md', + syntax = 'markdown', + } + } + ''; + } + ]); + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ rust-pkg + ++ go-pkg ++ wiki ++ catppuccin-pkg ++ typescript-pkg; + }; + }; +} diff --git a/hmModules/apps/neovim.old/options.lua b/hmModules/apps/neovim.old/options.lua new file mode 100644 index 0000000..db669e2 --- /dev/null +++ b/hmModules/apps/neovim.old/options.lua @@ -0,0 +1,60 @@ +-- Globals +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' +vim.opt.list = true +vim.bo.filetype = "on" +vim.opt.updatetime = 300 + +-- Indentations +vim.opt.tabstop = 2 +vim.opt.softtabstop = 0 +vim.opt.shiftwidth = 2 +vim.opt.smarttab = true +vim.opt.expandtab = true + +-- Style +vim.opt.colorcolumn = "80" +vim.opt.showmatch = true +vim.opt.number = true +vim.opt.relativenumber = true + +-- Easy Split Navigation +-- nnoremap +-- nnoremap +-- nnoremap +-- nnoremap + +-- Searching +vim.opt.smartcase = true + +-- Backups +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undofile = true +vim.opt.undodir = '/home/pan/.config/nvim/undodir' + +-- Error viewing +vim.keymap.set('n', 'd', function() vim.diagnostic.open_float() end) + +-- Easy copy and pasting to external programs +-- map "+yy +-- map "+P + +-- autocmd BufRead,BufNewFile *.md call WritingMode() +-- autocmd BufRead,BufNewFile *.tex call WritingMode() +-- autocmd BufRead,BufNewFile *.svx call WritingMode() + +-- autocmd BufRead,BufNewFile *.py call PythonMode() + +-- function! WritingMode() + -- setlocal textwidth=80 + -- setlocal wrap linebreak nolist + -- setlocal whichwrap+=<,>,h,l + -- nnoremap j gj + -- nnoremap k gk + -- setlocal spell spelllang=en_us +-- endfunction +-- function! PythonMode() + -- setlocal foldmethod=indent + -- setlocal foldlevel=99 +-- endfunction diff --git a/hmModules/apps/neovim.old/plugin/lsp.nix b/hmModules/apps/neovim.old/plugin/lsp.nix new file mode 100644 index 0000000..f5a66c5 --- /dev/null +++ b/hmModules/apps/neovim.old/plugin/lsp.nix @@ -0,0 +1,53 @@ +{ config, pkgs, lib, ... }: + +{ + config = lib.mkIf config.neovim.enable { + programs.neovim.plugins = let + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; + + configText = '' + local on_attach = function(_, bufnr) + + local bufmap = function(keys, func) + vim.keymap.set('n', keys, func, { buffer = bufnr }) + end + + bufmap('r', vim.lsp.buf.rename) + bufmap('a', vim.lsp.buf.code_action) + + bufmap('gd', vim.lsp.buf.definition) + bufmap('gD', vim.lsp.buf.declaration) + bufmap('gI', vim.lsp.buf.implementation) + bufmap('D', vim.lsp.buf.type_definition) + + '' + lib.strings.optionalString cfgp.telescope.enable '' + bufmap('gr', require('telescope.builtin').lsp_references) + bufmap('s', require('telescope.builtin').lsp_document_symbols) + bufmap('S', require('telescope.builtin').lsp_dynamic_workspace_symbols) + '' + '' + + bufmap('K', vim.lsp.buf.hover) + + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, {}) + end + + local capabilities = vim.lsp.protocol.make_client_capabilities() + '' + lib.strings.optionalString cfgl.c.enable '' + require('lspconfig').clangd.setup {} + '' + lib.strings.optionalString cfgl.go.enable '' + require('lspconfig').gopls.setup {} + '' + lib.strings.optionalString cfgl.nix.enable '' + require('lspconfig').nil_ls.setup {} + ''; + in with pkgs.vimPlugins; [ + { + plugin = nvim-lspconfig; + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/hmModules/apps/neovim.old/plugin/nvimcmp.nix b/hmModules/apps/neovim.old/plugin/nvimcmp.nix new file mode 100644 index 0000000..82098ef --- /dev/null +++ b/hmModules/apps/neovim.old/plugin/nvimcmp.nix @@ -0,0 +1,72 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; +in { + config = lib.mkIf (config.neovim.enable && cfgp.nvimcmp.enable) { + programs.neovim.plugins = let + + configText = '' + local cmp = require('cmp') + '' + lib.strings.optionalString cfgp.luasnip.enable '' + local luasnip = require('luasnip') + + require('luasnip.loaders.from_vscode').lazy_load() + luasnip.config.setup {} + '' + '' + + cmp.setup { + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete {}, + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + '' + lib.strings.optionalString cfgp.luasnip.enable '' + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + '' + '' + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + '' + lib.strings.optionalString cfgp.luasnip.enable '' + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + '' + '' + else + fallback() + end + end, { 'i', 's' }), + }, + '' + lib.strings.optionalString cfgp.luasnip.enable '' + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + sources = { + { name = 'luasnip' }, + }, + '' + '' + } + ''; + in with pkgs.vimPlugins; [ + { + plugin = nvim-cmp; + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/hmModules/apps/neovim.old/plugin/telescope.nix b/hmModules/apps/neovim.old/plugin/telescope.nix new file mode 100644 index 0000000..48a96e9 --- /dev/null +++ b/hmModules/apps/neovim.old/plugin/telescope.nix @@ -0,0 +1,43 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; +in { + config = lib.mkIf (config.neovim.enable && cfgp.telescope.enable) { + programs.neovim.plugins = let + configText = '' + require('telescope').setup({ + extensions = { + '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + -- the default case_mode is "smart_case" + } + '' + '' + } + }) + local builtin = require('telescope.builtin') + vim.keymap.set('n', 'ff', builtin.find_files, {}) + vim.keymap.set('n', 'fg', builtin.git_files, {}) + + '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' + require('telescope').load_extension('fzf') + ''; + in with pkgs.vimPlugins; [ + { + plugin = telescope-nvim; + type = "lua"; + config = configText; + } + (lib.mkIf cfgp.nvimcmp.enable telescope-fzf-native-nvim) + ]; + + home.packages = with pkgs; [ + (lib.mkIf cfgp.telescope.fzf.enable fzf) + ]; + + }; +} diff --git a/hmModules/apps/neovim.old/plugin/treesitter.nix b/hmModules/apps/neovim.old/plugin/treesitter.nix new file mode 100644 index 0000000..a6bb8c0 --- /dev/null +++ b/hmModules/apps/neovim.old/plugin/treesitter.nix @@ -0,0 +1,38 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; +in { + config = lib.mkIf (config.neovim.enable && cfgp.treesitter.enable) { + programs.neovim.plugins = let + configText = '' + require('nvim-treesitter.configs').setup { + ensure_installed = {}, + + auto_install = false, + + highlight = { enable = true }, + + indent = { enable = true }, + } + ''; + + # I've tried many things, and can't get treesitter plugins changing + # dynamically. For not just have them always loaded regardless of config + treeplugs = p: [ + p.tree-sitter-c + p.tree-sitter-go + p.tree-sitter-nix + p.tree-sitter-rust + p.tree-sitter-typescript + ]; + in with pkgs.vimPlugins; [ + { + plugin = (nvim-treesitter.withPlugins treeplugs); + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index d655103..6d078ae 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -28,12 +28,12 @@ }; }; - imports = [ - ./plugin/lsp.nix - ./plugin/nvimcmp.nix - ./plugin/telescope.nix - ./plugin/treesitter.nix - ]; + # imports = [ + # ./plugin/lsp.nix + # ./plugin/nvimcmp.nix + # ./plugin/telescope.nix + # ./plugin/treesitter.nix + # ]; config = lib.mkIf config.neovim.enable { home.sessionVariables = { @@ -41,129 +41,114 @@ VISUAL = "nvim"; }; - programs.neovim = { + programs.nixvim = { enable = true; viAlias = true; vimAlias = true; vimdiffAlias = true; - - extraLuaConfig = '' - ${builtins.readFile ./options.lua} - ''; - - extraPackages = with pkgs; [ - (lib.mkIf config.neovim.languages.c.enable libclang) - (lib.mkIf config.neovim.languages.go.enable gopls) - (lib.mkIf config.neovim.languages.nix.enable nil) - (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) - ]; - - # Additional packages are added through imports - plugins = let - lopts = lib.lists.optionals; - cfgp = config.neovim.plugins; - cfgl = config.neovim.languages; - cfgt = config.neovim.themes; - - comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [ - { - plugin = comment-nvim; - type = "lua"; - config = "require(\"Comment\").setup()"; - } - ]); - - fugitive = lopts cfgp.fugitive.enable (with pkgs.vimPlugins; [ - vim-fugitive - ]); - - luasnip-pkg = lopts cfgp.luasnip.enable (with pkgs.vimPlugins; [ - luasnip - friendly-snippets - (lib.mkIf cfgp.nvimcmp.enable cmp_luasnip) - ]); - - lualine = lopts cfgp.lualine.enable (with pkgs.vimPlugins; [ - { - plugin = lualine-nvim; - type = "lua"; - config = '' - require("lualine").setup { - options = { - icons_enabled = true, - '' + lib.strings.optionalString cfgt.catppuccin.enable '' - theme = "catppuccin" - '' + '' - } - } - ''; - } - nvim-web-devicons - ]); - - nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ - vim-nix - ]); - - rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ - { - plugin = rustaceanvim; - type = "lua"; - config = '' - vim.g.rust_recommended_style = 0 - ''; - } - ]); - - go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ - go-nvim - ]); - - typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [ - { - plugin = typescript-tools-nvim; - type = "lua"; - config = '' - require("typescript-tools").setup {} - ''; - } - ]); - - catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [ - { - plugin = catppuccin-nvim; - type = "lua"; - config = '' - vim.cmd.colorscheme "catppuccin-mocha" - require('catppuccin').setup({ - integrations = { - '' + lib.strings.optionalString cfgp.wiki.enable '' - vimwiki = true - '' + '' - } - }) - ''; - } - ]); - - wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ - { - plugin = vimwiki; - type = "lua"; - config = '' - vim.g.vimwiki_list = { - { - path = '${config.xdg.userDirs.documents}/wiki', - links_space_char = '_', - ext = '.md', - syntax = 'markdown', - } - } - ''; - } - ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ rust-pkg - ++ go-pkg ++ wiki ++ catppuccin-pkg ++ typescript-pkg; }; + # extraLuaConfig = '' + # ${builtins.readFile ./options.lua} + # ''; + + programs.nixvim.colorschemes = with config.neovim.themes; { + catppuccin = lib.mkIf catppuccin.enable { + enable = true; + flavour = "mocha"; + integrations.vimwiki = lib.mkIf wiki.enable true; + } + }; + + programs.nixvim.plugins = with config.neovim.plugins; { + comment.enable = comments.enable; + + fugitive.enable = fugitive.enable; + + lualine = lib.mkIf lualine.enable { + enable = true; + icons_enabled = true; + }; + web-devicons.enable = lualine.enable; + + luasnip.enable = luasnip.enable; + friendly-snippets.enable = luasnip.enable; + + cmp = { + enable = nvimcmp.enable; + autoEnableSources = true; + settings.sources = lib.options luasnip.enable { name = "cmp-luasnip" }; + }; + + + + + # telescope = { + # enable = lib.mkEnableOption "Enables telescope"; + # fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; + # }; + # treesitter.enable = lib.mkEnableOption "Enables treesitter"; + # wiki.enable = lib.mkEnableOption "Enables a wiki"; + # + # + # wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ + # { + # plugin = vimwiki; + # type = "lua"; + # config = '' + # vim.g.vimwiki_list = { + # { + # path = '${config.xdg.userDirs.documents}/wiki', + # links_space_char = '_', + # ext = '.md', + # syntax = 'markdown', + # } + # } + # ''; + # } + # ]); + } + + # extraPackages = with pkgs; [ + # (lib.mkIf config.neovim.languages.c.enable libclang) + # (lib.mkIf config.neovim.languages.go.enable gopls) + # (lib.mkIf config.neovim.languages.nix.enable nil) + # (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) + # ]; + # + # # Additional packages are added through imports + # plugins = let + # lopts = lib.lists.optionals; + # cfgp = config.neovim.plugins; + # cfgl = config.neovim.languages; + # cfgt = config.neovim.themes; + # + # nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ + # vim-nix + # ]); + # + # rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ + # { + # plugin = rustaceanvim; + # type = "lua"; + # config = '' + # vim.g.rust_recommended_style = 0 + # ''; + # } + # ]); + # + # go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ + # go-nvim + # ]); + # + # typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [ + # { + # plugin = typescript-tools-nvim; + # type = "lua"; + # config = '' + # require("typescript-tools").setup {} + # ''; + # } + # ]); + # }; }; }