NeoVim+neco-ghcでHaskell自動補完
neco-ghcを使ってHaskellの自動補完を有効にする。
なお、neco-ghcはneocomplete,deoplete,YCMなどで動く。
インストール
Tomlに追加。
<<dein_lazy.toml>> [[plugins]] repo = 'eagletmt/neco-ghc' on_i = 1
あとはdein#install()で完了。
さらに、ghc-modが必要なので入れておく。(stackも必要)
$ stack install ghc-mod
※clockのビルドでエラーが出た方はこちら↓
※終わったら、ちゃんと~/.local/binにパスを通すこと(でないと動かない)
使い方
githubのReadme.mdを見れば早い。
動作はかなり軽快だと思う。
stackのclockのビルドで大ハマリした話
ghc-modを入れようとしたらclockのビルドに失敗してハマったのでメモ。
ビルドエラー
ghc-modのところでclockのビルドに失敗した的なメッセージが出たので単体でビルドした結果がこちら。
[naoki@X58A-UD3R ~/WorkDir/haskell] $ stack install clock clock-0.7.2: configure clock-0.7.2: build -- While building package clock-0.7.2 using: /home/naoki/.stack/setup-exe-cache/x86_64-linux-tinfo6-nopie/Cabal-simple_m PHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux-tinfo6-nopie/ Cabal-1.24.2.0 build --ghc-options " -ddump-hi -ddump-to-file" Process exited with code: ExitFailure 1 Logs have been written to: /home/naoki/.stack/global-project/.stack-work/logs /clock-0.7.2.log Configuring clock-0.7.2... Building clock-0.7.2... Preprocessing library clock-0.7.2... /tmp/stack18925/clock-0.7.2/Clock.hsc:44:0: 警告: "hsc_alignment" が再定義さ れました /tmp/stack18925/clock-0.7.2/In file included from .stack-work/dist/x86_64-lin ux-tinfo6-nopie/Cabal-1.24.2.0/build/System/Clock_hsc_make.c:1:0: /home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2 /template-hsc.h:88:0: 備考: ここが以前の宣言がある位置です #define hsc_alignment(t...) \ /usr/bin/ld: .stack-work/dist/x86_64-linux-tinfo6-nopie/Cabal-1.24.2.0/build/ System/Clock_hsc_make.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object。 -fPIC を付けて再コンパイルしてください。 /usr/bin/ld: 最終リンクに失敗しました: 出力に対応するセクションがありません collect2: エラー: ld はステータス 1 で終了しました linking .stack-work/dist/x86_64-linux-tinfo6-nopie/Cabal-1.24.2.0/build/Syste m/Clock_hsc_make.o failed (exit code 1) command was: /usr/bin/gcc .stack-work/dist/x86_64-linux-tinfo6-nopie/Cabal-1. 24.2.0/build/System/Clock_hsc_make.o .stack-work/dist/x86_64-linux-tinfo6-nopie/C abal-1.24.2.0/build/System/Clock_hsc_utils.o -o .stack-work/dist/x86_64-linux-tin fo6-nopie/Cabal-1.24.2.0/build/System/Clock_hsc_make -fno-PIE -fno-stack-protecto r -L/home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2 /base-4.9.1.0 -Wl,-R,/home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8. 0.2/lib/ghc-8.0.2/base-4.9.1.0 -L/home/naoki/.stack/programs/x86_64-linux/ghc-tin fo6-nopie-8.0.2/lib/ghc-8.0.2/integer-gmp-1.0.0.1 -Wl,-R,/home/naoki/.stack/progr ams/x86_64-linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2/integer-gmp-1.0.0.1 -lgmp - L/home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2/gh c-prim-0.5.0.0 -Wl,-R,/home/naoki/.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8 .0.2/lib/ghc-8.0.2/ghc-prim-0.5.0.0 -L/home/naoki/.stack/programs/x86_64-linux/gh c-tinfo6-nopie-8.0.2/lib/ghc-8.0.2/rts -Wl,-R,/home/naoki/.stack/programs/x86_64- linux/ghc-tinfo6-nopie-8.0.2/lib/ghc-8.0.2/rts -lm -lrt -ldl -lpthread
全然意味がわからん。
結局
ncursesのレガシパッケージが必要とのこと。(ncurses5-compatible)
別のところで「ncurses-full入れれば一発やで」と書いてあったので自分はそっちを使った。
またもやエラー
ところが、今度はncurses-fullがうまく入らない。
1[naoki@X58A-UD3R ~/WorkDir/haskell] $ yaourt -S ncurses5-compat-libs ==> AUR から ncurses5-compat-libs の PKGBUILD をダウンロード... x .SRCINFO x .gitignore x PKGBUILD izznogooood commented on 2017-09-05 19:28 gpg --recv-keys C52048C0C0748FEE227D47A2702353E0F7E48EDB bhimberg commented on 2017-09-06 11:35 This may help some, please comment/correct if I missed something. For whatever reason, my .gnupg directory was not quite right. I would get an erro r: $ gpg --recv-keys C52048C0C0748FEE227D47A2702353E0F7E48EDB gpg: keyserver receive failed: Cannot assign requested address I moved my $HOME/.gnupg directory to .gnupg.bak and ran the following: dirmngr --debug-level guru This recreated the .gnupg directory and fixed whatever was causing 'Cannot assign requested address'. I think it may be related to useradd or something along thos e lines: root was able to import keys fine, just not this particular user. Maybe I missed a step in the installation guide? elicacio commented on 2017-10-02 17:55 Hello guys, I was able to install the package following the tip of this link https://forum.ma njaro.org/t/error-trying-to-install-ncurses/19354/2 run the following command: gpg --keyserver keys.gnupg.net --recv-keys 702353E0F7E48EDB after: yaourt -S ncurses5-compat-libs zor1984qq commented on 2017-10-23 10:20 Thx it works now. abdo commented on 2017-10-28 18:33 This packages does not build. The linker fails with a missing symbol. I do not fu lly understand what happened, but looking at the PKGBUILD in core I managed to fi x it by adding --with-termlib=tinfo --with-ticlib=tic on the ./configure command line, and removing the symlink to libtinfo.so.5 (because it already exists) from package(). ncurses5-compat-libs 6.0+20170902-1 (2017-09-04 06:22) ( サポートがないパッケージ: 潜在的に危険です ! ) ==> PKGBUILD を編集しますか ? [Y/n] ("A" で中止) ==> ---------------------------------- ==> n ==> ncurses5-compat-libs の依存パッケージ: - glibc (既にインストールされています) - gcc-libs (既にインストールされています) - sh (既にインストールされています) ==> ncurses5-compat-libs のビルドを続行しますか ? [Y/n] ==> ---------------------------------------- ==> ==> パッケージのビルドとインストール ==> パッケージを作成: ncurses5-compat-libs 6.0+20170902-1 (2017年 12月 4日 月曜 日 21:23:17 JST) ==> ランタイムの依存関係を確認... ==> ビルドタイムの依存関係を確認... ==> ソースを取得... -> ダウンロード ncurses-6.0-20170902.tgz... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3244k 100 3244k 0 0 216k 0 0:00:15 0:00:15 --:--:-- 125k -> ダウンロード ncurses-6.0-20170902.tgz.asc... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 267 100 267 0 0 267 0 0:00:01 --:--:-- 0:00:01 575 ==> source で md5sums ファイルを検証... ncurses-6.0-20170902.tgz ... 成功 ncurses-6.0-20170902.tgz.asc ... スキップ ==> gpg でソースファイルの署名を検証... ncurses-6.0-20170902.tgz ... 失敗 (不明な公開鍵 702353E0F7E48EDB) ==> エラー: PGP 鍵を検証できませんでした! ==> エラー: Makepkg は ncurses5-compat-libs をビルドできませんでした。 ==> ncurses5-compat-libs のビルドを再開しますか ? [y/N] ==> ---------------------------------------- ==> N
「PGP鍵が検証できない」とさ。これはお決まりのパターン。鍵をインポートすればいい。
[naoki@X58A-UD3R ~] $ gpg --keyserver http://pgp.mit.edu --recv-keys 702353E0F7E48EDB gpg: 有効なOpenPGPデータが見つかりません。 gpg: 処理数の合計: 0
???
鍵が見つからないということらしい。
最終的に
結論から言うと、鍵サーバーが違った。
[naoki@X58A-UD3R ~] $ gpg --keyserver keys.gnupg.net --recv-keys 702353E0F7E48EDB gpg: key 702353E0F7E48EDB: 鍵がないため142個の署名は検査しません gpg: /home/naoki/.gnupg/trustdb.gpg: 信用データベースができました gpg: 鍵702353E0F7E48EDB: 公開鍵"Thomas Dickey <dickey@invisible-island.net>"をインポートしました gpg: 究極的に信用する鍵が見つかりません gpg: 処理数の合計: 1 gpg: インポート: 1
アホらしいこと極まりない。
あとはトントン拍子でうまく行った。
$ yaourt -S ncurses-full $ stack install clock
おわり。
SSHでGitHubに接続する
パスワード認証の問題点
GitコマンドでGitHubにpush/pullするためには何らかの形で認証方法を与えてやる必要がある。
一つはユーザー名とパスワードを入力する方法である。
ところが、これは毎回パスワードを入力する必要があるので面倒臭い。
(一応パスワードを保存することもできるが、平文で保存されるためセキュリティ上全くよろしくない。)
そこでSSHが登場する。
SSHで公開鍵暗号通信
SSHを使えば、最初に鍵生成する手間はかかるが、認証情報を入力する必要はない。
また、マシンごとに秘密鍵を作っておけば漏洩時の対処もしやすい。
ちなみに、SSHのデメリットは特にないと思われる。
鍵生成
鍵生成および通信にはopensshが必要なので入れておく。
$ sudo pacman -S openssh
ssh-keygenで鍵生成。
$ ssh-keygen -t rsa
生成場所はデフォルトのままにしておく。
パスフレーズは設定しても構わないが、設定するとpushのたびに入力する必要がある。
生成が完了したら~/.ssh/id_rsa.pubに公開鍵が生成されているはずなので、中身をコピーする。
あとは、GitHubの「Settings」→「SSH and GPG keys」→右上の「New SSH Key」から登録しておしまい。
HTTPSでcloneしたリポジトリをSSHに切り替え
GitHubからcloneするときは大抵HTTPSを使うと思うが、このままではSSHでpush/pullできない。
そこで、モードを切り替える。
$ git remote set-url origin git@github.com:[ユーザー名]/[リポジトリ名].git
とする。これでsshに切り替わる。
xfceの設定をバックアップ(xfpanel-switch)
xfpanel-switchを使うと、xfceの設定を保存できる。
インストール
ArchLinuxだとAURでメンテナンスされている。
$ yaourt -S xfpanel-switch
おわり。
使い方
パネルを右クリックして、「パネル」→「パネルの設定」を開く。
すると、設定画面に「Backup and Restore」というボタンが追加されている。
あとはツールチップを頼りに設定を保存・エクスポートする。
設定の上書きについて
一度保存した設定を上書きしたい場合は、同名で保存すれば良い。
このとき、同名のものが2つで来ているように見えるが、実際は上書きされているので上書き前のものを消そうとしないこと。
(消すと、先ほど上書き保存したものが消されてしまう。)
ArchLinuxにWifiマネージャとブラウザを入れる
以前に構築したArchLinux環境にWifiマネージャ的なものを入れてみる。
マネージャアプレットのインストール
NetworkManagerを入れてなければ、
$ sudo pacman -S networkmanager $ sudo systemctl enable NetworkManager.service
で入れておく。
入れ終わったら、
$ sudo pacman -S network-manager-applet xfce4-notifyd gnome-keyring
これで終わり。再ログインしたら右上にアイコンが出るはず。
通知の設定
デフォルトだと通知の表示時間が10秒と長いので変更する。
左上の「アプリケーション」→「設定」→「通知」を開き、「Disappear After」を設定する。
ブラウザ
ブラウザはChromiumをチョイス。
火狐も使ってみたのだがなんだがうまく動かない模様。(文字が出ない)
$ sudo pacman -S chromium
おわり。
あとはフォントの設定をしておくこと。(デフォルトは英字がなんか変なので)
ArchLinuxのインストール 2.GUI(xfce)&日本語環境構築編
※この記事はArchLinuxのインストール 1.ファイルコピー編の続きです。
今回はGUIを入れていく。 以下のサイトを参考にした。
Arch LinuxにGUIデスクトップ環境を構築する Arch Linuxに日本語環境を構築する
GUI構築
1.グラフィックスドライバのインストール
GPUのメーカーや型番ごとにインストールするパッケージが異なる。
Intel
$ sudo pacman -S xf86-video-intel
AMD (HD7750-7970, R9 240-290)
$ sudo pacman -S xf86-video-amdgpu
AMD(上記以外)
$ sudo pacman -S xf86-video-ati
nvidia
$ sudo pacman -S nvidia nvidia-utils
2.xserverのインストール
GUIのベースとなるxserverを入れる。
$ sudo pacman -S xorg-server xorg-apps xorg-xinit $ sudo pacman -S mesa
xserverの動作確認をするには以下のコマンドを打つ。 (確認しなくても構わない。)
$ sudo pacman -S xorg-twm xorg-xclock xterm $ startx
このあと画面が暗転して、質素なターミナルウィンドウが出れば成功。
マウスを動かせるかも確認しておくこと。
確認できたらexitでターミナルを閉じ、xsystemから抜ける。
※マウスを動かせない場合は、
$ sudo pacman -S xf86-input-synaptics
とすれば解消することがあるらしい。
3.キーコンフィグ
日本語106キーボードのキーマップを使うように設定する。
$ sudo vim /etc/X11/xorg.conf.d/10-keyboard.conf
ファイルが新規作成されるはず。(ディレクトリ名のX11は大文字なので注意。) 以下のように記述する。
Section "InputClass" Identifier "Keyboard Defaults" MatchIsKeyboard "yes" Option "XkbLayout" "jp" EndSection
4.デスクトップ環境のインストール
今回は軽さの割に使いやすいXfceを使う。
$ sudo pacman -S xfce4
入れたら一度起動テストをしてみる。
$ startxfce4
うまく行ったらLogoutで元に戻ってもいいし、ターミナルを開いて作業してもいい。
5.ディスプレイマネージャーのインストール
Xの自動起動+ログインマネージャみたいな感じ。
$ pacman -S lightdm lightdm-gtk-greeter
自動起動の設定もしておく。
$ sudo systemctl enable lightdm.service
日本語環境構築
0.ロケールの生成
これはarchのインストール時にやっているはず。 自信がない場合は以下の方法で確認・再生成する。
まずは
$ sudo locale-gen
とやってみる。もし「ja_JP.UTF-8」的なのが出なかったら、
$ sudo vim /etc/locale.gen
で開いて、「ja_JP.UTF-8」のある行のコメントアウトを取る。 そして再び
$ sudo locale-gen
で生成完了。
1.ロケールの設定
$ sudo vim /etc/locale.conf
「LANG=なんちゃら」の行があればそれを書き換え、無ければ追加
LANG=ja_JP.UTF-8
2.フォントのインストール
個人的にはIPAexフォントが好きである。
これはAURにあるので、yaourtが必要。
(yaourtの入れ方はArchLinuxのインストール 1.5.yaourtのインストール編を参照のこと。)
$ yaourt -S otf-ipaexfont
yaourtが面倒な人は
$ pacman -S otf-ipafont
で普通のIPAフォントが入る。
フォントの適用が終わったら一旦再起動する。 再起動したら日本語表示に変わっているはずである。
フォントをきれいに表示
一応日本語フォントは表示されるが、少し汚く感じるかもしれない。(特に漢字)
この場合、ヒンティングを無効にすると改善されることがある。
「アプリケーション」→「設定」→「外観」で開いたウィンドウの「フォント」タブで設定できる。
ヒンティング:なし とすることで潰れた感じを抑制できる。
3.IMEのインストール
Ubuntuでも標準採用のfcitxとMozc(Google日本語入力)を使う。
$ sudo pacman -S fcitx-im fcitx-configtool fcitx-mozc
さらにIMEの設定をする。
$ vim ~/.xprofile
で開いて、以下の三行を追加。
export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=”@im=fcitx”
保存できたら再ログインして、「アプリケーション」→「設定」→「Fcitxの設定」を開く。
左下の「+」ボタンからMozcを追加して完了。
おまけ
外国語フォント
さっき入れたフォントだけでは表示できる言語が限られる。
フォント - ArchWikiに様々なフォントが載っているが、中には相性問題でXがフリーズするものもあるので注意が必要である。
基本的にsymbolaと花園明朝を入れておけば死角はないと思われる。
symbola
$ sudo pacman -S ttf-symbola
花園明朝]
以下からダウンロード。
DLしたら、
$ unzip [zipファイル] $ sudo cp HanaMin* /usr/share/fonts/TTF/ $ sudo chmod 644 /usr/share/fonts/TTF/HanaMin* $ sudo fc-cache -vf
として展開&コピーする。 フォントはパーミッションが644でないとうまく動かないので注意する。
なお、fc-cache -vf
はフォント情報を更新するコマンドである。