Skip to content

[Feature] Re-organized settings menu + new UI for settings configuration #471

@grenkoca

Description

@grenkoca

Description

As of v1.25.2, this is the menu presented during settings:

Image

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:

  1. 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.
  2. 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.
  3. 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

  • I have searched existing issues to ensure this is not a duplicate
  • This feature aligns with the project's goals (local-first AI assistance)

Implementation Notes (optional)

There are two main questions that I use input on:

  1. Which parameters from docs/configuration/index.md will we enable interactive user configuration for? Are there any we want to exclude?
  2. How do we want to group the parameters?

Currently I'm thinking an initial grouping of

  1. Appearance
  2. Input
  3. Providers
  4. MCPs
  5. WebSearch
  6. 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

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions