This repository is a collection of tools that I use in my workflow.
Credit: This dotfile repo is heavily based on YADR, a solid dotfile package created by Yan Pritzker and worked on by several others. This is not intended to be a fork of YADR. At the same time, I take no credit here, either. This is just a personal collection of settings from YADR trimmed down considerably for speed and portability.
Check out the original repo, YADR, especially if you work in Python or Ruby.
Also, check out LazyVIM! Recently, I loaded a large project into VSCode, and the editor started stuttering to an unusable state. Then I stumbled onto LazyVIM. With this package, I can't tell you how amazing NeoVIM is as an IDE. So please do yourself a favor and check it out. Under the workstation directory, you'll find an example of my setup using great plugins like Grammarly and VSCode-php-debug. IMHO, the neovim dap interface is much, much nicer than VSCode's implementation. For one thing, you can actually read the variable scope.
index: Tmux, Vim, LazyVim, Kitty, Ghostty, AeroSpace, Hyprland, and Ranger
Requirements: git
bash -c "`curl -fsSL https://raw.githubusercontent.com/odysseyalive/dotfiles/master/setup`"bash ~/.yadrlite/setup toolsbash ~/.yadrlite/setup updatebash ~/.yadrlite/setup removecurl https://raw.githubusercontent.com/odysseyalive/dotfiles/master/workstation/omarchy-latest > ~/installRun as user...
bash installTransform your Mac into a tiling window manager setup similar to Omarchy using AeroSpace, Ghostty terminal, and Sketchybar.
# First, install basic dotfiles
bash -c "`curl -fsSL https://raw.githubusercontent.com/odysseyalive/dotfiles/master/setup`"
# Then run the macOS workstation setup
bash ~/.yadrlite/setup macosThis installs:
- Ghostty - Modern GPU-accelerated terminal with Kitty graphics protocol (ranger image previews work)
- AeroSpace - i3-like tiling window manager (no SIP required)
- Sketchybar - Custom status bar with workspace indicators
- JankyBorders - Window border highlighting
- Neovim - LazyVim configuration with PHP support
- Development tools - Node.js (via mise), pnpm, Go tools, PHP, Python
- Ranger - File manager with image previews
Requirements: macOS 13 (Ventura) or later
Workstation shortcuts have been pulled over from YADR, so those working with YADR should feel right at home. There are a few minor changes and additions. However, a LOT may be missing. This package is geared towards PHP development on local staging environments and setting up shop on web servers for emergencies with limited permissions. The idea is here that the package should be easy to remove while restoring the system to prior user configurations.
As with YADR, most of the key mapping not mentioned below can be found in the settings directory for reference. This package is ready for deployment on most Linux distros and MacOS.
Requirements: Tmux
The leader key Ctrl-a can be followed by the next key concurrently without
holding them all down at once. Use tmux ls to list the current open sessions
and tmux a -t <session_no> to join them. Use
tmux kill-session -t <session_no> to remove one.
Ctrl-a d: Detach from current session and close Tmux. Runtmux attachto resume later.Ctrl-a ^D: Alternative detach command (keep finger on Ctrl)Ctrl-a Ctrl-s: Save current session with tmux-resurrectCtrl-a Ctrl-r: Restore saved session with tmux-resurrect
Ctrl-a c: Create new window in current directoryCtrl-a Ctrl-a: Switch to last windowCtrl-a a: Send prefix to nested tmux sessionCtrl-a &: Force close window
Ctrl-h: Focus on pane left of the current one (vim-tmux-navigator)Ctrl-j: Focus on pane below the current one (vim-tmux-navigator)Ctrl-k: Focus on pane above the current one (vim-tmux-navigator)Ctrl-l: Focus on pane right of the current one (vim-tmux-navigator)
Ctrl-a v: Create vertical split (50% width) in current directoryCtrl-a ^V: Alternative vertical split commandCtrl-a s: Create horizontal split (50% height) in current directoryCtrl-a ^S: Alternative horizontal split command
Ctrl-a H: Resize pane left by 5 columns (repeatable)Ctrl-a J: Resize pane down by 5 rows (repeatable)Ctrl-a K: Resize pane up by 5 rows (repeatable)Ctrl-a L: Resize pane right by 5 columns (repeatable)
Ctrl-a e: Enable synchronize-panes (send input to all panes)Ctrl-a E: Disable synchronize-panes
Ctrl-a [: Enter copy mode (Vim-like navigation)- In copy mode:
h,j,k,l: Move cursorv: Begin selectionCtrl-v: Begin rectangular selectiony: Copy selection and exit copy modeEnter: Exit copy mode
Ctrl-a r: Reload tmux configuration fileCtrl-a Ctrl-l: Clear screen (alternative to clear command)
This configuration uses Vim-Plug. To
initialize the plugins, enter Normal mode and type :PlugInstall. Similarly,
you use :PlugUpdate to update your plugins.
Requirements: Vim w/ Lua support
Plugin Requirements: Composer, neovim, nodejs, Python 3+, Pynvim, Silver Searcher
Cmd-[1-]: (Alt-[1-9]) switches to a specific tab number (like iTerm and Chrome) and tabs have been set up to show numbersCtrl-h,l,j,k: to move left, right, down, up between splits. This also works between vim and tmux splits thanks tovim-tmux-navigator.Ctrl-w r: rotate windows aroundvv: vertical split (Ctrl-w,v)ss: horizontal split (Ctrl-w,s),c: closes window only (Ctrl-w,c),qo: open quickfix window (this is where output from Grep goes),qc: close quickfixCmd-[Up,Down,Left,Right]: (Alt-[Up,Down,Left,Right]) increase hight, decrease height, contract window and expand window=: make all windows equal size
Cmd-c: (Alt-c) create new tabCmd-q: (Alt-q) close tab and hide buffersCmd-z: (Alt-z) go to previous tabCmd-x: (Alt-x) go to next tabCmd-[1-9]: (Alt-[1-9]) select tab by number
,z: cycle back through previously opened buffers,x: cycle forward through previously accessed buffers,TAB: toggle between last two opened buffers,b: CtrlP buffer selector great for jumping to a file you already have open,,b: opens buffer selector containing recently opened files,n: opens file explorer in directory vim was started in,m: shows current file in file explorer,q: closes buffer (:bd!),Q: completely closes Vim without saving any buffers (:qa!),Z: completely closes Vim saving all buffers (:xa),S: saves all buffers (:wa)
Ctrl-o: Old cursor position this is a standard mapping but very useful, so included hereCtrl-i: opposite of Ctrl-O (again, this is standard),gf: same as vim normal gf (go to file),ag: Grep command line using Silver Searcher and Fzf,ad: search for term in directory of current file,aw: Search the current word under the cursor,hl: toggle search highlight on and offCtrl-x Ctrl-o: vim omnicompletion//: clear the search,mc: mark this word for MultiCursor (like sublime). UseCtrl-n: (next),Ctrl-p: (prev),Ctrl-x(skip) to add more cursors, then do normal vim things like edit the word.,jx: EasyMotion Jump to character x- Spacebar Sneak type two characters to move there in a line. Kind of like vim's
f: but more accurate. :Gsearch foo: global search, then do your normal%s/search/replace/gand follow up with:Greplaceto replace across all files. When done use:wall: to write all the files.
:Git: Git status with Fugitive:Gclog: view logs or load previous versions of same file:Git push/pull: repo management]c,[c: jump to next/previous modification
:MakeTags: build tag library for project,gt: search for tag under cursor and bring up file,gi: go to next tag in history,go: go back one tag in history
,W: Toggle spell checker]s,[s: jump to next/previous spelling errorz=: get spelling suggestionzg,zug: add/remove word from spellfile
gd: go to tag definitiongy: go to type definitiongi: go to next implementation of taggr: pull up reference preview of tag,rn: symbol renaming,f: format selected code:Format: format code in current buffer:Fold: fold code in current buffer:OR: organizes imports of current buffer:Ctrl-f: scroll up in popup window:Ctrl-b: scroll down in popup window,e: pull up diagnostic window[g,]g: navigate up/down diagnostic window,qf: autocorrect line errorH,K: pull up documentation for item under cursorCtrl-Space: Trigger autocompletion
C-l: Trigger snippet expandC-j: Expand or Jump to next placeholderC-k: Jump to previous placeholder,x: Convert visual selected code to a snippet<tab>: triggers completion, confirmation, expand and jump
q <letter>: start recording all activityq: stop recording@ <letter>: replay activity stored in letter
Ctrl-x Ctrl-n: multiword/tag completionCtrl-x Ctrl-f: filename completionCtrl-x Ctrl-o: omnicompletion
See more about setting up the .vimrc.local file.
<F5>: start/run (to next breakpoint/end of script)<F2>: step over<F3>: step into<F4>: step out<F6>: stop debugging (kills script)<F7>: detach script from debugger<F9>: run to cursor<F10>: toggle line breakpoint<F11>: show context variables (e.g. after "eval")<F12>: evaluate variable under cursor:Breakpoint <type> <args>: set a breakpoint of any type (see :help VdebugBreakpoints):BreakpointRemove *: remove all breakpoints:VdebugEval <code>: evaluate some code and display the result,e: evaluate the expression under visual highlight and display the result
S#S"S'S]S)S}: to surround a visual selection with these common wrappersci',ci",ci],ci): (AltLinux) changes content inside those surrounding marks. You don't have to be inside them,.: to go to last edit location (same as'.) because the apostrophe is hard on the pinky,ci: to change inside any set of quotes/brackets/etc
,,c: search for and execute commandsCtrl-p: after pasting Usep: to paste andCtrl-p: to cycle through previous pastes.,yw: yank a word from anywhere within the word (so you don't have to go to the beginning of it),ow: overwrite a word with whatever is in your yank buffer you can be anywhere on the word. saves having to visually select it,w: strip trailing whitespaces,hi: show current Highlight group. if you don't like the color of something, use this, then usehi! link [groupname] [anothergroupname]: in your vimrc.after to remap the color. You can see available colors using:hi:Wrap: wrap long lines (e.g. when editing markdown files),;;,gcc: un/comment selected lines in visual mode thanks to tComment,o,,p: start a new or restore an existing Vim session thanks to obsessionzf,zo,zc,za,zr,zm,zd: creates, opens, closes, toggles, toggles all, collapses all and deletes code folds,W,z=,]s,[s: toggle spell check, word suggestion and jump forward/backward to next misspelled word:%!js-beautify: run external comands on file within Vim, like js-beautify
,vc: (Vim Command) copies the command under your cursor and executes it in vim. Great for testing single line changes to vimrc.,vr: (Vim Reload) source current file as a vim file
LazyVim is a modern Neovim distribution that provides a blazing fast IDE experience with sensible defaults. This configuration builds on LazyVim's foundation with PHP development optimizations and carefully selected plugins for web development workflows.
mkdir -p ~/.config/nvim && rsync -azhLP ~/.yadrlite/workstation/lazyvim/ ~/.config/nvimRequirements: Neovim 0.9+, Git, Node.js
Plugin Requirements: Ripgrep, fd, PHP CS Fixer, Intelephense
LazyVim uses the comma (,) as the leader key, consistent with the YADR package. Most shortcuts are discoverable through the which-key popup that appears after pressing the leader key.
,: Opens which-key menu (shows all available shortcuts),,: Command palette (equivalent to:in vim),r: Resume last fuzzy finder searchCtrl-h,j,k,l: Navigate between splits and tmux panesCtrl-/: Toggle terminal<S-h>,<S-l>: Switch between buffers
,ff: Find files in project,fr: Recent files,fb: Browse file system,fg: Live grep in project,fw: Find word under cursor,fc: Find command,fh: Help tags,fm: File manager (neo-tree)
,bd: Delete buffer,bD: Delete buffer and window,bl: Delete buffers to the left,br: Delete buffers to the right,bo: Delete other buffers,bp: Toggle pin buffer
gd: Go to definitiongr: Go to referencesgi: Go to implementationK: Show hover documentation,ca: Code actions,cr: Rename symbol,cf: Format document,cd: Line diagnostics]d,[d: Next/previous diagnostic
,gg: LazyGit,gb: Git blame line,gf: LazyGit current file history,gl: Git log,gL: Git log (current file)]h,[h: Next/previous hunk,ghs: Stage hunk,ghr: Reset hunk,ghp: Preview hunk
,db: Toggle breakpoint,dB: Breakpoint condition,dc: Continue,dC: Run to cursor,dg: Go to line (no execute),di: Step into,dj: Down in stacktrace,dk: Up in stacktrace,dl: Run last,do: Step out,dO: Step over,dp: Pause,dr: Toggle REPL,ds: Session,dt: Terminate,dw: Widgets
,ww: Other window,wd: Delete window,w-: Split window below,w|: Split window right,wm: Maximize toggle
,sr: Replace in files,sR: Replace in files (with confirmation),sw: Search word under cursor,sW: Search word under cursor (exact match)
,fp: Find files in config,ft: Terminal (root dir),fT: Terminal (cwd),qq: Quit all,qs: Session save,qr: Session restore
,l: Open Lazy plugin manager,cm: Mason (manage LSP servers, formatters, etc.),ci: Lazy install,cs: Lazy sync,cu: Lazy update,cx: Lazy extras
,aa: CopilotChat,ae: CopilotChat explain,af: CopilotChat fix,ao: CopilotChat optimize,ad: CopilotChat docs,at: CopilotChat testsTab: Accept Copilot suggestionCtrl-]: Dismiss Copilot suggestion
,tm: Toggle table mode,tt: Tableize (convert CSV to table),tr: Realign table,tdd: Delete table row,tdc: Delete table column
,oa: Org agenda,oc: Org capture,oe: Org export,oi: Org clock in,oo: Org clock out,ot: Org todo
Kitty is a full featured GPU-accelerated terminal. It's faster.
Requirements: Kitty
Ctrl+Shift+hEnter historyCtrl+Shift+p, vEnter history in VIM mode
ctrl+shift+t: Creates new tabctrl+shift+q: Closes tabctrl+shift+right: Next tabctrl+shift+left: Last tabctrl+shift+.: Move tab forwardctrl+shift+,: Move tab backward
ctrl+shift+enter: New windowctrl+shift+w: Close windowctrl+shift+n: Create new OS windowctrl+shift+]: Next windowctrl+shift+[: Last windowctrl+shift+l: Cycle through layoutctrl+shift+f: Shift window to prominent spotctrl+shift+b: Shift window to least prominent spotctrl+shift+F2: Create a new iteration of the last edited window
Ctrl+Shift+Equal: Inscrease Font SizeCtrl+Shift+minus: Decrease Font SizeCtrl+Shift+backspace: Restore Font SizeCtrl+Shift+O: select light and dark themesCtrl+Shift+L: Select light themeCtrl+Shift+D: Select dark theme
Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration. It supports tabs, splits, and the Kitty graphics protocol for image previews in ranger.
Requirements: Ghostty
The YADRLite Ghostty configuration uses the SeaShells theme with FiraCode Nerd Font. Key features:
- Font: FiraCode Nerd Font 10.5pt
- Theme: SeaShells Dark/Light (switchable)
- macOS Option as Alt: Enabled (required for AeroSpace keybindings)
- Kitty Graphics Protocol: Supported natively (ranger image previews work)
- GPU Acceleration: Metal on macOS, OpenGL on Linux
Configuration location: ~/.config/ghostty/config
Ghostty supports tabs, splits, and windows with native UI components. All keybindings are customizable via the config file.
Ctrl+Shift+t: New tabCtrl+Shift+Left: Previous tabCtrl+Shift+Right: Next tabCtrl+Shift+w: Close tab/splitCtrl+1-9: Go to tab by number (macOS:Cmd+1-9)
Ctrl+Shift+o: New split (right)Ctrl+Shift+e: New split (down)Ctrl+Alt+Arrow: Navigate to split (up/down/left/right)Ctrl+Shift+z: Toggle split zoom (fullscreen current split)Ctrl+Shift+=: Equalize split sizesCtrl+d: Close split (macOS)
Ctrl+Shift+n: New windowCtrl+Shift+q: Quit Ghostty
Ctrl+Shift+c: CopyCtrl+Shift+v: PasteShift+Click: Select text
Ctrl+Shift+=: Increase font sizeCtrl+Shift+-: Decrease font sizeCtrl+Shift+0: Reset font size
Ctrl+Shift+p: Command palette (Linux 1.2+)Ctrl+Shift+,: Open config fileCtrl+Shift+r: Reload config
Add to ~/.config/ghostty/config:
# Vim-style split navigation
keybind = ctrl+shift+h=goto_split:left
keybind = ctrl+shift+j=goto_split:bottom
keybind = ctrl+shift+k=goto_split:top
keybind = ctrl+shift+l=goto_split:right
# Leader key sequences (like tmux/vim)
keybind = ctrl+a>c=new_tab
keybind = ctrl+a>v=new_split:right
keybind = ctrl+a>s=new_split:down
AeroSpace is an i3-like tiling window manager for macOS. Unlike yabai, it doesn't require disabling System Integrity Protection (SIP), making it safer and easier to set up. The YADRLite configuration uses vim-style keybindings with Alt as the modifier key.
Requirements: AeroSpace
AeroSpace uses Alt (Option) as the primary modifier. After installation, grant Accessibility permissions when prompted (System Settings > Privacy & Security > Accessibility).
Alt+h: Focus window to the leftAlt+j: Focus window belowAlt+k: Focus window aboveAlt+l: Focus window to the right
Alt+Shift+h: Move window leftAlt+Shift+j: Move window downAlt+Shift+k: Move window upAlt+Shift+l: Move window right
Alt+1throughAlt+9: Switch to workspace 1-9Alt+Shift+1throughAlt+Shift+9: Move window to workspace 1-9
Alt+/: Toggle between horizontal and vertical tilingAlt+,: Toggle accordion layoutAlt+f: Toggle fullscreenAlt+Shift+f: Toggle floating/tiling mode
Alt+\: Split horizontallyAlt+Shift+\: Split vertically
Alt+-: Shrink windowAlt+=: Expand window
Alt+t: Toggle theme (SeaShells dark/light)
Alt+Shift+;: Enter service modeEsc: Reload config and return to main moder: Flatten workspace treeBackspace: Close all windows except current
The following applications open as floating windows by default:
- Finder
- System Settings/Preferences
- Calculator
- Preview
AeroSpace uses a tree structure where each container can have its own layout. This is useful for widescreen monitors where you want different layouts on each side of the screen.
Example: Accordion on the left, single window on the right
┌─────────────────┬─────────────────┐
│ [Accordion] │ │
│ ┌─────────┐ │ Single │
│ │ Window1 │ │ Window │
│ │ Window2 │ │ (tiles) │
│ │ Window3 │ │ │
│ └─────────┘ │ │
└─────────────────┴─────────────────┘
How to set it up:
- Open two windows - they'll tile horizontally by default
- Focus the left window
- Press
Alt+,to switch that side to accordion - Open more windows while focused on the left - they stack in the accordion
- The right side remains unaffected (tiles layout)
Useful keybindings for mixed layouts:
Alt+,: Toggle accordion layout (affects only the focused container)Alt+/: Toggle between horizontal and vertical tiling
Each container maintains its own layout independently, so changing one side doesn't affect the other.
Configuration location: ~/.config/aerospace/aerospace.toml
Hyprland is a dynamic tiling Wayland compositor used by Omarchy, an opinionated Arch Linux distribution. Everything in Omarchy happens via the keyboard. View all keybindings with Super + K and customize them in ~/.config/hypr/bindings.conf.
Requirements: Hyprland, Omarchy
Hyprland uses Super (Windows/Meta key) as the primary modifier. All bindings can be customized in ~/.config/hypr/bindings.conf.
Super+K: Show all keyboard bindingsSuper+Space: Application launcherSuper+Alt+Space: Omarchy menuSuper+Return: Open terminalSuper+Shift+B: Open browser
Super+W: Close active windowCtrl+Alt+Delete: Close all windowsSuper+T: Toggle tiling/floating modeSuper+O: Pop window into sticky floating stateSuper+F: Toggle fullscreenSuper+Alt+F: Full width modeSuper+J: Toggle stacking windows horizontally/vertically
Super+Arrow: Move focus directionally (up/down/left/right)Super+Shift+Arrow: Swap windows directionally
Super+=: Grow window rightSuper+-: Grow window leftSuper+Shift+=: Grow window downSuper+Shift+-: Grow window up
Super+1/2/3/4: Jump to workspace 1-4Super+Tab: Next workspaceSuper+Shift+Tab: Previous workspaceSuper+Ctrl+Tab: Return to former workspaceSuper+Shift+1/2/3/4: Move window to workspace 1-4
Super+S: Show scratchpad overlaySuper+Alt+S: Move window to scratchpad
Super+G: Toggle groupingSuper+Alt+G: Remove from groupSuper+Alt+Tab: Cycle within groupSuper+Alt+1/2/3/4: Jump to specific window in group
Print: Screenshot with editingShift+Print: Screenshot to clipboardAlt+Print: Screen recording (press again to stop)Super+Print: Color picker
Super+Ctrl+E: Emoji pickerSuper+Ctrl+Space: Rotate background images
Super+Shift+Return: TerminalSuper+Shift+B: BrowserSuper+Shift+F: File managerSuper+Shift+N: Neovim
Customize keyboard repeat rate and trackpad settings in ~/.config/hypr/input.conf.
Configuration location: ~/.config/hypr/bindings.conf
Ranger is a console file manager with VI key bindings that provides a minimalistic interface with Miller columns layout. It's perfect for quick file navigation and preview without leaving the terminal.
mkdir -p ~/.config/ranger && rsync -azhLP ~/.yadrlite/workstation/ranger/ ~/.config/rangerRequirements: Ranger
Plugin Requirements: w3m for image previews, atool for archive handling
The ranger interface uses three columns: parent directory (left), current directory (center), and file preview (right). Navigation follows vim conventions with hjkl keys.
h,j,k,l: Move left, down, up, right (or use arrow keys)gg: Go to top of file listG: Go to bottom of file listEnter: Open file or enter directoryq: Quit rangerS: Open shell in current directoryCtrl-h: Toggle hidden fileszh: Toggle hidden files (alternative)
yy: Copy (yank) filedd: Cut filepp: Paste fileSpace: Select/mark filev: Select all filesuv: Unselect all filescw: Rename current fileA: Rename file (cursor at end)I: Rename file (cursor at beginning):delete: Delete selected files:mkdir <name>: Create new directory
gh: Go to home directorygr: Go to root directoryge: Go to /etcgd: Go to /devgv: Go to /vargm: Go to /mediaH: Go back in historyL: Go forward in history
i: Preview file in larger windowr: Open file with application (shows menu)E: Edit file with default editor:open_with <app>: Open with specific application
/: Search for filesn: Next search resultN: Previous search resultf: Find file (type to filter)zf: Toggle file filtering
m<letter>: Create bookmark at current location'<letter>: Go to bookmarkCtrl-n: Create new tabCtrl-w: Close current tabTab: Switch to next tabShift-Tab: Switch to previous tab
zh: Show/hide hidden fileszp: Toggle file previewszi: Toggle image previewszv: Toggle use of preview scriptF: Toggle freeze files (improve performance)
