feat: access extraPackages in neovim's terminal - add a shell wrapper

This commit is contained in:
Ryan Yin
2023-12-06 12:28:01 +08:00
parent b0e481a1f1
commit 087d38487c
7 changed files with 278 additions and 222 deletions

8
flake.lock generated
View File

@@ -45,16 +45,16 @@
"astronvim": {
"flake": false,
"locked": {
"lastModified": 1699528269,
"narHash": "sha256-cC1isyscpvNQ07n/Eb6rlfvuQ/K+7mCjdGJq4m/PUHk=",
"lastModified": 1701266895,
"narHash": "sha256-wttBcj9OoFHx+EukGzQYKHVlApphZXzZqY5zP5chU6g=",
"owner": "AstroNvim",
"repo": "AstroNvim",
"rev": "59d657c223038359b2b5e230805abca8d919280d",
"rev": "bdbc0fef3f33443251e6b45b252b98c42335b881",
"type": "github"
},
"original": {
"owner": "AstroNvim",
"ref": "v3.37.12",
"ref": "v3.39.0",
"repo": "AstroNvim",
"type": "github"
}

View File

@@ -329,7 +329,7 @@
# AstroNvim is an aesthetic and feature-rich neovim config.
astronvim = {
url = "github:AstroNvim/AstroNvim/v3.37.12";
url = "github:AstroNvim/AstroNvim/v3.39.0";
flake = false;
};

View File

@@ -15,7 +15,7 @@
#############################################################
home.packages = with pkgs; [
(python311.withPackages (
(python3.withPackages (
ps:
with ps; [
ipython

View File

@@ -7,7 +7,7 @@ return {
signcolumn = "auto", -- Show sign column when used only
spell = false, -- Spell checking
swapfile = false, -- Swapfile
smartindent = false; -- fix https://github.com/ryan4yin/nix-config/issues/4
smartindent = false, -- fix https://github.com/ryan4yin/nix-config/issues/4
},
},
@@ -24,7 +24,6 @@ return {
{ import = "astrocommunity.motion.leap-nvim" },
{ import = "astrocommunity.motion.flit-nvim" },
{ import = "astrocommunity.scrolling.nvim-scrollbar" },
{ import = "astrocommunity.editing-support.auto-save-nvim" },
{ import = "astrocommunity.editing-support.todo-comments-nvim" },
-- Language Support
---- Frontend & NodeJS
@@ -67,22 +66,36 @@ return {
"zbirenbaum/copilot.lua",
opts = function(_, opts)
opts.filetypes = {
yaml = true;
yaml = true,
markdown = true,
}
end,
},
{
"0x00-ketsu/autosave.nvim",
opts = function(_, opts)
end,
},
{
"akinsho/toggleterm.nvim",
opts = function(_, opts)
-- custom shell with all neovim's exra packags accessible
opts.shell = "nvim-nushell";
end,
},
-- markdown preview
{
'0x00-ketsu/markdown-preview.nvim',
ft = {'md', 'markdown', 'mkd', 'mkdn', 'mdwn', 'mdown', 'mdtxt', 'mdtext', 'rmd', 'wiki'},
"0x00-ketsu/markdown-preview.nvim",
ft = { "md", "markdown", "mkd", "mkdn", "mdwn", "mdown", "mdtxt", "mdtext", "rmd", "wiki" },
config = function()
require('markdown-preview').setup {
require("markdown-preview").setup({
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the setup section below
}
})
end,
},
@@ -90,7 +103,7 @@ return {
{
"gbprod/yanky.nvim",
opts = function()
local mapping = require "yanky.telescope.mapping"
local mapping = require("yanky.telescope.mapping")
local mappings = mapping.get_defaults()
mappings.i["<c-p>"] = nil
return {
@@ -140,11 +153,12 @@ return {
-- joining blocks of code into oneline, or splitting one line into multiple lines.
{
'Wansmer/treesj',
keys = { '<space>m', '<space>j', '<space>s' },
dependencies = { 'nvim-treesitter/nvim-treesitter' },
"Wansmer/treesj",
keys = { "<space>m", "<space>j", "<space>s" },
dependencies = { "nvim-treesitter/nvim-treesitter" },
config = function()
require('treesj').setup({--[[ your config ]]})
require("treesj").setup({ --[[ your config ]]
})
end,
},
@@ -159,22 +173,22 @@ return {
hide_gitignored = false,
},
},
}
},
},
-- The plugin offers the alibity to refactor code.
{
"ThePrimeagen/refactoring.nvim",
dependencies = {
{"nvim-lua/plenary.nvim"},
{"nvim-treesitter/nvim-treesitter"}
}
{ "nvim-lua/plenary.nvim" },
{ "nvim-treesitter/nvim-treesitter" },
},
},
-- The plugin offers the abilibty to search and replace.
{
"nvim-pack/nvim-spectre",
dependencies = {
{"nvim-lua/plenary.nvim"},
}
{ "nvim-lua/plenary.nvim" },
},
},
-- full signature help, docs and completion for the nvim lua API.
@@ -186,7 +200,7 @@ return {
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
local utils = require "astronvim.utils";
local utils = require("astronvim.utils")
opts.incremental_selection = {
enable = true,
keymaps = {
@@ -213,14 +227,14 @@ return {
-- implementation/definition preview
{
'rmagatti/goto-preview',
"rmagatti/goto-preview",
config = function()
require('goto-preview').setup {}
end
require("goto-preview").setup({})
end,
},
-- Undo tree
{ "debugloop/telescope-undo.nvim", },
{ "debugloop/telescope-undo.nvim" },
-- Install lsp, formmatter and others via home manager instead of Mason.nvim
-- LSP installations
@@ -245,7 +259,7 @@ return {
{
"jose-elias-alvarez/null-ls.nvim",
opts = function(_, opts)
local null_ls = require "null-ls"
local null_ls = require("null-ls")
local code_actions = null_ls.builtins.code_actions
local diagnostics = null_ls.builtins.diagnostics
local formatting = null_ls.builtins.formatting
@@ -302,8 +316,9 @@ return {
},
{
'nvim-telescope/telescope.nvim', branch = '0.1.x',
dependencies = { 'nvim-lua/plenary.nvim' },
"nvim-telescope/telescope.nvim",
branch = "0.1.x",
dependencies = { "nvim-lua/plenary.nvim" },
init = function()
-- 1. Disable highlighting for certain filetypes
-- 2. Ignore files larger than a certain filesize
@@ -322,7 +337,9 @@ return {
local new_maker = function(filepath, bufnr, opts)
opts = opts or {}
if opts.use_ft_detect == nil then opts.use_ft_detect = true end
if opts.use_ft_detect == nil then
opts.use_ft_detect = true
end
-- 1. Check if the file is in the bad_files array, and if so, don't highlight it
opts.use_ft_detect = opts.use_ft_detect == false and false or bad_files(filepath)
@@ -330,7 +347,9 @@ return {
-- 2. Check the file size, and ignore it if it's too big(preview nothing).
filepath = vim.fn.expand(filepath)
vim.loop.fs_stat(filepath, function(_, stat)
if not stat then return end
if not stat then
return
end
if stat.size > filesize_threshold then
return
else
@@ -339,13 +358,13 @@ return {
end)
end
require("telescope").setup {
require("telescope").setup({
defaults = {
buffer_previewer_maker = new_maker,
}
}
},
})
end,
}
},
},
-- Configure require("lazy").setup() options
@@ -354,7 +373,7 @@ return {
performance = {
rtp = {
-- customize default disabled vim plugins
disabled_plugins = { };
disabled_plugins = {},
},
},
},

View File

@@ -17,7 +17,12 @@ return {
["<leader>bn"] = { "<cmd>tabnew<cr>", desc = "New tab" },
-- quick save
["<C-s>"] = { ":w!<cr>", desc = "Save File" }, -- change description but the same command
["<leader>tp"] = { function() utils.toggle_term_cmd("ipython") end, desc = "ToggleTerm python" },
-- Terminal
-- NOTE: https://neovim.io/doc/user/builtin.html#jobstart()
-- 1. If {cmd} is a List it runs directly (no 'shell')
-- 2. If {cmd} is a String it runs in the 'shell'
["<leader>tp"] = { function() utils.toggle_term_cmd({ cmd = "ipython" }) end, desc = "ToggleTerm python" },
-- search and replace globally
['<leader>ss'] = {'<cmd>lua require("spectre").toggle()<CR>', desc = "Toggle Spectre" },

View File

@@ -27,16 +27,19 @@
programs = {
neovim = {
enable = true;
defaultEditor = true;
viAlias = false;
defaultEditor = true;
viAlias = true;
vimAlias = true;
withPython3 = true;
withNodeJs = true;
# currently we use lazy.nvim as neovim's package manager, so comment this one.
# plugins = with pkgs.vimPlugins; [
# # search all the plugins using https://search.nixos.org/packages
# ];
# Extra packages only available to nvim(won't pollute the global home environment)
extraPackages = with pkgs;
extraPackages = with pkgs; let
nvim_extra =
[
#-- c/c++
cmake
@@ -50,8 +53,20 @@
#-- python
nodePackages.pyright # python language server
python311Packages.black # python formatter
python311Packages.ruff-lsp
python3Packages.black # python formatter
python3Packages.ruff-lsp
(python3.withPackages (
ps:
with ps; [
pynvim # Python client and plugin host for Nvim
ipython
pandas
requests
pyquery
pyyaml
]
))
#-- rust
rust-analyzer
@@ -94,6 +109,7 @@
shfmt
#-- javascript/typescript --#
nodePackages.nodejs
nodePackages.typescript
nodePackages.typescript-language-server
# HTML/CSS/JSON/ESLint language servers extracted from vscode
@@ -136,11 +152,27 @@
verible
]
);
in
nvim_extra
++ [
# NOTE: shells installed by Nix will ignore the `PATH` env passed by parent process,
# so to access the packages we installed here in neovim's shell session(`:terminal`),
# we have to create a shell wrapper with the packages in `PATH` env.
(pkgs.runCommand "nvim-shell" rec {
nativeBuildInputs =
nvim_extra
++ [
pkgs.nushell
pkgs.bash
];
PATH = lib.makeBinPath nativeBuildInputs;
} ''
mkdir -p $out/bin
# currently we use lazy.nvim as neovim's package manager, so comment this one.
# plugins = with pkgs.vimPlugins; [
# # search all the plugins using https://search.nixos.org/packages
# ];
ln -s ${pkgs.nushell}/bin/nu $out/bin/nvim-nushell
ln -s ${pkgs.bash}/bin/bash $out/bin/nvim-bash
'')
];
};
};
}

View File

@@ -45,7 +45,7 @@
# homebrew need to be installed manually, see https://brew.sh
homebrew = {
enable = true;
enable = false;
onActivation = {
autoUpdate = false;