会社のPCにManjaro i3 Editionを入れた

何度目かわからないLinux環境構築記事です.ちなみに

h3poteto.hatenablog.com

h3poteto.hatenablog.com

このような前例があり,今回もこれらの記事には非常に助けられた.

買ったPC

転職先の会社で好きなPCを選んで良いことになったので,Linuxを入れる前提で「ThinkPad X1 Extreme Gen5」を買った.

本当はFramework を狙っていたんだけど,日本に配送してくれそうな情報が見当たらずに諦めた.System76 も割と良さそうで,こちらは日本配送できるのだが,スペックを上げるとキーボードにテンキーが付属するのが我慢できなかった.ノートPCのキーボードにテンキーは不要だ.

どうせリモートだし,ノートPCを持ち歩くシチュエーションもほとんどない気がしたのでMinisforumあたりも考えたのだが,これについては覚悟が足らなかった.

というわけでThinkPadである.

Manjaro i3 Edition

まずBIOSの設定からSecure Bootを無効化しておく.ちなみにArch LinuxはSecure Bootに対応しているらしいが,Manjaroは今の所対応する予定はない.

forum.manjaro.org

今回は最初からcommunityメンテナンスのi3 editionをダウンロードしてきた.

https://manjaro.org/download/

そしてWindowsを削除して上からManjaroを入れる.Windows11が入っていたらしいがセットアップせずにフォーマットしてManjaroをインストールする.

自分でi3を入れると,かなり簡素なデスクトップが表示され,それをカスタマイズしていく形になるのだが,このi3 editionはそれなりに整った見た目が最初から用意されていた.まぁそれらを削除して全部自分の設定を入れるわけだが.

ちなみにインストールで迷うのは,ハードウェアのドライバを,OSSにするかProprietaryにするかだろう.今回は最初からProprietaryにした.どうせnvidiaドライバを使うのは確定なわけだしnouveauを入れるだけ無駄だ.

GPUの設定

まず,BIOSでグラフィックボードの設定をいじる.デスクトップだとあまり出会わないのだが,ノートPCだとIntelの内蔵GPUと,GeForce両方積んでいるパターンがある.この場合,ハイブリット設定になっている場合があり,これがややこしいのでGeForceのみを使うようにハイブリット設定をオフにしておく.

その上で,

$ sudo mhwd -a pci nonfree 0300

をやる.mhwdが入っていれば,あとはいい感じにnvidiaのドライバセットアップまでやってくれるので楽だ.

$ lspci -k | grep -A 2 -E "(VGA|3D)"
01:00.0 VGA compatible controller: NVIDIA Corporation GA107M [GeForce RTX 3050 Ti Mobile] (rev a1)
        Subsystem: Lenovo Device 22f8
        Kernel driver in use: nvidia

こうなれば良い.

IME

最近はibusをやめてfcitxを使っていたので,fcitxを入れる.ただ,ここでfcitx-mozcを入れてさらにemacs-mozcを入れようとするとドツボにはまった.

ain0204.hatenablog.com

ここに書かれているとおりなのだが,fcitx-mozcとmozcはコンフリクトする.依存関係としてはemacs-mozc -(depend)-> mozc <-(conflict)-> fcitx-mozc という状態になっている.で,巷の記事ではPKGBUILDを修正して

## If you will be using mozc.el on Emacs, uncomment below.
_emacs_mozc="yes"

ビルドすれば良いよという記事は多いし,過去の俺もそのようなことを書いていた.

h3poteto.hatenablog.com

が,最新のemacs-mozcはbazelでビルドされるようになっており,PKBGUILDにこのような変数は存在しない.

というわけで,今の所この2つをコンフリクトせずに入れる方法が謎のままである.

さらに,最近fcitxはWayland対応でfcitx5という新しいバージョンを出している.これは別パッケージになっているので,インストールするのは

$ yay -S fcitx5 fcitx5-im fcitx5-mozc

である.

で,emacs-mozcであるが,入れないことにした.

というかfcitxは

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

こうしておくと普通にemacsでもfcitxのままmozcが使える.なのでわざわざemacs-mozcを入れる必要がない気がして,やめた.

オーディオ関連の設定

ノートPCだと音量調節用のキーが設定されていたりするので,i3の設定に

bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ 0 && pactl set-sink-volume @DEFAULT_SINK@ +5% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ 0 && pactl set-sink-volume @DEFAULT_SINK@ -5% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status

こいうのを追加しておくとそれらのキーが使えるようになる.

pactlは

$ yay -S pulseaudio pavucontrol

として入れておく.

ディスプレイ関連の設定

同じく内蔵ディスプレイの明るさ調節ができるボタンがあったりするので,

bindsym XF86MonBrightnessUp exec xbacklight -inc 10
bindsym XF86MonBrightnessDown exec xbacklight -dec 10

としておく.

xorg-server関連でxbacklightコマンドは入っていると思うが,ない場合は

$ yay -S xorg-xbacklight

しておく.

その他

  • i3のステータスバーはpolybar
  • ファイラーはnemo
  • ターミナルはurxvt
  • ランチャーはulauncher
  • クリップボードはparcellite
  • 通知はdeadd-notification-center

こんな感じ.

Macにも一応yabaiのようなタイル型ウィンドウマネージャーを模したものはあるんだけど,やはりi3wmの使用感には敵わない.

Z Labを退職してoViceに転職します

10月31日にZ Lab株式会社を退職した.

おそらくほとんどの人はZ Labを知らないと思うので説明すると,ヤフーの子会社だ.ただし社員はヤフーの原籍正社員でZ Labに出向という形で雇用されている.つまり退職したのはヤフー株式会社を退職したということになる. ちなみに私の場合は,入社した時点でZ Lab出向だったので,ヤフー社で働いていたことはない.ヤフーのこと,あんまり知らない.

2020年9月入社だったので,2年2ヶ月居たことになる.

続きを読む

flycheckでcredoを実行する

credoというのがある.

github.com

これはElixirの静的解析ツールで,まぁrubocopみたいなものだと思っていただければ良い.これは単なるCLIなのだが,これに違反した場合,違反箇所をエディタ上に表示してほしいと思った.

そこでflycheck-credoというのがある.

github.com

これでcredoを実行して結果をflycheckに連携してくれるので,Emacs上でそれを見ることができるのだ.

しかし,lsp-modeを有効化しているとこれがうまいこと動作しない.実はlsp側が内部でflycheckを実行し,この結果を表示してくれているのだが,flycheck-credoの結果はこのlsp内部から実行されるflycheckにより結果が上書きされてしまう. その結果credoとしてのエラーがflycheckに表示されなくなっている. 試しに一度lsp-modeを無効化した上で,flycheck-credoを入れてみて欲しい.ちゃんと動作するから.

ただ現代においてlspを無効化するのはあまり現実的ではないので,なんとかこの2つに共存していただきたい.

というわけで,

(use-package elixir-mode
  :config
  (add-hook 'elixir-mode-hook
            (lambda ()
              (setq lsp-flycheck-live-reporting nil)
              (setq-local flycheck-check-syntax-automatically '(mode-enabled save))))
  (add-hook 'lsp-after-initialize-hook
            (lambda ()
              (flycheck-add-next-checker 'lsp 'elixir-credo)))

とやることで,これらを同居できる.

まず flycheck-add-next-checkerだが,これをやることで2つのcheckerを併用できる. その上で,lsp-flycheck-live-reporting を無効化することで,elixir-credoの結果が上書きされるのを防いでいる.

Refs: elixirforum.com

Siderが終わるのでlintをreviewdogに移した

このとおりですが,

siderlabs.com

siderがサービス終了するらしいです.

今まで個人プロジェクトでも,会社のプロジェクトでも結構お世話になってきました.使い始めた頃は,まだSideCIという名前で,会社名もアクトキャットという名前だった気がしますが,感慨深い.

とりあえず使えなくなるので,移行します.

続きを読む

AWS Global AcceleratorをKubernetesのリソースから管理する

AWS上に作ったKubernetesでサービスを外部に公開する方法はいくつか存在する.簡単にやるならServiceをtype: LoadBalancerで定義すればNetworkLoadBalancerが作れるし,aws-load-balancer-controllerを使えばApplicationLoadBalancerも作れる.ただ,このLBの前段にGlobalAcceleratorを作りたくなった場合はどうしたらいいだろうか. NLBにしろALBにしろ,Kubernetes内のServiceやIngressの定義に応じて動的に作成された場合,作成された後にGlobalAcceleratorのEndpointGroupに登録する必要があるので,毎回手動作業が発生してしまう. というわけで,これを解決するOSSを作った.

github.com

続きを読む