要約
長くなるのでやったことを簡単にまとめておきます
NixOSのライブ環境を起動する時は引数にnomodesetをつける
↓
インストールした後の最初の起動も引数にnomodesetが必要
↓
セキュアブートのためにWindowsの初期ブート領域の容量である100MBから拡張するためにパーティションを作り直し
↓
パーティションを作り直したことで壊れたブートローダーを復元
↓
ついに快適なゲーミングライフを手にする
なぜやろうと思ったのか...?
冬の寒い時期になって彼女が欲しいなぁとか思いながら過ごしていましたが、出来そうにないので、とりあえずNixOSを入れるところから始めてみることにしました.... 僕は普段Windowsでゲームをしているのですが、どうやらLinuxでも動くものが多くなってきたらしい(SteamのProtonなどの力で...)ので、最近のWindowsの不安定さから脱出するためにNixOSに乗り換えよう!と思ったのですが、ValorantというゲームをするためにはWindowsを使う必要があったので、今回はWindowsとデュアルブートすることにしました。
初期構成
- WIndows11 のみの入ったPC
- ASUSのマザボ
- SSD 2TB
- RAM 32GB
- GPU RTX3080
ざっとこんな感じ
1.パーティションを作った
僕の環境にSSDは一枚しかなかったため、今使ってるWindowsからパーティションを切り出す必要がありました。困りました.....とりあえず、ディスクを管理から適当にWindowsのパーティションを切って空のパーティションを作りました。
2.NixOSのライブ環境を起動
事前に作っておいたNixOSのインストールUSBからブートしてみました。が.....なぜか画面が映りません。困りました.....Gemini先生によると、どうやら僕の使っているRTX3080とデフォルトで使用されるnouveauというグラフィックドライバーは相性が悪いようで、NixOSのライブ環境を起動する構成を選ぶ画面で引数を指定する必要があるようです。
具体的には
... loglevel=4 lsm=landlock,yama,bpf
のように書かれている部分があるので、その部分のお尻に、nomodesetとつけてあげるだけです。
こんな感じに!
... loglevel=4 lsm=landlock,yama,bpf nomodeset
3.SSDにインストールする
なんとかGUIインストーラーにたどり着いたので、さっき切り出したパーティションにインストールします...ここはあまり詰まりませんでした...
4.ついにNixOSが動く!??
残念ながらそうはいきませんでした....またGUIが映りません....起動中に急に固まって画面左上の端っこに_だけが表示される謎に突入しました.......
原因はまたnouveauでした...なのでまたさっきと同じnomodesetをつけたら、画面が映った〜!しかしこれでは謎に引き伸ばされたGUIで気持ち悪いし、画質もおかしいです...なおさねばなりません...なのでちゃんとドライバーを入れてあげます。
まず、NixOSのConfigのあるディレクトリに移動します
cd /etc/nixos/
移動したら、nanoなどのエディダーでconfiguration.nixを開いてファイルの一番下にある}の中にこれを追加します。
hardware.nvidia = {
open = true;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
modesetting.enable = true;
};
hardware.graphics = {
enable = true;
};
boot.kernelModules = [ "nvidia-uvm" ];
hardware.nvidia-container-toolkit.enable = true;
services.xserver.videoDrivers = [ "nvidia" ];
追加したら、このコマンドを実行してビルドしましょう
sudo nixos-rebuild switch
キットDoneと表示されたらrebootしてみてください!
多分いい感じに画面が映るようになったはず...!
5.一旦NixOSの環境を整える
一旦NixOSは起動するようになったので、次はNixOSを快適に使うために環境を整えます。
(なぜかbootボリュームの容量が残り3KBですって通知が出ていますが、一旦今は気にしません...
どうやらFlakeとやらを使うといいらしい......のでFlakeを使ってみることにしました。
とりあえずホームディレクトリにconfigというフォルダを作成します
mkdir ~/config
次に今使用してるConfigをコピーします。
cp /etc/nixos/* ~/config/
FlakeのConfigファイルを作ります
touch flake.nix
内容は残念ながら僕も完全に理解しきれていないので僕がこの段階で使っていたConfigを貼っておきます... *このあとセキュアブートで色々躓いて色々変更します.....
#flake.nix
{
description = "NixOS configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, ... }: {
nixosConfigurations = {
nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
}
];
};
};
};
}
#configuration.nix
#さっき書いたGPUドライバー周りの設定にこれを追加した
nix.settings.experimental-features = [ "nix-command" "flakes" ];
home-manager.users.ここは自分のユーザー名 = { pkgs, ... }: {
home.packages = [
pkgs.vesktop #Discord
pkgs.vscode #VScode
];
programs.bash = {
enable = true;
shellAliases = {
#ビルドコマンドを簡略化して使いやすくするエイリアスの登録
"rebuild" = "sudo nixos-rebuild switch --flake /home/tokuzou/configs#nixos";
};
};
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "25.11"; # Please read the comment before changing.
};
fonts.packages = with pkgs; [
noto-fonts-cjk-sans
noto-fonts-cjk-serif
noto-fonts-color-emoji
ipafont
kochi-substitute
inter
nerd-fonts.fira-code
fira-code
];
#Steamのインストール
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
extraCompatPackages = with pkgs; [
proton-ge-bin
];
};
変更したら、もう一度ビルドしてみましょう
sudo nixos-rebuild switch --flake /home/tokuzou/configs#nixos
ビルドが無事Doneしたら次回からの変更はrebuildで行えるようになります!便利〜!!
おそらくうまくいっていると、VesktopとVScode、Steamがインストールされているはずです!
これで一応NixOSでゲームをする環境はできました!
新しいソフトウェアを入れるには?
ソフトウェアのインストールはhome.packages = []の中に書けば入れれるって認識で間違っていないと思う.....ソフトウェア内の設定もConfigで管理するときはprograms.で書くみたいな..?
新しいソフトウェアをインストールするときはここで検索すれば大体出てきます。
見つけたソフトウェアの名前をhome.packagesの中にpkgs.パッケージ名みたいな感じで書けば良いはず....
https://search.nixos.org/packages
6.さて、次はセキュアブートに対応しなきゃ..
快適なWindowsゲーミングをするためにはセキュアブートは絶対です...(VALORANTとか起動したい.....)
まず、セキュアブートをするためには、lanzabooteというの使うといいらしい....
lanzabooteをインストールするためにsbctlというセキュアブートの管理ツールをインストールしました。configuration.nixのパッケージリストにpkgs.sbctlを追記するだけでインストールできます。
ドキュメントに従って、キーの生成を行いました。
https://nix-community.github.io/lanzaboote/getting-started/prepare-your-system.html#generate-keys
次に、flake.nixをこんな感じに書き換えました
(flakeファイルは自分では書けなかったので、Gemini先輩が頑張ってくれました....
{
description = "NixOS configuration with Home Manager and Secure Boot (Lanzaboote)";
inputs = {
# NixOS Unstable (共通)
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# Home Manager
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
lanzaboote = {
url = "github:nix-community/lanzaboote/v1.0.0";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, lanzaboote, ... }: {
nixosConfigurations = {
nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
}
# 3. Lanzaboote モジュール
lanzaboote.nixosModules.lanzaboote
# 4. Lanzaboote 用のインライン設定
({ pkgs, lib, ... }: {
environment.systemPackages = [
# Secure Boot デバッグ・設定用ツール
pkgs.sbctl
];
# Lanzaboote は systemd-boot
boot.loader.systemd-boot.enable = lib.mkForce false;
boot.lanzaboote = {
enable = true;
pkiBundle = "/var/lib/sbctl";
};
})
];
};
};
};
}
よし、じゃああとはrebuildして〜っと...
ここで問題が発生しました。
bootボリュームの容量が足りません.....とのこと。そういえばさっき残り3KBとか出てたな!!
困りました.....というわけでなんとかしてブートボリュームの容量を増やす必要が出てきました。 Re:ゼロから始まるブートローダー再構成を行う必要があります。
7.Re
さて、パーティションをいじいじしていきます。 といってもパーティションを広げるだけだし!きっとすぐできるよね!きっと!!<-フラグ パーティションをCLIでいじる気にはなれなかったので、僕はGparted LiveをUSBに入れて使うことにしました。 Gparted Liveは便利でUSBに入れてBootしたらそのままパーティションをいじることができます!! Gpartedの使い方は簡単なのでおそらく直感的に使えるとは思うのですが、Googleで検索するとたくさん使い方が乗っているので、今回は割愛させてください....(スクショとか撮ってなくて説明しにい....すみません。
パーティションはおそらく一番手前にあるfat32のパーティションを広げてあげればいいと思います。 僕の場合5gbに広げることにしました。NixOSに割り当てたパーティションから5gbを切り出し、パーティションをずらしてなんとか一番手間まで、持ってきて広げてみました.... しか〜〜〜し!なんとfat32は拡張できないらしい......エラーが出てしまいました
作り直さなきゃいけません.....仕方ないです。
一度パーティションを削除し、新しくfat32の5gbのパーティションを作成し、フラグを編集からフラグを設定(esp,bootを有効化)します。<-僕はフラグをつけ忘れて先の作業をした後にここにまた戻ってきました。
フラグまで正しく設定したら次はまたNixOSのインストールUSBからLive環境のNixOSを起動します
8.NixOSのブートローダーを復元
NixOSのインストーラーを最初に起動したのと同じように起動します。 次にターミナルを開いてコマンドを実行します 最初にボリュームのリストを確認します。
lsbld -f
このコマンドの実行結果からFAT32でフォーマットされている先ほど拡張したbootボリュームと、NixOSをインストールしたボリュームをを見つけます。僕の場合NixOSが入ったボリュームがnvme0n1p5
bootボリュームがnvme0n1p1でした。bootボリュームはUUIDの方も覚えておいてください。
次はこれらのボリュームをNixOSのライブ環境にマウントします。
sudo mount /dev/nvme0n1p5 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot
これでNixOSのライブ環境にインストール済みのNix環境を再現する準備ができました。 このコマンドでNixOSに入れます。
sudo nixos-enter --root /mnt
NixOSに入ったらまず、新しくなったbootドライブを設定するためにhardware-configuration.nixを修正します。
fileSystems."/boot" =
{
device = "/dev/disk/by-uuid/[この部分を新しいボリュームのUUIDに変更する]";
...
};
nanoなどを使用して一度/etc/nixos/内にあるhardware-configuration.nixを書き換えることをお勧めします。
書き換えたら、/home/[ユーザー名]/configs内にあるhardware-configuration.nixも置き換えてください。
これでブートローダーを再構成する準備が整ったので、以下のコマンドでブートローダーを修正します。
sudo nixos-rebuild boot --install-bootloader --flake /home/[ユーザー名]/configs#nixos
このコマンドを実行してDoneが表示されればNixOSは修復完了〜!
9.Windowsのブートローダーを復元
次はWindowsを直していきましょう〜!
Windowsも大体やることは同じでした。まずWindowsのインストールUSBを用意してWindowsの回復環境に入りコマンドプロンプトを開いてください。
とりあえずdiskpartに入ります
diskpart
diskpartに入ったらボリュームのリストを出します
list vol
この中からbootボリュームを探します。見つけたら次のコマンドでSドライブにマウントします
select vol bootボリュームの番号
assign letter=S
次はさっきのリストからWindowsのインストールされているボリュームを探します。次はXドライブにマウントします。
select vol Windowsのインストールされたボリュームの番号
assign letter=X
マウントできたらdiskpartから抜けます
exit
あとは仕上げにブートローダーを復元します。
bcdboot X:¥Windows /s S: /f UEFI -c
ここで僕は詰まりました。X:の後にWinまで打ってTabを押すとW
¥をつけましょう。(僕の1時間.....うぅ...
このコマンドがエラーなく実行されれば復旧は終わりです!お疲れ様でした!!
10.セキュアブートを設定する
最後にセキュアブートの設定です。おそらくNixOS側の設定は先ほどブートローダーを復元するためにビルドした際にセキュアブートの設定も一緒にインストールされたはずです。 なのであとはBIOSの設定からセキュアブートをオンにして、BIOSをセキュアブートのSetup Modeにする必要があります。僕のASUSのマザーボードの場合は既存のセキュアブートキーを削除することでそのモードに入ることができました。
Setup Modeがオンになっていれば、セキュアブートがオンの状態でNixOSをブートできるはずです。
うまくいってなかったらsbctlのキーを生成するコマンドをもう一度行ってみたり、rebuildしてみたりするのも効果的かもしれません。
ブートできたら最後の仕上げにこのコマンドでBIOSにキーを登録します。
sudo sbctl enroll-keys --microsoft
このコマンドを実行したらrebootしてみてください。きっとちゃんと起動するはずです。
ブートメニューのWindowsもきっと正しく起動します。Windowsはパスワードの再設定が求められるかもしれませんが、それは正常なので安心してください。
11.長旅の成果
ここまで長旅お疲れ様でした。これでNixOS + Windowsdで快適異世界(systemd-boot)ゲーミングライフを送れますね!クリスマスはぼっちでゲームしましょう! GG