Compare commits
1 Commits
docs/readm
...
80ecee5c4a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80ecee5c4a |
1
.vimrc
1
.vimrc
@@ -24,7 +24,6 @@ set backupdir=~/.vim/backup//
|
||||
set nobackup
|
||||
set mouse=a " mouse support
|
||||
|
||||
|
||||
noremap <Up> <NOP>
|
||||
noremap <Down> <NOP>
|
||||
noremap <Left> <NOP>
|
||||
|
||||
8
.zshrc
8
.zshrc
@@ -36,8 +36,8 @@ zmodload zsh/stat
|
||||
|
||||
# plugin manager
|
||||
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}}/.zinit.git"
|
||||
[ ! -d $ZINIT_HOME ] && mkdir -p "$(dirname $ZINIT_HOME)"
|
||||
[ ! -d $ZINIT_HOME/.git ] && git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
|
||||
[ ! -d "$ZINIT_HOME" ] && mkdir -p "$(dirname $ZINIT_HOME)"
|
||||
[ ! -d "$ZINIT_HOME/.git" ] && git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
|
||||
source "${ZINIT_HOME}/zinit.zsh"
|
||||
|
||||
zinit light zsh-users/zsh-autosuggestions
|
||||
@@ -158,7 +158,7 @@ function y() {
|
||||
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
|
||||
command yazi "$@" --cwd-file="$tmp"
|
||||
IFS= read -r -d '' cwd < "$tmp"
|
||||
[ "$cwd" != "$PWD" ] && [ -d "$cwd" ] && builtin cd -- "$cwd"
|
||||
[[ "$cwd" != "$PWD" ]] && [[ -d "$cwd" ]] && builtin cd -- "$cwd"
|
||||
rm -f -- "$tmp"
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ function clip {
|
||||
function mkcd {
|
||||
: "${1:?where?}"
|
||||
[[ -e $1 ]] && { echo "file exists"; return 1 }
|
||||
mkdir -p $1 && cd $1
|
||||
mkdir -p "$1" && cd "$1"
|
||||
}
|
||||
|
||||
function cdtmp {
|
||||
|
||||
132
README.md
132
README.md
@@ -1,132 +0,0 @@
|
||||
# dotfiles
|
||||
|
||||
Bare-git managed dotfiles for zsh/vim/tmux on Linux and macOS.
|
||||
|
||||
## How it works
|
||||
|
||||
This repo uses a **bare git repository** at `~/.dotgit` with the work tree set to `$HOME`. This avoids symlinks and lets dotfiles live at their native paths.
|
||||
|
||||
The alias that drives everything:
|
||||
|
||||
```bash
|
||||
alias .g='git --git-dir=$HOME/.dotgit/ --work-tree=$HOME'
|
||||
```
|
||||
|
||||
`.g status`, `.g add`, `.g diff`, `.g commit`, `.g push` — same as git, just scoped to the dotfiles repo. Untracked files are hidden by default (`showUntrackedFiles = no` in config).
|
||||
|
||||
## Bootstrap on a new machine
|
||||
|
||||
```bash
|
||||
git clone --bare https://gitea.abra.me/svxf/dotfiles.git $HOME/.dotgit
|
||||
alias .g='git --git-dir=$HOME/.dotgit/ --work-tree=$HOME'
|
||||
.g checkout
|
||||
.g config status.showUntrackedFiles no
|
||||
```
|
||||
|
||||
If checkout conflicts with existing files, back them up first:
|
||||
|
||||
```bash
|
||||
.g checkout 2>&1 | grep "^\t" | xargs -I{} mv {} {}.bak
|
||||
.g checkout
|
||||
```
|
||||
|
||||
On next shell start, zinit will bootstrap itself and install all plugins automatically.
|
||||
|
||||
## Tracked files
|
||||
|
||||
| File | What it does |
|
||||
|---|---|
|
||||
| `.zshrc` | Shell config — plugins, aliases, functions, keybindings, PATH |
|
||||
| `.vimrc` | Vim config — space-leader, persistent undo, arrow keys disabled |
|
||||
| `.tmux.conf` | tmux config — mouse, green accent, fzf window switcher, auto-rename |
|
||||
| `.starship.toml` | Prompt — two-line, git status, docker indicators, command duration |
|
||||
| `.gitignore_global` | Global ignores — `*~`, `.DS_Store`, `__pycache__`, `.idea`, `.ipynb_checkpoints` |
|
||||
|
||||
## Key features
|
||||
|
||||
### Zinit plugin stack (`.zshrc`)
|
||||
|
||||
- **zsh-autosuggestions** — inline fish-style suggestions
|
||||
- **zsh-syntax-highlighting** — live command coloring
|
||||
- **zsh-completions** — extra completion definitions
|
||||
- **zsh-history-substring-search** — up/down searches from prefix
|
||||
- **starship** — installed via zinit from GitHub releases
|
||||
|
||||
### Async dotfiles pull
|
||||
|
||||
On shell start, a background job pulls `--ff-only` from origin once per day (marker at `~/.cache/.dotfiles-pull`). Silent, non-blocking.
|
||||
|
||||
### Starship prompt (`.starship.toml`)
|
||||
|
||||
Two-line layout:
|
||||
- **Line 1**: docker container indicator → docker-compose status → git branch/status → (fill) → directory
|
||||
- **Line 2**: `➤` character (green=ok, red=error)
|
||||
- **Right**: command duration (>5s) → user@host → time
|
||||
|
||||
Custom modules detect `/.dockerenv` for container awareness and parse `docker compose ps` for service status.
|
||||
|
||||
### fzf integration (`.zshrc`)
|
||||
|
||||
Sources fzf keybindings and completion when available. Default opts: `--height 40% --reverse`.
|
||||
|
||||
### Project switcher — `pj` (`.zshrc`)
|
||||
|
||||
Fuzzy-finds directories under `/projects` or `~/projects` using fzf. `pj foo` pre-fills the query.
|
||||
|
||||
### Yazi wrapper — `y` (`.zshrc`)
|
||||
|
||||
Wraps the yazi file manager so the shell `cd`s to wherever you navigated on exit.
|
||||
|
||||
### Docker compose aliases (`.zshrc`)
|
||||
|
||||
| Alias | Expands to |
|
||||
|---|---|
|
||||
| `,dcdu` | `docker compose --profile dev up service_dev --force-recreate --detach` |
|
||||
| `,dcdd` | `docker compose --profile dev down --remove-orphans` |
|
||||
| `,dcdl` | `docker compose --profile dev logs -f service_dev` |
|
||||
| `dcu` | `docker compose up --force-recreate --detach` |
|
||||
| `dcd` | `docker compose down --remove-orphans` |
|
||||
| `dcl` | `docker compose logs -f` |
|
||||
|
||||
### Tmux aliases (`.zshrc`)
|
||||
|
||||
| Alias | What it does |
|
||||
|---|---|
|
||||
| `tmuxr` | Attach-or-create session named "auto" |
|
||||
| `tmuxn` | Same + opens a new window |
|
||||
| `tmuxa NAME` | Attach-or-create a named session |
|
||||
|
||||
### Tmux keybindings (`.tmux.conf`)
|
||||
|
||||
- **Shift+Left/Right** — switch windows (no wrap)
|
||||
- **PgUp/PgDn** — swap window position left/right
|
||||
- **prefix+f** — fzf fuzzy window switcher
|
||||
- **prefix+R** — rename window
|
||||
- Splits retain current path. 1-indexed windows, auto-rename shows `command@directory`.
|
||||
|
||||
### Vim (`.vimrc`)
|
||||
|
||||
Space as leader. `jk` exits insert mode. Persistent undo in `~/.vim/undo/`. Arrow keys disabled (hjkl only). Mouse enabled. Smart case search. 8-line scroll margin.
|
||||
|
||||
### Utility functions (`.zshrc`)
|
||||
|
||||
| Function | Purpose |
|
||||
|---|---|
|
||||
| `clip` | Pipe stdin to system clipboard via OSC 52 (works over SSH/tmux) |
|
||||
| `mkcd DIR` | mkdir + cd in one step |
|
||||
| `cdtmp [label]` | Create and cd into a timestamped temp dir under `~/tmp/` |
|
||||
|
||||
### Other aliases (`.zshrc`)
|
||||
|
||||
- `c` → `claude`
|
||||
- `,cd` → `claude --dangerously-skip-permissions` (with sandbox flag)
|
||||
- `zshreload` → `exec zsh`
|
||||
- `LATEST` — global alias expanding to `*(om[1])` (most recently modified file)
|
||||
|
||||
### Shell options (`.zshrc`)
|
||||
|
||||
Extended history (100k lines, shared, deduped). Case-insensitive globbing. Auto-pushd on cd. No flow control (Ctrl-S disabled). Emacs keybindings with Ctrl+X,E / Alt+E for `$EDITOR`.
|
||||
|
||||
### Machine-local overrides
|
||||
|
||||
`~/.zshrc-extra` is sourced at the end if it exists — for per-machine config that doesn't belong in version control.
|
||||
Reference in New Issue
Block a user