Upgrade to Pro — share decks privately, control downloads, hide ads and more …

❄️ tmux-nixの実装を通して学ぶNixOSモジュール

❄️ tmux-nixの実装を通して学ぶNixOSモジュール

Nix meetup #3 大阪

Avatar for Mutsuha Asada

Mutsuha Asada

May 24, 2025
Tweet

More Decks by Mutsuha Asada

Other Decks in Programming

Transcript

  1. 🎓 所属 ・筑波大学情報学群情報科学類 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
  2. 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
  3. 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 👉 の子プロセスは生き残る (対話シェルでない)
  4. 16 programs.tmuxの概観 programs.tmux options config pkgs.tmuxPlugins programs.tmux.* を定義 必要に応じて渡す .config/tmux/tmux.conf

    を生成するための構造を生成 ユーザ設定 ビルドシステム ① optionsの評価
  5. 17 programs.tmuxの概観 programs.tmux options config pkgs.tmuxPlugins programs.tmux.* を定義 必要に応じて渡す .config/tmux/tmux.conf

    を生成するための構造を生成 ユーザ設定 ビルドシステム ① optionsの評価 ② configを生成
  6. programs.tmuxの概観 programs.tmux 18 options config pkgs.tmuxPlugins programs.tmux.* を定義 必要に応じて渡す .config/tmux/tmux.conf

    を生成するための構造を生成 ユーザ設定 ビルドシステム ① optionsの評価 ② configを生成 ③ ビルド tmux.conf
  7. ・システム全体の設定を行うための再利用可能なコンポーネント  ・/etc/nixos/configuration.nix もNixOSモジュール ・中身  ・ 「どのようなフィールドが設定できるか」 (= options)  ・ 「フィールドに設定する値」

    (= config)  ・他のモジュール群を展開するためのimports ・つまり、普段書いているNix式と特別変わりない(はず) 24 NixOSモジュールとは①
  8. ・これって本当に作業なんですよね ・人間は良い抽象を考えて、コードは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が来ますが
  9. 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は実装できませんでした。今後に期待