You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/ARCHITECTURE.md
+5-1Lines changed: 5 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,7 @@ DashVim is a Nix flake that builds and distributes a Neovim configuration based
9
9
-`lib/default.nix` calls `inputs.nvf.lib.neovimConfiguration` and passes DashVim options into the `config/` module tree through `extraSpecialArgs`.
10
10
-`config/default.nix` imports the Neovim configuration modules for base settings, theme, keybinds, editor features, language support, custom config, and user-provided `additionalConfig`.
11
11
-`config/languages/toolchain.nix` injects project-aware command resolvers for known DashVim/nvf LSPs, formatters, and linters when `programs.dashvim.toolchain.preferProjectTools` is enabled; `config/languages/lsp.nix` handles the TypeScript server path special case inside the owning plugin definition.
12
+
-`config/languages/lsp.nix` also owns plugin-backed LSP setup such as `typescript-tools.nvim` and `roslyn.nvim`; Roslyn file watching, targeted file-change notifications, broad solution search, and target locking are controlled through `programs.dashvim.lsp.special.roslyn.*`.
12
13
-`lib/env.nix` creates the runnable environment by combining the generated Neovim package, optional wrapped opencode package, and shared CLI/runtime dependencies.
13
14
-`lib/opencode-config.nix` generates opencode theme, TUI config, opencode config JSON, and bundled skills/commands for both wrapped opencode and Home Manager deployments.
14
15
-`lib/toolchain.nix` builds a Rust resolver and per-tool launch symlinks that prefer a different executable from the active Neovim `PATH` and fall back to DashVim's pinned Nix executable.
@@ -21,7 +22,8 @@ DashVim is a Nix flake that builds and distributes a Neovim configuration based
21
22
- Users set `programs.dashvim.*` options through the exported module.
22
23
- Module options flow into `lib/default.nix` as `config'` and become inputs to the `config/` nvf module tree.
23
24
- The nvf output creates the Neovim package used by `lib/env.nix` and `lib/mkPkg.nix`.
24
-
- Toolchain preferences flow from `programs.dashvim.toolchain.preferProjectTools` into `config/languages/toolchain.nix`, which overrides active LSP commands and known formatter/linter commands with resolver scripts at Nix module priority 90. TypeScript's `tsserver_path` is resolved in `config/languages/lsp.nix` so the lazy plugin package metadata remains intact.
25
+
- Toolchain preferences flow from `programs.dashvim.toolchain.preferProjectTools` into `config/languages/toolchain.nix`, which overrides active LSP commands and known formatter/linter commands with resolver scripts at Nix module priority 90. TypeScript's `tsserver_path` is resolved in `config/languages/lsp.nix` so the lazy plugin package metadata remains intact. Angular TypeScript support is loaded as the `@angular/language-service` tsserver plugin through `typescript-tools.nvim`; standalone Angular LS is reserved for Angular template buffers.
26
+
- Roslyn preferences flow from `programs.dashvim.lsp.special.roslyn` into `roslyn.nvim` setup options. The default keeps recursive file watching `"off"` so Roslyn and Neovim do not create broad watchers, and DashVim sends targeted `workspace/didChangeWatchedFiles` notifications when C# project files are saved. Users can opt into `"auto"` or `"roslyn"` only when full external file watching is more important than watcher safety.
25
27
- Shared dependencies are collected in `lib/dependencies.nix` and reused by flake packages and Home Manager integration.
26
28
- Opencode theme generation uses the configured Base16 colorscheme and optional accent color, then writes generated JSON files through `lib/opencode-config.nix`.
27
29
@@ -33,10 +35,12 @@ DashVim is a Nix flake that builds and distributes a Neovim configuration based
33
35
- Base16 color contract: UI themes and opencode colors derive from a Base16-compatible palette, with `accentColor` overriding `base0D` when set.
34
36
- Global agent instructions: `AGENTS.md` is included in root opencode config, the wrapped opencode instruction paths, and Home Manager deployed opencode instructions. It requires architecture, UI, code guidelines, technical debt, and testing docs to stay current.
35
37
- Project tool preference is enabled by default: known LSPs, formatters, and linters first look for a project/shell executable that differs from DashVim's pinned fallback, preserving reproducibility when a project does not provide a tool.
38
+
- Angular language ownership is split to avoid duplicate TypeScript LSP results: `typescript-tools.nvim` owns JavaScript/TypeScript buffers and loads Angular's tsserver plugin, while standalone `ngserver` owns `htmlangular` buffers and TypeScript references in Angular projects so references include external templates.
36
39
37
40
## Tradeoffs
38
41
39
42
- Generated opencode configs are reproducible, but users must rebuild or redeploy after changing generated inputs.
40
43
-`programs.dashvim.opencode.config` can override generated opencode config keys, which is flexible but can replace defaults like `instructions` if users set the same key.
41
44
- The module surface is broad and convenient, but changes to defaults can affect many language/editor features at once.
42
45
- Project-aware tool resolution depends on Neovim seeing the project shell `PATH` before tools start. LSPs may need restart after entering a shell late.
46
+
- Recursive Roslyn file watching may consume significant inotify resources or watch too high a directory such as a home folder. DashVim avoids that by default, but files created outside Neovim may still require opening/saving the file or restarting the LSP before Roslyn refreshes project state.
Copy file name to clipboardExpand all lines: docs/CODE_GUIDELINES.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,6 +16,7 @@
16
16
- Keep Docker/container support Nix-generated unless a Dockerfile already exists or explicit instructions say not to use Nix.
17
17
- Use `alejandra` for Nix formatting, available as the flake `format` package.
18
18
- Keep project tool resolver runtime logic in tracked Rust source under `lib/toolchain/`; Nix should wire package metadata and generated launchers, not embed large resolver programs in strings.
19
+
- Keep plugin-backed LSP behavior with large runtime tradeoffs configurable under `programs.dashvim.lsp.special.*` instead of hard-coding environment-specific defaults.
Copy file name to clipboardExpand all lines: docs/TECHNICAL_DEBT.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,6 +10,8 @@ This file tracks known issues, limitations, deferred work, and cleanup items tha
10
10
- The `programs.dashvim` option surface is broad. Default changes can affect many editor, language, formatter, and opencode behaviors at once.
11
11
- Automated testing is currently Nix-focused. No separate unit/integration test suite is documented for Lua plugin behavior or interactive Neovim workflows.
12
12
-`programs.dashvim.toolchain.preferProjectTools` covers known DashVim/nvf LSP, formatter, and linter names. Custom direct `vim.lsp.servers`, conform formatter, or nvim-lint linter names still need explicit command configuration until a public extension map exists.
13
+
-`programs.dashvim.lsp.special.roslyn.filewatching` defaults to `"off"` to prevent Roslyn or Neovim from recursively watching too much of the filesystem. DashVim sends targeted `workspace/didChangeWatchedFiles` notifications for saved C# project files, but files created outside Neovim may still require opening/saving the file or restarting the LSP before Roslyn refreshes project state.
14
+
-`typescript-tools.nvim` does not expose a first-class plugin probe path option, so DashVim patches its generated process arguments to make Nix-provided `@angular/language-service` discoverable by tsserver. Revisit this if upstream adds `tsserver_plugin_probe_locations` or equivalent.
0 commit comments