nix-on-droid はnixpkgsをandroid上で利用できるようにするアプリです。まだプロトタイプ段階なので、そのつもりで利用しましょう。
またリポジトリにあるように、Termuxからfolkして作られているものの、Termux DistroではないのでTermux Communityに質問をしないようにと注意書きがされています。
nix-on-droidをセットアップしてみる
インストールはPlayストアではなくF-Droidがメインになっています。 Playストア外からのインストールになるので、ここは 自己責任 でやりましょう。
configはnix flakeベースで、デフォルトでは ~/.config/nixpkgs/nix-on-droid.nix
にあります。
まずはopensslとgitを入れて、Githubへアクセスできるようにします。
あと、いくつかtermux configを入れておくと便利そうなので追加しておきます。
|
|
ここで利用できるオプションは、Nix-on-Droid manualに一覧されています。
スイッチには nix-on-droid
コマンドを使います。
|
|
ちなみに nix-env
によるパッケージサーチは動作しませんでした。
コミュニティでも動作しないという議論はあるようですが、nixpkgsのWebサーチなどで代用すればいいよとアドバイスされていたりしました。
実際ここでサーチできなくてもインストールや実際の利用に支障はないので、そんなものと割り切っていきます。
home-manager
ちゃんとhome-managerもサポートされています。 自分のシェル回リの設定はhome-managerで管理されているので、そのまま持ってこれるかもしれません。
Githubのガイド通りnix-channelを追加、自分のconfigを nix-on-droid.nix
に設定し、 nix-on-droid switch
します。
|
|
ここではターミナルはTermuxなので、普段使いのAlacrittyはdisableにしておきましたが、それ以外のものは問題なくセットアップできました。 例えば、emacs-overlay、fishやtmuxなども含め全部問題なく動作しました。
フォント
まだ表示が崩れているので最後にフォントの設定をします。
ターミナル環境でEmacsを利用するので、日本語表示もできる 白源のNerdFont入り を設定しました。
nix-on-droid.nix
で hackgen-nf-font
パッケージを追加し、ターミナルフォントとして設定します。
|
|
ちなみに日本語入力の方については、EmacsのSKKをIMとして利用しているので問題なかったりします。 この辺りのポータビリティの良さはEmacs/SKKの面目躍如ですね。
ここまでで、ほぼ全てのシェル環境を再現できました。 思った以上にスムーズで、まさかAndroid上でここまでシェル環境を再現できるとは、、、感激です。
試しに shell.nix
でRustプロジェクトをビルドしてみる
shell.nix
を使った開発環境の動作も試してみます。
以下のようなRust環境を用意して、
|
|
hello worldしてみます。
|
|
ビルドして実行までできました。
クラウドストレージの利用
自分はドキュメントシステムをorg-roamで管理していて、それをBoxで同期しています。
nix-on-droid
上では他のAndroidアプリのDropboxやBoxの管理領域をマウントするわけにもいかないので、rcloneを利用します。
Rclone はメジャーなクラウドストレージに対するクライアントとして共通のCLIを提供するプログラムです。 Dropboxのようにバックグラウンドで自動同期するにはちょっと心許無いですが、nix-on-droidではマニュアル操作で問題ないと判断しました。
インストールや設定に特別ハードルはないのですが、ブラウザ経由での認証認可ができないと思われたので、ブラウザレスで進めました。 詳細は省きますが、基本的にrcloneのインタラクションに従っていくだけです。
物理キーボードの利用
画面サイズやキーバインドなどを考えると、ここは外部キーボードを接続して利用したいところです。
AndroidはUSB-Cによる物理キーボード接続に対応しているので、いつものキーボード:corne v4が使えます。
corne v4はキー設定を2面持ちできるので、Macとそれ以外向けにCmdキーとAltキーの位置をスワップした設定を入れています。 ただ普段は面倒なのでホストマシン側で設定してしまうのですが、今回はこれが使えそうです。
と思ったのですが、Android (少なくとも15) では物理キーボード設定でAlt/OSキースワップが設定できるようでした。 なので結局今回もマシン側で設定します^^;
キーバインドのショートカットとのコンフリクト
Androidは物理キーボードにいくつかのショートカットを持っているようで、これらは固定で変更できませんでした。
ショートカットにキーバインドを持っていかれるので、Emacsの操作でいくつかコンフリクトしてしまう問題があります。これは今は将来変更できるようになることを祈るしかなさそうです。
ターミナルのソフトウェアキーボードを消す
デフォルトだと下部にソフトウェアキーボードが表示されていると思いますが、邪魔なので消します。
ここはベースとなっているTermuxの設定で消すことができて、 ~/.termux/termux.properties
に extra-keys = []
と追加すると、画面から表示が消せます。
まとめ
今のところキーコンフリクト以外は問題ないので、これはかなり実用的だと思いました。 Rustの開発もできちゃうし、ノートもブログ書けるので、ちょっと出先で作業したいときにノートPCなどを持っていく必要がなくなります。
こうなってくると、Foldable Androidとかちょっと欲しくなってきますね。