Arch Linux on MacBook


##はじめに

ここで言う`MacBook`は、MacBook Airのことを指します。しかし、他の種類でも似たところがありますので、広い意味で捉えてもらっても構いません。

これは、MacBookに直接、Arch Linuxをインストールする人のためのガイドです。

何らかの不都合やハマったところがあった時は、コメントや修正の方をよろしくお願いします。

また、本記事内でyaourtをパッケージマネージャーとして使用していますが、yaourtは開発が終了しています。
[Requesting official statement from developers · Issue #382 · archlinuxfr/yaourt](https://github.com/archlinuxfr/yaourt/issues/382)
下記から開発が継続しているパッケージマージャーを使用してください。
[AUR ヘルパー - ArchWiki](https://wiki.archlinux.jp/index.php/AUR_%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC)

##MacBookにArch Linuxをインストールする理由

まず、MacBookを選択する理由としては、MacBookは、ハード面から見て、非常に優れてた性能を持つことが挙げられます。

また、一つのカテゴリとして、MacBookというカテゴリは、影響力が強く、ユーザーが多いために情報が豊富であることが挙げられます。

次に、OSとしてのArch Linuxを選択する理由は、非常にミニマムだからです。初期状態にインストールするOSとして、これほど最適なものは他にないでしょう。それにパッケージを都度、ビルドするGentooとは違い、Archは基本的なパッケージのものがビルドされているので、ダウンロードしてパスにインストールするだけなのパッケージの導入が高速です。(AURは基本的にソースコードからビルドするため時間がかかります)

このような理由から、パソコンを新調する際は、MacBookをオススメします。また、このパソコン、MacBookにインストールするOSとして、Linuxを考えている人は、ArchLinuxをオススメします。

##Mac-EFI

まずはじめに、MacBookには、当然ながらMac(OS X)が初期インストールされています。

Linuxユーザーとしては、これを早速、ディスクごとフォーマット、削除したいところでしょう。

しかし、OSを操作してでしか変えられないハード面の変更もいくつかありますので、できれば、この変更をしてから削除することをオススメします。

ただし、既にMacを削除しているユーザーが一切の変更をできなくなるということではありません。MacインストーラーUSBを作成し、それを起動することで、変更可能となります。

###インストーラーUSB

インストーラーUSBの作成方法は、Mac上でイメージをダウンロード後、以下のようなコマンドを実行することで可能となります。以下は、`Mavericks`イメージの場合ですが、`Yosemite`イメージでも同じです。

```bash:
$ sudo /Volumes/Untitled/soft/os/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia --volume /Volumes/s/ --applicationpath /Volumes/Untitled/soft/os/Install\ OS\ X\ Mavericks.app --nointeraction
```

この際、USBをフォーマットしておきましょう。上記を見てもらえればわかると思いますが、私は、`s`という名前でフォーマットしています。

インストーラーUSBの起動は、MacBookの電源を入れた後、`Alt(Option)`キーを長押しします。

ここで、Macのブートローダー、Startup Managerが表示されますので、インストーラーを選びます。

インストーラーを選択した後は、設定画面が出てきますが、メニューからターミナルを起動できます。

###起動音の削除

MacのインストーラーUSBを用意していれば、色々と便利です。

なぜなら、これを起動し、ターミナルからいくつかのコマンドを実行することで、MacBookのハード面、または、ハードに近い設定の変更が可能になるからです。

もちろん、これは、Macを起動できれば、実行可能ですが、もしMacを削除している場合でも、USBがあればいつでも変更可能になります。

まずは、起動音の削除コマンドです。

```bash:
$ nvram SystemAudioVolume=%00
$ nvram SystemAudioVolume=%00

$ nvram -p
```

2回ほど同じコマンドを実行すると、起動音が消えます。この辺りは、非常にあやふやな設定になっており、2回やっても消えない時もあるし、2回以上やると消えたということもあります。また、いつの間にか起動音が復活したという事例もちらほら。幾つかの方法を試してみてください。

###Startup Managerの削除、起動時の待機時間をゼロにする

通常、MacBookにLinuxをインストールしている人は、Linuxで一般的なブートローダー、GRUBなどを使っている事が多いと思われます。

しかし、MacBookでは、Startup Managerが最初に起動し、Macを探す処理を終了した後、GRUBなどを起動するようです。

この場合、即座に、ブートローダーが起動するのではなく、Macをアンインストールしていると、30秒ほど待たされます。

したがって、Mac-ターミナルを使い、このあたりの優先順位を変更したりする必要があります。

Mac(インストーラーUSBでも良い)を起動して、ターミナルで以下のコマンドを実行します。

```bash:
$ diskutil list
disk0s1 200M EFI vfat
disk0s2 100G / ext4

$ cd /Volumes
$ mkdir efi
$ mount -t msdos /dev/disk0s1 /Volumes/efi

$ cp -r Image \Volume/System /Volumes/efi
$ cp /Volumes/efi/EFI/arch/grubx64.efi /Volumes/efi/System/Library/CoreServices/boot.efi
$ bless --folder=/Volumes/efi --file=/Volumes/efi/System/Library/CoreServices/boot.efi --setBoot

$ reboot
```

やってることは簡単で、ブート領域`disk0s1`に`/System/Library/CoreServices/boot.efi`を作成し、既存のブートローダーで上書きしています。その後、Macの`bless`コマンドで起動優先順位を変更しています。もしかしたら、この優先順位の変更手順は不要かもしれませんが、念のため。

この手順を実行すると、起動時にすぐLinuxのブートローダー、GRUBが起動すると思います。

仕組みは簡単なので、他のブートローダーを使用している人もその仕組を利用すれば、これは実現可能だと思われます。

具体的には、最初に呼び出されるはずのファイル(呼び出したいファイル)を`/Volumes/efi/System/Library/CoreServices/boot.efi`にコピーすればよいのです。場合によっては、Macを使って、起動順位の変更ですね。

###Macのブートローダーをそのまま使う

ちなみに、MacインストーラーUSBに入っている`Image \Volume/System`ですが、それをそのまま持ってくることで(GRUBを上書きしないことで)、使用することができます。

上記のコマンドで以下の手順を`飛ばす`。

```bash:
$ cp /Volumes/efi/EFI/arch/grubx64.efi /Volumes/efi/System/Library/CoreServices/boot.efi
```

これは、アイコンなども出てくるので、トリプルブートなどを考えている人は、非常に便利かと思います。

なぜなら、このシステムは、デフォルトでOSを自動選択するようになっていませんので、起動後、OSを自ら選択しなければならないからです。

ここで、このシステムにて、アイコンを使用する方法は、ディスクのルートに`.volumeicon.icns`を置くことで実現できます。


アイコンは、こちらのサイトにて、ダウンロードできます。

https://www.iconfinder.com/iconsets/system-shade-circles

もちろん、Arch Linuxでも同じです。


###Arch Linuxの仕組み

最初に、基本的な仕組みというか、カスタマイズする際のポイントを述べておきます。

```bash
# 大体、基本設定はこのフォルダを探します
cd ~/.config

# ハードに近い設定はこのフォルダ
cd /etc/

# xの設定はこのフォルダ
cd /etc/X11

# テーマとアイコン
cd /usr/share/icons
cd /usr/share/themes

# デフォルトの設定
# デフォルトの設定は、基本的に /share フォルダから持ってくると良いでしょう。
cp -i /etc/xdg/share/.xinitrc ~/
```

###ArchインストーラーUSBの作成手順

Macを使用して作成する場合は、イメージをダウンロードし、以下のコマンドを実行します。

Arch Linux イメージ
https://www.archlinux.org/download/

```bash:
# arch.isoからusb.dmgを作成する
$ hdiutil convert -format UDRW -o usb archlinux-2014.11.01-dual.iso

#USBメモリをumount
diskutil umount /dev/disk2

#USBメモリに書き込み
sudo dd if=usb.dmg of=/dev/disk2 bs=1m
```

####root

USBは、主にルートをカスタマイズしています。通常、ルート`/root`というものは、余分なものをインストールしたり、設定しないわけですが、オリジナルUSBは、ユーザー`/home/$user`ではなく、ルートをカスタマイズしたほうが便利なのです。


ちなみに、ルートをカスタマズするには、`su`コマンドを実行した後、色んな物を入れたり、ホームフォルダに設定ファイルを置いたりすることでカスタマイズ可能となります。ルートのカスタマイズは、危険ですが、便利にもなります。


###Installing Arch Linux on MacBook

最初に重要な説明を終えたので、基本的なArchLinuxのインストール方法を書いていきたいと思います。

ただし、ArchのインストーラーUSBが作成されていることが前提です。それを起動し、以下のコマンドを実行します。


```bash:
$ loadkeys jp106
# キーボードをJISに変更

$ echo "[sda1:200M-300M:vfat], [sda2:90%:ext4], [sda3:10%:none]"
# 個人的には余裕があるなら、10%空のディスクを残しておいた方が便利だと思います

$ cfdisk /dev/sda
sda1 200M...ブート領域
sda2 残り全部...システム、ホーム領域
# ディスクパーティションを設定

$ mkfs.vfat /dev/sda1
$ mkfs.ext4 /dev/sda2
# ディスクをフォーマット

$ mount /dev/sda2 /mnt
# 先ほどフォーマットしたディスクで、ルートに設定したものをマウント

$ pacstrap /mnt base base-devel
# 基本コマンドなどをインストール。場合によっては、 /etc/pacman.d/mirrorlist を編集

$ genfstab -U -p /mnt >> /mnt/etc/fstab
# ディスク情報を追加

$ arch-chroot /mnt
# 指定したディレクトリをルートとしてみなします

$ pacman-db-upgrade
$ pacman -S grub
# ブートローダーであるGRUBをインストール
$ pacman -S grub grub-efi-x86_64 efibootmgr --noconfirm


$ grub-install --force --recheck /dev/sda
# ブートローダーをインストールするディスクを指定し、 /boot/grub にブートローダーをインストール

$ grub-mkconfig -o /boot/grub/grub.cfg
# /etc/defaults/grub からブートローダーの設定である /boot/grub/grub.cfg を作成

$ pacman -S wireless_tools wpa_supplicant wpa_actiond dialog ifplugd
$ systemctl enable netctl-auto@wlp2s0
$ systemctl enable dhcpcd.service
# インターネットの設定をしておかないと、起動した時にパッケージなどのダウンロードが出来ないので困る

$ exit
# arch-chroot を終了

$ umount -R /mnt
# /mnt をアンマウント

$ reboot
# 再起動
```

上記のコマンドは、基本的に単純なもので構成されています。

基本システムを`pacstrap`で`sda2`にインストール。ここで、`pacman`が入ります。

次に、bootloader(ブートローダー)のGRUBを`pacman`でインストール後、`grub-install`コマンドで`sda1`に設定します。

ここで、難しいのは、GRUBのインスールくらいかと思いますが、これも自動で判定されるオプション`--force`を使用していますので、それほど難しくありません。

また、MacBookの場合は、ブートに使用するディスクは`vfat`でフォーマットしなければならないため、その点は注意しなければなりません。`mkfs.vfat`

このArchインストーラーUSBですが、なにか不都合が起こった場合、ここからリカバリ、修正を行うことが予想されますので、しばらく持っておくことをオススメします。

リカバリ方法は、以下の通りです。

```bash:
$ mount /dev/sda2 /mnt

$ arch-chroot /mnt

# あとは、設定ファイルを直したり、ログを見たりします。pacmanも使用できます。
# 再起動は、 "exit && umount /mnt && reboot" でも良いし、 "reboot" だけでも良いです。終了は "poweroff" です

$ reboot
```

USB起動後、通常は、Boot existing OSの項目を選択すると、先ほど作成したディスク、つまり、HDD/SSDが起動することになります。



###Arch Linux on Customize USB

私は、Arch LinuxをカスタマイズしたUSBを持ち歩いています。

理由は、リカバリにも役に立つし、いつ何時でも慣れた環境を起動できるようにしておくためです。

これは、パソコンと同じ環境を再現し、基本的に、どのパソコンに挿しても起動するように設定されています。

以下、USB独自の重要な点だけを説明します。

####USBブートローダー

まずは、ブートシステムからなわけですが、これは非常に面倒くさいのです。

なぜなら、ほとんどの人は、`grub-install`の自動判断に任せて、マシンにブートローダーをインストールしているからです。

Arch USBを作る場合は、一般的なパソコンに挿しても起動するように、これを、1つずつ`--target`を使用して、ファイルシステムを作成していくことになります。

ただし、私の場合は、既にMacBook用に作ってありましたので(x86_64-efi)、それをコピーし、USBにArchLinuxをインストールする際は、--target=i386-pcにしました。

```bash:
$ df
/dev/sda1...これはパソコン
/dev/sda2...これもパソコン
/dev/sdb...これがUSB

$ cfdisk /dev/sdb
$ mkfs.vfat sdb1
$ mkfs.ext4 sdb2
# USBをフォーマット

$ grub-install --target=i386-pc --recheck --debug --force /dev/sdb
```

また、上記でも説明したように、Macパソコン用に、`/System/Library/CoreServices/Boot.efi`を用意しておくと良いでしょう。これは、パソコンに入ってるものを使いますね。Mac用のブートシステムを作成する場合は、以下のスクリプトを見てください。だいたいこんな感じの手順でできます。

```bash:boot-efi.sh
su
# usb-efi-boot
mkdir -p /boot/efi
mount -t vfat /dev/sdb1 /boot/efi
if [ ! -d /boot/efi/EFI ];then
    pacman -S efibootmgr
    grub-install --force --recheck --target=x86_64-efi --efi-directory=/boot/efi
    grub-mkconfig -o /boot/grub/grub.cfg
    cp /home/dotfiles/icon/arch-dark.volumeicon.icns /boot/efi/.volumeicon.icns
    mkdir -p /boot/efi/System/Library/CoreServices
    cp /boot/efi/EFI/arch/grubx64.efi /boot/efi/System/Library/CoreServices/Boot.efi
    echo 'HOOKS="base udev block autodetect modconf filesystems keyboard fsck"' >> /etc/mkinitcpio.conf
    mkinitcpio -p linux
fi
```

この辺り、どのパソコンを使って作成するかによって違って来ると思いますので、注意です。


また、この場合、権限に注意しなければならないことがあるかもしれませんので、それも注意です。権限を変更するコマンド例は以下のとおりです。この辺は、ある程度の知識がある人向けです。

```bash:権限を変更するコマンド例
# すべてのユーザーに読み,書き,実行権限を与え、グループの実行権限を除き、その他のユーザーの書き,実行権限を除く(ディレクトリ再帰)
$ chmod -R a+rwx,g-x,o-wx /home/user/
```

ここで、結果は`-rwxrw-r--`になります。



また、オリジナルUSBは、rootをカスタマイズすると便利かもしれません。

その他、ArchインストーラーUSBの構成も非常に参考になると思いますので、中身を覗いてみても良いかもしれません。場合によっては、それをコピーし、一部の設定を書き換えることで、ほとんどのパソコンで起動するUSBを作成できると思われます。


###GUIデスクトップ

GUIデスクトップは、メイン環境にする場合は必要になると思われます。

CUIに使用するものは、ターミナルに`lilyterm`、シェルは`zsh`、バーチャル環境は`tmux`です。

GUIに使用するものは、ログインマネージャーに`slim`, ファイルマネージャーに`spacefm`、デスクトップに`awesome`です。

`gtk`のテーマは、`numix`を使用します。`awesome`のテーマは`powerarrowf`をフォークしたオリジナル。

大体、こんな感じになります。


ここで、テーマの当て方について説明しておきます。spacefmは、`gtk2.0`を使用しますので、以下のようになります。


```bash:
$ yaourt -S numix-icon-theme-git
$ sudo pacman -S numix-themes

$ vim ~/.gtkrc-2.0
```
```bash:~/.gtkrc-2.0
gtk-icon-theme-name = "Numix"
gtk-theme-name = "Numix"
gtk-font-name = "DejaVu Sans 13"
```

この設定は、`/usr/share/icons/Numix`と`/usr/share/themes/Numix`にあるファイルを使います。

ちなみに、例えば、`nautilus`の場合は、`gtk-3.0`を使ってますので、`~/.config/gtk-3.0/settings.ini`を用意します。コマンドでやると、以下のような感じですね。

```bash:
$ mkdir -p ~/.config/gtk-3.0

$ vim $!/settings.ini
gtk-icon-theme-name = "Default"
#gtk-icon-theme-name = "Numix-Light"
gtk-theme-name = "Numix"
gtk-font-name = "DejaVu Sans 13"

$ gtk-update-icon-cache -f /usr/share/icons/Default
```

まず初期設定は以下のようなコマンドを実行すればよいかと思います。

```bash:

    #login:root
    #password:root
    pacman -Sy sudo
    echo macbook > /etc/hostname
    useradd -m -G wheel -s /bin/bash $username
    passwd
    passwd $username

vim /etc/locale.gen
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8


touch /etc/locale.conf
vim /etc/locale.conf
LANG=ja_JP.UTF-8

locale-gen

    ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    hwclock --systohc --utc

touch /etc/sudoers
vim /etc/sudoers
Defaults env_keep += "HOME"
%wheel ALL=(ALL) ALL

    chsh
    su - $username



vim /etc/pacman.conf
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch

```

次に、必要なもののインストールです。

```bash:~/package.sh
# CUI
sudo pacman -S zsh tmux git w3m yaourt clamav downgrade gvim ufw net-tools gauche ctags lilyterm sysstat dstat iotop
yaourt -S atool

# GUI
sudo pacman -S conky gparted arandr xorg awesome arhlinux-themes-slim slim-themes slim spacefm vicious clipit udevil exfat-git exfat-utils fuse-exfat ntfs-3g vlc xbindkeys alsa-utils xdotool slop maim imagemagick ffmpeg mplayer inkscape gimp p7zip handbrake handbrake-cli gvfs qiv mcomix dwb chromium fcitx fcitx-im fcitx-configtool fcitx-mozc bluez bluez-utils xcompmgr keepassx

## SECURITY
#sudo pacman -S nmap wireshark-cli aircrack-ng
#yaourt -S metasploit nikto nessus edb-debugger bulk_extractor ophcrack john

## OTHER
#yaourt -S go-mtpfs-git 
#yaourt -A netgui luacairo
```

次に、主にGUIの設定です。

```bash
vim /etc/slim.conf
default_user syui
auto_login yes
daemon yes


sudo cp -i /etc/xdg/share/.xinitrc ~/
echo "xcompmgr -n &" >> ~/.xinitrc
echo "exec awesome" >> .xinitrc

vim ~/.xinitrc
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
fcitx


touch ~/.config/fontconfig/font.conf
vim ~/.config/fontconfig/font.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match target="font">
    <edit mode="assign" name="embeddedbitmap">
      <bool>false</bool>
    </edit>
    <edit mode="assign" name="hintstyle">
       <const>hintnone</const>
    </edit>
  </match>
</fontconfig>


sudo touch /etc/vconsole.conf
vim /etc/vconsole.conf
FONT=DejaVu 
FONTMAP=DejaVu
KEYMAP=jp106

sudo systemctl enable bluetooth
sudo systemctl enable slim

# THEME

yaourt -S numix-icon-theme-git

sudo pacman -S numix-themes


vim ~/.gtkrc-2.0
gtk-icon-theme-name = "Numix"
gtk-theme-name = "Numix"
gtk-font-name = "DejaVu Sans 13"


mkdir -p ~/.config/gtk-3.0
vim ~/.config/gtk-3.0/settings.ini
#gtk-icon-theme-name = "Default"
gtk-icon-theme-name = "Numix-Light"
gtk-theme-name = "Numix"
gtk-font-name = "DejaVu Sans 13"

sudo gtk-update-icon-cache -f /usr/share/icons/Numix


git clone https://github.com/copycat-killer/lain ~/.config/awesome/lain
git clone https://github.com/syui/powerarrow-dark
cd powerarrow-dark
cp -R awesome/ ~/.config

```

###spacefmのカスタマイズ

様々なものを自動マウントしるには、必要な物があります。

```bash:
$ sudo pacman -S fuse-exfat exfat-utils gvfs udevil ntfs-3g
```

ただし、spacefmのデフォルト設定では、exfatが自動マウントされないので、udevilの設定が必要になります。

default_options_exfatの追加とallowed_optionsの末尾にnonemptyを追加します。

```bash:/etc/udevil/udevil.conf
default_options = nosuid, noexec, nodev, noatime
default_options_exfat = nosuid, noexec, nodev, noatime, nonempty

allowed_options = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID, ro, rw, sync, flush, iocharset=*, utf8, remount, nonempty
```

[Configuration tweaking required to mount an exfat volume · Issue #52 · IgnorantGuru/udevil](https://github.com/IgnorantGuru/udevil/issues/52)

`spacefm`は、`root`で使うと便利です。

```
$ sudo spacefm
```

###CUIのカスタマイズ

必要な物をインストールしたりします。ちょっと分かりにくいですが。

```bash:~/.zshrc
export DOTFILE=$HOME/dotfiles
export PLUGIN=$DOTFILE/.zsh/plugin

## completion
if [ ! -d $PLUGIN/zsh-completions ];then
    git clone git://github.com/zsh-users/zsh-completions $PLUGIN/zsh-completions
fi
fpath=($PLUGIN/zsh-completions/src $fpath)

## powerline {{{
if [ ! -f $PLUGIN/powerline.zsh ];then
    curl https://gist.githubusercontent.com/syui/e3fad84e3dba8a3f667b/raw/powerline.zsh -o $PLUGIN/powerline.zsh
fi

if [ ! -d $PLUGIN/powerline-bash ];then
    git clone https://github.com/milkbikis/powerline-bash $PLUGIN/powerline-bash
fi

#ln -s $PLUGIN/powerline-bash/powerline-bash.py ~/powerline-bash.py
#
#function powerline_precmd() {
#export PS1="$(~/powerline-bash.py $? --shell zsh)"
#        }
#
#        function install_powerline_precmd() {
#        for s in "${precmd_functions[@]}"; do
#            if [ "$s" = "powerline_precmd" ]; then
#                return
#            fi
#        done
#        precmd_functions+=(powerline_precmd)
#    }
#
#    install_powerline_precmd
## }}}

## tmux-powerline {{{
# iTerm : Treat ambiguous-width characters as double width
case $OSTYPE in
    darwin*)
        if ! type tmux > /dev/null 2>&1;then
            brew tap waltarix/homebrew-customs
            brew update
            brew install waltarix/customs/tmux
        fi
    ;;
esac

if type tmux > /dev/null 2>&1;then
    if [ ! -d $DOTFILE/.tmux/tmux-powerline ];then
        TPOWERLINE=$DOTFILE/.tmux/tmux-powerline
        git clone https://github.com/erikw/tmux-powerline $DOTFILE/.tmux/tmux-powerline
    fi
    if [ ! -d $DOTFILE/.tmux/tmux-colors-solarized ];then
        git clone https://github.com/seebi/tmux-colors-solarized $DOTFILE/.tmux/tmux-colors-solarized
    fi
fi

if [ ! -f $DOTFILE/.tmux/tmux-powerline/segments/used-mem ];then
    curl https://raw.githubusercontent.com/yonchu/used-mem/master/used-mem -o $DOTFILE/.tmux/tmux-powerline/segments/used-mem
    chmod +x $DOTFILE/.tmux/tmux-powerline/segments/used-mem
fi

if [ ! -f $DOTFILE/.tmux/tmux-powerline/segments/mplayer_tmux.sh ];then
    curl https://raw.githubusercontent.com/syui/mplayer_script/master/mplayer_tmux.sh -o $DOTFILE/.tmux/tmux-powerline/segments/mplayer_tmux.sh
    chmod +x $DOTFILE/.tmux/tmux-powerline/segments/mplayer_tmux.sh
fi

if [ ! -f $DOTFILE/.tmux/.tmux.conf.mac ];then
    curl https://raw.githubusercontent.com/syui/dotfiles/master/.tmux/.tmux.conf.mac -o $DOTFILE/.tmux/.tmux.conf.mac
fi

case $OSTYPE in
    linux*)
if [ ! -f $DOTFILE/.tmux/tmux-powerline/config/tmux-powerline-config-defaults.sh ];then
    curl https://raw.githubusercontent.com/syui/dotfiles/master/.tmux/defaults.sh -o $DOTFILE/.tmux/tmux-powerline/config/tmux-powerline-config-defaults.sh
    bash -c "cp -f $DOTFILE/.tmux/tmux-powerline/config/tmux-powerline-config-defaults.sh $DOTFILE/.tmux/tmux-powerline/config/defaults.sh"
fi

if [ ! -f $DOTFILE/.tmux/tmux-powerline/themes/origin.sh ];then
    curl https://raw.githubusercontent.com/syui/dotfiles/master/.tmux/origin.sh -o $DOTFILE/.tmux/tmux-powerline/themes/origin.sh
fi
;;
esac
## }}}

## vim
if [ ! -d ~/.vim/bundle/neobundle.vim ];then
    curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh
fi

## oh-my-zsh
if [ ! -d $PLUGIN/oh-my-zsh ];then
    git clone https://github.com/robbyrussell/oh-my-zsh $PLUGIN/oh-my-zsh
fi

## cheat-sheet
if [ -f $PLUGIN/oh-my-zsh/templates/zshrc.zsh-template ];then
    cheat-sheet () { zle -M "`cat ~/dotfiles/.zsh/cheat-sheet`" }
    zle -N cheat-sheet
    # bindkey "^[^h" cheat-sheet
fi

## golang
if [ ! -f ~/dotfiles/.zsh/plugin/golang-crosscompile/crosscompile.bash ];then
  git clone https://github.com/davecheney/golang-crosscompile ~/dotfiles/.zsh/plugin/golang-crosscompile
fi


## python
if ! which pip > /dev/null 2>&1;then
    #sudo pacman -S python-setuptools
    #easy_install pip
fi


### font {{{
case $OSTYPE in
    linux*)
        if ! fc-list | grep DejaVuSans > /dev/null 2>&1;then
            sudo pacman -S ttf-dejavu
            #yaourt -S ttf-ricty
        fi
    ;;
    darwin*)
        if ! ls ~/Library/Fonts/Ricty* > /dev/null 2>&1;then
            brew tap sanemat/font
            brew install ricty
            brew install fontforge
            bash -c "cp -f /usr/local/opt/ricty/share/fonts/Ricty*.ttf ~/Library/Fonts/"
            #fc-cache -vf
        fi
    ;;
esac
### }}}

### clipboard {{{

## pbcopy
case ${OSTYPE} in
  linux*)
    if [ ! -f /usr/bin/xsel ];then
      sudo pacman -S xsel
    fi
    alias pbcopy='xsel --clipboard --input'
    ;;
  cygwin*)
    alias pbcopy='putclip'
    ;;
esac

## buffer
pbcopy-buffer(){
  case ${OSTYPE} in
    freebsd*|darwin*)
      print -rn $BUFFER | pbcopy
      ;;
    linux*)
      print -rn $BUFFER | xclip -i -selection clipboard
      ;;
    cygwin*)
      print -rn $BUFFER | putclip
      ;;
  esac
  zle -M "copy : ${BUFFER}"
}
zle -N pbcopy-buffer
bindkey '^p^p' pbcopy-buffer

## alias
if which pbcopy >/dev/null 2>&1 ; then
  # Mac
  alias -g C='| pbcopy'
elif which xclip >/dev/null 2>&1 ; then
  # Linux
  alias -g C='| xclip --input --clipboard'
elif which putclip >/dev/null 2>&1 ; then
  # Cygwin
  alias -g C='| putclip'
fi

## bindkey
# bindkey -s '^b' " | pbcopy"

## clipboard-history
function clipboard-history (){
case $OSTYPE in
  linux*)
    if [ ! -f /usr/bin/anamnesis ];then
      sudo yaourt -S anamnesis
    fi
    anamnesis -l 100 | sed -n '3,100p' | peco | cut -d u -f 2- | head -c -3 | tail -c +2  | xclip -i -selection clipboard
    ;;
  freebsd*|darwin*)
    plutil -convert xml1 ~/Library/Application\ Support/ClipMenu/clips.data -o - | parsrx.sh | grep '/plist/dict/array/string ' | sed '1,2d' | sed 's/\/plist\/dict\/array\/string//g' | peco | pbcopy
    ;;
esac
}
zle -N clipboard-history
bindkey '^[c' clipboard-history
### }}}

## growl
if [ ! -f ~/dotfiles/.zsh/plugin/growl.zsh ];then
       curl https://raw.githubusercontent.com/patbenatar/dotfiles/master/zsh/growl.zsh -o $HOME/dotfiles/.zsh/plugin/growl.zsh
  chmod +x ~/dotfiles/.zsh/plugin/growl.zsh
fi

## rupa/z
case $OSTYPE in
  drawin*)
    if [ -f `brew --prefix`/etc/profile.d/z.sh ];then
      brew install z
    fi
    . `brew --prefix`/etc/profile.d/z.sh
    ;;
  linux*)
    if [ ! -d ~/dotfiles/.zsh/plugin/z ];then
      git clone https://github.com/rupa/z ~/dotfiles/.zsh/plugin/z
    fi
    . ~/dotfiles/.zsh/plugin/z/z.sh
    ;;
esac

compctl -U -K _z_zsh_tab_completion ${_Z_CMD:-z}

## zaw/zaw
if [ ! -d ~/dotfiles/.zsh/plugin/zaw ];then
  git clone https://github.com/zsh-users/zaw ~/dotfiles/.zsh/plugin/zaw
fi
if [ ! -f ~/dotfiles/.zsh/plugin/zaw/sources/zaw-z.zsh ];then
  curl https://raw.githubusercontent.com/lovingly/dotfiles/master/zsh.d/zaw/zaw-z.zsh -o $HOME/dotfiles/.zsh/plugin/zaw/sources/zaw-z.zsh
  chmod +x $HOME/dotfiles/.zsh/plugin/zaw/sources/zaw-z.zsh
fi

## syui/airchrome.zsh
if [ ! -f $PLUGIN/airchrome.zsh/airchrome.zsh ];then
    git clone https://github.com/syui/airchrome.zsh $PLUGIN/airchrome.zsh
fi

## syntax-highlight
if [ ! -f $HOME/dotfiles/.zsh/plugin/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ];then
  git clone https://github.com/zsh-users/zsh-syntax-highlighting $HOME/dotfiles/.zsh/plugin/zsh-syntax-highlighting
fi

## commandline-fu
if [ ! -d $DOTFILE/bin/fu ];then
    git clone https://github.com/samirahmed/fu $DOTFILE/bin/fu
fi
```

###キーボード設定

私の場合、`xmodmap`を使って、切り替えができるようにしています。具体的には、デフォルトキーを`f1-f12`までそのまま。切り替えキーを`f1-f12`までハードの変更(音量、輝度)に当てています。

```bash:~/.Xmodmap
keycode   8 =
keycode   9 = Escape NoSymbol Escape
keycode  10 = 1 exclam 1 exclam
keycode  11 = 2 quotedbl 2 quotedbl
keycode  12 = 3 numbersign 3 numbersign
keycode  13 = 4 dollar 4 dollar
keycode  14 = 5 percent 5 percent
keycode  15 = 6 ampersand 6 ampersand
keycode  16 = 7 apostrophe 7 apostrophe
keycode  17 = 8 parenleft 8 parenleft
keycode  18 = 9 parenright 9 parenright
keycode  19 = 0 asciitilde 0 asciitilde
keycode  20 = minus equal minus equal
keycode  21 = asciicircum asciitilde asciicircum asciitilde
keycode  22 = BackSpace BackSpace BackSpace BackSpace
keycode  23 = Tab ISO_Left_Tab Tab ISO_Left_Tab
keycode  24 = q Q q Q
keycode  25 = w W w W
keycode  26 = e E e E
keycode  27 = r R r R
keycode  28 = t T t T
keycode  29 = y Y y Y
keycode  30 = u U u U
keycode  31 = i I i I
keycode  32 = o O o O
keycode  33 = p P p P
keycode  34 = at grave at grave
keycode  35 = bracketleft braceleft bracketleft braceleft
keycode  36 = Return NoSymbol Return
keycode  37 = Control_L NoSymbol Control_L
keycode  38 = a A a A
keycode  39 = s S s S
keycode  40 = d D d D
keycode  41 = f F f F
keycode  42 = g G g G
keycode  43 = h H h H
keycode  44 = j J j J
keycode  45 = k K k K
keycode  46 = l L l L
keycode  47 = semicolon plus semicolon plus
keycode  48 = colon asterisk colon asterisk
keycode  49 = Zenkaku_Hankaku Kanji Zenkaku_Hankaku Kanji
keycode  50 = Shift_L NoSymbol Shift_L
keycode  51 = bracketright braceright bracketright braceright
keycode  52 = z Z z Z
keycode  53 = x X x X
keycode  54 = c C c C
keycode  55 = v V v V
keycode  56 = b B b B
keycode  57 = n N n N
keycode  58 = m M m M
keycode  59 = comma less comma less
keycode  60 = period greater period greater
keycode  61 = slash question slash question
keycode  62 = Delete NoSymbol Delete
keycode  63 = KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply XF86ClearGrab
keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode  65 = space NoSymbol space
keycode  66 = Control_L NoSymbol Control_L
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode  68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2
keycode  69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3
keycode  70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4
keycode  71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5
keycode  72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6
keycode  73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7
keycode  74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8
keycode  75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9
keycode  76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10
keycode  77 = Num_Lock NoSymbol Num_Lock
keycode  78 = Scroll_Lock NoSymbol Scroll_Lock
keycode  79 = KP_Home KP_7 KP_Home KP_7
keycode  80 = KP_Up KP_8 KP_Up KP_8
keycode  81 = KP_Prior KP_9 KP_Prior KP_9
keycode  82 = KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract XF86Prev_VMode
keycode  83 = KP_Left KP_4 KP_Left KP_4
keycode  84 = KP_Begin KP_5 KP_Begin KP_5
keycode  85 = KP_Right KP_6 KP_Right KP_6
keycode  86 = KP_Add KP_Add KP_Add KP_Add KP_Add KP_Add XF86Next_VMode
keycode  87 = KP_End KP_1 KP_End KP_1
keycode  88 = KP_Down KP_2 KP_Down KP_2
keycode  89 = KP_Next KP_3 KP_Next KP_3
keycode  90 = KP_Insert KP_0 KP_Insert KP_0
keycode  91 = KP_Delete KP_Decimal KP_Delete KP_Decimal
keycode  92 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift
keycode  93 =
keycode  94 = less greater less greater bar brokenbar bar
keycode  95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11
keycode  96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12
keycode  97 = backslash underscore backslash underscore
keycode  98 = Katakana NoSymbol Katakana
keycode  99 = Hiragana NoSymbol Hiragana
keycode 100 = Henkan_Mode NoSymbol Henkan_Mode
keycode 101 = Hiragana_Katakana Romaji Hiragana_Katakana Romaji
keycode 102 = Muhenkan NoSymbol Muhenkan
keycode 103 =
keycode 104 = KP_Enter NoSymbol KP_Enter
keycode 105 = Control_R NoSymbol Control_R
keycode 106 = KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide XF86Ungrab
keycode 107 = Print Execute Print Execute
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 109 = Linefeed NoSymbol Linefeed
keycode 110 = Home NoSymbol Home
keycode 111 = Up NoSymbol Up
keycode 112 = Prior NoSymbol Prior
keycode 113 = Left NoSymbol Left
keycode 114 = Right NoSymbol Right
keycode 115 = End NoSymbol End
keycode 116 = Down NoSymbol Down
keycode 117 = Next NoSymbol Next
keycode 118 = Insert NoSymbol Insert
keycode 119 = Delete NoSymbol Delete
keycode 120 =
keycode 121 = F10 NoSymbol F10
keycode 122 = F11 NoSymbol F11
keycode 123 = F12 NoSymbol F12
keycode 124 = XF86PowerOff NoSymbol XF86PowerOff
keycode 125 = KP_Equal NoSymbol KP_Equal
keycode 126 = plusminus NoSymbol plusminus
keycode 127 = Pause Break Pause Break
keycode 128 = F3 NoSymbol F3
keycode 129 = KP_Decimal KP_Decimal KP_Decimal KP_Decimal
keycode 130 = Hangul NoSymbol Hangul
keycode 131 = Control_L NoSymbol Control_L
keycode 132 = backslash bar backslash bar
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R
keycode 135 = Menu NoSymbol Menu
keycode 136 = Cancel NoSymbol Cancel
keycode 137 = Redo NoSymbol Redo
keycode 138 = SunProps NoSymbol SunProps
keycode 139 = Undo NoSymbol Undo
keycode 140 = SunFront NoSymbol SunFront
keycode 141 = XF86Copy NoSymbol XF86Copy
keycode 142 = XF86Open NoSymbol XF86Open
keycode 143 = XF86Paste NoSymbol XF86Paste
keycode 144 = Find NoSymbol Find
keycode 145 = XF86Cut NoSymbol XF86Cut
keycode 146 = Help NoSymbol Help
keycode 147 = XF86MenuKB NoSymbol XF86MenuKB
keycode 148 = XF86Calculator NoSymbol XF86Calculator
keycode 149 =
keycode 150 = XF86Sleep NoSymbol XF86Sleep
keycode 151 = XF86WakeUp NoSymbol XF86WakeUp
keycode 152 = XF86Explorer NoSymbol XF86Explorer
keycode 153 = XF86Send NoSymbol XF86Send
keycode 154 =
keycode 155 = XF86Xfer NoSymbol XF86Xfer
keycode 156 = XF86Launch1 NoSymbol XF86Launch1
keycode 157 = XF86Launch2 NoSymbol XF86Launch2
keycode 158 = XF86WWW NoSymbol XF86WWW
keycode 159 = XF86DOS NoSymbol XF86DOS
keycode 160 = XF86ScreenSaver NoSymbol XF86ScreenSaver
keycode 161 = XF86RotateWindows NoSymbol XF86RotateWindows
keycode 162 = XF86TaskPane NoSymbol XF86TaskPane
keycode 163 = XF86Mail NoSymbol XF86Mail
keycode 164 = XF86Favorites NoSymbol XF86Favorites
keycode 165 = XF86MyComputer NoSymbol XF86MyComputer
keycode 166 = XF86Back NoSymbol XF86Back
keycode 167 = XF86Forward NoSymbol XF86Forward
keycode 168 =
keycode 169 = XF86Eject NoSymbol XF86Eject
keycode 170 = XF86Eject XF86Eject XF86Eject XF86Eject
keycode 171 = F9 NoSymbol F9
keycode 172 = F8 NoSymbol F8
keycode 173 = F7 NoSymbol F7
keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
keycode 176 = XF86AudioRewind NoSymbol XF86AudioRewind
keycode 177 = XF86Phone NoSymbol XF86Phone
keycode 178 =
keycode 179 = XF86Tools NoSymbol XF86Tools
keycode 180 = XF86HomePage NoSymbol XF86HomePage
keycode 181 = XF86Reload NoSymbol XF86Reload
keycode 182 = XF86Close NoSymbol XF86Close
keycode 183 =
keycode 184 =
keycode 185 = XF86ScrollUp NoSymbol XF86ScrollUp
keycode 186 = XF86ScrollDown NoSymbol XF86ScrollDown
keycode 187 = parenleft NoSymbol parenleft
keycode 188 = parenright NoSymbol parenright
keycode 189 = XF86New NoSymbol XF86New
keycode 190 = Redo NoSymbol Redo
keycode 191 = XF86Tools NoSymbol XF86Tools
keycode 192 = XF86Launch5 NoSymbol XF86Launch5
keycode 193 = XF86Launch6 NoSymbol XF86Launch6
keycode 194 = XF86Launch7 NoSymbol XF86Launch7
keycode 195 = XF86Launch8 NoSymbol XF86Launch8
keycode 196 = XF86Launch9 NoSymbol XF86Launch9
keycode 197 =
keycode 198 = XF86AudioMicMute NoSymbol XF86AudioMicMute
keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle
keycode 200 = XF86TouchpadOn NoSymbol XF86TouchpadOn
keycode 201 = XF86TouchpadOff NoSymbol XF86TouchpadOff
keycode 202 =
keycode 203 = Mode_switch NoSymbol Mode_switch
keycode 204 = NoSymbol Alt_L NoSymbol Alt_L
keycode 205 = NoSymbol Meta_L NoSymbol Meta_L
keycode 206 = NoSymbol Super_L NoSymbol Super_L
keycode 207 = NoSymbol Hyper_L NoSymbol Hyper_L
keycode 208 = XF86AudioPlay NoSymbol XF86AudioPlay
keycode 209 = XF86AudioPause NoSymbol XF86AudioPause
keycode 210 = XF86Launch3 NoSymbol XF86Launch3
keycode 211 = XF86Launch4 NoSymbol XF86Launch4
keycode 212 = F4 NoSymbol F4
keycode 213 = XF86Suspend NoSymbol XF86Suspend
keycode 214 = XF86Close NoSymbol XF86Close
keycode 215 = XF86AudioPlay NoSymbol XF86AudioPlay
keycode 216 = XF86AudioForward NoSymbol XF86AudioForward
keycode 217 =
keycode 218 = Print NoSymbol Print
keycode 219 =
keycode 220 = XF86WebCam NoSymbol XF86WebCam
keycode 221 =
keycode 222 =
keycode 223 = XF86Mail NoSymbol XF86Mail
keycode 224 = XF86Messenger NoSymbol XF86Messenger
keycode 225 = XF86Search NoSymbol XF86Search
keycode 226 = XF86Go NoSymbol XF86Go
keycode 227 = XF86Finance NoSymbol XF86Finance
keycode 228 = XF86Game NoSymbol XF86Game
keycode 229 = XF86Shop NoSymbol XF86Shop
keycode 230 =
keycode 231 = Cancel NoSymbol Cancel
keycode 232 = F1 NoSymbol F1
keycode 233 = F2 NoSymbol F2
keycode 234 = XF86AudioMedia NoSymbol XF86AudioMedia
keycode 235 = XF86Display NoSymbol XF86Display
keycode 236 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
keycode 237 = F5 NoSymbol F5
keycode 238 = F6 NoSymbol F6
keycode 239 = XF86Send NoSymbol XF86Send
keycode 240 = XF86Reply NoSymbol XF86Reply
keycode 241 = XF86MailForward NoSymbol XF86MailForward
keycode 242 = XF86Save NoSymbol XF86Save
keycode 243 = XF86Documents NoSymbol XF86Documents
keycode 244 = XF86Battery NoSymbol XF86Battery
keycode 245 = XF86Bluetooth NoSymbol XF86Bluetooth
keycode 246 = XF86WLAN NoSymbol XF86WLAN
keycode 247 =
keycode 248 =
keycode 249 =
keycode 250 =
keycode 251 =
keycode 252 =
keycode 253 =
keycode 254 =
keycode 255 =
```

```bash:~/.Xmodmap.mini
keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp
keycode 128 = XF86LaunchA NoSymbol XF86LaunchA
keycode 212 = XF86LaunchB NoSymbol XF86LaunchB
keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp
keycode 173 = XF86AudioPrev NoSymbol XF86AudioPrev
keycode 172 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause
keycode 171 = XF86AudioNext NoSymbol XF86AudioNext
keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 66 = Control_L NoSymbol Control_L
keycode 62 = Delete NoSymbol Delete

clear Lock
add Control = Control_L
```
こんな感じのファイルを用意し、`awesome`で以下のような記述で切り替えを行います。

```lua:~/.config/awesome/rc.lua
    awful.key({ modkey }, "[", function () awful.util.spawn_with_shell("xmodmap ~/.Xmodmap") end),
    awful.key({ modkey }, "]", function () awful.util.spawn_with_shell("xmodmap ~/.Xmodmap.mini") end),
```

###スタート

`~/.xinitrc`に書きます。


###トラックパッド、その他

`/etc/X11/xorg.conf.d/50-synaptics.conf`とかでトラックパッドの変更を行います。

ちなみに、当該フォルダにて、デスクトップ-ハードの様々な設定が行えます。

```bash:/etc/X11/xorg.conf.d/50-synaptics.conf
Section "InputClass"
  Identifier "touchpad catchall"
  Driver "synaptics"
  MatchIsTouchpad "on"
  MatchDevicePath "/dev/input/event*"
  Option "TapButton1" "1"
  Option "TapButton2" "3"
  Option "TapButton3" "8"
  Option "VertTwoFingerScroll" "on"
  Option "HorizTwoFingerScroll" "on"
  Option "CoastingSpeed" "2"
  Option "PalmDetect" "1"
  Option "PalmMinWidth" "10"
  Option "PalmMinZ" "200"
  Option "CircularScrolling" "on"
  Option "CircScrollTrigger" "0"
EndSection

Section "InputClass"
  Identifier "touchpad ignore duplicates"
  MatchIsTouchpad "on"
  MatchOS "Linux"
  MatchDevicePath "/dev/input/mouse*"
  Option "Ignore" "on"
EndSection

Section "InputClass"
  Identifier "Default clickpad buttons"
  MatchDriver "synaptics"
  Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0"
EndSection

Section "InputClass"
  Identifier "Disable clickpad buttons on Apple touchpads"
  MatchProduct "Apple|bcm5974"
  MatchDriver "synaptics"
  Option "SoftButtonAreas" "0 0 0 0 0 0 0 0"
EndSection
```

[MacBook AirにインストールしたArch Linuxのハード関連の設定まとめ - Qiita](http://qiita.com/syui/items/7368340ec472ced9d8cc)

###ネットワーク

ArchWikiでは、networkmanagerがおすすめされていますが、netctlがオススメ。

```bash:
# デフォルトでインストールされている
$ sudo pacman -S netctl

$ yaourt -S netgui

$ wifi-menu
```

ただし、メニューバーに表示させるには、networkmanagerのnm-appletが必要なので、どうしようかと思っています。

wifiの設定関連の情報はこちら。

netctl-ifplugd@interface.serviceは初期から起動していると思われます。ArchLinuxインストール時にリポジトリダウンロードするためにネットワーク接続がどうしても必要ですから、どうやらこれが使われているみたいです。

```bash:
# 有線接続のデーモン化
$ systemctl enable netctl-ifplugd@interface.service

# 無線接続のデーモン化
$ systemctl enable netctl-auto@interface.service
```

接続がバッティングする場合、どちらかのプロファイルを使うかは、設定によって変更できます。自分の場合、設定してなくても有線が優先する感じです。後は、wifiをoffにすることさえ簡単にできるようにしておけば、便利になります。

```bash:
# list
$ netctl-auto list

# stop
$ netctl-auto disable-all

# start
$ netctl-auto enable-all
```

そういえば、起動時に自動起動のことを、何となくデーモンと呼ぶことがあるのですが(あくまで私の中では)、これって正しいのだろうか。特に調べてない。

####追記

現在のカーネルでは、`netctl-auto`のスクリプトが上手く動作しなかったため、以下のコマンドに置き換えてください。

```bash:
netctl list

sudo netctl stop-all

#これは、 /etc/netctl/wlp2s0xxxxx を使います。なければ設定ファイルを作ります
sudo netctl start wlp2s0xxxxx
```
###Bluetooth

```bash:
$ sudo pacman -S bluez bluez-utils dbus

$ bluetoothctl 
# MACアドレスを調べます。形式は、00:12:34:56:78:90
[bluetooth]# agent KeyboardOnly
[bluetooth]# default-agent 
[bluetooth]# power on
[bluetooth]# scan on
[bluetooth]# pair 00:12:34:56:78:90
[bluetooth]# trust 00:12:34:56:78:90
[bluetooth]# connect 00:12:34:56:78:90
[bluetooth]# quit
```

```bash:
$ sudo systemctl enable bluetoot
$ sudo systemctl start bluetooth
```

自動起動する設定は以下の通り。

```bash:/etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig hci0 up"
```

###GRUBの設定

まず、テーマをダウンロードしてきます。たくさん公開されてますので、検索とかすれば良いのが見つかるでしょう。

https://github.com/Generator/Grub2-themes

```bash:
$ cd ~/Downloads

$ git clone git://github.com/Generator/Grub2-themes.git

$ cp -r ~/Downloads/Grub2-themes/{Archlinux,Archxion} /boot/grub/themes/
```

そして、設定ファイルを編集します。

```bash:/etc/default/grub
GRUB_THEME="/boot/grub/themes/Archlinux/theme.txt"
GRUB_GFXMODE=1024x768
```

次に、設定ファイルを変換します。

```bash:
$ grub-mkconfig -o /boot/grub/grub.cfg
```

GRUBの設定は、元の設定ファイルである`/boot/grub/grub.cfg`を編集する方法と、簡易化された`/etc/default/grub`を編集して、`grub-mkconfig -o /boot/grub/grub.cfg`または、 update-grubコマンドで変換する方法があります。ここでは、後者の方法を採用しています。


私の場合は、ついでの設定として、以下を変更しました。

```bash:/boot/grub/grub.cfg
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz

# GRUB メニューインターフェイスを表示しないようにし、timeout 期間の経過後に default エントリをロードします。[Esc] キーを押すと、標準の GRUB メニューを表示できます
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.8-1.523)
        # Linux カーネルのデバッグ出力など
        linux $grub_boot/vmlinuz-linux root=/dev/disk/by-uuid/$the_root_uuid ro quiet

# section to load Windows
title Windows
        rootnoverify (hd0,0)
        chainloader +1
```

注目すべきは、linuxの最後のオプションです。

|オプション|	内容|
|---|---|
|ro	|root 読み取りマウント|
|rw	|root 読み書きマウント|
|quiet|	デバッグ出力削減|
|rhgb|	グラフィカル表示|
|splash/nosplash|	スプラッシュ表示|

[4.2 GRUBブート・ローダーについて - Oracle® Linux管理者ガイド](https://docs.oracle.com/cd/E39368_01/e48214/ch04s02.html)

###ディスプレイ

マルチディスプレイなどを使う場合は、以下のツールが便利です。

```bash:
$ pacman -S arandr

$ arandr
```

###参考URL

その他、デスクトップを何の違和感もなく使用していくには、様々な設定が必要になるかと思いますが、是非頑張ってみてください。


[MacBook - ArchWiki](https://wiki.archlinuxjp.org/index.php/MacBook)