(instrument_manager)=
# Instrument Management
The NexusLIMS Instrument Manager provides an interactive terminal user interface (TUI) for managing the instrument database. It offers a modern, user-friendly alternative to direct SQL database manipulation.
:::{warning}
This application directly modifies your NexusLIMS database. Back up your database file before making any changes, especially before deleting instruments!
:::
## Launching the TUI
The instrument manager is available as a command-line tool:
```bash
uv run nexuslims instruments manage
```
The TUI will automatically initialize the database if it doesn't exist yet.
```{tip}
Need a quick, scriptable summary of your instruments without opening the TUI?
Use `nexuslims instruments list` for a plain-text table or JSON output.
See the {ref}`nexuslims-instruments-list` section of the CLI reference for details.
```
## Main Interface
When you launch the instrument manager, you'll see a table listing all instruments in the database:

The main interface includes (from top down):
- **Filter input**: Search/filter instruments by any field
- **Instrument table**: Sortable columns showing key instrument details
- **Status bar**: Shows available keyboard shortcuts
### Navigation
- **Arrow keys** (↑/↓): Navigate through instrument list
- **Enter** or **e**: Select instrument for (e)diting
- **Tab** or **/**: Move between table and filter input
- **s**: Change sorting of table (sort order will be shown in notification)
- **?**: Show help screen
- **q** or **Ctrl+Q**: Quit application
### Sorting
Click on any column header to sort by that column. Click again to reverse the sort order. You can also press the **s** key to sort with the keyboard.
### Filtering
Press `/` to focus the filter input, then type to search across all fields:

The filter searches across all instrument fields (PID, location, display name, etc.).
## Adding Instruments
Press `a` to open the add instrument form:

The form includes:
- **Instrument PID**: Unique identifier (e.g., "FEI-Titan-TEM-635816")
- **API URL**: NEMO tool API endpoint
- **Calendar URL**: Web-accessible calendar URL
- **Display Name**: Human-readable name for records
- **Location**: Physical location (building and room)
- **Property Tag**: Unique reference number
- **Filestore Path**: Relative path under `NX_INSTRUMENT_DATA_PATH`
- **Harvester**: Calendar harvester integration (only "nemo" allowed)
- **Timezone**: IANA timezone string (e.g., "US/Eastern")
### Form Validation
The form validates:
- **Required fields**: All fields must be filled
- **Unique constraints**: PID and API URL must be unique
- **URL format**: API and calendar URLs must be valid
- **Timezone**: Must be a valid IANA timezone string
Invalid fields are highlighted in red with error messages.
### Keybindings
- **Tab** / **Shift+Tab**: Navigate between fields
- **Ctrl+S**: Save instrument
- **Escape** or **Cancel button**: Cancel without saving
## Editing Instruments
Select an instrument and press `e` to edit:

The edit form is identical to the add form, but pre-filled with the instrument's current values.
## Deleting Instruments
Select an instrument and press `d` to delete:

A confirmation dialog will appear before deletion. This action cannot be undone.
**Warning**: Deleting an instrument does not delete its associated session logs. Use with caution.
## Theme Switching
Press `Ctrl+T` to toggle between dark and light themes:

## Help Screen
Press `?` to view the built-in help screen:

The help screen shows all available keybindings and actions.
## Keybindings Reference
| Key | Action |
|-----|--------|
| **Navigation** | |
| ↑/↓ | Move selection up/down in table |
| Enter | Edit selected instrument |
| Tab | Switch between table and filter |
| / | Focus filter input for search |
| **Actions** | |
| a | Add new instrument |
| e | Edit selected instrument |
| d | Delete selected instrument |
| r | Refresh instrument list |
| ? | Show help screen |
| **Global** | |
| Ctrl+T | Toggle theme (dark/light) |
| Ctrl+Q | Quit application |
| q | Quit application |
| Escape | Close dialog or cancel action |
## Command-Line Options
```bash
# Show version information
nexuslims instruments manage --version
# Show help
nexuslims instruments manage --help
```
The application will use the database configured in your `.env` file.
To run with a different database, you can override `NX_DB_PATH` when starting
the application:
```bash
NX_DB_PATH=/path/to/different/db.sqlite nexuslims instruments manage
```
## Database Initialization
If the database doesn't exist when you launch the TUI, it will be automatically initialized:
1. Creates the database file at `NX_DB_PATH`
2. Runs Alembic migrations to create the schema
3. Displays the current schema version
You can also initialize the database manually using the migration CLI:
```bash
nexuslims db init
```
See the {doc}`/user_guide/migrations` guide for more details on database migrations.
## Troubleshooting
### Database Connection Errors
If you see database connection errors:
1. Verify `NX_DB_PATH` environment variable is set
2. Ensure the database file exists and is readable
3. Check that migrations are up to date: `nexuslims db current`
### Validation Errors
If form validation fails:
- Check error messages at the bottom of the form
- Ensure unique fields (PID, API URL) don't conflict with existing instruments
- Verify timezone strings match IANA timezone database (e.g., "America/New_York", not "EST")
- Confirm URLs are properly formatted with scheme (https://)
## See Also
- {doc}`cli_reference` - Full CLI command reference (includes `nexuslims instruments list`)
- {doc}`/user_guide/migrations` - Database schema management
- {doc}`/dev_guide/database` - Database schema documentation