Code Monkey home page Code Monkey logo

kiex's Introduction

kiex - Elixir version manager

Kiex allows you to easily build and switch between different Elixir versions.

It supports setting the default (global) Elixir version as well as per shell/project versions.

Everything is self-contained under ~/.kiex.

Usage is based lightly on RVM, kerl, and rbenv.

NOTE: Some Erlang source builds are broken. See below.

Install

Prereqs: bash, curl, git

Run the following to get up and running:

\curl -sSL https://raw.githubusercontent.com/taylor/kiex/master/install | bash -s

which will install in $HOME/.kiex.

Usage

List installed versions

  • kiex list

List known releases

  • kiex list known (or kiex list releases)

List current branches

  • kiex list branches

Install a known release or branch

  • kiex install 0.12.5 or kiex install stable

Use specific elixir version

  • kiex use 0.12.5 -- Sets the elixir version for current shell.

Use sub-shell with specific elixir version

  • kiex shell 0.12.5 -- Starts sub-shell with given elixir version. Exiting shell goes to default.

Set default elixir version

  • kiex default 0.12.5

Uninstall kiex and elixirs

  • kiex implode -- This removes all versions of elixir installed by kiex as well as all kiex components

Upgrade kiex

  • kiex selfupdate -- pull down latest updates for kiex
    • Can also re-curl

Sourcing elixir into your path

After installing your preferred version of elixir and setting it as your default you can use kiex scripts to put your default elixir bin into your path. One way to do this is to add the following line into your rc file:

[[ -s "$HOME/.kiex/scripts/kiex" ]] && source "$HOME/.kiex/scripts/kiex"

Design philosophy

  • KISS
  • Sane defaults
  • Self-contained
  • Single-purpose

Comparison Q&A

How is it like exenv (rbenv)?

  • Super light and simple
  • Focus on installing & managing one piece of software: Elixir

How is it not like exenv?

  • Does not use shims
  • Includes elixir build component

How is it like Kerl?

  • Minimal command set
  • Retrieves, builds, installs and manages different releases

How is it not like Kerl?

  • Not as flexible on install path
  • Dynamically get's release list instead of caching
  • Build and install actions are not separated

How is it like RVM?

  • Sane defaults
  • Uses Unix PATH to manage binary to use

How is it not like RVM?

  • No function over-loading
  • Does not manage/install extra software and prereqs

Platforms/Shells tested

Operating Systems:

  • Arch
  • CentOS
  • Debian
  • FreeBSD
  • OS X/Darwin
  • Ubuntu

Shells:

  • bash
  • csh
  • tcsh
  • zsh

Erlang installs:

  • erlang-solutions
  • erlang.org
  • kerl
  • Debian apt, FreeBSD pkg, OS X brew

Alternatives and References

Alternatives:

Related tools:

Limitations

  • Does not build erlang
  • Does not build Dynamo or any other elixir app
  • Same build directory used for every build (saving space vs keeping build env around)
  • No uninstall option for installed elixir versions
  • No per-directory/project config file.
    • You can hack it in by adding kiex use to .rvmrc or friends ;P
### Notes

Some erlang builds (including default kerl) are unusuable on current CentOS and Fedora distros as a result of an OpenSSL update. -- 2014/03/31

Various bugs reported:

A update to OTP crypto https://github.com/RoadRunnr/otp/commit/8837c1be2ba8a3c123df3f5a87003daa9aac6539

TODO

  • Merge install script into kiex script as an install function
  • Cleanup build output (extra git info etc)
  • Maybe print source line with use command
  • Add active command (or similar) to show current elixir
    • Already in list command - this would be the single version
    • Maybe show source line?
  • Add sourceline or similar command to show source line to use?
  • Add uninstall option for installed elixirs
  • Maybe add dynamo install and setup for MIX_PATH
    • how to tie to elixir used? gemset like?
    • use dynamo tags?
  • Look at elixir-build for ideas, collaboration

License

See LICENSE file

kiex's People

Contributors

taylor avatar jsvisa avatar galaxygorilla avatar whatyouhide avatar darkofabijan avatar eliaw avatar banzaiman avatar

Watchers

Larry Lv avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.