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
120
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
760
情報科学類で学べる専門科目38選
momeemt
0
640
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
300
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
120
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
270
Intel系FPGA上へのRISC-Vプロセッサの実装
momeemt
0
150
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
momeemt
0
47
情報特別演習I 最終発表「理工学の紙書籍を用いた学習の効率を向上させるインタフェース」
momeemt
0
46
SATySFi Conf 2023「SATySFiを使って学類新歓冊子を発行した」
momeemt
0
27
Other Decks in Programming
See All in Programming
CSC305 Lecture 11
javiergs
PRO
0
320
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
120
ネストしたdata classの面倒な更新にさようなら!Lensを作って理解するArrowのOpticsの世界
shiita0903
1
180
Webサーバーサイド言語としてのRustについて
kouyuume
1
5k
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
14
47k
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
1k
CSC509 Lecture 07
javiergs
PRO
0
250
TransformerからMCPまで(現代AIを理解するための羅針盤)
mickey_kubo
7
5.8k
퇴근 후 1억이 거래되는 서비스 만들기 | 내가 AI를 사용하는 방법
maryang
1
130
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
380
Blazing Fast UI Development with Compose Hot Reload (Bangladesh KUG, October 2025)
zsmb
2
430
モテるデスク環境
mozumasu
3
1.4k
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
190
Being A Developer After 40
akosma
91
590k
We Have a Design System, Now What?
morganepeng
53
7.9k
RailsConf 2023
tenderlove
30
1.3k
Balancing Empowerment & Direction
lara
5
710
Speed Design
sergeychernyshev
32
1.2k
Producing Creativity
orderedlist
PRO
348
40k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Documentation Writing (for coders)
carmenintech
75
5.1k
Statistics for Hackers
jakevdp
799
220k
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が出すエラーは情報量が少なくて辛いこともある ・そもそもビルドは辛い