海底タランテラ
技術と雑記
Posts
About
Linux 環境と dotfiles の管理

i3-gaps を中心とした Linux の環境構築についてと、それらのファイルの管理について書きました。

タイル型ウィンドウマネージャへ移行するモチベーション

今のラップトップを使い始めて4年目であることに加えて、1週間に何度も Linux をビルドしていたらバッテリーの寿命が縮んでしまったみたいで、メモリや CPU の使用率が気になり始めました。

特に Gnome がメモリを食ってるのが気になって、軽量なウィンドウマネージャを使うことにしました。

軽量なデスクトップ環境はありますが、一時期タイル型ウィンドウマネージャを使っていたことがあり便利なことは知っていたので、また使うことにしました。

見た目

デスクトップのスクリーンショット

かんたんな説明

  • i3-gaps
    タイル型ウィンドウマネージャの i3 のフォークです。タイル間に隙間 ( gaps ) を入れることができます。
  • polybar
    画像上部にあるステータスバーです
  • rofi
    画像中央に表示されている、多機能なアプリケーションランチャーです。
  • i3status
    画像下部にあるステータスバーです。
  • picom
    compton のフォークのコンポジタです。ウィンドウの透過に使っています。
  • feh
    画像ビュワーです。壁紙の管理に使っています。

ちなみに、ディストリビューションは Fedora36 です。

dotfiles の管理

上記の通り、複数のツールを使っていて、それぞれにコンフィグファイルがあります。ここからは、それらのファイル ( 以下: dotfiles ) の管理方法について紹介します。

dotfiles は git を使って管理しています。リポジトリを ~/.local/share/dotfiles に置き、シンボリックリンクを使って設定を反映させています。

例えば、 i3-gaps の設定ファイルは ~/.config/i3/config に置けば読み込まれるので、~/.config/i3 という ~/.local/share/dotfiles/i3 へ向けたリンクを作ります。この方法で複数の設定ファイルを1つのリポジトリで管理することができます。

しかし、手動でそれをやるのは面倒なのでスクリプトを書きました。

リポジトリ

https://github.com/chaya2z/dotfileshttps://github.com/chaya2z/dotfiles

スクリプトについて

中身は ln コマンド / unlink コマンドを叩いているだけです。 fire[1] というライブラリに依存しているためそこがネックですが、個人で使う分には十分に感じます。

dotfiles の管理ツールはいくつかあります[2] が、個人的にシンボリックリンクが簡単だと思ったのでそれらは使いませんでした。

fire

最後に、スクリプトに使用した fire というライブラリを紹介します。

fire は Python のライブラリで、CLI ツールの作成においてコマンドライン引数の処理を簡単にします。

例えば、以下のようなコードで link コマンドと unlink コマンドを作れます。クラスや関数を fire に渡すと、それをコマンドにできます。

import fire


class Command:
    def link(self, *files):
        """how to use link"""
        # link コマンドを実行したときの処理
        pass

    def unlink(self, *files):
        # unlink コマンドを実行したときの処理
        pass


fire.Fire(Command)

また、fire は help メッセージを生成してくれます。docstring を書いておけば help に表示してくれます。

helpメッセージ

おわり

私はいままで Ubuntu ユーザで、デスクトップ環境を変えず使っていましたが、いろいろ弄り始めると楽しいですね。

最後まで読んでくださりありがとうございます。

脚注
  1. fire: https://github.com/google/python-fire ↩︎

  2. ドットファイル: https://wiki.archlinux.jp/index.php/ドットファイル ↩︎

Profile

icon

chaya2z

ソフトウェアエンジニア
© 海底タランテラ chaya2zPowered by GitHub Pages