Arch LinuxとHyprlandをインストールする

# インストールメディアのブート
ここではUSBメモリでインストールメディアを作成しブートする。

## USBメモリにisoを焼く
https://www.archlinux.org/download/ からisoを落としておく。

```bash
hdiutil convert -format UDRW -o arch archlinux-2023.07.01-x86_64.iso
diskutil list # 焼きたいUSBメモリのパスを確認 (/dev/disk2 だったとする)
sudo dd if=arch.dmg of=/dev/disk2 bs=1m
```

### ddがresource busyになる場合
先にアンマウントしておく必要がある。

```bash
df # /dev/disk2 の Mounted on を確認 (/Volumes/Arch だったとする)
diskutil umount /Volumes/Arch
sudo dd if=arch.dmg of=/dev/disk2 bs=1m
```

## USBメモリをUEFIブートする
UEFIブートでセットアップするため、インストールメディアからUEFIブートしておく。
マシン起動時にF2を押してUEFIの設定画面に入り、USBメモリがUEFIブートされるように設定して再起動し、Boot Arch Linux (x86\_64) を選択。/sys/firmware/efi が存在すればOK。

# OSのインストール
https://wiki.archlinux.org/index.php/Installation_guide を見て進める。

## 初期設定
### キーボード
```
loadkeys jp106
```

### パーティショニング
https://wiki.archlinux.org/index.php/Partitioning によるとMaster Boot RecordとGUID Partition Tableの2つのやり方があり、後者のほうがモダンらしいので後者でやる。
ブートローダーにはGRUBを使うことにする。

[https://wiki.archlinux.org/index.php/Beginners'\_guide](https://wiki.archlinux.org/index.php/Beginners'_guide) を参考にした。

#### パーティションの作成
EFI system partitionを作っておく必要がある。

```bash
lsblk | grep -v "rom\|loop\|airoot" # SSDがsda、USBメモリがsdbだった
parted /dev/sda # partedのインタラクティブシェルでSSDをいじり始める
(parted) mklabel gpt
(parted) mkpart ESP fat32 1MiB 513MiB
(parted) set 1 boot on
(parted) mkpart primary ext4 513MiB 100%
(parted) quit
```

#### ファイルシステムの初期化

```bash
lsblk /dev/sda # /dev/sda1がESP、/dev/sda2がrootパーティションであることを確認
mkfs.vfat -F32 /dev/sda1
mkfs.ext4 /dev/sda2
```

#### パーティションのマウント

```bash
mount /dev/sda2 /mnt # /mntにrootパーティションをマウント
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot # /mnt/bootにESPをマウント
```

### インターネット接続
設定済みの無線LANルータに有線でつないで`reboot`したら`ping google.com`が通るようになった。

## インストール
### パッケージのインストール
```bash
vim /etc/pacman.d/mirrorlist # 日本かUS以外のミラーをコメントアウトする
pacstrap -K /mnt base linux linux-firmware
```

いろいろ入る

### 初期設定

```bash
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
ln -sf /usr/share/zoneinfo/Japan /etc/localtime # あるいは PST8PDT
hwclock --systohc
vi /etc/locale.gen # en_US.UTF-8とja_JP.UTF-8の行のコメントを外す。最初からja_JPだけでやると豆腐になる。
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
echo KEYMAP=jp106 > /etc/vconsole.conf
echo arch > /etc/hostname # 好きに選ぶ
passwd # rootパスワードを設定
```

### Nvidia用の対応
> https://wiki.hyprland.org/Nvidia/
> Install the `nvidia-dkms` driver and add it to your initramfs & kernel parameters.
> For people using grub you can do this by adding `nvidia_drm.modeset=1` to the end of `GRUB_CMDLINE_LINUX_DEFAULT=` in `/etc/default/grub`, then run `# grub-mkconfig -o /boot/grub/grub.cfg`
>
> in `/etc/mkinitcpio.conf` add `nvidia nvidia_modeset nvidia_uvm nvidia_drm` to your `MODULES`
> run `# mkinitcpio --config /etc/mkinitcpio.conf --generate /boot/initramfs-custom.img` (make sure you have the `linux-headers` package installed first)

```
pacman -S nvidia-dkms linux-headers
```

`/etc/mkinitcpio.conf`を以下のように編集する。

```
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
```

```
mkinitcpio -P --config /etc/mkinitcpio.conf
```

以下でgrubのインストール後、`/etc/default/grub` で `GRUB_CMDLINE_LINUX_DEFAULT=` の最後に `nvidia_drm.modeset=1` を追加する。その後にgrub-mkconfigをやる。

### microcodeのアップデート
ブートローダーを入れる前にmicrocodeアップデートをいれておく。 https://wiki.archlinux.org/title/Microcode

```
pacman -S amd-ucode
```

### GRUBのインストール
ブートローダーにGRUBを選んだので https://wiki.archlinux.org/index.php/GRUB を読む。

```bash
pacman -S grub efibootmgr
lsblk /dev/sda # これがArchをインストールしたドライブか確認
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ArchGRUB
grub-mkconfig -o /boot/grub/grub.cfg
```

### dhcpcdをいれておく

```
pacman -S dhcpcd
```

### 再起動

```
exit
umount -R /mnt
reboot
```

これで素のArch Linuxがブートされるようになる。

# GUI環境のセットアップ
## yay
AURパッケージのインストールのためにyayをいれる。

```bash
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay-bin.git
cd yay-bin
makepkg -si
```

## hyprlandのインストール
https://wiki.hyprland.org/Getting-Started/Installation/ を読む。

```bash
# 本体
yay -S hyprland-nvidia
# ターミナル
sudo pacman -S kitty gtk3
```

`Hyprland` で起動する。`Super+Q`でkittyを起動、`Super+M`でHyprlandを終了する。SuperはHHKBだと◇。

セットアップは https://wiki.hyprland.org/Getting-Started/Master-Tutorial/ を読む。

設定ファイルは `~/.config/hypr/hyprland.conf` にある。`autogenerated = 1` をコメントアウトするとwarningが消せる。

## waybar

```bash
yay -S waybar-hyprland-git
```

`waybar-hyprland` はGCC 13非互換だったので、それが直っている `-git` の方をいれた。

`waybar` で試しに起動するとmpdのwarningが出るので、mpdをいれておく。

```bash
sudo pacman -S mpd
sudo systemctl enable mpd
sudo systemctl start mpd
```

inputグループに対してのwarningに関しても、xremapのREADMEを見つつ何かやったかも。

デフォルトだとアイコンが豆腐なので、fontawesomeをいれる。

```
sudo pacman -S ttf-font-awesome
```

## キーボード配列
`~/.config/hypr/hyprland.conf` で `kb_layout` の行を直す。

```
input {
    kb_layout = jp
}
```

## xremap
```bash
yay -S xremap-hypr-bin
```

でインストールして、設定は

```
git clone https://github.com/k0kubun/dotfiles src/github.com/k0kubun/dotfiles
```

でdotfilesを眺めながら、`.config/systemd/user/xremap.service`を設置する。その後、

```
systemctl --user start xremap
```

## キーリピート
`~/.config/hypr/hyprland.conf` に以下のように設定する。

```
input {
    repeat_delay = 200
    repeat_rate = 80
}
```