Share
Embed
Transcript
32 slides
-
🎓 所属 ・筑波大学情報学群情報科学類 B4 🐣 興味 ・コンパイラツールチェーン、LLVM、開発者体験 ・2年ほどNixOSとNixを利用している (2022/12~) ・Nix周辺への貢献
・NixOS/nix: 1 PR merged ・NixOS/nixpkgs: 36 PRs merged, 197 PRs reviewed ・NixCon2025のテーマを悩み中です 😕 自己紹介 2 @momeemt @mutsuha_asada @momee.mt https://momee.mt -
7 tmuxとは② (ssh接続時) sshd login shell ② attach P1 ...
Pn ③ 子プロセスの作成 アクティブ ... TCP/22 PTY (slave) ① fork sshd login shell ③ closeを確認 P1 ... Pn SIGHUP 処理中のプロセスが 削除されてしまう ... ① ❌切断 PTY SIGHUP SIGHUP SIGHUP kernel SSH切断 ④ SIGHUP ② PTYをclose -
8 tmuxとは③ (セッションの維持) sshd login shell ② attach tmux client
③ tmux new TCP/22 PTY (slave) ① fork ④ UNIX socket tmux server PTY #1 PTY #n ... P1 ... Pn アクティブ SSH切断 sshd login shell tmux client SIGHUP ① ❌切断 PTY tmux server PTY #1 PTY #n ... P1 ... Pn アクティブ ② PTYをclose ③ closeを確認 kernel ④ SIGHUP tmux server 👉 の子プロセスは生き残る (対話シェルでない) -
・Nixはビルドを記述するためのDSL → ビルドを少し広く捉えてツールや環境をセットアップするためにも使える ・実際にNixOSやhome-managerを使ってネットワークやエディタの設定ができる ・どのように実現しているか? ・`environment.etc.<name>.text` → /etc 配下へ ・`home.file.<name>.text`
→ ユーザー空間へ ・`xdg.config.<name>.text` → XDG Base Directoryへ ・これらの属性に渡した文字列はファイルとして書き出される 9 ✏️ ツールの設定をNixで記述する -
・programs.tmux.baseIndex ・ウィンドウ/ペイン番号が何番から開始するかを設定できる ・デフォルトは0だが、発表者は1にしている(実世界に生きているので) ・tmux.confにおける次の設定に変換される ・`set -g base-index ${baseIndex}` ・`setw -g
pane-base-index ${baseIndex}` 11 設定できる項目の例① ▲ 時代は1-indexed -
16 programs.tmuxの概観 programs.tmux options config pkgs.tmuxPlugins programs.tmux.* を定義 必要に応じて渡す .config/tmux/tmux.conf
を生成するための構造を生成 ユーザ設定 ビルドシステム ① optionsの評価 -
17 programs.tmuxの概観 programs.tmux options config pkgs.tmuxPlugins programs.tmux.* を定義 必要に応じて渡す .config/tmux/tmux.conf
を生成するための構造を生成 ユーザ設定 ビルドシステム ① optionsの評価 ② configを生成 -
programs.tmuxの概観 programs.tmux 18 options config pkgs.tmuxPlugins programs.tmux.* を定義 必要に応じて渡す .config/tmux/tmux.conf
を生成するための構造を生成 ユーザ設定 ビルドシステム ① optionsの評価 ② configを生成 ③ ビルド tmux.conf -
・システム全体の設定を行うための再利用可能なコンポーネント ・/etc/nixos/configuration.nix もNixOSモジュール ・中身 ・ 「どのようなフィールドが設定できるか」 (= options) ・ 「フィールドに設定する値」
(= config) ・他のモジュール群を展開するためのimports ・つまり、普段書いているNix式と特別変わりない(はず) 24 NixOSモジュールとは① -
・これって本当に作業なんですよね ・人間は良い抽象を考えて、コードはLLMに書かせれば良いかもしれない → 時代に取り残されそうなのでtmux-nixはLLMベースで書いてみることにした ・先に感想を言うと、本当に面白くないです レビューが中心になる 28 (余談) Vibecodingってこのためにあったんだ‼️ 😄
・Codex(OpenAI) ・なんと実行時にネットワークアクセスをすることができない ・ビルド時にネットワークアクセスができないNixと相性が良さそうですね☺️ → 良いわけない。nix fmt, nix develop, nix flake check、全部ダメ ・Copilot Agent ・こちらは結構良いです ・Gemini 2.5 Proはほどほど。tmux-nixの実装のメインはこの子がやってます ・Claude 4 Sonnetは相当賢いです、すぐrate limitが来ますが -
32 まとめ ・現在開発を行っているtmux-nixを通して、NixOSモジュール開発の概要を紹介した ・ターミナルマルチプレクサであるtmuxについて紹介した ・tmuxを起動することでsshdのログインシェルから対話環境が切り離されるため、ssh接続を切っ たとしてもプロセスが終了せず、処理を継続できる ・NixOSやhome-managerを利用することでツールやネットワークの設定を記述することができる ・home-managerではprograms.tmuxを設定することでtmux.confを生成できる ・programs.tmuxはbaseIndexなどの基本設定や、nixpkgsなどで提供されているtmuxプラグイン のderivationsを受け取ってTPMレスにプラグインを管理できる
・programs.tmuxのソースコードは定義であるoptions、設定であるconfigに分離していた ・実はこれはNixOSモジュールの基本構造で、NixOSモジュールはシステム全体の設定を行うため の再利用可能なコンポーネント ・programs.tmuxはDSLが薄く、Nix式を使ってプラグインの設定をするためのAPIが提供されてい ないので微妙。tmux-nixを作ってtmuxをNixで管理してハッピーになりたい! ・さて、残念ながら発表が始まるまでに完璧なtmux-nixは実装できませんでした。今後に期待