CHUWI MiniBook X N100にArchLinuxを入れる

# CHUWI MiniBookmX N100
CHUWI MiniBook X N100は2023/07に発売された10.51インチの小型ノートpc
重量:920g 電池持ち:8h CPU:intelN100 RAM:12G ROM:nvme512G

小型かつ必要十分なスペックを備えており深夜テンションで衝動買いした
Lenovo YOGA 650を押しのけてメイン機として働いている

欠点は電池持ちの悪さであり、30W出力の10000mAhモバイルバッテリーを持ち歩くことで補っている

- Windowsを動かしていると
    - N100とはいえ100%張り付きがよくある
        - 熱い
        - cf. 電池持ちの話
    - 何もしていないのにRAM4GBは持っていかれる
    - Microsoftがあまり好きじゃない
    - マイコンのコンパイル時間が長い
- ArchLinuxは
    - ArchWikiをはじめ情報が非常に多い
    - 周りに常用している人が多い
    - なんかいい

のでWindowsは回復用の環境として残しつつ
ArchLinuxとのデュアルブートにすることにした

# 手順

## ブートメディアの準備
### isoイメージのダウンロード

https://www.archlinux.jp/download/

USBメモリに書き込むデータをダウンロードする

`6.7.3` ~ `6.8.2`のカーネルはディスプレイの初期化手順の関係で画面が下半分しか映らないバグが存在するので避けること

### rufusのダウンロード

isoをUSBメモリに書き込むためのソフトをダウンロード

```sh
scoop install extras/rufus
```

### USBにisoを焼く

rufusを起動、目当てのUSBメモリとダウンロードしたisoを選択し書き込む
USBメモリのデータは全て削除される

### then
Windows側で必要な設定を行う

## Windowsの設定
### パーティションの縮小
ディスクの管理を起動(Win+X K)
CとかDとかNTFSとか書いてあるバーを右クリックしてパーティションの縮小を選択
Linuxに割り当てたい容量分縮小する

### BitLockerの解除
Windowsのディスク暗号化
これが有効になっているとインストール時にディスクが見えない
今回はそもそもされていないはずなのでスルー

### ハードウェアクロックの設定
RTCにUTCを書くように設定
管理者権限で実行
```sh
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
```
### ファストブートをオフにする
コントロールセンター > 電源 > 電源ボタンの動作を変更する
高速起動のチェックボックスを外す

### then

- シャットダウン
- iso焼いたUSBを刺す
- 起動、F2等押してBIOSに入る

## BIOS
### ファストブートとセキュアブートをオフにする
殆どの場合bootセクションにある

### USBから起動
起動順序でUSBが一番上に来ていない場合これを一番上へ移動

### then
- 保存して終了
- 自動的にUSBから起動する

## ArchLinuxのインストール

### キー配列と画面回転の設定
```sh
loadkeys jp106
echo 1 | tee /sys/class/graphics/fbcon/rotate_all
```

### ネットワークに接続
```sh
iwctl
    station wlan0 scan
    station wlan0 connect SSID
    station wlan0 show
    exit
timedatectl status # 時刻同期 NTP→システム
```

### パーティション

```sh
lsblk # 現状チェック
cfdisk # efi:550M, swap:16G, main:x
    [New] 550M (/dev/nvme0n1p4)
    [Type] EFI system
    [New] 16G (/dev/nvme0n1p5)
    [Type] Linux swap
    [New] 好きなだけ (/dev/nvme0n1p6)
    [Write] yes
lsblk # 現状チェック
mkfs.ext4 /dev/nvme0n1p6
mkfs.fat -F 32 /dev/nvme0n1p4
mkswap /dev/nvme0n1p5

mount /dev/nvme0n1p6 /mnt
mount --mkdir /dev/nvme0n1p4 /mnt/boot
swapon /dev/nvme0n1p5
lsblk # マウント及びスワップが正しくできているかチェック
#   ~
#   p4 /mnt/boot
#   p5 [SWAP]
#   p6 /mnt
#   ~
```

### ArchLinuxのインストール
```sh
pacman -Sy archlinux-keyring # 古いisoの場合これがないとpacstrapに失敗する
pacstrap -K /mnt base linux linux-firmware intel-ucode efibootmgr grub os-prober sudo nano git base-devel networkmanager bluez bluez-utils
```

### chroot

```sh
genfstab -U /mnt >> /mnt/etc/fstab # マウント構成を保存
arch-chroot /mnt
```

### 地域と時刻の設定
本来はロケールの指定も行うべきだが、この時点で行うと$HOMEに日本語のファイルができるので後で
```sh
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc # 時刻同期 システム→PC本体
nano /etc/locale.gen # en_US.UTF8とja_JP.UTF8の行の#を外す
locale-gen
echo ホスト名 >> /etc/hostname # 好きな名前
echo KEYMAP=jp106 >> /etc/vconsole.conf
```

### ブートローダのインストール
```sh
nano /etc/default/grub # 以下の項目を設定
# GRUB_CMDLINE_LINUX="video=DSI-1:panel_orientation=right_side_up"
# GRUB_DISABLE_OS_PROBER=false の#を外す
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
mount --mkdir /dev/nvme0n1p1 /mnt/win
grub-mkconfig -o /boot/grub/grub.cfg
```

### ユーザー設定
```sh
passwd # rootのパスワードを設定
useradd -m -g wheel ユーザー名 # sudoが使えるユーザーを作成
passwd ユーザー名 # ユーザー名 のパスワードを設定
nano /etc/sudoers  # Defaults env_keep += "HOME"　と　%wheel ALL=(ALL) ALL の#を外す
```

### then
```sh
reboot # 再起動
```
再起動したらsudoが使えるユーザーでログイン

## KDEのインストール
### ネットワークの有効化
```sh
sudo systemctl enable --now NetworkManager bluetooth # ネット関連を登録して起動
nmcli device wifi connect [SSID] password [PASSWORD]
```

### yayのインストール
```sh
git clone https://aur.archlinux.org/yay-bin
cd yay-bin
makepkg -si
cd ..
rm -rf yay-bin
yay -Sy # パッケージ情報を最新のものに更新
```

### KDE Plasmaのインストール
```sh
yay -S plasma-meta # pipewire-jack noto-sans phonon-qt5-gstreamer がおすすめ
yay -S dolphin konsole spectacle ufw # 実用上必須なソフトのインストール
yay -S noto-fonts-emoji noto-fonts-cjk otf-monaspace # フォントのインストール
sudo mkdir /etc/sddm.conf.d
sudo nano /etc/sddm.conf.d/10-wayland.conf # ログイン画面がwaylandで起動するように
	[General]
	DisplayServer=wayland
	GreeterEnvironment=QT_WAYLAND_SHELL_INTEGRATION=layer-shell
	[Wayland]
	CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts --locale1
sudo systemctl enable --now sddm # ログイン画面を登録して起動

# 標準のアプリストアと暗号化ソフトが不要な場合は以下でアンインストール
yay -Rdd discover plasma-vault
```

Plasma設定にて好みに設定
- ディスプレイ
- 入力 > トラックパッド
- ダークモード
- 起動と終了 > SDDM > Plasma設定を適用
- 壁紙設定場所
    - デスクトップ: デスクトップを右クリック > 壁紙
    - ロック画面: ウィンドウの挙動 > スクリーンロック > 外観
    - ログイン画面: 起動と終了 > SDDM


### 日本語入力環境
```sh
yay -S fcitx5-mozc fcitx5-im
echo "export XMODIFIERS=@im=fcitx" >> ~/.bash_profile
```

日本語入力を扱ううえで以下は必須
Plasma設定より
- 入力 > 仮想キーボード fcitx5
- 地域と言語 > 入力メソッド Japanese mozc

システムの配列が違うと怒られるのでfixをぽち

### ロケール設定
```sh
sudo nano /etc/locale.conf # LANG="ja_JP.UTF8"
rm ~/.config/plasma-localerc # KDEが起動時に勝手にLANGを上書きしているので消す

reboot
```

### ハイバネート
```sh
sudo nano /etc/makeinitcpio.conf # HOOKSにresumeを足す
mkinitcpio -p linux

sudo nano /etc/default/grub
# loglevel=3 quiet のところに resume=UUID=<UUID> を追記
# <UUID>はスワップパーティション(今回は /dev/nvme0n1p5)のUUID
# lsblk -o NAME,UUID で見れる
grub-mkconfig -o /boot/grub/grub.cfg

reboot

# ブートローダを飛ばして起動したい場合は
# /etc/makeinitcpio.d/linux.preset
# も編集してmkinitcpio -p linux
```

### Electron系

XXをバージョン番号に置き換える

```sh
yay -S code discord_arch_electron
nano ~/.config/electronXX-flags.conf
    --enable-features=WaylandWindowDecorations
    --ozone-platform-hint=auto
	--enable-wayland-ime
```

### Firefox
```sh
yay -S firefox

# デフォルトがwaylandなので必須ではないがこれやるとwayland強制
echo "export MOZ_ENABLE_WAYLAND=1" >> ~/.bash_profile
```

### mdns
```sh
sudo systemctl enable --now avahi-daemon
```

# おまけ

## iwdを使う
```sh
pacman -S iwd
sudo nano /etc/iwd/main.conf 
#	[General]
#	EnableNetworkConfiguration=true
#	[Network]
#	NameResolvingService=systemd

# NetworkManagerを切ってから
# systemd-resolvedがmdnsやってくれるのでavahi-daemonも切っておく
sudo systemctl enable --now iwd systemd-resolved
iwctl
```