Compare commits
7 Commits
c440b6423b
...
5208e9a5bb
| Author | SHA1 | Date | |
|---|---|---|---|
| 5208e9a5bb | |||
| 6188583ee9 | |||
| f27ba2710e | |||
| c0e4a88d70 | |||
| 700da3aa0b | |||
| fb80b6dfb2 | |||
| 1d7df94a1d |
BIN
.local/share/fonts/GALLAUDET.ttf
Normal file
BIN
.local/share/fonts/GALLAUDET.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/IntelOneMono-Bold.ttf
Normal file
BIN
.local/share/fonts/IntelOneMono-Bold.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/IntelOneMono-BoldItalic.ttf
Normal file
BIN
.local/share/fonts/IntelOneMono-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/IntelOneMono-Italic.ttf
Normal file
BIN
.local/share/fonts/IntelOneMono-Italic.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/IntelOneMono-Light.ttf
Normal file
BIN
.local/share/fonts/IntelOneMono-Light.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/IntelOneMono-LightItalic.ttf
Normal file
BIN
.local/share/fonts/IntelOneMono-LightItalic.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/IntelOneMono-Medium.ttf
Normal file
BIN
.local/share/fonts/IntelOneMono-Medium.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/IntelOneMono-MediumItalic.ttf
Normal file
BIN
.local/share/fonts/IntelOneMono-MediumItalic.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/IntelOneMono-Regular.ttf
Normal file
BIN
.local/share/fonts/IntelOneMono-Regular.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/OpenGorton-Bold.otf
Normal file
BIN
.local/share/fonts/OpenGorton-Bold.otf
Normal file
Binary file not shown.
BIN
.local/share/fonts/OpenGorton-Regular.otf
Normal file
BIN
.local/share/fonts/OpenGorton-Regular.otf
Normal file
Binary file not shown.
BIN
.local/share/fonts/RobotoMono-Italic-VariableFont_wght.ttf
Normal file
BIN
.local/share/fonts/RobotoMono-Italic-VariableFont_wght.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/RobotoMono-VariableFont_wght.ttf
Normal file
BIN
.local/share/fonts/RobotoMono-VariableFont_wght.ttf
Normal file
Binary file not shown.
BIN
.local/share/fonts/code128.ttf
Normal file
BIN
.local/share/fonts/code128.ttf
Normal file
Binary file not shown.
15
.tmux.conf
15
.tmux.conf
@@ -2,7 +2,20 @@
|
|||||||
set -g bell-action any
|
set -g bell-action any
|
||||||
|
|
||||||
# Default termtype. If the rcfile sets $TERM, that overrides this value.
|
# Default termtype. If the rcfile sets $TERM, that overrides this value.
|
||||||
set -g default-terminal screen-256color
|
set -g default-terminal "tmux-256color"
|
||||||
|
|
||||||
|
# Truecolor + clipboard passthrough for outer terminals that advertise RGB
|
||||||
|
# (covers xterm-*, alacritty, kitty, wezterm, iTerm, ghostty, modern Apple Terminal).
|
||||||
|
set -ga terminal-features ",xterm-256color:RGB"
|
||||||
|
set -ga terminal-features ",alacritty:RGB"
|
||||||
|
set -ga terminal-features ",kitty:RGB"
|
||||||
|
set -ga terminal-features ",wezterm:RGB"
|
||||||
|
set -ga terminal-features ",ghostty:RGB"
|
||||||
|
set -ga terminal-features ",screen-256color:RGB"
|
||||||
|
|
||||||
|
# TUI apps (Claude Code, nvim, etc.) want focus events so they can redraw
|
||||||
|
# / refresh state when the pane regains focus.
|
||||||
|
set -g focus-events on
|
||||||
|
|
||||||
# Keep your finger on ctrl, or don't
|
# Keep your finger on ctrl, or don't
|
||||||
bind-key ^D detach-client
|
bind-key ^D detach-client
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# set your user tokens as environment variables, such as ~/.secrets
|
# set your user tokens as environment variables, such as ~/.secrets
|
||||||
# See the README for examples.
|
# See the README for examples.
|
||||||
|
[user]
|
||||||
|
name = dissimulo
|
||||||
|
email = connect+gitea@dustin-williams.com
|
||||||
[color]
|
[color]
|
||||||
ui = true
|
ui = true
|
||||||
[color "branch"]
|
[color "branch"]
|
||||||
@@ -126,4 +129,4 @@
|
|||||||
# http://gitfu.wordpress.com/2008/04/20/git-rerere-rereremember-what-you-did-last-time/
|
# http://gitfu.wordpress.com/2008/04/20/git-rerere-rereremember-what-you-did-last-time/
|
||||||
enabled = true
|
enabled = true
|
||||||
[include]
|
[include]
|
||||||
path = .gitconfig.user
|
path = ~/.gitconfig.user
|
||||||
|
|||||||
116
install.sh
116
install.sh
@@ -30,7 +30,11 @@ PERSONAL_FILES=(
|
|||||||
.zprofile .zshenv .zshrc
|
.zprofile .zshenv .zshrc
|
||||||
)
|
)
|
||||||
|
|
||||||
# Directories deployed wholesale to $HOME/<dir>/.
|
# Directories whose contents are merged into $HOME/<dir>/, file by file. Files
|
||||||
|
# the repo provides replace conflicting on-disk versions (with the displaced
|
||||||
|
# version preserved in $BACKUP_DIR); files outside the repo's tree are left
|
||||||
|
# untouched. This deliberately avoids wholesale-replacing $HOME/.local etc.,
|
||||||
|
# which would sweep away unrelated user data (fonts, app state, ...).
|
||||||
PERSONAL_DIRS=(
|
PERSONAL_DIRS=(
|
||||||
.fonts .irssi .nano .themes .local .mplayer
|
.fonts .irssi .nano .themes .local .mplayer
|
||||||
)
|
)
|
||||||
@@ -83,37 +87,104 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 3. Deploy personal dotfiles
|
# 3. Deploy personal dotfiles
|
||||||
backup_one() {
|
|
||||||
local src_name="$1"
|
# Move $HOME/<rel> aside into $BACKUP_DIR, preserving its sub-path.
|
||||||
local dst="$HOME/$src_name"
|
backup_one_path() {
|
||||||
|
local rel="$1"
|
||||||
|
local dst="$HOME/$rel"
|
||||||
if [ -e "$dst" ] || [ -L "$dst" ]; then
|
if [ -e "$dst" ] || [ -L "$dst" ]; then
|
||||||
mkdir -p "$BACKUP_DIR/$(dirname "$src_name")"
|
mkdir -p "$BACKUP_DIR/$(dirname "$rel")"
|
||||||
mv "$dst" "$BACKUP_DIR/$src_name"
|
mv "$dst" "$BACKUP_DIR/$rel"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
deploy_one() {
|
# Returns 0 iff $1 and $2 are equivalent (same symlink target, or identical
|
||||||
local name="$1"
|
# regular-file content). Used to make re-runs idempotent: unchanged files get
|
||||||
local src="$YADR_DIR/$name"
|
# skipped instead of needlessly backed up.
|
||||||
local dst="$HOME/$name"
|
paths_equivalent() {
|
||||||
|
local a="$1" b="$2"
|
||||||
|
if [ -L "$a" ] && [ -L "$b" ]; then
|
||||||
|
[ "$(readlink "$a")" = "$(readlink "$b")" ]
|
||||||
|
elif [ -L "$a" ] || [ -L "$b" ]; then
|
||||||
|
return 1
|
||||||
|
elif [ -f "$a" ] && [ -f "$b" ]; then
|
||||||
|
cmp -s "$a" "$b"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Deploy one file or symlink at $YADR_DIR/<rel> to $HOME/<rel>. If a different
|
||||||
|
# file/symlink is already at the destination, it's moved into $BACKUP_DIR first.
|
||||||
|
deploy_file() {
|
||||||
|
local rel="$1"
|
||||||
|
local src="$YADR_DIR/$rel"
|
||||||
|
local dst="$HOME/$rel"
|
||||||
if [ ! -e "$src" ] && [ ! -L "$src" ]; then
|
if [ ! -e "$src" ] && [ ! -L "$src" ]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
backup_one "$name"
|
if paths_equivalent "$src" "$dst"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
backup_one_path "$rel"
|
||||||
mkdir -p "$(dirname "$dst")"
|
mkdir -p "$(dirname "$dst")"
|
||||||
cp -a "$src" "$dst"
|
cp -a "$src" "$dst"
|
||||||
info "$name"
|
info "$rel"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Deploy a directory by walking its tree and deploying each file/symlink in
|
||||||
|
# turn. Directories get mkdir'd; existing entries inside $HOME/<rel> that the
|
||||||
|
# repo doesn't know about are left alone. This is the merge semantics that
|
||||||
|
# protects e.g. $HOME/.local/share/fonts from being clobbered when the repo
|
||||||
|
# only tracks $HOME/.local/bin.
|
||||||
|
deploy_dir() {
|
||||||
|
local rel="$1"
|
||||||
|
local src="$YADR_DIR/$rel"
|
||||||
|
if [ ! -d "$src" ] || [ -L "$src" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
mkdir -p "$HOME/$rel"
|
||||||
|
local sub sub_rel src_path
|
||||||
|
while IFS= read -r -d '' sub; do
|
||||||
|
sub="${sub#./}"
|
||||||
|
[ "$sub" = "." ] && continue
|
||||||
|
sub_rel="$rel/$sub"
|
||||||
|
src_path="$YADR_DIR/$sub_rel"
|
||||||
|
if [ -d "$src_path" ] && [ ! -L "$src_path" ]; then
|
||||||
|
mkdir -p "$HOME/$sub_rel"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
deploy_file "$sub_rel"
|
||||||
|
done < <(cd "$src" && find . -mindepth 1 -print0)
|
||||||
}
|
}
|
||||||
|
|
||||||
log "Deploying personal dotfiles"
|
log "Deploying personal dotfiles"
|
||||||
for f in "${PERSONAL_FILES[@]}"; do deploy_one "$f"; done
|
for f in "${PERSONAL_FILES[@]}"; do deploy_file "$f"; done
|
||||||
for d in "${PERSONAL_DIRS[@]}"; do deploy_one "$d"; done
|
for d in "${PERSONAL_DIRS[@]}"; do deploy_dir "$d"; done
|
||||||
|
|
||||||
# .local/bin/claude is a relative symlink to ../share/claude/versions/...
|
# .local/bin/claude is a relative symlink to ../share/claude/versions/<version>.
|
||||||
# If that target isn't present on this machine, remove the dangling link so
|
# The version baked into the repo snapshot is whatever was current when this
|
||||||
# Claude Code's own installer (next step) can manage it.
|
# was last committed; on a fresh host that exact version probably isn't
|
||||||
if [ -L "$HOME/.local/bin/claude" ] && [ ! -e "$HOME/.local/bin/claude" ]; then
|
# installed. Resolve as follows:
|
||||||
rm "$HOME/.local/bin/claude"
|
# 1. If the deployed symlink already resolves, leave it alone.
|
||||||
|
# 2. Else, if any other Claude version is present under
|
||||||
|
# ~/.local/share/claude/versions/, repoint the symlink to the highest
|
||||||
|
# one (semver sort) so users get the latest installed binary.
|
||||||
|
# 3. Else, drop the dangling link and let Claude Code's own installer
|
||||||
|
# (next step) recreate it.
|
||||||
|
claude_link="$HOME/.local/bin/claude"
|
||||||
|
claude_versions_dir="$HOME/.local/share/claude/versions"
|
||||||
|
if [ -L "$claude_link" ] && [ ! -e "$claude_link" ]; then
|
||||||
|
latest_claude=""
|
||||||
|
if [ -d "$claude_versions_dir" ]; then
|
||||||
|
latest_claude="$(ls -1 "$claude_versions_dir" 2>/dev/null | sort -V | tail -1)"
|
||||||
|
fi
|
||||||
|
if [ -n "$latest_claude" ] && [ -e "$claude_versions_dir/$latest_claude" ]; then
|
||||||
|
ln -sfn "../share/claude/versions/$latest_claude" "$claude_link"
|
||||||
|
info "Repointed ~/.local/bin/claude -> $latest_claude (latest installed)"
|
||||||
|
else
|
||||||
|
rm "$claude_link"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 4. Install Claude Code (Anthropic's CLI). Skip if already installed or
|
# 4. Install Claude Code (Anthropic's CLI). Skip if already installed or
|
||||||
@@ -137,6 +208,13 @@ if [ -d "$HOME/.local/bin" ]; then
|
|||||||
find "$HOME/.local/bin" -maxdepth 1 -type f -exec chmod +x {} \; 2>/dev/null || true
|
find "$HOME/.local/bin" -maxdepth 1 -type f -exec chmod +x {} \; 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 5. Refresh font cache so newly-deployed .fonts/ and .local/share/fonts/
|
||||||
|
# entries are visible to apps without a logout/login.
|
||||||
|
if have fc-cache; then
|
||||||
|
log "Refreshing font cache"
|
||||||
|
fc-cache -f >/dev/null 2>&1 || warn "fc-cache returned non-zero; continuing"
|
||||||
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
log "Done."
|
log "Done."
|
||||||
if [ -d "$BACKUP_DIR" ]; then
|
if [ -d "$BACKUP_DIR" ]; then
|
||||||
|
|||||||
102
tmux/tmux.conf
102
tmux/tmux.conf
@@ -1,102 +0,0 @@
|
|||||||
# Ring the bell if any background window rang a bell
|
|
||||||
set -g bell-action any
|
|
||||||
|
|
||||||
# Default termtype. If the rcfile sets $TERM, that overrides this value.
|
|
||||||
set -g default-terminal screen-256color
|
|
||||||
|
|
||||||
# Keep your finger on ctrl, or don't
|
|
||||||
bind-key ^D detach-client
|
|
||||||
|
|
||||||
# Create splits and vertical splits
|
|
||||||
bind-key v split-window -h -p 50 -c "#{pane_current_path}"
|
|
||||||
bind-key ^V split-window -h -p 50 -c "#{pane_current_path}"
|
|
||||||
bind-key s split-window -p 50 -c "#{pane_current_path}"
|
|
||||||
bind-key ^S split-window -p 50 -c "#{pane_current_path}"
|
|
||||||
|
|
||||||
# Pane resize in all four directions using vi bindings.
|
|
||||||
# Can use these raw but I map them to shift-ctrl-<h,j,k,l> in iTerm.
|
|
||||||
bind -r H resize-pane -L 5
|
|
||||||
bind -r J resize-pane -D 5
|
|
||||||
bind -r K resize-pane -U 5
|
|
||||||
bind -r L resize-pane -R 5
|
|
||||||
|
|
||||||
# Smart pane switching with awareness of Vim splits.
|
|
||||||
# See: https://github.com/christoomey/vim-tmux-navigator
|
|
||||||
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
|
|
||||||
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
|
|
||||||
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
|
|
||||||
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
|
|
||||||
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
|
|
||||||
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
|
|
||||||
|
|
||||||
tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
|
|
||||||
if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
|
|
||||||
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'"
|
|
||||||
if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
|
|
||||||
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'"
|
|
||||||
|
|
||||||
bind-key -T copy-mode-vi 'C-h' select-pane -L
|
|
||||||
bind-key -T copy-mode-vi 'C-j' select-pane -D
|
|
||||||
bind-key -T copy-mode-vi 'C-k' select-pane -U
|
|
||||||
bind-key -T copy-mode-vi 'C-l' select-pane -R
|
|
||||||
bind-key -T copy-mode-vi 'C-\' select-pane -l
|
|
||||||
|
|
||||||
# Use vi keybindings for tmux commandline input.
|
|
||||||
# Note that to get command mode you need to hit ESC twice...
|
|
||||||
set -g status-keys vi
|
|
||||||
|
|
||||||
# Use vi keybindings in copy and choice modes
|
|
||||||
setw -g mode-keys vi
|
|
||||||
|
|
||||||
# easily toggle synchronization (mnemonic: e is for echo)
|
|
||||||
# sends input to all panes in a given window.
|
|
||||||
bind e setw synchronize-panes on
|
|
||||||
bind E setw synchronize-panes off
|
|
||||||
|
|
||||||
# set first window to index 1 (not 0) to map more to the keyboard layout...
|
|
||||||
set-option -g base-index 1
|
|
||||||
set-window-option -g pane-base-index 1
|
|
||||||
set-window-option -g mouse on
|
|
||||||
|
|
||||||
# color scheme (styled as vim-powerline)
|
|
||||||
set -g status-left-length 52
|
|
||||||
set -g status-right-length 451
|
|
||||||
set -g status-style fg=white,bg=colour234
|
|
||||||
set -g pane-border-style fg=colour245
|
|
||||||
set -g pane-active-border-style fg=colour39
|
|
||||||
set -g message-style fg=colour16,bg=colour221,bold
|
|
||||||
set -g status-left '#[fg=colour235,bg=colour252,bold] ❐ #S #[fg=colour252,bg=colour238,nobold]⮀#[fg=colour245,bg=colour238,bold] #(whoami) #[fg=colour238,bg=colour234,nobold]⮀'
|
|
||||||
set -g window-status-format '#[fg=colour235,bg=colour252,bold] #I #(pwd="#{pane_current_path}"; echo ${pwd####*/}) #W '
|
|
||||||
set -g window-status-current-format '#[fg=colour234,bg=colour39]⮀#[fg=black,bg=colour39,noreverse,bold] #{?window_zoomed_flag,#[fg=colour228],} #I #(pwd="#{pane_current_path}"; echo ${pwd####*/}) #W #[fg=colour39,bg=colour234,nobold]⮀'
|
|
||||||
set-option -g status-interval 2
|
|
||||||
|
|
||||||
# Patch for OS X pbpaste and pbcopy under tmux.
|
|
||||||
set-option -g default-command "which reattach-to-user-namespace > /dev/null && reattach-to-user-namespace -l $SHELL || $SHELL"
|
|
||||||
|
|
||||||
# Screen like binding
|
|
||||||
unbind C-b
|
|
||||||
set -g prefix C-a
|
|
||||||
bind a send-prefix
|
|
||||||
|
|
||||||
# No escape time for vi mode
|
|
||||||
set -sg escape-time 0
|
|
||||||
|
|
||||||
# Screen like binding for last window
|
|
||||||
unbind l
|
|
||||||
bind C-a last-window
|
|
||||||
|
|
||||||
# Bigger history
|
|
||||||
set -g history-limit 10000
|
|
||||||
|
|
||||||
# New windows/pane in $PWD
|
|
||||||
bind c new-window -c "#{pane_current_path}"
|
|
||||||
|
|
||||||
# Fix key bindings broken in tmux 2.1
|
|
||||||
set -g assume-paste-time 0
|
|
||||||
|
|
||||||
# force a reload of the config file
|
|
||||||
unbind r
|
|
||||||
bind r source-file ~/.tmux.conf \; display "Reloaded!"
|
|
||||||
|
|
||||||
# Local config
|
|
||||||
if-shell "[ -f ~/.tmux.conf.user ]" 'source ~/.tmux.conf.user'
|
|
||||||
1
tmux/tmux.conf
Symbolic link
1
tmux/tmux.conf
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../.tmux.conf
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
source $HOME/.zprezto/runcoms/zshrc
|
source $HOME/.zprezto/runcoms/zshrc
|
||||||
|
|
||||||
for config_file ($HOME/.yadr/zsh/*.zsh) source $config_file
|
for config_file ($HOME/.yadr/zsh/*.zsh) source $config_file
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
|||||||
Reference in New Issue
Block a user