Setup

A living inventory of the tools and gear I use to build, write, and make things.

Currently using

keyboard
Nuphy Kick 75: High
camera
Canon EOS Rebel T6
editor
VS Code
terminal
macOS Terminal
shell
zsh w/ Oh My Zsh
os
macOS Golden Gate 27.0 Beta

Updated

Desk

The physical setup for shipping pages like this amidst hardware experiments.

Desk photo
The place where code, content, and experiments overlap.
  • UPLIFT V3 Standing Desk

    Large enough for irresponsible amounts of hardware.

    Desk

  • MacBook M3 Pro 14-inch

    18GB Memory, 512GB Storage

    Laptop

  • iPad Pro 11-inch (4th generation)

    M2 Chip, 1TB Storage, with Apple Pencil (2nd generation)

    Tablet

  • Monitor

  • BenQ ErgoArm BSL01

    Attached: Monitor Mount Reinforcement Plate

    Monitor Arm

  • Amazon Echo Show 8

    With Alexa+, integrated with the Govee Ecosystem

    Home Assistant

  • Control Pad

  • Logitech Brio 4K

    Attached: Cold Shoe Mount

    Webcam

  • Mouse

  • Desk lighting

    Govee RGBIC light bars with smart controller + PHOTOOLEX Tofu Light with cold-shoe mounts.

    Lighting

  • Desk accessories

    VIVO Black Clamp-on 50 inch Desktop Shelving System, 16 inch VESA Monitor Mount Shelf, Monitor Stand Riser

    Miscellaneous

EDC

What comes with me when I am working somewhere that is not home.

Workflow

The setup people ask about most after a demo.

VS Code workspace
How this page looks while I am working on it.
  • settings.json
    settings.json
    {  "workbench.iconTheme": "material-icon-theme",  "workbench.colorTheme": "Tokyo Night",   "workbench.editor.labelFormat": "short",  "workbench.editor.tabSizing": "shrink",  "workbench.editor.enablePreview": false,   "workbench.editor.customLabels.patterns": {    "**/page.tsx": "${dirname}/page",    "**/layout.tsx": "${dirname}/layout",    "**/route.ts": "${dirname}/route",  },   "workbench.colorCustomizations": {    "editor.background": "#080B10",    "sideBar.background": "#080B10",    "activityBar.background": "#080B10",    "titleBar.activeBackground": "#080B10",    "titleBar.inactiveBackground": "#080B10",     "tab.activeBackground": "#0F131A",    "tab.inactiveBackground": "#080B10",    "tab.activeBorderTop": "#7AA2F7",    "tab.activeBorder": "#00000000",     "statusBar.background": "#161B22",    "statusBar.foreground": "#C0CAF5",     "focusBorder": "#7AA2F7",  },   "workbench.layoutControl.enabled": false,  "window.commandCenter": false,  "breadcrumbs.enabled": false,   "editor.fontFamily": "'CommitMono', monospace",  "editor.fontWeight": "500",  "editor.letterSpacing": 0.2,   "editor.wordWrap": "on",  "editor.rulers": [100],  "editor.scrollBeyondLastLine": false,   "editor.cursorSmoothCaretAnimation": "on",  "editor.cursorBlinking": "smooth",  "editor.smoothScrolling": true,   "editor.scrollbar.vertical": "hidden",  "editor.scrollbar.horizontal": "hidden",   "editor.minimap.enabled": false,  "editor.renderWhitespace": "none",   "editor.bracketPairColorization.enabled": true,  "editor.guides.bracketPairs": "active",  "editor.guides.indentation": false,   "editor.stickyScroll.enabled": true,  "editor.stickyScroll.maxLineCount": 3,   "editor.formatOnSave": true,  "editor.formatOnPaste": true,  "editor.linkedEditing": true,   "files.autoSave": "afterDelay",  "files.autoSaveDelay": 10000,   "files.exclude": {    "**/.DS_Store": false,    "**/.git": false,  },   "terminal.integrated.fontFamily": "'IntoneMono Nerd Font', 'MesloLGS NF'",  "terminal.integrated.fontSize": 14,  "terminal.integrated.fontWeight": "400",  "terminal.integrated.fontWeightBold": "500",  "terminal.integrated.fontLigatures.enabled": true,  "terminal.integrated.lineHeight": 1.15,   "terminal.integrated.cursorStyle": "line",  "terminal.integrated.cursorBlinking": true,   "terminal.integrated.smoothScrolling": true,  "terminal.integrated.enablePersistentSessions": true,  "terminal.integrated.tabs.enabled": true,  "terminal.integrated.shellIntegration.enabled": true,  "terminal.integrated.rightClickBehavior": "default",   "git.autofetch": true,  "git.ignoreRebaseWarning": true,  "git.confirmSync": false,  "git.openRepositoryInParentFolders": "always",   "js/ts.updateImportsOnFileMove.enabled": "always",   "[typescript]": {    "editor.defaultFormatter": "esbenp.prettier-vscode",  },   "[typescriptreact]": {    "editor.defaultFormatter": "esbenp.prettier-vscode",  },   "[javascript]": {    "editor.defaultFormatter": "esbenp.prettier-vscode",  },   "[javascriptreact]": {    "editor.defaultFormatter": "esbenp.prettier-vscode",  },   "[json]": {    "editor.defaultFormatter": "esbenp.prettier-vscode",  },   "[jsonc]": {    "editor.defaultFormatter": "esbenp.prettier-vscode",  },   "[markdown]": {    "editor.defaultFormatter": "yzhang.markdown-all-in-one",  },   "extensions.ignoreRecommendations": true,}
  • .zshrc
    .zshrc
    # Powerlevel10k instant promptif [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"fi # Oh My Zshexport ZSH="$HOME/.oh-my-zsh"ZSH_THEME="powerlevel10k/powerlevel10k" plugins=(  git) source "$ZSH/oh-my-zsh.sh" # Powerlevel10k[[ -r "$HOME/.p10k.zsh" ]] && source "$HOME/.p10k.zsh" # PATHtypeset -U path PATH path=(  "$HOME/.local/bin"  "$HOME/.antigravity/antigravity/bin"  /opt/homebrew/bin  /opt/homebrew/sbin  /usr/local/bin  /usr/local/sbin  $path) # Rubyif [[ -d /opt/homebrew/opt/ruby/bin ]]; then  path=(    /opt/homebrew/opt/ruby/bin    /opt/homebrew/lib/ruby/gems/*/bin(N)    $path  )fi # Android SDKexport ANDROID_HOME="$HOME/Library/Android/sdk"export ANDROID_SDK_ROOT="$ANDROID_HOME" path=(  "$ANDROID_HOME/platform-tools"  "$ANDROID_HOME/cmdline-tools/latest/bin"  "$ANDROID_HOME/emulator"  $path) # HistoryHISTSIZE=50000SAVEHIST=50000 setopt HIST_IGNORE_ALL_DUPSsetopt HIST_SAVE_NO_DUPSsetopt SHARE_HISTORYsetopt INC_APPEND_HISTORY # Zsh autosuggestionsHOMEBREW_PREFIX="${HOMEBREW_PREFIX:-/opt/homebrew}" [[ -r "$HOMEBREW_PREFIX/share/zsh-autosuggestions/zsh-autosuggestions.zsh" ]] &&  source "$HOMEBREW_PREFIX/share/zsh-autosuggestions/zsh-autosuggestions.zsh" # Zsh syntax highlighting[[ -r "$HOMEBREW_PREFIX/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" ]] &&  source "$HOMEBREW_PREFIX/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
  • .p10k.zsh
    .p10k.zsh
    # Minimal Powerlevel10k configuration# Run `p10k configure` if you ever want to regenerate from scratch. 'builtin' 'local' '-a' 'p10k_config_opts'[[ ! -o 'aliases'         ]] || p10k_config_opts+=('aliases')[[ ! -o 'sh_glob'         ]] || p10k_config_opts+=('sh_glob')[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') 'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' () {  emulate -L zsh -o extended_glob   # Reset Powerlevel10k options.  unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'   [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return   #  # Colors  #   # Soft, high-contrast palette for VS Code's GitHub Dark terminal.  local grey='245'  local red='203'  local yellow='221'  local blue='75'  local magenta='177'  local cyan='80'  local green='114'  local white='252'   #  # Prompt layout  #   typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(    dir    vcs    newline    prompt_char  )   typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(    disk_usage    load    wifi    newline  )   #  # General appearance  #   typeset -g POWERLEVEL9K_BACKGROUND=   typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE=   # Two spaces between prompt segments.  typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR='  '   typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR=   typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false   #  # Prompt character  #   typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$magenta  typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red   typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯'  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮'  typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='❮'   typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false   #  # Directory  #   typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue   typeset -g POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION=''   # Only show current folder.  typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last  typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1   #  # Git  #   typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey   typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=$green  typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=$yellow  typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=$yellow  typeset -g POWERLEVEL9K_VCS_CONFLICTED_FOREGROUND=$red   typeset -g POWERLEVEL9K_VCS_LOADING_TEXT=   typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0   typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan   typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(    vcs-detect-changes    git-untracked    git-aheadbehind  )   # Branch icon with deliberate trailing space.  typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=' '   typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@'   # Hide individual staged/unstaged/untracked icons.  typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON=   # Simple dirty indicator.  typeset -g POWERLEVEL9K_VCS_DIRTY_ICON=' *'   # Ahead / behind remote.  typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=' ⇣'  typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=' ⇡'   typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1   #  # System metrics  #   typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=$green  typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=$yellow  typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=$red  typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=80  typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=90  typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false   # One-minute load average: green normally, yellow when busy, red when saturated.  typeset -g POWERLEVEL9K_LOAD_WHICH=1  typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=$green  typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=$yellow  typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=$red   typeset -g POWERLEVEL9K_WIFI_FOREGROUND=$cyan   #  # Context  #   typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$white}%n%f%F{$grey}@%m%f"  typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$grey}%n@%m%f"  typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION=   #  # Python virtualenv  #   typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey  typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false  typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=   #  # Command execution time  #   typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=5  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'  typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow   #  # Time  #   typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey  typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'  typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false   #  # Prompt behavior  #   typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always   typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet   #  # Performance  #   typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true   (( ! $+functions[p10k] )) || p10k reload} typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} 'builtin' 'unset' 'p10k_config_opts'

Keyboards

An entirely reasonable number of them by the way.

Keyboard photo
There is no such thing as too many keyboards.

Nuphy Kick 75: High Profile

Current

Blush (Silent Linear) • Stock

Work Louder Codex Micro

Current

Silent • Stock

Keychron K2 V2 Hot Swappable

Favorite

Outemu Lime (Silent Tactile) • Custom

Nuphy Halo 75 v2 (White)

Rotation

TTC Light Cloud (Silent Linear) • Cherry Milkshake

Nuphy Halo 75 v2 (Blue)

Custom

Durock L3 (Linear) • Stock

Keychron V1 Max (Cursor Edition) 75%

Custom

Silent K Pro (Silent Linear) • Cursor

Glorious GMMK Pro 75%

Custom

Nuphy Mint (Tactile) • KAM Superuser

Hardware lab

Development boards, and whatever else is currently being over-engineered.

Audio

The gear I use to listen, record, and shape the sound around me.