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
38
Nixでつくるdotfiles
Nixの簡単な紹介とhome-managerによりdotfilesをNixを使って管理する方法について
Mutsuha Asada
August 22, 2024
Tweet
Share
More Decks by Mutsuha Asada
See All by Mutsuha Asada
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
160
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
77
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
220
Intel系FPGA上へのRISC-Vプロセッサの実装
momeemt
0
130
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
momeemt
0
37
情報特別演習I 最終発表「理工学の紙書籍を用いた学習の効率を向上させるインタフェース」
momeemt
0
32
SATySFi Conf 2023「SATySFiを使って学類新歓冊子を発行した」
momeemt
0
22
主専攻実験(深層学習を用いたCG・画像処理)最終成果報告
momeemt
0
32
情報科学類新歓2023 履修の組み方
momeemt
0
120
Other Decks in Programming
See All in Programming
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
210
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
1
650
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
760
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
22
6k
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
110
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
2
490
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
210
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
160
プロダクト開発でも使おう 関数のオーバーロード
yoiwamoto
0
150
F#で自在につくる静的ブログサイト - 関数型まつり2025
pizzacat83
0
290
Use Perl as Better Shell Script
karupanerura
0
690
Select API from Kotlin Coroutine
jmatsu
1
110
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Making Projects Easy
brettharned
116
6.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Reflections from 52 weeks, 52 projects
jeffersonlam
350
20k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
How GitHub (no longer) Works
holman
314
140k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
690
Adopting Sorbet at Scale
ufuk
77
9.4k
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が出すエラーは情報量が少なくて辛いこともある ・そもそもビルドは辛い