made startify default; working on mini-files

This commit is contained in:
Ellis Rahhal 2025-02-23 13:59:49 -08:00
parent a222c3d0c0
commit 9f232f8f96
10 changed files with 690 additions and 65 deletions

316
flake.lock generated
View file

@ -1,6 +1,320 @@
{ {
"nodes": { "nodes": {
"root": {} "devshell": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1735644329,
"narHash": "sha256-tO3HrHriyLvipc4xr+Ewtdlo7wM1OjXNjlWRgmM7peY=",
"owner": "numtide",
"repo": "devshell",
"rev": "f7795ede5b02664b57035b3b757876703e2c3eac",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"flake-compat": {
"locked": {
"lastModified": 1733328505,
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"revCount": 69,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1738453229,
"narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": [
"nixvim",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1737465171,
"narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"nixvim",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1738878603,
"narHash": "sha256-fmhq8B3MvQLawLbMO+LWLcdC2ftLMmwSk+P29icJ3tE=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "433799271274c9f2ab520a49527ebfe2992dcfbd",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"ixx": {
"inputs": {
"flake-utils": [
"nixvim",
"nuschtosSearch",
"flake-utils"
],
"nixpkgs": [
"nixvim",
"nuschtosSearch",
"nixpkgs"
]
},
"locked": {
"lastModified": 1729958008,
"narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=",
"owner": "NuschtOS",
"repo": "ixx",
"rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"ref": "v0.0.6",
"repo": "ixx",
"type": "github"
}
},
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1738743987,
"narHash": "sha256-O3bnAfsObto6l2tQOmQlrO6Z2kD6yKwOWfs7pA0CpOc=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "ae406c04577ff9a64087018c79b4fdc02468c87c",
"type": "github"
},
"original": {
"owner": "lnl7",
"repo": "nix-darwin",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1740126099,
"narHash": "sha256-ozoOtE2hGsqh4XkTJFsrTkNxkRgShxpQxDynaPZUGxk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "32fb99ba93fea2798be0e997ea331dd78167f814",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1738797219,
"narHash": "sha256-KRwX9Z1XavpgeSDVM/THdFd6uH8rNm/6R+7kIbGa+2s=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1da52dd49a127ad74486b135898da2cef8c62665",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"devshell": "devshell",
"flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks",
"home-manager": "home-manager",
"nix-darwin": "nix-darwin",
"nixpkgs": "nixpkgs_2",
"nuschtosSearch": "nuschtosSearch",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1739902813,
"narHash": "sha256-BgOQcKKz7VNvSHIbBllHisv32HvF3W3ALF9sdnC++V8=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "0ab9947137cd034ec64eb5cd9ede94e53af21f50",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"nuschtosSearch": {
"inputs": {
"flake-utils": "flake-utils",
"ixx": "ixx",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1738508923,
"narHash": "sha256-4DaDrQDAIxlWhTjH6h/+xfG05jt3qDZrZE/7zDLQaS4=",
"owner": "NuschtOS",
"repo": "search",
"rev": "86e2038290859006e05ca7201425ea5b5de4aecb",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"repo": "search",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"nixvim": "nixvim"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1738680491,
"narHash": "sha256-8X7tR3kFGkE7WEF5EXVkt4apgaN85oHZdoTGutCFs6I=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "64dbb922d51a42c0ced6a7668ca008dded61c483",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
}
}, },
"root": "root", "root": "root",
"version": 7 "version": 7

View file

@ -6,7 +6,6 @@
nixvim = { nixvim = {
url = "github:nix-community/nixvim"; url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
}; };
}; };

72
plugins/avante-custom.nix Normal file
View file

@ -0,0 +1,72 @@
{ config, pkgs,... }:
{
programs.nixvim = if config.nixvim-config.enable-ai then {
extraPlugins = [
pkgs.vimPlugins.avante-nvim
# (pkgs.vimUtils.buildVimPlugin {
# name = "avante";
# src = pkgs.fetchFromGitHub {
# owner = "yetone";
# repo = "avante.nvim";
# rev = "v0.0.19";
# hash = "sha256-/WvkMsyhaYa3TLOg6QBVz1dvHO4vr1PdeSF7zVIOUcY=";
# };
# })
];
# Use "post" to make sure dependencies are loaded first
extraConfigLuaPost = ''
-- MunifTanjim/nui.nvim
-- stevearc/dressing.nvim
-- nvim-lua/plenary.nvim
require('nui').setup({});
require('dressing').setup({});
require('plenary').setup({});
require('avante_lib').load()
require('avante').setup ({
provider = "copilot",
claude = {
api_key_name = "<api_key_name>",
},
openai = {
api_key_name = "<api_key_name>",
},
files = {
auto_include = true, -- Automatically include relevant files
max_files = 50, ---------------- Maximum number of files to include in context
max_size_kb = 1000, -- Maximum total size of files in KB
-- Define which files to include/exclude
include = {
"*.lua",
"*.nix",
"*.rs",
"*.ts",
"*.js",
"*.jsx",
"*.tsx",
-- Add more patterns as needed
},
exclude = {
"node_modules/**",
"dist/**",
".git/**",
},
},
web_search_engine = {
provider = "tavily", -- tavily, serpapi, searchapi, google, kagi
},
-- depends on docker
rag_service = {
enable = true, -- requires OPENAI_API_KEY to be set
},
})
'';
} else {};
}

View file

@ -18,6 +18,10 @@
settings = { settings = {
provider = "copilot"; provider = "copilot";
cursor_applying_provider = "copilot";
behaviour = {
enable_cursor_planning_mode = true;
};
files = { files = {
auto_include = true; # Automatically include relevant files auto_include = true; # Automatically include relevant files

View file

@ -1,7 +1,8 @@
{ config, ... }: { config, pkgs, ... }:
{ {
imports = [ imports = [
./avante.nix ./avante.nix
# ./avante-custom.nix
./bash.nix ./bash.nix
# ./blink-cmp.nix # ./blink-cmp.nix
# ./blink-cmp-copilot.nix # ./blink-cmp-copilot.nix
@ -19,13 +20,17 @@
./lazydev.nix ./lazydev.nix
./lsp.nix ./lsp.nix
./luasnip.nix ./luasnip.nix
# ./mini.nix
# ./mini-files.nix
./nvim-tree.nix ./nvim-tree.nix
./startify.nix
./telescope.nix ./telescope.nix
./treesitter.nix ./treesitter.nix
./vim-signify.nix ./vim-signify.nix
]; ];
programs.nixvim.plugins = { programs.nixvim = {
plugins = {
comment.enable = true; comment.enable = true;
## needed by avante. already archived, so may need to migrate to snacks ## needed by avante. already archived, so may need to migrate to snacks
dressing.enable = true; dressing.enable = true;
@ -61,11 +66,10 @@
# }) # })
# EOF # EOF
# ''; # '';
# oil.enable = true;
oil.enable = true;
rainbow-delimiters.enable = true; rainbow-delimiters.enable = true;
render-markdown.enable = true;
sleuth.enable = true; sleuth.enable = true;
startify.enable = config.nixvim-config.enable-startify;
tmux-navigator.enable = true; tmux-navigator.enable = true;
treesitter-context.enable = true; treesitter-context.enable = true;
trouble.enable = true; trouble.enable = true;
@ -76,4 +80,5 @@
which-key.enable = true; which-key.enable = true;
yanky.enable = true; yanky.enable = true;
}; };
};
} }

View file

@ -4,6 +4,17 @@
indent-blankline = { indent-blankline = {
enable = true; enable = true;
luaConfig.post = '' luaConfig.post = ''
vim.g.indent_blankline_filetype_exclude = {
'checkhealth',
'dashboard',
'help',
'lspinfo',
'neogitstatus',
'packer',
'startify',
"",
}
local highlight = { local highlight = {
"RainbowRed", "RainbowRed",
"RainbowYellow", "RainbowYellow",

72
plugins/mini-files.nix Normal file
View file

@ -0,0 +1,72 @@
{ pkgs,... }:
{
programs.nixvim = {
extraPlugins = [
pkgs.vimPlugins.mini-files
];
extraFiles = {
"lua/treeutils-mini.lua" = {
source = ./treeutils-mini.lua;
};
};
extraConfigLua = ''
require('mini.files').setup({
});
function _G.mini_files_open_current_buffer()
local MiniFiles = require("mini.files")
local _ = MiniFiles.close()
or MiniFiles.open(vim.api.nvim_buf_get_name(0), false)
vim.defer_fn(function()
MiniFiles.reveal_cwd()
end, 30)
end
function _G.mini_files_toggle()
local MiniFiles = require("mini.files")
local _ = MiniFiles.close()
or MiniFiles.open()
end
function _G.launch_find_files_wrapped()
-- Try custom function first
local handled = require('treeutils-mini').launch_find_files()
if handled == "default" then
-- If custom function didn't handle it, execute default behavior
local default_key = vim.api.nvim_replace_termcodes('<c-f>', true, true, true)
vim.api.nvim_feedkeys(default_key, 'n', false)
end
end
'';
keymaps = [
## Go to current buffer's file in nvim-tree
{
mode = [ "n" ];
key = ",n";
action = "<cmd>lua mini_files_open_current_buffer()<CR>";
}
## Toggle nvim-tree visibility
{
mode = [ "n" ];
key = ",m";
action = "<cmd>lua mini_files_toggle()<CR>";
}
## Search current path
{
mode = [ "n" ];
key = "<c-f>";
action = "<cmd>lua launch_find_files_wrapped()<CR>";
options = { noremap = true; };
}
{
mode = [ "n" ];
key = "<c-g>";
action = "<cmd>lua require('treeutils-mini').launch_live_grep()<CR>";
options = { noremap = true; };
}
];
};
}

75
plugins/mini.nix Normal file
View file

@ -0,0 +1,75 @@
{ ... }:
{
programs.nixvim = {
plugins.mini = {
enable = true;
modules = {
ai = {
n_lines = 50;
search_method = "cover_or_next";
};
## Already handled by another plugin
# comment = {
# mappings = {
# comment = "<leader>/";
# comment_line = "<leader>/";
# comment_visual = "<leader>/";
# textobject = "<leader>/";
# };
# };
diff = {
view = {
style = "sign";
};
};
starter = {
content_hooks = {
"__unkeyed-1.adding_bullet" = {
__raw = "require('mini.starter').gen_hook.adding_bullet()";
};
"__unkeyed-2.indexing" = {
__raw = "require('mini.starter').gen_hook.indexing('all', { 'Builtin actions' })";
};
"__unkeyed-3.padding" = {
__raw = "require('mini.starter').gen_hook.aligning('center', 'center')";
};
};
evaluate_single = true;
header = ''
_______ ____ ____.___ _____
\ \ ____ ___\ \ / /| | / \
/ | \_/ __ \/ _ \ Y / | |/ \ / \
/ | \ ___( <_> ) / | / Y \
\____|__ /\___ >____/ \___/ |___\____|__ /
\/ \/ \/
'';
items = {
"__unkeyed-1.buildtin_actions" = {
__raw = "require('mini.starter').sections.builtin_actions()";
};
"__unkeyed-2.recent_files_current_directory" = {
__raw = "require('mini.starter').sections.recent_files(10, false)";
};
"__unkeyed-3.recent_files" = {
__raw = "require('mini.starter').sections.recent_files(10, true)";
};
# "__unkeyed-4.sessions" = {
# __raw = "require('mini.starter').sections.sessions(5, true)";
# };
};
};
surround = {
mappings = {
add = "gsa";
delete = "gsd";
find = "gsf";
find_left = "gsF";
highlight = "gsh";
replace = "gsr";
update_n_lines = "gsn";
};
};
};
};
};
}

18
plugins/startify.nix Normal file
View file

@ -0,0 +1,18 @@
{ config, ... }:
{
programs.nixvim = {
plugins.startify = {
enable = true;
settings = {
custom_header = if config.nixvim-config.enable-startify then null else [
''. _______ ____ ____.___ _____''
''. \ \ ____ ___\ \ / /| | / \''
''. / | \_/ __ \/ _ \ Y / | |/ \ / \''
''. / | \ ___( <_> ) / | / Y \''
''. \____|__ /\___ >____/ \___/ |___\____|__ /''
''. \/ \/ \/''
];
};
};
};
}

View file

@ -0,0 +1,55 @@
local MiniFiles = require("mini.files")
local actions = require'telescope.actions'
local action_state = require'telescope.actions.state'
local M = {}
local view_selection = function(prompt_bufnr, map)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
local filename = selection.filename
if (filename == nil) then
filename = selection[1]
end
-- openfile.fn('preview', filename)
end)
return true
end
function M.launch_live_grep(opts)
return M.launch_telescope("live_grep", opts)
end
function M.launch_find_files(opts)
return M.launch_telescope("find_files", opts, { active_only_in_tree = true })
end
function M.launch_telescope(func_name, opts, internal_opts)
internal_opts = internal_opts or {}
local buffname = vim.fn.bufname()
if (internal_opts.active_only_in_tree) then
-- Make sure this is being called in NvimTree
if (string.sub(buffname, 1, string.len('NvimTree')) ~= 'NvimTree') then
return "default"
end
end
local telescope_status_ok, _ = pcall(require, "telescope")
if not telescope_status_ok then
return
end
local node = MiniFiles.get_latest_path()
if (node == nil) then
-- Tree is probably not open
return
end
local is_folder = node.fs_stat and node.fs_stat.type == 'directory' or false
local basedir = is_folder and node.absolute_path or vim.fn.fnamemodify(node.absolute_path, ":h")
opts = opts or {}
opts.cwd = basedir
opts.search_dirs = { basedir }
opts.attach_mappings = view_selection
return require("telescope.builtin")[func_name](opts)
end
return M