A comprehensive development environment configuration featuring an intelligent bash prompt, advanced git workflows, powerful vim setup with LSP support, and seamless screen session management.
[<screen-id>](<user>@<host>)<working-dir>(<git-branchname> <git-branch-status>)
$
git-branch-status:
+= Unstaged changes×= Staged changes not yet committed
branch- Interactive branch selector with preview using fzfmaster- Quick switch to master branchpush- Push current branch to origin with upstream trackinggiff <commit>- Interactive diff viewer for specific commit
kill-count- Show line count contributions by authorreplace <old> <new> <dir>- Recursive find and replace with previewsack <pattern>- Search code excluding common directories (node_modules, dist, etc.)osack <pattern>- Open files containing pattern in vim
f <pattern>- Find files by name (excludes node_modules/dist)fa <pattern>- Find files by name (includes all directories)o <pattern>- Open matching files in vim with fzf selectioncdf [query]- Interactive directory navigation using fzf to browse subdirectories within CDPATHdirspace <dir>- Show disk usage for directory
s- Attach to first detached session or create new onens- Create new screen sessionrs- Resume first detached screen sessionx <name>- Attach to named sessionsl- List all screen sessionsdsl- List detached sessionsksl- Kill all screen sessionskdsl- Kill all detached sessions
Screen Features:
- 10,000 line scrollback buffer
- Multi-user support enabled
- Auto-detach functionality
docker-select- Interactive container selector with preview and shell access
Ctrl+h- Show hover documentation-- Show code actions/quick fixes0- Find all references3- Rename symbolgi- Go to implementation (when LSP enabled)gd- Go to declaration (when LSP enabled)gr- Find references (when LSP enabled)gl- Show diagnostics (when LSP enabled)
Enter- Toggle line numbers on/offCtrl+n- Toggle relative line numbers1- Close all tabs except current2- Buffer selector8- Open quickfix window9- Close quickfix window
- vim-lsp - Language Server Protocol support
- vim-lsp-settings - Automatic LSP server installation
- vim-fugitive - Git integration
- JavaScript/TypeScript/JSX - Full syntax highlighting and support
- Vi command line mode enabled
- Automatic plugin installation via vim-plug
- LSP disabled by default (call
:StartLsp()when needed) - Smart indentation for multiple file types
- Enhanced quickfix window navigation
- Vi command line editing mode
- Custom readline shortcuts:
Ctrl+f- Interactive file explorerCtrl+s- Source ~/.bashrcCtrl+l- Clear screenCtrl+a- Beginning of lineCtrl+e- End of line
- fzf configured with bat preview and reverse layout
- git completion for branch names and commands
- Optimized git status parsing for faster prompt updates
- CDPATH includes home directory for easier navigation
The cdf function provides fuzzy directory navigation for all subdirectories within your CDPATH:
- What it does: Shows all immediate subdirectories within each CDPATH location for fzf selection
- Live preview: Displays
lsoutput of each directory as you navigate - Smart navigation: Uses
cd -Pto properly handle symbolic links - Query support:
cdf myprojectstarts with "myproject" pre-filled in fzf - Ergonomic design: Navigate directly to project folders rather than parent directories
- Auto-startup: Automatically launches when starting a new bash session (can be customized with
CDF_DEFAULTenvironment variable)
Example: If CDPATH includes ~/projects and ~/work, cdf shows:
~/projects/dotfiles
~/projects/myapp
~/projects/website
~/work/client1
~/work/client2
Customization: Set CDF_DEFAULT environment variable to change startup behavior:
export CDF_DEFAULT=""- Default, shows all directories on startupexport CDF_DEFAULT="myproject"- Pre-filters to directories matching "myproject"- Comment out the
cdf "$CDF_DEFAULT"line inbashrcto disable auto-startup
These are the most commonly used aliases (more available in aliases.bash):
f <filename>- Case insensitive findo <filename>- Open all files matching<filename>in vimns- New screen sessionsl- List all screen sessionskill-count- Get line count in git repo by author
git clone --recursive https://github.com/schnej7/dotfiles.git
cd ~/.dotfiles
make # Basic installation| Command | Includes | Best For |
|---|---|---|
make |
Bash, Vim, Screen, SSH | Linux/Basic setup |
make osx |
Base + macOS features | macOS users |
make work |
macOS + Private configs | Work environment |
Each profile creates symbolic links:
~/.bashrc→bash/bashrc~/.vimrc→vim/vimrc~/.screenrc→screen/screenrc~/.bash_aliases→bash/aliases.bash~/.bash_colors→bash/bash_colors.bash~/.inputrc→bash/inputrc- And more...
After installation:
- Restart your terminal or run
source ~/.bashrc - Open vim and run
:PlugInstallto install plugins - For LSP features in vim, run
:call StartLsp()
- Git - For cloning and managing the repository
- Make - For running installation commands
- Bash - Shell environment
- Vim - Text editor (configured with plugins)
- Homebrew - Package manager (installed automatically with
make osx) - bash-completion - Enhanced tab completion
- fzf - Fuzzy finder for enhanced file/branch selection
- bat - Better
catwith syntax highlighting - ack - Advanced text search tool
- screen - Terminal multiplexer
dotfiles/
├── bash/ # Bash configuration
│ ├── bashrc # Main bash configuration
│ ├── aliases.bash # Command aliases and functions
│ ├── bash_colors.bash # Color definitions for prompt
│ ├── profile.bash # Bash profile loader
│ ├── inputrc # Readline configuration (vi mode)
│ └── osx/ # macOS-specific configurations
├── vim/ # Vim configuration
│ ├── vimrc # Main vim configuration
│ └── pack/ # Vim plugin packages (git submodules)
├── screen/ # GNU Screen configuration
│ └── screenrc # Screen settings
└── private/ # Private/sensitive configurations
├── ssh/ # SSH configuration
└── bash/ # Work-specific bash settings
The dotfiles use symbolic links to connect configuration files to their expected locations in your home directory. The Makefile system provides different installation profiles:
- Base (
make): Core bash, vim, screen, and SSH configurations - macOS (
make osx): Base + macOS-specific enhancements - Work (
make work): macOS + private work configurations
This repository follows the forking workflow, which allows contributors to propose changes without requiring direct write access to the main repository.
-
Fork the repository - Create your own server-side copy of this repository using GitHub's fork button
-
Clone your fork - Download your fork to your local machine:
git clone https://github.com/yourusername/dotfiles.git cd dotfiles -
Add upstream remote - Connect to the original repository to stay updated:
git remote add upstream https://github.com/schnej7/dotfiles.git
-
Create a feature branch - Work on changes in a dedicated branch:
git checkout -b feature/your-improvement
-
Make your changes - Edit files, test your modifications, and commit:
git commit -am "Add your descriptive commit message" -
Push to your fork - Upload your changes to your server-side repository:
git push origin feature/your-improvement
-
Open a pull request - Use GitHub to propose merging your changes into the main repository
Keep your fork synchronized with the main repository:
git pull upstream main
git push origin mainWhile contributing, you can customize your local setup:
- Add personal aliases to
bash/aliases.bash - Modify
vim/vimrcfor editor preferences - Use the
private/directory for sensitive configurations - Adjust colors in
bash/bash_colors.bash