initial commit - still requires hash
This commit is contained in:
parent
022ef2536a
commit
aa288ad0b9
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024 Emil Lerch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
35
README.md
Normal file
35
README.md
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
zvm-direnv
|
||||||
|
==========
|
||||||
|
|
||||||
|
A way to use [zvm](https://zvm.app) with [direnv](https://direnv.net)
|
||||||
|
|
||||||
|
Installing
|
||||||
|
----------
|
||||||
|
|
||||||
|
Put the following lines in your `.envrc`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
if ! has zvm_direnv_version || ! zvm_direnv_version 1.0.0; then
|
||||||
|
source_url "https://git.lerch.org/lobo/zvm-direnv/1.0.0/direnvrc" #"sha256-RuwIS+QKFj/T9M2TFXScjBsLR6V3A17YVoEW/Q6AZ1w="
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ echo "use zig 0.13.0" >> .envrc
|
||||||
|
$ direnv allow
|
||||||
|
```
|
||||||
|
|
||||||
|
If you haven't used direnv before, make sure to [hook it into your shell](https://direnv.net/docs/hook.html) first.
|
||||||
|
|
||||||
|
How it works
|
||||||
|
------------
|
||||||
|
|
||||||
|
This implementation utilizes zvm for installation of both [zig](https://ziglang.org)
|
||||||
|
and [zls](https://github.com/zigtools/zls). It avoids the use of `zvm use` as
|
||||||
|
this will change the zig version system-wide, possibly resulting in some
|
||||||
|
confusing behavior. Instead, it uses zvm to download the appropriate versions
|
||||||
|
if necessary, then prepends the desired version to the path used in the direnv
|
||||||
|
directory.
|
54
direnvrc
Normal file
54
direnvrc
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# vi: ft=sh
|
||||||
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
ZVM_DIRENV_VERSION=1.0.0
|
||||||
|
|
||||||
|
# Usage: zvm_direnv_version <version_at_least>
|
||||||
|
#
|
||||||
|
# Checks that the nix-direnv version is at least as old as <version_at_least>.
|
||||||
|
zvm_direnv_version() {
|
||||||
|
_require_version zvm-direnv $ZVM_DIRENV_VERSION "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
_require_version() {
|
||||||
|
local cmd=$1 version=$2 required=$3
|
||||||
|
if ! printf "%s\n" "$required" "$version" | LC_ALL=C sort -c -V 2>/dev/null; then
|
||||||
|
log_error \
|
||||||
|
"zvm_direnv: minimum required $(basename "$cmd") version is $required (installed: $version)"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
use_zig() {
|
||||||
|
if [[ -z $1 ]]; then
|
||||||
|
log_error "Must specify a zig version!"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [[ "$1" == "master" ]]; then
|
||||||
|
log_error "Please don't use master"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v "$1" > /dev/null 2>&1; then
|
||||||
|
log_error "zvm not installed - please install it from https://www.zvm.app/"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
local version="$1"
|
||||||
|
# This is a bad idea, because it will make a global change
|
||||||
|
# zvm use $1
|
||||||
|
if [[ "$(zvm ls | grep "$version")" != "$version" ]]; then
|
||||||
|
local current
|
||||||
|
# zvm 0.7.9 does not indicate which version is in use, so we have to find
|
||||||
|
# the version that was hard linked into the bin directory
|
||||||
|
current="$(find "${ZVM_INSTALL}/.." -samefile "${ZVM_INSTALL}/../bin/zig" | \
|
||||||
|
rev | \
|
||||||
|
cut -d/ -f2 | \
|
||||||
|
rev)"
|
||||||
|
zvm install --zls "$1" # I think this is safe for all except master
|
||||||
|
|
||||||
|
# zvm install will automatically use the installed version, which is normally
|
||||||
|
# cool, but in this case, we don't want to do that, so we will revert
|
||||||
|
zvm use "$current"
|
||||||
|
fi
|
||||||
|
PATH_add "${ZVM_INSTALL}/../$1"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user