Repository files navigation

envirius

envirius — universal virtual environments manager.

Table of Contents

Idea

Usually this kind of tools narrowly specialized for a particular programming language. For example:

But there are many cases when in the same environment you must have more than one programming language. For example, to create an environment with python2.6 and node.js 0.10.24. This idea underlies envirius.

Support for new programming languages are implemented as plug-ins (see below).

Features

  • clean design
  • easy extensible
  • test coverage

Installation

At first:

$ git clone https://github.com/ekalinin/envirius.git
$ cd envirius
$ make install

Then youd need to add into your .bashrc the following:

[ -f"$HOME/.envirius/nv" ] &&.~/.envirius/nv

Uninstallation

Just do the following:

$ cd envirius
$ make uninstall

Cache and previously created environments will not be deleted.

Available plugins

You can create environments for the following programming languages:

New languages can be added as plugins (see below).

Usage

Check available plugins

➥ nv ls-plugins
elixir
elixir-prebuilt
erlang
go-prebuilt
haskell
haskell-prebuilt
iojs
iojs-prebuilt
julia
node
node-prebuilt
python
rust
rust-prebuilt
scala

Here you can see two types of plugins:

  • which downloads & builds from source (elixir, erlang, …)
  • which just downloads prebuilt packages (elixir-prebuilt, node-prebuilt, …)

It's obviously that work with the second option will be much faster because compiling may takes huge amount of time.

Unfortunately, not all languages is available in prebuilt binaries.

Check available versions for each plugin

➥ nv ls-versions --rust --erlang
* rust:
0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9
* erlang:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4
R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0
R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0
R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02-1 R13B02 R13B03 R13B04
R14A R14B R14B01 R14B02 R14B03 R14B04
R15B R15B01 R15B02 R15B02 R15B03-1 R15B03
R16A R16B R16B01 R16B02 R16B03-1 R16B03
17.0-rc1

Create an environment

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1
Creating environment: mixed-rust-erlang ...
* installing rust==0.9 ...
*done (in 5 secs.)
* installing erlang==17.0-rc1 ...
*done (in 11 secs.)

If you want to activate new environment just right after it creation, then do the following:

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1 --on
Creating environment: mixed-rust-erlang ...
....
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ 

Activate/deactivate environment

Activating in a new shell

By default activating environment executes in a new shell:

echo$$
112
➥ nv on mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
3437

So for exit just do exit:

(mixed-rust-erlang) ➥ echo$$
3437
(mixed-rust-erlang) ➥ exitecho$$
112

Since version 0.7.2 you can use nv off in all cases to exit from environment.

Activating in the same shell

If you want to activate environment in the same shell do the following:

echo$$
5099
➥ nv on --same-shell mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
5099

To deactivate this shell don't use exit, use nv off:

(mixed-rust-erlang) ➥ echo$$
5099
(mixed-rust-erlang) ➥ nv off
Environment mixed-rust-erlang was deactivated.
➥ echo$$
5099

Get list of environments

➥ nv ls
Available environment(s):
mixed-rust-erlang
rust-0.9
erl-17-rc1

Get current activated environment

(mixed-rust-erlang) ➥ nv current
mixed-rust-erlang

It will return empty, if environment is not activated:

➥ nv current
➥ 

Do something in environment without enabling it

➥ nv do node-0.10.26 'npm -g ls'

Export environment into tar archive

➥ nv export node-0.10.26
Environment php-5.5.11 archived into /home/user/current/directory/node-0.10.26.tar

Import environment from tar archive

➥ nv import /home/user/current/directory/node-0.10.26.tar node-0.10.26-new
Archive /home/user/current/directory/node-0.10.26.tar imported into node-0.10.26-new

Get help

➥ nv --help

Get help for a command

For example, for do command:

➥ nv do --help

How to add a plugin?

All plugins are in the directory nv-plugins. If you need to add support for a new language you should add it as plugin inside this directory.

Mandatory elements

If you create a plugin which builds all stuff from source then In a simplest case you need to implement 2 functions in the plugin's body:

plug_list_versions

This function should return list of available versions of the plugin. For example:

plug_list_versions() {
local versions=$(curl -s "http://nodejs.org/dist"| \ grep -v "node-"| \ egrep -o '[0-9]+\.[0-9]+\.[0-9]+'| \ sort -u -k 1,1n -k 2,2n -k 3,3n -t .)echo$versions
}

plug_url_for_download

This function should return full url for downloading tarball. For example:

plug_url_for_download() {
local version=$1echo"http://nodejs.org/dist/v${version}/node-v${version}.tar.gz"
}

plug_build

This function is only need for *-prebuilt-like plugins. It overrides default building proccess. All we need in case of *-prebuilt-like plugin is only copy binaries. For example:

plug_build() {
local src_path=$1local build_path=$2
cp -r "$src_path"/*/*"$build_path"
}

Typical language installation listed in plug_install_default function in mk command.

If installation is not typical then you should implement plug_install function with yourself. For example: julia.

Optional elements

Variables

  • plug_list_versions_columns_count — number of the columns in the output of the nv ls-version for each plugin
  • plug_list_versions_columns_size — each column width in chars in the output of the nv ls-version for each plugin
  • plug_state — if == disabled then plugin is not active and will not be account in the commands:
    • mk
    • ls-versions
    • ls-plugins

Functions

In execute order:

  • plug_check_deps — check dependencies before plugin building. If it returns not empty string then environment creation stops. Example is in haskell plugin
  • plug_install — overrides the whole installation process
  • plug_download — overrides default downloading sources (archive)
  • plug_unpack — overrides default tar xzf <archive-with-source>
  • plug_configure — overrides default configure --prefix=<path-to-env>
  • plug_build — overrides default make && make install
  • plug_build_env — overrides copying binaries into new environment
  • plug_post_install_actions — executes after installation. For example pip installation in the python plugin

Examples

Example of the usage

Here is an example of building hugo static site generator under envirius with go plugin:

$ whereis go
go:
$ nv mk go-hugo-test --go=1.2.1
Creating environment: go-hugo-test ...
* installing go==1.2.1 ...
*done (in 8 secs.)
$ nv ls Available environment(s):
go-hugo-test (go==1.2.1)
$ nv on go-hugo-test
(go-hugo-test) $ go get github.com/spf13/hugo
(go-hugo-test) $ cd$GOPATH/src/github.com/spf13/hugo
(go-hugo-test) $ go build -o hugo main.go
(go-hugo-test) $ hugo version
Hugo Static Site Generator v0.11-dev

Dependencies

  • bash / zsh (very basic support)
  • curl / wget
  • tar
  • git
  • gcc
  • bats

Supported OS

  • ubuntu

Tests

Most of the code is covered by tests. For testing bats was used. To run tests:

➥ make tests

With hot cache on Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz with 4 GB of RAM on Ubuntu 13.10 (32-bits) tests takes:

time make tests
...
100 tests, 0 failure
real 8m26.572s
user 1m17.428s
sys 2m25.352s

Version History

See CHANGELOG.md.

License

See LICENSE.

README in another language

RU

About

Universal Virtual Environments Manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

envirius

envirius — universal virtual environments manager.

Table of Contents

Idea

Usually this kind of tools narrowly specialized for a particular programming language. For example:

But there are many cases when in the same environment you must have more than one programming language. For example, to create an environment with python2.6 and node.js 0.10.24. This idea underlies envirius.

Support for new programming languages are implemented as plug-ins (see below).

Features

  • clean design
  • easy extensible
  • test coverage

Installation

At first:

$ git clone https://github.com/ekalinin/envirius.git
$ cd envirius
$ make install

Then youd need to add into your .bashrc the following:

[ -f"$HOME/.envirius/nv" ] &&.~/.envirius/nv

Uninstallation

Just do the following:

$ cd envirius
$ make uninstall

Cache and previously created environments will not be deleted.

Available plugins

You can create environments for the following programming languages:

New languages can be added as plugins (see below).

Usage

Check available plugins

➥ nv ls-plugins
elixir
elixir-prebuilt
erlang
go-prebuilt
haskell
haskell-prebuilt
iojs
iojs-prebuilt
julia
node
node-prebuilt
python
rust
rust-prebuilt
scala

Here you can see two types of plugins:

  • which downloads & builds from source (elixir, erlang, …)
  • which just downloads prebuilt packages (elixir-prebuilt, node-prebuilt, …)

It's obviously that work with the second option will be much faster because compiling may takes huge amount of time.

Unfortunately, not all languages is available in prebuilt binaries.

Check available versions for each plugin

➥ nv ls-versions --rust --erlang
* rust:
0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9
* erlang:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4
R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0
R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0
R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02-1 R13B02 R13B03 R13B04
R14A R14B R14B01 R14B02 R14B03 R14B04
R15B R15B01 R15B02 R15B02 R15B03-1 R15B03
R16A R16B R16B01 R16B02 R16B03-1 R16B03
17.0-rc1

Create an environment

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1
Creating environment: mixed-rust-erlang ...
* installing rust==0.9 ...
*done (in 5 secs.)
* installing erlang==17.0-rc1 ...
*done (in 11 secs.)

If you want to activate new environment just right after it creation, then do the following:

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1 --on
Creating environment: mixed-rust-erlang ...
....
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ 

Activate/deactivate environment

Activating in a new shell

By default activating environment executes in a new shell:

echo$$
112
➥ nv on mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
3437

So for exit just do exit:

(mixed-rust-erlang) ➥ echo$$
3437
(mixed-rust-erlang) ➥ exitecho$$
112

Since version 0.7.2 you can use nv off in all cases to exit from environment.

Activating in the same shell

If you want to activate environment in the same shell do the following:

echo$$
5099
➥ nv on --same-shell mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
5099

To deactivate this shell don't use exit, use nv off:

(mixed-rust-erlang) ➥ echo$$
5099
(mixed-rust-erlang) ➥ nv off
Environment mixed-rust-erlang was deactivated.
➥ echo$$
5099

Get list of environments

➥ nv ls
Available environment(s):
mixed-rust-erlang
rust-0.9
erl-17-rc1

Get current activated environment

(mixed-rust-erlang) ➥ nv current
mixed-rust-erlang

It will return empty, if environment is not activated:

➥ nv current
➥ 

Do something in environment without enabling it

➥ nv do node-0.10.26 'npm -g ls'

Export environment into tar archive

➥ nv export node-0.10.26
Environment php-5.5.11 archived into /home/user/current/directory/node-0.10.26.tar

Import environment from tar archive

➥ nv import /home/user/current/directory/node-0.10.26.tar node-0.10.26-new
Archive /home/user/current/directory/node-0.10.26.tar imported into node-0.10.26-new

Get help

➥ nv --help

Get help for a command

For example, for do command:

➥ nv do --help

How to add a plugin?

All plugins are in the directory nv-plugins. If you need to add support for a new language you should add it as plugin inside this directory.

Mandatory elements

If you create a plugin which builds all stuff from source then In a simplest case you need to implement 2 functions in the plugin's body:

plug_list_versions

This function should return list of available versions of the plugin. For example:

plug_list_versions() {
local versions=$(curl -s "http://nodejs.org/dist"| \ grep -v "node-"| \ egrep -o '[0-9]+\.[0-9]+\.[0-9]+'| \ sort -u -k 1,1n -k 2,2n -k 3,3n -t .)echo$versions
}

plug_url_for_download

This function should return full url for downloading tarball. For example:

plug_url_for_download() {
local version=$1echo"http://nodejs.org/dist/v${version}/node-v${version}.tar.gz"
}

plug_build

This function is only need for *-prebuilt-like plugins. It overrides default building proccess. All we need in case of *-prebuilt-like plugin is only copy binaries. For example:

plug_build() {
local src_path=$1local build_path=$2
cp -r "$src_path"/*/*"$build_path"
}

Typical language installation listed in plug_install_default function in mk command.

If installation is not typical then you should implement plug_install function with yourself. For example: julia.

Optional elements

Variables

  • plug_list_versions_columns_count — number of the columns in the output of the nv ls-version for each plugin
  • plug_list_versions_columns_size — each column width in chars in the output of the nv ls-version for each plugin
  • plug_state — if == disabled then plugin is not active and will not be account in the commands:
    • mk
    • ls-versions
    • ls-plugins

Functions

In execute order:

  • plug_check_deps — check dependencies before plugin building. If it returns not empty string then environment creation stops. Example is in haskell plugin
  • plug_install — overrides the whole installation process
  • plug_download — overrides default downloading sources (archive)
  • plug_unpack — overrides default tar xzf <archive-with-source>
  • plug_configure — overrides default configure --prefix=<path-to-env>
  • plug_build — overrides default make && make install
  • plug_build_env — overrides copying binaries into new environment
  • plug_post_install_actions — executes after installation. For example pip installation in the python plugin

Examples

Example of the usage

Here is an example of building hugo static site generator under envirius with go plugin:

$ whereis go
go:
$ nv mk go-hugo-test --go=1.2.1
Creating environment: go-hugo-test ...
* installing go==1.2.1 ...
*done (in 8 secs.)
$ nv ls Available environment(s):
go-hugo-test (go==1.2.1)
$ nv on go-hugo-test
(go-hugo-test) $ go get github.com/spf13/hugo
(go-hugo-test) $ cd$GOPATH/src/github.com/spf13/hugo
(go-hugo-test) $ go build -o hugo main.go
(go-hugo-test) $ hugo version
Hugo Static Site Generator v0.11-dev

Dependencies

  • bash / zsh (very basic support)
  • curl / wget
  • tar
  • git
  • gcc
  • bats

Supported OS

  • ubuntu

Tests

Most of the code is covered by tests. For testing bats was used. To run tests:

➥ make tests

With hot cache on Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz with 4 GB of RAM on Ubuntu 13.10 (32-bits) tests takes:

time make tests
...
100 tests, 0 failure
real 8m26.572s
user 1m17.428s
sys 2m25.352s

Version History

See CHANGELOG.md.

License

See LICENSE.

README in another language

RU

About

Universal Virtual Environments Manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

envirius

envirius — universal virtual environments manager.

Table of Contents

Idea

Usually this kind of tools narrowly specialized for a particular programming language. For example:

But there are many cases when in the same environment you must have more than one programming language. For example, to create an environment with python2.6 and node.js 0.10.24. This idea underlies envirius.

Support for new programming languages are implemented as plug-ins (see below).

Features

  • clean design
  • easy extensible
  • test coverage

Installation

At first:

$ git clone https://github.com/ekalinin/envirius.git
$ cd envirius
$ make install

Then youd need to add into your .bashrc the following:

[ -f"$HOME/.envirius/nv" ] &&.~/.envirius/nv

Uninstallation

Just do the following:

$ cd envirius
$ make uninstall

Cache and previously created environments will not be deleted.

Available plugins

You can create environments for the following programming languages:

New languages can be added as plugins (see below).

Usage

Check available plugins

➥ nv ls-plugins
elixir
elixir-prebuilt
erlang
go-prebuilt
haskell
haskell-prebuilt
iojs
iojs-prebuilt
julia
node
node-prebuilt
python
rust
rust-prebuilt
scala

Here you can see two types of plugins:

  • which downloads & builds from source (elixir, erlang, …)
  • which just downloads prebuilt packages (elixir-prebuilt, node-prebuilt, …)

It's obviously that work with the second option will be much faster because compiling may takes huge amount of time.

Unfortunately, not all languages is available in prebuilt binaries.

Check available versions for each plugin

➥ nv ls-versions --rust --erlang
* rust:
0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9
* erlang:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4
R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0
R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0
R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02-1 R13B02 R13B03 R13B04
R14A R14B R14B01 R14B02 R14B03 R14B04
R15B R15B01 R15B02 R15B02 R15B03-1 R15B03
R16A R16B R16B01 R16B02 R16B03-1 R16B03
17.0-rc1

Create an environment

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1
Creating environment: mixed-rust-erlang ...
* installing rust==0.9 ...
*done (in 5 secs.)
* installing erlang==17.0-rc1 ...
*done (in 11 secs.)

If you want to activate new environment just right after it creation, then do the following:

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1 --on
Creating environment: mixed-rust-erlang ...
....
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ 

Activate/deactivate environment

Activating in a new shell

By default activating environment executes in a new shell:

echo$$
112
➥ nv on mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
3437

So for exit just do exit:

(mixed-rust-erlang) ➥ echo$$
3437
(mixed-rust-erlang) ➥ exitecho$$
112

Since version 0.7.2 you can use nv off in all cases to exit from environment.

Activating in the same shell

If you want to activate environment in the same shell do the following:

echo$$
5099
➥ nv on --same-shell mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
5099

To deactivate this shell don't use exit, use nv off:

(mixed-rust-erlang) ➥ echo$$
5099
(mixed-rust-erlang) ➥ nv off
Environment mixed-rust-erlang was deactivated.
➥ echo$$
5099

Get list of environments

➥ nv ls
Available environment(s):
mixed-rust-erlang
rust-0.9
erl-17-rc1

Get current activated environment

(mixed-rust-erlang) ➥ nv current
mixed-rust-erlang

It will return empty, if environment is not activated:

➥ nv current
➥ 

Do something in environment without enabling it

➥ nv do node-0.10.26 'npm -g ls'

Export environment into tar archive

➥ nv export node-0.10.26
Environment php-5.5.11 archived into /home/user/current/directory/node-0.10.26.tar

Import environment from tar archive

➥ nv import /home/user/current/directory/node-0.10.26.tar node-0.10.26-new
Archive /home/user/current/directory/node-0.10.26.tar imported into node-0.10.26-new

Get help

➥ nv --help

Get help for a command

For example, for do command:

➥ nv do --help

How to add a plugin?

All plugins are in the directory nv-plugins. If you need to add support for a new language you should add it as plugin inside this directory.

Mandatory elements

If you create a plugin which builds all stuff from source then In a simplest case you need to implement 2 functions in the plugin's body:

plug_list_versions

This function should return list of available versions of the plugin. For example:

plug_list_versions() {
local versions=$(curl -s "http://nodejs.org/dist"| \ grep -v "node-"| \ egrep -o '[0-9]+\.[0-9]+\.[0-9]+'| \ sort -u -k 1,1n -k 2,2n -k 3,3n -t .)echo$versions
}

plug_url_for_download

This function should return full url for downloading tarball. For example:

plug_url_for_download() {
local version=$1echo"http://nodejs.org/dist/v${version}/node-v${version}.tar.gz"
}

plug_build

This function is only need for *-prebuilt-like plugins. It overrides default building proccess. All we need in case of *-prebuilt-like plugin is only copy binaries. For example:

plug_build() {
local src_path=$1local build_path=$2
cp -r "$src_path"/*/*"$build_path"
}

Typical language installation listed in plug_install_default function in mk command.

If installation is not typical then you should implement plug_install function with yourself. For example: julia.

Optional elements

Variables

  • plug_list_versions_columns_count — number of the columns in the output of the nv ls-version for each plugin
  • plug_list_versions_columns_size — each column width in chars in the output of the nv ls-version for each plugin
  • plug_state — if == disabled then plugin is not active and will not be account in the commands:
    • mk
    • ls-versions
    • ls-plugins

Functions

In execute order:

  • plug_check_deps — check dependencies before plugin building. If it returns not empty string then environment creation stops. Example is in haskell plugin
  • plug_install — overrides the whole installation process
  • plug_download — overrides default downloading sources (archive)
  • plug_unpack — overrides default tar xzf <archive-with-source>
  • plug_configure — overrides default configure --prefix=<path-to-env>
  • plug_build — overrides default make && make install
  • plug_build_env — overrides copying binaries into new environment
  • plug_post_install_actions — executes after installation. For example pip installation in the python plugin

Examples

Example of the usage

Here is an example of building hugo static site generator under envirius with go plugin:

$ whereis go
go:
$ nv mk go-hugo-test --go=1.2.1
Creating environment: go-hugo-test ...
* installing go==1.2.1 ...
*done (in 8 secs.)
$ nv ls Available environment(s):
go-hugo-test (go==1.2.1)
$ nv on go-hugo-test
(go-hugo-test) $ go get github.com/spf13/hugo
(go-hugo-test) $ cd$GOPATH/src/github.com/spf13/hugo
(go-hugo-test) $ go build -o hugo main.go
(go-hugo-test) $ hugo version
Hugo Static Site Generator v0.11-dev

Dependencies

  • bash / zsh (very basic support)
  • curl / wget
  • tar
  • git
  • gcc
  • bats

Supported OS

  • ubuntu

Tests

Most of the code is covered by tests. For testing bats was used. To run tests:

➥ make tests

With hot cache on Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz with 4 GB of RAM on Ubuntu 13.10 (32-bits) tests takes:

time make tests
...
100 tests, 0 failure
real 8m26.572s
user 1m17.428s
sys 2m25.352s

Version History

See CHANGELOG.md.

License

See LICENSE.

README in another language

RU

About

Universal Virtual Environments Manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

envirius

envirius — universal virtual environments manager.

Table of Contents

Idea

Usually this kind of tools narrowly specialized for a particular programming language. For example:

But there are many cases when in the same environment you must have more than one programming language. For example, to create an environment with python2.6 and node.js 0.10.24. This idea underlies envirius.

Support for new programming languages are implemented as plug-ins (see below).

Features

  • clean design
  • easy extensible
  • test coverage

Installation

At first:

$ git clone https://github.com/ekalinin/envirius.git
$ cd envirius
$ make install

Then youd need to add into your .bashrc the following:

[ -f"$HOME/.envirius/nv" ] &&.~/.envirius/nv

Uninstallation

Just do the following:

$ cd envirius
$ make uninstall

Cache and previously created environments will not be deleted.

Available plugins

You can create environments for the following programming languages:

New languages can be added as plugins (see below).

Usage

Check available plugins

➥ nv ls-plugins
elixir
elixir-prebuilt
erlang
go-prebuilt
haskell
haskell-prebuilt
iojs
iojs-prebuilt
julia
node
node-prebuilt
python
rust
rust-prebuilt
scala

Here you can see two types of plugins:

  • which downloads & builds from source (elixir, erlang, …)
  • which just downloads prebuilt packages (elixir-prebuilt, node-prebuilt, …)

It's obviously that work with the second option will be much faster because compiling may takes huge amount of time.

Unfortunately, not all languages is available in prebuilt binaries.

Check available versions for each plugin

➥ nv ls-versions --rust --erlang
* rust:
0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9
* erlang:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4
R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0
R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0
R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02-1 R13B02 R13B03 R13B04
R14A R14B R14B01 R14B02 R14B03 R14B04
R15B R15B01 R15B02 R15B02 R15B03-1 R15B03
R16A R16B R16B01 R16B02 R16B03-1 R16B03
17.0-rc1

Create an environment

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1
Creating environment: mixed-rust-erlang ...
* installing rust==0.9 ...
*done (in 5 secs.)
* installing erlang==17.0-rc1 ...
*done (in 11 secs.)

If you want to activate new environment just right after it creation, then do the following:

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1 --on
Creating environment: mixed-rust-erlang ...
....
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ 

Activate/deactivate environment

Activating in a new shell

By default activating environment executes in a new shell:

echo$$
112
➥ nv on mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
3437

So for exit just do exit:

(mixed-rust-erlang) ➥ echo$$
3437
(mixed-rust-erlang) ➥ exitecho$$
112

Since version 0.7.2 you can use nv off in all cases to exit from environment.

Activating in the same shell

If you want to activate environment in the same shell do the following:

echo$$
5099
➥ nv on --same-shell mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
5099

To deactivate this shell don't use exit, use nv off:

(mixed-rust-erlang) ➥ echo$$
5099
(mixed-rust-erlang) ➥ nv off
Environment mixed-rust-erlang was deactivated.
➥ echo$$
5099

Get list of environments

➥ nv ls
Available environment(s):
mixed-rust-erlang
rust-0.9
erl-17-rc1

Get current activated environment

(mixed-rust-erlang) ➥ nv current
mixed-rust-erlang

It will return empty, if environment is not activated:

➥ nv current
➥ 

Do something in environment without enabling it

➥ nv do node-0.10.26 'npm -g ls'

Export environment into tar archive

➥ nv export node-0.10.26
Environment php-5.5.11 archived into /home/user/current/directory/node-0.10.26.tar

Import environment from tar archive

➥ nv import /home/user/current/directory/node-0.10.26.tar node-0.10.26-new
Archive /home/user/current/directory/node-0.10.26.tar imported into node-0.10.26-new

Get help

➥ nv --help

Get help for a command

For example, for do command:

➥ nv do --help

How to add a plugin?

All plugins are in the directory nv-plugins. If you need to add support for a new language you should add it as plugin inside this directory.

Mandatory elements

If you create a plugin which builds all stuff from source then In a simplest case you need to implement 2 functions in the plugin's body:

plug_list_versions

This function should return list of available versions of the plugin. For example:

plug_list_versions() {
local versions=$(curl -s "http://nodejs.org/dist"| \ grep -v "node-"| \ egrep -o '[0-9]+\.[0-9]+\.[0-9]+'| \ sort -u -k 1,1n -k 2,2n -k 3,3n -t .)echo$versions
}

plug_url_for_download

This function should return full url for downloading tarball. For example:

plug_url_for_download() {
local version=$1echo"http://nodejs.org/dist/v${version}/node-v${version}.tar.gz"
}

plug_build

This function is only need for *-prebuilt-like plugins. It overrides default building proccess. All we need in case of *-prebuilt-like plugin is only copy binaries. For example:

plug_build() {
local src_path=$1local build_path=$2
cp -r "$src_path"/*/*"$build_path"
}

Typical language installation listed in plug_install_default function in mk command.

If installation is not typical then you should implement plug_install function with yourself. For example: julia.

Optional elements

Variables

  • plug_list_versions_columns_count — number of the columns in the output of the nv ls-version for each plugin
  • plug_list_versions_columns_size — each column width in chars in the output of the nv ls-version for each plugin
  • plug_state — if == disabled then plugin is not active and will not be account in the commands:
    • mk
    • ls-versions
    • ls-plugins

Functions

In execute order:

  • plug_check_deps — check dependencies before plugin building. If it returns not empty string then environment creation stops. Example is in haskell plugin
  • plug_install — overrides the whole installation process
  • plug_download — overrides default downloading sources (archive)
  • plug_unpack — overrides default tar xzf <archive-with-source>
  • plug_configure — overrides default configure --prefix=<path-to-env>
  • plug_build — overrides default make && make install
  • plug_build_env — overrides copying binaries into new environment
  • plug_post_install_actions — executes after installation. For example pip installation in the python plugin

Examples

Example of the usage

Here is an example of building hugo static site generator under envirius with go plugin:

$ whereis go
go:
$ nv mk go-hugo-test --go=1.2.1
Creating environment: go-hugo-test ...
* installing go==1.2.1 ...
*done (in 8 secs.)
$ nv ls Available environment(s):
go-hugo-test (go==1.2.1)
$ nv on go-hugo-test
(go-hugo-test) $ go get github.com/spf13/hugo
(go-hugo-test) $ cd$GOPATH/src/github.com/spf13/hugo
(go-hugo-test) $ go build -o hugo main.go
(go-hugo-test) $ hugo version
Hugo Static Site Generator v0.11-dev

Dependencies

  • bash / zsh (very basic support)
  • curl / wget
  • tar
  • git
  • gcc
  • bats

Supported OS

  • ubuntu

Tests

Most of the code is covered by tests. For testing bats was used. To run tests:

➥ make tests

With hot cache on Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz with 4 GB of RAM on Ubuntu 13.10 (32-bits) tests takes:

time make tests
...
100 tests, 0 failure
real 8m26.572s
user 1m17.428s
sys 2m25.352s

Version History

See CHANGELOG.md.

License

See LICENSE.

README in another language

RU

About

Universal Virtual Environments Manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

envirius

envirius — universal virtual environments manager.

Table of Contents

Idea

Usually this kind of tools narrowly specialized for a particular programming language. For example:

But there are many cases when in the same environment you must have more than one programming language. For example, to create an environment with python2.6 and node.js 0.10.24. This idea underlies envirius.

Support for new programming languages are implemented as plug-ins (see below).

Features

  • clean design
  • easy extensible
  • test coverage

Installation

At first:

$ git clone https://github.com/ekalinin/envirius.git
$ cd envirius
$ make install

Then youd need to add into your .bashrc the following:

[ -f"$HOME/.envirius/nv" ] &&.~/.envirius/nv

Uninstallation

Just do the following:

$ cd envirius
$ make uninstall

Cache and previously created environments will not be deleted.

Available plugins

You can create environments for the following programming languages:

New languages can be added as plugins (see below).

Usage

Check available plugins

➥ nv ls-plugins
elixir
elixir-prebuilt
erlang
go-prebuilt
haskell
haskell-prebuilt
iojs
iojs-prebuilt
julia
node
node-prebuilt
python
rust
rust-prebuilt
scala

Here you can see two types of plugins:

  • which downloads & builds from source (elixir, erlang, …)
  • which just downloads prebuilt packages (elixir-prebuilt, node-prebuilt, …)

It's obviously that work with the second option will be much faster because compiling may takes huge amount of time.

Unfortunately, not all languages is available in prebuilt binaries.

Check available versions for each plugin

➥ nv ls-versions --rust --erlang
* rust:
0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9
* erlang:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4
R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0
R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0
R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02-1 R13B02 R13B03 R13B04
R14A R14B R14B01 R14B02 R14B03 R14B04
R15B R15B01 R15B02 R15B02 R15B03-1 R15B03
R16A R16B R16B01 R16B02 R16B03-1 R16B03
17.0-rc1

Create an environment

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1
Creating environment: mixed-rust-erlang ...
* installing rust==0.9 ...
*done (in 5 secs.)
* installing erlang==17.0-rc1 ...
*done (in 11 secs.)

If you want to activate new environment just right after it creation, then do the following:

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1 --on
Creating environment: mixed-rust-erlang ...
....
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ 

Activate/deactivate environment

Activating in a new shell

By default activating environment executes in a new shell:

echo$$
112
➥ nv on mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
3437

So for exit just do exit:

(mixed-rust-erlang) ➥ echo$$
3437
(mixed-rust-erlang) ➥ exitecho$$
112

Since version 0.7.2 you can use nv off in all cases to exit from environment.

Activating in the same shell

If you want to activate environment in the same shell do the following:

echo$$
5099
➥ nv on --same-shell mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
5099

To deactivate this shell don't use exit, use nv off:

(mixed-rust-erlang) ➥ echo$$
5099
(mixed-rust-erlang) ➥ nv off
Environment mixed-rust-erlang was deactivated.
➥ echo$$
5099

Get list of environments

➥ nv ls
Available environment(s):
mixed-rust-erlang
rust-0.9
erl-17-rc1

Get current activated environment

(mixed-rust-erlang) ➥ nv current
mixed-rust-erlang

It will return empty, if environment is not activated:

➥ nv current
➥ 

Do something in environment without enabling it

➥ nv do node-0.10.26 'npm -g ls'

Export environment into tar archive

➥ nv export node-0.10.26
Environment php-5.5.11 archived into /home/user/current/directory/node-0.10.26.tar

Import environment from tar archive

➥ nv import /home/user/current/directory/node-0.10.26.tar node-0.10.26-new
Archive /home/user/current/directory/node-0.10.26.tar imported into node-0.10.26-new

Get help

➥ nv --help

Get help for a command

For example, for do command:

➥ nv do --help

How to add a plugin?

All plugins are in the directory nv-plugins. If you need to add support for a new language you should add it as plugin inside this directory.

Mandatory elements

If you create a plugin which builds all stuff from source then In a simplest case you need to implement 2 functions in the plugin's body:

plug_list_versions

This function should return list of available versions of the plugin. For example:

plug_list_versions() {
local versions=$(curl -s "http://nodejs.org/dist"| \ grep -v "node-"| \ egrep -o '[0-9]+\.[0-9]+\.[0-9]+'| \ sort -u -k 1,1n -k 2,2n -k 3,3n -t .)echo$versions
}

plug_url_for_download

This function should return full url for downloading tarball. For example:

plug_url_for_download() {
local version=$1echo"http://nodejs.org/dist/v${version}/node-v${version}.tar.gz"
}

plug_build

This function is only need for *-prebuilt-like plugins. It overrides default building proccess. All we need in case of *-prebuilt-like plugin is only copy binaries. For example:

plug_build() {
local src_path=$1local build_path=$2
cp -r "$src_path"/*/*"$build_path"
}

Typical language installation listed in plug_install_default function in mk command.

If installation is not typical then you should implement plug_install function with yourself. For example: julia.

Optional elements

Variables

  • plug_list_versions_columns_count — number of the columns in the output of the nv ls-version for each plugin
  • plug_list_versions_columns_size — each column width in chars in the output of the nv ls-version for each plugin
  • plug_state — if == disabled then plugin is not active and will not be account in the commands:
    • mk
    • ls-versions
    • ls-plugins

Functions

In execute order:

  • plug_check_deps — check dependencies before plugin building. If it returns not empty string then environment creation stops. Example is in haskell plugin
  • plug_install — overrides the whole installation process
  • plug_download — overrides default downloading sources (archive)
  • plug_unpack — overrides default tar xzf <archive-with-source>
  • plug_configure — overrides default configure --prefix=<path-to-env>
  • plug_build — overrides default make && make install
  • plug_build_env — overrides copying binaries into new environment
  • plug_post_install_actions — executes after installation. For example pip installation in the python plugin

Examples

Example of the usage

Here is an example of building hugo static site generator under envirius with go plugin:

$ whereis go
go:
$ nv mk go-hugo-test --go=1.2.1
Creating environment: go-hugo-test ...
* installing go==1.2.1 ...
*done (in 8 secs.)
$ nv ls Available environment(s):
go-hugo-test (go==1.2.1)
$ nv on go-hugo-test
(go-hugo-test) $ go get github.com/spf13/hugo
(go-hugo-test) $ cd$GOPATH/src/github.com/spf13/hugo
(go-hugo-test) $ go build -o hugo main.go
(go-hugo-test) $ hugo version
Hugo Static Site Generator v0.11-dev

Dependencies

  • bash / zsh (very basic support)
  • curl / wget
  • tar
  • git
  • gcc
  • bats

Supported OS

  • ubuntu

Tests

Most of the code is covered by tests. For testing bats was used. To run tests:

➥ make tests

With hot cache on Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz with 4 GB of RAM on Ubuntu 13.10 (32-bits) tests takes:

time make tests
...
100 tests, 0 failure
real 8m26.572s
user 1m17.428s
sys 2m25.352s

Version History

See CHANGELOG.md.

License

See LICENSE.

README in another language

RU

About

Universal Virtual Environments Manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

envirius

envirius — universal virtual environments manager.

Table of Contents

Idea

Usually this kind of tools narrowly specialized for a particular programming language. For example:

But there are many cases when in the same environment you must have more than one programming language. For example, to create an environment with python2.6 and node.js 0.10.24. This idea underlies envirius.

Support for new programming languages are implemented as plug-ins (see below).

Features

  • clean design
  • easy extensible
  • test coverage

Installation

At first:

$ git clone https://github.com/ekalinin/envirius.git
$ cd envirius
$ make install

Then youd need to add into your .bashrc the following:

[ -f"$HOME/.envirius/nv" ] &&.~/.envirius/nv

Uninstallation

Just do the following:

$ cd envirius
$ make uninstall

Cache and previously created environments will not be deleted.

Available plugins

You can create environments for the following programming languages:

New languages can be added as plugins (see below).

Usage

Check available plugins

➥ nv ls-plugins
elixir
elixir-prebuilt
erlang
go-prebuilt
haskell
haskell-prebuilt
iojs
iojs-prebuilt
julia
node
node-prebuilt
python
rust
rust-prebuilt
scala

Here you can see two types of plugins:

  • which downloads & builds from source (elixir, erlang, …)
  • which just downloads prebuilt packages (elixir-prebuilt, node-prebuilt, …)

It's obviously that work with the second option will be much faster because compiling may takes huge amount of time.

Unfortunately, not all languages is available in prebuilt binaries.

Check available versions for each plugin

➥ nv ls-versions --rust --erlang
* rust:
0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9
* erlang:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4
R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0
R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0
R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02-1 R13B02 R13B03 R13B04
R14A R14B R14B01 R14B02 R14B03 R14B04
R15B R15B01 R15B02 R15B02 R15B03-1 R15B03
R16A R16B R16B01 R16B02 R16B03-1 R16B03
17.0-rc1

Create an environment

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1
Creating environment: mixed-rust-erlang ...
* installing rust==0.9 ...
*done (in 5 secs.)
* installing erlang==17.0-rc1 ...
*done (in 11 secs.)

If you want to activate new environment just right after it creation, then do the following:

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1 --on
Creating environment: mixed-rust-erlang ...
....
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ 

Activate/deactivate environment

Activating in a new shell

By default activating environment executes in a new shell:

echo$$
112
➥ nv on mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
3437

So for exit just do exit:

(mixed-rust-erlang) ➥ echo$$
3437
(mixed-rust-erlang) ➥ exitecho$$
112

Since version 0.7.2 you can use nv off in all cases to exit from environment.

Activating in the same shell

If you want to activate environment in the same shell do the following:

echo$$
5099
➥ nv on --same-shell mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
5099

To deactivate this shell don't use exit, use nv off:

(mixed-rust-erlang) ➥ echo$$
5099
(mixed-rust-erlang) ➥ nv off
Environment mixed-rust-erlang was deactivated.
➥ echo$$
5099

Get list of environments

➥ nv ls
Available environment(s):
mixed-rust-erlang
rust-0.9
erl-17-rc1

Get current activated environment

(mixed-rust-erlang) ➥ nv current
mixed-rust-erlang

It will return empty, if environment is not activated:

➥ nv current
➥ 

Do something in environment without enabling it

➥ nv do node-0.10.26 'npm -g ls'

Export environment into tar archive

➥ nv export node-0.10.26
Environment php-5.5.11 archived into /home/user/current/directory/node-0.10.26.tar

Import environment from tar archive

➥ nv import /home/user/current/directory/node-0.10.26.tar node-0.10.26-new
Archive /home/user/current/directory/node-0.10.26.tar imported into node-0.10.26-new

Get help

➥ nv --help

Get help for a command

For example, for do command:

➥ nv do --help

How to add a plugin?

All plugins are in the directory nv-plugins. If you need to add support for a new language you should add it as plugin inside this directory.

Mandatory elements

If you create a plugin which builds all stuff from source then In a simplest case you need to implement 2 functions in the plugin's body:

plug_list_versions

This function should return list of available versions of the plugin. For example:

plug_list_versions() {
local versions=$(curl -s "http://nodejs.org/dist"| \ grep -v "node-"| \ egrep -o '[0-9]+\.[0-9]+\.[0-9]+'| \ sort -u -k 1,1n -k 2,2n -k 3,3n -t .)echo$versions
}

plug_url_for_download

This function should return full url for downloading tarball. For example:

plug_url_for_download() {
local version=$1echo"http://nodejs.org/dist/v${version}/node-v${version}.tar.gz"
}

plug_build

This function is only need for *-prebuilt-like plugins. It overrides default building proccess. All we need in case of *-prebuilt-like plugin is only copy binaries. For example:

plug_build() {
local src_path=$1local build_path=$2
cp -r "$src_path"/*/*"$build_path"
}

Typical language installation listed in plug_install_default function in mk command.

If installation is not typical then you should implement plug_install function with yourself. For example: julia.

Optional elements

Variables

  • plug_list_versions_columns_count — number of the columns in the output of the nv ls-version for each plugin
  • plug_list_versions_columns_size — each column width in chars in the output of the nv ls-version for each plugin
  • plug_state — if == disabled then plugin is not active and will not be account in the commands:
    • mk
    • ls-versions
    • ls-plugins

Functions

In execute order:

  • plug_check_deps — check dependencies before plugin building. If it returns not empty string then environment creation stops. Example is in haskell plugin
  • plug_install — overrides the whole installation process
  • plug_download — overrides default downloading sources (archive)
  • plug_unpack — overrides default tar xzf <archive-with-source>
  • plug_configure — overrides default configure --prefix=<path-to-env>
  • plug_build — overrides default make && make install
  • plug_build_env — overrides copying binaries into new environment
  • plug_post_install_actions — executes after installation. For example pip installation in the python plugin

Examples

Example of the usage

Here is an example of building hugo static site generator under envirius with go plugin:

$ whereis go
go:
$ nv mk go-hugo-test --go=1.2.1
Creating environment: go-hugo-test ...
* installing go==1.2.1 ...
*done (in 8 secs.)
$ nv ls Available environment(s):
go-hugo-test (go==1.2.1)
$ nv on go-hugo-test
(go-hugo-test) $ go get github.com/spf13/hugo
(go-hugo-test) $ cd$GOPATH/src/github.com/spf13/hugo
(go-hugo-test) $ go build -o hugo main.go
(go-hugo-test) $ hugo version
Hugo Static Site Generator v0.11-dev

Dependencies

  • bash / zsh (very basic support)
  • curl / wget
  • tar
  • git
  • gcc
  • bats

Supported OS

  • ubuntu

Tests

Most of the code is covered by tests. For testing bats was used. To run tests:

➥ make tests

With hot cache on Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz with 4 GB of RAM on Ubuntu 13.10 (32-bits) tests takes:

time make tests
...
100 tests, 0 failure
real 8m26.572s
user 1m17.428s
sys 2m25.352s

Version History

See CHANGELOG.md.

License

See LICENSE.

README in another language

RU

About

Universal Virtual Environments Manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

envirius

envirius — universal virtual environments manager.

Table of Contents

Idea

Usually this kind of tools narrowly specialized for a particular programming language. For example:

But there are many cases when in the same environment you must have more than one programming language. For example, to create an environment with python2.6 and node.js 0.10.24. This idea underlies envirius.

Support for new programming languages are implemented as plug-ins (see below).

Features

  • clean design
  • easy extensible
  • test coverage

Installation

At first:

$ git clone https://github.com/ekalinin/envirius.git
$ cd envirius
$ make install

Then youd need to add into your .bashrc the following:

[ -f"$HOME/.envirius/nv" ] &&.~/.envirius/nv

Uninstallation

Just do the following:

$ cd envirius
$ make uninstall

Cache and previously created environments will not be deleted.

Available plugins

You can create environments for the following programming languages:

New languages can be added as plugins (see below).

Usage

Check available plugins

➥ nv ls-plugins
elixir
elixir-prebuilt
erlang
go-prebuilt
haskell
haskell-prebuilt
iojs
iojs-prebuilt
julia
node
node-prebuilt
python
rust
rust-prebuilt
scala

Here you can see two types of plugins:

  • which downloads & builds from source (elixir, erlang, …)
  • which just downloads prebuilt packages (elixir-prebuilt, node-prebuilt, …)

It's obviously that work with the second option will be much faster because compiling may takes huge amount of time.

Unfortunately, not all languages is available in prebuilt binaries.

Check available versions for each plugin

➥ nv ls-versions --rust --erlang
* rust:
0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9
* erlang:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4
R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0
R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0
R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02-1 R13B02 R13B03 R13B04
R14A R14B R14B01 R14B02 R14B03 R14B04
R15B R15B01 R15B02 R15B02 R15B03-1 R15B03
R16A R16B R16B01 R16B02 R16B03-1 R16B03
17.0-rc1

Create an environment

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1
Creating environment: mixed-rust-erlang ...
* installing rust==0.9 ...
*done (in 5 secs.)
* installing erlang==17.0-rc1 ...
*done (in 11 secs.)

If you want to activate new environment just right after it creation, then do the following:

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1 --on
Creating environment: mixed-rust-erlang ...
....
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ 

Activate/deactivate environment

Activating in a new shell

By default activating environment executes in a new shell:

echo$$
112
➥ nv on mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
3437

So for exit just do exit:

(mixed-rust-erlang) ➥ echo$$
3437
(mixed-rust-erlang) ➥ exitecho$$
112

Since version 0.7.2 you can use nv off in all cases to exit from environment.

Activating in the same shell

If you want to activate environment in the same shell do the following:

echo$$
5099
➥ nv on --same-shell mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
5099

To deactivate this shell don't use exit, use nv off:

(mixed-rust-erlang) ➥ echo$$
5099
(mixed-rust-erlang) ➥ nv off
Environment mixed-rust-erlang was deactivated.
➥ echo$$
5099

Get list of environments

➥ nv ls
Available environment(s):
mixed-rust-erlang
rust-0.9
erl-17-rc1

Get current activated environment

(mixed-rust-erlang) ➥ nv current
mixed-rust-erlang

It will return empty, if environment is not activated:

➥ nv current
➥ 

Do something in environment without enabling it

➥ nv do node-0.10.26 'npm -g ls'

Export environment into tar archive

➥ nv export node-0.10.26
Environment php-5.5.11 archived into /home/user/current/directory/node-0.10.26.tar

Import environment from tar archive

➥ nv import /home/user/current/directory/node-0.10.26.tar node-0.10.26-new
Archive /home/user/current/directory/node-0.10.26.tar imported into node-0.10.26-new

Get help

➥ nv --help

Get help for a command

For example, for do command:

➥ nv do --help

How to add a plugin?

All plugins are in the directory nv-plugins. If you need to add support for a new language you should add it as plugin inside this directory.

Mandatory elements

If you create a plugin which builds all stuff from source then In a simplest case you need to implement 2 functions in the plugin's body:

plug_list_versions

This function should return list of available versions of the plugin. For example:

plug_list_versions() {
local versions=$(curl -s "http://nodejs.org/dist"| \ grep -v "node-"| \ egrep -o '[0-9]+\.[0-9]+\.[0-9]+'| \ sort -u -k 1,1n -k 2,2n -k 3,3n -t .)echo$versions
}

plug_url_for_download

This function should return full url for downloading tarball. For example:

plug_url_for_download() {
local version=$1echo"http://nodejs.org/dist/v${version}/node-v${version}.tar.gz"
}

plug_build

This function is only need for *-prebuilt-like plugins. It overrides default building proccess. All we need in case of *-prebuilt-like plugin is only copy binaries. For example:

plug_build() {
local src_path=$1local build_path=$2
cp -r "$src_path"/*/*"$build_path"
}

Typical language installation listed in plug_install_default function in mk command.

If installation is not typical then you should implement plug_install function with yourself. For example: julia.

Optional elements

Variables

  • plug_list_versions_columns_count — number of the columns in the output of the nv ls-version for each plugin
  • plug_list_versions_columns_size — each column width in chars in the output of the nv ls-version for each plugin
  • plug_state — if == disabled then plugin is not active and will not be account in the commands:
    • mk
    • ls-versions
    • ls-plugins

Functions

In execute order:

  • plug_check_deps — check dependencies before plugin building. If it returns not empty string then environment creation stops. Example is in haskell plugin
  • plug_install — overrides the whole installation process
  • plug_download — overrides default downloading sources (archive)
  • plug_unpack — overrides default tar xzf <archive-with-source>
  • plug_configure — overrides default configure --prefix=<path-to-env>
  • plug_build — overrides default make && make install
  • plug_build_env — overrides copying binaries into new environment
  • plug_post_install_actions — executes after installation. For example pip installation in the python plugin

Examples

Example of the usage

Here is an example of building hugo static site generator under envirius with go plugin:

$ whereis go
go:
$ nv mk go-hugo-test --go=1.2.1
Creating environment: go-hugo-test ...
* installing go==1.2.1 ...
*done (in 8 secs.)
$ nv ls Available environment(s):
go-hugo-test (go==1.2.1)
$ nv on go-hugo-test
(go-hugo-test) $ go get github.com/spf13/hugo
(go-hugo-test) $ cd$GOPATH/src/github.com/spf13/hugo
(go-hugo-test) $ go build -o hugo main.go
(go-hugo-test) $ hugo version
Hugo Static Site Generator v0.11-dev

Dependencies

  • bash / zsh (very basic support)
  • curl / wget
  • tar
  • git
  • gcc
  • bats

Supported OS

  • ubuntu

Tests

Most of the code is covered by tests. For testing bats was used. To run tests:

➥ make tests

With hot cache on Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz with 4 GB of RAM on Ubuntu 13.10 (32-bits) tests takes:

time make tests
...
100 tests, 0 failure
real 8m26.572s
user 1m17.428s
sys 2m25.352s

Version History

See CHANGELOG.md.

License

See LICENSE.

README in another language

RU

About

Universal Virtual Environments Manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

envirius

envirius — universal virtual environments manager.

Table of Contents

Idea

Usually this kind of tools narrowly specialized for a particular programming language. For example:

But there are many cases when in the same environment you must have more than one programming language. For example, to create an environment with python2.6 and node.js 0.10.24. This idea underlies envirius.

Support for new programming languages are implemented as plug-ins (see below).

Features

  • clean design
  • easy extensible
  • test coverage

Installation

At first:

$ git clone https://github.com/ekalinin/envirius.git
$ cd envirius
$ make install

Then youd need to add into your .bashrc the following:

[ -f"$HOME/.envirius/nv" ] &&.~/.envirius/nv

Uninstallation

Just do the following:

$ cd envirius
$ make uninstall

Cache and previously created environments will not be deleted.

Available plugins

You can create environments for the following programming languages:

New languages can be added as plugins (see below).

Usage

Check available plugins

➥ nv ls-plugins
elixir
elixir-prebuilt
erlang
go-prebuilt
haskell
haskell-prebuilt
iojs
iojs-prebuilt
julia
node
node-prebuilt
python
rust
rust-prebuilt
scala

Here you can see two types of plugins:

  • which downloads & builds from source (elixir, erlang, …)
  • which just downloads prebuilt packages (elixir-prebuilt, node-prebuilt, …)

It's obviously that work with the second option will be much faster because compiling may takes huge amount of time.

Unfortunately, not all languages is available in prebuilt binaries.

Check available versions for each plugin

➥ nv ls-versions --rust --erlang
* rust:
0.1 0.2 0.3 0.4 0.5
0.6 0.7 0.8 0.9
* erlang:
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4
R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0
R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0
R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02-1 R13B02 R13B03 R13B04
R14A R14B R14B01 R14B02 R14B03 R14B04
R15B R15B01 R15B02 R15B02 R15B03-1 R15B03
R16A R16B R16B01 R16B02 R16B03-1 R16B03
17.0-rc1

Create an environment

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1
Creating environment: mixed-rust-erlang ...
* installing rust==0.9 ...
*done (in 5 secs.)
* installing erlang==17.0-rc1 ...
*done (in 11 secs.)

If you want to activate new environment just right after it creation, then do the following:

➥ nv mk mixed-rust-erlang --rust=0.9 --erlang=17.0-rc1 --on
Creating environment: mixed-rust-erlang ...
....
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ 

Activate/deactivate environment

Activating in a new shell

By default activating environment executes in a new shell:

echo$$
112
➥ nv on mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
3437

So for exit just do exit:

(mixed-rust-erlang) ➥ echo$$
3437
(mixed-rust-erlang) ➥ exitecho$$
112

Since version 0.7.2 you can use nv off in all cases to exit from environment.

Activating in the same shell

If you want to activate environment in the same shell do the following:

echo$$
5099
➥ nv on --same-shell mixed-rust-erlang
Environment mixed-rust-erlang activated.
(mixed-rust-erlang) ➥ echo$$
5099

To deactivate this shell don't use exit, use nv off:

(mixed-rust-erlang) ➥ echo$$
5099
(mixed-rust-erlang) ➥ nv off
Environment mixed-rust-erlang was deactivated.
➥ echo$$
5099

Get list of environments

➥ nv ls
Available environment(s):
mixed-rust-erlang
rust-0.9
erl-17-rc1

Get current activated environment

(mixed-rust-erlang) ➥ nv current
mixed-rust-erlang

It will return empty, if environment is not activated:

➥ nv current
➥ 

Do something in environment without enabling it

➥ nv do node-0.10.26 'npm -g ls'

Export environment into tar archive

➥ nv export node-0.10.26
Environment php-5.5.11 archived into /home/user/current/directory/node-0.10.26.tar

Import environment from tar archive

➥ nv import /home/user/current/directory/node-0.10.26.tar node-0.10.26-new
Archive /home/user/current/directory/node-0.10.26.tar imported into node-0.10.26-new

Get help

➥ nv --help

Get help for a command

For example, for do command:

➥ nv do --help

How to add a plugin?

All plugins are in the directory nv-plugins. If you need to add support for a new language you should add it as plugin inside this directory.

Mandatory elements

If you create a plugin which builds all stuff from source then In a simplest case you need to implement 2 functions in the plugin's body:

plug_list_versions

This function should return list of available versions of the plugin. For example:

plug_list_versions() {
local versions=$(curl -s "http://nodejs.org/dist"| \ grep -v "node-"| \ egrep -o '[0-9]+\.[0-9]+\.[0-9]+'| \ sort -u -k 1,1n -k 2,2n -k 3,3n -t .)echo$versions
}

plug_url_for_download

This function should return full url for downloading tarball. For example:

plug_url_for_download() {
local version=$1echo"http://nodejs.org/dist/v${version}/node-v${version}.tar.gz"
}

plug_build

This function is only need for *-prebuilt-like plugins. It overrides default building proccess. All we need in case of *-prebuilt-like plugin is only copy binaries. For example:

plug_build() {
local src_path=$1local build_path=$2
cp -r "$src_path"/*/*"$build_path"
}

Typical language installation listed in plug_install_default function in mk command.

If installation is not typical then you should implement plug_install function with yourself. For example: julia.

Optional elements

Variables

  • plug_list_versions_columns_count — number of the columns in the output of the nv ls-version for each plugin
  • plug_list_versions_columns_size — each column width in chars in the output of the nv ls-version for each plugin
  • plug_state — if == disabled then plugin is not active and will not be account in the commands:
    • mk
    • ls-versions
    • ls-plugins

Functions

In execute order:

  • plug_check_deps — check dependencies before plugin building. If it returns not empty string then environment creation stops. Example is in haskell plugin
  • plug_install — overrides the whole installation process
  • plug_download — overrides default downloading sources (archive)
  • plug_unpack — overrides default tar xzf <archive-with-source>
  • plug_configure — overrides default configure --prefix=<path-to-env>
  • plug_build — overrides default make && make install
  • plug_build_env — overrides copying binaries into new environment
  • plug_post_install_actions — executes after installation. For example pip installation in the python plugin

Examples

Example of the usage

Here is an example of building hugo static site generator under envirius with go plugin:

$ whereis go
go:
$ nv mk go-hugo-test --go=1.2.1
Creating environment: go-hugo-test ...
* installing go==1.2.1 ...
*done (in 8 secs.)
$ nv ls Available environment(s):
go-hugo-test (go==1.2.1)
$ nv on go-hugo-test
(go-hugo-test) $ go get github.com/spf13/hugo
(go-hugo-test) $ cd$GOPATH/src/github.com/spf13/hugo
(go-hugo-test) $ go build -o hugo main.go
(go-hugo-test) $ hugo version
Hugo Static Site Generator v0.11-dev

Dependencies

  • bash / zsh (very basic support)
  • curl / wget
  • tar
  • git
  • gcc
  • bats

Supported OS

  • ubuntu

Tests

Most of the code is covered by tests. For testing bats was used. To run tests:

➥ make tests

With hot cache on Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz with 4 GB of RAM on Ubuntu 13.10 (32-bits) tests takes:

time make tests
...
100 tests, 0 failure
real 8m26.572s
user 1m17.428s
sys 2m25.352s

Version History

See CHANGELOG.md.

License

See LICENSE.

README in another language

RU

About

Universal Virtual Environments Manager

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages