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. As a recent convert from Emacs, I had spent three days setting the thing up and making friends with it. VSCode was a real disappointment.
Initially, I found myself disenchanted with broken Emacs plugins. Finally, I was tired of trying to fix them and just moved on. Then, after all the pain, 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: Emacs, Tmux, Vim, LazyVim, Kitty, 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/emacs.d/emacs.init > ~/.emacscurl https://raw.githubusercontent.com/odysseyalive/dotfiles/master/workstation/omarchy-latest > ~/installRun as user...
bash installWorkstation 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: Emacs 27.2+ w/ Lua support
Suggested: Silver Searcher
Emacs has a huge performance advantage over Vi. This configuration includes the Evil package, which emulates Vim's modal functionality. In Evil mode Emacs shares keybindings familiar to the YADR package. Switching between Emacs and Evil mode is done by C-z. There is inline documentation with live hints for ease of discovery. After entering Emacs, just hit the leader key (,) to get started. Hit the leader key twice for a fuzzy command search.
NOTE: I have some personal concerns about Emacs 28's performance. However, I'm excited about the new developments in 29. Therefore, I would strongly suggest sticking with version 27 for now. If your distro doesn't have it, there are compilation examples in each workstation script.
The General plugin has been included with this Emacs configuration. There is no need to hold the comma down (the leader key borrowed from YADR) before pressing the next key. The following shortcuts can be typed concurrently in the order presented, which is a friendly alternative to the Emacs Pinky.
,,: Search for a command, M-X equivalent,;: Comment or uncomment code blocks,[: Contract vertically split Window,]: Expand vertically split Window,-: Shrink horizontally split window,=: Grow hoizontally split window,e: Toggle Error List,h: View Dashboard,jx: Jump to character x,m: Browse current directory wth Ranger,n: Browse current directory with Nerdtree,q: Quit current buffer m:q: or:q!Quit current buffer, Note: all standard VIM controls apply,Q: Close Emacs,x: Cycle to next buffer,z: Cycle to previous buffer,U: Update All Packages,/: Search current project
,ai: Open IRC,at: Open a terminal,am: Open Mu4e for Email,aw: Browse the web from Emacs
,bb: List/Create buffers,bc: Copy File Path,bf: Open File,bn: Craete New Buffer,bp: Find File in Project,bq: Quit buffer,br: Refresh buffer,bs: Save buffer:w: Save buffer, VIM equivalent
,da: Delete all breakpoints,db: Toggles breakpoint on current line,dc: Continue to next breakpoint,dd: Start debugger,di: Step into,dl: List all breakpoints,dn: Next line,do: Step out,dp: Install vscode-php-debug plugin,dv: View context,dx: Stop Debugger
,fd: Find Definitions to hovered function,fD: Find in Current Buffer's Directory Recursively,ff: Resume Last Find,fi: Find Implementation,fm: Show quick menu of file definitions,fp: Find file in project,fr: Find References to hovered function,fs: Find Documentation
,ga: See Antonyms,gs: View spelling errors,gc: Correct spelling of word under cursor,gd: See definition of word under cursor,gd: See related words for word under cursor,gt: See synonyms (thesaurus) of word under cursor
,la: Artist mode, draw on screen with cursor,lc: Toggle HTML color codes,le: Encrypt selection,ld: Decrypt selection,li: Toggle aggressive indentation,ln: Toggle line numbers,lm: Toggle Line/Character mode,lr: Toggle relative line number display,ls: Delete trailing whitespaces,lt: Toggle PHP/Web mode highlighting,lw: Toggle line wrapping
,oo: Agenda View, be sure to adjust position wth org-agenda-file-to-front,oa: Activate current line,od: Schedule deadline,oc: Recompute clock,ok: Schedule task,og: Set tag,ol: Display clocks,oj: Jump to running task,ot: Start task,or: Show report,os: Stop task,ox: Cancel clock
,p[: Go to next change in file,p]: Go to previous change in file,pd: Search in directory,ph: History of buffer,pf: Fuzzy file finder (CtrlP),pp: Resume previous search/filter,pr: Open recent project,ps: Search in current project,pm: Git status with Magit,pw: Swoop
,sa: Evaluate statement,sb: Evaluate buffer,sc: Evaluate function,se: Evaluate and print statement,sf: Set breakpoint on function,sl: Load e-List file,sp: Compile File,ss: Open Lisp scratch pad,sv: Set breakpoint on variable,sw: Remove breakpoint from a variable,sx: Remove breakpoint from a function
,wd: Delete current window,wc: Delete all other windows except current window,wf: Toggle Emacs full screen,wh: Focus on window to left of current one,wj: Focus on window above current one,wk: Focus on window below current one,wl: Focus on window to right of current one,wH: Move current window left,wJ: Move current window up,wK: Move current window down,wL: Move current window right,wn: Switch screens,wo: Focus on next window,wp: Pop out current window to new screen,ws: Split window horizontally,wv: Split window vertically,wx: Close screen
<ctrl>-z: Toggles Emacs/Vim Mode<ctrl>-x t: Tab Controls
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
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)

