Thursday, June 30, 2022

tmux, Clojure REPL, direnv, alias

開發 Clojure/ClojureScript 的程式時,我的習慣是會用 tmux 來開啟一個在背景的 repl 來做 development 

我常用的一些 shell alias 長成這樣子:

alias bbrepl="tmux new-session -d -s bbrepl 'bb nrepl-server 1667'"

alias drepl="tmux new-session -d -s drepl 'clj -M:dev:cider-clj'"

alias dfull="tmux new-session -d -s dfull 'clj -M:dev:shadow-cider-clj'"

alias dshadow="tmux new-session -d -s dshadow 'clj -M:shadow-cljs watch main'"


這個方式用了很久都沒有什麼問題,直到有一天,我發覺我需要所謂的 local repl 也就是說,我啟動的這個 repl ,它指定的 deps.edn 的 alias 是可以根據 project directory 來變動的。


本來,我設法用了 direnv ,很快就做到了,「可以讓 environment variable 隨著切換進入資料夾而掛載」。然而,其實我需要的是「可以讓 alias 隨著切換進入資料夾而掛載」。


最後我的作法是這樣子:
(1) 在專案的資料夾下,準備一個 .alias 的資料夾,裡頭放一些我要拿來當指令的 shell script ,比方說 lrepl

(2) 在專案的資料夾下,準備一個 .envrc 檔,裡頭寫了 
PATH_add .alias