From a0e34f78ae903665d51aedd390b4a713d2f55f8c Mon Sep 17 00:00:00 2001 From: David F Glidden Date: Mon, 28 Jul 2025 19:13:11 +0200 Subject: [PATCH] Recover missing Brewfile and enhance system updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add missing Brewfile (found in home directory) - Add bashrc and FZF configurations to dotfiles - Install mas CLI for Mac App Store management - Enhance sysupdate() with moon phase and MAS updates - Update symlinks script for all shell configs ๐Ÿ–– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- Brewfile | 173 ++++++++++++++++ config/iterm2/Nord.itermcolors | 344 ++++++++++++++++++++++++++++++++ config/iterm2/README.md | 99 +++++++++ config/iterm2/setup-iterm.sh | 64 ++++++ config/kitty/kitty.conf | 353 +++++++++++++++++++++++++++++++++ scripts/symlinks.sh | 3 + shell/.bashrc | 1 + shell/.fzf.bash | 7 + shell/.fzf.zsh | 7 + shell/functions.zsh | 50 ++++- 10 files changed, 1095 insertions(+), 6 deletions(-) create mode 100644 Brewfile create mode 100644 config/iterm2/Nord.itermcolors create mode 100644 config/iterm2/README.md create mode 100755 config/iterm2/setup-iterm.sh create mode 100644 config/kitty/kitty.conf create mode 100644 shell/.bashrc create mode 100644 shell/.fzf.bash create mode 100644 shell/.fzf.zsh diff --git a/Brewfile b/Brewfile new file mode 100644 index 0000000..0fe589e --- /dev/null +++ b/Brewfile @@ -0,0 +1,173 @@ +# Brewfile - Curated list for fresh macOS setup +# Comment out lines for apps you don't want installed + +# Taps +tap "homebrew/cask" +tap "homebrew/cask-fonts" + +# ============================================ +# SHELL & TERMINAL +# ============================================ +brew "antidote" # ZSH plugin manager +brew "powerlevel10k" # ZSH theme +brew "fzf" # Fuzzy finder +brew "zoxide" # Smarter cd command +brew "direnv" # Per-directory environment variables +brew "tmux" # Terminal multiplexer + +# ============================================ +# ESSENTIAL CLI TOOLS +# ============================================ +brew "mas" # Mac App Store CLI +brew "git" # Version control +brew "wget" # Download files +brew "tree" # Directory visualization +brew "coreutils" # GNU core utilities +brew "eza" # Modern ls replacement +brew "jq" # JSON processor +brew "ripgrep" # Fast grep alternative (rg) +brew "fd" # Fast find alternative +brew "bat" # Better cat with syntax highlighting +brew "tldr" # Simplified man pages +brew "httpie" # Modern curl alternative + +# ============================================ +# DEVELOPMENT TOOLS +# ============================================ +# brew "node" # Node.js (you use nvm instead) +brew "python@3.12" # Python (for proselint dependency) +brew "python@3.13" # Python (latest) +brew "pipx" # Install Python apps in isolated envs +brew "pandoc" # Document converter +brew "multimarkdown" # Enhanced markdown processor +brew "gh" # GitHub CLI +brew "proselint" # Prose linter + +# Text editors & IDEs +cask "iterm2" # Terminal emulator +cask "kitty" # GPU-accelerated terminal +cask "bbedit" # Text editor + +# Version control +cask "github" # GitHub Desktop + +# ============================================ +# PRODUCTIVITY & ESSENTIAL APPS +# ============================================ +cask "1password" # Password manager +cask "obsidian" # Knowledge base +cask "marked" # Markdown preview (Marked 2) +cask "launchbar" # Application launcher + +# Communication +cask "signal" # Encrypted messaging +# cask "telegram" # Messaging + +# ============================================ +# UTILITIES +# ============================================ +cask "karabiner-elements" # Keyboard customization +cask "hazel" # Automated organization +cask "keka" # Archive utility +cask "appcleaner" # Uninstall apps cleanly +cask "bartender" # Menu bar organization +cask "swiftbar" # Menu bar scripts +cask "soundsource" # Audio control +cask "vuescan" # Scanner software + +# ============================================ +# MEDIA & CREATIVE +# ============================================ +brew "ffmpeg" # Media processing +brew "yt-dlp" # YouTube downloader (active fork) +brew "exiftool" # Read/write EXIF metadata +cask "vlc" # Media player +cask "handbrake" # Video transcoder +cask "xld" # Audio converter +cask "transmission" # BitTorrent client + +# ============================================ +# OPTIONAL/SPECIFIC USE +# ============================================ +# Research & Reading +cask "calibre" # E-book management +# cask "zotero" # Reference management +# cask "anki" # Spaced repetition + +# Development & Transfer +# cask "docker" # Containerization +cask "transmit" # FTP/SFTP client + +# Security/Privacy +# cask "tunnelblick" # OpenVPN client +cask "gpg-suite" # GPG encryption +# cask "lulu" # Firewall +cask "oversight" # Webcam/mic monitor + +# Other tools +brew "neofetch" # System info display +brew "qrencode" # Generate QR codes +brew "mackup" # Backup/sync app preferences +brew "pass" # Password store (for GPG) +cask "ollama" # Local LLMs + +# ============================================ +# FONTS +# ============================================ +cask "font-hack-nerd-font" # Programming font with icons +# cask "font-fira-code-nerd-font" # Ligatures + icons +# cask "font-jetbrains-mono-nerd-font" # JetBrains + icons +# cask "font-meslo-lg-nerd-font" # Powerline + icons +# cask "font-source-code-pro-nerd-font" # Adobe Source Code Pro + icons + +# ============================================ +# MAC APP STORE APPS +# ============================================ +# Productivity +mas "Drafts", id: 1435957248 +mas "iA Writer", id: 775737590 +mas "Numbers", id: 409203825 +mas "Pages", id: 409201541 +mas "PCalc", id: 403504866 + +# Communication +mas "WhatsApp", id: 1147396723 + +# Safari Extensions +mas "1Password for Safari", id: 1569813296 +mas "AdGuard for Safari", id: 1440147259 +mas "Hush", id: 1544743900 +mas "Vinegar", id: 1591303229 +mas "StopTheMadness Pro", id: 6471380298 +mas "Super Agent", id: 1568262835 + +# Reading & Research +mas "Reeder.", id: 1529448980 +mas "Klib", id: 1196268448 +mas "forScore", id: 363738376 + +# Utilities +mas "LocalSend", id: 1661733229 +mas "NordVPN", id: 905953485 +mas "Table Tool", id: 1122008420 +mas "xSearch", id: 1579902068 +mas "Exporter", id: 1099120373 +mas "Mapper", id: 1589391989 +mas "Moon Pro", id: 1528941870 + +# Privacy/Security +mas "Orbot", id: 1609461599 + +# Optional (commented out) +# mas "Fantastical", id: 975937182 +# mas "Keynote", id: 409183694 +# mas "Dark Reader for Safari", id: 1438243180 + +# ============================================ +# APPS TO INSTALL MANUALLY +# ============================================ +# These don't have casks or require special handling: +# - Claude +# - ChatGPT +# - Dorico 5 (Steinberg) +# - Some audio production apps \ No newline at end of file diff --git a/config/iterm2/Nord.itermcolors b/config/iterm2/Nord.itermcolors new file mode 100644 index 0000000..8ebe33c --- /dev/null +++ b/config/iterm2/Nord.itermcolors @@ -0,0 +1,344 @@ + + + + + Ansi 0 Color + + Alpha Component + 1 + Blue Component + 0.32156863808631897 + Color Space + sRGB + Green Component + 0.25882354378700256 + Red Component + 0.23137255012989044 + + Ansi 1 Color + + Alpha Component + 1 + Blue Component + 0.41568627953529358 + Color Space + sRGB + Green Component + 0.38039216399192810 + Red Component + 0.74901962280273438 + + Ansi 10 Color + + Alpha Component + 1 + Blue Component + 0.54901963472366333 + Color Space + sRGB + Green Component + 0.74509805440902710 + Red Component + 0.63921570777893066 + + Ansi 11 Color + + Alpha Component + 1 + Blue Component + 0.54509806632995605 + Color Space + sRGB + Green Component + 0.79607844352722168 + Red Component + 0.92156863212585449 + + Ansi 12 Color + + Alpha Component + 1 + Blue Component + 0.75686275959014893 + Color Space + sRGB + Green Component + 0.63137257099151611 + Red Component + 0.50588238239288330 + + Ansi 13 Color + + Alpha Component + 1 + Blue Component + 0.67843139171600342 + Color Space + sRGB + Green Component + 0.55686277151107788 + Red Component + 0.70588237047195435 + + Ansi 14 Color + + Alpha Component + 1 + Blue Component + 0.73333334922790527 + Color Space + sRGB + Green Component + 0.73725491762161255 + Red Component + 0.56078433990478516 + + Ansi 15 Color + + Alpha Component + 1 + Blue Component + 0.95686274766921997 + Color Space + sRGB + Green Component + 0.93725490570068359 + Red Component + 0.92549020051956177 + + Ansi 2 Color + + Alpha Component + 1 + Blue Component + 0.54901963472366333 + Color Space + sRGB + Green Component + 0.74509805440902710 + Red Component + 0.63921570777893066 + + Ansi 3 Color + + Alpha Component + 1 + Blue Component + 0.54509806632995605 + Color Space + sRGB + Green Component + 0.79607844352722168 + Red Component + 0.92156863212585449 + + Ansi 4 Color + + Alpha Component + 1 + Blue Component + 0.75686275959014893 + Color Space + sRGB + Green Component + 0.63137257099151611 + Red Component + 0.50588238239288330 + + Ansi 5 Color + + Alpha Component + 1 + Blue Component + 0.67843139171600342 + Color Space + sRGB + Green Component + 0.55686277151107788 + Red Component + 0.70588237047195435 + + Ansi 6 Color + + Alpha Component + 1 + Blue Component + 0.81568628549575806 + Color Space + sRGB + Green Component + 0.75294119119644165 + Red Component + 0.53333336114883423 + + Ansi 7 Color + + Alpha Component + 1 + Blue Component + 0.94117647409439087 + Color Space + sRGB + Green Component + 0.91372549533843994 + Red Component + 0.89803922176361084 + + Ansi 8 Color + + Alpha Component + 1 + Blue Component + 0.41568627953529358 + Color Space + sRGB + Green Component + 0.33725491166114807 + Red Component + 0.29803922772407532 + + Ansi 9 Color + + Alpha Component + 1 + Blue Component + 0.41568627953529358 + Color Space + sRGB + Green Component + 0.38039216399192810 + Red Component + 0.74901962280273438 + + Background Color + + Alpha Component + 1 + Blue Component + 0.25098040699958801 + Color Space + sRGB + Green Component + 0.20392157137393951 + Red Component + 0.18039216101169586 + + Badge Color + + Alpha Component + 0.5 + Blue Component + 0.0 + Color Space + sRGB + Green Component + 0.1491314172744751 + Red Component + 1 + + Bold Color + + Alpha Component + 1 + Blue Component + 0.91372549533843994 + Color Space + sRGB + Green Component + 0.87058824300765991 + Red Component + 0.84705883264541626 + + Cursor Color + + Alpha Component + 1 + Blue Component + 0.91372549533843994 + Color Space + sRGB + Green Component + 0.87058824300765991 + Red Component + 0.84705883264541626 + + Cursor Guide Color + + Alpha Component + 0.25 + Blue Component + 1 + Color Space + sRGB + Green Component + 0.9268307089805603 + Red Component + 0.70213186740875244 + + Cursor Text Color + + Alpha Component + 1 + Blue Component + 0.25098040699958801 + Color Space + sRGB + Green Component + 0.20392157137393951 + Red Component + 0.18039216101169586 + + Foreground Color + + Alpha Component + 1 + Blue Component + 0.91372549533843994 + Color Space + sRGB + Green Component + 0.87058824300765991 + Red Component + 0.84705883264541626 + + Link Color + + Alpha Component + 1 + Blue Component + 0.73423302173614502 + Color Space + sRGB + Green Component + 0.35916060209274292 + Red Component + 0.0 + + Selected Text Color + + Alpha Component + 1 + Blue Component + 0.25098040699958801 + Color Space + sRGB + Green Component + 0.20392157137393951 + Red Component + 0.18039216101169586 + + Selection Color + + Alpha Component + 1 + Blue Component + 0.81568628549575806 + Color Space + sRGB + Green Component + 0.75294119119644165 + Red Component + 0.53333336114883423 + + + \ No newline at end of file diff --git a/config/iterm2/README.md b/config/iterm2/README.md new file mode 100644 index 0000000..c959524 --- /dev/null +++ b/config/iterm2/README.md @@ -0,0 +1,99 @@ +# iTerm2 Configuration + +This directory contains iTerm2 configuration to match the Kitty terminal setup with Nord theme. + +## Quick Setup + +1. **Import Nord Color Scheme**: + ```bash + # Run the setup script + ~/dotfiles/config/iterm2/setup-iterm.sh + ``` + +2. **Manual Color Import**: + - Open iTerm2 + - Press `Cmd+,` to open Preferences + - Go to **Profiles โ†’ Colors** + - Click **Color Presets...** dropdown + - Select **Import...** + - Navigate to `~/dotfiles/config/iterm2/Nord.itermcolors` + - Select **Nord** from the Color Presets dropdown + +## Matching Settings with Kitty + +The following settings match your Kitty configuration: + +### Font Configuration +- **Font**: Iosevka Term SS08 (or Dank Mono if you prefer) +- **Size**: 16pt +- **Ligatures**: Enabled +- **Non-ASCII Font**: Fira Code Nerd Font (for symbols) + +### Window Settings +- **Default Size**: 120 columns ร— 35 rows +- **Transparency**: 8% (equivalent to Kitty's 0.92 opacity) +- **Blur**: Optional, helps with readability + +### Behavior +- **Scrollback**: 10,000 lines +- **Copy on Selection**: Enabled +- **Visual Bell**: Enabled (no audio bell) +- **Cursor**: Block, blinking + +## Manual Configuration + +If you prefer to configure manually: + +1. **Font**: + - Profiles โ†’ Text โ†’ Font โ†’ Change Font + - Select "Iosevka Term SS08" or "Dank Mono", Size 16 + +2. **Colors**: + - Already handled by importing Nord.itermcolors + +3. **Window**: + - Profiles โ†’ Window โ†’ Settings for New Windows + - Columns: 120, Rows: 35 + - Transparency: Drag slider to ~8% + +4. **Terminal**: + - Profiles โ†’ Terminal โ†’ Scrollback Buffer + - Set to 10,000 lines + +5. **Keys**: + - Profiles โ†’ Keys โ†’ Key Mappings + - Add shortcuts as needed to match Kitty + +## Keyboard Shortcuts + +To match Kitty's shortcuts in iTerm2: + +| Action | Kitty | iTerm2 Setup | +|--------|-------|--------------| +| New Tab | `Cmd+T` | Default | +| Close Tab | `Cmd+W` | Default | +| Next Tab | `Cmd+]` | Default | +| Previous Tab | `Cmd+[` | Default | +| Font Size + | `Cmd+Plus` | Preferences โ†’ Keys โ†’ + | +| Font Size - | `Cmd+Minus` | Preferences โ†’ Keys โ†’ + | +| Font Size Reset | `Cmd+0` | Preferences โ†’ Keys โ†’ + | + +## Saving Your Configuration + +To save your iTerm2 configuration to dotfiles: + +1. Open Preferences (`Cmd+,`) +2. Go to **General โ†’ Preferences** +3. Click **Load preferences from a custom folder** +4. Select `~/dotfiles/config/iterm2` +5. Check **Save changes to folder when iTerm2 quits** + +This ensures your iTerm2 settings are backed up with your dotfiles. + +## Nord Theme Benefits + +The Nord color scheme is specifically chosen for: +- **Reduced eye strain** with muted colors +- **Excellent contrast** without being harsh +- **Better readability** for users with vision considerations +- **Consistent appearance** across Kitty and iTerm2 \ No newline at end of file diff --git a/config/iterm2/setup-iterm.sh b/config/iterm2/setup-iterm.sh new file mode 100755 index 0000000..7502146 --- /dev/null +++ b/config/iterm2/setup-iterm.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# Setup iTerm2 with Nord theme and matching Kitty settings + +set -euo pipefail + +DOTFILES_DIR="$HOME/dotfiles" +ITERM_CONFIG_DIR="$DOTFILES_DIR/config/iterm2" + +# Colors +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +echo -e "${BLUE}Setting up iTerm2 configuration...${NC}" + +# 1. Tell iTerm2 to use custom preferences folder +echo -e "${YELLOW}Configuring iTerm2 to use dotfiles preferences...${NC}" +defaults write com.googlecode.iterm2 PrefsCustomFolder -string "$ITERM_CONFIG_DIR" +defaults write com.googlecode.iterm2 LoadPrefsFromCustomFolder -bool true + +# 2. Set specific preferences matching Kitty config +echo -e "${YELLOW}Setting iTerm2 preferences to match Kitty...${NC}" + +# Font settings (Iosevka Term SS08, 16pt - matching Kitty) +defaults write com.googlecode.iterm2 "Normal Font" -string "IosevkaTermSS08-Regular 16" +defaults write com.googlecode.iterm2 "Non Ascii Font" -string "FiraCodeNerdFontComplete-Regular 16" + +# Enable ligatures +defaults write com.googlecode.iterm2 "ASCII Ligatures" -bool true + +# Window size (120x35 characters) +defaults write com.googlecode.iterm2 "Columns" -int 120 +defaults write com.googlecode.iterm2 "Rows" -int 35 + +# Transparency (matching Kitty's 0.92 opacity = 8% transparency) +defaults write com.googlecode.iterm2 "Transparency" -float 0.08 + +# Scrollback lines (10000) +defaults write com.googlecode.iterm2 "Scrollback Lines" -int 10000 + +# Visual bell instead of audio +defaults write com.googlecode.iterm2 "Silence Bell" -bool false +defaults write com.googlecode.iterm2 "Visual Bell" -bool true + +# Copy on selection +defaults write com.googlecode.iterm2 "Copy to Pasteboard on Selection" -bool true + +# Cursor settings +defaults write com.googlecode.iterm2 "Cursor Type" -int 0 # Block cursor +defaults write com.googlecode.iterm2 "Blinking Cursor" -bool true + +echo -e "${GREEN}โœ… iTerm2 preferences configured${NC}" +echo "" +echo -e "${YELLOW}To complete the setup:${NC}" +echo "1. Open iTerm2" +echo "2. Go to Preferences > Profiles > Colors" +echo "3. Click 'Color Presets...' dropdown" +echo "4. Select 'Import...' and choose: $ITERM_CONFIG_DIR/Nord.itermcolors" +echo "5. Select 'Nord' from the Color Presets dropdown" +echo "" +echo "Optional: Export your full iTerm2 config:" +echo " Preferences > General > Preferences" +echo " Click 'Save settings to Folder' and choose: $ITERM_CONFIG_DIR" \ No newline at end of file diff --git a/config/kitty/kitty.conf b/config/kitty/kitty.conf new file mode 100644 index 0000000..c9cc1ae --- /dev/null +++ b/config/kitty/kitty.conf @@ -0,0 +1,353 @@ +# vim:fileencoding=utf-8:ft=conf:foldmethod=marker + +# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• +# KITTY TERMINAL CONFIGURATION +# Following the ฮผฮญฯ„ฯฮฟฮฝ principle: measure, proportion, and what is fitting +# +# Philosophy: +# - Performance without excess +# - Visual clarity without distraction +# - Keyboard efficiency without complexity +# - Durable choices that age well +# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + +#: Fonts {{{ + +# Font choice rationale: Dank Mono provides excellent readability with +# tasteful ligatures that aid code comprehension without being excessive +# font_family Dank Mono +# bold_font Dank Mono +#italic_font Dank Mono +# bold_italic_font Dank Mono + +# Font choice rationale: Iosevka Term SS08 has ultra-consistent rhythm, beautiful slant, clear punctuation + +font_family Iosevka Term SS08 +bold_font Iosevka Term SS08 +italic_font Iosevka Term SS08 +bold_italic_font Iosevka Term SS08 + +# 16pt provides optimal readability on modern displays without strain +font_size 16.0 + +# Fallback fonts for symbols and special characters +# This ensures proper rendering of powerline, nerd font icons, and unicode +symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols +symbol_map U+276F-U+2771,U+2500-U+259F Fira Code Nerd Font +symbol_map U+E000-U+E00A,U+E100-U+E117,U+E200-U+E2A9,U+E300-U+E3E3,U+E400-U+E4CF,U+E500-U+E5FF,U+E600-U+E6FF,U+E700-U+E7C5,U+E800-U+E8FF,U+EA00-U+EBFF,U+EC00-U+EE0C,U+F000-U+F2E0,U+F300-U+F372,U+F400-U+F533,U+F600-U+F64F,U+F700-U+F7FF,U+F800-U+F8FF,U+F900-U+F9FF,U+FA00-U+FAFF,U+FB00-U+FBFF,U+FC00-U+FCFF,U+FD00-U+FDFF,U+FE00-U+FE0F,U+FE30-U+FE4F Fira Code Nerd Font + +# Mathematical symbols fallback +symbol_map U+2200-U+22FF Fira Code Nerd Font + +# Box drawing and block elements with better alignment +symbol_map U+2500-U+259F Fira Code Nerd Font + +# Powerline symbols (in case PowerlineSymbols font is not available) +symbol_map U+E0A0-U+E0A2,U+E0B0-U+E0B3 Fira Code Nerd Font + +# Enable ligatures for better code readability (!=, =>, etc.) +disable_ligatures never + +# Adjust vertical spacing for better readability (5% more line height) +adjust_line_height 105% + +# Box drawing characters should align properly +box_drawing_scale 0.001, 1, 1.5, 2 + +#: }}} + +#: Cursor customization {{{ + +# Block cursor for clear visibility +cursor_shape block + +# Gentle blinking to locate cursor without distraction +cursor_blink_interval 0.5 +cursor_stop_blinking_after 15.0 + +#: }}} + +#: Scrollback {{{ + +# Generous but not excessive scrollback (10K lines) +scrollback_lines 10000 + +# Use less with better options for scrollback viewing +scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER + +# Fill new space when window is enlarged for continuity +scrollback_fill_enlarged_window yes + +#: }}} + +#: Mouse {{{ + +# Hide mouse quickly when typing +mouse_hide_wait 1.0 + +# URL handling with clear visual feedback +url_color #0087bd +url_style curly +detect_urls yes + +# Smart clipboard behavior - copy on select for macOS workflow +copy_on_select clipboard + +# Remove trailing spaces when copying (clean data) +strip_trailing_spaces smart + +# Better word selection boundaries for programming +select_by_word_characters @-./_~?&=%+# + +# Focus follows mouse for efficient window management +focus_follows_mouse no + +#: }}} + +#: Performance tuning {{{ + +# Balanced performance settings +repaint_delay 10 +input_delay 3 + +# Sync to monitor to prevent tearing +sync_to_monitor yes + +#: }}} + +#: Terminal bell {{{ + +# Visual bell instead of audio (less disruptive) +enable_audio_bell no +visual_bell_duration 0.1 +window_alert_on_bell yes +bell_on_tab yes + +#: }}} + +#: Window layout {{{ + +# Remember window size for consistency +remember_window_size yes + +# Optimal initial window size for modern development +# 120 columns: fits side-by-side code views, exceeds 80-char standard +# 35 rows: comfortable viewing without overwhelming +initial_window_width 120c +initial_window_height 35c + +# All layouts available but start with stack +enabled_layouts tall:bias=70,stack,fat,grid,horizontal,vertical + +# Subtle window borders for multi-window clarity +window_border_width 1pt +draw_minimal_borders yes + +# Small margin for visual breathing room +window_margin_width 2 +single_window_margin_width 0 + +# Padding inside windows for readability +window_padding_width 8 + +# Center cell area when size doesn't divide evenly +placement_strategy center + +# Nord-themed window border colors - gentle contrast +active_border_color #88c0d0 +inactive_border_color #4c566a +bell_border_color #bf616a + +# Slight fade for inactive windows (maintains focus) +inactive_text_alpha 0.8 + +# Hide decorations for more screen space +hide_window_decorations no + +# Confirm before closing windows with multiple tabs +confirm_os_window_close 2 + +#: }}} + +#: Tab bar {{{ + +# Tab bar at top (conventional placement) +tab_bar_edge top + +# Minimal tab bar that appears only when needed +tab_bar_min_tabs 2 +tab_bar_style powerline +tab_powerline_style slanted + +# Clear tab titles with index for easy navigation +tab_title_template "{index}: {title}" +active_tab_title_template "[{index}] {title}" + +# Nord-themed tab colors - easy on the eyes +active_tab_foreground #d8dee9 +active_tab_background #5e81ac +active_tab_font_style bold +inactive_tab_foreground #4c566a +inactive_tab_background #3b4252 +inactive_tab_font_style normal + +#: }}} + +#: Color scheme {{{ + +# Nord color scheme - gentle on eyes with excellent contrast +# Specifically chosen for users with vision considerations +foreground #d8dee9 +background #2e3440 + +# Slightly more opacity for reduced eye strain +background_opacity 0.92 + +# Subtle selection colors that don't shock +selection_foreground #2e3440 +selection_background #88c0d0 + +# ANSI colors (Nord palette - muted but clear) +# Dark variants +color0 #3b4252 +color8 #4c566a + +# Red - muted but visible +color1 #bf616a +color9 #bf616a + +# Green - gentle on eyes +color2 #a3be8c +color10 #a3be8c + +# Yellow - warm, not glaring +color3 #ebcb8b +color11 #ebcb8b + +# Blue - calm but distinct +color4 #81a1c1 +color12 #81a1c1 + +# Magenta - subtle purple +color5 #b48ead +color13 #b48ead + +# Cyan - soothing blue-green +color6 #88c0d0 +color14 #8fbcbb + +# White/light grays +color7 #e5e9f0 +color15 #eceff4 + +#: }}} + +#: Advanced {{{ + +# Use user's default shell +shell . + +# Use configured editor +editor . + +# Keep terminal open after process exits (for debugging) +close_on_child_death no + +# Allow remote control for automation +allow_remote_control yes +listen_on unix:/tmp/kitty-{kitty_pid} + +# Disable update checks (handle via homebrew) +update_check_interval 0 + +# Secure clipboard settings +clipboard_control write-clipboard write-primary read-clipboard + +# Standard terminfo +term xterm-kitty + +#: }}} + +#: OS specific tweaks {{{ + +# macOS optimizations +macos_titlebar_color background +macos_option_as_alt yes +macos_quit_when_last_window_closed no +macos_window_resizable yes +macos_thicken_font 0 +macos_traditional_fullscreen no +macos_show_window_title_in window + +#: }}} + +#: Keyboard shortcuts {{{ + +# Keep defaults minimal, add only essential customizations +kitty_mod cmd+shift + +# Font size adjustments +map cmd+plus change_font_size all +1.0 +map cmd+minus change_font_size all -1.0 +map cmd+0 change_font_size all 0 + +# Window management +map kitty_mod+enter new_window_with_cwd +map kitty_mod+n new_os_window_with_cwd + +# Tab management +map cmd+t new_tab_with_cwd +map cmd+w close_tab +map cmd+] next_tab +map cmd+[ previous_tab +map cmd+1 goto_tab 1 +map cmd+2 goto_tab 2 +map cmd+3 goto_tab 3 +map cmd+4 goto_tab 4 +map cmd+5 goto_tab 5 +map cmd+6 goto_tab 6 +map cmd+7 goto_tab 7 +map cmd+8 goto_tab 8 +map cmd+9 goto_tab 9 + +# Layout management +map kitty_mod+l next_layout +map kitty_mod+z toggle_layout stack + +# Scrollback search (crucial for productivity) +map kitty_mod+/ launch --type=overlay --stdin-source=@screen_scrollback /opt/homebrew/bin/fzf --no-sort --no-mouse --exact -i + +# URL/path hints +map kitty_mod+e open_url_with_hints +map kitty_mod+p>f kitten hints --type path --program - +map kitty_mod+p>l kitten hints --type line --program - +map kitty_mod+p>w kitten hints --type word --program - + +# Clear terminal properly +map cmd+k clear_terminal reset active + +# Reload configuration +map kitty_mod+f5 load_config_file + +#: }}} + +# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• +# Design Rationale: +# +# 1. Font: Dank Mono chosen for clarity and tasteful ligatures +# 2. Symbols: Comprehensive fallback chain for nerd fonts, powerline, unicode +# 3. Colors: Dracula theme for proven readability and wide tool support +# 4. Performance: Balanced settings that prioritize responsiveness +# 5. Shortcuts: Minimal additions to defaults, focusing on frequent tasks +# 6. Layout: Thoughtful spacing and borders for multi-window work +# 7. macOS: Native integration while maintaining terminal efficiency +# 8. Window Size: 120x35 chars - optimal for code reading and side-by-side splits +# +# The symbol_map entries ensure that powerline prompts, file icons, git symbols, +# and other special characters render correctly even when not in the primary font. +# +# The 120-column width allows comfortable viewing of code up to 100 chars with +# some margin, while 35 rows provides good context without overwhelming. +# +# This configuration embodies "what is fitting" - no more, no less. +# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• \ No newline at end of file diff --git a/scripts/symlinks.sh b/scripts/symlinks.sh index f851bef..8f019d2 100755 --- a/scripts/symlinks.sh +++ b/scripts/symlinks.sh @@ -41,8 +41,11 @@ link_file() { # Shell configurations echo -e "${YELLOW}Linking shell configurations...${NC}" link_file "$DOTFILES_DIR/shell/.zshrc" "$HOME/.zshrc" +link_file "$DOTFILES_DIR/shell/.bashrc" "$HOME/.bashrc" link_file "$DOTFILES_DIR/shell/.zprofile" "$HOME/.zprofile" link_file "$DOTFILES_DIR/shell/.p10k.zsh" "$HOME/.p10k.zsh" +link_file "$DOTFILES_DIR/shell/.fzf.bash" "$HOME/.fzf.bash" +link_file "$DOTFILES_DIR/shell/.fzf.zsh" "$HOME/.fzf.zsh" link_file "$DOTFILES_DIR/.gitconfig" "$HOME/.gitconfig" link_file "$DOTFILES_DIR/.vimrc" "$HOME/.vimrc" link_file "$DOTFILES_DIR/.npmrc" "$HOME/.npmrc" diff --git a/shell/.bashrc b/shell/.bashrc new file mode 100644 index 0000000..cf70f47 --- /dev/null +++ b/shell/.bashrc @@ -0,0 +1 @@ +[ -f ~/.fzf.bash ] && source ~/.fzf.bash diff --git a/shell/.fzf.bash b/shell/.fzf.bash new file mode 100644 index 0000000..619b5dd --- /dev/null +++ b/shell/.fzf.bash @@ -0,0 +1,7 @@ +# Setup fzf +# --------- +if [[ ! "$PATH" == */Users/davidglidden/.fzf/bin* ]]; then + PATH="${PATH:+${PATH}:}/Users/davidglidden/.fzf/bin" +fi + +eval "$(fzf --bash)" diff --git a/shell/.fzf.zsh b/shell/.fzf.zsh new file mode 100644 index 0000000..cd64ad2 --- /dev/null +++ b/shell/.fzf.zsh @@ -0,0 +1,7 @@ +# Setup fzf +# --------- +if [[ ! "$PATH" == */Users/davidglidden/.fzf/bin* ]]; then + PATH="${PATH:+${PATH}:}/Users/davidglidden/.fzf/bin" +fi + +source <(fzf --zsh) diff --git a/shell/functions.zsh b/shell/functions.zsh index 73947e4..b54758c 100644 --- a/shell/functions.zsh +++ b/shell/functions.zsh @@ -41,6 +41,23 @@ sysupdate() { return 1 fi + # Mac App Store updates + echo "๐ŸŽ Updating Mac App Store apps..." + if command -v mas >/dev/null; then + local mas_outdated=$(mas outdated) + if [[ -n "$mas_outdated" ]]; then + echo "๐Ÿ“ฑ Updating MAS apps:" + echo "$mas_outdated" | while read -r line; do + echo " $line" + done + mas upgrade || echo "โš ๏ธ Some MAS updates may require manual intervention" + else + echo "โœ… All MAS apps are up to date" + fi + else + echo "โš ๏ธ mas not installed - install with: brew install mas" + fi + # Verify critical tools still work local critical_tools=(git zsh python3 brew) for tool in "${critical_tools[@]}"; do @@ -61,24 +78,45 @@ sysupdate() { (cd ~/.fzf && git pull && ./install --all) >/dev/null 2>&1 || true fi + # Fix Zsh completion security warnings + echo "๐Ÿ”’ Checking Zsh completion security..." + if [[ -d "/opt/homebrew/share/zsh" ]]; then + # Fix common Homebrew Zsh permission issues + chmod 755 /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions 2>/dev/null || true + fi + # Check for broken symlinks echo "๐Ÿงน Checking for broken symlinks..." local broken_links=$(find "/usr/local/bin" "$HOME/bin" "$HOME/.local/bin" -xtype l 2>/dev/null) [[ -n "$broken_links" ]] && echo "๐Ÿ”— Broken symlinks found:\n$broken_links" - # Moon phase logging (with API key check and graceful failure) + # Moon phase logging (using SwiftBar API key) echo "๐ŸŒ“ Celestial context:" - if [[ -n "$MOON_API_KEY" ]] && command -v curl >/dev/null && command -v jq >/dev/null; then - local moon_json=$(curl -s "https://api.ipgeolocation.io/astronomy?apiKey=$MOON_API_KEY" 2>/dev/null) + if command -v curl >/dev/null && command -v jq >/dev/null; then + # Use API key from SwiftBar script + local api_key="6ec71a8170214d828c08ba8bf2ca29e9" + local moon_json=$(curl -s "https://api.ipgeolocation.io/astronomy?apiKey=$api_key" 2>/dev/null) if [[ $? -eq 0 ]] && [[ -n "$moon_json" ]]; then - local moon_phase=$(echo "$moon_json" | jq -r '.moon_phase // "Unknown"') + local moon_phase=$(echo "$moon_json" | jq -r '.moon_phase // "Unknown"' | tr '_' ' ') local illum=$(echo "$moon_json" | jq -r '.moon_illumination_percentage // "Unknown"') - echo "๐ŸŒ™ $moon_phase (${illum}%)" + # Add moon emoji based on phase + local moon_emoji="๐ŸŒ™" + case "$moon_phase" in + "new moon") moon_emoji="๐ŸŒ‘" ;; + "waxing crescent") moon_emoji="๐ŸŒ’" ;; + "first quarter") moon_emoji="๐ŸŒ“" ;; + "waxing gibbous") moon_emoji="๐ŸŒ”" ;; + "full moon") moon_emoji="๐ŸŒ•" ;; + "waning gibbous") moon_emoji="๐ŸŒ–" ;; + "last quarter") moon_emoji="๐ŸŒ—" ;; + "waning crescent") moon_emoji="๐ŸŒ˜" ;; + esac + echo "$moon_emoji $moon_phase (${illum}%)" else echo "๐ŸŒ™ Moon phase unavailable" fi else - echo "๐ŸŒ™ Moon phase tracking disabled (missing API key or tools)" + echo "๐ŸŒ™ Moon phase tracking disabled (missing curl or jq)" fi # Dotfiles management (corrected path)