Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nixでつくるdotfiles
Search
Mutsuha Asada
August 22, 2024
Programming
1
63
Nixでつくるdotfiles
Nixの簡単な紹介とhome-managerによりdotfilesをNixを使って管理する方法について
Mutsuha Asada
August 22, 2024
Tweet
Share
More Decks by Mutsuha Asada
See All by Mutsuha Asada
🔨 小さなビルドシステムを作る
momeemt
4
690
情報科学類で学べる専門科目38選
momeemt
0
590
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
260
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
110
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
250
Intel系FPGA上へのRISC-Vプロセッサの実装
momeemt
0
150
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
momeemt
0
47
情報特別演習I 最終発表「理工学の紙書籍を用いた学習の効率を向上させるインタフェース」
momeemt
0
41
SATySFi Conf 2023「SATySFiを使って学類新歓冊子を発行した」
momeemt
0
27
Other Decks in Programming
See All in Programming
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
550
Cache Me If You Can
ryunen344
2
4k
ProxyによるWindow間RPC機構の構築
syumai
3
1.2k
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
個人軟體時代
ethanhuang13
0
330
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.5k
Swift Updates - Learn Languages 2025
koher
2
510
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
7
2.5k
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
110
為你自己學 Python - 冷知識篇
eddie
1
350
AI Agents: How Do They Work and How to Build Them @ Shift 2025
slobodan
0
100
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
The Invisible Side of Design
smashingmag
301
51k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Designing for Performance
lara
610
69k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Being A Developer After 40
akosma
90
590k
RailsConf 2023
tenderlove
30
1.2k
Transcript
Nixでつくるdotfiles 言語処理開発ゼミ 浅田睦葉 (@momeemt) 1
2 自己紹介 ・学部3年 ・Wasmで拡張できるマークアップ言語を作っています w/ @uekann_ ・ごはんを作ることが好きです ▲ 料理はほぼプログラミング
3 Nixとは? ・再現可能なビルドを提供するソフトウェア ・言語、ビルドシステム、パッケージマネージャ、OS ・再現可能なビルドとは? ・同一のソースコードからは、全く同一のバイナリが得られることが保証されたビルド ・ソフトウェアのバージョン、ソースコード、依存するソフトウェアのソースコードが 変更されれば、生成されるバイナリは変わり得る ▲ 6個のλ
4 サンドボックス ・どのように再現性を保証するのか ・ビルドする際にローカルに存在するソフトウェアには基本的に依存しない ・OpenSSLのバージョン起因のバグを踏み抜き続けてはや数年 ・ビルド中にネットワーク回線にアクセスさせない ・パッケージマネージャが別のソフトウェアをダウンロードすることもよくある ・nodejsのsharp(libvipsというCライブラリに依存している)など → npm
i sharp するとインターネットからバイナリが降ってくる ・お手元のHomebrewは壊れていませんか?壊れたので使うのをやめました
5 ・依存するソフトウェアのビルドスクリプトなんか全部書いていたら人は死にます → そこで NixOS/nixpkgs ・多くのユーザによって提供されたNixファイル ・ビルドが維持されているかをチェック(Hydra)され、 PRは再現可能かどうかが適切に検査(Ofborg)されている ・nix-shell -p
pkgs.nodejs などを実行すれば、ローカルにnodejsがなくとも nodejsを利用できるシェル(環境)に入ることができる nixpkgs
6 引用: https://repology.org/repositories/graphs - Repology, the packaging hub す ご
ー い
7 ・Nixを使ってdotfilesを作る → 作ろう! ・dotfilesとは? ・ホームディレクトリにあることが多い “.” から始まる設定ファイルなどの総称 ・具体的に言えば、Neovimやzsh、tmuxのようなソフトウェアのプラグインを Nixでビルドして用意したり、直接OSやソフトウェアの設定を書くこともできる
→ 便利すぎる 本題
8 ・Nixを使ってユーザ環境を設定するためのツール ・macOSや(NixOS以外の)Linuxディストリビューションにおける設定ができる home-manager ▲ 本日の主役
9 ・ML系の文法で、宣言的にソフトウェアの設定を記述できます ・ビルド結果は /usr/bin ではなく /nix/store 以下に生成されるので汚染されません ・各パッケージごとに独立して依存性を記述できます (Nixの) 良いところ①
10 ▲ 例: tmux-window-nameというtmuxプラグインをビルドするNix式
11 ・パッケージマネージャをNixに一本化できます ・例)Neovim → vim-plug, dein, packer, jetpacker, lazy.nvimなど ・記法も扱い方も様々だが、home-managerを使うとNixで一括して設定を書ける
良いところ②
12 ・パッケージマネージャをNixに一本化できます ・例)Neovim → vim-plug, dein, packer, jetpacker, lazy.nvimなど ・記法も扱い方も様々だが、home-managerを使うとNixで一括して依存設定を書ける
良いところ② ▲ 著名な(n)vimプラグインはすでにパッケージングされている
13 ・環境をロールバックできます 良いところ③ ▲ 過去の設定の反映(環境)は全て記録されていて、いつでも巻き戻せる
14 ・Nixがインストールできない / したくない環境で利用できないのでは? → (私が認識している限りでは)そう 🥲 ・事前にNixに依存しないdotfilesをビルドできたら面白そう ・容量が足りなくなる →
ストレージを買いましょう ・ネットワーク回線の影響でビルドが遅い → わかる ・エラーに情報量が少なくて踏み込んだ瞬間辛くなる → わかる ・適切にソフトウェアのビルドスクリプトを書くのが難しいです → ビルドはもともと難しい Q&A
15 宣伝 ・このような過程で作ったdotfilesはこちら 👇 ・ 🌴 盆栽やっていきましょう 🌴
16 まとめ ・Nixという再現可能なビルドを提供するビルドシステム(/ パッケージマネージャ / 言語 / OS)がある ・Nixを使うとローカル環境に依存せず、同一バイナリを生成する保証がつく ・Nixを使ってOSやソフトウェアの設定を書いて管理できる、home-managerがある
・nixpkgsというNixOS公式によって維持されているパッケージ群がある ・このパッケージ群は数あるリポジトリの中でも(stable/unstableどちらも)最大 ・home-managerを使えばneovimやzsh、tmuxなどの普段使いするツールの設定を全く同 じ記法を利用して書けて、かつ全く同じ挙動を維持できる ・ (NixOS以外でもhome-managerを使えば)設定や環境をロールバックできて便利 ・Nixを利用できない環境では環境を再現できないデメリットもある ・容量をたくさん消費しがち(定期的にgcを走らせればさほど問題ない) ・通信環境が悪い場所ではビルドに時間がかかる(辛い) ・Nixが出すエラーは情報量が少なくて辛いこともある ・そもそもビルドは辛い