Part3の続き。完結。

この記事では個人的に使うアプリケーションについて見る。

さまざまなソフトウェアのインストール

ここまでまだインストールしていないソフトウェアのうち、インストールさえすればいいものはここで入れてしまう。
完全に自分用メモなので注意。ただ bash-completionzip/unzipman は誰でも入れた方がいいと思う。

sudo pacman -S openssh w3m bash-completion mlocate zsh fish nmap mupdf tree tmux ripgrep zip unzip sbt python-pip exa wget bat tokei fd alacritty man gimp inkscape xsel feh simplescreenrecorder
yay -S visual-studio-code-bin google-chrome nkf peco cmigemo-git --noconfirm

Docker

Post-installation steps for Linux | Docker Documentationを参考に設定。
なおdockerをインストールしただけではdocker-composeが使えなかった。別パッケージらしい。

# インストール
sudo pacman -S docker docker-compose

# サービス有効化・起動
sudo systemctl enable docker.service
sudo systemctl start docker.service

# ユーザ名 <USERNAME> をdockerグループに追加
sudo usermod -aG docker <USERNAME>

<USERNAME> は自分のユーザ名に置き換える。
usermodしただけではグループへの追加が反映されなかった。ログインし直して反映された。

dockerグループに追加するとdockerコマンドを打つときにsudoがいらなくなる。

Git

自分のユーザ名とメールアドレスを登録しておく。

git config --global user.name <USERNAME>
git config --global user.email <EMAIL>

JDK

Java - ArchWiki

Javaを使う予定はない。Scalaを使うためにJDKを入れるだけ。
AdoptOpenJDKの8と最新版を入れる。

yay -S jdk8-adoptopenjdk jdk-adoptopenjdk --noconfirm

現在どちらのバージョンがJDKに設定されているかは以下でわかる。インストール済のバージョンも表示される。

archlinux-java status

バージョンを変えたいときは以下。 <VERSION> にバージョンを書く。

sudo archlinux-java set <VERSION>

Rust

実践Rust入門 [言語仕様から開発手法まで]を参考にする。

# rustupでRust関連のソフトウェアをインストール
curl https://sh.rustup.rs -sSf | sh

# デバッグで必要なのでインストール
sudo pacman -S lldb

これだけだとPATHが通っていないはずなのでrustupコマンドとかが使えない。
いったんログインし直すか、 source $HOME/.cargo/env を打てばいいはず。

このあとVSCodeを開き、拡張機能のRustとCodeLLDBを追加。 VSCodeでRustファイルを開くとVSCodeにポップアップが出るので、それに従って設定すればいい。デバッグもできるようになっている。

Vim

まず vim パッケージでなく gvim パッケージを入れておく。

sudo pacman -S gvim

理由は vim パッケージのvimだとclipboard連携がなく、使いにくいから。
vim --version を打って +clipboard という記述があればOK。

Dein

自分の~/.vimrcを配置しておく。
パッケージマネージャとしてdeinを使っているのでその設定をする。
公式のREADMEに書いてあるとおり。

curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh ./installer.sh ~/.cache/dein

このあとVimを起動し、 :call dein#install() を実行する。

vimproc

上の作業後にVimで編集していたらしょっちゅうエラーが起きる。
自動保存をONにしているのだが、自動保存のタイミングでエラーになっているようだ。

:messages を見ると以下のように書いてあった。

Error detected while processing function AutoSave:
line    3:
E171: Missing :endif
[vimproc] vimproc's DLL: "/home/sankaku/.cache/dein/repos/github.com/Shougo/vimproc.vim/lib/vimproc_linux64.so" is not found.  Please read :help vimproc and make it.

:h vimproc を見ると要するにvimprocがないのが原因らしい。
書いてあるとおり :VimProcInstall を実行すれば直った。

Emacs

とりあえずインストール。

sudo pacman -S emacs

自分の ~/.emacs.d/init.el は配置済みだとする。

やりたいことは以下。

  • mozc.elで日本語入力できる
  • 日本語入力の際はインライン入力
    つまり入力した内容がただちにEmacsに反映される。

Mozc

init.elでmozc.elの設定をしていて、Mozcがインストールされていて、 あとは mozc_emacs_helper さえあればEmacsでMozcによる入力ができる。このファイルはEmacsとMozcサーバの橋渡しをする。
問題は mozc_emacs_helper をどこから入手するか、だ。

ここらへんは前に調べたのでいまどうなっているかよくわからないが、少なくとも数年前はパッケージの依存関係が都合の悪いことになっていた。AURにあるemacs-mozcにはmozc_emacs_helperが同梱されているので、Mozcで日本語入力できる。だがfcitx-mozcと衝突してしまう。なのでemacs-mozcは入れられない。そんな事情があった…はず。
現在でも pacman -Si fcitx-mozc のようにして依存関係を見ると、fcitx-mozcはmozcパッケージと衝突し、emacs-mozcはmozcパッケージに依存するという地獄のような状態になっている。なのでこの事情はいまも変わっていないらしい。

必要なのはmozc_emacs_helperだけだ。fcitx-mozcはそのままにして、これだけほしい。
前はこのファイルを単独で入手できたのでそれをダウンロードしていたが、今回調べるとそれが消えていた。どうしようもないので、Mozcのビルドすることにした。

ここを見ながらやる。必要なのはMozc全体ではなく、mozc_emacs_helperだけなので、上のページに書かれているすべてをやる必要はない。
以下のようにすればできた。

mkdir ubuntu14.04 && cd ubuntu14.04
curl -O https://raw.githubusercontent.com/google/mozc/master/docker/ubuntu14.04/Dockerfile

# ここでDockerfileを編集する必要がある。下参照

docker build --rm -t $USER/mozc_ubuntu14.04 .
docker run -it --rm -v `pwd`/out:/tmp/out $USER/mozc_ubuntu14.04

# ここからdockerコンテナ内
python build_mozc.py gyp --target_platform=Linux
python build_mozc.py build -c Release unix/emacs/emacs.gyp:mozc_emacs_helper
mv out_linux/Release/mozc_emacs_helper /tmp/out/
exit
# ここまでdockerコンテナ内

sudo mv out/mozc_emacs_helper /usr/local/bin/

これでmozc_emacs_helperを配置できた。

上に書いたように、Dockerfileを編集する必要がある。そのままだとdockerイメージのビルドに失敗する。
以下の4行を削除。NaClが何なのか知らないが、ここでエラーが起きているため。

## NaCl SDK
RUN curl -LO http://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/nacl_sdk.zip && unzip nacl_sdk.zip && rm nacl_sdk.zip
RUN cd nacl_sdk && ./naclsdk install pepper_49
ENV NACL_SDK_ROOT /home/mozc_builder/work/nacl_sdk/pepper_49

また、ビルドしたmozc_emacs_helperをバインドマウントしたディレクトリにmvするため、rootになる必要があった。Dockerfile末尾に以下を追記。

USER root

インライン入力

sudo pacman -S xorg-xrdb

~/.Xresources を作成し、以下を記述。

Emacs*UseXIM: false

ログインし直せばインライン入力できるようになっている。

xmonad

タイル型ウィンドウマネージャ。前はawesomeを使っていたが、xmonadを試してみる。

xmonad - ArchWiki

インストール

xmonad, xmonad-contribはxmonad。
xmobarはxmonadを使うときに使われるステータスバーで、設定を書けば時刻やバッテリ残量、メモリ使用率などを表示できる。
dmenuとgmrunはランチャー。

sudo pacman -S xmonad xmonad-contrib xmobar dmenu gmrun

xmonad.hsの編集

~/.xmonad/xmonad.hs を作成し、設定を書く。

書き方がさっぱりわからん…。ここを参考に書いているがいまいちわからない。Haskellがよくわからんからか。
現在は以下のように書いているが、いろいろ気に食わないところがあるのであまり参考にしない方がいいと思う。

import XMonad
import XMonad.Hooks.DynamicLog

-- The main function.
main = xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig

-- Command to launch the bar.
myBar = "xmobar"

-- Custom PP, configure it as you like. It determines what is being written to the bar.
myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" }

-- Key binding to toggle the gap for the bar.
toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)

-- Main configuration, override the defaults to your liking.
myConfig = defaultConfig
    { modMask = myModMask
    , terminal = myTerminal
    , borderWidth = myBorderWidth
    , workspaces = myWorkspaces
    }

myModMask = mod3Mask
myTerminal = "xfce4-terminal"
myBorderWidth = 3
myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]

.xmobarrcの編集

xmobar - ArchWiki

~/.xmobarrc を作成し、以下のように書く。
これも上のページに例が載っているのでそれを参考に書くが、わからない。

Config { 

   -- appearance
     font =         "xft:Noto Sans CJK JP:size=9:bold:antialias=true"
   , bgColor =      "black"
   , fgColor =      "#646464"
   , position =     Top
   , border =       BottomB
   , borderColor =  "#646464"

   -- layout
   , sepChar =  "%"   -- delineator between plugin names and straight text
   , alignSep = "}{"  -- separator between left-right alignment
   , template = "%StdinReader% | %battery% | %multicpu% | %coretemp% | %memory% | %dynnetwork% }{ %RJTT% | %date% || %kbd% "

   -- general behavior
   , lowerOnStart =     True    -- send to bottom of window stack on start
   , hideOnStart =      False   -- start with window unmapped (hidden)
   , allDesktops =      True    -- show on all desktops
   , overrideRedirect = True    -- set the Override Redirect flag (Xlib)
   , pickBroadest =     False   -- choose widest display (multi-monitor)
   , persistent =       True    -- enable/disable hiding (True = disabled)

   -- plugins
   --   Numbers can be automatically colored according to their value. xmobar
   --   decides color based on a three-tier/two-cutoff system, controlled by
   --   command options:
   --     --Low sets the low cutoff
   --     --High sets the high cutoff
   --
   --     --low sets the color below --Low cutoff
   --     --normal sets the color between --Low and --High cutoffs
   --     --High sets the color above --High cutoff
   --
   --   The --template option controls how the plugin is displayed. Text
   --   color can be set by enclosing in <fc></fc> tags. For more details
   --   see http://projects.haskell.org/xmobar/#system-monitor-plugins.
   , commands = 
        [
        Run StdinReader
        -- weather monitor
        , Run Weather "RJTT" [ "--template", "<skyCondition> | <fc=#4682B4><tempC></fc>℃ | <fc=#4682B4><rh></fc>% | <fc=#4682B4><pressure></fc>hPa"
                             ] 36000

        -- network activity monitor (dynamic interface resolution)
        , Run DynNetwork     [ "--template" , "<dev>: <tx>kB/s|<rx>kB/s"
                             , "--Low"      , "1000"       -- units: kB/s
                             , "--High"     , "5000"       -- units: kB/s
                             , "--low"      , "darkgreen"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkred"
                             ] 10

        -- cpu activity monitor
        , Run MultiCpu       [ "--template" , "Cpu: <total0>%|<total1>%"
                             , "--Low"      , "50"         -- units: %
                             , "--High"     , "85"         -- units: %
                             , "--low"      , "darkgreen"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkred"
                             ] 10

        -- cpu core temperature monitor
        , Run CoreTemp       [ "--template" , "Temp: <core0>℃|<core1>℃"
                             , "--Low"      , "70"
                             , "--High"     , "80"
                             , "--low"      , "darkgreen"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkred"
                             ] 50
                          
        -- memory usage monitor
        , Run Memory         [ "--template" ,"Mem: <usedratio>%"
                             , "--Low"      , "20"        -- units: %
                             , "--High"     , "90"        -- units: %
                             , "--low"      , "darkgreen"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkred"
                             ] 10

        -- battery monitor
        , Run Battery        [ "--template" , "Batt: <acstatus>"
                             , "--Low"      , "10"        -- units: %
                             , "--High"     , "80"        -- units: %
                             , "--low"      , "darkred"
                             , "--normal"   , "darkorange"
                             , "--high"     , "darkgreen"

                             , "--" -- battery specific options
                                       -- discharging status
                                       , "-o"	, "<left>% (<timeleft>)"
                                       -- AC "on" status
                                       , "-O"	, "<fc=#dAA520>Charging</fc>"
                                       -- charged status
                                       , "-i"	, "<fc=#006000>Charged</fc>"
                             ] 50

       -- time and date indicator 
       --   (%F = y-m-d date, %a = day of week, %T = h:m:s time)
       , Run Date           "<fc=#ABABAB>%F (%a) %T</fc>" "date" 10

        -- keyboard layout indicator
        , Run Kbd            [ ("us(dvorak)" , "<fc=#00008B>DV</fc>")
                             , ("us"         , "<fc=#8B0000>US</fc>")
                             ]
        ]
   }

Modの変更

xmonad(awesomeも)では操作時にModキーを多用する。デフォルトではMod4キー(Windowsキー)がModキーになる。
個人的趣味により、右AltをModキーに割り当てる。(この方が打ちやすい。)
変更はxmodmapを使う。

xmodmap

で現在の設定が見れる。右Altは現在Mod1に設定されている。Mod3が何も設定されていないので、ここに右Altを割り当てることにする。

~/.Xmodmap を作成し、以下のように書く。

remove Mod1 = Alt_R
add Mod3 = Alt_R

ログインし直す。このときログイン画面右上でXfceかxmonadかを選べる。xmonadを選択してログイン。
Modキーが右Altになっているはず。

基本的な操作

ここにチートシートがある。

  • Mod + Shift + Return
    ターミナルの起動
  • Mod + p
    dmenuの起動
  • Mod + Shift + p
    gmrunの起動
  • Mod + Shift + c
    フォーカスしているウィンドウのアプリを終了
  • Mod + (1〜9の数字)
    ワークスペースの移動
  • Mod + Shift + (1〜9の数字)
    フォーカスしているウィンドウを指定のワークスペースに移動
  • Mod + l または Mod + h
    フォーカスしているウィンドウの大きさを変更
  • Mod + j または Mod + k
    フォーカスするウィンドウを変更
  • Mod + q
    xmonadの再起動(~/.xmonad/xmonad.hsのコンパイル)
  • Mod +Shift + q
    xmonadの終了(ログアウト)

なお、dmenuを起動してもうまく動かないことがあった。
原因はfcitxを起動していなかったためだった。 ~/.xprofilefcitx-autostart を書くのを忘れていた。

参考

感想

疲れた。

  • だいたいは前と同じだったがwifi-menuが消えているのは驚いた。
  • パーティションはいつも悩む。
  • 音がスムーズに出たのはラッキーだった。いつもなかなか出ず苦労するので。
  • XPS13(9343)と違い、無線ドライバで苦労せずに済むようになったのも嬉しい。
  • xmonadむずい。操作方法はawesomeとほぼ同じなのだが設定が難しすぎる。
  • 日本語入力は本当にこのままMozcを使い続けていいのか疑問に思った。Emacsとの連携でいつも手こずる。(Vimの方が人気あるのはこれのせいなんじゃないかと思ったり。)Githubリポジトリを見てもメンテナンスされているように見えない。かといって他に何を使えばいいのか…SKKに乗り換えるべきなのか?