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
0
14
Nixでつくるdotfiles
Nixの簡単な紹介とhome-managerによりdotfilesをNixを使って管理する方法について
Mutsuha Asada
August 22, 2024
Tweet
Share
More Decks by Mutsuha Asada
See All by Mutsuha Asada
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
momeemt
0
15
情報特別演習I 最終発表「理工学の紙書籍を用いた学習の効率を向上させるインタフェース」
momeemt
0
17
SATySFi Conf 2023「SATySFiを使って学類新歓冊子を発行した」
momeemt
0
11
主専攻実験(深層学習を用いたCG・画像処理)最終成果報告
momeemt
0
13
情報科学類新歓2023 履修の組み方
momeemt
0
17
情報科学特別演習 最終発表「動画編集ソフトウェアフレームワーク: mock up」
momeemt
0
17
技育キャンプ ハッカソン vol.9「ギリギリ飯」
momeemt
0
10
PIXIV SUMMER BOOT CAMP 2022 成果発表「GIFから12倍速くする」
momeemt
0
7
SWEST22「Nimです、こんばんは」
momeemt
0
5
Other Decks in Programming
See All in Programming
ゼロからの、レトロゲームエンジンの作り方
tokujiros
3
1.1k
Alba: Why, How and What's So Interesting
okuramasafumi
0
230
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
2.1k
Vue.jsでiOSアプリを作る方法
hal_spidernight
0
110
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
AWSマネコンに複数のアカウントで入れるようになりました
yuhta28
2
130
HTML/CSS超絶浅い説明
yuki0329
0
200
Compose でデザインと実装の差異を減らすための取り組み
oidy
1
210
混沌とした例外処理とエラー監視に秩序をもたらす
morihirok
18
2.9k
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
650
知られざるDMMデータエンジニアの生態 〜かつてツチノコと呼ばれし者〜
takaha4k
3
920
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
GraphQLとの向き合い方2022年版
quramy
44
13k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Music & Morning Musume
bryan
46
6.3k
Making the Leap to Tech Lead
cromwellryan
133
9k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
KATA
mclloyd
29
14k
GitHub's CSS Performance
jonrohan
1030
460k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
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が出すエラーは情報量が少なくて辛いこともある ・そもそもビルドは辛い