Replace placeholders with real configs, port Zsh to Fish

- starship.toml: rainbow p10k-style prompt with powerline segments
- ghostty: JetBrains Mono, TokyoNight theme, clipboard settings
- zellij: tokyo-night-custom theme, Alt keybinds, Fish as default shell
- fastfetch: custom colors (magenta/blue), full module list with battery
- fish config.fish: ported from zsh — starship, zoxide, direnv, fzf,
  zellij auto-attach on ghostty, all aliases (eza, bat, docker, ansible,
  uv), addalias/listalias functions, fastfetch on login
- .chezmoiignore: servers skip ghostty, zellij, fastfetch; source
  reference dirs (laptop/, manjaro/) excluded from deployment
This commit is contained in:
Travis Herbranson 2026-05-02 18:49:56 -04:00
parent 4a83ebee49
commit 288102ab46
6 changed files with 343 additions and 118 deletions

View File

@ -2,7 +2,11 @@
{{ if eq .machine_type "server" }}
dot_config/ghostty
dot_config/zellij
dot_config/fastfetch
{{ end }}
# Source reference files — not deployed
laptop/
manjaro/
README.md
LICENSE

View File

@ -0,0 +1,51 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
"type": "auto",
"color": {
"1": "magenta",
"2": "blue"
}
},
"display": {
"separator": " ➜ ",
"color": {
"separator": "green",
"keys": "blue",
"title": "magenta"
}
},
"modules": [
{
"type": "title",
"color": {
"user": "magenta",
"at": "white",
"host": "blue"
}
},
"separator",
"os",
"host",
"kernel",
"uptime",
"packages",
"shell",
"terminal",
"de",
"wm",
"theme",
"icons",
"font",
"cursor",
"cpu",
"gpu",
"memory",
"disk",
"localip",
"battery",
"locale",
"break",
"colors"
]
}

View File

@ -1,8 +1,5 @@
# ┌──────────────────────────────────────────────────────────┐
# │ PLACEHOLDER — replace with your actual Fish config │
# │ This file is managed by Chezmoi. │
# │ Edit the source: chezmoi edit ~/.config/fish/config.fish
# └──────────────────────────────────────────────────────────┘
# Fish shell configuration
# Ported from Zsh config — Fish + Starship + Zellij + Ghostty stack
if status is-interactive
@ -12,28 +9,57 @@ if status is-interactive
# ── Navigation ──────────────────────────────────────────
zoxide init fish | source
# ── direnv ──────────────────────────────────────────────
direnv hook fish | source
# ── fzf ─────────────────────────────────────────────────
# fzf.fish plugin handles Ctrl+R (history) and Ctrl+F (files)
set -gx FZF_DEFAULT_OPTS "--height 40% --layout=reverse --border --info=inline"
# ── Aliases ─────────────────────────────────────────────
alias ls "eza --icons --group-directories-first"
alias ll "eza -la --icons --group-directories-first --git"
alias lt "eza --tree --level=2 --icons"
alias cat "bat --paging=never"
alias catp "bat"
# ── Zellij auto-attach ──────────────────────────────────
# Auto-attach to default session when opening a new Ghostty terminal
if test -z "$ZELLIJ" -a "$TERM" = "xterm-ghostty"
zellij attach --create default
end
# Git
# ── Aliases: files ──────────────────────────────────────
alias ls "eza --icons"
alias ll "eza -lah --icons"
alias lt "eza --tree --level=2 --icons"
alias cat "bat"
alias catp "bat --paging=always"
# ── Aliases: git ────────────────────────────────────────
alias gs "git status"
alias gd "git diff"
alias gl "git log --oneline -20"
alias gp "git pull"
# Docker
# ── Aliases: docker ─────────────────────────────────────
alias dc "docker compose"
alias dps "docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
alias dps 'docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'
alias dlog "docker logs -f"
alias dcup "docker compose up -d"
alias dcdown "docker compose down"
alias dlogs "docker compose logs -f"
# Safety nets
# ── Aliases: ansible ────────────────────────────────────
alias ap "ansible-playbook"
alias av "ansible-vault"
# ── Aliases: python/uv ──────────────────────────────────
alias pysync "uv sync"
alias pyrun "uv run"
alias pyshell "uv run ipython"
# ── Aliases: clipboard ──────────────────────────────────
alias xc "xclip -selection clipboard"
# ── Aliases: misc ───────────────────────────────────────
alias fetch "fastfetch"
alias neofetch "fastfetch"
# ── Safety nets ─────────────────────────────────────────
alias rm "rm -i"
alias mv "mv -i"
alias cp "cp -i"
@ -41,6 +67,9 @@ if status is-interactive
# ── Environment ─────────────────────────────────────────
set -gx EDITOR vim
set -gx VISUAL vim
set -gx COLORTERM truecolor
# Suppress Fish greeting
set -g fish_greeting
# ── System Info (login shells only) ─────────────────────
@ -49,3 +78,18 @@ if status is-interactive
end
end
# ── Custom functions ────────────────────────────────────────
# Quick alias management (like addalias from zsh)
function addalias --description "Add a persistent alias"
set -l name $argv[1]
set -l cmd $argv[2..-1]
echo "alias $name \"$cmd\"" >> ~/.config/fish/conf.d/custom_aliases.fish
source ~/.config/fish/conf.d/custom_aliases.fish
echo "Added: $name"
end
function listalias --description "List custom aliases"
cat ~/.config/fish/conf.d/custom_aliases.fish 2>/dev/null; or echo "No custom aliases yet"
end

View File

@ -1,33 +1,8 @@
# ┌──────────────────────────────────────────────────────────┐
# │ PLACEHOLDER — replace with your actual Ghostty config │
# │ This file is managed by Chezmoi. │
# │ Edit the source: chezmoi edit ~/.config/ghostty/config │
# └──────────────────────────────────────────────────────────┘
# Font
font-family = JetBrainsMono Nerd Font
font-size = 14
# Theme — pick one and uncomment, or paste your custom palette below
# theme = catppuccin-mocha
# theme = tokyo-night
# theme = dracula
# theme = gruvbox-dark
# Window
font-family = JetBrains Mono
font-size = 13
theme = TokyoNight
window-padding-x = 8
window-padding-y = 4
window-decoration = auto
# Cursor
cursor-style = block
cursor-style-blink = true
# Shell — Fish is set as login shell by Ansible, Ghostty inherits it
# shell-integration = fish
# Scrollback
scrollback-limit = 10000
# Clipboard
window-padding-y = 8
copy-on-select = clipboard
clipboard-read = allow
clipboard-write = allow

View File

@ -1,74 +1,188 @@
# ┌──────────────────────────────────────────────────────────┐
# │ PLACEHOLDER — replace with your p10k-style config │
# │ This file is managed by Chezmoi. │
# │ Edit the source: chezmoi edit ~/.config/starship.toml │
# │ │
# │ NOTE: Starship reads from ~/.config/starship.toml │
# │ Chezmoi maps this file there via the directory layout. │
# └──────────────────────────────────────────────────────────┘
command_timeout = 1000
add_newline = true
# ~/.config/starship.toml
# --- 1. THE ASSEMBLY LINE ---
format = """
$username\
$hostname\
[](white)[ ](bg:#9A348E)\
$os\
[](fg:#9A348E bg:#0087FF)\
$directory\
[](fg:#0087FF bg:#00D700)\
$git_branch\
$git_commit\
$git_state\
$git_status\
[](fg:#00D700)\
$fill\
[](fg:#86BBD8)\
$python\
$golang\
$nodejs\
$rust\
$golang\
$java\
$scala\
[](fg:#06969A bg:#86BBD8)\
$docker_context\
$cmd_duration\
[](fg:#33658A bg:#06969A)\
$time\
[ ](bg:#33658A)\
$status\
$line_break\
$character"""
$character\
"""
[character]
success_symbol = "[](bold green)"
error_symbol = "[](bold red)"
[directory]
truncation_length = 4
truncation_symbol = "…/"
truncate_to_repo = true
style = "bold cyan"
[git_branch]
format = "[$symbol$branch(:$remote_branch)]($style) "
# --- 2. PART DEFINITIONS ---
[fill]
symbol = " "
style = "bold purple"
# OS Module (Purple Block)
[os]
disabled = false
style = "fg:#ffffff bg:#9A348E"
format = '[$symbol]($style)'
[os.symbols]
Windows = " "
Macos = " "
Linux = " "
Arch = " "
Ubuntu = " "
Fedora = " "
Debian = " "
Mint = " "
# UPDATED: Correct Manjaro logo
Manjaro = " "
# Directory Module (Blue Block)
[directory]
style = "fg:#ffffff bg:#0087FF"
format = '[ $path ]($style)'
truncation_length = 3
truncation_symbol = "…/"
# Git Branch Module (Green Block)
[git_branch]
symbol = " "
style = "fg:#000000 bg:#00D700"
format = '[ $symbol$branch(:$remote_branch) ]($style)'
truncation_length = 20
truncation_symbol = "…"
# Git Status Module (detailed status)
[git_status]
format = '([\[$all_status$ahead_behind\]]($style) )'
style = "bold red"
style = "fg:#000000 bg:#00D700"
format = '[$all_status$ahead_behind ]($style)'
conflicted = "⚔️ "
ahead = "⇡${count} "
behind = "⇣${count} "
diverged = "⇕⇡${ahead_count}⇣${behind_count} "
untracked = "?${count} "
stashed = "📦${count} "
modified = "!${count} "
staged = "+${count} "
renamed = "»${count} "
deleted = "✘${count} "
# Git Commit (shows current commit)
[git_commit]
style = "fg:#000000 bg:#00D700"
format = '[ #$hash$tag ]($style)'
commit_hash_length = 7
only_detached = true
# Git State (rebase, merge, etc)
[git_state]
style = "fg:#ffffff bg:#FF0000"
format = '[\($state( $progress_current/$progress_total)\)]($style)'
rebase = "REBASING"
merge = "MERGING"
revert = "REVERTING"
cherry_pick = "CHERRY-PICKING"
bisect = "BISECTING"
am = "AM"
am_or_rebase = "AM/REBASE"
[python]
format = '[${symbol}(${version} )(\($virtualenv\) )]($style)'
symbol = " "
# UPDATED: Switched from emoji to Nerd Font
symbol = " "
style = "fg:#000000 bg:#86BBD8"
format = '[ $symbol($virtualenv )($version) ](fg:#000000 bg:#86BBD8)'
[golang]
format = "[$symbol($version )]($style)"
symbol = " "
symbol = " "
style = "fg:#000000 bg:#86BBD8"
format = '[ $symbol($version) ](fg:#000000 bg:#86BBD8)'
[gradle]
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[haskell]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[java]
symbol = " "
style = "fg:#000000 bg:#86BBD8"
format = '[ $symbol($version) ](fg:#000000 bg:#86BBD8)'
[julia]
symbol = " "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[nodejs]
format = "[$symbol($version )]($style)"
symbol = " "
symbol = " "
style = "fg:#000000 bg:#86BBD8"
format = '[ $symbol($version) ](fg:#000000 bg:#86BBD8)'
[nim]
symbol = "󰆥 "
style = "bg:#86BBD8"
format = '[ $symbol ($version) ]($style)'
[rust]
symbol = " "
style = "fg:#000000 bg:#86BBD8"
format = '[ $symbol($version) ](fg:#000000 bg:#86BBD8)'
[scala]
symbol = " "
style = "fg:#000000 bg:#86BBD8"
format = '[ $symbol($version) ](fg:#000000 bg:#86BBD8)'
[docker_context]
format = "[$symbol$context]($style) "
symbol = " "
only_with_files = true
# UPDATED: Added standard Docker icon
symbol = " "
style = "fg:#ffffff bg:#06969A"
#format = 'via [🐋 $context](blue bold)'
format = '[ $symbol$context ](fg:#ffffff bg:#06969A)'
#format = "via [⬢ $context](bold blue) "
#detect_files = ["Dockerfile", "docker-compose.yml", ".dockerenv"]
#disabled = false
[cmd_duration]
min_time = 2_000
format = "[$duration]($style) "
#[docker_context]
#format = 'via [🐋 $context](blue bold)'
[username]
show_always = false
format = "[$user]($style)@"
[hostname]
ssh_only = true
format = "[$ssh_symbol$hostname]($style) "
ssh_symbol = "🌐 "
[time]
disabled = false
time_format = "%R"
style = "fg:#FFFFFF bg:#33658A"
format = '[ $time  ]($style)'
[status]
disabled = false
style = "(fg:#ffffff bg:#FF0000)"
format = '[](fg:#FF0000 bg:#33658A)[ ✘ $status ](fg:#ffffff bg:#FF0000)'
# The Prompt Arrow
[character]
success_symbol = '[╰─](white) '
error_symbol = '[╰─](white) '
#[status]
#disabled = false
#style = "(fg:#ffffff bg:#FF0000)"
#format = '[](fg:#FF0000 bg:#33658A)[ ✘ $status ]($style)'

View File

@ -1,26 +1,63 @@
// ┌──────────────────────────────────────────────────────────┐
// │ PLACEHOLDER — replace with your actual Zellij config │
// │ This file is managed by Chezmoi. │
// │ Edit the source: chezmoi edit ~/.config/zellij/config.kdl │
// └──────────────────────────────────────────────────────────┘
//theme "catppuccin-mocha"
//theme "tokyo-night"
themes {
tokyo-night-custom {
fg "#a9b1d6"
bg "#1a1b26"
black "#32344a"
red "#f7768e"
green "#ad8ee6"
yellow "#e0af68"
blue "#7aa2f7"
magenta "#ad8ee6"
cyan "#449dab"
white "#787c99"
orange "#ff9e64"
}
}
theme "tokyo-night-custom"
// Theme — uncomment one or define custom below
// theme "catppuccin-mocha"
// theme "dracula"
// theme "tokyo-night"
// Default shell
default_shell "fish"
// UI
pane_frames true
default_layout "compact"
// Mouse
mouse_mode true
// Copy
// Copy behavior
copy_on_select true
// Scrollback
scroll_buffer_size 10000
// Scrollback buffer (lines per pane)
scroll_buffer_size 50000
// Mouse support
mouse_mode true
simplified_ui false
// Mirror session (all connected clients see the same view)
mirror_session true
// Pane frames (borders around panes)
pane_frames true
// Auto-create layouts directory
auto_layout true
// Session serialization (persist layout on exit)
session_serialization true
// Idle timeout for status bar hints (milliseconds)
scrollback_lines_to_serialize 10000
keybinds {
shared {
unbind "Ctrl p" "Ctrl t" "Ctrl n" "Ctrl h" "Ctrl s" "Ctrl o" "Ctrl q" "Ctrl g"
bind "Alt p" { SwitchToMode "pane"; }
bind "Alt t" { SwitchToMode "tab"; }
bind "Alt n" { SwitchToMode "resize"; }
bind "Alt h" { SwitchToMode "move"; }
bind "Alt s" { SwitchToMode "scroll"; }
bind "Alt o" { SwitchToMode "session"; }
bind "Alt q" { Quit; }
bind "Alt g" { SwitchToMode "locked"; }
}
locked {
unbind "Ctrl g"
bind "Alt g" { SwitchToMode "normal"; }
}
}