Nixを使ってみた感想!
ちょろっと前からNixOSを使ってて、なかなかいい感じだから感想を述べます!たいして理解してないから間違ってたりするかもだけど、許して〜。
Nixとは
Nixは多分言語の名前で、NixOSがLinux distroの名前っぽい。
特徴
- Nixで設定ファイルを宣言的に書いて、それを使ってOSのパッケージを定義したり、OSを設定したりできるよ!
- さらにFlakeっていうNixOSの機能を解禁すると、依存関係をなんかいい感じにやってくれるよ!
npmとかのpackage-lock.jsonみたいな感じだね。まだexperimentalな機能なんだけど、めっちゃ便利だから基本的にはみんな使ってるっぽい。
長所だと思うところ!
- パッケージ入れるのが簡単!
- パッケージ同士の依存関係で(あんまり?)困らない!
- package.jsonみたいに、gitで管理するから、色々試しても簡単に元に戻せる!
- gitなしでもビルドを保存してる機能があるから、めっちゃぶっ壊れてgit操作すらできなくなっても簡単に元に戻せる!
- 仮想環境を簡単に用意できる。つまり、globalにinstallせずに、特定のdirだけで有効な環境をつくったりできる!(特定のdirだけにHaskellの実行環境を用意したりできる)
短所だと思うところ!
- Nixの書き方がよくわかんない(ネット上のサンプル+chatgptでモゾモゾ...)
- packageのuninstallって概念はなくて、めっちゃ容量くう。今見たら233GB使ってた。(使ってないパッケージは一定時間経過したらGCが勝手に消すらしい?コマンドで消すこともできる)
- nix packageとして公開されてないやつを入れるのが大変っぽい...(FHSにも当然準拠してない。でも大体packageあるから困ったことはあんまりない)
My Nix Config
僕のnixosのflake.nixはこんな感じ。
{
description = "my flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, utils, home-manager }: {
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
({ config, pkgs, ... }: {
environment.systemPackages = with pkgs; [
tree
zip
unzip
vim
git
vscode
// 省略 //
];
// 省略 //
# 日本語設定関係
i18n.inputMethod = {
type = "fcitx5";
enable = true;
fcitx5.addons = [ pkgs.fcitx5-mozc ];
};
fonts = {
packages = with pkgs; [
noto-fonts-cjk-serif
noto-fonts-cjk-sans
noto-fonts-emoji
nerdfonts
];
fontDir.enable = true;
fontconfig = {
defaultFonts = {
serif = [ "Noto Serif CJK JP" "Noto Color Emoji" ];
sansSerif = [ "Noto Sans CJK JP" "Noto Color Emoji" ];
monospace = [ "JetBrainsMono Nerd Font" "Noto Color Emoji" ];
emoji = [ "Noto Color Emoji" ];
};
};
};
swapDevices = [{
device = "/swapfile";
size = 16 * 1024;
}];
})
];
};
};
}
こんなふうにinputとoutputを定義してつらつら書くだけで環境構築が完了するよ! `environment.systemPackages = with pkgs; [`みたいにかいてあるところの下にずら〜っと使いたいパッケージを列挙したり、その下のi18nうんぬんのあたり以下みたいな文章を書くだけで、パッケージの設定とかOSの設定ができるよ。 めっちゃ簡単!
まとめ
NixOSいいぞ〜。みんなも使おう!