Compare commits
27 commits
Author | SHA1 | Date | |
---|---|---|---|
|
99a4dc396a | ||
|
0392926d61 | ||
|
e8e26c1b13 | ||
|
84c59ede0e | ||
|
331f1c5548 | ||
|
f4bc83da7e | ||
|
4bb6172900 | ||
|
caa0c850ae | ||
|
92c3eede1f | ||
|
869a8f5f17 | ||
|
3fe3ba2b48 | ||
|
ded640ed80 | ||
|
880ed131a1 | ||
|
7f3491b1bb | ||
|
6166fce1a1 | ||
|
3b7908dca1 | ||
|
0785d87ea4 | ||
|
eb37844857 | ||
|
3e812ed311 | ||
|
897afc9cf9 | ||
|
76164d6217 | ||
|
9a47fde0c8 | ||
|
06f8bc71a3 | ||
|
9dc4056c4e | ||
|
96f60da366 | ||
|
cdd9258d5c | ||
|
4fcc85b2db |
29 changed files with 727 additions and 451 deletions
65
CHANGELOG.md
65
CHANGELOG.md
|
@ -7,7 +7,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
_No unreleased changes._
|
### Added
|
||||||
|
|
||||||
|
- Also output zimfw config and zimfw.zsh script paths in `info` action,
|
||||||
|
following symlinks if any.
|
||||||
|
- Don't output colors if `NO_COLOR` environment variable is set to a non-empty
|
||||||
|
value.
|
||||||
|
|
||||||
|
## [1.15.1] - 2024-10-10
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Preserve original module if reinstall fails instead of removing it first.
|
||||||
|
|
||||||
|
## [1.15.0] - 2024-10-08
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `reinstall` action, that removes and then installs again the modules that
|
||||||
|
failed any of the checks: (See [#542](https://github.com/zimfw/zimfw/issues/542))
|
||||||
|
- module was installed with the defined tool,
|
||||||
|
- module URL matches the defined one.
|
||||||
|
- `--if-ostype` option to `zmodule`. This option is equivalent to
|
||||||
|
`--if "[[ \${OSTYPE} == ${1} ]]"`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Ask before uninstalling each unused module, instead of asking just once for
|
||||||
|
all.
|
||||||
|
- Add disclaimer comment at beginning of .zimrc file.
|
||||||
|
|
||||||
|
## [1.14.0] - 2024-06-25
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Don't expand `${HOME}` in the init.zsh script. (See
|
||||||
|
[#509](https://github.com/zimfw/zimfw/issues/509))
|
||||||
|
- Don't allow calling `zmodule` from the command line. Let it fail with "command
|
||||||
|
not found" instead, as it's intended to be used only in the .zimrc script.
|
||||||
|
- `ZIM_HOME` must be defined before sourcing zimfw.zsh. All documentation was
|
||||||
|
already doing so, hence not considering this as a breaking change.
|
||||||
|
- Allow zimfw.zsh to exist anywhere else, not only inside `ZIM_HOME`. This
|
||||||
|
enables installing the zimfw.zsh script independently with a package manager.
|
||||||
|
- Don't try to upgrade if sourced zimfw.zsh is not in a writable path.
|
||||||
|
- Don't try actions that write to `ZIM_HOME` if user has no write permissions
|
||||||
|
there.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Update error messages to hopefully make it clearer when either the git or the
|
||||||
|
degit tool is being used.
|
||||||
|
- Set read permissions to generated init.zsh script, so it can be read from
|
||||||
|
other users.
|
||||||
|
|
||||||
## [1.13.1] - 2024-04-28
|
## [1.13.1] - 2024-04-28
|
||||||
|
|
||||||
|
@ -19,7 +70,7 @@ _No unreleased changes._
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- `--if-command` option to zmodule. This option is equivalent to
|
- `--if-command` option to `zmodule`. This option is equivalent to
|
||||||
`--if "(( \${+commands[${1}]} ))"`.
|
`--if "(( \${+commands[${1}]} ))"`.
|
||||||
- `mkdir` tool option in `zmodule` that creates an empty directory. This allows
|
- `mkdir` tool option in `zmodule` that creates an empty directory. This allows
|
||||||
creating modules that contain only externally generated files.
|
creating modules that contain only externally generated files.
|
||||||
|
@ -136,7 +187,7 @@ _No unreleased changes._
|
||||||
[here](https://github.com/zimfw/completion/blob/9386a76eac3f55b1c04d57d26238f725b4b3ba25/init.zsh#L10-L11).
|
[here](https://github.com/zimfw/completion/blob/9386a76eac3f55b1c04d57d26238f725b4b3ba25/init.zsh#L10-L11).
|
||||||
- Don't compile user Zsh startup scripts anymore
|
- Don't compile user Zsh startup scripts anymore
|
||||||
(See [#450](https://github.com/zimfw/zimfw/pull/450)). This means you can:
|
(See [#450](https://github.com/zimfw/zimfw/pull/450)). This means you can:
|
||||||
- either manually delete the compiled files, as they won't be updated by Zim
|
- either manually delete the compiled files, as they won't be updated by zimfw
|
||||||
anymore (recommended):
|
anymore (recommended):
|
||||||
```
|
```
|
||||||
for zfile in ${ZDOTDIR:-${HOME}}/.z(shenv|profile|shrc|login|logout); do
|
for zfile in ${ZDOTDIR:-${HOME}}/.z(shenv|profile|shrc|login|logout); do
|
||||||
|
@ -337,7 +388,7 @@ Take your time to review the updated [README.md] and the changes listed below.
|
||||||
- The Zim "core" is reduced to a single file, namely zimfw.zsh, that is
|
- The Zim "core" is reduced to a single file, namely zimfw.zsh, that is
|
||||||
self-updated without requiring git. With this, `ZIM_HOME` is not (the root of)
|
self-updated without requiring git. With this, `ZIM_HOME` is not (the root of)
|
||||||
a git repo anymore.
|
a git repo anymore.
|
||||||
- Zsh and modules are configured in .zshrc instead of .zimrc.
|
- Zsh and modules are initialized in .zshrc instead of .zimrc.
|
||||||
- .zimrc is not sourced during Zsh startup anymore, and only contains the module
|
- .zimrc is not sourced during Zsh startup anymore, and only contains the module
|
||||||
definitions.
|
definitions.
|
||||||
- Zim's init.zsh and login_init.zsh scripts are generated by the `zimfw` CLI
|
- Zim's init.zsh and login_init.zsh scripts are generated by the `zimfw` CLI
|
||||||
|
@ -376,7 +427,11 @@ Take your time to review the updated [README.md] and the changes listed below.
|
||||||
[termtitle]: https://github.com/zimfw/termtitle
|
[termtitle]: https://github.com/zimfw/termtitle
|
||||||
[s1ck94]: https://github.com/zimfw/s1ck94
|
[s1ck94]: https://github.com/zimfw/s1ck94
|
||||||
|
|
||||||
[Unreleased]: https://github.com/zimfw/zimfw/compare/v1.13.0...HEAD
|
[Unreleased]: https://github.com/zimfw/zimfw/compare/v1.15.1...HEAD
|
||||||
|
[1.15.1]: https://github.com/zimfw/zimfw/compare/v1.15.0...v1.15.1
|
||||||
|
[1.15.0]: https://github.com/zimfw/zimfw/compare/v1.14.0...v1.15.0
|
||||||
|
[1.14.0]: https://github.com/zimfw/zimfw/compare/v1.13.1...v1.14.0
|
||||||
|
[1.13.1]: https://github.com/zimfw/zimfw/compare/v1.13.0...v1.13.1
|
||||||
[1.13.0]: https://github.com/zimfw/zimfw/compare/v1.12.1...v1.13.0
|
[1.13.0]: https://github.com/zimfw/zimfw/compare/v1.12.1...v1.13.0
|
||||||
[1.12.1]: https://github.com/zimfw/zimfw/compare/v1.12.0...v1.12.1
|
[1.12.1]: https://github.com/zimfw/zimfw/compare/v1.12.0...v1.12.1
|
||||||
[1.12.0]: https://github.com/zimfw/zimfw/compare/v1.11.3...v1.12.0
|
[1.12.0]: https://github.com/zimfw/zimfw/compare/v1.11.3...v1.12.0
|
||||||
|
|
113
README.md
113
README.md
|
@ -17,7 +17,7 @@
|
||||||
What is Zim?
|
What is Zim?
|
||||||
------------
|
------------
|
||||||
Zim is a Zsh configuration framework that bundles a [plugin manager](#usage),
|
Zim is a Zsh configuration framework that bundles a [plugin manager](#usage),
|
||||||
useful [modules], and a wide variety of [themes], without compromising on [speed].
|
useful [modules] and a wide variety of [themes], without compromising on [speed].
|
||||||
|
|
||||||
Check how Zim compares to other frameworks and plugin managers:
|
Check how Zim compares to other frameworks and plugin managers:
|
||||||
|
|
||||||
|
@ -47,15 +47,17 @@ Installing Zim is easy. You can choose either the automatic or manual method bel
|
||||||
This will install a predefined set of modules and a theme for you.
|
This will install a predefined set of modules and a theme for you.
|
||||||
|
|
||||||
* With `curl`:
|
* With `curl`:
|
||||||
|
```zsh
|
||||||
curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
|
curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
|
||||||
|
```
|
||||||
|
|
||||||
* With `wget`:
|
* With `wget`:
|
||||||
|
```zsh
|
||||||
wget -nv -O - https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
|
wget -nv -O - https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
|
||||||
|
```
|
||||||
|
|
||||||
Restart your terminal and you're done. Enjoy your Zsh IMproved! Take some time
|
Restart your terminal and you're done. Enjoy your Zsh IMproved! Take some time
|
||||||
to tweak your [`~/.zshrc`](#set-up-zshrc) file, and to also check the available
|
to tweak your [`~/.zshrc`](#set-up-zshrc) file and to also check the available
|
||||||
[modules] and [themes] you can add to your [`~/.zimrc`](#create-zimrc).
|
[modules] and [themes] you can add to your [`~/.zimrc`](#create-zimrc).
|
||||||
|
|
||||||
### Manual installation
|
### Manual installation
|
||||||
|
@ -79,19 +81,27 @@ Add the lines below to your `~/.zshrc` file, in the following order:
|
||||||
```zsh
|
```zsh
|
||||||
zstyle ':zim:zmodule' use 'degit'
|
zstyle ':zim:zmodule' use 'degit'
|
||||||
````
|
````
|
||||||
This is optional, and only required if you don't have `git` installed (yes,
|
This is optional and only required if you don't have `git` installed (yes,
|
||||||
Zim works even without `git`!)
|
zimfw works even without `git`!)
|
||||||
|
|
||||||
2. To set where the directory used by Zim will be located:
|
2. To set where the zimfw plugin manager configuration file will be located:
|
||||||
|
```zsh
|
||||||
|
ZIM_CONFIG_FILE=~/.config/zsh/zimrc
|
||||||
|
```
|
||||||
|
This is optional. The value of `ZIM_CONFIG_FILE` can be any path your user
|
||||||
|
has at least read access to. By default, the file must be at `~/.zimrc`, if
|
||||||
|
the `ZDOTDIR` environment variable is not defined. Otherwise, it must be at
|
||||||
|
`${ZDOTDIR}/.zimrc`.
|
||||||
|
|
||||||
|
3. To set the directory where the zimfw plugin manager will keep necessary files:
|
||||||
```zsh
|
```zsh
|
||||||
ZIM_HOME=~/.zim
|
ZIM_HOME=~/.zim
|
||||||
```
|
```
|
||||||
The value of `ZIM_HOME` can be any directory your user has write access to.
|
The value of `ZIM_HOME` can be any directory your user has write access to.
|
||||||
You can even set it to a cache directory like `${XDG_CACHE_HOME}/zim` or
|
You can even set it to a cache directory like `${XDG_CACHE_HOME}/zim` or
|
||||||
`~/.cache/zim` if you also include the step below, that automatically
|
`~/.cache/zim`.
|
||||||
downloads the `zimfw` plugin manager.
|
|
||||||
|
|
||||||
3. To automatically download the `zimfw` plugin manager if missing:
|
4. To automatically download the zimfw plugin manager if missing:
|
||||||
```zsh
|
```zsh
|
||||||
# Download zimfw plugin manager if missing.
|
# Download zimfw plugin manager if missing.
|
||||||
if [[ ! -e ${ZIM_HOME}/zimfw.zsh ]]; then
|
if [[ ! -e ${ZIM_HOME}/zimfw.zsh ]]; then
|
||||||
|
@ -107,22 +117,27 @@ Add the lines below to your `~/.zshrc` file, in the following order:
|
||||||
https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
|
https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
This is optional. If you choose to not include this step, you should manually
|
This is optional. Alternatively, you can download the `zimfw.zsh` script
|
||||||
download the `zimfw.zsh` script once and keep it at `${ZIM_HOME}`.
|
anywhere your user has write access to: just replace the occurrences of
|
||||||
|
`${ZIM_HOME}/zimfw.zsh` by the preferred path, like `/usr/local/bin/zimfw.zsh`
|
||||||
|
for example. If you choose to not include this step, you should manually
|
||||||
|
download the `zimfw.zsh` script once and keep it at the preferred path.
|
||||||
|
|
||||||
4. To automatically install missing modules and update the static initialization
|
5. To automatically install missing modules and update the static initialization
|
||||||
script if missing or outdated:
|
script if missing or outdated:
|
||||||
```zsh
|
```zsh
|
||||||
# Install missing modules, and update ${ZIM_HOME}/init.zsh if missing or outdated.
|
# Install missing modules and update ${ZIM_HOME}/init.zsh if missing or outdated.
|
||||||
if [[ ! ${ZIM_HOME}/init.zsh -nt ${ZDOTDIR:-${HOME}}/.zimrc ]]; then
|
if [[ ! ${ZIM_HOME}/init.zsh -nt ${ZIM_CONFIG_FILE:-${ZDOTDIR:-${HOME}}/.zimrc} ]]; then
|
||||||
source ${ZIM_HOME}/zimfw.zsh init -q
|
source ${ZIM_HOME}/zimfw.zsh init -q
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
This step is optional, but highly recommended. If you choose to not include
|
This step is optional, but highly recommended. If you choose to not include
|
||||||
it, you must remember to manually run `zimfw install` every time after you
|
it, you must remember to manually run `zimfw install` every time you update
|
||||||
update your [`~/.zimrc`](#create-zimrc) file.
|
your [`~/.zimrc`](#create-zimrc) file. If you have chosen to keep the
|
||||||
|
`zimfw.zsh` in a different path as mentioned in the previous step, replace
|
||||||
|
`${ZIM_HOME}/zimfw.zsh` by the chosen path.
|
||||||
|
|
||||||
5. To source the static script, that will initialize your modules:
|
6. To source the static script, that will initialize your modules:
|
||||||
```zsh
|
```zsh
|
||||||
# Initialize modules.
|
# Initialize modules.
|
||||||
source ${ZIM_HOME}/init.zsh
|
source ${ZIM_HOME}/init.zsh
|
||||||
|
@ -130,18 +145,31 @@ Add the lines below to your `~/.zshrc` file, in the following order:
|
||||||
|
|
||||||
#### Create `~/.zimrc`
|
#### Create `~/.zimrc`
|
||||||
|
|
||||||
You must create your `.zimrc` file at `~/.zimrc`, if the `ZDOTDIR` environment
|
This file configures the zimfw plugin manager. It's referred to as `~/.zimrc`
|
||||||
variable is not defined. Otherwise, it must be at `${ZDOTDIR}/.zimrc`. It's
|
in the documentation for the sake of simplicity, but the actual location of the
|
||||||
referred to as `~/.zimrc` in the documentation for the sake of simplicity.
|
file is defined by the following rules:
|
||||||
|
|
||||||
You can start with just:
|
1. You can define the full path and name of the file with a `ZIM_CONFIG_FILE`
|
||||||
|
environment variable. For example:
|
||||||
|
```zsh
|
||||||
|
ZIM_CONFIG_FILE=~/.config/zsh/zimrc
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Or, if you defined a `ZDOTDIR` environment variable, then the file must be at
|
||||||
|
`${ZDOTDIR}/.zimrc`
|
||||||
|
|
||||||
|
3. Otherwise, it must be at at `~/.zimrc`, which is it's default location.
|
||||||
|
|
||||||
|
As for the contents of the file, you can start with just:
|
||||||
```zsh
|
```zsh
|
||||||
zmodule zsh-users/zsh-syntax-highlighting
|
zmodule zsh-users/zsh-syntax-highlighting
|
||||||
zmodule zsh-users/zsh-autosuggestions
|
zmodule zsh-users/zsh-autosuggestions
|
||||||
```
|
```
|
||||||
|
|
||||||
If you also want one of our prompt [themes]:
|
If you also want one of our prompt [themes]:
|
||||||
```
|
```zsh
|
||||||
|
zmodule git-info
|
||||||
|
zmodule duration-info
|
||||||
zmodule asciiship
|
zmodule asciiship
|
||||||
zmodule zsh-users/zsh-syntax-highlighting
|
zmodule zsh-users/zsh-syntax-highlighting
|
||||||
zmodule zsh-users/zsh-autosuggestions
|
zmodule zsh-users/zsh-autosuggestions
|
||||||
|
@ -149,6 +177,8 @@ zmodule zsh-users/zsh-autosuggestions
|
||||||
|
|
||||||
If you want to use our [completion] module too, instead of using `compinit` directly:
|
If you want to use our [completion] module too, instead of using `compinit` directly:
|
||||||
```zsh
|
```zsh
|
||||||
|
zmodule git-info
|
||||||
|
zmodule duration-info
|
||||||
zmodule asciiship
|
zmodule asciiship
|
||||||
zmodule zsh-users/zsh-completions --fpath src
|
zmodule zsh-users/zsh-completions --fpath src
|
||||||
zmodule completion
|
zmodule completion
|
||||||
|
@ -166,15 +196,15 @@ define the modules you want to use.
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
The `zimfw` plugin manager installs your modules at `${ZIM_HOME}/modules`, and
|
The zimfw plugin manager installs your modules at `${ZIM_HOME}/modules` and
|
||||||
builds a static script at `${ZIM_HOME}/init.zsh` that will initialize them. Your
|
builds a static script at `${ZIM_HOME}/init.zsh` that will initialize them. Your
|
||||||
modules are defined in your `~/.zimrc` file.
|
modules are defined in your `~/.zimrc` file.
|
||||||
|
|
||||||
The `~/.zimrc` file must contain `zmodule` calls to define the modules to be
|
The `~/.zimrc` file must contain `zmodule` calls to define the modules to be
|
||||||
initialized. The initialization will be done in the same order it's defined.
|
initialized. The modules will be initialized in the same order they're defined.
|
||||||
|
|
||||||
The `~/.zimrc` file is not sourced during Zsh startup, and it's only used to
|
The `~/.zimrc` file is not sourced during Zsh startup and it's only used to
|
||||||
configure the `zimfw` plugin manager.
|
configure the zimfw plugin manager.
|
||||||
|
|
||||||
Check [examples of `~/.zimrc` files](#create-zimrc) above.
|
Check [examples of `~/.zimrc` files](#create-zimrc) above.
|
||||||
|
|
||||||
|
@ -188,7 +218,7 @@ Below are some usage examples:
|
||||||
* A module at an absolute path, that is already installed:
|
* A module at an absolute path, that is already installed:
|
||||||
`zmodule /usr/local/share/zsh-autosuggestions`
|
`zmodule /usr/local/share/zsh-autosuggestions`
|
||||||
* A module with a custom fpath: `zmodule zsh-users/zsh-completions --fpath src`
|
* A module with a custom fpath: `zmodule zsh-users/zsh-completions --fpath src`
|
||||||
* A module with a custom initialization file, and with git submodules disabled:
|
* A module with a custom initialization file and with git submodules disabled:
|
||||||
`zmodule spaceship-prompt/spaceship-prompt --source spaceship.zsh --no-submodules` or
|
`zmodule spaceship-prompt/spaceship-prompt --source spaceship.zsh --no-submodules` or
|
||||||
`zmodule spaceship-prompt/spaceship-prompt --name spaceship --no-submodules`
|
`zmodule spaceship-prompt/spaceship-prompt --name spaceship --no-submodules`
|
||||||
* A module with two custom initialization files:
|
* A module with two custom initialization files:
|
||||||
|
@ -261,6 +291,9 @@ Per-module-root options:
|
||||||
<b>--if-command</b> <cmd_name> Will only initialize module root if specified external command is
|
<b>--if-command</b> <cmd_name> Will only initialize module root if specified external command is
|
||||||
available. This is evaluated at every new terminal startup.
|
available. This is evaluated at every new terminal startup.
|
||||||
Equivalent to <b>--if '(( ${+commands[</b><cmd_name><b>]} ))'</b>.
|
Equivalent to <b>--if '(( ${+commands[</b><cmd_name><b>]} ))'</b>.
|
||||||
|
<b>--if-ostype</b> <ostype> Will only initialize module root if <b>OSTYPE</b> is equal to the given
|
||||||
|
expression. This is evaluated at every new terminal startup.
|
||||||
|
Equivalent to <b>--if '[[ ${OSTYPE} == </b><ostype><b> ]]'</b>.
|
||||||
<b>--on-pull</b> <command> Execute command after installing or updating the module. The com-
|
<b>--on-pull</b> <command> Execute command after installing or updating the module. The com-
|
||||||
mand is executed in the module root directory.
|
mand is executed in the module root directory.
|
||||||
<b>-d</b>|<b>--disabled</b> Don't initialize the module root or uninstall the module.
|
<b>-d</b>|<b>--disabled</b> Don't initialize the module root or uninstall the module.
|
||||||
|
@ -299,17 +332,17 @@ The Zim plugin manager:
|
||||||
* Added new modules to `~/.zimrc`? Run `zimfw install`.
|
* Added new modules to `~/.zimrc`? Run `zimfw install`.
|
||||||
* Removed modules from `~/.zimrc`? Run `zimfw uninstall`.
|
* Removed modules from `~/.zimrc`? Run `zimfw uninstall`.
|
||||||
* Want to update your modules to their latest revisions? Run `zimfw update`.
|
* Want to update your modules to their latest revisions? Run `zimfw update`.
|
||||||
* Want to upgrade `zimfw` to its latest version? Run `zimfw upgrade`.
|
* Want to upgrade zimfw to its latest version? Run `zimfw upgrade`.
|
||||||
* For more information about the `zimfw` plugin manager, run `zimfw help`.
|
* For more information about the zimfw plugin manager, run `zimfw help`.
|
||||||
|
|
||||||
Settings
|
Settings
|
||||||
--------
|
--------
|
||||||
Customize path of the directory used by Zim with the `ZIM_HOME` environment
|
Set the path of the directory used by zimfw with the `ZIM_HOME` environment
|
||||||
variable:
|
variable:
|
||||||
|
|
||||||
ZIM_HOME=~/.zim
|
ZIM_HOME=~/.zim
|
||||||
|
|
||||||
By default, the `zimfw` plugin manager configuration file must be at `~/.zimrc`,
|
By default, the zimfw plugin manager configuration file must be at `~/.zimrc`,
|
||||||
if the `ZDOTDIR` environment variable is not defined. Otherwise, it must be at
|
if the `ZDOTDIR` environment variable is not defined. Otherwise, it must be at
|
||||||
`${ZDOTDIR}/.zimrc`. You can customize its full path and name with the
|
`${ZDOTDIR}/.zimrc`. You can customize its full path and name with the
|
||||||
`ZIM_CONFIG_FILE` environment variable:
|
`ZIM_CONFIG_FILE` environment variable:
|
||||||
|
@ -322,11 +355,23 @@ lighter module installations, you can set degit as the default tool with:
|
||||||
|
|
||||||
zstyle ':zim:zmodule' use 'degit'
|
zstyle ':zim:zmodule' use 'degit'
|
||||||
|
|
||||||
By default, `zimfw` will check if it has a new version available every 30 days.
|
By default, zimfw will check if it has a new version available every 30 days. If
|
||||||
This can be disabled with:
|
the `zimfw.zsh` file cannot be upgraded, either because your user does not have
|
||||||
|
write access to it, or because it was sourced from a symlink, then this will be
|
||||||
|
disabled. This can be manually disabled with:
|
||||||
|
|
||||||
zstyle ':zim' disable-version-check yes
|
zstyle ':zim' disable-version-check yes
|
||||||
|
|
||||||
|
To disable color output from zimfw, prefix the zimfw call with `NO_COLOR=1`,
|
||||||
|
like:
|
||||||
|
|
||||||
|
NO_COLOR=1 zimfw install
|
||||||
|
|
||||||
|
or add the following to your `.zshrc`, which should also disable color output
|
||||||
|
for other tools. See https://no-color.org/
|
||||||
|
|
||||||
|
export NO_COLOR=1
|
||||||
|
|
||||||
Uninstalling
|
Uninstalling
|
||||||
------------
|
------------
|
||||||
The best way to remove Zim is to manually delete `~/.zim`, `~/.zimrc`, and
|
The best way to remove Zim is to manually delete `~/.zim`, `~/.zimrc`, and
|
||||||
|
|
|
@ -1,80 +1,78 @@
|
||||||
zmodule() {
|
zmodule() {
|
||||||
local -r ztarget=${ZIM_CONFIG_FILE:-<%= home %>/.zimrc}
|
local -r zusage="Usage: ${_zbold}${0}${_znormal} <url> [${_zbold}-n${_znormal}|${_zbold}--name${_znormal} <module_name>] [${_zbold}-r${_znormal}|${_zbold}--root${_znormal} <path>] [options]
|
||||||
local -r zusage=$'Usage: <%= bold %>'${0}$'<%= normal %> <url> [<%= bold %>-n<%= normal %>|<%= bold %>--name<%= normal %> <module_name>] [<%= bold %>-r<%= normal %>|<%= bold %>--root<%= normal %> <path>] [options]
|
|
||||||
|
|
||||||
Add <%= bold %>zmodule<%= normal %> calls to your <%= bold %>'${ztarget}$'<%= normal %> file to define the modules to be initialized.
|
Add ${_zbold}zmodule${_znormal} calls to your ${_zbold}${_zconfig}${_znormal} file to define the modules to be initialized.
|
||||||
The initialization will be done in the same order it\'s defined.
|
The initialization will be done in the same order it's defined.
|
||||||
|
|
||||||
<url> Module absolute path or repository URL. The following URL formats
|
<url> Module absolute path or repository URL. The following URL formats
|
||||||
are equivalent: <%= bold %>foo<%= normal %>, <%= bold %>zimfw/foo<%= normal %>, <%= bold %>https://github.com/zimfw/foo.git<%= normal %>.
|
are equivalent: ${_zbold}foo${_znormal}, ${_zbold}zimfw/foo${_znormal}, ${_zbold}https://github.com/zimfw/foo.git${_znormal}.
|
||||||
If an absolute path is given, the module is considered externally
|
If an absolute path is given, the module is considered externally
|
||||||
installed and won\'t be installed or updated by zimfw.
|
installed and won't be installed or updated by zimfw.
|
||||||
<%= bold %>-n<%= normal %>|<%= bold %>--name<%= normal %> <module_name> Set a custom module name. Default: the last component in <url>.
|
${_zbold}-n${_znormal}|${_zbold}--name${_znormal} <module_name> Set a custom module name. Default: the last component in <url>.
|
||||||
Slashes can be used inside the name to organize the module into
|
Slashes can be used inside the name to organize the module into
|
||||||
subdirectories. The module will be installed at
|
subdirectories. The module will be installed at
|
||||||
<%= bold %>'${ZIM_HOME}$'/<%= normal %><module_name>.
|
${_zbold}${ZIM_HOME}/${_znormal}<module_name>.
|
||||||
<%= bold %>-r<%= normal %>|<%= bold %>--root<%= normal %> <path> Relative path to the module root.
|
${_zbold}-r${_znormal}|${_zbold}--root${_znormal} <path> Relative path to the module root.
|
||||||
|
|
||||||
Per-module options:
|
Per-module options:
|
||||||
<%= bold %>-b<%= normal %>|<%= bold %>--branch<%= normal %> <branch_name> Use specified branch when installing and updating the module.
|
${_zbold}-b${_znormal}|${_zbold}--branch${_znormal} <branch_name> Use specified branch when installing and updating the module.
|
||||||
Overrides the tag option. Default: the repository default branch.
|
Overrides the tag option. Default: the repository default branch.
|
||||||
<%= bold %>-t<%= normal %>|<%= bold %>--tag<%= normal %> <tag_name> Use specified tag when installing and updating the module. Over-
|
${_zbold}-t${_znormal}|${_zbold}--tag${_znormal} <tag_name> Use specified tag when installing and updating the module. Over-
|
||||||
rides the branch option.
|
rides the branch option.
|
||||||
<%= bold %>-u<%= normal %>|<%= bold %>--use<%= normal %> <tool_name> Install and update the module using the defined tool. Default is
|
${_zbold}-u${_znormal}|${_zbold}--use${_znormal} <tool_name> Install and update the module using the defined tool. Default is
|
||||||
either defined by <%= bold %>zstyle \':zim:zmodule\' use \'<%= normal %><tool_name><%= bold %>\'<%= normal %>, or <%= bold %>git<%= normal %>
|
either defined by ${_zbold}zstyle ':zim:zmodule' use '${_znormal}<tool_name>${_zbold}'${_znormal}, or ${_zbold}git${_znormal}
|
||||||
if none is provided. The tools available are:
|
if none is provided. The tools available are:
|
||||||
<%= bold %>git<%= normal %> uses the git command. Local changes are preserved on updates.
|
${_zbold}git${_znormal} uses the git command. Local changes are preserved on updates.
|
||||||
<%= bold %>degit<%= normal %> uses curl or wget, and currently only works with GitHub
|
${_zbold}degit${_znormal} uses curl or wget, and currently only works with GitHub
|
||||||
URLs. Modules install faster and take less disk space. Local
|
URLs. Modules install faster and take less disk space. Local
|
||||||
changes are lost on updates. Git submodules are not supported.
|
changes are lost on updates. Git submodules are not supported.
|
||||||
<%= bold %>mkdir<%= normal %> creates an empty directory. The <url> is only used to set
|
${_zbold}mkdir${_znormal} creates an empty directory. The <url> is only used to set
|
||||||
the module name. Use the <%= bold %>-c<%= normal %>|<%= bold %>--cmd<%= normal %> or <%= bold %>--on-pull<%= normal %> options to execute
|
the module name. Use the ${_zbold}-c${_znormal}|${_zbold}--cmd${_znormal} or ${_zbold}--on-pull${_znormal} options to execute
|
||||||
the desired command to generate the module files.
|
the desired command to generate the module files.
|
||||||
<%= bold %>--no-submodules<%= normal %> Don\'t install or update git submodules.
|
${_zbold}--no-submodules${_znormal} Don't install or update git submodules.
|
||||||
<%= bold %>-z<%= normal %>|<%= bold %>--frozen<%= normal %> Don\'t install or update the module.
|
${_zbold}-z${_znormal}|${_zbold}--frozen${_znormal} Don't install or update the module.
|
||||||
|
|
||||||
The per-module options above are carried over multiple zmodule calls for the same module.
|
The per-module options above are carried over multiple zmodule calls for the same module.
|
||||||
Modules are uniquely identified by their name.
|
Modules are uniquely identified by their name.
|
||||||
|
|
||||||
Per-module-root options:
|
Per-module-root options:
|
||||||
<%= bold %>--if<%= normal %> <test> Will only initialize module root if specified test returns a zero
|
${_zbold}--if${_znormal} <test> Will only initialize module root if specified test returns a zero
|
||||||
exit status. The test is evaluated at every new terminal startup.
|
exit status. The test is evaluated at every new terminal startup.
|
||||||
<%= bold %>--if-command<%= normal %> <cmd_name> Will only initialize module root if specified external command is
|
${_zbold}--if-command${_znormal} <cmd_name> Will only initialize module root if specified external command is
|
||||||
available. This is evaluated at every new terminal startup.
|
available. This is evaluated at every new terminal startup.
|
||||||
Equivalent to <%= bold %>--if \'(( \${+commands[<%= normal %><cmd_name><%= bold %>]} ))\'<%= normal %>.
|
Equivalent to ${_zbold}--if '(( \${+commands[${_znormal}<cmd_name>${_zbold}]} ))'${_znormal}.
|
||||||
<%= bold %>--on-pull<%= normal %> <command> Execute command after installing or updating the module. The com-
|
${_zbold}--if-ostype${_znormal} <ostype> Will only initialize module root if ${_zbold}OSTYPE${_znormal} is equal to the given
|
||||||
|
expression. This is evaluated at every new terminal startup.
|
||||||
|
Equivalent to ${_zbold}--if '[[ \${OSTYPE} == ${_znormal}<ostype>${_zbold} ]]'${_znormal}.
|
||||||
|
${_zbold}--on-pull${_znormal} <command> Execute command after installing or updating the module. The com-
|
||||||
mand is executed in the module root directory.
|
mand is executed in the module root directory.
|
||||||
<%= bold %>-d<%= normal %>|<%= bold %>--disabled<%= normal %> Don\'t initialize the module root or uninstall the module.
|
${_zbold}-d${_znormal}|${_zbold}--disabled${_znormal} Don't initialize the module root or uninstall the module.
|
||||||
|
|
||||||
The per-module-root options above are carried over multiple zmodule calls for the same mod-
|
The per-module-root options above are carried over multiple zmodule calls for the same mod-
|
||||||
ule root.
|
ule root.
|
||||||
|
|
||||||
Per-call initialization options:
|
Per-call initialization options:
|
||||||
<%= bold %>-f<%= normal %>|<%= bold %>--fpath<%= normal %> <path> Will add specified path to fpath. The path is relative to the
|
${_zbold}-f${_znormal}|${_zbold}--fpath${_znormal} <path> Will add specified path to fpath. The path is relative to the
|
||||||
module root directory. Default: <%= bold %>functions<%= normal %>, if the subdirectory
|
module root directory. Default: ${_zbold}functions${_znormal}, if the subdirectory
|
||||||
exists and is non-empty.
|
exists and is non-empty.
|
||||||
<%= bold %>-a<%= normal %>|<%= bold %>--autoload<%= normal %> <func_name> Will autoload specified function. Default: all valid names inside
|
${_zbold}-a${_znormal}|${_zbold}--autoload${_znormal} <func_name> Will autoload specified function. Default: all valid names inside
|
||||||
the <%= bold %>functions<%= normal %> subdirectory, if any.
|
the ${_zbold}functions${_znormal} subdirectory, if any.
|
||||||
<%= bold %>-s<%= normal %>|<%= bold %>--source<%= normal %> <file_path> Will source specified file. The path is relative to the module
|
${_zbold}-s${_znormal}|${_zbold}--source${_znormal} <file_path> Will source specified file. The path is relative to the module
|
||||||
root directory. Default: <%= bold %>init.zsh<%= normal %>, if a non-empty <%= bold %>functions<%= normal %> sub-
|
root directory. Default: ${_zbold}init.zsh${_znormal}, if a non-empty ${_zbold}functions${_znormal} sub-
|
||||||
directory exists, else the largest of the files matching the glob
|
directory exists, else the largest of the files matching the glob
|
||||||
<%= bold %>(init.zsh|<%= normal %><name><%= bold %>.(zsh|plugin.zsh|zsh-theme|sh))<%= normal %>, if any.
|
${_zbold}(init.zsh|${_znormal}<name>${_zbold}.(zsh|plugin.zsh|zsh-theme|sh))${_znormal}, if any.
|
||||||
<name> in the glob is resolved to the last component of the mod-
|
<name> in the glob is resolved to the last component of the mod-
|
||||||
ule name, or the last component of the path to the module root.
|
ule name, or the last component of the path to the module root.
|
||||||
<%= bold %>-c<%= normal %>|<%= bold %>--cmd<%= normal %> <command> Will execute specified command. Occurrences of the <%= bold %>{}<%= normal %> placeholder
|
${_zbold}-c${_znormal}|${_zbold}--cmd${_znormal} <command> Will execute specified command. Occurrences of the ${_zbold}{}${_znormal} placeholder
|
||||||
in the command are substituted by the module root directory path.
|
in the command are substituted by the module root directory path.
|
||||||
I.e., <%= bold %>-s \'foo.zsh\'<%= normal %> and <%= bold %>-c \'source {}/foo.zsh\'<%= normal %> are equivalent.
|
I.e., ${_zbold}-s 'foo.zsh'${_znormal} and ${_zbold}-c 'source {}/foo.zsh'${_znormal} are equivalent.
|
||||||
|
|
||||||
Setting any per-call initialization option above will disable the default values from the
|
Setting any per-call initialization option above will disable the default values from the
|
||||||
other per-call initialization options, so only your provided values will be used. I.e. these
|
other per-call initialization options, so only your provided values will be used. I.e. these
|
||||||
values are either all automatic, or all manual in each zmodule call. To use default values
|
values are either all automatic, or all manual in each zmodule call. To use default values
|
||||||
and also provided values, use separate zmodule calls.'
|
and also provided values, use separate zmodule calls."
|
||||||
if [[ ${${funcfiletrace[1]%:*}:A} != ${ztarget:A} ]]; then
|
|
||||||
print -u2 -lR $'<%= red %>'${0}$': Must be called from <%= bold %>'${ztarget}$'<%= normal %>' '' ${zusage}
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
if (( ! # )); then
|
if (( ! # )); then
|
||||||
print -u2 -lR $'<%= red %><%= error %>'${funcfiletrace[1]}$': Missing zmodule url<%= normal %>' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}: Missing zmodule url${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
@ -92,7 +90,7 @@ Per-call initialization options:
|
||||||
shift
|
shift
|
||||||
while [[ ${1} == (-n|--name|-r|--root) ]]; do
|
while [[ ${1} == (-n|--name|-r|--root) ]]; do
|
||||||
if (( # < 2 )); then
|
if (( # < 2 )); then
|
||||||
print -u2 -lR $'<%= red %><%= error %>'${funcfiletrace[1]}$':<%= bold %>'${zname}$':<%= normalred %> Missing argument for zmodule option <%= bold %>'${1}$'<%= normal %>' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalred} Missing argument for zmodule option ${_zbold}${1}${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
@ -115,7 +113,7 @@ Per-call initialization options:
|
||||||
_zdirs[${zname}]=${ZIM_HOME}/modules/${zname}
|
_zdirs[${zname}]=${ZIM_HOME}/modules/${zname}
|
||||||
fi
|
fi
|
||||||
if [[ ${+_zurls[${zname}]} -ne 0 && ${_zurls[${zname}]} != ${zurl} ]]; then
|
if [[ ${+_zurls[${zname}]} -ne 0 && ${_zurls[${zname}]} != ${zurl} ]]; then
|
||||||
print -u2 -lR $'<%= red %><%= error %>'${funcfiletrace[1]}$':<%= bold %>'${zname}$':<%= normalred %> Module already defined with a different URL. Expected <%= bold %>'${_zurls[${zname}]}$'<%= normal %>' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalred} Module already defined with a different URL. Expected ${_zbold}${_zurls[${zname}]}${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
@ -131,9 +129,9 @@ Per-call initialization options:
|
||||||
# Set values from options
|
# Set values from options
|
||||||
while (( # > 0 )); do
|
while (( # > 0 )); do
|
||||||
case ${1} in
|
case ${1} in
|
||||||
-b|--branch|-t|--tag|-u|--use|--on-pull|--if|--if-command|-f|--fpath|-a|--autoload|-s|--source|-c|--cmd)
|
-b|--branch|-t|--tag|-u|--use|--on-pull|--if|--if-command|--if-ostype|-f|--fpath|-a|--autoload|-s|--source|-c|--cmd)
|
||||||
if (( # < 2 )); then
|
if (( # < 2 )); then
|
||||||
print -u2 -lR $'<%= red %><%= error %>'${funcfiletrace[1]}$':<%= bold %>'${zname}$':<%= normalred %> Missing argument for zmodule option <%= bold %>'${1}$'<%= normal %>' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalred} Missing argument for zmodule option ${_zbold}${1}${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
@ -141,7 +139,7 @@ Per-call initialization options:
|
||||||
esac
|
esac
|
||||||
case ${1} in
|
case ${1} in
|
||||||
-b|--branch|-t|--tag|-u|--use|--no-submodules)
|
-b|--branch|-t|--tag|-u|--use|--no-submodules)
|
||||||
if [[ -z ${zurl} ]] _zimfw_print -u2 -R $'<%= yellow %><%= warn %>'${funcfiletrace[1]}$':<%= bold %>'${zname}$':<%= normalyellow %> The zmodule option <%= bold %>'${1}$'<%= normalyellow %> has no effect for external modules<%= normal %>'
|
if [[ -z ${zurl} ]] _zimfw_print -u2 -R "${_zwarn}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalyellow} The zmodule option ${_zbold}${1}${_znormalyellow} has no effect for external modules${_znormal}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
case ${1} in
|
case ${1} in
|
||||||
|
@ -175,6 +173,10 @@ Per-call initialization options:
|
||||||
shift
|
shift
|
||||||
_zifs[${zroot_dir}]="(( \${+commands[${1}]} ))"
|
_zifs[${zroot_dir}]="(( \${+commands[${1}]} ))"
|
||||||
;;
|
;;
|
||||||
|
--if-ostype)
|
||||||
|
shift
|
||||||
|
_zifs[${zroot_dir}]="[[ \${OSTYPE} == ${1} ]]"
|
||||||
|
;;
|
||||||
-f|--fpath)
|
-f|--fpath)
|
||||||
shift
|
shift
|
||||||
zarg=${1}
|
zarg=${1}
|
||||||
|
@ -189,15 +191,15 @@ Per-call initialization options:
|
||||||
shift
|
shift
|
||||||
zarg=${1}
|
zarg=${1}
|
||||||
if [[ ${zarg} != /* ]] zarg=${zroot_dir}/${zarg}
|
if [[ ${zarg} != /* ]] zarg=${zroot_dir}/${zarg}
|
||||||
zcmds+=("source ${(q-)zarg:a}")
|
zcmds+=('source '${(qqq)zarg:a})
|
||||||
;;
|
;;
|
||||||
-c|--cmd)
|
-c|--cmd)
|
||||||
shift
|
shift
|
||||||
zcmds+=(${1//{}/${(q-)zroot_dir:a}})
|
zcmds+=(${1//{}/${(qqq)zroot_dir:a}})
|
||||||
;;
|
;;
|
||||||
-d|--disabled) _zdisabled_root_dirs+=(${zroot_dir}) ;;
|
-d|--disabled) _zdisabled_root_dirs+=(${zroot_dir}) ;;
|
||||||
*)
|
*)
|
||||||
print -u2 -lR $'<%= red %><%= error %>'${funcfiletrace[1]}$':<%= bold %>'${zname}$':<%= normalred %> Unknown zmodule option <%= bold %>'${1}$'<%= normal %>' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalred} Unknown zmodule option ${_zbold}${1}${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
;;
|
;;
|
||||||
|
@ -209,7 +211,7 @@ Per-call initialization options:
|
||||||
fi
|
fi
|
||||||
if (( _zflags & 2 )); then
|
if (( _zflags & 2 )); then
|
||||||
if [[ ! -e ${zroot_dir} ]]; then
|
if [[ ! -e ${zroot_dir} ]]; then
|
||||||
print -u2 -R $'<%= red %><%= error %>'${funcfiletrace[1]}$':<%= bold %>'${zname}': '${zroot_dir}$'<%= normalred %> not found<%= normal %>'
|
print -u2 -R "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}: ${zroot_dir}${_znormalred} not found${_znormal}"
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -221,20 +223,21 @@ Per-call initialization options:
|
||||||
local -ra prezto_scripts=(${zroot_dir}/init.zsh(N))
|
local -ra prezto_scripts=(${zroot_dir}/init.zsh(N))
|
||||||
if (( ${#zfpaths} && ${#prezto_scripts} )); then
|
if (( ${#zfpaths} && ${#prezto_scripts} )); then
|
||||||
# this follows the prezto module format, no need to check for other scripts
|
# this follows the prezto module format, no need to check for other scripts
|
||||||
zcmds=('source '${(q-)^prezto_scripts:a})
|
zcmds=('source '${(qqq)^prezto_scripts:a})
|
||||||
else
|
else
|
||||||
# get script with largest size (descending `O`rder by `L`ength, and return only `[1]` first)
|
# get script with largest size (descending `O`rder by `L`ength, and return only `[1]` first)
|
||||||
local -ra zscripts=(${zroot_dir}/(init.zsh|(${zname:t}|${zroot_dir:t}).(zsh|plugin.zsh|zsh-theme|sh))(NOL[1]))
|
local -ra zscripts=(${zroot_dir}/(init.zsh|(${zname:t}|${zroot_dir:t}).(zsh|plugin.zsh|zsh-theme|sh))(NOL[1]))
|
||||||
zcmds=('source '${(q-)^zscripts:a})
|
zcmds=('source '${(qqq)^zscripts:a})
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if (( ! ${#zfpaths} && ! ${#zfunctions} && ! ${#zcmds} )); then
|
if (( ! ${#zfpaths} && ! ${#zfunctions} && ! ${#zcmds} )); then
|
||||||
_zimfw_print -u2 -lR $'<%= yellow %><%= warn %>'${funcfiletrace[1]}$':<%= bold %>'${zname}$':<%= normalyellow %> Nothing found to be initialized. Customize the module name, root or initialization with <%= bold %>zmodule<%= normalyellow %> options.<%= normal %>' '' ${zusage}
|
_zimfw_print -u2 -lR "${_zwarn}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalyellow} Nothing found to be initialized. Customize the module name, root or initialization with ${_zbold}zmodule${_znormalyellow} options.${_znormal}" '' ${zusage}
|
||||||
fi
|
fi
|
||||||
# Prefix is added to all _zfpaths, _zfunctions and _zcmds to distinguish the originating root dir
|
# Prefix is added to all _zfpaths, _zfunctions and _zcmds to distinguish the originating root dir
|
||||||
local -r zpre=${zroot_dir}$'\0'
|
local -r zpre=${zroot_dir}$'\0'
|
||||||
_zfpaths+=(${zpre}${^zfpaths})
|
_zfpaths+=(${zpre}${^zfpaths})
|
||||||
_zfunctions+=(${zpre}${^zfunctions})
|
_zfunctions+=(${zpre}${^zfunctions})
|
||||||
|
zcmds=(${zcmds//${HOME}/\${HOME}})
|
||||||
_zcmds+=(${zpre}${^zcmds})
|
_zcmds+=(${zpre}${^zcmds})
|
||||||
fi
|
fi
|
||||||
}
|
}
|
|
@ -1,8 +1,12 @@
|
||||||
autoload -Uz is-at-least && if ! is-at-least <%= min_zsh_version %>; then
|
autoload -Uz is-at-least && if ! is-at-least <%= min_zsh_version %>; then
|
||||||
print -u2 -R $'<%= red %>'${0}$': Error starting zimfw. You\'re using Zsh version <%= bold %>'${ZSH_VERSION}$'<%= normalred %> and versions < <%= bold %><%= min_zsh_version %><%= normalred %> are not supported. Upgrade your Zsh.<%= normal %>'
|
print -u2 -R "${_zred}${0}: Error starting zimfw. You're using Zsh version ${_zbold}${ZSH_VERSION}${_znormalred} and versions < ${_zbold}<%= min_zsh_version %>${_znormalred} are not supported. Update your Zsh.${_znormal}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
autoload -Uz zargs
|
autoload -Uz zargs
|
||||||
|
|
||||||
|
if (( ! ${+ZIM_HOME} )); then
|
||||||
|
print -u2 -R "${_zred}${0}: ${_zbold}ZIM_HOME${_znormalred} not defined${_znormal}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
# Define zimfw location
|
# Define zimfw location
|
||||||
if (( ! ${+ZIM_HOME} )) typeset -g ZIM_HOME=${0:h}
|
typeset -g __ZIMFW_FILE=${0}
|
||||||
|
|
|
@ -2,11 +2,11 @@ _zimfw_mv() {
|
||||||
local -a cklines
|
local -a cklines
|
||||||
if cklines=(${(f)"$(command cksum ${1} ${2} 2>/dev/null)"}) && \
|
if cklines=(${(f)"$(command cksum ${1} ${2} 2>/dev/null)"}) && \
|
||||||
[[ ${${(z)cklines[1]}[1,2]} == ${${(z)cklines[2]}[1,2]} ]]; then
|
[[ ${${(z)cklines[1]}[1,2]} == ${${(z)cklines[2]}[1,2]} ]]; then
|
||||||
_zimfw_print -R $'<%= okay %><%= bold %>'${2}$':<%= normal %> Already up to date'
|
_zimfw_print -R "${_zokay}${_zbold}${2}:${_znormal} Already up to date"
|
||||||
else
|
else
|
||||||
if [[ -e ${2} ]]; then
|
if [[ -e ${2} ]]; then
|
||||||
command mv -f ${2}{,.old} || return 1
|
command mv -f ${2}{,.old} || return 1
|
||||||
fi
|
fi
|
||||||
command mv -f ${1} ${2} && _zimfw_print -R $'<%= okay %><%= bold %>'${2}$':<%= normal %> Updated.'${_zrestartmsg}
|
command mv -f ${1} ${2} && command chmod a+r ${2} && _zimfw_print -R "${_zokay}${_zbold}${2}:${_znormal} Updated.${_zrestartmsg}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
_zimfw_build_init() {
|
_zimfw_build_init() {
|
||||||
local -r ztarget=${ZIM_HOME}/init.zsh
|
local -r ztarget=${ZIM_HOME}/init.zsh
|
||||||
# Force update of init.zsh if it's older than .zimrc
|
# Force update of init.zsh if it's older than .zimrc
|
||||||
if [[ ${ztarget} -ot ${ZIM_CONFIG_FILE:-<%= home %>/.zimrc} ]]; then
|
if [[ ${ztarget} -ot ${_zconfig} ]]; then
|
||||||
command mv -f ${ztarget}{,.old} || return 1
|
command mv -f ${ztarget}{,.old} || return 1
|
||||||
fi
|
fi
|
||||||
_zimfw_mv =(
|
_zimfw_mv =(
|
||||||
print -R "zimfw() { source ${(q-)ZIM_HOME}/zimfw.zsh \"\${@}\" }"
|
print -R '# FILE AUTOMATICALLY GENERATED FROM '${_zconfig}
|
||||||
print -R "zmodule() { source ${(q-)ZIM_HOME}/zimfw.zsh \"\${@}\" }"
|
print '# EDIT THE SOURCE FILE AND THEN RUN zimfw build. DO NOT DIRECTLY EDIT THIS FILE!'
|
||||||
|
print
|
||||||
|
print -R 'if [[ -e ${ZIM_CONFIG_FILE:-<%= home %>/.zimrc} ]] zimfw() { source '${${(qqq)__ZIMFW_FILE}/${HOME}/\${HOME}}' "${@}" }'
|
||||||
local zroot_dir zpre
|
local zroot_dir zpre
|
||||||
local -a zif_functions zif_cmds zroot_functions zroot_cmds
|
local -a zif_functions zif_cmds zroot_functions zroot_cmds
|
||||||
local -a zfunctions=(${_zfunctions}) zcmds=(${_zcmds})
|
local -a zfunctions=(${_zfunctions}) zcmds=(${_zcmds})
|
||||||
|
@ -22,7 +24,7 @@ _zimfw_build_init() {
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
zpre=$'*\0'
|
zpre=$'*\0'
|
||||||
if (( ${#_zfpaths} )) print -R 'fpath=('${(q-)${_zfpaths#${~zpre}}:a}' ${fpath})'
|
if (( ${#_zfpaths} )) print -R 'fpath=('${${(qqq)${_zfpaths#${~zpre}}:a}/${HOME}/\${HOME}}' ${fpath})'
|
||||||
if (( ${#zfunctions} )) print -R 'autoload -Uz -- '${zfunctions#${~zpre}}
|
if (( ${#zfunctions} )) print -R 'autoload -Uz -- '${zfunctions#${~zpre}}
|
||||||
for zroot_dir in ${_zroot_dirs}; do
|
for zroot_dir in ${_zroot_dirs}; do
|
||||||
zpre=${zroot_dir}$'\0'
|
zpre=${zroot_dir}$'\0'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
_zimfw_build_login_init() {
|
_zimfw_build_login_init() {
|
||||||
local -r ztarget=${ZIM_HOME}/login_init.zsh
|
local -r ztarget=${ZIM_HOME}/login_init.zsh
|
||||||
# Force update of login_init.zsh if it's older than .zimrc
|
# Force update of login_init.zsh if it's older than .zimrc
|
||||||
if [[ ${ztarget} -ot ${ZIM_CONFIG_FILE:-<%= home %>/.zimrc} ]]; then
|
if [[ ${ztarget} -ot ${_zconfig} ]]; then
|
||||||
command mv -f ${ztarget}{,.old} || return 1
|
command mv -f ${ztarget}{,.old} || return 1
|
||||||
fi
|
fi
|
||||||
_zimfw_mv =(
|
_zimfw_mv =(
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
_zimfw_source_zimrc() {
|
_zimfw_source_zimrc() {
|
||||||
local -r ztarget=${ZIM_CONFIG_FILE:-<%= home %>/.zimrc} _zflags=${1}
|
<%= render_all("src/functions/*.erb") %>
|
||||||
|
{
|
||||||
|
local -r _zflags=${1}
|
||||||
local -i _zfailed=0
|
local -i _zfailed=0
|
||||||
if ! source ${ztarget} || (( _zfailed )); then
|
if ! source ${_zconfig} || (( _zfailed )); then
|
||||||
print -u2 -R $'<%= red %>Failed to source <%= bold %>'${ztarget}$'<%= normal %>'
|
print -u2 -R "${_zred}Failed to source ${_zbold}${_zconfig}${_znormal}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if (( _zflags & 1 && ${#_znames} == 0 )); then
|
if (( _zflags & 1 && ${#_znames} == 0 )); then
|
||||||
print -u2 -R $'<%= red %>No modules defined in <%= bold %>'${ztarget}$'<%= normal %>'
|
print -u2 -R "${_zred}No modules defined in ${_zbold}${_zconfig}${_znormal}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
# Remove all from _zfpaths, _zfunctions and _zcmds with disabled root dirs prefixes
|
# Remove all from _zfpaths, _zfunctions and _zcmds with disabled root dirs prefixes
|
||||||
|
@ -17,4 +19,7 @@ _zimfw_source_zimrc() {
|
||||||
_zfunctions=(${_zfunctions:#${zpre}*})
|
_zfunctions=(${_zfunctions:#${zpre}*})
|
||||||
_zcmds=(${_zcmds:#${zpre}*})
|
_zcmds=(${_zcmds:#${zpre}*})
|
||||||
done
|
done
|
||||||
|
} always {
|
||||||
|
unfunction zmodule
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,5 +14,5 @@ _zimfw_list_unuseds() {
|
||||||
# Unused = all installed dirs not in zdirs
|
# Unused = all installed dirs not in zdirs
|
||||||
_zunused_dirs=(${zinstalled:|zdirs})
|
_zunused_dirs=(${zinstalled:|zdirs})
|
||||||
local zunused
|
local zunused
|
||||||
for zunused (${_zunused_dirs}) _zimfw_print -R $'<%= bold %>'${zunused:t}$':<%= normal %> '${zunused}${1}
|
for zunused (${_zunused_dirs}) _zimfw_print -R "${_zbold}${zunused:t}:${_znormal} ${zunused}${1}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
_zimfw_check_dumpfile() {
|
_zimfw_check_dumpfile() {
|
||||||
_zimfw_print -u2 $'<%= yellow %><%= warn %>Deprecated action. This is now handled by the completion module alone.<%= normal %>'
|
_zimfw_print -u2 "${_zwarn}Deprecated action. This is now handled by the completion module alone.${_znormal}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ _zimfw_check_version() {
|
||||||
if [[ -f ${_zversion_target} ]]; then
|
if [[ -f ${_zversion_target} ]]; then
|
||||||
local -r zlatest_version=$(<${_zversion_target})
|
local -r zlatest_version=$(<${_zversion_target})
|
||||||
if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then
|
if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then
|
||||||
_zimfw_print -u2 -R $'<%= yellow %>Latest zimfw version is <%= bold %>'${zlatest_version}$'<%= normalyellow %>. You\'re using version <%= bold %>'${_zversion}$'<%= normalyellow %>. Run <%= bold %>zimfw upgrade<%= normalyellow %> to upgrade.<%= normal %>'
|
_zimfw_print -u2 -R "${_zyellow}Latest zimfw version is ${_zbold}${zlatest_version}${_znormalyellow}. You're using version ${_zbold}${_zversion}${_znormalyellow}. Run ${_zbold}zimfw upgrade${_znormalyellow} to upgrade.${_znormal}"
|
||||||
return 4
|
return 4
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -4,5 +4,5 @@ _zimfw_clean_compiled() {
|
||||||
local zopt
|
local zopt
|
||||||
if (( _zprintlevel > 0 )) zopt=-v
|
if (( _zprintlevel > 0 )) zopt=-v
|
||||||
command rm -f ${zopt} ${^zscriptdirs}/**/*.zwc(|.old)(N) && \
|
command rm -f ${zopt} ${^zscriptdirs}/**/*.zwc(|.old)(N) && \
|
||||||
_zimfw_print $'Done with clean-compiled. Restart your terminal or run <%= bold %>zimfw compile<%= normal %> to re-compile.'
|
_zimfw_print "Done with clean-compiled. Restart your terminal or run ${_zbold}zimfw compile${_znormal} to re-compile."
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,12 @@ _zimfw_compile() {
|
||||||
local zroot_dir zfile
|
local zroot_dir zfile
|
||||||
for zroot_dir in ${_zroot_dirs:|_zdisabled_root_dirs}; do
|
for zroot_dir in ${_zroot_dirs:|_zdisabled_root_dirs}; do
|
||||||
if [[ ! -w ${zroot_dir} ]]; then
|
if [[ ! -w ${zroot_dir} ]]; then
|
||||||
_zimfw_print -R $'<%= yellow %><%= warn %><%= bold %>'${zroot_dir}$':<%= normalyellow %> No write permission, unable to compile.<%= normal %>'
|
_zimfw_print -R "${_zwarn}${_zbold}${zroot_dir}:${_znormalyellow} No write permission, unable to compile.${_znormal}"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
for zfile in ${zroot_dir}/(^*test*/)#*.zsh(|-theme)(N-.); do
|
for zfile in ${zroot_dir}/(^*test*/)#*.zsh(|-theme)(N-.); do
|
||||||
if [[ ! ${zfile}.zwc -nt ${zfile} ]]; then
|
if [[ ! ${zfile}.zwc -nt ${zfile} ]]; then
|
||||||
zcompile -UR ${zfile} && _zimfw_print -R $'<%= okay %><%= bold %>'${zfile}$'.zwc:<%= normal %> Compiled'
|
zcompile -UR ${zfile} && _zimfw_print -R "${_zokay}${_zbold}${zfile}.zwc:${_znormal} Compiled"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
_zimfw_info() {
|
_zimfw_info() {
|
||||||
|
_zimfw_info_print_symlink 'zimfw config' ${_zconfig}
|
||||||
|
_zimfw_info_print_symlink ZIM_HOME ${ZIM_HOME}
|
||||||
|
_zimfw_info_print_symlink 'zimfw script' ${__ZIMFW_FILE}
|
||||||
print -R 'zimfw version: '${_zversion}' (built at <%= Time.now.utc %>, previous commit is <%= `git rev-parse --short HEAD | tr -d '\r\n'` %>)'
|
print -R 'zimfw version: '${_zversion}' (built at <%= Time.now.utc %>, previous commit is <%= `git rev-parse --short HEAD | tr -d '\r\n'` %>)'
|
||||||
local zparam
|
local zparam
|
||||||
for zparam in LANG ${(Mk)parameters:#LC_*} OSTYPE TERM TERM_PROGRAM TERM_PROGRAM_VERSION ZIM_HOME ZSH_VERSION; do
|
for zparam in LANG ${(Mk)parameters:#LC_*} OSTYPE TERM TERM_PROGRAM TERM_PROGRAM_VERSION ZSH_VERSION; do
|
||||||
print -R ${(r.22....:.)zparam}${(P)zparam}
|
print -R ${(r.22....:.)zparam}${(P)zparam}
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
5
src/stage2/50_zimfw_info_print_symlink.zsh.erb
Normal file
5
src/stage2/50_zimfw_info_print_symlink.zsh.erb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
_zimfw_info_print_symlink() {
|
||||||
|
print -Rn ${(r.22....:.)1}${2}
|
||||||
|
if [[ -L ${2} ]] print -Rn ' -> '${2:A}
|
||||||
|
print
|
||||||
|
}
|
|
@ -1,11 +1,17 @@
|
||||||
_zimfw_uninstall() {
|
_zimfw_uninstall() {
|
||||||
local zopt
|
if (( _zprintlevel <= 0 )); then
|
||||||
if (( _zprintlevel > 0 )) zopt=-v
|
command rm -rf ${_zunused_dirs} || return 1
|
||||||
if (( ${#_zunused_dirs} )); then
|
else
|
||||||
if (( _zprintlevel <= 0 )) || read -q "?Uninstall ${#_zunused_dirs} module(s) listed above [y/N]? "; then
|
local zunused_dir
|
||||||
_zimfw_print
|
print "Found ${_zbold}${#_zunused_dirs}${_znormal} unused module(s)."
|
||||||
command rm -rf ${zopt} ${_zunused_dirs} || return 1
|
for zunused_dir in ${_zunused_dirs}; do
|
||||||
|
if read -q "?Uninstall ${zunused_dir} [y/N]? "; then
|
||||||
|
print
|
||||||
|
command rm -rfv ${zunused_dir} || return 1
|
||||||
|
else
|
||||||
|
print
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
print 'Done with uninstall.'
|
||||||
fi
|
fi
|
||||||
_zimfw_print 'Done with uninstall.'
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
_zimfw_upgrade() {
|
_zimfw_upgrade() {
|
||||||
local -r ztarget=${ZIM_HOME}/zimfw.zsh zurl=https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh.gz
|
local -r ztarget=${__ZIMFW_FILE:A} zurl=https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh.gz
|
||||||
|
if [[ ! -w ${ztarget:h} ]]; then
|
||||||
|
print -u2 -R "${_zred}No write permission to ${_zbold}${ztarget:h}${_znormalred}. Will not try to upgrade.${_znormal}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
{
|
{
|
||||||
if (( ${+commands[curl]} )); then
|
if (( ${+commands[curl]} )); then
|
||||||
command curl -fsSL -o ${ztarget}.new.gz ${zurl} || return 1
|
command curl -fsSL -o ${ztarget}.new.gz ${zurl} || return 1
|
||||||
|
@ -8,7 +12,7 @@ _zimfw_upgrade() {
|
||||||
if (( _zprintlevel <= 1 )) zopt=-q
|
if (( _zprintlevel <= 1 )) zopt=-q
|
||||||
if ! command wget -nv ${zopt} -O ${ztarget}.new.gz ${zurl}; then
|
if ! command wget -nv ${zopt} -O ${ztarget}.new.gz ${zurl}; then
|
||||||
if (( _zprintlevel <= 1 )); then
|
if (( _zprintlevel <= 1 )); then
|
||||||
print -u2 -R $'<%= red %>Failed to download <%= bold %>'${zurl}$'<%= normalred %>. Use <%= bold %>-v<%= normalred %> option to see details.<%= normal %>'
|
print -u2 -R "${_zred}Failed to download ${_zbold}${zurl}${_znormalred}. Use ${_zbold}-v${_znormalred} option to see details.${_znormal}"
|
||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
_zimfw_run_list() {
|
_zimfw_run_list() {
|
||||||
local -r zname=${1}
|
local -r zname=${1}
|
||||||
local -r zdir=${_zdirs[${zname}]}
|
local -r zdir=${_zdirs[${zname}]}
|
||||||
print -nR $'<%= bold %>'${zname}$':<%= normal %> '${zdir}
|
print -nR "${_zbold}${zname}:${_znormal} ${zdir}"
|
||||||
if [[ -z ${_zurls[${zname}]} ]] print -n ' (external)'
|
if [[ -z ${_zurls[${zname}]} ]] print -n ' (external)'
|
||||||
if (( ${_zfrozens[${zname}]} )) print -n ' (frozen)'
|
if (( ${_zfrozens[${zname}]} )) print -n ' (frozen)'
|
||||||
if (( ${_zdisabled_root_dirs[(I)${zdir}]} )) print -n ' (disabled)'
|
if (( ${_zdisabled_root_dirs[(I)${zdir}]} )) print -n ' (disabled)'
|
||||||
print
|
print
|
||||||
if (( _zprintlevel > 1 )); then
|
if (( _zprintlevel > 1 )); then
|
||||||
if [[ ${_zfrozens[${zname}]} -eq 0 && -n ${_zurls[${zname}]} ]]; then
|
if [[ ${_zfrozens[${zname}]} -eq 0 && -n ${_zurls[${zname}]} ]]; then
|
||||||
|
if [[ ${_ztools[${zname}]} == mkdir ]]; then
|
||||||
|
print ' From: mkdir'
|
||||||
|
else
|
||||||
print -nR " From: ${_zurls[${zname}]}, "
|
print -nR " From: ${_zurls[${zname}]}, "
|
||||||
if [[ -z ${_zrevs[${zname}]} ]]; then
|
if [[ -z ${_zrevs[${zname}]} ]]; then
|
||||||
print -n 'default branch'
|
print -n 'default branch'
|
||||||
|
@ -17,6 +20,7 @@ _zimfw_run_list() {
|
||||||
print -nR ", using ${_ztools[${zname}]}"
|
print -nR ", using ${_ztools[${zname}]}"
|
||||||
if (( ! _zsubmodules[${zname}] )) print -n ', no git submodules'
|
if (( ! _zsubmodules[${zname}] )) print -n ', no git submodules'
|
||||||
print
|
print
|
||||||
|
fi
|
||||||
if [[ -n ${_zonpulls[${zname}]} ]] print -R " On-pull: ${_zonpulls[${zname}]}"
|
if [[ -n ${_zonpulls[${zname}]} ]] print -R " On-pull: ${_zonpulls[${zname}]}"
|
||||||
fi
|
fi
|
||||||
# Match the current module dir prefix from _zroot_dirs
|
# Match the current module dir prefix from _zroot_dirs
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
_zimfw_print_error() {
|
_zimfw_print_error() {
|
||||||
print -u2 -lR $'<%= clear_line %><%= red %><%= error %><%= bold %>'${_zname}$':<%= normalred %> '${1}$'<%= normal %>' ${2:+${(F):- ${(f)^2}}}
|
print -u2 -lR $'<%= clear_line %>'"${_zerror}${_zbold}${_zname}:${_znormalred} ${1}${_znormal}" ${2:+${(F):- ${(f)^2}}}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
_zimfw_print_okay() {
|
_zimfw_print_okay() {
|
||||||
if (( _zprintlevel > ${2:-0} )) print -lR $'<%= clear_line %><%= okay %><%= bold %>'${_zname}$':<%= normal %> '${1} ${3:+${(F):- ${(f)^3}}}
|
if (( _zprintlevel > ${2:-0} )) print -lR $'<%= clear_line %>'"${_zokay}${_zbold}${_zname}:${_znormal} ${1}" ${3:+${(F):- ${(f)^3}}}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
_zimfw_print_warn() {
|
_zimfw_print_warn() {
|
||||||
_zimfw_print -u2 -R $'<%= clear_line %><%= yellow %><%= warn %><%= bold %>'${_zname}$':<%= normalyellow %> '${1}$'<%= normal %>'
|
_zimfw_print -u2 -R $'<%= clear_line %>'"${_zwarn}${_zbold}${_zname}:${_znormalyellow} ${1}${_znormal}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,22 +4,16 @@ _zimfw_download_tarball() {
|
||||||
readonly REPO=${match[4]%.git}
|
readonly REPO=${match[4]%.git}
|
||||||
fi
|
fi
|
||||||
if [[ ${HOST} != github.com || -z ${REPO} ]]; then
|
if [[ ${HOST} != github.com || -z ${REPO} ]]; then
|
||||||
_zimfw_print_error "${URL} is not a valid GitHub URL. Will not try to ${_zaction}."
|
_zimfw_print_error "${URL} is not a valid URL. Will not try to ${ACTION}. The zimfw degit tool only supports GitHub URLs. Use zmodule option ${_zbold}--use git${_znormalred} to use git instead."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
readonly HEADERS_TARGET=${DIR}/${TEMP}_headers
|
readonly HEADERS_TARGET=${DIR}/${TEMP}_headers
|
||||||
{
|
{
|
||||||
if [[ -r ${INFO_TARGET} ]]; then
|
|
||||||
readonly INFO=("${(@f)"$(<${INFO_TARGET})"}")
|
readonly INFO=("${(@f)"$(<${INFO_TARGET})"}")
|
||||||
if [[ ${URL} != ${INFO[1]} ]]; then
|
|
||||||
_zimfw_print_error "URL does not match. Expected ${URL}. Will not try to ${_zaction}."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
# Previous REV is in line 2, reserved for future use.
|
# Previous REV is in line 2, reserved for future use.
|
||||||
readonly INFO_HEADER=${INFO[3]}
|
readonly INFO_HEADER=${INFO[3]}
|
||||||
fi
|
|
||||||
readonly TARBALL_URL=https://api.github.com/repos/${REPO}/tarball/${REV}
|
readonly TARBALL_URL=https://api.github.com/repos/${REPO}/tarball/${REV}
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
if [[ -z ${INFO_HEADER} ]] return 0
|
if [[ -z ${INFO_HEADER} ]] return 0
|
||||||
if (( ${+commands[curl]} )); then
|
if (( ${+commands[curl]} )); then
|
||||||
command curl -IfsL -H ${INFO_HEADER} ${TARBALL_URL} >${HEADERS_TARGET}
|
command curl -IfsL -H ${INFO_HEADER} ${TARBALL_URL} >${HEADERS_TARGET}
|
||||||
|
@ -57,7 +51,7 @@ _zimfw_download_tarball() {
|
||||||
_zimfw_print_error "Error downloading ${TARBALL_URL}, no ETag header found in response"
|
_zimfw_print_error "Error downloading ${TARBALL_URL}, no ETag header found in response"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
command touch ${TARBALL_TARGET} # Update available
|
command touch ${TARBALL_TARGET} # Update available
|
||||||
else
|
else
|
||||||
if ! print -lR "${URL}" "${REV}" "If-None-Match: ${ETAG}" >! ${INFO_TARGET} 2>/dev/null; then
|
if ! print -lR "${URL}" "${REV}" "If-None-Match: ${ETAG}" >! ${INFO_TARGET} 2>/dev/null; then
|
||||||
|
@ -86,10 +80,26 @@ _zimfw_untar_tarball() {
|
||||||
|
|
||||||
_zimfw_tool_degit() {
|
_zimfw_tool_degit() {
|
||||||
# This runs in a subshell
|
# This runs in a subshell
|
||||||
readonly -i SUBMODULES=${5}
|
readonly -i SUBMODULES=${6}
|
||||||
readonly DIR=${1} URL=${2} REV=${4} ONPULL=${6} TEMP=.zdegit_${sysparams[pid]}
|
readonly ACTION=${1} DIR=${2} URL=${3} REV=${5} ONPULL=${7} TEMP=.zdegit_${sysparams[pid]}_${RANDOM}
|
||||||
readonly TARBALL_TARGET=${DIR}/${TEMP}_tarball.tar.gz INFO_TARGET=${DIR}/.zdegit
|
readonly TARBALL_TARGET=${DIR}/${TEMP}_tarball.tar.gz INFO_TARGET=${DIR}/.zdegit
|
||||||
case ${_zaction} in
|
case ${ACTION} in
|
||||||
|
pre|prereinstall)
|
||||||
|
local premsg
|
||||||
|
if [[ ${ACTION} == pre ]] premsg=" Use zmodule option ${_zbold}-z${_znormalred}|${_zbold}--frozen${_znormalred} to disable this error or run ${_zbold}zimfw reinstall${_znormalred} to reinstall."
|
||||||
|
if [[ -e ${DIR} ]]; then
|
||||||
|
if [[ ! -r ${INFO_TARGET} ]]; then
|
||||||
|
_zimfw_print_error $'Module was not installed using zimfw\'s degit.'${premsg}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
readonly INFO=("${(@f)"$(<${INFO_TARGET})"}")
|
||||||
|
if [[ ${URL} != ${INFO[1]} ]]; then
|
||||||
|
_zimfw_print_error 'The zimfw degit URL does not match. Expected '${URL}.${premsg}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
install)
|
install)
|
||||||
{
|
{
|
||||||
_zimfw_create_dir ${DIR} && _zimfw_download_tarball && _zimfw_untar_tarball ${DIR} && _zimfw_pull_print_okay Installed || return 1
|
_zimfw_create_dir ${DIR} && _zimfw_download_tarball && _zimfw_untar_tarball ${DIR} && _zimfw_pull_print_okay Installed || return 1
|
||||||
|
@ -101,14 +111,10 @@ _zimfw_tool_degit() {
|
||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
check|update)
|
check|update)
|
||||||
if [[ ! -r ${INFO_TARGET} ]]; then
|
|
||||||
_zimfw_print_warn $'Module was not installed using zimfw\'s degit. Will not try to '${_zaction}$'. Use zmodule option <%= bold %>-z<%= normalyellow %>|<%= bold %>--frozen<%= normalyellow %> to disable this warning.'
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
readonly DIR_NEW=${DIR}${TEMP}
|
readonly DIR_NEW=${DIR}${TEMP}
|
||||||
{
|
{
|
||||||
_zimfw_download_tarball || return 1
|
_zimfw_download_tarball || return 1
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
if [[ -e ${TARBALL_TARGET} ]]; then
|
if [[ -e ${TARBALL_TARGET} ]]; then
|
||||||
_zimfw_print_okay 'Update available'
|
_zimfw_print_okay 'Update available'
|
||||||
return 4
|
return 4
|
||||||
|
@ -140,6 +146,6 @@ _zimfw_tool_degit() {
|
||||||
esac
|
esac
|
||||||
# Check after successful install or update
|
# Check after successful install or update
|
||||||
if [[ ${SUBMODULES} -ne 0 && -e ${DIR}/.gitmodules ]]; then
|
if [[ ${SUBMODULES} -ne 0 && -e ${DIR}/.gitmodules ]]; then
|
||||||
_zimfw_print_warn $'Module contains git submodules, which are not supported by zimfw\'s degit. Use zmodule option <%= bold %>--no-submodules<%= normalyellow %> to disable this warning.'
|
_zimfw_print_warn "Module contains git submodules, which are not supported by zimfw's degit. Use zmodule option ${_zbold}--no-submodules${_znormalyellow} to disable this warning."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,23 @@
|
||||||
_zimfw_tool_git() {
|
_zimfw_tool_git() {
|
||||||
# This runs in a subshell
|
# This runs in a subshell
|
||||||
readonly -i SUBMODULES=${5}
|
readonly -i SUBMODULES=${6}
|
||||||
readonly DIR=${1} URL=${2} TYPE=${3} ONPULL=${6}
|
readonly ACTION=${1} DIR=${2} URL=${3} TYPE=${4} ONPULL=${7}
|
||||||
REV=${4}
|
REV=${5}
|
||||||
case ${_zaction} in
|
case ${ACTION} in
|
||||||
|
pre|prereinstall)
|
||||||
|
local premsg
|
||||||
|
if [[ ${ACTION} == pre ]] premsg=" Use zmodule option ${_zbold}-z${_znormalred}|${_zbold}--frozen${_znormalred} to disable this error or run ${_zbold}zimfw reinstall${_znormalred} to reinstall."
|
||||||
|
if [[ -e ${DIR} ]]; then
|
||||||
|
if [[ ! -r ${DIR}/.git ]]; then
|
||||||
|
_zimfw_print_error 'Module was not installed using git.'${premsg}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [[ ${URL} != $(command git -C ${DIR} config --get remote.origin.url) ]]; then
|
||||||
|
_zimfw_print_error 'The git URL does not match. Expected '${URL}.${premsg}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
install)
|
install)
|
||||||
if ERR=$(command git clone ${REV:+-b} ${REV} -q --config core.autocrlf=false ${${SUBMODULES:#0}:+--recursive} -- ${URL} ${DIR} 2>&1); then
|
if ERR=$(command git clone ${REV:+-b} ${REV} -q --config core.autocrlf=false ${${SUBMODULES:#0}:+--recursive} -- ${URL} ${DIR} 2>&1); then
|
||||||
_zimfw_pull_print_okay Installed
|
_zimfw_pull_print_okay Installed
|
||||||
|
@ -13,14 +27,6 @@ _zimfw_tool_git() {
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
check|update)
|
check|update)
|
||||||
if [[ ! -r ${DIR}/.git ]]; then
|
|
||||||
_zimfw_print_warn 'Module was not installed using git. Will not try to '${_zaction}$'. Use zmodule option <%= bold %>-z<%= normalyellow %>|<%= bold %>--frozen<%= normalyellow %> to disable this warning.'
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [[ ${URL} != $(command git -C ${DIR} config --get remote.origin.url) ]]; then
|
|
||||||
_zimfw_print_error "URL does not match. Expected ${URL}. Will not try to ${_zaction}."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
if ! ERR=$(command git -C ${DIR} fetch -pqt origin 2>&1); then
|
if ! ERR=$(command git -C ${DIR} fetch -pqt origin 2>&1); then
|
||||||
_zimfw_print_error 'Error during git fetch' ${ERR}
|
_zimfw_print_error 'Error during git fetch' ${ERR}
|
||||||
return 1
|
return 1
|
||||||
|
@ -40,7 +46,7 @@ _zimfw_tool_git() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
TO_REV=${REV}@{u}
|
TO_REV=${REV}@{u}
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
readonly -i BEHIND=$(command git -C ${DIR} rev-list --count ${REV}..${TO_REV} -- 2>/dev/null)
|
readonly -i BEHIND=$(command git -C ${DIR} rev-list --count ${REV}..${TO_REV} -- 2>/dev/null)
|
||||||
if (( BEHIND )); then
|
if (( BEHIND )); then
|
||||||
_zimfw_print_okay "Update available [behind ${BEHIND}]"
|
_zimfw_print_okay "Update available [behind ${BEHIND}]"
|
||||||
|
@ -52,7 +58,7 @@ _zimfw_tool_git() {
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [[ ${REV} == $(command git -C ${DIR} describe --tags --exact-match 2>/dev/null) ]]; then
|
if [[ ${REV} == $(command git -C ${DIR} describe --tags --exact-match 2>/dev/null) ]]; then
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
_zimfw_print_okay 'Already up to date' 1
|
_zimfw_print_okay 'Already up to date' 1
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
|
@ -60,13 +66,17 @@ _zimfw_tool_git() {
|
||||||
return ${?}
|
return ${?}
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
_zimfw_print_okay 'Update available'
|
_zimfw_print_okay 'Update available'
|
||||||
return 4
|
return 4
|
||||||
fi
|
fi
|
||||||
TO_REV=${REV}
|
TO_REV=${REV}
|
||||||
fi
|
fi
|
||||||
|
if [[ -z ${NO_COLOR} ]]; then
|
||||||
LOG=$(command git -C ${DIR} log --graph --color --format='%C(yellow)%h%C(reset) %s %C(cyan)(%cr)%C(reset)' ..${TO_REV} -- 2>/dev/null)
|
LOG=$(command git -C ${DIR} log --graph --color --format='%C(yellow)%h%C(reset) %s %C(cyan)(%cr)%C(reset)' ..${TO_REV} -- 2>/dev/null)
|
||||||
|
else
|
||||||
|
LOG=$(command git -C ${DIR} log --graph --format='%h %s (%cr)' ..${TO_REV} -- 2>/dev/null)
|
||||||
|
fi
|
||||||
if ! ERR=$(command git -C ${DIR} checkout -q ${REV} -- 2>&1); then
|
if ! ERR=$(command git -C ${DIR} checkout -q ${REV} -- 2>&1); then
|
||||||
_zimfw_print_error 'Error during git checkout' ${ERR}
|
_zimfw_print_error 'Error during git checkout' ${ERR}
|
||||||
return 1
|
return 1
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
_zimfw_tool_mkdir() {
|
_zimfw_tool_mkdir() {
|
||||||
# This runs in a subshell
|
# This runs in a subshell
|
||||||
readonly -i SUBMODULES=${5}
|
readonly -i SUBMODULES=${6}
|
||||||
readonly DIR=${1} TYPE=${3} REV=${4} ONPULL=${6}
|
readonly ACTION=${1} DIR=${2} TYPE=${4} REV=${5} ONPULL=${7}
|
||||||
|
if [[ ${ACTION} == (pre|prereinstall|check) ]] return 0
|
||||||
if [[ -n ${REV} ]]; then
|
if [[ -n ${REV} ]]; then
|
||||||
_zimfw_print_warn $'The zmodule option <%= bold %>-'${TYPE[1]}$'<%= normalyellow %>|<%= bold %>--'${TYPE}$'<%= normalyellow %> has no effect when using the mkdir tool'
|
_zimfw_print_warn "The zmodule option ${_zbold}-${TYPE[1]}${_znormalyellow}|${_zbold}--${TYPE}${_znormalyellow} has no effect when using the mkdir tool"
|
||||||
fi
|
fi
|
||||||
if (( ! SUBMODULES )); then
|
if (( ! SUBMODULES )); then
|
||||||
_zimfw_print_warn $'The zmodule option <%= bold %>--no-submodules<%= normalyellow %> has no effect when using the mkdir tool'
|
_zimfw_print_warn "The zmodule option ${_zbold}--no-submodules${_znormalyellow} has no effect when using the mkdir tool"
|
||||||
fi
|
fi
|
||||||
if [[ ! -d ${DIR} || -n ${ONPULL} ]]; then
|
if [[ ! -d ${DIR} || -n ${ONPULL} ]]; then
|
||||||
_zimfw_create_dir ${DIR} && _zimfw_pull_print_okay Created || return 1
|
_zimfw_create_dir ${DIR} && _zimfw_pull_print_okay Created || return 1
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
_zimfw_run_tool() {
|
_zimfw_run_tool() {
|
||||||
local -r _zname=${1}
|
local zaction=${1}
|
||||||
|
local -r _zname=${2}
|
||||||
if [[ -z ${_zurls[${_zname}]} ]]; then
|
if [[ -z ${_zurls[${_zname}]} ]]; then
|
||||||
_zimfw_print_okay 'Skipping external module' 1
|
_zimfw_print_okay 'Skipping external module' 1
|
||||||
return 0
|
return 0
|
||||||
|
@ -8,7 +9,38 @@ _zimfw_run_tool() {
|
||||||
_zimfw_print_okay 'Skipping frozen module' 1
|
_zimfw_print_okay 'Skipping frozen module' 1
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
case ${_zaction} in
|
local -r ztool=${_ztools[${_zname}]}
|
||||||
|
if [[ ${ztool} != (degit|git|mkdir) ]]; then
|
||||||
|
_zimfw_print_error "Unknown tool ${ztool}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
set "${_zdirs[${_zname}]}" "${_zurls[${_zname}]}" "${_ztypes[${_zname}]}" "${_zrevs[${_zname}]}" "${_zsubmodules[${_zname}]}" "${_zonpulls[${_zname}]}"
|
||||||
|
if [[ ${zaction} == reinstall ]]; then
|
||||||
|
_zimfw_tool_${ztool} prereinstall "${@}" && return 0
|
||||||
|
if (( _zprintlevel > 0 )); then
|
||||||
|
if read -q "?Reinstall ${_zname} [y/N]? "; then
|
||||||
|
print
|
||||||
|
else
|
||||||
|
print
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
local -r zdir_new=.${_zdirs[${_zname}]}_${sysparams[pid]}_${RANDOM}
|
||||||
|
_zimfw_print -nR 'Reinstalling '${_zname}'<%= ellipsis %>'
|
||||||
|
{
|
||||||
|
_zimfw_tool_${ztool} install ${zdir_new} "${@:2}" || return 1
|
||||||
|
if ! ERR=$({ command rm -rf ${_zdirs[${_zname}]} && command mv -f ${zdir_new} ${_zdirs[${_zname}]} } 2>&1); then
|
||||||
|
_zimfw_print_error "Error updating ${_zdirs[${_zname}]}" ${ERR}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
} always {
|
||||||
|
command rm -rf ${zdir_new} 2>/dev/null
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
_zimfw_tool_${ztool} pre "${@}" || return 1
|
||||||
|
fi
|
||||||
|
case ${zaction} in
|
||||||
install)
|
install)
|
||||||
if [[ -e ${_zdirs[${_zname}]} ]]; then
|
if [[ -e ${_zdirs[${_zname}]} ]]; then
|
||||||
_zimfw_print_okay 'Skipping already installed module' 1
|
_zimfw_print_okay 'Skipping already installed module' 1
|
||||||
|
@ -18,28 +50,19 @@ _zimfw_run_tool() {
|
||||||
;;
|
;;
|
||||||
check|update)
|
check|update)
|
||||||
if [[ ! -d ${_zdirs[${_zname}]} ]]; then
|
if [[ ! -d ${_zdirs[${_zname}]} ]]; then
|
||||||
_zimfw_print_error $'Not installed. Run <%= bold %>zimfw install<%= normalred %> to install.'
|
_zimfw_print_error "Not installed. Run ${_zbold}zimfw install${_znormalred} to install."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${zaction} == check ]]; then
|
||||||
if (( _zprintlevel > 1 )) print -nR $'<%= clear_line %>Checking '${_zname}'<%= ellipsis %>'
|
if (( _zprintlevel > 1 )) print -nR $'<%= clear_line %>Checking '${_zname}'<%= ellipsis %>'
|
||||||
else
|
else
|
||||||
_zimfw_print -nR $'<%= clear_line %>Updating '${_zname}'<%= ellipsis %>'
|
_zimfw_print -nR $'<%= clear_line %>Updating '${_zname}'<%= ellipsis %>'
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
_zimfw_print_error "Unknown action ${_zaction}"
|
_zimfw_print_error "Unknown action ${zaction}"
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
local -r ztool=${_ztools[${_zname}]}
|
|
||||||
case ${ztool} in
|
|
||||||
degit|git|mkdir)
|
|
||||||
_zimfw_tool_${ztool} "${_zdirs[${_zname}]}" "${_zurls[${_zname}]}" "${_ztypes[${_zname}]}" "${_zrevs[${_zname}]}" "${_zsubmodules[${_zname}]}" "${_zonpulls[${_zname}]}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_zimfw_print_error "Unknown tool ${ztool}"
|
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
_zimfw_tool_${ztool} ${zaction} "${@}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
_zimfw_run_tool_action() {
|
_zimfw_run_tool_action() {
|
||||||
local -r _zaction=${1}
|
local -i zmaxprocs=0
|
||||||
_zimfw_source_zimrc 1 && zargs -n 1 -P 0 -- "${_znames[@]}" -- _zimfw_run_tool
|
if [[ ${1} == reinstall ]] zmaxprocs=1
|
||||||
|
_zimfw_source_zimrc 1 || return 1
|
||||||
|
zargs -n 2 -P ${zmaxprocs} -- "${_znames[@]}" -- _zimfw_run_tool ${1}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,57 +1,74 @@
|
||||||
zimfw() {
|
zimfw() {
|
||||||
builtin emulate -L zsh -o EXTENDED_GLOB
|
builtin emulate -L zsh -o EXTENDED_GLOB
|
||||||
local -r _zversion='<%= version %>' _zversion_target=${ZIM_HOME}/.latest_version zusage=$'Usage: <%= bold %>'${0}$'<%= normal %> <action> [<%= bold %>-q<%= normal %>|<%= bold %>-v<%= normal %>]
|
if [[ -z ${NO_COLOR} ]]; then
|
||||||
|
local -r _znormal=$'\E[0m' _zbold=$'\E[1m' _zred=$'\E[31m' _znormalred=$'\E[0;31m' _zgreen=$'\E[32m' _zyellow=$'\E[33m' _znormalyellow=$'\E[0;33m'
|
||||||
|
else
|
||||||
|
local -r _znormal= _zbold= _zred= _znormalred= _zgreen= _zyellow= _znormalyellow=
|
||||||
|
fi
|
||||||
|
local -r _zerror="${_zred}<%= error %>" _zokay="${_zgreen}<%= okay %>${_znormal}" _zwarn="${_zyellow}<%= warn %>"
|
||||||
|
local -r _zconfig=${ZIM_CONFIG_FILE:-<%= home %>/.zimrc} _zversion='<%= version %>'
|
||||||
|
local -r zusage="Usage: ${_zbold}${0}${_znormal} <action> [${_zbold}-q${_znormal}|${_zbold}-v${_znormal}]
|
||||||
|
|
||||||
Actions:
|
Actions:
|
||||||
<%= bold %>build<%= normal %> Build <%= bold %>'${ZIM_HOME}$'/init.zsh<%= normal %> and <%= bold %>'${ZIM_HOME}$'/login_init.zsh<%= normal %>.
|
${_zbold}build${_znormal} Build ${_zbold}${ZIM_HOME}/init.zsh${_znormal} and ${_zbold}${ZIM_HOME}/login_init.zsh${_znormal}.
|
||||||
Also does <%= bold %>compile<%= normal %>. Use <%= bold %>-v<%= normal %> to also see its output.
|
Also does ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see its output.
|
||||||
<%= bold %>clean<%= normal %> Clean all. Does both <%= bold %>clean-compiled<%= normal %> and <%= bold %>clean-dumpfile<%= normal %>.
|
${_zbold}clean${_znormal} Clean all. Does both ${_zbold}clean-compiled${_znormal} and ${_zbold}clean-dumpfile${_znormal}.
|
||||||
<%= bold %>clean-compiled<%= normal %> Clean Zsh compiled files.
|
${_zbold}clean-compiled${_znormal} Clean Zsh compiled files.
|
||||||
<%= bold %>clean-dumpfile<%= normal %> Clean completion dumpfile.
|
${_zbold}clean-dumpfile${_znormal} Clean completion dumpfile.
|
||||||
<%= bold %>compile<%= normal %> Compile Zsh files.
|
${_zbold}compile${_znormal} Compile Zsh files.
|
||||||
<%= bold %>help<%= normal %> Print this help.
|
${_zbold}help${_znormal} Print this help.
|
||||||
<%= bold %>info<%= normal %> Print zimfw and system info.
|
${_zbold}info${_znormal} Print zimfw and system info.
|
||||||
<%= bold %>list<%= normal %> List all modules currently defined in <%= bold %>'${ZIM_CONFIG_FILE:-<%= home %>/.zimrc}$'<%= normal %>.
|
${_zbold}list${_znormal} List all modules currently defined in ${_zbold}${_zconfig}${_znormal}.
|
||||||
Use <%= bold %>-v<%= normal %> to also see the modules details.
|
Use ${_zbold}-v${_znormal} to also see the modules details.
|
||||||
<%= bold %>init<%= normal %> Same as <%= bold %>install<%= normal %>, but with output tailored to be used at terminal startup.
|
${_zbold}init${_znormal} Same as ${_zbold}install${_znormal}, but with output tailored to be used at terminal startup.
|
||||||
<%= bold %>install<%= normal %> Install new modules. Also does <%= bold %>build<%= normal %>, <%= bold %>compile<%= normal %>. Use <%= bold %>-v<%= normal %> to also see their
|
${_zbold}install${_znormal} Install new modules. Also does ${_zbold}build${_znormal}, ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see their
|
||||||
output, any on-pull output and skipped modules.
|
output, any on-pull output and skipped modules.
|
||||||
<%= bold %>uninstall<%= normal %> Delete unused modules. Prompts for confirmation. Use <%= bold %>-q<%= normal %> for quiet uninstall.
|
${_zbold}reinstall${_znormal} Reinstall modules that failed check. Prompts for confirmation. Use ${_zbold}-q${_znormal} for
|
||||||
<%= bold %>check<%= normal %> Check if updates for current modules are available. Use <%= bold %>-v<%= normal %> to also see
|
quiet reinstall. Also does ${_zbold}build${_znormal}, ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see their output,
|
||||||
|
any on-pull output and skipped modules.
|
||||||
|
${_zbold}uninstall${_znormal} Delete unused modules. Prompts for confirmation. Use ${_zbold}-q${_znormal} for quiet uninstall.
|
||||||
|
${_zbold}check${_znormal} Check if updates for current modules are available. Use ${_zbold}-v${_znormal} to also see
|
||||||
skipped and up to date modules.
|
skipped and up to date modules.
|
||||||
<%= bold %>update<%= normal %> Update current modules. Also does <%= bold %>build<%= normal %>, <%= bold %>compile<%= normal %>. Use <%= bold %>-v<%= normal %> to also see their
|
${_zbold}update${_znormal} Update current modules. Also does ${_zbold}build${_znormal}, ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see their
|
||||||
output, any on-pull output and skipped modules.
|
output, any on-pull output and skipped modules.
|
||||||
<%= bold %>check-version<%= normal %> Check if a new version of zimfw is available.
|
${_zbold}check-version${_znormal} Check if a new version of zimfw is available.
|
||||||
<%= bold %>upgrade<%= normal %> Upgrade zimfw. Also does <%= bold %>compile<%= normal %>. Use <%= bold %>-v<%= normal %> to also see its output.
|
${_zbold}upgrade${_znormal} Upgrade zimfw. Also does ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see its output.
|
||||||
<%= bold %>version<%= normal %> Print zimfw version.
|
${_zbold}version${_znormal} Print zimfw version.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
<%= bold %>-q<%= normal %> Quiet (yes to prompts and only outputs errors)
|
${_zbold}-q${_znormal} Quiet (yes to prompts and only outputs errors)
|
||||||
<%= bold %>-v<%= normal %> Verbose (outputs more details)'
|
${_zbold}-v${_znormal} Verbose (outputs more details)"
|
||||||
local -Ua _znames _zroot_dirs _zdisabled_root_dirs
|
local -Ua _znames _zroot_dirs _zdisabled_root_dirs
|
||||||
local -A _zfrozens _ztools _zdirs _zurls _ztypes _zrevs _zsubmodules _zonpulls _zifs
|
local -A _zfrozens _ztools _zdirs _zurls _ztypes _zrevs _zsubmodules _zonpulls _zifs
|
||||||
local -a _zfpaths _zfunctions _zcmds _zunused_dirs
|
local -a _zfpaths _zfunctions _zcmds _zunused_dirs
|
||||||
local -i _zprintlevel=1
|
local -i _zprintlevel=1
|
||||||
if (( # > 2 )); then
|
if (( # > 2 )); then
|
||||||
print -u2 -lR $'<%= red %>'${0}$': Too many options<%= normal %>' '' ${zusage}
|
print -u2 -lR "${_zred}${0}: Too many options${_znormal}" '' ${zusage}
|
||||||
return 2
|
return 2
|
||||||
elif (( # > 1 )); then
|
elif (( # > 1 )); then
|
||||||
case ${2} in
|
case ${2} in
|
||||||
-q) _zprintlevel=0 ;;
|
-q) _zprintlevel=0 ;;
|
||||||
-v) _zprintlevel=2 ;;
|
-v) _zprintlevel=2 ;;
|
||||||
*)
|
*)
|
||||||
print -u2 -lR $'<%= red %>'${0}': Unknown option '${2}$'<%= normal %>' '' ${zusage}
|
print -u2 -lR "${_zred}${0}: Unknown option ${2}${_znormal}" '' ${zusage}
|
||||||
return 2
|
return 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! zstyle -t ':zim' disable-version-check && [[ ${1} != check-version ]]; then
|
local -r _zversion_target=${ZIM_HOME}/.latest_version
|
||||||
|
if ! zstyle -t ':zim' disable-version-check && \
|
||||||
|
[[ ${1} != check-version && -w ${ZIM_HOME} && -w ${__ZIMFW_FILE:A:h} ]]
|
||||||
|
then
|
||||||
# If .latest_version does not exist or was not modified in the last 30 days
|
# If .latest_version does not exist or was not modified in the last 30 days
|
||||||
[[ -f ${_zversion_target}(#qNm-30) ]]; local -r zversion_check_force=${?}
|
[[ -f ${_zversion_target}(#qNm-30) ]]; local -r zversion_check_force=${?}
|
||||||
_zimfw_check_version ${zversion_check_force} 1
|
_zimfw_check_version ${zversion_check_force} 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ ! -w ${ZIM_HOME} && ${1} == (build|check|init|install|update|reinstall|check-version) ]]; then
|
||||||
|
print -u2 -R "${_zred}${0}: No write permission to ${_zbold}${ZIM_HOME}${_znormalred}. Will not try to ${1}.${_znormal}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
local _zrestartmsg=' Restart your terminal for changes to take effect.'
|
local _zrestartmsg=' Restart your terminal for changes to take effect.'
|
||||||
case ${1} in
|
case ${1} in
|
||||||
build)
|
build)
|
||||||
|
@ -60,10 +77,10 @@ Options:
|
||||||
_zimfw_compile
|
_zimfw_compile
|
||||||
;;
|
;;
|
||||||
check-dumpfile) _zimfw_check_dumpfile ;;
|
check-dumpfile) _zimfw_check_dumpfile ;;
|
||||||
clean) _zimfw_source_zimrc 2 && _zimfw_clean_compiled && _zimfw_clean_dumpfile ;;
|
clean) _zimfw_source_zimrc 0 && _zimfw_clean_compiled && _zimfw_clean_dumpfile ;;
|
||||||
clean-compiled) _zimfw_source_zimrc 2 && _zimfw_clean_compiled ;;
|
clean-compiled) _zimfw_source_zimrc 0 && _zimfw_clean_compiled ;;
|
||||||
clean-dumpfile) _zimfw_clean_dumpfile ;;
|
clean-dumpfile) _zimfw_clean_dumpfile ;;
|
||||||
compile) _zimfw_source_zimrc 2 && _zimfw_compile ;;
|
compile) _zimfw_source_zimrc 0 && _zimfw_compile ;;
|
||||||
help) print -R ${zusage} ;;
|
help) print -R ${zusage} ;;
|
||||||
info) _zimfw_info ;;
|
info) _zimfw_info ;;
|
||||||
list)
|
list)
|
||||||
|
@ -83,22 +100,22 @@ Options:
|
||||||
_zimfw_print 'Done with install.' # Only printed in verbose mode
|
_zimfw_print 'Done with install.' # Only printed in verbose mode
|
||||||
_zimfw_source_zimrc 2 && _zimfw_build && _zimfw_compile
|
_zimfw_source_zimrc 2 && _zimfw_build && _zimfw_compile
|
||||||
;;
|
;;
|
||||||
install|update)
|
install|update|reinstall)
|
||||||
_zimfw_run_tool_action ${1} || return 1
|
_zimfw_run_tool_action ${1} || return 1
|
||||||
_zimfw_print -R "Done with ${1}.${_zrestartmsg}"
|
_zimfw_print -R "Done with ${1}.${_zrestartmsg}"
|
||||||
(( _zprintlevel-- ))
|
(( _zprintlevel-- ))
|
||||||
_zimfw_source_zimrc 2 && _zimfw_build && _zimfw_compile
|
_zimfw_source_zimrc 2 && _zimfw_build && _zimfw_compile
|
||||||
;;
|
;;
|
||||||
uninstall) _zimfw_source_zimrc 2 && _zimfw_list_unuseds && _zimfw_uninstall ;;
|
uninstall) _zimfw_source_zimrc 0 && _zimfw_list_unuseds && _zimfw_uninstall ;;
|
||||||
check-version) _zimfw_check_version 1 ;;
|
check-version) _zimfw_check_version 1 ;;
|
||||||
upgrade)
|
upgrade)
|
||||||
_zimfw_upgrade || return 1
|
_zimfw_upgrade || return 1
|
||||||
(( _zprintlevel-- ))
|
(( _zprintlevel-- ))
|
||||||
_zimfw_source_zimrc 2 && _zimfw_compile
|
_zimfw_source_zimrc 0 && _zimfw_compile
|
||||||
;;
|
;;
|
||||||
version) print -R ${_zversion} ;;
|
version) print -R ${_zversion} ;;
|
||||||
*)
|
*)
|
||||||
print -u2 -lR $'<%= red %>'${0}': Unknown action '${1}$'<%= normal %>' '' ${zusage}
|
print -u2 -lR "${_zred}${0}: Unknown action ${1}${_znormal}" '' ${zusage}
|
||||||
return 2
|
return 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
|
@ -4,22 +4,16 @@ class Zim
|
||||||
:bold, :normal, :red, :normalred, :yellow, :normalyellow, :clear_line, :ellipsis, :okay, :warn, :error
|
:bold, :normal, :red, :normalred, :yellow, :normalyellow, :clear_line, :ellipsis, :okay, :warn, :error
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@version = "1.13.1"
|
@version = "1.16.0-SNAPSHOT"
|
||||||
@home = "${ZDOTDIR:-${HOME}}"
|
@home = "${ZDOTDIR:-${HOME}}"
|
||||||
@min_zsh_version = "5.2"
|
@min_zsh_version = "5.2"
|
||||||
# Matches {ssh,http,https,git}://{user@,}host/org/repo and {user@,}host:org/repo
|
# Matches {ssh,http,https,git}://{user@,}host/org/repo and {user@,}host:org/repo
|
||||||
# but not file:///path/to/repo or /path/to/repo
|
# but not file:///path/to/repo or /path/to/repo
|
||||||
# ${match[3]} contains host, and ${match[4]} contains org/repo
|
# ${match[3]} contains host, and ${match[4]} contains org/repo
|
||||||
@url_regex = "^([^:@/]+://)?([^@]+@)?([^:/]+)[:/]([^/]+/[^/]+)/?$"
|
@url_regex = "^([^:@/]+://)?([^@]+@)?([^:/]+)[:/]([^/]+/[^/]+)/?$"
|
||||||
@bold = "\\E[1m"
|
|
||||||
@normal = "\\E[0m"
|
|
||||||
@yellow = "\\E[33m"
|
|
||||||
@normalyellow = "\\E[0;33m"
|
|
||||||
@red = "\\E[31m"
|
|
||||||
@normalred = "\\E[0;31m"
|
|
||||||
@clear_line = "\\E[2K\\r"
|
@clear_line = "\\E[2K\\r"
|
||||||
@ellipsis = " ..."
|
@ellipsis = " ..."
|
||||||
@okay = "\\E[32m)\\E[0m "
|
@okay = ") "
|
||||||
@warn = "! "
|
@warn = "! "
|
||||||
@error = "x "
|
@error = "x "
|
||||||
end
|
end
|
||||||
|
@ -42,8 +36,4 @@ zim = Zim.new
|
||||||
|
|
||||||
<%= zim.render_commented("LICENSE") %>
|
<%= zim.render_commented("LICENSE") %>
|
||||||
<%= zim.render_all("src/stage2/*.erb") %>
|
<%= zim.render_all("src/stage2/*.erb") %>
|
||||||
if [[ ${functrace[1]} == zmodule:* ]]; then
|
|
||||||
zmodule "${@}"
|
|
||||||
else
|
|
||||||
zimfw "${@}"
|
zimfw "${@}"
|
||||||
fi
|
|
||||||
|
|
441
zimfw.zsh
441
zimfw.zsh
|
@ -25,13 +25,17 @@
|
||||||
# SOFTWARE.
|
# SOFTWARE.
|
||||||
|
|
||||||
autoload -Uz is-at-least && if ! is-at-least 5.2; then
|
autoload -Uz is-at-least && if ! is-at-least 5.2; then
|
||||||
print -u2 -R $'\E[31m'${0}$': Error starting zimfw. You\'re using Zsh version \E[1m'${ZSH_VERSION}$'\E[0;31m and versions < \E[1m5.2\E[0;31m are not supported. Upgrade your Zsh.\E[0m'
|
print -u2 -R "${_zred}${0}: Error starting zimfw. You're using Zsh version ${_zbold}${ZSH_VERSION}${_znormalred} and versions < ${_zbold}5.2${_znormalred} are not supported. Update your Zsh.${_znormal}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
autoload -Uz zargs
|
autoload -Uz zargs
|
||||||
|
|
||||||
|
if (( ! ${+ZIM_HOME} )); then
|
||||||
|
print -u2 -R "${_zred}${0}: ${_zbold}ZIM_HOME${_znormalred} not defined${_znormal}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
# Define zimfw location
|
# Define zimfw location
|
||||||
if (( ! ${+ZIM_HOME} )) typeset -g ZIM_HOME=${0:h}
|
typeset -g __ZIMFW_FILE=${0}
|
||||||
|
|
||||||
_zimfw_print() {
|
_zimfw_print() {
|
||||||
if (( _zprintlevel > 0 )) print "${@}"
|
if (( _zprintlevel > 0 )) print "${@}"
|
||||||
|
@ -41,24 +45,26 @@ _zimfw_mv() {
|
||||||
local -a cklines
|
local -a cklines
|
||||||
if cklines=(${(f)"$(command cksum ${1} ${2} 2>/dev/null)"}) && \
|
if cklines=(${(f)"$(command cksum ${1} ${2} 2>/dev/null)"}) && \
|
||||||
[[ ${${(z)cklines[1]}[1,2]} == ${${(z)cklines[2]}[1,2]} ]]; then
|
[[ ${${(z)cklines[1]}[1,2]} == ${${(z)cklines[2]}[1,2]} ]]; then
|
||||||
_zimfw_print -R $'\E[32m)\E[0m \E[1m'${2}$':\E[0m Already up to date'
|
_zimfw_print -R "${_zokay}${_zbold}${2}:${_znormal} Already up to date"
|
||||||
else
|
else
|
||||||
if [[ -e ${2} ]]; then
|
if [[ -e ${2} ]]; then
|
||||||
command mv -f ${2}{,.old} || return 1
|
command mv -f ${2}{,.old} || return 1
|
||||||
fi
|
fi
|
||||||
command mv -f ${1} ${2} && _zimfw_print -R $'\E[32m)\E[0m \E[1m'${2}$':\E[0m Updated.'${_zrestartmsg}
|
command mv -f ${1} ${2} && command chmod a+r ${2} && _zimfw_print -R "${_zokay}${_zbold}${2}:${_znormal} Updated.${_zrestartmsg}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_build_init() {
|
_zimfw_build_init() {
|
||||||
local -r ztarget=${ZIM_HOME}/init.zsh
|
local -r ztarget=${ZIM_HOME}/init.zsh
|
||||||
# Force update of init.zsh if it's older than .zimrc
|
# Force update of init.zsh if it's older than .zimrc
|
||||||
if [[ ${ztarget} -ot ${ZIM_CONFIG_FILE:-${ZDOTDIR:-${HOME}}/.zimrc} ]]; then
|
if [[ ${ztarget} -ot ${_zconfig} ]]; then
|
||||||
command mv -f ${ztarget}{,.old} || return 1
|
command mv -f ${ztarget}{,.old} || return 1
|
||||||
fi
|
fi
|
||||||
_zimfw_mv =(
|
_zimfw_mv =(
|
||||||
print -R "zimfw() { source ${(q-)ZIM_HOME}/zimfw.zsh \"\${@}\" }"
|
print -R '# FILE AUTOMATICALLY GENERATED FROM '${_zconfig}
|
||||||
print -R "zmodule() { source ${(q-)ZIM_HOME}/zimfw.zsh \"\${@}\" }"
|
print '# EDIT THE SOURCE FILE AND THEN RUN zimfw build. DO NOT DIRECTLY EDIT THIS FILE!'
|
||||||
|
print
|
||||||
|
print -R 'if [[ -e ${ZIM_CONFIG_FILE:-${ZDOTDIR:-${HOME}}/.zimrc} ]] zimfw() { source '${${(qqq)__ZIMFW_FILE}/${HOME}/\${HOME}}' "${@}" }'
|
||||||
local zroot_dir zpre
|
local zroot_dir zpre
|
||||||
local -a zif_functions zif_cmds zroot_functions zroot_cmds
|
local -a zif_functions zif_cmds zroot_functions zroot_cmds
|
||||||
local -a zfunctions=(${_zfunctions}) zcmds=(${_zcmds})
|
local -a zfunctions=(${_zfunctions}) zcmds=(${_zcmds})
|
||||||
|
@ -74,7 +80,7 @@ _zimfw_build_init() {
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
zpre=$'*\0'
|
zpre=$'*\0'
|
||||||
if (( ${#_zfpaths} )) print -R 'fpath=('${(q-)${_zfpaths#${~zpre}}:a}' ${fpath})'
|
if (( ${#_zfpaths} )) print -R 'fpath=('${${(qqq)${_zfpaths#${~zpre}}:a}/${HOME}/\${HOME}}' ${fpath})'
|
||||||
if (( ${#zfunctions} )) print -R 'autoload -Uz -- '${zfunctions#${~zpre}}
|
if (( ${#zfunctions} )) print -R 'autoload -Uz -- '${zfunctions#${~zpre}}
|
||||||
for zroot_dir in ${_zroot_dirs}; do
|
for zroot_dir in ${_zroot_dirs}; do
|
||||||
zpre=${zroot_dir}$'\0'
|
zpre=${zroot_dir}$'\0'
|
||||||
|
@ -98,7 +104,7 @@ _zimfw_build_init() {
|
||||||
_zimfw_build_login_init() {
|
_zimfw_build_login_init() {
|
||||||
local -r ztarget=${ZIM_HOME}/login_init.zsh
|
local -r ztarget=${ZIM_HOME}/login_init.zsh
|
||||||
# Force update of login_init.zsh if it's older than .zimrc
|
# Force update of login_init.zsh if it's older than .zimrc
|
||||||
if [[ ${ztarget} -ot ${ZIM_CONFIG_FILE:-${ZDOTDIR:-${HOME}}/.zimrc} ]]; then
|
if [[ ${ztarget} -ot ${_zconfig} ]]; then
|
||||||
command mv -f ${ztarget}{,.old} || return 1
|
command mv -f ${ztarget}{,.old} || return 1
|
||||||
fi
|
fi
|
||||||
_zimfw_mv =(
|
_zimfw_mv =(
|
||||||
|
@ -110,83 +116,82 @@ _zimfw_build() {
|
||||||
_zimfw_build_init && _zimfw_build_login_init && _zimfw_print 'Done with build.'
|
_zimfw_build_init && _zimfw_build_login_init && _zimfw_print 'Done with build.'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_zimfw_source_zimrc() {
|
||||||
zmodule() {
|
zmodule() {
|
||||||
local -r ztarget=${ZIM_CONFIG_FILE:-${ZDOTDIR:-${HOME}}/.zimrc}
|
local -r zusage="Usage: ${_zbold}${0}${_znormal} <url> [${_zbold}-n${_znormal}|${_zbold}--name${_znormal} <module_name>] [${_zbold}-r${_znormal}|${_zbold}--root${_znormal} <path>] [options]
|
||||||
local -r zusage=$'Usage: \E[1m'${0}$'\E[0m <url> [\E[1m-n\E[0m|\E[1m--name\E[0m <module_name>] [\E[1m-r\E[0m|\E[1m--root\E[0m <path>] [options]
|
|
||||||
|
|
||||||
Add \E[1mzmodule\E[0m calls to your \E[1m'${ztarget}$'\E[0m file to define the modules to be initialized.
|
Add ${_zbold}zmodule${_znormal} calls to your ${_zbold}${_zconfig}${_znormal} file to define the modules to be initialized.
|
||||||
The initialization will be done in the same order it\'s defined.
|
The initialization will be done in the same order it's defined.
|
||||||
|
|
||||||
<url> Module absolute path or repository URL. The following URL formats
|
<url> Module absolute path or repository URL. The following URL formats
|
||||||
are equivalent: \E[1mfoo\E[0m, \E[1mzimfw/foo\E[0m, \E[1mhttps://github.com/zimfw/foo.git\E[0m.
|
are equivalent: ${_zbold}foo${_znormal}, ${_zbold}zimfw/foo${_znormal}, ${_zbold}https://github.com/zimfw/foo.git${_znormal}.
|
||||||
If an absolute path is given, the module is considered externally
|
If an absolute path is given, the module is considered externally
|
||||||
installed and won\'t be installed or updated by zimfw.
|
installed and won't be installed or updated by zimfw.
|
||||||
\E[1m-n\E[0m|\E[1m--name\E[0m <module_name> Set a custom module name. Default: the last component in <url>.
|
${_zbold}-n${_znormal}|${_zbold}--name${_znormal} <module_name> Set a custom module name. Default: the last component in <url>.
|
||||||
Slashes can be used inside the name to organize the module into
|
Slashes can be used inside the name to organize the module into
|
||||||
subdirectories. The module will be installed at
|
subdirectories. The module will be installed at
|
||||||
\E[1m'${ZIM_HOME}$'/\E[0m<module_name>.
|
${_zbold}${ZIM_HOME}/${_znormal}<module_name>.
|
||||||
\E[1m-r\E[0m|\E[1m--root\E[0m <path> Relative path to the module root.
|
${_zbold}-r${_znormal}|${_zbold}--root${_znormal} <path> Relative path to the module root.
|
||||||
|
|
||||||
Per-module options:
|
Per-module options:
|
||||||
\E[1m-b\E[0m|\E[1m--branch\E[0m <branch_name> Use specified branch when installing and updating the module.
|
${_zbold}-b${_znormal}|${_zbold}--branch${_znormal} <branch_name> Use specified branch when installing and updating the module.
|
||||||
Overrides the tag option. Default: the repository default branch.
|
Overrides the tag option. Default: the repository default branch.
|
||||||
\E[1m-t\E[0m|\E[1m--tag\E[0m <tag_name> Use specified tag when installing and updating the module. Over-
|
${_zbold}-t${_znormal}|${_zbold}--tag${_znormal} <tag_name> Use specified tag when installing and updating the module. Over-
|
||||||
rides the branch option.
|
rides the branch option.
|
||||||
\E[1m-u\E[0m|\E[1m--use\E[0m <tool_name> Install and update the module using the defined tool. Default is
|
${_zbold}-u${_znormal}|${_zbold}--use${_znormal} <tool_name> Install and update the module using the defined tool. Default is
|
||||||
either defined by \E[1mzstyle \':zim:zmodule\' use \'\E[0m<tool_name>\E[1m\'\E[0m, or \E[1mgit\E[0m
|
either defined by ${_zbold}zstyle ':zim:zmodule' use '${_znormal}<tool_name>${_zbold}'${_znormal}, or ${_zbold}git${_znormal}
|
||||||
if none is provided. The tools available are:
|
if none is provided. The tools available are:
|
||||||
\E[1mgit\E[0m uses the git command. Local changes are preserved on updates.
|
${_zbold}git${_znormal} uses the git command. Local changes are preserved on updates.
|
||||||
\E[1mdegit\E[0m uses curl or wget, and currently only works with GitHub
|
${_zbold}degit${_znormal} uses curl or wget, and currently only works with GitHub
|
||||||
URLs. Modules install faster and take less disk space. Local
|
URLs. Modules install faster and take less disk space. Local
|
||||||
changes are lost on updates. Git submodules are not supported.
|
changes are lost on updates. Git submodules are not supported.
|
||||||
\E[1mmkdir\E[0m creates an empty directory. The <url> is only used to set
|
${_zbold}mkdir${_znormal} creates an empty directory. The <url> is only used to set
|
||||||
the module name. Use the \E[1m-c\E[0m|\E[1m--cmd\E[0m or \E[1m--on-pull\E[0m options to execute
|
the module name. Use the ${_zbold}-c${_znormal}|${_zbold}--cmd${_znormal} or ${_zbold}--on-pull${_znormal} options to execute
|
||||||
the desired command to generate the module files.
|
the desired command to generate the module files.
|
||||||
\E[1m--no-submodules\E[0m Don\'t install or update git submodules.
|
${_zbold}--no-submodules${_znormal} Don't install or update git submodules.
|
||||||
\E[1m-z\E[0m|\E[1m--frozen\E[0m Don\'t install or update the module.
|
${_zbold}-z${_znormal}|${_zbold}--frozen${_znormal} Don't install or update the module.
|
||||||
|
|
||||||
The per-module options above are carried over multiple zmodule calls for the same module.
|
The per-module options above are carried over multiple zmodule calls for the same module.
|
||||||
Modules are uniquely identified by their name.
|
Modules are uniquely identified by their name.
|
||||||
|
|
||||||
Per-module-root options:
|
Per-module-root options:
|
||||||
\E[1m--if\E[0m <test> Will only initialize module root if specified test returns a zero
|
${_zbold}--if${_znormal} <test> Will only initialize module root if specified test returns a zero
|
||||||
exit status. The test is evaluated at every new terminal startup.
|
exit status. The test is evaluated at every new terminal startup.
|
||||||
\E[1m--if-command\E[0m <cmd_name> Will only initialize module root if specified external command is
|
${_zbold}--if-command${_znormal} <cmd_name> Will only initialize module root if specified external command is
|
||||||
available. This is evaluated at every new terminal startup.
|
available. This is evaluated at every new terminal startup.
|
||||||
Equivalent to \E[1m--if \'(( \${+commands[\E[0m<cmd_name>\E[1m]} ))\'\E[0m.
|
Equivalent to ${_zbold}--if '(( \${+commands[${_znormal}<cmd_name>${_zbold}]} ))'${_znormal}.
|
||||||
\E[1m--on-pull\E[0m <command> Execute command after installing or updating the module. The com-
|
${_zbold}--if-ostype${_znormal} <ostype> Will only initialize module root if ${_zbold}OSTYPE${_znormal} is equal to the given
|
||||||
|
expression. This is evaluated at every new terminal startup.
|
||||||
|
Equivalent to ${_zbold}--if '[[ \${OSTYPE} == ${_znormal}<ostype>${_zbold} ]]'${_znormal}.
|
||||||
|
${_zbold}--on-pull${_znormal} <command> Execute command after installing or updating the module. The com-
|
||||||
mand is executed in the module root directory.
|
mand is executed in the module root directory.
|
||||||
\E[1m-d\E[0m|\E[1m--disabled\E[0m Don\'t initialize the module root or uninstall the module.
|
${_zbold}-d${_znormal}|${_zbold}--disabled${_znormal} Don't initialize the module root or uninstall the module.
|
||||||
|
|
||||||
The per-module-root options above are carried over multiple zmodule calls for the same mod-
|
The per-module-root options above are carried over multiple zmodule calls for the same mod-
|
||||||
ule root.
|
ule root.
|
||||||
|
|
||||||
Per-call initialization options:
|
Per-call initialization options:
|
||||||
\E[1m-f\E[0m|\E[1m--fpath\E[0m <path> Will add specified path to fpath. The path is relative to the
|
${_zbold}-f${_znormal}|${_zbold}--fpath${_znormal} <path> Will add specified path to fpath. The path is relative to the
|
||||||
module root directory. Default: \E[1mfunctions\E[0m, if the subdirectory
|
module root directory. Default: ${_zbold}functions${_znormal}, if the subdirectory
|
||||||
exists and is non-empty.
|
exists and is non-empty.
|
||||||
\E[1m-a\E[0m|\E[1m--autoload\E[0m <func_name> Will autoload specified function. Default: all valid names inside
|
${_zbold}-a${_znormal}|${_zbold}--autoload${_znormal} <func_name> Will autoload specified function. Default: all valid names inside
|
||||||
the \E[1mfunctions\E[0m subdirectory, if any.
|
the ${_zbold}functions${_znormal} subdirectory, if any.
|
||||||
\E[1m-s\E[0m|\E[1m--source\E[0m <file_path> Will source specified file. The path is relative to the module
|
${_zbold}-s${_znormal}|${_zbold}--source${_znormal} <file_path> Will source specified file. The path is relative to the module
|
||||||
root directory. Default: \E[1minit.zsh\E[0m, if a non-empty \E[1mfunctions\E[0m sub-
|
root directory. Default: ${_zbold}init.zsh${_znormal}, if a non-empty ${_zbold}functions${_znormal} sub-
|
||||||
directory exists, else the largest of the files matching the glob
|
directory exists, else the largest of the files matching the glob
|
||||||
\E[1m(init.zsh|\E[0m<name>\E[1m.(zsh|plugin.zsh|zsh-theme|sh))\E[0m, if any.
|
${_zbold}(init.zsh|${_znormal}<name>${_zbold}.(zsh|plugin.zsh|zsh-theme|sh))${_znormal}, if any.
|
||||||
<name> in the glob is resolved to the last component of the mod-
|
<name> in the glob is resolved to the last component of the mod-
|
||||||
ule name, or the last component of the path to the module root.
|
ule name, or the last component of the path to the module root.
|
||||||
\E[1m-c\E[0m|\E[1m--cmd\E[0m <command> Will execute specified command. Occurrences of the \E[1m{}\E[0m placeholder
|
${_zbold}-c${_znormal}|${_zbold}--cmd${_znormal} <command> Will execute specified command. Occurrences of the ${_zbold}{}${_znormal} placeholder
|
||||||
in the command are substituted by the module root directory path.
|
in the command are substituted by the module root directory path.
|
||||||
I.e., \E[1m-s \'foo.zsh\'\E[0m and \E[1m-c \'source {}/foo.zsh\'\E[0m are equivalent.
|
I.e., ${_zbold}-s 'foo.zsh'${_znormal} and ${_zbold}-c 'source {}/foo.zsh'${_znormal} are equivalent.
|
||||||
|
|
||||||
Setting any per-call initialization option above will disable the default values from the
|
Setting any per-call initialization option above will disable the default values from the
|
||||||
other per-call initialization options, so only your provided values will be used. I.e. these
|
other per-call initialization options, so only your provided values will be used. I.e. these
|
||||||
values are either all automatic, or all manual in each zmodule call. To use default values
|
values are either all automatic, or all manual in each zmodule call. To use default values
|
||||||
and also provided values, use separate zmodule calls.'
|
and also provided values, use separate zmodule calls."
|
||||||
if [[ ${${funcfiletrace[1]%:*}:A} != ${ztarget:A} ]]; then
|
|
||||||
print -u2 -lR $'\E[31m'${0}$': Must be called from \E[1m'${ztarget}$'\E[0m' '' ${zusage}
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
if (( ! # )); then
|
if (( ! # )); then
|
||||||
print -u2 -lR $'\E[31mx '${funcfiletrace[1]}$': Missing zmodule url\E[0m' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}: Missing zmodule url${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
@ -204,7 +209,7 @@ Per-call initialization options:
|
||||||
shift
|
shift
|
||||||
while [[ ${1} == (-n|--name|-r|--root) ]]; do
|
while [[ ${1} == (-n|--name|-r|--root) ]]; do
|
||||||
if (( # < 2 )); then
|
if (( # < 2 )); then
|
||||||
print -u2 -lR $'\E[31mx '${funcfiletrace[1]}$':\E[1m'${zname}$':\E[0;31m Missing argument for zmodule option \E[1m'${1}$'\E[0m' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalred} Missing argument for zmodule option ${_zbold}${1}${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
@ -227,7 +232,7 @@ Per-call initialization options:
|
||||||
_zdirs[${zname}]=${ZIM_HOME}/modules/${zname}
|
_zdirs[${zname}]=${ZIM_HOME}/modules/${zname}
|
||||||
fi
|
fi
|
||||||
if [[ ${+_zurls[${zname}]} -ne 0 && ${_zurls[${zname}]} != ${zurl} ]]; then
|
if [[ ${+_zurls[${zname}]} -ne 0 && ${_zurls[${zname}]} != ${zurl} ]]; then
|
||||||
print -u2 -lR $'\E[31mx '${funcfiletrace[1]}$':\E[1m'${zname}$':\E[0;31m Module already defined with a different URL. Expected \E[1m'${_zurls[${zname}]}$'\E[0m' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalred} Module already defined with a different URL. Expected ${_zbold}${_zurls[${zname}]}${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
@ -243,9 +248,9 @@ Per-call initialization options:
|
||||||
# Set values from options
|
# Set values from options
|
||||||
while (( # > 0 )); do
|
while (( # > 0 )); do
|
||||||
case ${1} in
|
case ${1} in
|
||||||
-b|--branch|-t|--tag|-u|--use|--on-pull|--if|--if-command|-f|--fpath|-a|--autoload|-s|--source|-c|--cmd)
|
-b|--branch|-t|--tag|-u|--use|--on-pull|--if|--if-command|--if-ostype|-f|--fpath|-a|--autoload|-s|--source|-c|--cmd)
|
||||||
if (( # < 2 )); then
|
if (( # < 2 )); then
|
||||||
print -u2 -lR $'\E[31mx '${funcfiletrace[1]}$':\E[1m'${zname}$':\E[0;31m Missing argument for zmodule option \E[1m'${1}$'\E[0m' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalred} Missing argument for zmodule option ${_zbold}${1}${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
|
@ -253,7 +258,7 @@ Per-call initialization options:
|
||||||
esac
|
esac
|
||||||
case ${1} in
|
case ${1} in
|
||||||
-b|--branch|-t|--tag|-u|--use|--no-submodules)
|
-b|--branch|-t|--tag|-u|--use|--no-submodules)
|
||||||
if [[ -z ${zurl} ]] _zimfw_print -u2 -R $'\E[33m! '${funcfiletrace[1]}$':\E[1m'${zname}$':\E[0;33m The zmodule option \E[1m'${1}$'\E[0;33m has no effect for external modules\E[0m'
|
if [[ -z ${zurl} ]] _zimfw_print -u2 -R "${_zwarn}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalyellow} The zmodule option ${_zbold}${1}${_znormalyellow} has no effect for external modules${_znormal}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
case ${1} in
|
case ${1} in
|
||||||
|
@ -287,6 +292,10 @@ Per-call initialization options:
|
||||||
shift
|
shift
|
||||||
_zifs[${zroot_dir}]="(( \${+commands[${1}]} ))"
|
_zifs[${zroot_dir}]="(( \${+commands[${1}]} ))"
|
||||||
;;
|
;;
|
||||||
|
--if-ostype)
|
||||||
|
shift
|
||||||
|
_zifs[${zroot_dir}]="[[ \${OSTYPE} == ${1} ]]"
|
||||||
|
;;
|
||||||
-f|--fpath)
|
-f|--fpath)
|
||||||
shift
|
shift
|
||||||
zarg=${1}
|
zarg=${1}
|
||||||
|
@ -301,15 +310,15 @@ Per-call initialization options:
|
||||||
shift
|
shift
|
||||||
zarg=${1}
|
zarg=${1}
|
||||||
if [[ ${zarg} != /* ]] zarg=${zroot_dir}/${zarg}
|
if [[ ${zarg} != /* ]] zarg=${zroot_dir}/${zarg}
|
||||||
zcmds+=("source ${(q-)zarg:a}")
|
zcmds+=('source '${(qqq)zarg:a})
|
||||||
;;
|
;;
|
||||||
-c|--cmd)
|
-c|--cmd)
|
||||||
shift
|
shift
|
||||||
zcmds+=(${1//{}/${(q-)zroot_dir:a}})
|
zcmds+=(${1//{}/${(qqq)zroot_dir:a}})
|
||||||
;;
|
;;
|
||||||
-d|--disabled) _zdisabled_root_dirs+=(${zroot_dir}) ;;
|
-d|--disabled) _zdisabled_root_dirs+=(${zroot_dir}) ;;
|
||||||
*)
|
*)
|
||||||
print -u2 -lR $'\E[31mx '${funcfiletrace[1]}$':\E[1m'${zname}$':\E[0;31m Unknown zmodule option \E[1m'${1}$'\E[0m' '' ${zusage}
|
print -u2 -lR "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalred} Unknown zmodule option ${_zbold}${1}${_znormal}" '' ${zusage}
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 2
|
return 2
|
||||||
;;
|
;;
|
||||||
|
@ -321,7 +330,7 @@ Per-call initialization options:
|
||||||
fi
|
fi
|
||||||
if (( _zflags & 2 )); then
|
if (( _zflags & 2 )); then
|
||||||
if [[ ! -e ${zroot_dir} ]]; then
|
if [[ ! -e ${zroot_dir} ]]; then
|
||||||
print -u2 -R $'\E[31mx '${funcfiletrace[1]}$':\E[1m'${zname}': '${zroot_dir}$'\E[0;31m not found\E[0m'
|
print -u2 -R "${_zerror}${funcfiletrace[1]}:${_zbold}${zname}: ${zroot_dir}${_znormalred} not found${_znormal}"
|
||||||
_zfailed=1
|
_zfailed=1
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -333,33 +342,34 @@ Per-call initialization options:
|
||||||
local -ra prezto_scripts=(${zroot_dir}/init.zsh(N))
|
local -ra prezto_scripts=(${zroot_dir}/init.zsh(N))
|
||||||
if (( ${#zfpaths} && ${#prezto_scripts} )); then
|
if (( ${#zfpaths} && ${#prezto_scripts} )); then
|
||||||
# this follows the prezto module format, no need to check for other scripts
|
# this follows the prezto module format, no need to check for other scripts
|
||||||
zcmds=('source '${(q-)^prezto_scripts:a})
|
zcmds=('source '${(qqq)^prezto_scripts:a})
|
||||||
else
|
else
|
||||||
# get script with largest size (descending `O`rder by `L`ength, and return only `[1]` first)
|
# get script with largest size (descending `O`rder by `L`ength, and return only `[1]` first)
|
||||||
local -ra zscripts=(${zroot_dir}/(init.zsh|(${zname:t}|${zroot_dir:t}).(zsh|plugin.zsh|zsh-theme|sh))(NOL[1]))
|
local -ra zscripts=(${zroot_dir}/(init.zsh|(${zname:t}|${zroot_dir:t}).(zsh|plugin.zsh|zsh-theme|sh))(NOL[1]))
|
||||||
zcmds=('source '${(q-)^zscripts:a})
|
zcmds=('source '${(qqq)^zscripts:a})
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if (( ! ${#zfpaths} && ! ${#zfunctions} && ! ${#zcmds} )); then
|
if (( ! ${#zfpaths} && ! ${#zfunctions} && ! ${#zcmds} )); then
|
||||||
_zimfw_print -u2 -lR $'\E[33m! '${funcfiletrace[1]}$':\E[1m'${zname}$':\E[0;33m Nothing found to be initialized. Customize the module name, root or initialization with \E[1mzmodule\E[0;33m options.\E[0m' '' ${zusage}
|
_zimfw_print -u2 -lR "${_zwarn}${funcfiletrace[1]}:${_zbold}${zname}:${_znormalyellow} Nothing found to be initialized. Customize the module name, root or initialization with ${_zbold}zmodule${_znormalyellow} options.${_znormal}" '' ${zusage}
|
||||||
fi
|
fi
|
||||||
# Prefix is added to all _zfpaths, _zfunctions and _zcmds to distinguish the originating root dir
|
# Prefix is added to all _zfpaths, _zfunctions and _zcmds to distinguish the originating root dir
|
||||||
local -r zpre=${zroot_dir}$'\0'
|
local -r zpre=${zroot_dir}$'\0'
|
||||||
_zfpaths+=(${zpre}${^zfpaths})
|
_zfpaths+=(${zpre}${^zfpaths})
|
||||||
_zfunctions+=(${zpre}${^zfunctions})
|
_zfunctions+=(${zpre}${^zfunctions})
|
||||||
|
zcmds=(${zcmds//${HOME}/\${HOME}})
|
||||||
_zcmds+=(${zpre}${^zcmds})
|
_zcmds+=(${zpre}${^zcmds})
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_source_zimrc() {
|
{
|
||||||
local -r ztarget=${ZIM_CONFIG_FILE:-${ZDOTDIR:-${HOME}}/.zimrc} _zflags=${1}
|
local -r _zflags=${1}
|
||||||
local -i _zfailed=0
|
local -i _zfailed=0
|
||||||
if ! source ${ztarget} || (( _zfailed )); then
|
if ! source ${_zconfig} || (( _zfailed )); then
|
||||||
print -u2 -R $'\E[31mFailed to source \E[1m'${ztarget}$'\E[0m'
|
print -u2 -R "${_zred}Failed to source ${_zbold}${_zconfig}${_znormal}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if (( _zflags & 1 && ${#_znames} == 0 )); then
|
if (( _zflags & 1 && ${#_znames} == 0 )); then
|
||||||
print -u2 -R $'\E[31mNo modules defined in \E[1m'${ztarget}$'\E[0m'
|
print -u2 -R "${_zred}No modules defined in ${_zbold}${_zconfig}${_znormal}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
# Remove all from _zfpaths, _zfunctions and _zcmds with disabled root dirs prefixes
|
# Remove all from _zfpaths, _zfunctions and _zcmds with disabled root dirs prefixes
|
||||||
|
@ -370,6 +380,9 @@ _zimfw_source_zimrc() {
|
||||||
_zfunctions=(${_zfunctions:#${zpre}*})
|
_zfunctions=(${_zfunctions:#${zpre}*})
|
||||||
_zcmds=(${_zcmds:#${zpre}*})
|
_zcmds=(${_zcmds:#${zpre}*})
|
||||||
done
|
done
|
||||||
|
} always {
|
||||||
|
unfunction zmodule
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_list_unuseds() {
|
_zimfw_list_unuseds() {
|
||||||
|
@ -388,11 +401,11 @@ _zimfw_list_unuseds() {
|
||||||
# Unused = all installed dirs not in zdirs
|
# Unused = all installed dirs not in zdirs
|
||||||
_zunused_dirs=(${zinstalled:|zdirs})
|
_zunused_dirs=(${zinstalled:|zdirs})
|
||||||
local zunused
|
local zunused
|
||||||
for zunused (${_zunused_dirs}) _zimfw_print -R $'\E[1m'${zunused:t}$':\E[0m '${zunused}${1}
|
for zunused (${_zunused_dirs}) _zimfw_print -R "${_zbold}${zunused:t}:${_znormal} ${zunused}${1}"
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_check_dumpfile() {
|
_zimfw_check_dumpfile() {
|
||||||
_zimfw_print -u2 $'\E[33m! Deprecated action. This is now handled by the completion module alone.\E[0m'
|
_zimfw_print -u2 "${_zwarn}Deprecated action. This is now handled by the completion module alone.${_znormal}"
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_check_version() {
|
_zimfw_check_version() {
|
||||||
|
@ -413,7 +426,7 @@ _zimfw_check_version() {
|
||||||
if [[ -f ${_zversion_target} ]]; then
|
if [[ -f ${_zversion_target} ]]; then
|
||||||
local -r zlatest_version=$(<${_zversion_target})
|
local -r zlatest_version=$(<${_zversion_target})
|
||||||
if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then
|
if [[ -n ${zlatest_version} && ${_zversion} != ${zlatest_version} ]]; then
|
||||||
_zimfw_print -u2 -R $'\E[33mLatest zimfw version is \E[1m'${zlatest_version}$'\E[0;33m. You\'re using version \E[1m'${_zversion}$'\E[0;33m. Run \E[1mzimfw upgrade\E[0;33m to upgrade.\E[0m'
|
_zimfw_print -u2 -R "${_zyellow}Latest zimfw version is ${_zbold}${zlatest_version}${_znormalyellow}. You're using version ${_zbold}${_zversion}${_znormalyellow}. Run ${_zbold}zimfw upgrade${_znormalyellow} to upgrade.${_znormal}"
|
||||||
return 4
|
return 4
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -425,7 +438,7 @@ _zimfw_clean_compiled() {
|
||||||
local zopt
|
local zopt
|
||||||
if (( _zprintlevel > 0 )) zopt=-v
|
if (( _zprintlevel > 0 )) zopt=-v
|
||||||
command rm -f ${zopt} ${^zscriptdirs}/**/*.zwc(|.old)(N) && \
|
command rm -f ${zopt} ${^zscriptdirs}/**/*.zwc(|.old)(N) && \
|
||||||
_zimfw_print $'Done with clean-compiled. Restart your terminal or run \E[1mzimfw compile\E[0m to re-compile.'
|
_zimfw_print "Done with clean-compiled. Restart your terminal or run ${_zbold}zimfw compile${_znormal} to re-compile."
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_clean_dumpfile() {
|
_zimfw_clean_dumpfile() {
|
||||||
|
@ -441,12 +454,12 @@ _zimfw_compile() {
|
||||||
local zroot_dir zfile
|
local zroot_dir zfile
|
||||||
for zroot_dir in ${_zroot_dirs:|_zdisabled_root_dirs}; do
|
for zroot_dir in ${_zroot_dirs:|_zdisabled_root_dirs}; do
|
||||||
if [[ ! -w ${zroot_dir} ]]; then
|
if [[ ! -w ${zroot_dir} ]]; then
|
||||||
_zimfw_print -R $'\E[33m! \E[1m'${zroot_dir}$':\E[0;33m No write permission, unable to compile.\E[0m'
|
_zimfw_print -R "${_zwarn}${_zbold}${zroot_dir}:${_znormalyellow} No write permission, unable to compile.${_znormal}"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
for zfile in ${zroot_dir}/(^*test*/)#*.zsh(|-theme)(N-.); do
|
for zfile in ${zroot_dir}/(^*test*/)#*.zsh(|-theme)(N-.); do
|
||||||
if [[ ! ${zfile}.zwc -nt ${zfile} ]]; then
|
if [[ ! ${zfile}.zwc -nt ${zfile} ]]; then
|
||||||
zcompile -UR ${zfile} && _zimfw_print -R $'\E[32m)\E[0m \E[1m'${zfile}$'.zwc:\E[0m Compiled'
|
zcompile -UR ${zfile} && _zimfw_print -R "${_zokay}${_zbold}${zfile}.zwc:${_znormal} Compiled"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
@ -454,27 +467,46 @@ _zimfw_compile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_info() {
|
_zimfw_info() {
|
||||||
print -R 'zimfw version: '${_zversion}' (built at 2024-04-28 19:07:19 UTC, previous commit is c86223f)'
|
_zimfw_info_print_symlink 'zimfw config' ${_zconfig}
|
||||||
|
_zimfw_info_print_symlink ZIM_HOME ${ZIM_HOME}
|
||||||
|
_zimfw_info_print_symlink 'zimfw script' ${__ZIMFW_FILE}
|
||||||
|
print -R 'zimfw version: '${_zversion}' (built at 2024-10-25 16:12:27 UTC, previous commit is e8e26c1)'
|
||||||
local zparam
|
local zparam
|
||||||
for zparam in LANG ${(Mk)parameters:#LC_*} OSTYPE TERM TERM_PROGRAM TERM_PROGRAM_VERSION ZIM_HOME ZSH_VERSION; do
|
for zparam in LANG ${(Mk)parameters:#LC_*} OSTYPE TERM TERM_PROGRAM TERM_PROGRAM_VERSION ZSH_VERSION; do
|
||||||
print -R ${(r.22....:.)zparam}${(P)zparam}
|
print -R ${(r.22....:.)zparam}${(P)zparam}
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_zimfw_info_print_symlink() {
|
||||||
|
print -Rn ${(r.22....:.)1}${2}
|
||||||
|
if [[ -L ${2} ]] print -Rn ' -> '${2:A}
|
||||||
|
print
|
||||||
|
}
|
||||||
|
|
||||||
_zimfw_uninstall() {
|
_zimfw_uninstall() {
|
||||||
local zopt
|
if (( _zprintlevel <= 0 )); then
|
||||||
if (( _zprintlevel > 0 )) zopt=-v
|
command rm -rf ${_zunused_dirs} || return 1
|
||||||
if (( ${#_zunused_dirs} )); then
|
else
|
||||||
if (( _zprintlevel <= 0 )) || read -q "?Uninstall ${#_zunused_dirs} module(s) listed above [y/N]? "; then
|
local zunused_dir
|
||||||
_zimfw_print
|
print "Found ${_zbold}${#_zunused_dirs}${_znormal} unused module(s)."
|
||||||
command rm -rf ${zopt} ${_zunused_dirs} || return 1
|
for zunused_dir in ${_zunused_dirs}; do
|
||||||
|
if read -q "?Uninstall ${zunused_dir} [y/N]? "; then
|
||||||
|
print
|
||||||
|
command rm -rfv ${zunused_dir} || return 1
|
||||||
|
else
|
||||||
|
print
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
print 'Done with uninstall.'
|
||||||
fi
|
fi
|
||||||
_zimfw_print 'Done with uninstall.'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_upgrade() {
|
_zimfw_upgrade() {
|
||||||
local -r ztarget=${ZIM_HOME}/zimfw.zsh zurl=https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh.gz
|
local -r ztarget=${__ZIMFW_FILE:A} zurl=https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh.gz
|
||||||
|
if [[ ! -w ${ztarget:h} ]]; then
|
||||||
|
print -u2 -R "${_zred}No write permission to ${_zbold}${ztarget:h}${_znormalred}. Will not try to upgrade.${_znormal}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
{
|
{
|
||||||
if (( ${+commands[curl]} )); then
|
if (( ${+commands[curl]} )); then
|
||||||
command curl -fsSL -o ${ztarget}.new.gz ${zurl} || return 1
|
command curl -fsSL -o ${ztarget}.new.gz ${zurl} || return 1
|
||||||
|
@ -483,7 +515,7 @@ _zimfw_upgrade() {
|
||||||
if (( _zprintlevel <= 1 )) zopt=-q
|
if (( _zprintlevel <= 1 )) zopt=-q
|
||||||
if ! command wget -nv ${zopt} -O ${ztarget}.new.gz ${zurl}; then
|
if ! command wget -nv ${zopt} -O ${ztarget}.new.gz ${zurl}; then
|
||||||
if (( _zprintlevel <= 1 )); then
|
if (( _zprintlevel <= 1 )); then
|
||||||
print -u2 -R $'\E[31mFailed to download \E[1m'${zurl}$'\E[0;31m. Use \E[1m-v\E[0;31m option to see details.\E[0m'
|
print -u2 -R "${_zred}Failed to download ${_zbold}${zurl}${_znormalred}. Use ${_zbold}-v${_znormalred} option to see details.${_znormal}"
|
||||||
fi
|
fi
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -501,13 +533,16 @@ _zimfw_upgrade() {
|
||||||
_zimfw_run_list() {
|
_zimfw_run_list() {
|
||||||
local -r zname=${1}
|
local -r zname=${1}
|
||||||
local -r zdir=${_zdirs[${zname}]}
|
local -r zdir=${_zdirs[${zname}]}
|
||||||
print -nR $'\E[1m'${zname}$':\E[0m '${zdir}
|
print -nR "${_zbold}${zname}:${_znormal} ${zdir}"
|
||||||
if [[ -z ${_zurls[${zname}]} ]] print -n ' (external)'
|
if [[ -z ${_zurls[${zname}]} ]] print -n ' (external)'
|
||||||
if (( ${_zfrozens[${zname}]} )) print -n ' (frozen)'
|
if (( ${_zfrozens[${zname}]} )) print -n ' (frozen)'
|
||||||
if (( ${_zdisabled_root_dirs[(I)${zdir}]} )) print -n ' (disabled)'
|
if (( ${_zdisabled_root_dirs[(I)${zdir}]} )) print -n ' (disabled)'
|
||||||
print
|
print
|
||||||
if (( _zprintlevel > 1 )); then
|
if (( _zprintlevel > 1 )); then
|
||||||
if [[ ${_zfrozens[${zname}]} -eq 0 && -n ${_zurls[${zname}]} ]]; then
|
if [[ ${_zfrozens[${zname}]} -eq 0 && -n ${_zurls[${zname}]} ]]; then
|
||||||
|
if [[ ${_ztools[${zname}]} == mkdir ]]; then
|
||||||
|
print ' From: mkdir'
|
||||||
|
else
|
||||||
print -nR " From: ${_zurls[${zname}]}, "
|
print -nR " From: ${_zurls[${zname}]}, "
|
||||||
if [[ -z ${_zrevs[${zname}]} ]]; then
|
if [[ -z ${_zrevs[${zname}]} ]]; then
|
||||||
print -n 'default branch'
|
print -n 'default branch'
|
||||||
|
@ -517,6 +552,7 @@ _zimfw_run_list() {
|
||||||
print -nR ", using ${_ztools[${zname}]}"
|
print -nR ", using ${_ztools[${zname}]}"
|
||||||
if (( ! _zsubmodules[${zname}] )) print -n ', no git submodules'
|
if (( ! _zsubmodules[${zname}] )) print -n ', no git submodules'
|
||||||
print
|
print
|
||||||
|
fi
|
||||||
if [[ -n ${_zonpulls[${zname}]} ]] print -R " On-pull: ${_zonpulls[${zname}]}"
|
if [[ -n ${_zonpulls[${zname}]} ]] print -R " On-pull: ${_zonpulls[${zname}]}"
|
||||||
fi
|
fi
|
||||||
# Match the current module dir prefix from _zroot_dirs
|
# Match the current module dir prefix from _zroot_dirs
|
||||||
|
@ -547,15 +583,15 @@ _zimfw_create_dir() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_print_error() {
|
_zimfw_print_error() {
|
||||||
print -u2 -lR $'\E[2K\r\E[31mx \E[1m'${_zname}$':\E[0;31m '${1}$'\E[0m' ${2:+${(F):- ${(f)^2}}}
|
print -u2 -lR $'\E[2K\r'"${_zerror}${_zbold}${_zname}:${_znormalred} ${1}${_znormal}" ${2:+${(F):- ${(f)^2}}}
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_print_okay() {
|
_zimfw_print_okay() {
|
||||||
if (( _zprintlevel > ${2:-0} )) print -lR $'\E[2K\r\E[32m)\E[0m \E[1m'${_zname}$':\E[0m '${1} ${3:+${(F):- ${(f)^3}}}
|
if (( _zprintlevel > ${2:-0} )) print -lR $'\E[2K\r'"${_zokay}${_zbold}${_zname}:${_znormal} ${1}" ${3:+${(F):- ${(f)^3}}}
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_print_warn() {
|
_zimfw_print_warn() {
|
||||||
_zimfw_print -u2 -R $'\E[2K\r\E[33m! \E[1m'${_zname}$':\E[0;33m '${1}$'\E[0m'
|
_zimfw_print -u2 -R $'\E[2K\r'"${_zwarn}${_zbold}${_zname}:${_znormalyellow} ${1}${_znormal}"
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_pull_print_okay() {
|
_zimfw_pull_print_okay() {
|
||||||
|
@ -578,22 +614,16 @@ _zimfw_download_tarball() {
|
||||||
readonly REPO=${match[4]%.git}
|
readonly REPO=${match[4]%.git}
|
||||||
fi
|
fi
|
||||||
if [[ ${HOST} != github.com || -z ${REPO} ]]; then
|
if [[ ${HOST} != github.com || -z ${REPO} ]]; then
|
||||||
_zimfw_print_error "${URL} is not a valid GitHub URL. Will not try to ${_zaction}."
|
_zimfw_print_error "${URL} is not a valid URL. Will not try to ${ACTION}. The zimfw degit tool only supports GitHub URLs. Use zmodule option ${_zbold}--use git${_znormalred} to use git instead."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
readonly HEADERS_TARGET=${DIR}/${TEMP}_headers
|
readonly HEADERS_TARGET=${DIR}/${TEMP}_headers
|
||||||
{
|
{
|
||||||
if [[ -r ${INFO_TARGET} ]]; then
|
|
||||||
readonly INFO=("${(@f)"$(<${INFO_TARGET})"}")
|
readonly INFO=("${(@f)"$(<${INFO_TARGET})"}")
|
||||||
if [[ ${URL} != ${INFO[1]} ]]; then
|
|
||||||
_zimfw_print_error "URL does not match. Expected ${URL}. Will not try to ${_zaction}."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
# Previous REV is in line 2, reserved for future use.
|
# Previous REV is in line 2, reserved for future use.
|
||||||
readonly INFO_HEADER=${INFO[3]}
|
readonly INFO_HEADER=${INFO[3]}
|
||||||
fi
|
|
||||||
readonly TARBALL_URL=https://api.github.com/repos/${REPO}/tarball/${REV}
|
readonly TARBALL_URL=https://api.github.com/repos/${REPO}/tarball/${REV}
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
if [[ -z ${INFO_HEADER} ]] return 0
|
if [[ -z ${INFO_HEADER} ]] return 0
|
||||||
if (( ${+commands[curl]} )); then
|
if (( ${+commands[curl]} )); then
|
||||||
command curl -IfsL -H ${INFO_HEADER} ${TARBALL_URL} >${HEADERS_TARGET}
|
command curl -IfsL -H ${INFO_HEADER} ${TARBALL_URL} >${HEADERS_TARGET}
|
||||||
|
@ -631,7 +661,7 @@ _zimfw_download_tarball() {
|
||||||
_zimfw_print_error "Error downloading ${TARBALL_URL}, no ETag header found in response"
|
_zimfw_print_error "Error downloading ${TARBALL_URL}, no ETag header found in response"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
command touch ${TARBALL_TARGET} # Update available
|
command touch ${TARBALL_TARGET} # Update available
|
||||||
else
|
else
|
||||||
if ! print -lR "${URL}" "${REV}" "If-None-Match: ${ETAG}" >! ${INFO_TARGET} 2>/dev/null; then
|
if ! print -lR "${URL}" "${REV}" "If-None-Match: ${ETAG}" >! ${INFO_TARGET} 2>/dev/null; then
|
||||||
|
@ -660,10 +690,26 @@ _zimfw_untar_tarball() {
|
||||||
|
|
||||||
_zimfw_tool_degit() {
|
_zimfw_tool_degit() {
|
||||||
# This runs in a subshell
|
# This runs in a subshell
|
||||||
readonly -i SUBMODULES=${5}
|
readonly -i SUBMODULES=${6}
|
||||||
readonly DIR=${1} URL=${2} REV=${4} ONPULL=${6} TEMP=.zdegit_${sysparams[pid]}
|
readonly ACTION=${1} DIR=${2} URL=${3} REV=${5} ONPULL=${7} TEMP=.zdegit_${sysparams[pid]}_${RANDOM}
|
||||||
readonly TARBALL_TARGET=${DIR}/${TEMP}_tarball.tar.gz INFO_TARGET=${DIR}/.zdegit
|
readonly TARBALL_TARGET=${DIR}/${TEMP}_tarball.tar.gz INFO_TARGET=${DIR}/.zdegit
|
||||||
case ${_zaction} in
|
case ${ACTION} in
|
||||||
|
pre|prereinstall)
|
||||||
|
local premsg
|
||||||
|
if [[ ${ACTION} == pre ]] premsg=" Use zmodule option ${_zbold}-z${_znormalred}|${_zbold}--frozen${_znormalred} to disable this error or run ${_zbold}zimfw reinstall${_znormalred} to reinstall."
|
||||||
|
if [[ -e ${DIR} ]]; then
|
||||||
|
if [[ ! -r ${INFO_TARGET} ]]; then
|
||||||
|
_zimfw_print_error $'Module was not installed using zimfw\'s degit.'${premsg}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
readonly INFO=("${(@f)"$(<${INFO_TARGET})"}")
|
||||||
|
if [[ ${URL} != ${INFO[1]} ]]; then
|
||||||
|
_zimfw_print_error 'The zimfw degit URL does not match. Expected '${URL}.${premsg}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
install)
|
install)
|
||||||
{
|
{
|
||||||
_zimfw_create_dir ${DIR} && _zimfw_download_tarball && _zimfw_untar_tarball ${DIR} && _zimfw_pull_print_okay Installed || return 1
|
_zimfw_create_dir ${DIR} && _zimfw_download_tarball && _zimfw_untar_tarball ${DIR} && _zimfw_pull_print_okay Installed || return 1
|
||||||
|
@ -675,14 +721,10 @@ _zimfw_tool_degit() {
|
||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
check|update)
|
check|update)
|
||||||
if [[ ! -r ${INFO_TARGET} ]]; then
|
|
||||||
_zimfw_print_warn $'Module was not installed using zimfw\'s degit. Will not try to '${_zaction}$'. Use zmodule option \E[1m-z\E[0;33m|\E[1m--frozen\E[0;33m to disable this warning.'
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
readonly DIR_NEW=${DIR}${TEMP}
|
readonly DIR_NEW=${DIR}${TEMP}
|
||||||
{
|
{
|
||||||
_zimfw_download_tarball || return 1
|
_zimfw_download_tarball || return 1
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
if [[ -e ${TARBALL_TARGET} ]]; then
|
if [[ -e ${TARBALL_TARGET} ]]; then
|
||||||
_zimfw_print_okay 'Update available'
|
_zimfw_print_okay 'Update available'
|
||||||
return 4
|
return 4
|
||||||
|
@ -714,16 +756,30 @@ _zimfw_tool_degit() {
|
||||||
esac
|
esac
|
||||||
# Check after successful install or update
|
# Check after successful install or update
|
||||||
if [[ ${SUBMODULES} -ne 0 && -e ${DIR}/.gitmodules ]]; then
|
if [[ ${SUBMODULES} -ne 0 && -e ${DIR}/.gitmodules ]]; then
|
||||||
_zimfw_print_warn $'Module contains git submodules, which are not supported by zimfw\'s degit. Use zmodule option \E[1m--no-submodules\E[0;33m to disable this warning.'
|
_zimfw_print_warn "Module contains git submodules, which are not supported by zimfw's degit. Use zmodule option ${_zbold}--no-submodules${_znormalyellow} to disable this warning."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_tool_git() {
|
_zimfw_tool_git() {
|
||||||
# This runs in a subshell
|
# This runs in a subshell
|
||||||
readonly -i SUBMODULES=${5}
|
readonly -i SUBMODULES=${6}
|
||||||
readonly DIR=${1} URL=${2} TYPE=${3} ONPULL=${6}
|
readonly ACTION=${1} DIR=${2} URL=${3} TYPE=${4} ONPULL=${7}
|
||||||
REV=${4}
|
REV=${5}
|
||||||
case ${_zaction} in
|
case ${ACTION} in
|
||||||
|
pre|prereinstall)
|
||||||
|
local premsg
|
||||||
|
if [[ ${ACTION} == pre ]] premsg=" Use zmodule option ${_zbold}-z${_znormalred}|${_zbold}--frozen${_znormalred} to disable this error or run ${_zbold}zimfw reinstall${_znormalred} to reinstall."
|
||||||
|
if [[ -e ${DIR} ]]; then
|
||||||
|
if [[ ! -r ${DIR}/.git ]]; then
|
||||||
|
_zimfw_print_error 'Module was not installed using git.'${premsg}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [[ ${URL} != $(command git -C ${DIR} config --get remote.origin.url) ]]; then
|
||||||
|
_zimfw_print_error 'The git URL does not match. Expected '${URL}.${premsg}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
install)
|
install)
|
||||||
if ERR=$(command git clone ${REV:+-b} ${REV} -q --config core.autocrlf=false ${${SUBMODULES:#0}:+--recursive} -- ${URL} ${DIR} 2>&1); then
|
if ERR=$(command git clone ${REV:+-b} ${REV} -q --config core.autocrlf=false ${${SUBMODULES:#0}:+--recursive} -- ${URL} ${DIR} 2>&1); then
|
||||||
_zimfw_pull_print_okay Installed
|
_zimfw_pull_print_okay Installed
|
||||||
|
@ -733,14 +789,6 @@ _zimfw_tool_git() {
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
check|update)
|
check|update)
|
||||||
if [[ ! -r ${DIR}/.git ]]; then
|
|
||||||
_zimfw_print_warn 'Module was not installed using git. Will not try to '${_zaction}$'. Use zmodule option \E[1m-z\E[0;33m|\E[1m--frozen\E[0;33m to disable this warning.'
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [[ ${URL} != $(command git -C ${DIR} config --get remote.origin.url) ]]; then
|
|
||||||
_zimfw_print_error "URL does not match. Expected ${URL}. Will not try to ${_zaction}."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
if ! ERR=$(command git -C ${DIR} fetch -pqt origin 2>&1); then
|
if ! ERR=$(command git -C ${DIR} fetch -pqt origin 2>&1); then
|
||||||
_zimfw_print_error 'Error during git fetch' ${ERR}
|
_zimfw_print_error 'Error during git fetch' ${ERR}
|
||||||
return 1
|
return 1
|
||||||
|
@ -760,7 +808,7 @@ _zimfw_tool_git() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
TO_REV=${REV}@{u}
|
TO_REV=${REV}@{u}
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
readonly -i BEHIND=$(command git -C ${DIR} rev-list --count ${REV}..${TO_REV} -- 2>/dev/null)
|
readonly -i BEHIND=$(command git -C ${DIR} rev-list --count ${REV}..${TO_REV} -- 2>/dev/null)
|
||||||
if (( BEHIND )); then
|
if (( BEHIND )); then
|
||||||
_zimfw_print_okay "Update available [behind ${BEHIND}]"
|
_zimfw_print_okay "Update available [behind ${BEHIND}]"
|
||||||
|
@ -772,7 +820,7 @@ _zimfw_tool_git() {
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [[ ${REV} == $(command git -C ${DIR} describe --tags --exact-match 2>/dev/null) ]]; then
|
if [[ ${REV} == $(command git -C ${DIR} describe --tags --exact-match 2>/dev/null) ]]; then
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
_zimfw_print_okay 'Already up to date' 1
|
_zimfw_print_okay 'Already up to date' 1
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
|
@ -780,13 +828,17 @@ _zimfw_tool_git() {
|
||||||
return ${?}
|
return ${?}
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${ACTION} == check ]]; then
|
||||||
_zimfw_print_okay 'Update available'
|
_zimfw_print_okay 'Update available'
|
||||||
return 4
|
return 4
|
||||||
fi
|
fi
|
||||||
TO_REV=${REV}
|
TO_REV=${REV}
|
||||||
fi
|
fi
|
||||||
|
if [[ -z ${NO_COLOR} ]]; then
|
||||||
LOG=$(command git -C ${DIR} log --graph --color --format='%C(yellow)%h%C(reset) %s %C(cyan)(%cr)%C(reset)' ..${TO_REV} -- 2>/dev/null)
|
LOG=$(command git -C ${DIR} log --graph --color --format='%C(yellow)%h%C(reset) %s %C(cyan)(%cr)%C(reset)' ..${TO_REV} -- 2>/dev/null)
|
||||||
|
else
|
||||||
|
LOG=$(command git -C ${DIR} log --graph --format='%h %s (%cr)' ..${TO_REV} -- 2>/dev/null)
|
||||||
|
fi
|
||||||
if ! ERR=$(command git -C ${DIR} checkout -q ${REV} -- 2>&1); then
|
if ! ERR=$(command git -C ${DIR} checkout -q ${REV} -- 2>&1); then
|
||||||
_zimfw_print_error 'Error during git checkout' ${ERR}
|
_zimfw_print_error 'Error during git checkout' ${ERR}
|
||||||
return 1
|
return 1
|
||||||
|
@ -814,13 +866,14 @@ _zimfw_tool_git() {
|
||||||
|
|
||||||
_zimfw_tool_mkdir() {
|
_zimfw_tool_mkdir() {
|
||||||
# This runs in a subshell
|
# This runs in a subshell
|
||||||
readonly -i SUBMODULES=${5}
|
readonly -i SUBMODULES=${6}
|
||||||
readonly DIR=${1} TYPE=${3} REV=${4} ONPULL=${6}
|
readonly ACTION=${1} DIR=${2} TYPE=${4} REV=${5} ONPULL=${7}
|
||||||
|
if [[ ${ACTION} == (pre|prereinstall|check) ]] return 0
|
||||||
if [[ -n ${REV} ]]; then
|
if [[ -n ${REV} ]]; then
|
||||||
_zimfw_print_warn $'The zmodule option \E[1m-'${TYPE[1]}$'\E[0;33m|\E[1m--'${TYPE}$'\E[0;33m has no effect when using the mkdir tool'
|
_zimfw_print_warn "The zmodule option ${_zbold}-${TYPE[1]}${_znormalyellow}|${_zbold}--${TYPE}${_znormalyellow} has no effect when using the mkdir tool"
|
||||||
fi
|
fi
|
||||||
if (( ! SUBMODULES )); then
|
if (( ! SUBMODULES )); then
|
||||||
_zimfw_print_warn $'The zmodule option \E[1m--no-submodules\E[0;33m has no effect when using the mkdir tool'
|
_zimfw_print_warn "The zmodule option ${_zbold}--no-submodules${_znormalyellow} has no effect when using the mkdir tool"
|
||||||
fi
|
fi
|
||||||
if [[ ! -d ${DIR} || -n ${ONPULL} ]]; then
|
if [[ ! -d ${DIR} || -n ${ONPULL} ]]; then
|
||||||
_zimfw_create_dir ${DIR} && _zimfw_pull_print_okay Created || return 1
|
_zimfw_create_dir ${DIR} && _zimfw_pull_print_okay Created || return 1
|
||||||
|
@ -828,7 +881,8 @@ _zimfw_tool_mkdir() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_run_tool() {
|
_zimfw_run_tool() {
|
||||||
local -r _zname=${1}
|
local zaction=${1}
|
||||||
|
local -r _zname=${2}
|
||||||
if [[ -z ${_zurls[${_zname}]} ]]; then
|
if [[ -z ${_zurls[${_zname}]} ]]; then
|
||||||
_zimfw_print_okay 'Skipping external module' 1
|
_zimfw_print_okay 'Skipping external module' 1
|
||||||
return 0
|
return 0
|
||||||
|
@ -837,7 +891,38 @@ _zimfw_run_tool() {
|
||||||
_zimfw_print_okay 'Skipping frozen module' 1
|
_zimfw_print_okay 'Skipping frozen module' 1
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
case ${_zaction} in
|
local -r ztool=${_ztools[${_zname}]}
|
||||||
|
if [[ ${ztool} != (degit|git|mkdir) ]]; then
|
||||||
|
_zimfw_print_error "Unknown tool ${ztool}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
set "${_zdirs[${_zname}]}" "${_zurls[${_zname}]}" "${_ztypes[${_zname}]}" "${_zrevs[${_zname}]}" "${_zsubmodules[${_zname}]}" "${_zonpulls[${_zname}]}"
|
||||||
|
if [[ ${zaction} == reinstall ]]; then
|
||||||
|
_zimfw_tool_${ztool} prereinstall "${@}" && return 0
|
||||||
|
if (( _zprintlevel > 0 )); then
|
||||||
|
if read -q "?Reinstall ${_zname} [y/N]? "; then
|
||||||
|
print
|
||||||
|
else
|
||||||
|
print
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
local -r zdir_new=.${_zdirs[${_zname}]}_${sysparams[pid]}_${RANDOM}
|
||||||
|
_zimfw_print -nR 'Reinstalling '${_zname}' ...'
|
||||||
|
{
|
||||||
|
_zimfw_tool_${ztool} install ${zdir_new} "${@:2}" || return 1
|
||||||
|
if ! ERR=$({ command rm -rf ${_zdirs[${_zname}]} && command mv -f ${zdir_new} ${_zdirs[${_zname}]} } 2>&1); then
|
||||||
|
_zimfw_print_error "Error updating ${_zdirs[${_zname}]}" ${ERR}
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
} always {
|
||||||
|
command rm -rf ${zdir_new} 2>/dev/null
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
_zimfw_tool_${ztool} pre "${@}" || return 1
|
||||||
|
fi
|
||||||
|
case ${zaction} in
|
||||||
install)
|
install)
|
||||||
if [[ -e ${_zdirs[${_zname}]} ]]; then
|
if [[ -e ${_zdirs[${_zname}]} ]]; then
|
||||||
_zimfw_print_okay 'Skipping already installed module' 1
|
_zimfw_print_okay 'Skipping already installed module' 1
|
||||||
|
@ -847,92 +932,102 @@ _zimfw_run_tool() {
|
||||||
;;
|
;;
|
||||||
check|update)
|
check|update)
|
||||||
if [[ ! -d ${_zdirs[${_zname}]} ]]; then
|
if [[ ! -d ${_zdirs[${_zname}]} ]]; then
|
||||||
_zimfw_print_error $'Not installed. Run \E[1mzimfw install\E[0;31m to install.'
|
_zimfw_print_error "Not installed. Run ${_zbold}zimfw install${_znormalred} to install."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [[ ${_zaction} == check ]]; then
|
if [[ ${zaction} == check ]]; then
|
||||||
if (( _zprintlevel > 1 )) print -nR $'\E[2K\rChecking '${_zname}' ...'
|
if (( _zprintlevel > 1 )) print -nR $'\E[2K\rChecking '${_zname}' ...'
|
||||||
else
|
else
|
||||||
_zimfw_print -nR $'\E[2K\rUpdating '${_zname}' ...'
|
_zimfw_print -nR $'\E[2K\rUpdating '${_zname}' ...'
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
_zimfw_print_error "Unknown action ${_zaction}"
|
_zimfw_print_error "Unknown action ${zaction}"
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
local -r ztool=${_ztools[${_zname}]}
|
|
||||||
case ${ztool} in
|
|
||||||
degit|git|mkdir)
|
|
||||||
_zimfw_tool_${ztool} "${_zdirs[${_zname}]}" "${_zurls[${_zname}]}" "${_ztypes[${_zname}]}" "${_zrevs[${_zname}]}" "${_zsubmodules[${_zname}]}" "${_zonpulls[${_zname}]}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_zimfw_print_error "Unknown tool ${ztool}"
|
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
_zimfw_tool_${ztool} ${zaction} "${@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
_zimfw_run_tool_action() {
|
_zimfw_run_tool_action() {
|
||||||
local -r _zaction=${1}
|
local -i zmaxprocs=0
|
||||||
_zimfw_source_zimrc 1 && zargs -n 1 -P 0 -- "${_znames[@]}" -- _zimfw_run_tool
|
if [[ ${1} == reinstall ]] zmaxprocs=1
|
||||||
|
_zimfw_source_zimrc 1 || return 1
|
||||||
|
zargs -n 2 -P ${zmaxprocs} -- "${_znames[@]}" -- _zimfw_run_tool ${1}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
zimfw() {
|
zimfw() {
|
||||||
builtin emulate -L zsh -o EXTENDED_GLOB
|
builtin emulate -L zsh -o EXTENDED_GLOB
|
||||||
local -r _zversion='1.13.1' _zversion_target=${ZIM_HOME}/.latest_version zusage=$'Usage: \E[1m'${0}$'\E[0m <action> [\E[1m-q\E[0m|\E[1m-v\E[0m]
|
if [[ -z ${NO_COLOR} ]]; then
|
||||||
|
local -r _znormal=$'\E[0m' _zbold=$'\E[1m' _zred=$'\E[31m' _znormalred=$'\E[0;31m' _zgreen=$'\E[32m' _zyellow=$'\E[33m' _znormalyellow=$'\E[0;33m'
|
||||||
|
else
|
||||||
|
local -r _znormal= _zbold= _zred= _znormalred= _zgreen= _zyellow= _znormalyellow=
|
||||||
|
fi
|
||||||
|
local -r _zerror="${_zred}x " _zokay="${_zgreen}) ${_znormal}" _zwarn="${_zyellow}! "
|
||||||
|
local -r _zconfig=${ZIM_CONFIG_FILE:-${ZDOTDIR:-${HOME}}/.zimrc} _zversion='1.16.0-SNAPSHOT'
|
||||||
|
local -r zusage="Usage: ${_zbold}${0}${_znormal} <action> [${_zbold}-q${_znormal}|${_zbold}-v${_znormal}]
|
||||||
|
|
||||||
Actions:
|
Actions:
|
||||||
\E[1mbuild\E[0m Build \E[1m'${ZIM_HOME}$'/init.zsh\E[0m and \E[1m'${ZIM_HOME}$'/login_init.zsh\E[0m.
|
${_zbold}build${_znormal} Build ${_zbold}${ZIM_HOME}/init.zsh${_znormal} and ${_zbold}${ZIM_HOME}/login_init.zsh${_znormal}.
|
||||||
Also does \E[1mcompile\E[0m. Use \E[1m-v\E[0m to also see its output.
|
Also does ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see its output.
|
||||||
\E[1mclean\E[0m Clean all. Does both \E[1mclean-compiled\E[0m and \E[1mclean-dumpfile\E[0m.
|
${_zbold}clean${_znormal} Clean all. Does both ${_zbold}clean-compiled${_znormal} and ${_zbold}clean-dumpfile${_znormal}.
|
||||||
\E[1mclean-compiled\E[0m Clean Zsh compiled files.
|
${_zbold}clean-compiled${_znormal} Clean Zsh compiled files.
|
||||||
\E[1mclean-dumpfile\E[0m Clean completion dumpfile.
|
${_zbold}clean-dumpfile${_znormal} Clean completion dumpfile.
|
||||||
\E[1mcompile\E[0m Compile Zsh files.
|
${_zbold}compile${_znormal} Compile Zsh files.
|
||||||
\E[1mhelp\E[0m Print this help.
|
${_zbold}help${_znormal} Print this help.
|
||||||
\E[1minfo\E[0m Print zimfw and system info.
|
${_zbold}info${_znormal} Print zimfw and system info.
|
||||||
\E[1mlist\E[0m List all modules currently defined in \E[1m'${ZIM_CONFIG_FILE:-${ZDOTDIR:-${HOME}}/.zimrc}$'\E[0m.
|
${_zbold}list${_znormal} List all modules currently defined in ${_zbold}${_zconfig}${_znormal}.
|
||||||
Use \E[1m-v\E[0m to also see the modules details.
|
Use ${_zbold}-v${_znormal} to also see the modules details.
|
||||||
\E[1minit\E[0m Same as \E[1minstall\E[0m, but with output tailored to be used at terminal startup.
|
${_zbold}init${_znormal} Same as ${_zbold}install${_znormal}, but with output tailored to be used at terminal startup.
|
||||||
\E[1minstall\E[0m Install new modules. Also does \E[1mbuild\E[0m, \E[1mcompile\E[0m. Use \E[1m-v\E[0m to also see their
|
${_zbold}install${_znormal} Install new modules. Also does ${_zbold}build${_znormal}, ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see their
|
||||||
output, any on-pull output and skipped modules.
|
output, any on-pull output and skipped modules.
|
||||||
\E[1muninstall\E[0m Delete unused modules. Prompts for confirmation. Use \E[1m-q\E[0m for quiet uninstall.
|
${_zbold}reinstall${_znormal} Reinstall modules that failed check. Prompts for confirmation. Use ${_zbold}-q${_znormal} for
|
||||||
\E[1mcheck\E[0m Check if updates for current modules are available. Use \E[1m-v\E[0m to also see
|
quiet reinstall. Also does ${_zbold}build${_znormal}, ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see their output,
|
||||||
|
any on-pull output and skipped modules.
|
||||||
|
${_zbold}uninstall${_znormal} Delete unused modules. Prompts for confirmation. Use ${_zbold}-q${_znormal} for quiet uninstall.
|
||||||
|
${_zbold}check${_znormal} Check if updates for current modules are available. Use ${_zbold}-v${_znormal} to also see
|
||||||
skipped and up to date modules.
|
skipped and up to date modules.
|
||||||
\E[1mupdate\E[0m Update current modules. Also does \E[1mbuild\E[0m, \E[1mcompile\E[0m. Use \E[1m-v\E[0m to also see their
|
${_zbold}update${_znormal} Update current modules. Also does ${_zbold}build${_znormal}, ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see their
|
||||||
output, any on-pull output and skipped modules.
|
output, any on-pull output and skipped modules.
|
||||||
\E[1mcheck-version\E[0m Check if a new version of zimfw is available.
|
${_zbold}check-version${_znormal} Check if a new version of zimfw is available.
|
||||||
\E[1mupgrade\E[0m Upgrade zimfw. Also does \E[1mcompile\E[0m. Use \E[1m-v\E[0m to also see its output.
|
${_zbold}upgrade${_znormal} Upgrade zimfw. Also does ${_zbold}compile${_znormal}. Use ${_zbold}-v${_znormal} to also see its output.
|
||||||
\E[1mversion\E[0m Print zimfw version.
|
${_zbold}version${_znormal} Print zimfw version.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
\E[1m-q\E[0m Quiet (yes to prompts and only outputs errors)
|
${_zbold}-q${_znormal} Quiet (yes to prompts and only outputs errors)
|
||||||
\E[1m-v\E[0m Verbose (outputs more details)'
|
${_zbold}-v${_znormal} Verbose (outputs more details)"
|
||||||
local -Ua _znames _zroot_dirs _zdisabled_root_dirs
|
local -Ua _znames _zroot_dirs _zdisabled_root_dirs
|
||||||
local -A _zfrozens _ztools _zdirs _zurls _ztypes _zrevs _zsubmodules _zonpulls _zifs
|
local -A _zfrozens _ztools _zdirs _zurls _ztypes _zrevs _zsubmodules _zonpulls _zifs
|
||||||
local -a _zfpaths _zfunctions _zcmds _zunused_dirs
|
local -a _zfpaths _zfunctions _zcmds _zunused_dirs
|
||||||
local -i _zprintlevel=1
|
local -i _zprintlevel=1
|
||||||
if (( # > 2 )); then
|
if (( # > 2 )); then
|
||||||
print -u2 -lR $'\E[31m'${0}$': Too many options\E[0m' '' ${zusage}
|
print -u2 -lR "${_zred}${0}: Too many options${_znormal}" '' ${zusage}
|
||||||
return 2
|
return 2
|
||||||
elif (( # > 1 )); then
|
elif (( # > 1 )); then
|
||||||
case ${2} in
|
case ${2} in
|
||||||
-q) _zprintlevel=0 ;;
|
-q) _zprintlevel=0 ;;
|
||||||
-v) _zprintlevel=2 ;;
|
-v) _zprintlevel=2 ;;
|
||||||
*)
|
*)
|
||||||
print -u2 -lR $'\E[31m'${0}': Unknown option '${2}$'\E[0m' '' ${zusage}
|
print -u2 -lR "${_zred}${0}: Unknown option ${2}${_znormal}" '' ${zusage}
|
||||||
return 2
|
return 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! zstyle -t ':zim' disable-version-check && [[ ${1} != check-version ]]; then
|
local -r _zversion_target=${ZIM_HOME}/.latest_version
|
||||||
|
if ! zstyle -t ':zim' disable-version-check && \
|
||||||
|
[[ ${1} != check-version && -w ${ZIM_HOME} && -w ${__ZIMFW_FILE:A:h} ]]
|
||||||
|
then
|
||||||
# If .latest_version does not exist or was not modified in the last 30 days
|
# If .latest_version does not exist or was not modified in the last 30 days
|
||||||
[[ -f ${_zversion_target}(#qNm-30) ]]; local -r zversion_check_force=${?}
|
[[ -f ${_zversion_target}(#qNm-30) ]]; local -r zversion_check_force=${?}
|
||||||
_zimfw_check_version ${zversion_check_force} 1
|
_zimfw_check_version ${zversion_check_force} 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ ! -w ${ZIM_HOME} && ${1} == (build|check|init|install|update|reinstall|check-version) ]]; then
|
||||||
|
print -u2 -R "${_zred}${0}: No write permission to ${_zbold}${ZIM_HOME}${_znormalred}. Will not try to ${1}.${_znormal}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
local _zrestartmsg=' Restart your terminal for changes to take effect.'
|
local _zrestartmsg=' Restart your terminal for changes to take effect.'
|
||||||
case ${1} in
|
case ${1} in
|
||||||
build)
|
build)
|
||||||
|
@ -941,10 +1036,10 @@ Options:
|
||||||
_zimfw_compile
|
_zimfw_compile
|
||||||
;;
|
;;
|
||||||
check-dumpfile) _zimfw_check_dumpfile ;;
|
check-dumpfile) _zimfw_check_dumpfile ;;
|
||||||
clean) _zimfw_source_zimrc 2 && _zimfw_clean_compiled && _zimfw_clean_dumpfile ;;
|
clean) _zimfw_source_zimrc 0 && _zimfw_clean_compiled && _zimfw_clean_dumpfile ;;
|
||||||
clean-compiled) _zimfw_source_zimrc 2 && _zimfw_clean_compiled ;;
|
clean-compiled) _zimfw_source_zimrc 0 && _zimfw_clean_compiled ;;
|
||||||
clean-dumpfile) _zimfw_clean_dumpfile ;;
|
clean-dumpfile) _zimfw_clean_dumpfile ;;
|
||||||
compile) _zimfw_source_zimrc 2 && _zimfw_compile ;;
|
compile) _zimfw_source_zimrc 0 && _zimfw_compile ;;
|
||||||
help) print -R ${zusage} ;;
|
help) print -R ${zusage} ;;
|
||||||
info) _zimfw_info ;;
|
info) _zimfw_info ;;
|
||||||
list)
|
list)
|
||||||
|
@ -964,29 +1059,25 @@ Options:
|
||||||
_zimfw_print 'Done with install.' # Only printed in verbose mode
|
_zimfw_print 'Done with install.' # Only printed in verbose mode
|
||||||
_zimfw_source_zimrc 2 && _zimfw_build && _zimfw_compile
|
_zimfw_source_zimrc 2 && _zimfw_build && _zimfw_compile
|
||||||
;;
|
;;
|
||||||
install|update)
|
install|update|reinstall)
|
||||||
_zimfw_run_tool_action ${1} || return 1
|
_zimfw_run_tool_action ${1} || return 1
|
||||||
_zimfw_print -R "Done with ${1}.${_zrestartmsg}"
|
_zimfw_print -R "Done with ${1}.${_zrestartmsg}"
|
||||||
(( _zprintlevel-- ))
|
(( _zprintlevel-- ))
|
||||||
_zimfw_source_zimrc 2 && _zimfw_build && _zimfw_compile
|
_zimfw_source_zimrc 2 && _zimfw_build && _zimfw_compile
|
||||||
;;
|
;;
|
||||||
uninstall) _zimfw_source_zimrc 2 && _zimfw_list_unuseds && _zimfw_uninstall ;;
|
uninstall) _zimfw_source_zimrc 0 && _zimfw_list_unuseds && _zimfw_uninstall ;;
|
||||||
check-version) _zimfw_check_version 1 ;;
|
check-version) _zimfw_check_version 1 ;;
|
||||||
upgrade)
|
upgrade)
|
||||||
_zimfw_upgrade || return 1
|
_zimfw_upgrade || return 1
|
||||||
(( _zprintlevel-- ))
|
(( _zprintlevel-- ))
|
||||||
_zimfw_source_zimrc 2 && _zimfw_compile
|
_zimfw_source_zimrc 0 && _zimfw_compile
|
||||||
;;
|
;;
|
||||||
version) print -R ${_zversion} ;;
|
version) print -R ${_zversion} ;;
|
||||||
*)
|
*)
|
||||||
print -u2 -lR $'\E[31m'${0}': Unknown action '${1}$'\E[0m' '' ${zusage}
|
print -u2 -lR "${_zred}${0}: Unknown action ${1}${_znormal}" '' ${zusage}
|
||||||
return 2
|
return 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ ${functrace[1]} == zmodule:* ]]; then
|
|
||||||
zmodule "${@}"
|
|
||||||
else
|
|
||||||
zimfw "${@}"
|
zimfw "${@}"
|
||||||
fi
|
|
||||||
|
|
Loading…
Reference in a new issue