見出し画像

【Linux/NixOS】俺様の最強のLinuxカスタマイズを紹介するぜ!!

みなさんこんにちは。
爆裂麦茶です。

今回は私が現在愛用しているLinuxPCの環境を紹介しようと思います。
Linux使い始めて2年ほど、勉強してるわけでもないので特段Linuxに詳しくもないですが、「SF・サイバーパンク」+「和風」をテーマとしてゴリゴリにカスタマイズしまくってます。
ただ、この組み合わせだと和風というより中華っぽさが出てしまいがちなのが難しいところ。
実用性はそこそこに、私の美学をどこまで反映できるかっていうのが、カスタマイズしてて楽しいところです。

こういう徹底的なカスタマイズをriceと言って、海外ではYouTubeやReddit(掲示板サイト)で情報交換してる人たちがそこそこいるようです。
日本でも流行ってほしいなぁって思います。
日本だとあまりいじらずに素直に使えるものを求めている傾向が強いのかなぁと勝手に思ってます。

とりあえずLinuxカスタマイズの参考にでもなればってことで。

というわけで、まずは動画を貼っておきます。
今回の記事を書くためだけにYouTubeにアップロードしました。
見てもらったほうが嬉しいですが、見なくても記事を読むのに影響はないです!



ディストリビューション

タイトルにも書いていますが、ディストリビューションはNixOSです。
Linuxの中でも変わり種なやつでして、インストールするアプリや設定等をすべてファイルに記載します。
そしてビルドコマンドを実行すれば記載通りの環境が構築されるのです。
このファイルさえあれば、別のPCでも簡単に同じ環境を作れます。圧倒的な再現性がNixOSの魅力です。
カスタマイズしまくる都合上、再現性を担保してくれるこのディストリビューションは非常に相性がよろしいというわけです。

まあ、そう言いつつVoidLinuxの美学に共感して乗り換えようとしたりしましたけどね。
 NixOSほどとはいかなくても、ある程度の再現性を備えたスクリプトを作ったんですが「保守面倒臭すぎる…」ってなったので、NixOSに帰ってきました。
多分もう離れられません。

パフォーマンスが高くて評価されてるCachyOSカーネルを使う方法も以前はあったのですが、最近はどのプロジェクトも頓挫しているようなのでzenカーネルにしました。
CachyOSのタスクスケジューラはNixOSでも利用可能なので、そちらは現在も採用しています。どれぐらい効果があるのかは知りませんが。

ファイルの書き方とかで割と敷居が高いのですが、世は大AI時代。
AIに頼りまくって何とかなってます。

設定ファイルも公開しようと思ったのですが、クッソきたねえ状態なので保留ってことで。
マメな作業が嫌いなのでこういうのが積み重なって地獄になるんだよね。


ログイン画面

ログイン画面にはSDDMを使っています。
KDE Plasmaとかだとデフォルトで採用されているものですね。
これのastronautテーマを改造しました。
デフォルトでは名前通り宇宙飛行士がテーマ背景になっていますが、デスクトップ環境と壁紙と同期するように変えました。
なんかしらんけど現状、マウスカーソルが表示されないんですが、マウスを使う必要もあまりないので問題なしとしてます。
ログイン画面を録画できないので上記動画では紹介できませんでした。


デスクトップ環境

デスクトップ環境にはNiriを採用しています。
これはタイル方式ウィンドウマネージャの仲間です。
タイル方式についても軽く説明しておきましょうか。

ウィンドウを開くと自動でタイル式に大きさを調整して並べてくれるシステムです。
他のウィンドウマネージャのようにウィンドウ同士が重なることがないということです。
Niriはその中でも大きな特徴をもっています。
横方向に無限の空間を持つということです。
紹介動画の序盤で大量にターミナル画面が横に並んでるシーンがありますが、これはNiriの独自性です。
新しいウィンドウを開くとどんどん横に並んでいきます。当然画面におさまらんわけですが、フォーカス移動すればどんどんスクロールして行くことができます。

もちろんワークスペース機能もあります。
全体のイメージとしては、「横方向が無限の部屋がいくつもあり、部屋は自由に切り替え可能」って感じですね。

画像
動画から抜粋。これは各ワークスペースを俯瞰表示する画面。このターミナルが並んでるのがワークスペース3。上に表示されてるウィンドウがワークスペース2です。


従来のタイル方式は画面内に収まるようにウィンドウを調節するので、Niriの後に見ると窮屈を感じてしまい、Niriから離れられなくなりました。

Niriに限らず、タイル方式マネージャはキーボード操作でいろいろ操作しやすい設計になっているので、環境構築によってはほとんどマウスが必要なくなったりします。

ちなみに、私はキーバインドでアクティブウィンドウの透明度を変更できるようにしています。半透明の場合は背景にブラーを書けられるようにもしてます。気分で切り替えると楽しい。

起動直後のメモリ使用量は1GBです。
重量級デスクトップに比べれば軽いですね。
ゴリゴリにカスタマイズして1GBなら上々か。


日本語入力

日本人ユーザーとしては必須の日本語入力です。
fcitx5とmozc-utを使ってます。
mozc-utって何!?って人もいるでしょう。
これはmozcにさらに大量に語彙を追加したものです。
mozcは変換候補が賢くなくて、そこは明確にWindowsとかに劣る弱点だと思っていました。
しかし、このmozc-utならその弱点が大幅に改善されます!
さらには、動画でも見せている通り「ワールズエンド・ダンスホール」「メイドインアビス」「そして誰もいなくなった」といったアニメとかボカロ曲、漫画、ゲーム、小説タイトルの変換候補まで出してくれます。
私には嬉しいことです。

他の設定でいうと、キーボードは英語配列にしています。
記号の並びが分かりやすくていいんですよね。
そしてキャプスロックとかいう邪魔なキーはEscに置き換えました。
カスタマイズの都合上、Escの使用頻度はそこそこあるので、押しやすくていい感じ。


フォント

メインで使用しているフォントは「マキナス」です。
あんまり聴いたこと無いですが、動画見るとわかるとおりカクカクしてます。基本的にすべての場面に置いてマキナスを使うように設定しています。
一部のwebページでは適用されないこともありますけどね…
マキナスはNixOSのリポジトリにはありませんが、フォントファイルをダウンロードすればなんやかんやで使えます。
フォントを変えると意外と雰囲気変わるので重要な要素だと思います。

ターミナルはマキナスと相性がわるく、文字幅がガタガタになるので仕方なく別フォントにしています。


ターミナル

現在使用しているターミナルはfootです。

最初はghosttyを使っていました。
最近人気が高まっていて高機能だしいいじゃんって思ったのですが、なぜか起動まで2秒ほどかかるという謎現象が発生しました。
AIといっしょにログを漁ったりしても原因がわからず、kittyに乗り換えることに。
でもkittyはメモリ消費量が多いように感じました。
そしてよく考えれば、私はターミナルのヘビーユーザーではないので高機能は求めなくてもいいなってことがわかりました。
そしてたどり着いたのがfootです。

footはGPUに頼らず、CPUで処理することを選んだ軽量なターミナルです。
そもそもが軽いのですが、さらにすばらしいのはクライアントモードです。
他のターミナルのように起動することもできますが、footサービスを立ち上げておけば、クライアントモードで起動することができます。
これの何がいいかっていうと、複数ウィンドウを開いてもメモリ消費を抑えて起動時間を短縮できるということ。

フォントの読み込みなどの起動時に必要なデータ等はすべてfootサービスのものを使うので、余計な読み込みがないのです。
高機能を求めないならこの超軽量なターミナルアプリがとてもおすすめです。

シェルはfish、表示内容のカスタマイズは「Oh-my-posh」でやってます。
ポケモンのアブソルが好きなのでそれを意識したカラーリングです。
さらに、入力行の先頭には☯を表示してます。
アブソルのモチーフのひとつと言われてるからです。

画像
こんな感じ。アブソルのスタイリッシュさを意識した鋭い形状とカラーリングです。動画から抜粋

Niriの機能による半透明は文字色も薄くなってしまうので、ターミナルに関してはターミナル自身の設定で背景色を半透明にしています。これなら文字はそのままはっきりと表示されます。


アプリランチャー

アプリランチャーっていうのは各種アプリを起動するためのアプリです。
色々種類がありますが、私はWofiを使っています。
cssで外観をカスタマイズすることができます。

私のカスタマイズは、選択項目の文字色を発光するようにすることを目標に進めました。
結果が以下画像。

画像

なかなかいい感じでは?
本当は半透明にしたかったんですが、なぜかどうやっても出来ませんでした。Niriとの都合なのかもしれない。
デフォルトだと選択行の色が大きく変わり、文字色が反転してた気がします。
それにくらべれば劇的な変化です。


壁紙変更&色情報更新

さてやってまいりました。
もっとも楽しく、苦戦した内容です。
Niriの壁紙を変更した際、それをログイン画面とロック画面にも反映し、さらに画像から抽出した色情報をあらゆる箇所に適用するというものです。
壁紙を変えるだけであちこちの見た目が変わるというわけです。

ここまで紹介したものでいうと、Wofi、日本語変換候補表示、ターミナルにも色反映しています。

壁紙設定に使っているのはawwwです。もともとはswwwでしたが、いつのまにかawwwに名前が変わっていました。
まず最初にwofiで画像か動画かを選択し、そのあと更にwofiで壁紙画像を選択します。
選択後、シェルスクリプトによって諸々の処理を実施します。

画像
壁紙選択画面。画像は暗く表示し、選択されているものは明るくして周囲を発光させています。


色情報抽出に使っているのはmatugenです。
以前はpywalを使っていました。pywalは色をそのまま抽出するので、色変化をしっかり楽しめるのですが、場合によっては文字が非常に読みにくかったりします。
matugenは色情報そのままではなく、ナントカカントカに基づいて調整した色を用意してくれます。

で、この壁紙は画像だけではなく、動画を選択できます。
動画を壁紙にする場合はmpvpaperを使います。

画像
画像との時同様の選択画面が出てきます。サムネイル画像が表示されているので、再生したいものを選択します。

動画は、ローカルに保存されているものだけでなく、YouTubeのものも再生できます。上の画像でいうと、左上のアブソルの動画のみローカルにあり、残りはYouTubeのものです。Urlsというファイルを用意して、そこに記載したYouTube動画をここに表示するようにしています。
色情報の抽出はサムネイルから行います。

左上のアブソルの動画は、ポケモンユナイトのオープニングから1秒にも満たないシーンを切り出し、AIをつかって画面外のツノを補正し、背景の雲が動かずアブソルだけが動いているように手動編集し、それを順再生→逆再生→順再生→…とループさせ、文字やエフェクトを追加したものです。
これもかなり苦労しました。
もともとWindows用に作っていたので、画面下部が黒いままのこっています。どうにかLinux用に作り直したいところ。

あ、そうそう。壁紙はwallhavenってところで探してることが多いです。海外サイトですが、色んなものがあります。


ロック画面

ロック画面にはhyprlockを使用しています。
もともとタイル型ウィンドウマネージャのhyprland向けのものですが、Niriでも問題なく使えます。
前述したように、Niriの壁紙と同期するようにしています。
さらに、色情報を反映するようにしているので、壁紙によって結構色合い変わって楽しいです。
フォントはもちろんマキナス。

画像
画像

SFっぽいレイアウトになるように頑張ってみたけどどうかなぁ
右上と左下は歯車の絵文字を超巨大にして実現しています。
右下の文章は
[INFO] あなたが目覚めたとき、睡眠は終わっている。
[INFO] 右を向くと左が見えない
[WARN] 空腹度が上がっています。栄養補給が必要です。
[CRITICAL] この画面が表示されているということはシステムがロックされています
[PHILPSOPHY] 限界は突破するものではない。それは単に限界だ。
といった感じの深そうに見えるけどどうでもいい内容を書いてます。
AIが考えた内容です。


ログアウト関連メニュー

これはwlogoutを使ってます。
定番ですね。
wofiと同じくcssで表示で外観をカスタマイズできます。
ここにも壁紙の色を反映しています。

画像

各アイコン画像はCachyOSから持ってきたような記憶があります。
もともとは背景を単色で塗る仕様だったと思いますが、かなり透明度を上げて、Niriの壁紙が暗く見えるような感じにしてます。
選択項目の色が明るすぎる気がするのは要調整かな
ここの文字にもマキナスフォントを適用してます。


ステータスバー

こういったウィンドウマネージャのステータスバーと言えば、Waybarです。
ということでwaybarを使ってます。
ここはかなり特徴的なカスタムになってると思います。
画像左端に表示してるのがwaybarです。
これも壁紙の色情報反映対象です。

Niriは基本的にキーボードだけで制御できますが、waybarはマウス操作の際に重宝します。

画像

多くの人はこれを画面上部や下部に置きますが、私は左に置きました。
画面って横長なのに、上下においたらさらに縦幅狭くなるじゃんって思ったからです。
さらに、バーの背景をかなり透明度高めにすることで、壁紙をできるだけ隠さないようにしました。

左上の壱、弐、参っていうのはNiriのワークスペースです。明るくなっているのが現在のワークスペースです。

中央に並んでいる3つのうち、「☯」は壁紙変更スクリプトを起動するアイコンです。「撮」を左クリックするとスクショ、右クリックすると範囲指定スクショになります。「終」はwlogoutを起動します。

左下のほうにある「脳」はカーソルを合わせるとCPU使用率を表示します。同様に「録」はメモリ使用率、「音」は音量です。
それにしても「脳」っていうのがちょっとアレな気がするんですけど、CPUを漢字1文字で表すのが難しく……

一番左下には現在時刻を漢字で表示してます。さっきの画像だと「壱捌・零玖」なので18:09ですね。最初は読みにくかったけど、慣れれば普通に読めるようになりました。

これらの表示項目は、カーソルを合わせるとチカチカと点滅するようにしています。

実はこのNiri画面、上部に透明なwaybarを設置しておりまして、そこをクリックすると今日の日付が表示されます。ついでに曜日と月齢も。
天気も表示しようとしたけど安定しなくてやめました。
実をいうとこの日付表示は色々実験的に作ったので、将来的には別の方法で表示させたいところです。

画像

この表示もwaybarなわけですが、表示するときは少し点滅させながら、消えるときはスッとフェードアウトするようにしました。フェードアウトの実装が大変だった記憶あります。スクリプトでCSSを書き換えて、からwaybarを終了するという処理です。


ファイルマネージャ

ファイルマネージャはyaziを使っています。
ターミナル上で動作するもので、vimのようにキーボード操作で使います。
慣れたらマウス操作のファイルマネージャが億劫になるぐらい快適で速いです。
ここにも壁紙の色が反映されます。
yaziに限りませんが、ターミナル上で動作するTUIアプリ等はwofiに表示されないので、ターミナルを開いてコマンドを打つ必要があります。
それはめんどくさい!ってことで、NixOSの設定ファイルにてそれぞれのデスクトップエントリを作成しました。
これにより、yaziを含めたTUIアプリがwofiから起動できるようになりました。
快適。


テキストエディタ

テキストエディタはNeovimつかってます。
vimから派生して生まれたアプリで、vimよりもモダンな存在です。
コイツにももちろん壁紙の色情報を反映してます。
プラグインを一から設定するのは面倒なのでlazyvimを導入しています。
言語パーサやらなんやらも導入できるし、ファイルツリーも表示できるのでちょっとしたIDEとして使えます。しかも軽量。
私はVScodeよりもneovim派かな。
neovim自体には背景色があるのですが、それを完全透明化することで背後のターミナルの透明度が適用されます。

画像
NixOSの各種設定をいじるときもやりやすい

ブラウザ

ブラウザはqutebrowserとzenbrowser、firefoxが入ってますが、よく使ってるのはqutebrowserです。
もちろん、壁紙の色情報の適用対象です。

qutebrowserはキーボード操作を主眼にしたブラウザで、あらゆる操作をキーボードで行えます。
ウェブサイトによってはマウス操作が必須なこともありますが、それでも大部分をキーボードで操作できる快適性はすばらしいです。
firefox系やchromium系ではVimiumという拡張機能を使えばキーボードで操作できるようになりますが、やはり拡張機能なので限界があります。
しかしqutebrowserはそもそものブラウザ機能としてVimiumのような操作を提供しているので、操作感は断然上です。

設定ファイルはpythonで記述するようになっています。
スクリプトを埋め込んだりできるので、他のブラウザではできないような動作が可能です。キーバインド一つでYouTube動画をローカルの動画プレイヤーに持ってきて広告なしで再生とかもやろうと思えばできます。

自由度が高い分、他のブラウザのような拡張機能はないので、欲しい機能は自分でスクリプトを書く必要があったりします。
それもAIに任せればあっさり実現できることが多いので本当にいい時代。

素の状態だとamazonプライム等の保護された映像は再生できないので、再生用のプログラムが必要になります。
あとなぜかニコニコ動画も再生できないけど理由は不明。

続きまして、サブとして使ってるzenbrowserも少し紹介しておきます。
これはfirefox派生のブラウザで、とにかく外観が綺麗です。
垂直タブをデフォルト採用していて、タブを完全に非表示にしてwebページだけを表示することもできます。
非表示にしたタブも、マウスカーソルを近づけたりショートカットキーで表示可能です。
すっきりしていて使いやすくて美しいおすすめブラウザの一つです。


今後の企み

いったん紹介はこんなところか。
まだまだ改良の余地はあるのでちまちま弄っていく予定です。
設定ファイルをお見せできないのであれですが、誰かのカスタマイズ意欲を刺激できれば上出来かなと思っております。
今後の大きな企みとしてはWofiとwaybarを自作の外観重視アプリに置き換えることを考えてます。
noctalia-shellみたいな完成された美しいものを使うのもいいですが、自分用に最適化したアプリを使うのが個人的ベストかもって思ったのです。
AIを使えばまあそこそこのものは作れるのではなかろうか。

ついでにNixOSカスタマイズの参考になりそうな記事を紹介しておきます。
といっても既に皆さんご存知かも知れませんが。
具体的なコードや手順を書いてくれているので、私の記事よりよっぽど有用。

といったところで今回の記事はここまでです。
思い出したことがあったら追記していこうと思います。
ここまで読んでいただき、ありがとうございました!


いいなと思ったら応援しよう!

コメント

4
コメントするには、 ログイン または 会員登録 をお願いします。
はたけっち|テック&ガジェット雑学【毎日投稿】のプロフィールへのリンク

こんにちは! ご紹介いただきありがとうございます。動画拝見させていただきました!最高にクールで極まってる設定てますね!勉強になりました!☺️

1
爆裂麦茶 / 地下書庫の住人 いいね
爆裂麦茶 / 地下書庫の住人のプロフィールへのリンク

見ていただいてありがとうございます! 褒めてもらえて嬉しいです。 Linuxを弄り回す文化もっと広まってほしい、というかNixOS使用者が増えてほしいですね

1
Saji|ペンギンになろうのプロフィールへのリンク

こんにちは!動画を全部拝見させていただきました。本当にかっこいいカスタマイズでした😆参考になるアイデアがたくさんあって勉強になります!情報をシェアいただきありがとうます🙏

1
爆裂麦茶 / 地下書庫の住人 いいね
爆裂麦茶 / 地下書庫の住人のプロフィールへのリンク

動画見てくれたんですね!ありがとうございます! 参考になったのなら良かったです。嬉しい。 カスタマイズの沼をこれからも沈んでいこうと思います

1
【Linux/NixOS】俺様の最強のLinuxカスタマイズを紹介するぜ!!|爆裂麦茶 / 地下書庫の住人
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1