Ubuntu 24.04 LTS なので Ubuntu Budgie を使う

リリース直前に変な問題（xz の utils 的な何か）が発生して色々ゴタゴタがあったようですが、関係各所の皆さんの尽力もあって、[Ubuntu 24.04 LTS が無事にリリースされました](https://ubuntu.com/blog/canonical-releases-ubuntu-24-04-noble-numbat)。心から感謝したいと思います。

で、せっかく２年に１度の LTS リリースなので、クリーンインストールして設定を一から見直します。

さらにせっかくなので、ただの [Ubuntu](https://ubuntu.com/) ではなく、[Ubuntu Budgie](https://ubuntubudgie.org/) を入れます。

今まで普通の Ubuntu を使っていたのですが、デスクトップが重くて設定もしずらく、別のものを探していて、Ubuntu Budgie に辿り着きました。

## Ubuntu Budgie のオススメできる点

* デスクトップが軽快に動く
* でも、なかなかに格好良い
    * もちろん個人的な感想です
* 結構簡単に設定でき、あっという間に Mac のような外観に出来る
    * もちろん Community で開発されているものなので、簡単に設定できない点もありますが

ということで、私の設定を以下にメモします。（備忘録のような投稿ですいません）

# Ubuntu Budgie のインストールおよび設定

Ubuntu desktop の iso を使ってインストールすると、最小構成でも Ubuntu desktop が入ってしまうので、Ubuntu Budgie の iso を使ってインストールする他ないです。

* [Ubuntu Budgie のダウンロードページ](https://ubuntubudgie.org/downloads/)から 24.04 LTS の iso をダウンロード
* 8GBぐらいある USB ディスクに iso を焼く
* USB ディスクから boot してインストール

焼き方やインストールの方法は、ググればいくらでも出てくるので割愛。いつもは [Ubuntu Japanese Team](https://www.ubuntulinux.jp/home) の Remix を待っていましたが、普通のリリースでも十分に日本語化できます（後述）。

インストール直後は Budgie Welcome というアプリが立ち上がります。この Budgie Welcome が意外と便利なので、大いに利用して設定していきます。

## Web ブラウザのインストール

近年では、Web ブラウザだけちゃんと設定していれば、ほぼすべての作業が出来ると言っても過言ではないです。なので、Web ブラウザの選択は大事。

Budgie Welcome では、Getting Started > Browser Ballot を選ぶと、様々な種類の Web Browser のインストール・アンインストールが可能です。

結局 Google Chrome が便利なので私は Google Chrome を使いたいのですが、残念ながら Google Chrome は Budgie Welcome から直接インストールすることは出来ません。

Firefox を起動して、Google Chorme の deb をダウンロードしてインストールし、Google Chrome をデフォルトのブラウザとして設定したら、Budgie Welcome で Firefox をすべてアンインストールしましょう！（Budgie なので、GNOME Shell の設定に Firefox を使うことが無い！！（歓喜））

## ドライバーの追加

Budgie Welcome の Getting Started > Drivers を選び、Additional Drivers をクリックすると、Software & Update の Additional Driver のタブが表示されます。

NVIDIA の GPU が刺さっている PC の場合、ここの propreietary, tested なものを選んで update ボタンを押すだけで、CUDA やドライバがインストールされます。便利。簡単。
（まぁ、これは Ubuntu Budgie に限った話じゃないけど）

で、ここで入る CUDA やドライバのバージョンは、正直、最新じゃないです。（2024.04.30 現在、CUDA 12.2 とドライバ 535.171.04）

最新のドライバを入れたい場合は、その下に repository 追加ボタンがあります。（親切すぎ！）

ただ、この NVIDIA の repository から CUDA やドライバを入れると、Ubuntu Update との相性が悪すぎるので、Ubuntu 推奨のを入れるんで良いんじゃないかと。

## Flatpak のインストール

今や Ubuntu のアプリのインストール・管理は apt だけじゃなく、snap や flatpak にどんどん移行しています。特にアプリの flatpak 化の波は激しいです。なので、Getting Started > Optional Task を選び、Flatpak のインストールを行いましょう。

逆に言えば、ここだけで Flatpak のインストールが出来て超簡単。

## テーマ・アイコン等の変更

Bugdie Welcome のもうひとつの素晴らしい点は、テーマやアイコンの自動インストール・設定が出来る点です。

Bugdie Welcome のトップ画面から Makeovers & Layouts を選ぶと、Switch Appearance からテーマ・フォント・アイコンの自動インストール＆設定ができます。しかもその中に Mojave や WhiteSur が最初からあるので、すぐに Mac のような外観に出来る！

インストールには非常に時間がかかりますが、根気良く待っていればいずれ設定できます。

（ウィンドウのボタンを変更するには、budgie-desktop-settings でウィジェットの変更をする必要があります）

## Budgie Extras

Budgie Welcome のトップ画面には INSTALL SOFTWARE というボタンがあり、これをクリックして出てくるプルダウンメニューの中には Budgie Extras という項目があります。

この Budgie Extras からは、Budgie 用のアプレットを自動的にインストールすることが出来ます。

既にインストールされ使われているものもあるのですが、インストールされていない中でお薦めのアプレットを以下に挙げます。

* Calendar Applet
    * デフォルトで入っている Clock Applet とほぼ同じなのですが、クリックすると当月のカレンダーが表示されます
    * Clock Applet の代わりにこれを使うと、ちょっと得した気分になれます
* Global Menu Applet
    * Window（アプリ）のメニューがトップパネルに表示されます
    * 要するに、Mac とほぼ同じ見栄え・使い方が出来るようになります
    * Window がすっきりしますし、とても使いやすいので、必須だと思います

インストールしたら、Budgie デスクトップの設定（budgie-desktop-settings）からトップパネルを選び、アプレットを追加することで使えるようになります。

## その他の設定

Ubuntu Budgie は GNOME なので、GNOME Tweaks が使えます。素晴らしい。

`sudo apt install gnome-tweaks` でインストールしましょう。

以下のように使い分ければ、ほぼ思い通りな設定が出来ると思います

* 基本的な設定を行うアプリ
    * Budgie デスクトップの設定（budgie-desktop-settings）
    * Budgie コントロールセンター（budgie-control-center）
        * Ubuntu コントロールセンターとほぼ同じ
* 痒い所に手を届かせたい設定アプリ
    * Tweaks（gnome-tweaks）

# Ubuntu Budgie でも難しい設定

上記でほぼ設定は完了なのですが、やっぱり完璧ではないです。まだまだ工夫しないと設定できないものがあります。

## 日本語化

Budgie Welcome には Getting Started > Language & Input という項目があり、ここで日本語化が出来そうなのですが、残念ながらここでは出来ませんし、余計なものをインストールしてしまいます。

なので、自分でやらなきゃいけないです。

Ubuntu Budgie でインストールされるターミナルは `Tilix` です。シンプルで gnome terminal よりも良い感じ。これも嬉しいポイント。

IME としてデフォルトで iBus が入っているのですが、これが非常に使いにくいので、Tilix を立ち上げ、以下のコマンドを入力して、Fcitx5 + Mozc のインストールおよび iBus のアンインストールを行います。

```
sudo apt update
sudo apt install -y fcitx5-mozc
sudo apt purge -y ibus ibus-data ibus-gtk ibus-gtk3 ibus-gtk4 ibus-mozc gir1.2-ibus-1.0
```

その後、`gnome-language-selector` を起動します。起動すると「言語サポートが完全にはサポートされていません」というダイアログが出ますが、ここで日和って「インストール」を選ぶとせっかく削除した iBus が再びインストールされてしまうので、心を鬼にして「後で通知する」を選択します。（特に通知はされないので大丈夫です）

gnome-language-selector で言語として「日本語」を選び「システム全体に適用」、そしてキーボード入力に使う IM システムとして「Fcitx 5」を選んで完了です。再起動すると Fcitx 5 が起動して、メニューも日本語化されていると思います。

### Fcitx5 のテーマを変更する

Fcitx5 設定を起動し、アドオンタブの「クラシックユーザーインターフェース」の横のボタンをクリックすると、Fcitx5 のフォントやテーマが変更できます。

インストール直後は「デフォルト」と「デフォルトのダーク」の２種類しかありませんが、カスタマイズしたテーマを使用することも出来ます。

カスタマイズした Fcitx5 のテーマですが、[thep0y/fcitx5-themes-candlelight](https://github.com/thep0y/fcitx5-themes-candlelight) が素晴らしいので使わせてもらうことにします。

テーマのインストールは簡単で、`~/.local/share/fcitx5/themes` というディレクトリを作り、その下にテーマを入れるだけです。今回の場合は、上記 repository を clone し、テーマが入っているディレクトリをコピーするだけです。

テーマを入れたら、Fcitx5 設定から同様にクラシックユーザーインターフェースの設定に移動すると、テーマのプルダウンの中に入れたテーマが見えますので、選択するだけです。

## sshd のインストールと設定

Ubuntu Budgie に限らず、desktop の最小構成だと入らなくなったのかもしれませんが。ssh login が出来なくて結構アセります。

`sudo apt install openssh-server` でインストール。

`/etc/ssh/sshd_config` が設定ファイルなので、最低でも以下の設定を確認。

```
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
```

`sudo systemctl enable ssh` で有効化。（１回やれば大丈夫）

`sudo systemctl status sshd.service` で状態確認。

sshd の設定ファイルを変更したら `sudo systemctl restart sshd.service`。

後は `~/.ssh/authorized_keys` に公開鍵を入れるだけ。

## Google Drive をマウントする

ノーマル Ubuntu だと、コントロールセンターに「オンラインアカウント」の項目があって、それに設定すれば、例えば Google Calandar のイベントをカレンダーで表示して開始時間１０分前にアラートする、ということが出来ました。

しかし Budgie に限らず、[その他の Flavour だと出来ない模様](https://discourse.ubuntu.com/t/gnome-online-accounts-no-longer-compatible-with-budgie-cinnamon-unity-control-center/42898)。

単にカレンダーならば普通に Chrome とかで表示しておけば良い話なのですが、一番痛いのは Google Drive のマウント。

GNOME Online Accounts が無いならば、[google-drive-ocamlfuse](https://github.com/astrada/google-drive-ocamlfuse) を使うしかない。

しかし最新の google-drive-ocamlfuse は GCP にプロジェクトを作り、そこに OAuth 2.0 のクライアント ID を作らなければならないと、非常に面倒くさいことになってしまいました。でもここは頑張る必要も甲斐もあります。

[公式](https://github.com/astrada/google-drive-ocamlfuse#getting-started)通り、PPA 経由でインストール。

```
sudo add-apt-repository ppa:alessandro-strada/ppa
sudo apt update
sudo apt install google-drive-ocamlfuse
```

GCP のコンソールからプロジェクト作ってクライアント ID 作って、に関しては、[公式の説明](https://github.com/astrada/google-drive-ocamlfuse/wiki/Authorization)があるのですが、あまりにも簡単な説明なので、もうちょっと説明します。

* [GCPのコンソール画面・APIとサービスに移動](https://console.cloud.google.com/apis/dashboard)
* 適当なプロジェクトを作る
* このプロジェクトで Google Storage API を有効にする
    * 気持ち悪ければ、その他の API を無効にする
* 「認証情報」タブを選択し、「認証情報を追加する」をクリックして、OAuth 2.0 クライアント ID を作る
    * アプリケーションの種類は「デスクトップアプリ」
* 作れたら「OAuth 同意画面」タブを選択し、公開ステータスを「本番環境」にする
* 「認証情報」タブを再び選択し、OAuth クライアント情報を JSON でダウンロードし、そこに書かれている client ID と client secret を google-drive-ocamlfuse の引数として与える

公開ステータスを「本番環境」にしなきゃいけないのが、非常にハマりました。

普通に作ると、`~/gdfuse/default/` 以下に設定ファイル等が格納されます。この「default」が label なので、ディレクトリ名を変えることで label を設定できます。複数のアカウントの Google Drive をマウントしたい時には設定する必要があるでしょう。

そして、やはりログインする度に自動的に Google Drive をマウントして欲しいです。やり方は以下の２通り。

* Startup Applications アプリで設定ファイルを作成する
* 自分で設定ファイルを書く

せっかくなので後者でやってみます。

とは言っても難しくはなく、`~/.config/autostart/` 以下に設定ファイルを置くだけです。例えば `mount-google-drive-private.desktop` という名前のファイル名を作り、そこに以下の内容を書きます。

```
[Desktop Entry]
Name=MountGoogleDrive (private)
Name[ja]=MountGoogleDrive (private)
GenericName=MountGoogleDrive (private)
Comment=mount GoogleDrive - private
Categories=System;
Type=Application
Exec=/usr/bin/google-drive-ocamlfuse -label private /home/<username>/GoogleDrive/private
Terminal=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
onlyShowIn=Budgie
```

マウントポイントは Home Directory から２階層以上深くしないと、Home Directory で ls した時にいちいち google-drive-ocamlfuse に聞きに行ってしまうので遅くなってしまいます。なので、label をつけて、Home 以下の GoogleDrive ディレクトリに label 名のマウントポイントを作ることにしました。

この設定ファイル内で `~` は使えないので、マウントポイントはちゃんと root からの絶対パスである必要があります。ここだけは注意。

この設定ファイルを作ったら、Startup Applications アプリにちゃんと反映されているか確認した方が安心です。後は reboot して自動的にマウントされているのを確認するだけ。

### apt の warning を消す

google-drive-ocamlfuse のインストールで使った `ppa:alessandro-strada/ppa` の公開鍵は RSA 1024 bit なのですが、これは今では暗号としては弱く、もっと強い暗号にすることが求められています。

しかし、そんなこと言われたって提供してくださっている方が変えてくださらないと・・・

ということで、こちらの warning を消します。（もちろん自己責任でお願いします）

`/etc/apt/apt.conf.d/99weakkty-warning` というファイルを以下の内容で作成します。（もちろん root 権限で）

```
APT::Key::Assert-Pubkey-Algo ">=rsa1024,ed25529,ed448";
```

これだけで apt の際の warning が消えてスッキリします。

## 壁紙に表示される日付の書式を変更する

上部のパネルに表示される時刻（および日付）の設定は、Budgie デスクトップの設定（budgie-desktop-settings）から トップパネル > （パネルの中央）Clock を選択し、アプレットの設定から簡単に変更することが出来ます。（Calendar の場合も同様）

また、壁紙に表示される時刻および日付の設定は、同じく Budgie デスクトップの設定（budgie-desktop-settings）から トップパネル > （パネルの先頭）ShowTime を選択し、アプレットの設定から出来ます。

しかし、この ShowTime の設定では日付の書式が変更できません。調べると、直接 GNOME の設定を変更するしかないということが分かりました。CUI で変更・確認することは出来るのですが、簡単に GUI で設定しましょう。

`flatpak install flathub ca.desrt.dconf-editor`

dconf エディターがインストールされるので、そこから以下を開きます。

org > ubuntubudgie > plugins > budgie-showtime

ここの dateformat を修正することで書式を変えられます（例えば `%Y/%m/%d (%a)` とかに）。

まぁ、ただの飾りなんですけど。（時間を知りたい時はトップパネルの Clock/Calendar を見る）

## 壁紙を変更する

はい。普通の方法だと出来ないんです。

適当な背景部分で右クリックして出てくるメニューに「背景を変更」はあります。そこから呼び出されるのは Budgie コントロールセンター（budgie-control-center）の「背景」で、いつもならばそこで「画像を追加」して、その画像を設定すれば良い筈です。

でも、「画像を追加」を押して出てくるウィンドウで、画像を選択することが出来ないんです。

しかし、以下の２通りの方法で解決できます。

* 背景にしたい画像を `~/.local/share/backgrounds/` にコピーする
* Tweaks（gnome-tweaks）で設定する

まぁ普通に gnome-tweaks で設定出来るので、何の問題も無いのですが・・・

## アカウントのプロフィール画像を変更する

壁紙と同様に、アカウントのプロフィール画像を自分の好きな画像に変更することも出来ないです。

どうしてもアカウントのプロフィール画像を自分の好きな画像に変更したい場合は、その画像を `/usr/share/pixmaps/budgie-faces/` 以下にコピーすることが必要です。（もちろん root 権限で）

まぁログイン画面が LightDM だから、プロフィール画像を見る機会はほぼ無いので、別に良いんですけどね・・・

## メニューのアイコンがあざとい

デフォルトだと、Bidgie のインコのアイコンが表示されています。中年男性にはチトきつい。

Budgie デスクトップの設定（budgie-desktop-settings）で トップパネル > （パネルの先頭）AppMenu のアプレットの設定に「メニューのアイコン」があり、デフォルトでは `ubuntu-budgie-symbolic` となっています。

これは、パスが通っている所なら、いちいちファイル名を指定しなくても設定できるからです。

このファイルの実体は `/usr/share/icons/hicolor/scalable/apps/ubuntu-budgie-symbolic.svg` です。

このアイコンは、最初に Budgie Welcome で入れたアイコンでは無く、Budgie のデフォルトで入っているアイコンなので、Budgie Welcome でアイコンを変更しても変わりません。それはちょっとつまらない。

例えばここに `start-here` と入力するだけで、アイコンの設定によって変わるようになります。

アイコンのセットは `/usr/share/icons` の下に入っていますので、自分の好きなアイコンをセットすることができます。

もうちょっと Budgie 色を出したい場合は、`budgie-desktop` と設定すると、まだ中年男性でも許容範囲なものになるかも。（感想には個人差があります）

## メニューでアプリの並び順を変更できない

アプリの並び順は、アプリの名前です。でもいちいちページを移動してアプリを探すのはめんどい。

この並び順を手動で任意のものに変更する方法は、とりあえず無さそうです。

Zeitgeist をインストールすると、使用頻度順に並べ替えてくれるらしいです。

`sudo apt install zeitgeist`

でも Zeitgeist はバックグラウンドで様々な使用状況をモニタリングするので、重そう。出来ることならば入れないで済ませたいです。

## コマンド型のランチャーをインストールする

マウスでメニューから使うアプリ選ぶのが非常に面倒くさいので、コマンド型のランチャーを入れたいと思います。

すでに Dock として Plank が入っている（歓喜！）ので、欲しい人だけで良いとは思いますが。

私のお薦めは [Ulauncher](https://ulauncher.io) です。公式通りにインストールします。

```
sudo add-apt-repository -y universe
sudo add-apt-repository -y ppa:agornostal/ulauncher
sudo apt update
sudo apt install -y ulauncher
```

Ulauncher を起動すると、設定の画面から、ログオン時に起動する、コマンドショートカット等を設定することが出来ます。

しかし、このコマンドショートカットは、ここで設定しただけでは時々反応しないことがあります。

念のため、Budgie コントロールセンター（budgie-control-center）のキーボード > キーボードショートカットの独自のショートカットを作成し、同じキーバインドで `/usr/bin/ulauncher-toggle` を登録することをお薦めします。

### （余談）ターミナルのエイリアスを作成する

Ulauncher を入れたとしても、ターミナルを起動するのに `Tilix` とタイプするのは面倒なので、`terminal` とタイプしただけで `Tilix` を起動したい人向け。（特に私）

`~/.local/share/applications/terminal.desktop` として、以下の内容のファイルを作成します。

```
[Desktop Entry]
Name=Terminal
Comment=terminal emulator
Exec=/usr/bin/tilix
Terminal=false
Type=Application
Categories=System;
Icon=Terminal
```

こうすると、Ulauncher で `terminal` とタイプするだけで、`Tilix` が起動します。

さらにこんなメリットも

* メニューにも Terminal が現れる
* メニューから Plank に Drag & Drop することで Plank にも追加できる
* アイコンを好きなものに設定できる
    * この場合はテーマのアイコンにある Terminal を指定している
* 使うターミナルを変更したい場合も、このファイルの Exec を変更するだけ

ちなみに、dconf エディタで org > gnome > settings-daemon > plugins > media-keys > terminal を変更すると、システムのデフォルトターミナルを起動させるキーバインドを設定できます。これのデフォルト値が `['<Primary><Alt>t']` だったので、私の場合は `['<Super><Ctrl>t']` と変更しました。

何がシステムのデフォルトターミナルかは、以下のコマンドで確認できます。

`sudo update-alternatives --display x-terminal-emulator`

これを変更する方法は以下。

`sudo update-alternatives --install /usr/bin/x-terminal-emulator x-terminal-emulator <path_to_terminal> 50`

現在の Tilix の優先度を --display で調べると 30 だったので、それより大きい優先度（上記の場合は 50）を設定すれば、その terminal がデフォルトに設定されます。

## キーバインドを Emacs 風にする

Tweaks（gnome-tweaks）のキーボード > Layout で、Emacs 入力を ON にすると、多くのアプリで Emacs 風なキーバインドを実現できます。

でも、GNOME じゃないアプリは Emacs 風にはなりません。gnome-tweaks が悪いわけじゃなく、GNOME じゃないアプリを使う私が悪い。

それでもどうしても Emacs 風のキーバインドを使いたい場合は、[Autokey](https://github.com/autokey/autokey) で設定します。

Autokey の設定は、いちいち Window を調べたりスクリプトを書いたりしなければならないので面倒ですが、一度設定してしまえばかなりパワフルに動きます。

まずはインストール。

`sudo apt install -y autokey-gtk`

Autokey の設定については、拙作ですが、[私の設定](https://github.com/tetutaro/dotfiles/tree/main/autokey)が参考になるかなと。Mac 用のキーボードをつなげて使っているので、Super を多用して Mac と同様なキーバインドになるよう設定しています。

## クリップボードの画像を保存する

スクリーンショットや JupyterLab で、画像をクリップボードに保存する機会は多いです。

直接 Google Slide 等に貼り付ける場合は問題ないですが、一旦デスクトップに保存したい場合もあるでしょう。この時に活躍するのが xclip です。

`sudo apt install -y xclip`

Budgie コントロールセンター（budgie-control-center）のキーボード > キーボードのショートカットで、以下のコマンドを登録することによって、キーボードショートカットだけでクリップボードの画像をローカルに保存することが出来ます。

`sh -c '/usr/bin/xclip -selection clipboard -t image/png -o > /home/<username>/Desktop/"$(date +%Y%m%d_%H%M%S)".png'`

## メニューに表示されるアプリを減らす

通常の状態だと、メニューに普段使わないアプリがたくさん表示されて、非常に鬱陶しいです。

例えば「Budgie 談話」というアプリも表示されているのですが、これ単体をアンインストールすることは出来なく、アンインストールするなら Budgie Welcome 自体をアンインストールしなければなりません。そして本当に参照したくなったら Budgie Welcome から簡単に見ることが出来ます。要するに、メニューの表示だけを消したい。

メニューに表示されるのは、`XDG_DATA_DIRS` という環境変数に登録されているディレクトリの、さらに下の `applications` というディレクトリ内にある `.desktop` という拡張子のファイルの内容です。`echo $XDG_DATA_DIRS` で見ると、以下のディレクトリが登録されていることが分かります。

* `/usr/share/budgie-desktop`
    * Budgie 独自のアプリ
* `/usr/share/gnome`
    * GNOME のアプリ
* `~/.local/share/flatpak/exports/share`
    * Flatpak のユーザー権限で入れたアプリ
* `/var/lib/flatpak/exports/share`
    * Flatpak の root 権限で入れたアプリ
* `/usr/local/share`
    * 一般的なアプリ
* `/usr/share`
    * 一般的なアプリ
* `/var/lib/snapd/desktop`
    * snap で入れたアプリ

（ここに `~/.local/share` は含まれていませんが、ちゃんと参照はしているようです）

Flatpak でインストールしても大抵は `/usr/local/share/applications` に desktop ファイルがあるので、普通はここだけをチェックすれば良いのですが、例えば Budgie Welcome は snap でインストールされているので、`/var/lib/snapd/desktop/applications` をチェックしなくてはなりません。（Budgie Welcome 関連は手動で消しても再起動で元に戻ってしまいますが）

メニューの項目に相当する desktop ファイルが見つかったら、そこに `NoDisplay=true` という１行を追加するだけで、メニューから消えます。もちろん desktop ファイルが root 権限だったら、root 権限で編集することが必要です。そして、自己責任でお願いします。

老婆心ながら、メニューから消えても Ulauncher で名前を指定すれば動かせるので、ほぼ心配することは必要はないです。

# お薦めアプリ

私の個人的な意見なので、参考までに。

* 画像ビューアー:  Loupe
    * インストール
        * `flatpak install flathub org.gnome.Loupe`
    * 軽量だし、GPU も使うので高速
    * GIMP との連携も出来る
    * メニューでは "Image Viewer" としか出ない
* 画像編集: GIMP
    * インストール
        * `flatpak install flathub org.gimp.GIMP`
        * `flatpak install flathub org.gimp.GIMP.Plugin.BIMP`
        * `flatpak install flathub org.gimp.GIMP.Plugin.FocusBlur`
        * `flatpak install flathub org.gimp.GIMP.Plugin.Fourier`
        * `flatpak install flathub org.gimp.GIMP.Plugin.GMic`
        * `flatpak install flathub org.gimp.GIMP.Plugin.Lensfun`
        * `flatpak install flathub org.gimp.GIMP.Plugin.LiqiuidRescale`
        * `flatpak install flathub org.gimp.GIMP.Plugin.Resynthesizer`
    * 定番。だがこれが良い。
    * 上記の Plugin を全部インストールすると「選択した領域にある物体を周りから推測して消す」ことが可能になる
* グラフ作成: drawio
    * インストール
        * `flatpak install flathub com.jgraph.drawio.desktop`
    * これがないと仕事が出来ないぐらい必須
* チャットツール: Slack
    * インストール
        * `flatpak install flathub com.slack.Slack`
    * これがないとある意味仕事が出来ない
* PDF ビューアー: Evince
    * インストール
        * `flatpak install flathub org.gnome.Evince`
    * 定番。これで良い。
* 音楽プレイヤー: Spotify
    * インストール
        * `flatpak install flathub com.spotify.Client`
    * 時々聞きたくなる
* 動画プレイヤー: VLC
    * インストール
        * `flatpak install flathub org.videolan.VLC`
    * 軽量な動画プレイヤーとしては [Celluloid](https://flathub.org/ja/apps/io.github.celluloid_player.Celluloid) もあるけど、あれこれ悩むのが嫌だったので、最初から VLC 入れてればいいや、ぐらいな気持ち
* パスワード管理: KeePassXC
    * インストール
        * `flatpak install flathub org.keepassxc.KeePassXC`
    * 定番。これが良い。
* スクリーンショット: Frameshot
    * インストール
        * `flatpak install flathub org.flameshot.Flameshot`
    * スクリーンショットを撮ったその場で書き込みができるので、便利
    * キーボードショートカットでスクリーンショットを撮る場合のコマンド
        * `/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=/app/bin/flameshot org.flameshot.Flameshot gui`
* カメラアプリ: Cheese
    * インストール
        * `flatpak install flathub org.gnome.Cheese`
    * 本当にカメラから動画を撮る時はどうせ OpenCV を使うだろうから、簡単な確認用に
* メニュー確認: MenuLibre
    * インストール
        * `flatpak install flathub org.bluesabre.MenuLibre`
    * メニューにはあるんだけど、本体はなんだっけ？という場合に確認するのに非常に便利
    * 編集するには root 権限が必要なので、編集は実質出来ない。確認だけ
    * `/var/lib/snapd/desktop/applications` フォルダは参照していない模様
* Markdown エディタ: Typora
    * これだけは有料なので[本家](https://typora.io/)から購入してダウンロード・インストールすると良いと思います
    * 私の Typora の設定は[ここ](https://github.com/tetutaro/dotfiles/tree/main/color_scheme/applications/typora)らあたりが参考になるかと
        * ぜんぜんちゃんと作ってないですが

# 開発環境の構築

ついでに私が開発環境を構築した手順を記しておきます。ちなみに私は以下の開発をします。

* JupyterLab で諸々の分析
* VIM で Python の backend 開発
* 時々 VIM で TypeScript の frontend 開発

## 最初に apt でインストールするもの

* 基本的なパッケージ
    * `sudo apt install -y git vim-gtk3 zsh tmux`
* 便利ツール
    * `sudo apt install -y silversearcher-ag xsel`
* Python のコンパイルに必要なパッケージ（[参考](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)）
    * `sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev`

## env 系のインストール

先にプログラミング言語の仮想環境を実現する env 系のツールをインストールします。仮想環境はなるべくシステムから切り離したいので、すべて git で入れます。ついでに便利ツール fzf も git で入れます。

* pyenv
    * `git clone https://github.com/pyenv/pyenv.git ~/.pyenv`
    * `git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv`
    * `git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenv-update`
* nodenv
    * `git clone https://github.com/nodenv/nodenv.git ~/.nodenv`
    * `git clone https://github.com/nodenv/node-build.git ~/.nodenv/plugins/node-build`
    * `git clone https://github.com/nodenv/node-build-update-defs.git ~/.nodenv/plugins/node-build-update-defs`
    * `git clone https://github.com/nodenv/nodenv-update.git ~/.nodenv/plugins/nodenv-update`
* fzf
    * `git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf`
    * `~/.fzf/install --xdg --key-bindings --completion --no-update-rc --no-bash --no-fish`

## ZSH の設定とシェルの切り替え

手前味噌ですが、ZSH の設定ファイルは[ここ](https://github.com/tetutaro/dotfiles/tree/main/zsh)にまとめています。スクリプトで作れるようにしています。

設定ファイルを作ったら、シェルを切り替えます。

* `sudo chsh -s /usr/bin/zsh <username>`

切り替えた ZSH を使うため、ターミナルを立ち上げ直します。

## 基本となる仮想環境の作成

env を入れたので、ついでに基本となる仮想環境を作ります。

まずは Python。偶然ではありますが、[2024/04/02 に 3.11 系の最後の bugfix release である 3.11.9 が出た](https://peps.python.org/pep-0664/)ので、これを使うことにします。念の為に、[3.10 系の最新である 3.10.14](https://peps.python.org/pep-0619/) も入れることにします。そして 3.11.9 の仮想環境を作り、普段はこれを使うことにします。

* `pyenv install 3.11.9`
* `pyenv install 3.10.14`
* `~/.pyenv/bin/pyenv virtualenv 3.11.9 system-3.11.9`
* `~/.pyenv/bin/pyenv global system-3.11.9`

次は Node.js。特にこだわりはないのですが、[現時点での LTS](https://nodejs.org/en) を入れることにします。また、yarn と typescript の Language Server 関係を global にインストールします。

* `nodenv install 20.12.2`
* `nodenv global 20.12.2`
* `npm install -g yarn`
* `npm install -g typescript typescript-language-server`

## pipx を入れる

次に Python のコマンドを通常のアプリのように使えるようにする [pipx](https://pipx.pypa.io/stable/) を入れるのですが、この pipx もシステムとなるべく切り離したいです。そこで、先程作った仮想環境 system-3.11.9 のパッケージとしてインストールします。

* `pip install pipx`

## エディタ等の設定

シェルの設定が完了したので、続々と設定していきます。既に設定スクリプトを作っていますので、叩いていくだけです。詳しい内容はリンク先を見ていただければ。

* エディタ: vim
    * [こちら](https://github.com/tetutaro/dotfiles/tree/main/vim)を参照
* Terminal Multiplexter: tmux
    * [こちら](https://github.com/tetutaro/dotfiles/tree/main/tmux)を参照
* ステータスラインやプロンプトを格好良くする: powerline
    * [こちら](https://github.com/tetutaro/dotfiles/tree/main/powerline)を参照
* zsh, vim, tmux, powerline の色設定
    * [こちら](https://github.com/tetutaro/dotfiles/tree/main/color_scheme)を参照

### gVim をデフォルトのテキストエディタにする

せっかく gVim を入れたので、gedit ではなく gVim をデフォルトのテキストエディタに設定したいと思います。

音楽やビデオ・写真ならば、Budige コントロールセンタの規定のアプリケーションで設定できるのですが、テキストファイル系はここでは設定できません。

よって、MIME type によって開くアプリケーションを決める設定を手動で変更しなければなりません。

この設定箇所は、`~/.config/mimeapps.list` です。（`~/.local/share/applications/mimeapps.list` というファイルもありますが、こちらは罠です（設定しても全く反映されません））

このファイルに例えば以下のように記入します。

```
[Default Applications]
text/plain=gvim.desktop
text/csv=gvim.desktop
application/json=gvim.desktop
```

ファイルの MIME type は `file --mime-type <ファイル名>` というコマンドで調べられますので、変なアプリで開いてしまってイラッとした場合は、MIME type を調べて mimeapps.list に登録していけば幸せになれると思います。

（[Association between MIME types and applications](https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-latest.html) や [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) が freedesktop.org の定義ですが、必ずしもこの通りの設定になっていない好例）

## Python の設定

いよいよメインのプログラミング言語である Python の設定をします。

###  pipx に poetry をインストールする

私は Python のパッケージ管理＆その他の機能を持つ [poetry](https://python-poetry.org/) を頻繁に使うのですが、これもシステムや開発環境に依存させたくありません。よって、poetry を pipx にインストールし設定します。

* `pipx install poetry`
* `pipx inject poetry "poetry-dynamic-versioning[plugin]"`
* `poetry config virtualenvs.path "${HOME}/.pyenv/versions"`
    * poetry で作成した仮想環境を pyenv の仮想環境が作られるディレクトリと同じディレクトリに作ることで、poetry で作成した仮想環境も pyenv で操作できるようにします

### JupyterLab Desktop をインストールする

Flatpack でインストールすることにします。

* `flatpak install flathub org.jupyter.JupyterLab`

### pipx に JupyterLab をインストールする

分析プロジェクト毎に JupyterLab をインストールするのは無駄なので、JupyterLab も pipx に入れてしまいます。[ここ](https://github.com/tetutaro/dotfiles/tree/main/jupyterlab)にインストール方法や設定はまとめてありますので、良ければ参照してください。

## Docker のインストール

[ここのページ](https://docs.docker.com/engine/install/ubuntu/)の手順 1, 2 を行った後に、忘れずに以下も行います。

* [ここのページ](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)に従い、NVIDIA Container Toolkit もインストールする
    * PC に GPU が刺さっている場合
* 自分を docker グループの一員とする
    * `sudo adduser <username> docker`
        * usermod を使う手段もあるが、オプション付け忘れるのが怖い
* 再起動する

# 最後に

非常に長い投稿になってしまいましたが、なにか皆さんのお役に立ったのなら幸いです。