❄️

NixOSを使ってみよう

2023/11/17に公開

はじめに

みなさん、はじめまして。
本記事がZennへの初投稿となりますので、文章かなり下手ですが、温かい目で読んでいただけると幸いです。
本記事は、すこしマイナーだけど便利なOS、NixOSを外付けドライブにインストールして設定をしたので、備忘録として、また、私のようにNix/NixOSに興味を持ってくれた人の役に立てるよう、執筆します。

NixOSとは

https://nixos.org/
Nix OSは、その名の通り『Nix』というパッケージマネージャーを中心に構築されたLinuxディストリビューションです。このNixは、同じソフトのバージョン違いでさえも許容してしまう、とても柔軟なパッケージ管理システムです。
公式HPに"Declarative builds and deployments."とあるように、Nix OSではビルドやデプロイに必要なパッケージや設定を完全に関数として宣言します。すなわち、必要なパッケージや設定をすべて関数として宣言できる、ということです。いわばDockerfileをさらに強化して、ローカル環境で動くようにしたもの、という感じだと思っていただけたらと思います。
ちなみに、NixはNixOS独自のもののように言っていましたが、実は他のLinuxやMac、さらにはWindows(WSL)でも動作します。くわしくはHPへ。

NixOSをインストール

isoイメージのダウンロード

https://nixos.org/download.html
リンク先で下の方にスクロールすると「NixOS:the Linux distribution」という項目があるので、自分の環境に合わせてダウンロードしてください。

参考までに、インストール時はデスクトップ環境を改めて選択できるので、GNOMEかPlasmaかはあまり重要ではありません。直感で決めてください。(迷ったら"Recommended"となっているGNOMEを選びましょう) ※私はPlasma派ですが(笑)

ブータブルUSBの作成

Windows

Windowsの場合はRufusを使うのが一番手っ取り早いです。DDモードで書き込んだほうがよいでしょう。

Mac/Linux

MacかLinuxであれば、DDコマンドを使うのが追加ソフトのインストールが不要なので手軽でしょう。

sudo dd if=<isofile> of=<drive> bs=1M
# isoファイル名がisofile.iso、書き込み対象ドライブが/dev/sdbとすると
sudo dd if=isofile.iso of=/dev/sdb bs=1M

Win/Mac/Linux共通手段

balena Etcherを使用することもできます。Etcher自体はLinuxを使う人ならば入れておいて損はないと思います。

それぞれのツールの使い方は調べれば山ほど出てくるのでここでは割愛します。

インストール

インストーラーはCalamalesなので、NixOSを使おうとする人ならば迷うことはないでしょう。一応後日別記事にしてリンクはっときます。
ただし、当方では外付けSSDにインストールしましたが、手動パーティションでないと上手くインストールできませんでした。
また、途中でデスクトップ環境を聞かれますが、これについては気になるやつを入れてみることを勧めます。中々お目にかかれないDeepinとかも選べますし、気に入らなかったらインストール後に簡単に変えることができます。
インストーラーのフォントが変ですが、日本語フォントが入っていないからで、インストール後に日本語フォントを導入すると解決します。

インストール解説(画像つき)

NixOSが起動するとこのような画面が表示されます。

とりあえずWi-Fi設定などをしないといけないので一度インストーラーを閉じます。
Wi-Fi設定を済ませてインストーラーを再度起動するとNextが押せるようになっています。
言語を"日本語"にして次へを押下

日本語フォントがおかしいですが、インストール後に日本語フォントをインストールすると治ります。


次のページではタイムゾーンなどの設定を行います。
特にこだわりがなければ次へを押下

なお、私は日本式の日付表記があまり好きではないので、数値と日付のロケールを米国にしています。


次のページではキーボードの設定を行います。
普通のJIS配列のキーボードを使っていればそのまま次へを押下
英語配列などの場合はそれぞれにあわせて設定してください。


次のページではユーザー情報を入力します。
ログインパスワードと管理者パスワードは一緒にすることを推奨します。
(管理者パスワードはsudoコマンドなどで必要です)


次のページではデスクトップ環境を選択します。
それぞれのデスクトップ環境の詳細は後日記事を投稿します。

今回はKDE Plasmaを使います。
また、これは後ほどかんたんに変更できます。


次のページでは"Unfree Software"の許可設定を行います。
これは...どっちでもいいです。
よくわからなければチェックをつければいいと思います。
この設定も後ほどかんたんに変更できますが...


次のページではインストール先を指定します。
今回は外付けドライブに予めパーティションを作成しておいたので、適切にマウントして進めます。
ただし、他のオプションがうまく動かないこともあるので、知識がある人は手動パーティションでインストールしたほうがいいと思います。


次のページはサマリーです。
ここで、インストール前の最終確認を行います。
...といっても、このOSで設定を間違えて取り返しがつかないものはインストール先くらいですが(笑)


インストールをクリックするとインストールが始まります。
プログレスバーが40数%のところでしばらく止まりますが、気にしてはいけません。
この本のつづきやNixOSのマニュアル、他の記事でも読んで待っていましょう。
NixOSライブ環境で適当なアプリケーション立ち上げて遊んでもいいでしょう。


完了すると、以下のような画面が表示されます。
そのまま再起動してもいいですが、Live環境での作業は全て消えます。
なので、保存しておきたければGoogle DriveやDropboxに保存しましょう。

再起動するときに、USBを抜かないと、またLive環境が立ち上がるので、電源が落ちたら直ちにLiveUSBを抜きましょう。

初期設定

時計

とりあえずWindowsとかとデュアルブートしてると大体どちらかの時計がバグるのでLinux側で以下のコマンドを実行しましょう。なお、このコマンドはほとんどのLinuxで共通です。
これはあとでconfiguration.nixに記述します。

sudo hwclock --verbose
# 最終行に"UTC"と表示される場合は時計がバグるので、以下のコマンドを実行
sudo hwclock --verbose --systohc --localtime
# 最終行に"LOCAL"と表示されれば成功

configuration.nix

configuration.nixはNixOSのさまざまな設定を宣言的に記入する設定ファイルです。
パスは\etc\nixos\configuration.nixとなっています。
NixOSの設定は基本的にはこのファイルに書き込んで行います。
また、このファイルがあれば新しい環境でもこれをビルドするだけで同じ設定の環境を作ることができます。ただし、\etc\配下なので書き込みにはsudoが必要です。

sudo(初心者向け解説)

sudoコマンドは、Linuxの最も基礎的なコマンドの1つとも言えるであろうほどよく使うコマンドです。
sudoSwitch User Doの略とされています。これは、-uオプションでユーザー名をとり、そのユーザーとして続くコマンドを実行する、というコマンドです。
また、引数なしの場合、rootとして実行するという意味になります。(こっちのほうがよく使います。というかこっちしか使いません)


rootは、Windowsでいうと管理者のことです。(厳密には違う)
rootは、Linux上の「全知全能」のユーザーのようなもので、OSにおける重要な部分に変更を加えることができる権限のことです。
root権限は、やろうと思えばLinuxOSそのものも破壊できてしまうので、必要なときだけrootユーザーとして実行することが一般的です。
そのときに使うコマンドがsudoコマンドです。


引数(ひきすう)とは、コマンドに渡す値です。
例えば、次のコマンドを考えてみましょう。

cd /etc/nixos/

cdChange Directoryの略で、ディレクトリを移動するコマンドです。
このとき、/etc/nixos/が引数となります。

日本語環境構築

とりあえず日本語フォントと日本語入力設定を記入していきます。

Nix-Shell

...とは言ってはみたものの、今はエディターがnanoしか導入されていません。
ということで、NeoVimを導入した環境を一時的に立ち上げます。
そこで使うコマンドがnix-shellというものです。

とりあえず以下のコマンドを打ち込んでください。

nix-shell -p neovim

実行すると、しばらくログが流れて、その後コマンドプロンプトが[nix-shell:~]などに変わります。
その状態ではnvimコマンドが使えます。
NeoVimの使い方については、他の方々の記事を参照してください。
調べるのが面倒であればこれ以降のコマンドのnvimnanoに読み替えてください。
nanoなら使い方が画面上に書いてありますし、
Emacs派のかたはnix-shell -p neovimの代わりにnix-shell -p emacsでEmacsも使えます。

ファイルの書き換え

まず、以下のコマンドを実行してconfiguration.nixを開きます。

sudo nvim /etc/nixos/configuration.nix

その中で、一番外側の{}の中の一番下に以下を追記します。

i18n.inputMethod = {
  enable = "fcitx5";
  fcitx5.addons = [ fcitx5-mozc ];
};
fonts = {
    packages = with pkgs; [
      noto-fonts-cjk-serif
      noto-fonts-cjk-sans
      noto-fonts-emoji
      fira-code
    ];
    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"];
      };
    };
  };

書き終わって、保存までしたら、以下のコマンドでビルドします。

sudo nixos-rebuild switch

ビルドが終わったら再起動します。
そしたらフォントがきれいになって、全角/半角キーを用いた日本語入力が可能になっているはずです。

Flatpak

NixOSのパッケージは主にnixpkgsから導入します。
しかし、まれにnixpkgsのものだと正常に動作しないものがあります。
また、nixpkgs非対応のものもそれなりにあります。
そこで、最終手段として、別のパッケージマネージャーを使うことができます。
今回はFlatpakという有名なストアを使います。

Flatpakとは

Flatpakは、さまざまなディストリビューションで共通して使えるパッケージマネージャーです。
https://flathub.org/
↑ここにあるアプリをかんたんにインストールできます。
追加には、以下をconfiguration.nixに追記してください。

# enable Flatpak
services.flatpak.enable = true;

追記したらビルドして再起動します。
その後、以下をコマンドラインで実行してください。

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

つづきは少しずつ追記していきます!

Discussion