Description
As of v1.25.2, this is the menu presented during settings:
While effective for now, having everything listed as top-level elements to select will limit extensibility and user-customization as user-configurable settings grow.
I think it would be wise to re-organize into a settings interface with sub-menus:
/settings
│
├─ Appearance
│ ├── Theme - Change color scheme
│ ├── Title Shape - Customize box title styles
│ ├── Nanocoder Shape - Change welcome banner font
│ └── ...
│
├─ Behavior
│ ├── Paste Threshold - Set single-line paste character limit
│ ├── Notifications - Desktop notification preferences
│ └── ...
│
├─ Provider & MCP Overrides
│ └── ...
│
...
Use Case
Currently, there are 5 user-configurable settings via TUI, but 20+ configurations listed in the documentation. Reorganizing them into a tree structure will i) allow a foolproof method of customizing nanocoder without directly modifying the .json files, and ii) allow future scaling and addition of configurable settings
Proposed Solution
These changes will enable a richer user configuration:
- Rather than the user typing
/settings to customize 5 parameters, have it display a nested directory structure. First level will be broad categories (appearance, behavior, MCPs, etc.). When the user selects one, it opens a sub-menu with more specific settings in that category.
- Add text-input for certain settings. Multiple-choice options are reasonable for some settings (e.g. banner font), but allowing the user to manually input text for non-enumerated settings (single-line paste threshold, default context size, etc.) is a more viable choice for numeric values and custom filepaths.
- Along with (2.), add input validation for parameters
Alternatives Considered
- Keeping the
/settings as-is
- Implement nested structure without text input for parameters
Additional Context
Implementation Notes (optional)
There are two main questions that I use input on:
- Which parameters from docs/configuration/index.md will we enable interactive user configuration for? Are there any we want to exclude?
- How do we want to group the parameters?
Currently I'm thinking an initial grouping of
- Appearance
- Input
- Providers
- MCPs
- WebSearch
- Advanced
Where Advanced contains options that either are intended for Nanocoder developers (Logging, modifying feature .md files, etc.) or could break the nanocoder configuration (model parameters, environment overrides, etc.)
This is motivated by wanting to implement a handful of new customization features. Namely, i) custom input keybinds, ii) manual editing of theme colors, iii) plugin management, but I'll open those as standalone feature and pull requests. For now, I think it's important to re-organize the settings menu to enable user configuration and extensibility.
I'm happy to implement this, but wanted to get folks' input before making decisions about organization and design philosophy
Description
As of v1.25.2, this is the menu presented during settings:
While effective for now, having everything listed as top-level elements to select will limit extensibility and user-customization as user-configurable settings grow.
I think it would be wise to re-organize into a settings interface with sub-menus:
Use Case
Currently, there are 5 user-configurable settings via TUI, but 20+ configurations listed in the documentation. Reorganizing them into a tree structure will i) allow a foolproof method of customizing nanocoder without directly modifying the .json files, and ii) allow future scaling and addition of configurable settings
Proposed Solution
These changes will enable a richer user configuration:
/settingsto customize 5 parameters, have it display a nested directory structure. First level will be broad categories (appearance, behavior, MCPs, etc.). When the user selects one, it opens a sub-menu with more specific settings in that category.Alternatives Considered
/settingsas-isAdditional Context
Implementation Notes (optional)
There are two main questions that I use input on:
Currently I'm thinking an initial grouping of
Where
Advancedcontains options that either are intended for Nanocoder developers (Logging, modifying feature .md files, etc.) or could break the nanocoder configuration (model parameters, environment overrides, etc.)This is motivated by wanting to implement a handful of new customization features. Namely, i) custom input keybinds, ii) manual editing of theme colors, iii) plugin management, but I'll open those as standalone feature and pull requests. For now, I think it's important to re-organize the settings menu to enable user configuration and extensibility.
I'm happy to implement this, but wanted to get folks' input before making decisions about organization and design philosophy