Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,24 @@ home-manager.users.<user>.home.packages = [
### UI Plugins

- `bufferline.nix`: Configures the Bufferline plugin for enhanced buffer/tab display.
- `lualine.nix`: Configures the Lualine status line plugin.
- `lualine.nix`: Configures Lualine with Git, Jujutsu, and configured-forge context.
- `startup.nix`: Configures the startup screen.

### LSP

- `lsp.nix`: Configures the Neovim LSP client.
- `go.nix`: Configures Go language support, formatting, tests, and debugging.
- `ocaml.nix`: Configures project-aware OCaml-LSP and OCamlFormat fallback support.
- `nix.nix`: Configures nixd and nixfmt.
- `hcl.nix`: Configures OpenTofu LSP/formatting while keeping generic HCL schema-neutral.
- `yaml.nix`: Configures SchemaStore-backed YAML and Helm language support.
- `rust.nix`: Configures Rustaceanvim, Neotest integration, and Rust-specific actions.
- `conform.nix`: Configures the Conform plugin for automatic code formatting.
- `fidget.nix`: Configures the Fidget plugin for displaying LSP diagnostics in the status line.

### Git

- `jj.nix`: Configures Jujutsu commands and key mappings.
- `lazygit.nix`: Configures the LazyGit plugin for Git integration.
- `gitsigns.nix`: Configures the GitSigns plugin for displaying Git diff information.

Expand Down
7 changes: 7 additions & 0 deletions config/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,17 @@ _: {

# LSP and formatting
./plugins/lsp/lsp.nix
./plugins/lsp/go.nix
./plugins/lsp/ocaml.nix
./plugins/lsp/nix.nix
./plugins/lsp/hcl.nix
./plugins/lsp/yaml.nix
./plugins/lsp/rust.nix
./plugins/lsp/conform.nix
./plugins/lsp/fidget.nix

# Git
./plugins/git/jj.nix
./plugins/git/lazygit.nix
./plugins/git/gitsigns.nix

Expand Down
33 changes: 29 additions & 4 deletions config/file_types.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,35 @@
];
pattern = [
"*.tf"
"*.tfvars"
"*.hcl"
];
command = "set ft=terraform";
command = "setlocal filetype=terraform";
}
{
group = "filetypes";
event = [
"BufRead"
"BufNewFile"
];
pattern = [ "*.tfvars" ];
command = "setlocal filetype=opentofu-vars";
}
{
group = "filetypes";
event = [
"BufRead"
"BufNewFile"
];
pattern = [ "*.tofu" ];
command = "setlocal filetype=opentofu";
}
{
group = "filetypes";
event = [
"BufRead"
"BufNewFile"
];
pattern = [ "*.hcl" ];
command = "setlocal filetype=hcl";
}
];

Expand All @@ -30,7 +55,7 @@
"*.bicep"
"*.bicepparam"
];
command = "set ft=bicep";
command = "setlocal filetype=bicep";
}
];
}
3 changes: 3 additions & 0 deletions config/plugins/editor/treesitter.nix
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@
markdown
markdown_inline
nix
ocaml
ocaml_interface
python
regex
rust
sql
terraform
toml
Expand Down
69 changes: 69 additions & 0 deletions config/plugins/git/jj.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
{
plugins.jj = {
enable = true;
settings = {
cmd.describe.editor = {
type = "buffer";
};
};
};

keymaps = [
{
mode = "n";
key = "<leader>jl";
action = "<cmd>J log<cr>";
options = {
desc = "Jujutsu log";
};
}
{
mode = "n";
key = "<leader>js";
action = "<cmd>J status<cr>";
options = {
desc = "Jujutsu status";
};
}
{
mode = "n";
key = "<leader>jd";
action = "<cmd>J describe<cr>";
options = {
desc = "Jujutsu describe";
};
}
{
mode = "n";
key = "<leader>jn";
action = "<cmd>J new<cr>";
options = {
desc = "Jujutsu new change";
};
}
{
mode = "n";
key = "<leader>ju";
action = "<cmd>J undo<cr>";
options = {
desc = "Jujutsu undo";
};
}
{
mode = "n";
key = "<leader>jr";
action = "<cmd>J redo<cr>";
options = {
desc = "Jujutsu redo";
};
}
{
mode = "n";
key = "<leader>jf";
action = "<cmd>J fetch<cr>";
options = {
desc = "Jujutsu fetch";
};
}
];
}
10 changes: 0 additions & 10 deletions config/plugins/lsp/conform.nix
Original file line number Diff line number Diff line change
Expand Up @@ -103,18 +103,11 @@
"isort"
];
lua = [ "stylua" ];
nix = [ "nixfmt" ];
markdown = {
__unkeyed-1 = "prettierd";
__unkeyed-2 = "prettier";
stop_after_first = true;
};
yaml = {
__unkeyed-1 = "prettierd";
__unkeyed-2 = "prettier";
stop_after_first = true;
};
terraform = [ "terraform_fmt" ];
bicep = [ "bicep" ];
bash = [
"shellcheck"
Expand All @@ -132,9 +125,6 @@
isort = {
command = "${lib.getExe pkgs.isort}";
};
nixfmt = {
command = "${lib.getExe pkgs.nixfmt}";
};
alejandra = {
command = "${lib.getExe pkgs.alejandra}";
};
Expand Down
187 changes: 187 additions & 0 deletions config/plugins/lsp/go.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
{ lib, pkgs, ... }:
{
plugins = {
lsp.servers.gopls = {
enable = true;
settings.gopls = {
gofumpt = true;
usePlaceholders = true;
analyses = {
nilness = true;
unusedparams = true;
unusedwrite = true;
useany = true;
};
hints = {
assignVariableTypes = false;
compositeLiteralFields = true;
compositeLiteralTypes = true;
constantValues = true;
functionTypeParameters = true;
parameterNames = true;
rangeVariableTypes = true;
};
};
};

conform-nvim.settings = {
formatters_by_ft.go = [
"goimports"
"gofumpt"
];
formatters = {
goimports.command = lib.getExe' pkgs.gotools "goimports";
gofumpt.command = lib.getExe pkgs.gofumpt;
};
};

dap = {
enable = true;
signs = {
dapBreakpoint.text = "";
dapBreakpointCondition.text = "";
dapBreakpointRejected.text = "";
dapLogPoint.text = "";
dapStopped.text = "";
};
};
dap-go = {
enable = true;
settings.delve.path = lib.getExe' pkgs.delve "dlv";
};
dap-ui = {
enable = true;
settings.floating.border = "rounded";
};
dap-virtual-text = {
enable = true;
settings = {
commented = true;
virt_text_pos = "eol";
};
};

neotest = {
enable = true;
adapters.golang = {
enable = true;
settings = {
dap_go_enabled = true;
testify_enabled = true;
warn_test_name_dupes = true;
warn_test_not_executed = true;
args = [ "-count=1" ];
};
};
settings = {
floating.border = "rounded";
output.open_on_run = false;
};
};
};

keymaps = [
{
mode = "n";
key = "<leader>rn";
action = lib.nixvim.mkRaw "function() require('neotest').run.run() end";
options.desc = "Run nearest test";
}
{
mode = "n";
key = "<leader>rf";
action = lib.nixvim.mkRaw "function() require('neotest').run.run(vim.fn.expand('%')) end";
options.desc = "Run test file";
}
{
mode = "n";
key = "<leader>rl";
action = lib.nixvim.mkRaw "function() require('neotest').run.run_last() end";
options.desc = "Run last test";
}
{
mode = "n";
key = "<leader>rd";
action = lib.nixvim.mkRaw "function() require('neotest').run.run({ strategy = 'dap' }) end";
options.desc = "Debug nearest test";
}
{
mode = "n";
key = "<leader>rs";
action = lib.nixvim.mkRaw "function() require('neotest').summary.toggle() end";
options.desc = "Toggle test summary";
}
{
mode = "n";
key = "<leader>ro";
action = lib.nixvim.mkRaw "function() require('neotest').output.open({ enter = true }) end";
options.desc = "Show test output";
}
{
mode = "n";
key = "<F5>";
action = lib.nixvim.mkRaw "function() require('dap').continue() end";
options.desc = "Debug continue";
}
{
mode = "n";
key = "<F10>";
action = lib.nixvim.mkRaw "function() require('dap').step_over() end";
options.desc = "Debug step over";
}
{
mode = "n";
key = "<F11>";
action = lib.nixvim.mkRaw "function() require('dap').step_into() end";
options.desc = "Debug step into";
}
{
mode = "n";
key = "<F12>";
action = lib.nixvim.mkRaw "function() require('dap').step_out() end";
options.desc = "Debug step out";
}
{
mode = "n";
key = "<leader>db";
action = lib.nixvim.mkRaw "function() require('dap').toggle_breakpoint() end";
options.desc = "Toggle breakpoint";
}
{
mode = "n";
key = "<leader>dB";
action = lib.nixvim.mkRaw "function() require('dap').set_breakpoint(vim.fn.input('Breakpoint condition: ')) end";
options.desc = "Conditional breakpoint";
}
{
mode = "n";
key = "<leader>du";
action = lib.nixvim.mkRaw "function() require('dapui').toggle() end";
options.desc = "Toggle debug UI";
}
{
mode = "n";
key = "<leader>dt";
action = lib.nixvim.mkRaw "function() require('dap').terminate() end";
options.desc = "Terminate debugger";
}
];

extraConfigLua = ''
local dap = require("dap")
local dapui = require("dapui")

dap.listeners.before.attach.dapui_config = function()
dapui.open()
end
dap.listeners.before.launch.dapui_config = function()
dapui.open()
end
dap.listeners.before.event_terminated.dapui_config = function()
dapui.close()
end
dap.listeners.before.event_exited.dapui_config = function()
dapui.close()
end
'';
}
Loading