Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Nixでつくるdotfiles
Search
Mutsuha Asada
August 22, 2024
Programming
1.8k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nixでつくるdotfiles
Nixの簡単な紹介とhome-managerによりdotfilesをNixを使って管理する方法について
Mutsuha Asada
August 22, 2024
More Decks by Mutsuha Asada
See All by Mutsuha Asada
Reproducible Containers (ASPLOS'20)
momeemt
0
630
❄️ NixCon2025に参加した
momeemt
0
640
🔨 小さなビルドシステムを作る
momeemt
4
1.5k
情報科学類で学べる専門科目38選
momeemt
0
1.2k
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
1.2k
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
780
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
1k
Intel系FPGA上へのRISC-Vプロセッサの実装
momeemt
0
640
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
momeemt
0
80
Other Decks in Programming
See All in Programming
mrbgem 三角測量 開発
ogom
0
200
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
230
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
470
残高管理から台帳サービスへの進化
artoy
0
140
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
120
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
140
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
130
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
300
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
120
Featured
See All Featured
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
350
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
4 Signs Your Business is Dying
shpigford
187
23k
Exploring anti-patterns in Rails
aemeredith
4
520
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
310
Odyssey Design
rkendrick25
PRO
2
860
The Cult of Friendly URLs
andyhume
79
7k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
The untapped power of vector embeddings
frankvandijk
2
1.9k
Site-Speed That Sticks
csswizardry
13
1.5k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
710
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が出すエラーは情報量が少なくて辛いこともある ・そもそもビルドは辛い