A Go modules-like hierarchy aware cd
command for
easier navigation to your repositories.
Go organizes modules based on server/organization/repository
hierachy (for
example, github.com/knl/rh
), which I liked a lot. rh.lua
is a step toward
having that structure with all repositories I keep on my machine, while making
my workflow as smooth as possible.
rh.lua
assumes that all the repositories are checked-out under a specific
umbrella folder in the filesystem, for example ~/work
. Under this
umbrella repository it would help navigate and maintain the repository hierarchy
in the same manner as go modules, that is,
~/work/server/organization/repository
.
rh.lua
is fully implemented in lua in order to make it fast. rh.lua
is
heavily influenced and based on z.lua
,
from which it took all filesystem/datastore code.
-
rh.lua
lists all known repositories under predefined umbrella folder (that is set during the installation). -
rh.lua [[server/]org/]repo
does a frecency search (a laz.lua
and/orfasd_cd
) and searches for a repository whose name is partially matchingrepo
, for an orgorg
and serverserver
. If found,cd
s to that folder. If you omit bothserver
andorg
, the search will be only over repository names. If your search term is in formorg/repo
, it will try to matchorg
and thenrepo
at respective positions. Similarly for the full blown termserver/org/repo
. You could also use spaces instead of/
. If the best match matches the current folder, it will jump to the next matching one.For example,
rh.lua pkg
will jump to~/work/github.com/NixOs/nixpkgs
, whilerh.lua f/pkg
will jump to~/work/github.com/FreeBSD/pkg
. -
rh.lua [http|git|https]://server/org/repo
will look for a~/work/<server>/<org>/<repo>
folder andcd
to it. If the folder doesn't exist, it will clone it with git andcd
to it. -
rh.lua term<TAB>
will autocomplete based onterm
.
Apart from a working lua installation, rh.lua
requires
either z.lua
or fasd_cd
(for the latter, set $_RH_DATA
to ~/.fasd
).
Copy the rh.lua
script to somewhere in the PATH.
-
Zsh Install: Put something like this in your
.zshrc
:eval "$(lua /path/to/rh.lua --init zsh ~/work)"
It can also be initialized from "knl/rh" with your zsh plugin managers (antigen / oh-my-zsh). Just don't forget to set
$_RH_ROOT
. -
Bash Install: Put something like this in your
.bashrc
:eval "$(lua /path/to/rh.lua --init bash ~/work)"
-
Posix Shell Install: Put something like this in your
.profile
:eval "$(lua /path/to/rh.lua --init posix ~/work)"
-
Fish Shell Install: Put something like this in
~/.config/fish/conf.d/z.fish
:source (lua /path/to/rh.lua --init fish ~/work | psub)
Fish version 2.4.0 or above is required.
-
Power Shell Install: Put something like this in your
profile.ps1
:iex ($(lua /path/to/rh.lua --init powershell) -join "`n")
-
Windows Install (with Clink):
- Copy
rh.lua
andrh.cmd
to clink's home directory - Add clink's home to
%PATH%
(rh.cmd
can be called anywhere) - Ensure that "lua" can be called in
%PATH%
- Ensure that "lua" can be called in %PATH%
- Copy
-
Windows Cmder Install:
- Copy
rh.lua
andrh.cmd
tocmder/vendor
- Add
cmder/vendor
to%PATH%
- Ensure that "lua" can be called in
%PATH%
- Copy
This is optional step, use it if you really need to.
- Set
$_RH_CMD
in.bashrc
/.zshrc
to change the command (defaultrh
). - Set
$_RH_DATA
in.bashrc
/.zshrc
to change the datafile (default~/.zlua
). - Set
$_RH_ROOT
in.bashrc
/.zshrc
to change the store root (default~/work
).
- 1.0.0 (2019-03-22): First official release
Repository Hierarchy.
Lua is a great language and pretty fast at it. For example z.lua
is faster
than other alternatives, even tho it code gets interpreted and requires loading
of lua executable. Plus, basing the code on z.lua
allows this gem to run on
many platforms.
Mostly to make it self contained and avoid loading many modules. Everything sits in a single file.
For the initial release, git diff --stat -b
shows:
z.lua => ../../knl/rh/rh.lua | 1734 ++++++--------------------------------
1 file changed, 253 insertions(+), 1481 deletions(-)
This code is a modification of z.lua
to support reading the same data file and
have all the supporting functions, however some parts were modified in order to
have the desired functionality.
rh.lua
will not update the data file, ever! It only reads from it and makes
decision where to jump.