GNOMEまたはXFCE入りのNixOSをVMへ入れるための、初心者向け設定ファイルです。
- ホスト名:
nixos-vm - デスクトップ: GNOME + GDM(既定) / XFCE + LightDM
- Flake構成:
nixos-vm(GNOME) /nixos-vm-xfce(XFCE) - ブラウザ: Firefox(既定) / Chromium / Vivaldi
- アプリ: Slack、Bitwarden、Discord、Obsidian、Zed、VS Code
- シェル: zsh + Oh My Zsh(履歴共有・重複整理・履歴サジェストつき)
- ターミナル: Ghostty
- コンテナ: Docker CLI/Engine
- フォント: 源ノ角ゴシック/明朝、Source Han Code JP、Notoフォールバック、Noto Color Emoji
- 言語/地域: 日本語
- キーボード: 日本語配列
- 日本語入力: Fcitx5 + Mozc(Mozcを既定入力に設定)
- 初期ユーザー:
nixos - 初期パスワード:
nixos - SSH: 有効(ユーザー
nixosで接続)
Important
hardware-configuration.nix はVMごとに違うため、このリポジトリには含めていません。
インストール中に nixos-generate-config --root /mnt で生成したものを使ってください。
NixOSのISOイメージをダウンロードします。
- 公式サイト: https://nixos.org/download/
- 初めてなら、Graphical ISOを選ぶと操作しやすいです。
VMの目安:
- CPU: 2コア以上
- メモリ: 4GB以上
- ディスク: 30GB以上
- ファームウェア: UEFI
- ネットワーク: NATでOK
VirtualBox、VMware、GNOME Boxes、UTM、QEMU/KVMなどで動かせます。
Important
この設定は systemd-boot を使うUEFI向けです。
VirtualBoxを使う場合は、VM設定の「システム」→「マザーボード」→「EFIを有効化」にチェックを入れてください。
EFIが無効のままだと、インストール後に Booting from Hard Disk... から進まないことがあります。
NixOSのライブ環境で端末を開き、rootになります。
sudo -iディスク名を確認します。
lsblk以降の例ではインストール先ディスクを /dev/vda としています。
VirtualBoxなら /dev/sda になることがあります。
Warning
次の手順は指定したディスクを初期化します。 VM用に作った空ディスクを選んでいることを確認してください。
UEFI用の標準的な構成です。
parted /dev/vda -- mklabel gpt
parted /dev/vda -- mkpart ESP fat32 1MiB 512MiB
parted /dev/vda -- set 1 esp on
parted /dev/vda -- mkpart primary ext4 512MiB 100%
mkfs.fat -F 32 -n boot /dev/vda1
mkfs.ext4 -L nixos /dev/vda2マウントします。
mount /dev/disk/by-label/nixos /mnt
mkdir -p /mnt/boot
mount /dev/disk/by-label/boot /mnt/bootnixos-generate-config --root /mntこれで /mnt/etc/nixos/hardware-configuration.nix が生成されます。
このファイルはそのVM固有なので、基本的に手で書き換えなくて大丈夫です。
ライブ環境でこのリポジトリを取得します。
nix-shell -p git --run "git clone https://github.com/showyou/generic-development.git /tmp/generic-development"まだこの変更がmainに入っていない場合は、作業ブランチをチェックアウトします。
cd /tmp/generic-development
nix-shell -p git --run "git checkout cursor/nixos-xfce-vm-setup-5332"設定ファイルをコピーします。
cp /tmp/generic-development/nixos/{common,configuration,configuration-xfce,desktop-gnome,desktop-xfce,flake}.nix /mnt/etc/nixos/hardware-configuration.nix は上書きしないでください。
上のコピーコマンドでは含めないようにしています。
通常の nixos-install でXFCE版を使う場合は、XFCE用の設定を configuration.nix として使います。
cp /mnt/etc/nixos/configuration-xfce.nix /mnt/etc/nixos/configuration.nixFlakesでインストールする場合は、次の手順で .#nixos-vm-xfce を指定できるため、この上書きは不要です。
初めてなら、まず通常のNixOSインストールとして実行するのが簡単です。
nixos-installFlakesでインストールしたい場合は、代わりに次を使います。
cd /mnt/etc/nixos
nixos-install --flake .#nixos-vmXFCE版をFlakesでインストールする場合は、次を使います。
cd /mnt/etc/nixos
nixos-install --flake .#nixos-vm-xfce途中でrootパスワードを聞かれたら、好きなパスワードを設定します。 完了したら再起動します。
rebootISOを外して、インストール済みディスクから起動してください。
GNOMEまたはXFCEのログイン画面で以下を使います。
- ユーザー名:
nixos - パスワード:
nixos
ログイン後、すぐにパスワードを変更してください。
passwdSSHで入る場合は、VM内でIPアドレスを確認します。
hostname -I手元の端末から接続します。
ssh nixos@VMのIPアドレスProxmoxでVMのネットワークをNATにしている場合は、ホスト側のポートフォワードが必要です。 同じLANから直接つなぐなら、ブリッジ接続にしてVMへIPアドレスが割り当たっていることを確認してください。
設定を変更したら、次のコマンドで反映します。
sudo nixos-rebuild switchFlakesを使っている場合は、次のコマンドで反映します。
sudo nixos-rebuild switch --flake /etc/nixos#nixos-vmXFCE版をFlakesで使っている場合は、次のコマンドです。
sudo nixos-rebuild switch --flake /etc/nixos#nixos-vm-xfce日本語入力の設定を反映した直後は、一度ログアウトしてログインし直してください。
ログインし直した後、半角/全角 または Ctrl+Space で Mozc に切り替えられます。
zshの履歴設定も共通で有効化しています。
- 履歴保存数: 100000件
- 複数ターミナル間で履歴を共有
- 重複履歴を整理して保存
- 入力中の文字で上下キーを押すと、前方一致する履歴を検索
- 過去の履歴からコマンド候補を薄く表示
履歴に残したくないコマンドは、先頭にスペースを入れて実行してください。
Fcitx5が起動しているか確認するには、次を実行します。
fcitx5-remote入力メソッドの一覧をGUIで確認したい場合は、次を実行します。
fcitx5-configtool「Input Method」に keyboard-jp と Mozc が入っていればOKです。
Dockerを使えるか確認します。
docker --version
docker run hello-worldフォントが反映されているか確認するには、次を実行します。
fc-match sans-serif
fc-match serif
fc-match monospaceデスクトップ環境やアプリ側で古いフォント表示が残る場合は、一度ログアウトしてログインし直してください。
common.nix のここを変えます。
users.users.nixos = {
isNormalUser = true;
description = "NixOS User";
extraGroups = [
"docker"
"networkmanager"
"wheel"
];
initialPassword = "nixos";
shell = pkgs.zsh;
};例: ユーザー名を showyou にするなら:
users.users.showyou = {
isNormalUser = true;
description = "showyou";
extraGroups = [
"docker"
"networkmanager"
"wheel"
];
initialPassword = "nixos";
shell = pkgs.zsh;
};共通アプリは common.nix の environment.systemPackages に追加します。
GNOMEだけ、XFCEだけで使うものは desktop-gnome.nix または desktop-xfce.nix に追加します。
environment.systemPackages = with pkgs; [
curl
ghostty
git
vim
wget
vscode
];VirtualBoxでクリップボード共有や画面リサイズを使いたい場合は、
common.nix に次を追加します。
virtualisation.virtualbox.guest.enable = true;先に次を実行してください。
nixos-generate-config --root /mntlsblk で表示されたインストール先ディスクに読み替えてください。
VirtualBoxでは /dev/sda のことがあります。
多くの場合、VMがLegacy BIOSで起動しているのに、ディスクはUEFI用としてインストールされている状態です。 この設定はUEFI前提なので、まず次を確認してください。
- VMをシャットダウンする
- VM設定でUEFI/EFIを有効にする
- VirtualBox: 「設定」→「システム」→「マザーボード」→「EFIを有効化」
- VMware/UTM/QEMU/KVMでもFirmwareをUEFIにする
- NixOSのISOを取り外す、または起動順でハードディスクを先にする
- もう一度起動する
それでも起動しない場合は、UEFIを有効にした状態でNixOS ISOから起動し直し、
既存のパーティションをマウントして nixos-install を再実行してください。
sudo -i
mount /dev/disk/by-label/nixos /mnt
mkdir -p /mnt/boot
mount /dev/disk/by-label/boot /mnt/boot
nixos-install
rebootまだ何も大事なデータが入っていないVMなら、UEFI/EFIを有効にした状態で手順3からやり直すのが一番簡単です。
VMではホストとの時刻差やNTP同期前の起動により、ブラウザでSSL証明書エラーが出ることがあります。
特に NET::ERR_CERT_DATE_INVALID や証明書の有効期限に関するエラーの場合は、まず時刻を確認してください。
date
timedatectl時刻がずれている場合は、NTP同期を有効化して同期し直します。
sudo timedatectl set-ntp true
sudo systemctl restart systemd-timesyncd.service
timedatectlこの設定では services.timesyncd.enable = true; を明示して、起動後に時刻同期されるようにしています。
時刻が正しい場合、端末に出る handshake failed はChromium系ブラウザのバックグラウンド接続や、
HTTP/3/QUIC接続の失敗ログであることがあります。
ページ自体が開けているなら、多くの場合は無視して大丈夫です。
ページ自体が開けない場合は、ブラウザ以外でもTLS接続できるか確認します。
curl -Iv https://www.mozilla.org/
curl -Iv https://www.google.com/curl でも失敗する場合は、DNS、プロキシ、ファイアウォール、証明書ストア側の問題です。
curl は成功してブラウザだけ失敗する場合は、ブラウザのエラーコード全文を確認してください。
この設定では、Fcitx5の既定入力メソッドとして keyboard-jp と Mozc を入れています。
設定を反映した後は、まずログアウトしてログインし直してください。
sudo nixos-rebuild switchFlakesで使っている場合:
sudo nixos-rebuild switch --flake /etc/nixos#nixos-vmXFCE版をFlakesで使っている場合:
sudo nixos-rebuild switch --flake /etc/nixos#nixos-vm-xfceログインし直した後、半角/全角 または Ctrl+Space で Mozc に切り替えます。
確認には次を使えます。
fcitx5-remote
fcitx5-configtoolfcitx5-configtool の「Input Method」に keyboard-jp と Mozc が入っていることを確認してください。
古いユーザー設定が残っている場合でも、この設定ではNixOS側のFcitx5設定を優先します。