diff --git a/.chezmoiignore b/.chezmoiignore index ee89430..10b67b2 100644 --- a/.chezmoiignore +++ b/.chezmoiignore @@ -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 diff --git a/dot_config/fastfetch/config.jsonc b/dot_config/fastfetch/config.jsonc new file mode 100644 index 0000000..190d5b3 --- /dev/null +++ b/dot_config/fastfetch/config.jsonc @@ -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" + ] +} diff --git a/dot_config/fish/config.fish b/dot_config/fish/config.fish index 085f178..270f737 100644 --- a/dot_config/fish/config.fish +++ b/dot_config/fish/config.fish @@ -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 diff --git a/dot_config/ghostty/config b/dot_config/ghostty/config index df2d03c..ea72cb7 100644 --- a/dot_config/ghostty/config +++ b/dot_config/ghostty/config @@ -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 diff --git a/dot_config/starship.toml b/dot_config/starship.toml index cf81700..cd31770 100644 --- a/dot_config/starship.toml +++ b/dot_config/starship.toml @@ -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)' diff --git a/dot_config/zellij/config.kdl b/dot_config/zellij/config.kdl index f46f5b8..4cb71b9 100644 --- a/dot_config/zellij/config.kdl +++ b/dot_config/zellij/config.kdl @@ -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"; } + } +}