この記事はzennから移植しています
https://zenn.dev/hiro1noue/articles/1d92e9268f23c3
ことの経緯
僕は今まで VirtualBox や WSL で、
- Ubuntu
- Kali Linux
- Arch Linux
などを触ってきました。
最初は「Linuxを勉強するため」くらいの感覚だったのですが、触っているうちに気づきました。
「もはや仮想化してまで Windows を使う理由なくない?」
WSL や VirtualBox で Linux を使う時間の方が長くなり、
気づけば「普段使いも Linux の方が快適かもしれない」と感じるようになっていました。
ですが、そこで問題が出てきます。
普通のLinux、管理が難しくないか?
特に Arch Linux を触っていると、
- いつ何を入れたのかわからなくなる
- 環境を壊しがち
- 別PCで再現できない
- 「前の環境どうなってたっけ?」になる
みたいなことが結構ありました。
しかも開発では「再現性」がかなり重要です。
高専に入ってから、
- 開発環境
- dotfiles
- コンテナ
- Infrastructure as Code
みたいな概念に触れる機会が増え、
「OS自体もコードとして管理したい」
と思うようになりました。
そこで出会ったのが NixOS です。
NixOSとは
NixOS は、宣言的な設定を特徴とする Linux ディストリビューションです。
普通の Linux では、
sudo apt install ...
sudo pacman -S ...
のように、環境へ直接パッケージを追加していきます。
一方 NixOS では、
environment.systemPackages = with pkgs; [
git
neovim
docker
vscode
];
のように、
「どういう環境にしたいか」
を設定ファイルに書いて管理します。
つまり OS の状態そのものをコードとして扱えます。
これがかなり衝撃でした。
NixOS の何が嬉しいのか
特に良いと思ったのはこの辺です。
- 新しいPCでも同じ環境を再現できる
- rollback ができる
- package の衝突が起きにくい
- dotfiles と相性が良い
- 開発環境を GitHub 管理しやすい
普通の Linux だと、
「このパッケージ入れたら別のものが壊れた」
みたいなことがたまにあります。
ですが NixOS では、
パッケージが独立した場所に保存されるため、
依存関係の衝突がかなり起きにくいです。
「環境をコードで管理する」という思想がかなり刺さりました。
まずは VirtualBox で試す
いきなり実機へ入れるのは正直かなり怖かったです。
なにせ普段使いのPCのパーティションを触るわけなので。
そこでまずは VirtualBox 上で試すことにしました。
ISO を入れて起動
公式サイトから ISO イメージをダウンロードします。
VirtualBox で新規 VM を作成し、ISO を選択して起動します。
インストーラを起動するとこんな画面になります。
インストールメニュー。とりあえずデフォルト設定で進めました。
地域と言語を設定します。
キーマップは US から JIS に変更しました。
デスクトップ環境を選択できますが、
今回は後から Hyprland を導入したかったので No desktop を選択。
仮想環境なのでディスクはそのまま全消去。
最終的にはこんな感じの構成でインストールしました。
ISO を抜き忘れる
再起動後、なぜかまたインストーラ画面へ戻されました。
原因は単純で、ISO イメージを抜き忘れていました。
VirtualBox の
- 設定
- ストレージ
- 光学ドライブ削除
で解決しました。
無事起動。
Hyprland を入れたい
このままでも良かったのですが、
せっかくなので以前から気になっていた
Hyprland を使ってみることにしました。
Hyprland は Wayland ベースのタイル型ウィンドウマネージャです。
最初は、
「ウィンドウマネージャって何……?」
という状態でした。
でも使ってみるとかなり快適でした。
- キーボード主体で操作できる
- 無駄なアニメーションが少なく軽い
- 見た目を自由にカスタマイズできる
- “Linux使ってる感” がすごい
特に開発との相性がかなり良いです。
ただし VirtualBox では厳しかった
悪戦苦闘したのですが、
Wayland 系は VirtualBox の GPU 周りと相性があまり良くなく、
Hyprland をまともに動かせませんでした。
ということで、
「もう実機に入れるしかない」
となりました。
実機へ NixOS を導入
ここからはデュアルブートです。
正直かなり緊張しました。
パーティションを壊したら Windows が起動しなくなるので。
ですが NixOS の
- rollback
- 宣言的設定
- 再現性
を考えると、
「今後 Linux をメインにするならこれが良いかもしれない」
と思い、思い切って導入しました。
configuration.nix を編集する
NixOS の面白いところは、
GUI 環境ですら設定ファイルに書けることです。
まずは /etc/nixos/configuration.nix を編集します。
{ config, pkgs, ... }:
{
programs.hyprland.enable = true;
environment.systemPackages = with pkgs; [
kitty
waybar
rofi-wayland
firefox
git
neovim
];
}
実際には周辺設定も多少必要ですが、
最低限こんな感じです。
編集後は、
sudo nixos-rebuild switch
を実行。
これだけで必要なパッケージがまとめて導入されます。
初めて見た時はかなり衝撃でした。
普通の Linux だと、
sudo pacman -S hyprland waybar kitty
のように個別に入れていきます。
ですが NixOS は、
「どういう環境にしたいか」
を宣言するだけです。
この思想がかなり好きでした。
起動してみる
rebuild 後、再起動。
ログイン画面から Hyprland を選択すると――
めちゃくちゃかっこいい。
正直かなりテンションが上がりました。
最初は黒い画面しか出なくて焦りましたが、
ターミナルを開いてみるとちゃんと動いていました。
デフォルト操作
| 操作 | キー |
|---|---|
| ターミナル起動 | SUPER + Q |
| ウィンドウ移動 | SUPER + 矢印 |
| アプリ起動 | SUPER + R |
| ウィンドウを閉じる | SUPER + C |
SUPER は Windows キーです。
dotfiles を GitHub で管理する
せっかく再現性の高い環境なので、
設定も GitHub で管理することにしました。
ディレクトリ構成はこんな感じです。
dotfiles/
├── home.nix
├── configuration.nix
├── hypr/
│ └── hyprland.conf
├── waybar/
└── nvim/
これを GitHub に push しておけば、
- PC が壊れても
- 別PCへ移行しても
- 設定を壊しても
かなり簡単に復元できます。
ここで、
「環境をコードで管理する」
という感覚が完全につながりました。
実際に数日使ってみた感想
かなり良いです。
特に良かったのは、
- 開発環境の再現が本当に楽
- rollback の安心感が強い
- package の衝突が少ない
- config を GitHub 管理しやすい
この辺でした。
逆に難しかったのは、
- エラーが難解
- 情報がまだ少ない
- “普通のLinux” の知識がそのまま通用しない
という点です。
特に最初は、
なんで設定変えたのに反映されないんだ……
みたいなことが結構ありました。
ですが、慣れてくるとかなり面白いです。
まとめ
NixOS はかなりクセが強い OS です。
ですが、
- 開発環境を綺麗に管理したい
- dotfiles を極めたい
- 再現性を重視したい
- Linux をもっと触りたい
みたいな人にはかなり刺さると思います。
少なくとも僕は、
「Linux環境を使うためのOS」
としてかなり気に入りました。
しばらくは NixOS + Hyprland 生活を続けてみようと思います。
次は、
- flakes
- home-manager
- nix-darwin
- devShell
あたりにも挑戦して、
もっと環境管理を極めていきたいです。







