【bottom】【diskonaut】【topgrade】PCマネージメント簡単化ツール

/darallium/です！ご覧いただきありがとうございます． 😊

「CLI初心者でも感動するような，それでいて汎用性・拡張性の高いCLIツール」を紹介する7日間の3日目の記事です 🙇

本日は「コンピュータ管理の強化」をテーマに，bottom, diskを紹介します:relaxed:

# bottom
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196553/b7caee98-769a-e5f5-f428-a1e5a3e71156.png)

topとかその辺を統合してUIを最強にしたようなツールである．

## install
#### dependencies
- rust cargo
### windows

```bat
winget install --id Clement.bottom
```

### linux/mac

```sh
# nixos, mac, snap, pacmanのみ
$ <brew/port/nix-env/snap/pacman> install 

#otherwise
$ cargo install bottom --locked
```

## チュートリアル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196553/9439c67c-3f7e-ab48-a219-c04e6a029d28.png)

bottomであるが，実行ファイル名はbtmであることに注意．

大枠の四角で囲まれた部分をwidgetと呼ぶ．ショートカットキーはwidgetごとに独立している．

### 全体

- \<H/J/K/L\>: widget間を上下左右に移動；シフト押しながらであることに注意

### 赤矢印のwidget

- \<+/-/=>:横メモリの拡大/縮小/縮尺のリセット 

### process

- <j/k>: 上下移動
- \<c/m/p/n/M/C\>: cpu/memory/pid/プロセス名/GPU-ram/GPUでソート
    - 
: ソート項目選択画面を出す
- \<gg\G>: 上/下の端まで移動
- \</\>: 検索；下に出るショートカット通りに打つと検索に縛りがかかる
- \<dd>: プロセスを殺す

### disk

- \<d/m/u/n/t/p/r/w\>: 名前/マウンテッド/使用*量*/空き容*量*/総使用量/使用**率**/使用**率**
- <j/k>: 上下移動
- \<gg\G>: 上/下の端まで移動

## コンフィグいじり

bottomは起動時にコンフィグファイルが自動生成される．デフォルトでは，windowsは`%appdata%/bottom/bottom.yaml`，linux/macOSでは`~/.config/bottom/bottom.yaml`に生成される．

bottom.yamlでは，カラースキームから表示レイアウト，オプションまですべてを設定できる．デフォルト値を反転してコメントアウトされているので，必要なものをコメントアウトするのが良いだろう．

参考までに，筆者のコンフィグをいかに掲示する．

<details><summary>筆者のコンフィグ</summary>
<dev>
[flags]
rate = "1s"
current_usage = true
unnormalized_cpu = true
group_processes = false
case_sensitive = false
whole_word = false
regex = false
hide_time = false
default_widget_type = "proc"
hide_table_gap = true
battery = true
color = "nord"
mem_as_value = true
tree = true
process_command = true

[[row]]
  ratio=30
  [[row.child]]
  type="cpu"
[[row]]
  ratio=80
  [[row.child]]
    ratio=4
    type="mem"
  [[row.child]]
    ratio=3
    [[row.child.child]]
      type="process"
[[row]]
  ratio=30
  [[row.child]]
    type="net"
  [[row.child]]
    type="disk"
    default=true

[mount_filter]
is_list_ignored = true
list = ["/mnt/.*", "/boot"]
regex = true
case_sensitive = false
whole_word = false
</dev>
</details>


※battery項目は，自力ビルド＆ビルド時にbatteryオプションをつけないと利用できないため注意．


# diskonaut

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/196553/055d6a62-6823-3171-1ac5-f1fffeb74a52.png)

ディスクの使用領域を視覚的に割合で表示し，ディスクの整理のお供になるツールである．余談だが筆者はこれを用いてこのLinuxPCのディスクの6割をクリーンアップした．

## installation

#### dependencies

- rust / cargo

### windows

```bat
> cargo install diskonaut
```

### macOS

```shell
$ brew install diskonaut
```

### Linux

```shell
#dnf yay nixos
$ <dnf/yay/nix-env> install diskonaut

#otherwise
$ cargo install diskonaut
```

## チュートリアル

```shell
$ diskonaut /
```

- \<h/j/k/l\>: 項目の移動
- \<-/+\>: 拡大縮小
- \<Backspace\>: 選択した項目の削除

# topgrade

手元の環境を晒したくないので公式より引用．
![topgrade_demo.gif](https://github.com/topgrade-rs/topgrade/raw/main/doc/topgrade_demo.gif)

手元の環境のエコシステムをいい感じに検出していい感じにアップグレードしてくれる良い感じのツールである．

anyenvを更新して，pyenvを更新して，apt updateして，cargo updateして，...という煩雑な作業から解放される．

## installation

#### dependencies

- cargo / rust

### macOS

```shell
$ brew install topgrade
```

### windows

```batchfile
> scoop install 
```

### linux

```shell
# <nix-env/pacman>
$ <nix-env/pacman> install 

# otherwise
$ cargo install topgrade
```

## チュートリアル
```shell
$ topgrade --dry-run
```
`--dry-run`をつけて実行することで，実際にはアップデートせずに実行できる．

```shell
# neovimとpipとdenoを除外して動作
$ topgrade --disable nvim pipx deno

# neovimとdenoだけ動かす
% topgrade --only neovim deno
```

## コンフィグいじる
topgradeの
Windowsの場合は`%appdata%/topgrade.toml` `%appdata%/topgrade/topgrade.toml`Linuxの場合は`~/.config/topgrade.toml` `~/.config/topgrade/topgrade.toml`
のいずれかに配置すると機能する．デフォルトでは浅いほうに生成されるようだ．
ただし，`[include]`節の`path`にファイルを置くか，`topgrade.d`いかにファイルを分割できるようなので見やすいように配置するとよいだろう．個人的にはパッケージマネージャごとにファイルを作るって全部`include`するのが良いのではないかと思っている．

大まかには，`[misc]`で全体として，またはシステムレベルの設定，`[マネージャ]`でそのパッケージマネージャの設定である．`[commands]`で自分の好きな分を用意することもできる．
<details><summary>参考までに筆者のコンフィグも掲載する</summary>

```toml
[misc]

 sudo_command = "sudo"

display_time = true

assume_yes = true

no_retry = true

disable = ["vim", "deno"]


[git]
max_concurrency = 5

pull_only_repos = [
    # ぷらいばしー
]

pull_predefined = false

pull_arguments = "--rebase --autostash"

push_arguments = "--all"

[windows]
accept_all_updates = false

open_remotes_in_new_terminal = true

[firmware]
upgrade = true
```

</details>




# あとがき

なんだかんだシステムの管理はめんどくさい．IaCとかいう概念が生まれるぐらいには多くなると人の手を離れやすい．1つのPCすら管理がめんどくさいのだから当然だろう．しかし，手元の開発環境ぐらいは最もきれいな状態にしておきたいと思ったことはないっだろうか?そんな欲望を手助けするようなソフトウェアを紹介した．


#references

https://github.com/r-darwish/topgrade

https://github.com/topgrade-rs/topgrade

https://github.com/imsnif/diskonaut

https://github.com/ClementTsang/bottom