This is a major change, where Zsh modules/plugins are not git submodules
in the Zim repo anymore, but customized and installed separately as
individual repositories. The discussion about this started more than 2
years ago in #88. Closes#299.
This will allow contributors' modules to live in their own repositories.
Closes#33, closes#138, closes#262, closes#277, closes#281.
Some discussion topics that I think are worth considering before merging
this:
- [ ] Reduce the Zim "core" to a single file?
- [ ] Simplify installation? With an installation script? (See #182)
- [ ] Put the configuration into `.zshrc` instead of a separate `.zimrc`?
(See #288)
- [ ] Rerun the Eriner/zsh-framework-benchmark?
I suggest we create individual GitHub issues/PRs to start the separate
discussions.
The current code has what, up to this point, I considered to be the best
balance between simplicity, execution speed and number of files.
One measured decision was to make the initialization of modules depend
only on the `':zim' modules` style, keeping it as fast as possible.
The `':zim:module' module` style is used to install, update and clean
the modules, all operations that happen after the user got his
as-blazing-fast-possible shell prompt.
Even though I didn't care much about making install or update fast,
`xargs` has a nice feature of allowing commands to be executed in
parallel with `-P`. I took advantage of that.
I've also worked on making the `zimfw` utility give the user some nice
(while still minimalistic) output. Also I'm suggesting this as the new
name for the `zmanage` tool, since `zimfw` does not shadow the `zim`
wiki tool.
I strongly recommend you install this from scratch in a separate
directory, instead of checking out `develop` in your current Zim
installation repo.
Add a first step to explicitly start the Zsh shell, as some issues were
reported before because users were skipping this. See #214 for example.
Also mention `~/.zlogin` as part of the uninstalling process.
Use the following formatting styles:
* Headers >1 are in `Sentence case`.
* The names `Zim` and `Zsh` always appear capitalized, even in the
middle of sentences.
* Prefer
code indented with 4 spaces
instead of
```
code fenced by lines with three back-ticks
```
Closes#315
Update installation instructions in README.md to use cat. Also add blank
lines at the end (instead of beginning) of template files, since they're
prepended (not appended) to existing files.
See difference of output between print and cat (zlogin having a blank
like at the end):
% print -rn "$(<zlogin)$(<test)"
#
# User configuration sourced by login shells
#
# Initialize zim
[[ -s ${ZIM_HOME}/login_init.zsh ]] && source ${ZIM_HOME}/login_init.zsh# Hello world
% cat zlogin test
#
# User configuration sourced by login shells
#
# Initialize zim
[[ -s ${ZIM_HOME}/login_init.zsh ]] && source ${ZIM_HOME}/login_init.zsh
# Hello world
Fixes#94. Fixes#280. Closes#300
For short single commands, prefer a one-liner `for` with the zsh syntax:
```
for x (foo bar) print ${x}
```
Otherwise just place `; do` on the same line as the POSIX `for ... in`:
```
for x in foo bar; do
print ${x}
done
```
Closes#268
This package is causing issues, and editing Zim to allow for use in this
'packaged' format would be a pain. Installing into your home directory
is the best method of installation.
If a file doesn't exist, "$(<nonexistent)" will write:
zsh: no such file or directory: nonexistent
to fd 2. Wrap this with a "() 2>/dev/null" to silence these outputs.
We want to prepend the initialization of zim to any current user
configurations, not append. This way zim doesn't override any manually
configured settings in the user's config files.