そもそもNixとは?
OSとしてのNIX OS
NixOSは、構成管理とパッケージ管理を統合した、機能豊富なLinuxディストリビューションです。NixOSは、他のディストリビューションと異なる特徴を持っており、システム構成やアプリケーションの管理方法が独自です。
特徴:
- Declarative Configuration: NixOSは、システムの構成を宣言的に定義します。これは、コンフィグレーションファイルやスクリプトを編集する代わりに、設定オプションを変更するだけでシステムを変更できることを意味します。
- Atomic Upgrades and Rollbacks: NixOSは、システム全体をアトミックにアップグレードまたはロールバックできる機能を提供します。これにより、システムの安定性と信頼性が向上します。
- Isolation and Reproducibility: アプリケーションや環境は、Nixパッケージマネージャを使用して分離され、再現性のある方法で管理されます。これにより、異なるバージョンのパッケージを同じシステム上で簡単に実行できます。
パッケージ管理ツールとしてのNIX
Nixは、パッケージ管理システムであり、NixOSだけでなく他のLinuxディストリビューションやUnix系オペレーティングシステムでも使用できます。Nixは、従来のパッケージ管理システムとは異なる方法でパッケージを管理します。
特徴:
- Functional Package Management: Nixは、パッケージの依存関係を含む全体の環境を関数として表現します。これにより、環境の変更や異なるバージョンのパッケージの同居が容易になります。
- Atomic Transactions: パッケージのインストールやアンインストールは、トランザクションとしてアトミックに実行されます。これにより、環境の一貫性と信頼性が保たれます。
- Versioning and Isolation: 異なるバージョンのパッケージは、互いに干渉せずにシステム内で共存できます。これにより、アプリケーション間の依存関係が問題なく管理されます。
NIX OSのインストール方法
公式ダウンロードサイトからNIXOSをダウンロード。
ページ上部のNixはパッケージマネージャなので注意する。
インストーラは手元の環境に一致するものをダウンロード。
Ubuntuなど一般的なLinuxGUIインストーラの手順と同じなので、手順に沿ってインストールする。
configファイルの分類
-
ユーザー全員にインストールしたい場合
- /etc/nixos/configuration.nixに設定を書く。
-
特定のユーザだけインストールしたい場合
- nix-envコマンドで直接インストールする。
- ~/.config/nixpkgs/config.nixに設定を書く。
-
あるユーザーのある開発環境だけ
- nix-shellコマンドを使う。
- nix-shell -p hogehoge とすると、hogehogeのあるshell環境ができる。
- exitをするとそのhogehogeへの参照が消える。
最初にやること。
初期設定のために
各種configを書き換えるために、vimをインストールする。
nix-shellとは、あるユーザーのある開発環境だけに作用するパッケージでexitすると参照が消えるもの。
他にも一時的に使用したいものがある場合はこれを使う。
nix-shell -p vim
ハードウェア情報を反映する。
nix-hardwareからお使いのハードウェア情報を調べる。
nixos-hardwareのチャンネルを追加してアップデートする。
$ sudo nix-channel --add https://github.com/NixOS/nixos-hardware/archive/master.tar.gz nixos-hardware
$ sudo nix-channel --update
configuration.nix上部のconfigurationを読んでいる部分を以下のように書き換える。
$ sudo vim /etc/nixos/configuration.nix
imports = [
<nixos-hardware/lenovo/thinkpad/x1/10th-gen>
./hardware-configuration.nix
];
リビルドする。
sudo nixos-rebuild switch
各種packageをインストールする。
configuration.nixを変更してパッケージを宣言する。
$ sudo vim /etc/nixos/configuration.nix
configration.nix下部のenvironment.systemPackagesに好きなパッケージを追加する。
パッケージの名前は以下のサイトから検索できる。
以下サンプル
environment.systemPackages = with pkgs; [
vscode wireshark
gnumake automake cmake
gcc gdb nodejs
tilix
brave
zoom-us slack discord
docker-compose
fzf
direnv
gnupg
mpd
htop
];
日本語入力
他のi18nの記述周辺に以下の設定を入れる。
$ sudo vim /etc/nixos/configuration.nix
i18n.inputMethod = {
enabled = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-mozc
fcitx5-gtk
];
};
リビルドし、再起動する。
sudo nixos-rebuild switch
sudo reboot now
その後以下のコマンドを用いてmozcを有効化する。
$ fcitx5-configtool
画面右側の検索バーからmozcを選んで左に移す。
デフォルトのIME切り替えはCtr+Spa
指紋認証有効化
configにfprintd
パッケージを追加する。追加箇所は他のパッケージと同じところ。
$ sudo vim /etc/nixos/configuration.nix
任意の場所に以下の設定をいれる。
services.fprintd.enable = true;
services.fprintd.tod.enable = true;
services.fprintd.tod.driver = pkgs.libfprint-2-tod1-vfs0090;
リビルドして再起動。その後gnomのSettingのUserにfingureprintが出るので登録する。
sudo権限の指紋認証も自動で設定される。
sudo nixos-rebuild switch
sudo reboot now
flakes
nix = {
settings = {
experimental-features = ["nix-command" "flakes"];
};
};
任意のフォルダで以下を実行することで,flakeのテンプレートを入手可能
nix flake init --template github:kino-ma/flake-templates#devshell
vim flake.nix
nix develop
home-manager
imports =
[ # Include the results of the hardware scan.
<nixos-hardware/lenovo/thinkpad/x1/10th-gen>
./hardware-configuration.nix
<home-manager/nixos>
];
home-manager.users.feles = { config, pkgs, ... }: {
imports = [
/home/feles/dotfiles/home.nix
#/home/feles/.config/nixpkgs/custom.nix
];
home.homeDirectory = "/home/feles";
};
基本的なコマンド
- 特定のユーザにインストールする場合:nix-env
- /etc/nixos/configuration.nixを編集した後に打つもの。:sudo nixos-rebuild switch
- No space left on deviceと言われたとき:sudo nix-collect-garbage -d
- それでもだめなとき:sudo /run/current-system/bin/switch-to-configuration boot
以下学びながら追記していきます。