Move neovim/nixvim configuration

This commit is contained in:
Oliver Davies 2025-07-26 02:35:57 +01:00
parent 32e28379e2
commit 6c1b494e82
56 changed files with 438 additions and 404 deletions

View file

@ -14,7 +14,6 @@
};
coding = {
neovim.enable = true;
phpactor.enable = true;
};
};

View file

@ -20,7 +20,6 @@
};
coding = {
neovim.enable = true;
phpactor.enable = true;
};

View file

@ -12,7 +12,6 @@
./gtk.nix
./media/handbrake.nix
./media/mpv.nix
./neovim
./node.nix
./phpactor
./ranger.nix

View file

@ -1,73 +0,0 @@
{ pkgs, ... }:
{
# TODO: re-add DAP.
# TODO: re-add snippets.
# TODO: re-configure spell.
imports = [
./keymaps.nix
./options.nix
./plugins/auto-save.nix
./plugins/cmp.nix
./plugins/conform.nix
./plugins/fidget.nix
./plugins/fugitive.nix
./plugins/gitsigns.nix
./plugins/harpoon.nix
./plugins/lint.nix
./plugins/lsp.nix
./plugins/lualine.nix
./plugins/luasnip.nix
./plugins/mini.nix
./plugins/oil.nix
./plugins/phpactor.nix
./plugins/refactoring.nix
./plugins/telescope.nix
./plugins/treesitter.nix
./plugins/undotree.nix
./plugins/vim-cool.nix
./plugins/vim-dadbod.nix
./plugins/vim-highlightedyank.nix
./plugins/vim-test.nix
./plugins/web-devicons.nix
];
colorschemes.catppuccin = {
enable = true;
settings.flavour = "mocha";
};
diagnostic.settings = {
signs = true;
underline = false;
update_in_insert = false;
virtual_text = {
enable = true;
spacing = 2;
};
};
extraPackages = with pkgs; [
nixfmt-rfc-style
stylua
];
filetype = {
extension = {
"neon.dist" = "yaml";
inc = "php";
install = "php";
module = "php";
neon = "yaml";
pcss = "scss";
theme = "php";
};
filename = {
"composer.lock" = "json";
};
};
globals.mapleader = " ";
}

View file

@ -1,22 +0,0 @@
{
plugins.auto-save.enable = true;
plugins.auto-save.settings.condition = ''
function(buf)
local excluded_filetypes = {
"harpoon",
"oil",
}
local excluded_filenames = {}
if vim.tbl_contains(excluded_filetypes, vim.fn.getbufvar(buf, "&filetype"))
or vim.tbl_contains(excluded_filenames, vim.fn.expand("%:t"))
then
return false
end
return true
end
'';
}

View file

@ -1,3 +0,0 @@
{
plugins.conform-nvim.enable = true;
}

View file

@ -1,3 +0,0 @@
{
plugins.fidget.enable = true;
}

View file

@ -1,18 +0,0 @@
{ config, lib, ... }:
{
plugins.fugitive.enable = true;
keymaps = lib.mkIf config.plugins.fugitive.enable [
{
key = "<leader>gc";
action = "<cmd>Git commit<CR><C-w>K";
}
{
# Open the ":Git" window in its own buffer, not a split.
key = "<leader>gs";
action = "<cmd>0Git<CR>";
}
];
}

View file

@ -1,48 +0,0 @@
{ config, lib, ... }:
{
plugins.gitsigns.enable = true;
keymaps = lib.mkIf config.plugins.gitsigns.enable [
{
action = "<cmd>Gitsigns prev_hunk<CR>";
key = "[h";
}
{
action = "<cmd>Gitsigns next_hunk<CR>";
key = "]h";
}
{
action = "<cmd>Gitsigns reset_hunk<CR>";
key = "<leader>hr";
}
{
action = "<cmd>Gitsigns reset_buffer<CR>";
key = "<leader>hR";
}
{
action = "<cmd>Gitsigns stage_hunk<CR>";
key = "<leader>hs";
mode = [
"n"
"v"
];
}
{
action = "<cmd>Gitsigns stage_buffer<CR>";
key = "<leader>hS";
mode = "n";
}
{
action = "<cmd>Gitsigns undo_stage_hunk<CR>";
key = "<leader>hu";
mode = "x";
}
];
}

View file

@ -1,3 +0,0 @@
{
plugins.lint.enable = true;
}

View file

@ -1,21 +0,0 @@
{
plugins.lsp.enable = true;
plugins.lsp.keymaps = {
diagnostic = {
"<leader>dl" = "setqflist";
};
lspBuf = {
"<leader>ca" = "code_action";
"<leader>cr" = "rename";
K = "hover";
gD = "declaration";
gT = "type_definition";
gd = "definition";
gr = "references";
};
};
plugins.lsp.servers.phpactor.enable = true;
}

View file

@ -1,3 +0,0 @@
{
plugins.luasnip.enable = true;
}

View file

@ -1,23 +0,0 @@
{ config, lib, ... }:
{
plugins.oil = {
enable = true;
settings = {
delete_to_trash = true;
keymaps."-" = "actions.parent";
skip_confirm_for_simple_edits = true;
view_options.show_hidden = true;
};
};
keymaps = lib.mkIf config.plugins.oil.enable [
{
action = "<cmd>Oil<CR>";
key = "-";
}
];
}

View file

@ -1,17 +0,0 @@
{ pkgs, ... }:
{
extraPlugins = with pkgs.vimPlugins; [ phpactor ];
keymaps = [
{
key = "<leader>pm";
action = "<cmd>PhpactorContextMenu<CR>";
}
{
key = "<leader>pn";
action = "<cmd>PhpactorClassNew<CR>";
}
];
}

View file

@ -1,48 +0,0 @@
{ config, lib, ... }:
{
plugins.refactoring = {
enable = true;
enableTelescope = true;
};
keymaps = lib.mkIf config.plugins.refactoring.enable (
[
{
key = "<leader>ri";
action = "<cmd>Refactor inline_var<CR>";
mode = "n";
}
{
key = "<leader>re";
action = "<cmd>Refactor extract<CR>";
mode = "x";
}
{
key = "<leader>ri";
action = "<cmd>Refactor inline_var<CR>";
mode = "x";
}
{
key = "<leader>rv";
action = "<cmd>Refactor extract_var<CR>";
mode = "x";
}
]
++ lib.optionals (config.plugins.refactoring.enable && config.plugins.refactoring.enableTelescope) [
{
mode = "n";
key = "<leader>rR";
action.__raw = ''
function()
require('telescope').extensions.refactoring.refactors()
end
'';
options.silent = true;
}
]
);
}

View file

@ -1,48 +0,0 @@
{ pkgs, ... }:
{
plugins = {
treesitter = {
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
bash
comment
css
csv
dockerfile
gitattributes
gitignore
go
html
javascript
json
kdl
lua
luadoc
make
markdown
markdown_inline
nix
php
phpdoc
query
rst
scss
sql
terraform
twig
typescript
vim
vimdoc
vue
xml
yaml
];
settings.highlight.enable = true;
};
treesitter-textobjects.enable = true;
};
}

View file

@ -1,12 +0,0 @@
{ config, lib, ... }:
{
plugins.undotree.enable = true;
keymaps = lib.mkIf config.plugins.undotree.enable [
{
action = "<cmd>UndotreeToggle<CR>";
key = "<leader>u";
}
];
}

View file

@ -1,5 +0,0 @@
{ pkgs, ... }:
{
extraPlugins = with pkgs.vimPlugins; [ vim-cool ];
}

View file

@ -1,9 +0,0 @@
{ pkgs, ... }:
{
extraPlugins = with pkgs.vimPlugins; [ vim-highlightedyank ];
extraConfigVim = ''
let g:highlightedyank_highlight_duration = 100
'';
}

View file

@ -1,20 +0,0 @@
{ config, lib, ... }:
{
plugins.vim-test.enable = true;
keymaps = lib.mkIf config.plugins.vim-test.enable [
{
key = "<leader>tf";
action = "<cmd>TestFile<CR>";
}
{
key = "<leader>tl";
action = "<cmd>TestLast<CR>";
}
{
key = "<leader>tn";
action = "<cmd>TestNearest<CR>";
}
];
}

View file

@ -1,3 +0,0 @@
{
plugins.web-devicons.enable = false;
}

View file

@ -11,9 +11,9 @@ let
cfg = config.features.coding.neovim;
in
{
imports = [
inputs.nixvim.homeManagerModules.nixvim
];
# imports = [
# inputs.nixvim.homeManagerModules.nixvim
# ];
options.features.coding.neovim.enable = mkEnableOption "Enable neovim";

View file

@ -0,0 +1,6 @@
{
flake.modules.nixvim.custom = {
viAlias = true;
vimAlias = true;
};
}

View file

@ -0,0 +1,6 @@
{
flake.modules.nixvim.custom.colorschemes.catppuccin = {
enable = true;
settings.flavour = "mocha";
};
}

View file

@ -0,0 +1,12 @@
{
flake.modules.nixvim.custom.diagnostic.settings = {
signs = true;
underline = false;
update_in_insert = false;
virtual_text = {
enable = true;
spacing = 2;
};
};
}

View file

@ -0,0 +1,10 @@
{
flake.modules.nixvim.custom =
{ pkgs, ... }:
{
extraPackages = with pkgs; [
nixfmt-rfc-style
stylua
];
};
}

View file

@ -0,0 +1,17 @@
{
flake.modules.nixvim.custom.filetype = {
extension = {
"neon.dist" = "yaml";
inc = "php";
install = "php";
module = "php";
neon = "yaml";
pcss = "scss";
theme = "php";
};
filename = {
"composer.lock" = "json";
};
};
}

View file

@ -0,0 +1,13 @@
{ config, ... }:
{
perSystem =
{ inputs', pkgs, ... }:
{
packages.nixvim = inputs'.nixvim.legacyPackages.makeNixvimWithModule {
inherit pkgs;
module = config.flake.modules.nixvim.custom;
};
};
}

View file

@ -1,5 +1,5 @@
{
keymaps = [
flake.modules.nixvim.custom.keymaps = [
{
action = "<Esc>A,<Esc>";
key = ",,";

View file

@ -0,0 +1,6 @@
{
flake.modules.nixvim.custom.globals = {
mapleader = " ";
maplocalleader = " ";
};
}

View file

@ -1,5 +1,5 @@
{
plugins.lualine = {
flake.modules.nixvim.custom.plugins.lualine = {
enable = true;
settings.options = {

View file

@ -1,5 +1,5 @@
{
opts = {
flake.modules.nixvim.custom.opts = {
expandtab = true;
exrc = true;
foldlevel = 1;

View file

@ -0,0 +1,24 @@
{
flake.modules.nixvim.custom.plugins.auto-save = {
enable = true;
settings.condition = ''
function(buf)
local excluded_filetypes = {
"harpoon",
"oil",
}
local excluded_filenames = {}
if vim.tbl_contains(excluded_filetypes, vim.fn.getbufvar(buf, "&filetype"))
or vim.tbl_contains(excluded_filenames, vim.fn.expand("%:t"))
then
return false
end
return true
end
'';
};
}

View file

@ -1,5 +1,5 @@
{
plugins.cmp = {
flake.modules.nixvim.custom.plugins.cmp = {
enable = true;
autoEnableSources = true;

View file

@ -0,0 +1,3 @@
{
flake.modules.nixvim.custom.plugins.conform-nvim.enable = true;
}

View file

@ -0,0 +1,3 @@
{
flake.modules.nixvim.custom.plugins.fidget.enable = true;
}

View file

@ -0,0 +1,18 @@
{
flake.modules.nixvim.custom = {
plugins.fugitive.enable = true;
keymaps = [
{
key = "<leader>gc";
action = "<cmd>Git commit<CR><C-w>K";
}
{
# Open the ":Git" window in its own buffer, not a split.
key = "<leader>gs";
action = "<cmd>0Git<CR>";
}
];
};
}

View file

@ -0,0 +1,48 @@
{
flake.modules.nixvim.custom = {
plugins.gitsigns.enable = true;
keymaps = [
{
action = "<cmd>Gitsigns prev_hunk<CR>";
key = "[h";
}
{
action = "<cmd>Gitsigns next_hunk<CR>";
key = "]h";
}
{
action = "<cmd>Gitsigns reset_hunk<CR>";
key = "<leader>hr";
}
{
action = "<cmd>Gitsigns reset_buffer<CR>";
key = "<leader>hR";
}
{
action = "<cmd>Gitsigns stage_hunk<CR>";
key = "<leader>hs";
mode = [
"n"
"v"
];
}
{
action = "<cmd>Gitsigns stage_buffer<CR>";
key = "<leader>hS";
mode = "n";
}
{
action = "<cmd>Gitsigns undo_stage_hunk<CR>";
key = "<leader>hu";
mode = "x";
}
];
};
}

View file

@ -1,5 +1,3 @@
{ config, lib, ... }:
let
leaderBinding = key: command: {
key = "<leader>${key}";
@ -8,13 +6,13 @@ let
};
in
{
plugins.harpoon = {
enable = true;
enableTelescope = true;
};
flake.modules.nixvim.custom = {
plugins.harpoon = {
enable = true;
enableTelescope = true;
};
keymaps = lib.mkIf config.plugins.harpoon.enable (
[
keymaps = [
{
key = "<leader>a";
action.__raw = "function() require'harpoon':list():add() end";
@ -42,6 +40,6 @@ in
8
9
]
)
);
);
};
}

View file

@ -0,0 +1,3 @@
{
flake.modules.nixvim.custom.plugins.lint.enable = true;
}

View file

@ -0,0 +1,23 @@
{
flake.modules.nixvim.custom.plugins.lsp = {
enable = true;
keymaps = {
diagnostic = {
"<leader>dl" = "setqflist";
};
lspBuf = {
"<leader>ca" = "code_action";
"<leader>cr" = "rename";
K = "hover";
gD = "declaration";
gT = "type_definition";
gd = "definition";
gr = "references";
};
};
servers.phpactor.enable = true;
};
}

View file

@ -0,0 +1,3 @@
{
flake.modules.nixvim.custom.plugins.luasnip.enable = true;
}

View file

@ -1,5 +1,5 @@
{
plugins.mini = {
flake.modules.nixvim.custom.plugins.mini = {
enable = true;
modules = {

View file

@ -0,0 +1,23 @@
{
flake.modules.nixvim.custom = {
plugins.oil = {
enable = true;
settings = {
delete_to_trash = true;
keymaps."-" = "actions.parent";
skip_confirm_for_simple_edits = true;
view_options.show_hidden = true;
};
};
keymaps = [
{
action = "<cmd>Oil<CR>";
key = "-";
}
];
};
}

View file

@ -0,0 +1,19 @@
{
flake.modules.nixvim.custom =
{ pkgs, ... }:
{
extraPlugins = with pkgs.vimPlugins; [ phpactor ];
keymaps = [
{
key = "<leader>pm";
action = "<cmd>PhpactorContextMenu<CR>";
}
{
key = "<leader>pn";
action = "<cmd>PhpactorClassNew<CR>";
}
];
};
}

View file

@ -0,0 +1,54 @@
{ config, lib, ... }:
{
flake.modules.nixvim.custom = {
plugins.refactoring = {
enable = true;
enableTelescope = true;
};
keymaps = [
{
key = "<leader>ri";
action = "<cmd>Refactor inline_var<CR>";
mode = "n";
}
{
key = "<leader>re";
action = "<cmd>Refactor extract<CR>";
mode = "x";
}
{
key = "<leader>ri";
action = "<cmd>Refactor inline_var<CR>";
mode = "x";
}
{
key = "<leader>rv";
action = "<cmd>Refactor extract_var<CR>";
mode = "x";
}
];
# ++
# lib.optionals
# (
# config.flake.modules.nixvim.custom.plugins.refactoring.enable
# && config.flake.modules.nixvim.custom.plugins.refactoring.enableTelescope
# )
# [
# {
# mode = "n";
# key = "<leader>rR";
# action.__raw = ''
# function()
# require('telescope').extensions.refactoring.refactors()
# end
# '';
# options.silent = true;
# }
# ];
};
}

View file

@ -1,5 +1,5 @@
{
plugins.telescope = {
flake.modules.nixvim.custom.plugins.telescope = {
enable = true;
extensions = {

View file

@ -0,0 +1,50 @@
{
flake.modules.nixvim.custom =
{ pkgs, ... }:
{
plugins = {
treesitter = {
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
bash
comment
css
csv
dockerfile
gitattributes
gitignore
go
html
javascript
json
kdl
lua
luadoc
make
markdown
markdown_inline
nix
php
phpdoc
query
rst
scss
sql
terraform
twig
typescript
vim
vimdoc
vue
xml
yaml
];
settings.highlight.enable = true;
};
treesitter-textobjects.enable = true;
};
};
}

View file

@ -0,0 +1,12 @@
{
flake.modules.nixvim.custom = {
plugins.undotree.enable = true;
keymaps = [
{
action = "<cmd>UndotreeToggle<CR>";
key = "<leader>u";
}
];
};
}

View file

@ -0,0 +1,7 @@
{
flake.modules.nixvim.custom =
{ pkgs, ... }:
{
extraPlugins = [ pkgs.vimPlugins.vim-cool ];
};
}

View file

@ -1,5 +1,5 @@
{
plugins = {
flake.modules.nixvim.custom.plugins = {
vim-dadbod.enable = true;
vim-dadbod-completion.enable = true;
vim-dadbod-ui.enable = true;

View file

@ -0,0 +1,11 @@
{
flake.modules.nixvim.custom =
{ pkgs, ... }:
{
extraPlugins = [ pkgs.vimPlugins.vim-highlightedyank ];
extraConfigVim = ''
let g:highlightedyank_highlight_duration = 100
'';
};
}

View file

@ -0,0 +1,20 @@
{
flake.modules.nixvim.custom = {
plugins.vim-test.enable = true;
keymaps = [
{
key = "<leader>tf";
action = "<cmd>TestFile<CR>";
}
{
key = "<leader>tl";
action = "<cmd>TestLast<CR>";
}
{
key = "<leader>tn";
action = "<cmd>TestNearest<CR>";
}
];
};
}

View file

@ -0,0 +1,3 @@
{
flake.modules.nixvim.custom.plugins.web-devicons.enable = false;
}

View file

@ -0,0 +1,24 @@
{ config, inputs, lib, ... }:
{
flake.modules.homeManager.base =
hmArgs@{ pkgs, ... }:
let
# Ideally:
# nixvim = self.packages.${pkgs.system}.nixvim;
# but https://github.com/danth/stylix/pull/415#issuecomment-2832398958
nixvim = inputs.nixvim.legacyPackages.${pkgs.system}.makeNixvimWithModule {
inherit pkgs;
extraSpecialArgs.homeConfig = hmArgs.config;
module = config.flake.modules.nixvim.custom;
};
in
{
home = {
packages = [ nixvim ];
sessionVariables.EDITOR = lib.mkForce (lib.getExe nixvim);
};
};
}

View file

@ -1,4 +1,4 @@
{ self, ... }:
{ config, ... }:
{
perSystem =
@ -10,7 +10,7 @@
neovim = inputs'.nixvim.legacyPackages.makeNixvimWithModule {
inherit pkgs;
module = import "${self}/modules/home-manager/neovim/config";
module = config.flake.modules.nixvim.custom;
};
};
};