aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 8ff400fe716890f1bac8724c4786f59771fb0837 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# ZSH Presentation

This was part of an internal presentation I gave at parsely on how to build a
minimal setup for zsh. You can clone this repo to `~/.dotfiles` and use it as a
skeleton to start your own minimal zsh/dotfile structure.

## Overwhelming list of plugin stuff

https://github.com/unixorn/awesome-zsh-plugins

There is so much to read but I would mostly just skim `plugins` for things you
need.

https://github.com/unixorn/awesome-zsh-plugins#plugins

Fun example I found while browsing plugins

https://github.com/mattberther/zsh-pyenv

## Managing symlinks with gnustow

Source: http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html?round=two

Stow mocks the directory stucture of the .dotfiles to understand where files
should go. So instead of doing say:

```
ln -s /path/to/my/source/file.txt /path/to/symlink.txt
```

You create the directory structure with actual folders and stow can use that
structure to determine where to place the files given a root directory. It will
complain if files already exist so you won't overwrite them. To install the
dotfiles you can simply:

```
cd stow
./install
```

## Functions and Aliases

I only split up my main config and another file that contains my functions and
aliases. I've included a filtered version of my aliases to give ideas, but
there is a lot cruft in there.

Essential Tools:
- fzf (https://github.com/junegunn/fzf)
- gh  (github cli https://cli.github.com/)
- exa (pretty ls https://github.com/ogham/exa)

## Zplug

zplug is a zsh plugin manager. Add the repos you want in your ~/.zshrc and then
when you start a new shell you'll be prompted to install the new plugins.
Supports oh-my-zsh plugins.

## Autocompletes

zsh uses a variable called `fpath` to determine where to find autocomplete
files. Autocomplete files are prefixed with an underscore and then the command
name. For example, to find the autocompletes for `docker`, zsh would search the
fpath variable for a file called `_docker`. You can write your own
autocompletes for things. Defining an alias in your zsh will let the alias pick
up the autocompletes for the original commands but if you write a function it
will not:

```
# gss will pick up the tab completion for git stash
alias gs="git stash"
# this will not
gs() {
    git stash
}
```

You can use the `compdef` function to assign the autocompletes of one command
to another. Example in zshrc

You can also write your own completions if you know a simple bash command to
get the list of options you'd like to be presented with.