現時点での好きなLinux環境
自分の気に入っている、Linux環境上でのソフトウェア群をまとめてみた。
Desktop Environment
KDE
重厚長大だが、充実した機能とカスタマイズ性が、どのKDEのバージョンでも維持されており、それがKDEの魅力でもある。Qt製で、Qtのバージョンアップに従ってKDEもバージョンアップを重ねており、現行バージョンはKDE Plasma 5である。KDE 4の頃はめちゃくちゃカスタマイズしていたが、KDE Plasma 5になってから面倒になってデフォルト設定のまま使うようになってしまった*1。
Xmonad
マシンスペックによってはKDEはさすがに重すぎるので、計量デスクトップ環境を導入したくなることがある。そのときに選んだのはXmonadだった。キーバインドを覚えなければならないので、触れていないと使い方を完全に忘れてしまうという欠点はある。その一方で、カスタマイズ性が高く、デスクトップを自在に構成することができるのが、大きな利点であり、マウスなどなくとも大抵の操作ができることに感動する。
Linux Distributions - Arch Linux
Linux Distributionの違いを規定する大きな要素の1つにPackage Managerがあると考えており、Package Managerのあり方に、そのディストリビューションのコンセプトが反映されているというように感じる。
Package Manager
apt-get, aptitude, yum, dnf, zypper, portage, pacman, ...., の様々なツールがあるが、pacmanの、公式リポジトリから導入できるパッケージはバイナリとして導入できて、そうでないソフトウェアは、ビルドファイルがAURと呼ばれるコミュニティベースのリポジトリに共有されており、そこからダウンロードする場合は原則として手元でビルドするという仕組みになっているのが、portageのように全てのソフトウェアをビルドするというほど時間がかからず、一方で、パッケージマネージャに管理されていないソフトウェアをインストールするのがそれほど面倒ではない*2ことが、一番気に入っている理由かもしれない。
Shell - fish
ssh環境ではだいたいの場合で、bashがデフォルトなのでそれを使っているが、zsh + oh-my-zshに比べてfishのほうがfish_configによる設定が容易だったので、fishを利用している。fishはカスタマイズの容易性ももちろんのこと、補完が過去の入力履歴をもとに常に先取り的に行われるというのが便利である。bashでもしばしばback-i-searchを使うことが多いので、私の場合のだいたいのコマンド操作は、過去のコマンド入力の繰り返しであるか、その改変にすぎないということが肌感覚で分かったので、fishに移行したときはその便利さに驚いた。
Editor - Emacs
最初のあいだは、頑張ってEmacs Lispで設定ファイルを記述していたが、最近それに倦んでいるので、Spacemacsを使う。
.spacemacs
に設定を記述する。dotspacemacs-configuration-layersは今はこんな感じで書いている。
dotspacemacs-configuration-layers '( yaml (auto-completion haskell :variables haskell-completion-backend 'ghc-mod) ;; better-defaults emacs-lisp git github tmux command-log org spacemacs-layouts (ibuffer :variables ibuffer-group-buffers-by 'projects) semantic cscope gtags latex (ruby :variables ruby-version-manager 'rbenv ruby-enable-enh-ruby-mode t) go (haskell :variables ;;haskell-completion-backend 'intero haskell-process-type 'stack-ghci haskell-enable-hindent-style "johan-tibell") rust scheme python markdown javascript react c-c++ html docker typescript dash ansible sql osx (shell :variables shell-default-height 30 shell-default-position 'bottom) ;; spell-checking syntax-checking version-control )
Other
あとはだいたいこのあたりを使っているが、あとはほとんど設定せずデフォルト状態で使っているので、これ以上細かく述べない。