Terminal Configuration
Terminal emulator configs live in home/terminal/.
Configuration Files
home/terminal/
default.nix # Aggregates all terminal configs
ghostty.nix # Ghostty terminal
kitty.nix # Kitty terminal
starship.nix # Starship prompt
atuin.nix # Shell history
bat.nix # Cat replacement with syntax highlighting
cli-tools.nix # CLI utilities (eza, ripgrep, etc.)
dev-tools.nix # Development tools (git, direnv)
Ghostty Configuration
Ghostty uses a plain text config file:
# home/terminal/ghostty.nix
{ pkgs, ... }: {
home.packages = [ pkgs.ghostty ];
xdg.configFile."ghostty/config".text = ''
# Font
font-family = JetBrainsMono Nerd Font
font-size = 12
# Window
window-padding-x = 8
window-padding-y = 4
gtk-titlebar = true
gtk-single-instance = true
# Theme
theme = catppuccin-mocha
background-opacity = 0.95
# Shell integration
shell-integration = detect
shell-integration-features = cursor,sudo,title
# Show working directory in title bar
window-subtitle = working-directory
# Keybinds
keybind = global:ctrl+grave_accent=toggle_quick_terminal
'';
}
Key Ghostty Settings
| Setting | Purpose |
|---|---|
window-subtitle = working-directory |
Show PWD in window title |
gtk-titlebar = true |
Show GTK header bar |
gtk-single-instance = true |
Reuse existing Ghostty instance |
shell-integration-features |
Enable cursor, sudo, title updates |
background-opacity |
Transparency (0.0-1.0) |
Ghostty + niri CSD
For Ghostty's title bar to show in niri, enable client-side decorations:
# home/desktop/wm/niri/default.nix
programs.niri.settings = {
prefer-no-csd = false; # Allow apps to draw title bars
};
Kitty Configuration
# home/terminal/kitty.nix
{ ... }: {
programs.kitty = {
enable = true;
font = {
name = "JetBrainsMono Nerd Font";
size = 12;
};
theme = "Catppuccin-Mocha";
settings = {
background_opacity = "0.95";
window_padding_width = 8;
enable_audio_bell = false;
hide_window_decorations = "no";
};
};
}
Starship Prompt
# home/terminal/starship.nix
{ ... }: {
programs.starship = {
enable = true;
enableBashIntegration = true;
settings = {
format = ''
$directory$git_branch$git_status$nix_shell$cmd_duration
$character
'';
add_newline = false;
directory = {
truncation_length = 3;
truncate_to_repo = true;
style = "bold cyan";
};
git_branch = {
format = "[$branch]($style) ";
style = "bold purple";
};
nix_shell = {
symbol = "❄️ ";
style = "bold blue";
};
character = {
success_symbol = "[❯](bold green)";
error_symbol = "[❯](bold red)";
};
};
};
}
Shell Aliases
Define in home/terminal/default.nix:
home.shellAliases = {
cat = "bat";
ls = "eza";
ll = "eza -la";
};
Adding New Terminal
- Create
home/terminal/<terminal>.nix - Add to
home/terminal/default.niximports - Rebuild:
./scripts/dev-sync rebuild
Verification
After rebuild, check config was applied:
# Ghostty
cat ~/.config/ghostty/config
# Starship
starship config
Common Issues
Title bar not showing
- Set
prefer-no-csd = falsein niri config - Set
gtk-titlebar = truein Ghostty
Working directory not in title
- Use
window-subtitle = working-directoryin Ghostty - Ensure
shell-integration = detectis set
Converted and distributed by TomeVault — claim your Tome and manage your conversions.