Featured image of post Termux派生の「nix-on-droid」でnixpkgsをAndroid上で使う

Termux派生の「nix-on-droid」でnixpkgsをAndroid上で使う

nix-on-droid はnixpkgsをandroid上で利用できるようにするアプリです。まだプロトタイプ段階なので、そのつもりで利用しましょう。

Nix-enabled environment for your Android device. [maintainers=@t184256,@Gerschtli] - GitHub - nix-community/nix-on-droid: Nix-enabled environment for your Android device. [maintainers=@t184256,@Ge...
GitHub - nix-community/nix-on-droid: Nix-enabled environment for your Android device. [maintainers=@t184256,@Gerschtli]

またリポジトリにあるように、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を入れておくと便利そうなので追加しておきます。

1
2
3
4
android-integration.termux-open.enable = true;
android-integration.termux-open-url.enable = true;
android-integration.termux-reload-settings.enable = true;
android-integration.termux-setup-storage.enable = true;

ここで利用できるオプションは、Nix-on-Droid manualに一覧されています。

スイッチには nix-on-droid コマンドを使います。

1
nix-on-droid switch

ちなみに nix-env によるパッケージサーチは動作しませんでした。 コミュニティでも動作しないという議論はあるようですが、nixpkgsのWebサーチなどで代用すればいいよとアドバイスされていたりしました。

実際ここでサーチできなくてもインストールや実際の利用に支障はないので、そんなものと割り切っていきます。

home-manager

ちゃんとhome-managerもサポートされています。 自分のシェル回リの設定はhome-managerで管理されているので、そのまま持ってこれるかもしれません。

あけましておめでとうございます。 2023年気持ちも新たに、まずはdotfilesの見直しから開始しました。 これまでは、Emacs以外の fish や git
Nixとhome-managerにdotfiles管理を移行する

Githubのガイド通りnix-channelを追加、自分のconfigを nix-on-droid.nix に設定し、 nix-on-droid switch します。

1
home-manager.config = ./home.nix

ここではターミナルはTermuxなので、普段使いのAlacrittyはdisableにしておきましたが、それ以外のものは問題なくセットアップできました。 例えば、emacs-overlay、fishやtmuxなども含め全部問題なく動作しました。

フォント

まだ表示が崩れているので最後にフォントの設定をします。

ターミナル環境でEmacsを利用するので、日本語表示もできる 白源のNerdFont入り を設定しました。

Hack と源柔ゴシックを合成したプログラミングフォント 白源 (はくげん/HackGen). Contribute to yuru7/HackGen development by creating an account on GitHub.
GitHub - yuru7/HackGen: Hack と源柔ゴシックを合成したプログラミングフォント 白源 (はくげん/HackGen)

nix-on-droid.nixhackgen-nf-font パッケージを追加し、ターミナルフォントとして設定します。

1
terminal.font = "${pkgs.hackgen-nf-font}/share/fonts/hackgen-nf/HackGenConfoleNF-Regular.ttf";

ちなみに日本語入力の方については、EmacsのSKKをIMとして利用しているので問題なかったりします。 この辺りのポータビリティの良さはEmacs/SKKの面目躍如ですね。

ここまでで、ほぼ全てのシェル環境を再現できました。 思った以上にスムーズで、まさかAndroid上でここまでシェル環境を再現できるとは、、、感激です。

試しに shell.nix でRustプロジェクトをビルドしてみる

shell.nix を使った開発環境の動作も試してみます。

以下のようなRust環境を用意して、

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
let
  pkgs = import (fetchTarball("https://github.com/NixOS/nixpkgs/archive/refs/tags/24.05.tar.gz")) {};
in pkgs.mkShell rec {
  name = "rust";

  buildInputs = with pkgs; [
    cargo
    rustc
    rustfmt
    rust-analyzer
  ];

}

hello worldしてみます。

1
2
3
cargo new test
cd test/
cargo run

ビルドして実行までできました。

クラウドストレージの利用

自分はドキュメントシステムをorg-roamで管理していて、それをBoxで同期しています。

nix-on-droid 上では他のAndroidアプリのDropboxやBoxの管理領域をマウントするわけにもいかないので、rcloneを利用します。

Rclone はメジャーなクラウドストレージに対するクライアントとして共通のCLIを提供するプログラムです。 Dropboxのようにバックグラウンドで自動同期するにはちょっと心許無いですが、nix-on-droidではマニュアル操作で問題ないと判断しました。

インストールや設定に特別ハードルはないのですが、ブラウザ経由での認証認可ができないと思われたので、ブラウザレスで進めました。 詳細は省きますが、基本的にrcloneのインタラクションに従っていくだけです。

物理キーボードの利用

画面サイズやキーバインドなどを考えると、ここは外部キーボードを接続して利用したいところです。

AndroidはUSB-Cによる物理キーボード接続に対応しているので、いつものキーボード:corne v4が使えます。

肩を痛めたことをきっかけに分割キーボードに戻すことを検討するようになりました。 Keyboardio Atreusとは3年近い付き合いですが非常によくできたキーボ
個人的corne v4 chocolateセットアップについて

corne v4はキー設定を2面持ちできるので、Macとそれ以外向けにCmdキーとAltキーの位置をスワップした設定を入れています。 ただ普段は面倒なのでホストマシン側で設定してしまうのですが、今回はこれが使えそうです。

と思ったのですが、Android (少なくとも15) では物理キーボード設定でAlt/OSキースワップが設定できるようでした。 なので結局今回もマシン側で設定します^^;

キーバインドのショートカットとのコンフリクト

Androidは物理キーボードにいくつかのショートカットを持っているようで、これらは固定で変更できませんでした。

ショートカットにキーバインドを持っていかれるので、Emacsの操作でいくつかコンフリクトしてしまう問題があります。これは今は将来変更できるようになることを祈るしかなさそうです。

ターミナルのソフトウェアキーボードを消す

デフォルトだと下部にソフトウェアキーボードが表示されていると思いますが、邪魔なので消します。

ここはベースとなっているTermuxの設定で消すことができて、 ~/.termux/termux.propertiesextra-keys = [] と追加すると、画面から表示が消せます。

まとめ

今のところキーコンフリクト以外は問題ないので、これはかなり実用的だと思いました。 Rustの開発もできちゃうし、ノートもブログ書けるので、ちょっと出先で作業したいときにノートPCなどを持っていく必要がなくなります。

こうなってくると、Foldable Androidとかちょっと欲しくなってきますね。

Built with Hugo
テーマ StackJimmy によって設計されています。