NeoTerm's profile system allows you to create multiple terminal configurations with different settings, perfect for separating work environments, projects, or use cases.
A profile is a saved collection of terminal settings including:
- Color Scheme - Specific theme for this profile (optional)
- Font - Specific font for this profile (optional)
- Shell Path - Which shell to use (bash, zsh, fish, etc.)
- Initial Command - Commands to run automatically on startup
- Extra Keys - Enable/disable extra keys row
- Word-based IME - Input method configuration
- Bell Settings - Enable/disable terminal bell
- Vibration - Enable/disable vibration on bell
- Special Key Bindings - Volume keys behavior
- Open NeoTerm
- Menu (⋮) → Settings → Profile Manager
- Tap "Create New Profile" or "+"
Profile Name (required):
- Give your profile a descriptive name
- Examples: "Work", "Personal", "Server Admin", "Python Dev"
Color Scheme (optional):
- Select from 115 available schemes
- Leave empty to use global color scheme
- When set: overrides global for this profile
Font (optional):
- Select from 28 available fonts
- Leave empty to use global font
- When set: overrides global for this profile
Shell Path:
- Default:
/data/data/io.neoterm/files/usr/bin/bash - Other options:
/bin/sh,/usr/bin/zsh,/usr/bin/fish - Custom: Any valid shell path
Initial Command:
- Commands to run when session starts
- Examples:
cd ~/projects && lssource ~/.profile && cleartmux attach || tmux
Extra Keys:
- ☑ Enable: Show extra keys row (ESC, TAB, CTRL, etc.)
- ☐ Disable: Hide extra keys row
Word-based IME:
- ☑ Enable: Better for some keyboards and languages
- ☐ Disable: Standard input method (default)
Bell & Vibration:
- Terminal bell enable/disable
- Vibration on bell enable/disable
Tap "Save" to create the profile.
Method 1: From Tab Switcher
- Tap tab switcher button
- Tap "+" or Menu → New Session with Profile
- Select profile from list
- New session opens with profile settings
Method 2: From Menu
- Menu (⋮) → New Session with Profile
- Select profile
- Session opens immediately
Method 3: App Shortcut (Android 7.1+)
- Long-press NeoTerm icon on home screen
- Select profile shortcut
- New session opens with that profile
Menu → New Session creates a session without profile, using global settings.
Session WITH Profile:
Profile Settings → Override → Global Settings
- If profile has color scheme: uses profile color scheme
- If profile has no color scheme: uses global color scheme
- If profile has font: uses profile font
- If profile has no font: uses global font
- Other settings always come from profile
Session WITHOUT Profile:
Global Settings → Applied Directly
- Uses current global color scheme
- Uses current global font
- Changes to global settings apply immediately
Scenario: You have:
- Global color scheme: Nord
- Global font: JetBrains Mono 14pt
- Profile "Work" with: Gruvbox color, no font set
- Profile "Python" with: Dracula color, Fira Code font
Results:
-
New Session (no profile):
- Color: Nord (global)
- Font: JetBrains Mono 14pt (global)
- Changes with global settings
-
Work Profile Session:
- Color: Gruvbox (profile)
- Font: JetBrains Mono 14pt (global, profile has no font)
- Color never changes, font changes with global
-
Python Profile Session:
- Color: Dracula (profile)
- Font: Fira Code (profile)
- Never changes, fully isolated
- Menu → Settings → Profile Manager
- Tap profile to edit
- Modify settings
- Save changes
- Note: Changes apply to NEW sessions only, not existing sessions
- Menu → Settings → Profile Manager
- Long-press profile
- Select "Delete"
- Confirm deletion
- Note: Existing sessions with this profile continue working but are no longer associated with the profile
- Menu → Settings → Profile Manager
- Long-press profile
- Select "Duplicate"
- Modify duplicate as needed
- Save
Profiles are stored as NeoLang files (.nl) in:
~/.config/neoterm/profiles/
profile {
meta-name: "shell-profile"
profile-name: "Work"
login-shell: "/data/data/io.neoterm/files/usr/bin/bash"
initial-command: "cd ~/work && ls"
profile-font: "JetBrains-Mono"
profile-color-scheme: "GruvboxDark"
enable-bell: true
enable-vibrate: false
enable-extra-keys: true
enable-word-based-ime: false
enable-special-volume-keys: false
enable-back-key-to-escape: true
}
Advanced users can create profiles manually:
- Create
.nlfile in~/.config/neoterm/profiles/ - Use NeoLang syntax (see example above)
- Restart NeoTerm or reload profiles
- Profile appears in Profile Manager
Export Profile:
- Copy profile file from
~/.config/neoterm/profiles/ - Share
.nlfile
Import Profile:
- Copy
.nlfile to~/.config/neoterm/profiles/ - Restart NeoTerm
- Profile appears in list
Name: Python Dev
Shell: bash
Initial Command: source ~/venv/bin/activate && cd ~/projects
Color: Dracula
Font: Fira Code
Extra Keys: Enabled
Name: Server Admin
Shell: bash
Initial Command: ssh user@server.com
Color: Nord
Font: Hack
Extra Keys: Enabled
Bell: Disabled (for SSH noise)
Name: Personal
Shell: zsh
Initial Command: neofetch && cd ~
Color: Catppuccin Mocha
Font: JetBrains Mono
Extra Keys: Disabled
Name: Tmux
Shell: bash
Initial Command: tmux attach || tmux new
Color: Gruvbox Dark
Font: Source Code Pro
Extra Keys: Enabled
Name: Scripts
Shell: bash
Initial Command: cd ~/bin && ls -la
Color: Tokyo Night Dark
Font: Ubuntu Mono
Extra Keys: Enabled
Different shells for different use cases:
Bash Profile:
- Standard, compatible, widely supported
- Good for: General use, scripts, compatibility
Zsh Profile:
- Advanced features, oh-my-zsh support
- Good for: Power users, customization
Fish Profile:
- Modern syntax, auto-suggestions
- Good for: Interactive use, beginners
Single command:
cd ~/projects
Multiple commands (use &&):
cd ~/work && git fetch && ls
Run script:
bash ~/startup.sh
Conditional execution:
[ -f ~/.profile ] && source ~/.profile
Set in initial command:
export PATH=$PATH:~/bin && export EDITOR=vim
Or create a sourced script:
source ~/.neoterm-profile
Symptom: Session doesn't use profile settings
Solutions:
- Check profile has non-empty name
- Verify settings are actually set in profile (not left empty)
- Create NEW session (changes don't apply to existing sessions)
- Check profile file exists in
~/.config/neoterm/profiles/
Symptom: Changing global colors doesn't affect session
Cause: Session is using a profile with color scheme set
Solution: Either:
- Remove color scheme from profile (use global)
- Change color in profile itself
- Create new session without profile
Symptom: Session starts but command doesn't run
Solutions:
- Check command syntax (test in normal terminal first)
- Use full paths for executables
- Check permissions
- View error: Initial command output appears in terminal
Check:
ls ~/.config/neoterm/profiles/- File may have been deleted or corrupted
- Restore from backup if available
Profiles are implemented in:
app/src/main/java/io/neoterm/component/profile/comp.kt- Profile componentapp/src/main/java/io/neoterm/component/profile/data.kt- Profile data structuresapp/src/main/java/io/neoterm/component/session/shell.kt- ShellProfile class
NeoTerm maintains a hidden default profile (__DEFAULT__) that:
- Reflects current global settings
- Used for sessions without explicit profile
- Not shown in Profile Manager
- Automatically updated when global settings change
When loading profiles, NeoTerm validates:
- ✓ File format is valid NeoLang
- ✓ Profile meta-name matches expected type
- ✓ Profile name is non-empty
- ✓ Shell path exists (warns if missing)
- ✓ Color scheme exists (falls back to default)
- ✓ Font exists (falls back to default)
- Color Schemes - Available color schemes for profiles
- Fonts - Available fonts for profiles
- Sessions - Session management
- Customization - Global customization options
Profile Component: component/profile/
Configuration Format: NeoLang (.nl)
Storage: ~/.config/neoterm/profiles/