MacBookにArchLinuxを入れる  


間違って完成していないのに投稿してしまいました…
完成したらここの表示は消します…
完成するまでの順序は不定です…
# はじめに
この記事であなたのMacライフが良くなれば嬉しいです。
また、不適切な点があればご指摘いただければ幸いです。
### 注意
#### WiFiについて
__MacBook15まで(~2018)__は内臓のWiFiが使えますが､ __MacBook16(2019~)__からは使う方法が確立されてないみたいです｡
私は`MacBookP15(2018)`なので知りませんが､それ以降のモデルをお持ちの方は有線LANか無線LANカードを刺さないと動きません｡
### 戯言

_お急ぎの方へ。急いで読んでください。_

私はMacOSが正直嫌いです｡MacにWindowsをプリインストールしたらもっと売れるのではと思います｡
さて､Macにして得られるものはXcode以外にあるのでしょうか？
まあ、様々な理由故にWindowsを入れてWSLを使うT2チップ難民が続出した訳ですね。
脱MacOSを推進するために書かせていただきます｡

### 要件
_詳しくないのなら揃えることをおすすめします｡_

- USB Storage (あることを前提に書いています) [任意]
- External Keyboard[^1] (あることを前提に書いています)[任意]
- Refind[^2] (あることを前提に書いています)[任意]

[^1]: > _External Keyboard_を使わずにインストールをするときは､<br>ArchISOでインストールを完結させればキーボードは不要です｡<br>ここでは２回に分けているだけです。
[^2]: > _Refind_を使わずに起動をしたいときは､<br>EFIをSSDのEFIパーティションにおいてください｡

### 内容について
ArchLinuxをインストールします｡
明記していないものはすべて`Run As Root`です｡
ArchISOのBoot段階でカーネルパニックが起きるモデルでは諦めるか､ログを提出するしかないです｡

### ヒント
1: ArchISOはrootをパスワードなしでログインします。
2: 作業の途中で中断したいときは`systemctl suspend`を使用します
3: chmodしてる方は流石にいないと思いますが、viなら`:wq!`で保存できます。

# 下準備 
### パーティショニング(NTFS,APFS関連)
私のMacのSSDは元々Windows10のシングルブートでしたが､Linuxとのデュアルブートにします｡ (左がLinux)
この場合ではNTFSの縮小をしました｡ 各自パーティショニングをしてください｡
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387170/3b38bc54-d822-a25d-6bb8-3482db498a24.png)

### ArchISOの準備
1: [dl.t2linux.org/archlinux/iso/](http://dl.t2linux.org/archlinux/iso/index.html) から最新のISOを取ってきます｡
2: `Rufus`,`Balenaetcher`,`dd`などのツールを使い書き込みます｡ `ventoy`を使ってもいいと思います｡ 
### 起動
これの起動は___`Refind`___ではなく､___`StartupManager`___から起動してください｡
>> StartupManagerとは

> `Option`キーを長押ししながら起動するやつです｡

#### `#インストール = ArchISOでの工程 - キーボード` へ続きます｡

# インストール
## ArchISOでの工程
### キーボード
日本語: `jp106`
US: `us` (default)

```bash:loadkeys-for-jp106
loadkeys jp106
```
### ネットワーク

`<Interface>`を`device list`から採れる実際のものに置き換えて下さい。
`<SSID>`を`station <Interface> get-networks`から採れる実際のものに置き換えて下さい。
上矢印と下矢印が使えます。

```bash:Network
iwctl
# iwd>
device list
station <Interface> scan
station <Interface> get-networks
station <Interface> connect <SSID>
exit
# bash>
systemctl start dhcpcd@wlan0
## or
dhclient
```

### その他準備
[`wiki.archlinux.jp/index.php`/インストールガイド](https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89) をフォローします｡

##### システムクロックの更新
```bash:bash
timedatectl set-ntp true
```
### パーティショニング

私の場合は､SSDの2番目のパーティション: `/dev/nvme0n1p2`をフォーマットして､マウントしました､
パーティションへのパスは置き換えてください｡
また、Linux一本にしたりも出来ます。

#### 私の場合
```console:cgdisk
1   1000.0 KiB   free space
2   1024.0 MiB   EFI system partition   ESP
3   150.0 GiB    Linux filesystem       LINUX-BTRFS
4   82.8 GiB     Microsoft basic data   WIN-NTFS
```

```bash:partitioning
# パーティショニング (例)
gdisk /dev/nvme0n1
 :o
 :w
cgdisk /dev/nvme0n1
# フォーマット
mkfs.btrfs /dev/nvme0n1p2 -m dup
# ROOTFSのマウント
mount /dev/nvme0n1p2 /mnt
# EFIパーティションのフォーマット (任意)
mkfs.fat -F32 -s2 /dev/nvme0n1p1
# EFIパーティションのマウント
mkdir /mnt/esp
mount /dev/nvme0n1p1 /mnt/esp
```
### OSのインストール
#### pacmanの構成
##### `pacman.d/mirrorlist`
これを最適化することでインストール時間を短縮できます｡

```toml:example
Server = https://mirrors.cat.net/archlinux/$repo/os/$arch
```
##### `pacman.conf`
他にRepoを使いたいならこれを編集します｡
#### `/mnt` へのインストール
パッケージが置き換えられる事があるので都度`sed`で置き換えます。
`Import PGP key`と出たら、サーバーからフェッチ出来てない事だと思うので、`pacman -Scc`をして試しても出るなら諦めて`pacman.conf`の`Siglevel`を`Never`にします。

```bash
pacstrap /mnt base-devel linux-firmware p7zip $(pacman -Qq|tr '\n' ' '|sed s/xorg-luit//g)
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
```
#### OSの初期設定
親の顔より見た設定。
##### タイムゾーン
```bash
# For residents of Japan
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc
```
##### ローカリゼーション
###### `/etc/locale.gen`
```configuration:eng和ja
en_US.UTF-8
ja_JP.UTF-8
# Other Lang
...
```

```bash:locale-gen
locale-gen
```

`ja_JP.UTF-8`と`en_US.UTF-8`を有効にすることが多いです｡
###### `/etc/locale.conf`
```configuration:english
LANG=en_US.UTF-8
```
###### `/etc/vconsole.conf`
```configuration:jp106
KEYMAP=jp106
```
##### ホストネーム
簡単に言うとPCのニックネームですね｡
`<HostName💞>` に使いたいホスト名を代入してください。

```configuration:/etc/hostname
<HostName💞>
```

```configuration:/etc/hosts
127.0.0.1	localhost
::1		localhost
127.0.1.1	<HostName💞>.localdomain	<HostName💞>
```
##### Rootのパスワード
```bash:passwd
passwd
```
##### ブートローダー
直接インストールするのは良くないのでRefindを使うことを前提にしています。
refindがきれいになるのでgrubを推奨します。
###### Systemd-boot
［手動でエントリを追加する必要があります。その点grubは楽チン］

```
bootctl --path=/esp install
```
###### Grub
```bash:Install
grub-install --target=x86_64-efi --efi-directory=/esp --bootloader-id=grub --boot-directory=/esp
grub-mkconfig -o /esp/grub/grub.cfg
```
[ここ](https://wiki.archlinux.jp/index.php/GRUB#GPT_.E3.81.A8_ESP_.E3.81.8C.E3.81.82.E3.82.8B.E3.81.8B.E3.81.A9.E3.81.86.E3.81.8B.E7.A2.BA.E8.AA.8D.E3.81.99.E3.82.8B)を参考にします。
##### ファームウェア
```bash:bash
exit # arch-chrootから出る
# ネットワーク
cp -n /lib/firmware/brcm/* /mnt/lib/firmware/brcm
```
## OSインストール後の作業
### ネットワーク
まずネットワーク関連。
やり方を忘れてしまったのなら、前に行ったネットワーク設定を参照してください。

```bash:shell
# Broadcom Firmware Mac
modprobe    brcmfmac
iwctl
# iwd>
device list
station <Interface> scan
station <Interface> get-networks
station <Interface> connect <SSID>
systemctl enable dhcpcd@<Interface>
systemctl start  dhcpcd@<Interface>
systemctl enable NetworkManager
systemctl start  NetworkManager
systemctl enable iwd
systemctl start  iwd
touch /etc/modules-load.d/brcmfmac.conf
```

`/usr/lib/modprobe.d/broadcom-wl.conf`から`brcm*`の行を消します。
下のものが完成形になります。

```bash:/usr/lib/modprobe.d/broadcom-wl.conf
blacklist b43
blacklist b43legacy
blacklist ssb
blacklist bcm43xx
blacklist bcma
```
### 一般ユーザーの作成
Linuxでは一般ユーザーで運用する事、及びそれ前提が多いです。
>**`useradd`** `ユーザー名 -md $home_dir -s $user_shell -c $user_comment`
>例:
-: $home_dir: `/home/ユーザー名` (これが無いとホームディレクトリが作られません)
-: $user_shell: `/usr/bin/(bash,zsh,fishなど)` (任意)
-: $user_comment: `'How do you use'` (任意)

```bash:useradd
useradd
# 危険ですが、危険ですが、使いやすくなります。
echo 'ユーザー名 ALL=NOPASSWD:ALL' >> /etc/sudoers
passwd ユーザー名
```
### Pacman関連
1: `pacman.conf`を編集。
2: `pacman -Syyuu`でOSのアップグレード。

`mbp`repoをフェッチしていない場合、`pacman.conf`をarchisoからコピーします。
`mbp`の下に`SigLevel = Never`を追加します。

3: `yay`のインストール

```bash:makepkg
su ユーザー名
$>
git clone https://aur.archlinux.org/yay-git.git ~/yay
cd ~/yay
makepkg -si
```
### キーボード
[**]を存在するものに置き換えて下さい。

```bash:shell
# KeyBoard (これは動かないみたいです。書いてる途中です。)
pacman -Sy apple-bce-dkms-git
touch /etc/modules-load.d/apple-bce.conf
# Contain TouchBar
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git /usr/src/apple-ibridge-0.1
dkms install -m apple-ibridge -v 0.1
touch /etc/modules-load.d/industrialio_triggered_buffer.conf
touch /etc/modules-load.d/apple-ibridge.conf
touch /etc/modules-load.d/apple-ib-tb.conf
touch /etc/modules-load.d/apple-ib-als.conf
```
### デスクトップ
ここでは`swaywm`を入れます。取り敢えず`firefox`,`dmenu`,`alacritty`,`noto-fonts-cjk`を入れるといいです。
サイズが小さいのと、依存が少なく消しやすいところがいいと感じます。

ログインマネージャーに関してやりがちなのが、systemctlなど以外から起動している事です。ものによっては動きません。
私はlightdmのwebkit2-greeterが凄く好きです。遂に公式パッケージにもなりましたしね！

```bash
# インストール
pacman -Syy sway lightdm lightdm-webkit2-greeter
# 構築初めてなら
cp -n /etc/sway/config ~/.config/sway/config
# Waylandでfirefox使うなら
alias firefox='MOZ_ENABLE_WAYLAND=1 firefox'
# lightdmを自動起動させる。
systemctl enable lightdm
```
```conf:/etc/lightdm/lightdm.conf
[Seat:*]
...
greeter-session=lightdm-webkit2-greeter
```
私の場合１０２行目に有りました。
[ArchWiki:LightDM](https://wiki.archlinux.jp/index.php/LightDM#Greeter)より
Firefoxでcaエラーが出るときは [システムクロックの更新](https://qiita.com/koumaza/items/ddd97755247a763bac15#%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AE%E6%9B%B4%E6%96%B0) を再度試してください。
# 引用
- 💕 [`wiki.archlinux.jp/index.php`/インストールガイド](https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89)
- 💕 [Ubuntu on Apple Macbook Pro 16-inch (2019)](https://gist.github.com/gbrow004/096f845c8fe8d03ef9009fbb87b781a4)