タイトル画像

NixOSのセットアップ

こんにちは。友達がNixOSを入れようとしているらしい静カニです。その友達はD君としておきます。 でD君は今の時点でWindows11、Windows10、Ubuntu、Kubuntu、Lubuntu、ZorinOSのヘキサブートをしているのですが、これにNixOSを加えてセプタブートを企んでいます。 折角D君をNix沼に引きずり込むチャンスなのでNixOSのウザい部分を楽に進められるようガイドを書いてみました。ついでに公開しときます。

注意:このガイドを実行して損害が出ても私は一切の責任を負いません。消えたら困るデータがある場合はバックアップしておいた方が身のためです。

BitLockerを解除する

忘れずにBitLockerは解除してください。OSを入れる際にパーティションをいじるわけですが、これにBitLockerが反応してロックしてしまいます。

これはこの間あったことで、D君とKubuntuを入れたのですが、そのときにBitLockerの解除を忘れた結果ロックされてしまいました。 D君はMSアカウントに紐付けていたためMSのサーバーにアクセスを試みること数十分で復旧することができました。 本当にひどい場合は回復キーを印刷した紙が行方不明になることなので、そうはならなくて安心しました。

ちなみに自分はというと私自身がZorinOSを入れるときに参考にしたサイトに無効化するように書いてあったので回避してました。

セキュアブート関連をいじる

もしセキュアブートを最終的に有効化したい場合、セキュアブートの鍵情報をセットアップモードにリセットする必要があります。 気合でUEFIに入ってセキュリティみたいなところにそれっぽいのがあると思います。 無効化のままで問題ない場合は普通に無効化してください。

OSを入れる

ここはまあ普通にやってください。

デスクトップはお好みで大丈夫です。ただ初心者にNo Desktopは非推奨どころの騒ぎではないので注意してください。自分としてはPlasmaがWindowsに近くてオススメです。

またハイフン入りのユーザー名は自分が入れたときにログインで事故ったので避けてくれると犠牲者が減って嬉しいです。 今回はnixosuserという仮定で通します。他のユーザー名にした場合は適宜置換してください。

鍵を設定する

NixOSでセキュアブートをしたいときはUbuntuなんかと違って自分で設定が必要です。そのための鍵を作り設定していきます。

とりあえずターミナルを開いてください。PlasmaだったらKonsoleと検索すればあると思います。

鍵の設定にはsbctlというツールが必要ですがこれは元々は入っていないのでnix-shellで一時的に使えるようにする必要があります。

また、enroll-keys-mを忘れるとWindowsが起動しなくなります。マルチブートの場合は絶対に忘れないようにしてください。

$ nix-shell -p sbctl
$ sudo sbctl create-keys
$ sudo sbctl enroll-keys -m

このあとsbctlを使う予定はないので、お好みでexitコマンドを叩いてください。

dotfilesのディレクトリを作る

この先の手順でいくつかのファイルが同じディレクトリ(フォルダ)に入っている前提にしてあるので、dotfilesを作っておいてください。 ディレクトリ名はdotfilesじゃなくてもよいですが、dotfilesという仮定にしておきます。

$ mkdir ~/dotfiles && cd ~/dotfiles

flake.nix(とついでにhome.nix)を作る

鍵を作っても有効化するのにLanzabooteというツールが必要です。そしてLanzabooteはflake.nixに書いて動かすので、ファイルを作る必要があります。 あとついでに後でhome.nixも作りたくなることと思うので今のうちに作ってしまいましょう。またネットが必要なので接続していない場合は先に接続を終わらせてください。

楽したい場合

flake.nixとhome.nixはこちらで用意したのでこのコマンドで引っ張ってきてください。

$ curl -sSf https://gist.githubusercontent.com/shizukani-cp/f15c28ceb6990b4b4608b9758a224cca/raw/79d9e3a7650413df36203ff4d21026e79ca3d38d/flake.nix > flake.nix
$ curl -sSf https://gist.githubusercontent.com/shizukani-cp/f15c28ceb6990b4b4608b9758a224cca/raw/79d9e3a7650413df36203ff4d21026e79ca3d38d/home.nix > home.nix

手打ちの温かみを感じたい場合

vimすら標準では入っていないのでテキストエディターは標準で入っているものを探してください。Plasmaの場合はKateがあります。 最終手段はcat > filenameだと思っています。では以下の内容を手打ちしてください。

flake.nix

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
    nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
    home-manager = {
      url = "github:nix-community/home-manager/release-26.05";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    lanzaboote = {
      url = "github:nix-community/lanzaboote/v1.1.0";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    {
      self,
      nixpkgs,
      nixpkgs-unstable,
      lanzaboote,
      home-manager,
      ...
    }@inputs:
    let
      system = "x86_64-linux";
      pkgs = nixpkgs.legacyPackages.${system};
      pkgs-unstable = nixpkgs-unstable.legacyPackages.${system};
    in
    {
      nixosConfigurations."nixosuser" = nixpkgs.lib.nixosSystem {
        inherit system;
        specialArgs = {
          inherit pkgs-unstable;
        };
        modules = [
          lanzaboote.nixosModules.lanzaboote
          ./configuration.nix
          home-manager.nixosModules.home-manager
          {
            home-manager.useGlobalPkgs = true;
            home-manager.useUserPackages = true;
            home-manager.extraSpecialArgs = {
              inherit pkgs-unstable;
            };
            home-manager.users."nixosuser" = import ./home.nix;
          }
        ];
      };
    }
}

home.nix

{ config, pkgs, ...}:

{
  home.username = "nixosuser";
  home.homeDirectory = "/home/nixosuser";

  home.packages = with pkgs; [
    neovim
  ];

  i18n.inputMethod = {
    enabled = "fcitx5";
    fcitx5.addons = with pkgs; [
      fcitx5-mozc
    ];
  };

  home.stateVersion = "26.05";
  programs.home-manager.enable = true;
}

D君はEdge信者なのでメモしておくと、home.packagesの行の[ ]内にmicrosoft-edgeを入れるとEdgeが入ります。

共通

flake.nix内に書いてあるlanzabooteのバージョンについてですが、新リリースが入っても更新してないかもしれないので自分で適宜新しくしてください。

そしてconfiguration.nixを用意しないといけないのですが、これはデフォルトのものからコピーしてください。

cp /etc/nixos/configuration.nix ~/dotfiles/
cp /etc/nixos/hardware-configuration.nix ~/dotfiles/

コピーできたらconfiguration.nixを編集してください。 冒頭のpkgsとか書いてあるところにlibを追加し、以下の内容を追記してください。最後に閉じ括弧があると思うのですが、その括弧の中で他の括弧の中に入っていなければどこでもいいです。

  nix.settings.experimental-features = [ "nix-command" "flakes" ];
  nixpkgs.config.allowUnfree = true;
  boot.lanzaboote = {
    enable = true;
    pkiBundle = "/var/lib/sbctl";
  };
  boot.loader.systemd-boot.enable = lib.mkForce false;

ここまで入力できたらsudo NIX_CONFIG="extra-experimental-features = nix-command flakes" nixos-rebuild switch --flake .#を実行します。 ログアウトしてログインし直したら反映されると思います。エラーが出たら打ち間違いがないか血眼になって探したり仮定との相違を修正したか確かめたりもっと新しい情報を探してください。

もしgit -C "/home/nixosuser/dotfiles" add "configuration.nix"のように出てきた場合、スクリプトがステージされていないファイルにブチ切れているのでそこをケアしてやります。 方法は2つあって、1つ目は.gitを消すこと、2つ目はaddを実行することです。 1つ目は簡単でrm -rf .gitですね。2つ目が少々面倒で、NixOSにはデフォルトでgitコマンドが入っていません。addまで入れて、このように実行します。

$ nix-shell -p git
$ git add .

このあとはさっきのコマンドを実行してください。

最後に

あとは自分で好き勝手に改造してください。

こぼれ話

結局私が大部分を任せられました。信頼してくれているのはありがたいことですが、責任が伴うので怖いものです。