Compare commits
7 Commits
drunkendot
...
c440b6423b
| Author | SHA1 | Date | |
|---|---|---|---|
| c440b6423b | |||
| 3b1bb11960 | |||
| 2f278a8852 | |||
| d0316e45b5 | |||
| 526ad252b0 | |||
| 5bed5f7746 | |||
| 59a5c0bbf8 |
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
|
||||
|
||||
# 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
|
||||
bind-key ^D detach-client
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
# set your user tokens as environment variables, such as ~/.secrets
|
||||
# See the README for examples.
|
||||
[user]
|
||||
name = dissimulo
|
||||
email = connect+gitea@dustin-williams.com
|
||||
[color]
|
||||
ui = true
|
||||
[color "branch"]
|
||||
@@ -126,4 +129,4 @@
|
||||
# http://gitfu.wordpress.com/2008/04/20/git-rerere-rereremember-what-you-did-last-time/
|
||||
enabled = true
|
||||
[include]
|
||||
path = .gitconfig.user
|
||||
path = ~/.gitconfig.user
|
||||
|
||||
116
install.sh
116
install.sh
@@ -30,7 +30,11 @@ PERSONAL_FILES=(
|
||||
.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=(
|
||||
.fonts .irssi .nano .themes .local .mplayer
|
||||
)
|
||||
@@ -83,37 +87,104 @@ else
|
||||
fi
|
||||
|
||||
# 3. Deploy personal dotfiles
|
||||
backup_one() {
|
||||
local src_name="$1"
|
||||
local dst="$HOME/$src_name"
|
||||
|
||||
# Move $HOME/<rel> aside into $BACKUP_DIR, preserving its sub-path.
|
||||
backup_one_path() {
|
||||
local rel="$1"
|
||||
local dst="$HOME/$rel"
|
||||
if [ -e "$dst" ] || [ -L "$dst" ]; then
|
||||
mkdir -p "$BACKUP_DIR/$(dirname "$src_name")"
|
||||
mv "$dst" "$BACKUP_DIR/$src_name"
|
||||
mkdir -p "$BACKUP_DIR/$(dirname "$rel")"
|
||||
mv "$dst" "$BACKUP_DIR/$rel"
|
||||
fi
|
||||
}
|
||||
|
||||
deploy_one() {
|
||||
local name="$1"
|
||||
local src="$YADR_DIR/$name"
|
||||
local dst="$HOME/$name"
|
||||
# Returns 0 iff $1 and $2 are equivalent (same symlink target, or identical
|
||||
# regular-file content). Used to make re-runs idempotent: unchanged files get
|
||||
# skipped instead of needlessly backed up.
|
||||
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
|
||||
return
|
||||
fi
|
||||
backup_one "$name"
|
||||
if paths_equivalent "$src" "$dst"; then
|
||||
return
|
||||
fi
|
||||
backup_one_path "$rel"
|
||||
mkdir -p "$(dirname "$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"
|
||||
for f in "${PERSONAL_FILES[@]}"; do deploy_one "$f"; done
|
||||
for d in "${PERSONAL_DIRS[@]}"; do deploy_one "$d"; done
|
||||
for f in "${PERSONAL_FILES[@]}"; do deploy_file "$f"; done
|
||||
for d in "${PERSONAL_DIRS[@]}"; do deploy_dir "$d"; done
|
||||
|
||||
# .local/bin/claude is a relative symlink to ../share/claude/versions/...
|
||||
# If that target isn't present on this machine, remove the dangling link so
|
||||
# Claude Code's own installer (next step) can manage it.
|
||||
if [ -L "$HOME/.local/bin/claude" ] && [ ! -e "$HOME/.local/bin/claude" ]; then
|
||||
rm "$HOME/.local/bin/claude"
|
||||
# .local/bin/claude is a relative symlink to ../share/claude/versions/<version>.
|
||||
# The version baked into the repo snapshot is whatever was current when this
|
||||
# was last committed; on a fresh host that exact version probably isn't
|
||||
# installed. Resolve as follows:
|
||||
# 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
|
||||
|
||||
# 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
|
||||
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
|
||||
log "Done."
|
||||
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
|
||||
|
||||
for config_file ($HOME/.yadr/zsh/*.zsh) source $config_file
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
|
||||
Reference in New Issue
Block a user