dotfiles

概要

Linux系のプログラムでは、dotfileと呼ばれる . から始まるプレーンテキストで設定を書くことが多い。

  • Git管理できる
  • 別のマシンでも全く同じ環境を作り出すことができる

などのメリットがある。

kijimaD/dotfiles: System settings

Memo

QEMU(仮想デスクトップ環境)

新しいLinuxディストリビューションを試すときや、設定を変更するときは仮想マシン上で行ったほうがいい。 気軽に試せるし、再現性が高い。緊密なフィードバックループがあるとき開発は効率的になる。

逆にマシン本体へのインストールだと、設定変更や壊れたときの対応が面倒。 マシン本体へのインストールは本番環境みたいなもので、すばやく試すのには向いてないし、壊れたときがさらに面倒。

GNU Guixを仮想マシンで起動する

GNU Guix 5 Reasons to Try Guix in 2022 - YouTube

sudo apt install qemu-kvm
qemu-system-x86_64 \
    -nic user,model=virtio-net-pci \
    -enable-kvm -m 2048 \
    -device virtio-blk,drive=guix-demo \
    -drive if=none,file=$HOME/Downloads/guix-vm.qcow2,id=guix-demo \

Windowsを仮想マシンで起動する

無料のWindows仮想マシンをQEMUで動かす - Qiita

qemu-system-x86_64 -m 4096 -smp 2 -hda MSEdge\ -\ Win10.vhdx -enable-kvm

配布サイトに記載のように、パスワードは Passw0rd! 。 仮想マシンのフォーカスを抜けるにはCtrl + Alt + g。

好みのOSを作る

カスタマイズ性の高いソフトを組み合わせて、再現性の高い最高のシステムを作る。 Guixは土台になる。 だいたいSystem Craftersの情報がベースになってる。

  • プレーンテキストでの設定
  • 柔軟な設定
  • コードがオープン
  • キーボード指向

GNU Guix

パッケージ管理システム。

GNU Emacs

環境。

GNU Stow

設定ファイル管理ツール。 シンボリックリンクを管理してくれる。

GNU Shepherd

サービス管理ツール。

GNU Make

古代からのビルド用ツール。タスク定義をドキュメント化するのに使う。

nyxt

完全キーボードでのインターネットブラウジングを可能にする。

i3-wm

どうしてもEmacsで日本語入力ができない。 ibusが特定アプリで動作しない不具合にあたっている。 gnomeでは完全にできるので、自動でやってくれてるところがあるよう。 Emacs上ではskkを使うようにして解決。Emacs以外では普通に入力すればいい。

ドキュメント https://i3wm.org/docs/userguide.html#_hiding_vertical_borders

  • close window: Mod + Shift + q

polybar

柔軟に設定できるメニューバー。

compton

Emacs側で透過設定しても字が薄くなって微妙だが、ウィンドウ側でやると綺麗にできる。 また、ほかのアプリケーションを透過できて統一感がある。かっこいい。

feh

背景を設定する。

feh --bg-fill -Zr ~/dotfiles/backgrounds/4k-Ultra-HD_00330.jpg

dunst

dunst-project/dunst: Lightweight and customizable notification daemon 通知機能が入ってないウィンドウシステムでは(EXWMとか)、これを組み合わせて通知する。

Tasks

TODO インストールスクリプトを個別実行できるようにする

1つ1つ実行できると便利そうなので。

TODO フォント追加タスクを作成する

nerd-fontsをインストールする。cloneしてきて、スクリプトを実行する。

./install.sh

TODO インストールタスクが壊れてるのを直す

イメージからインストールする前提でMakeタスクのいくつかを消しているので、手動でインストールするときは大変面倒なことになっている。直す。

sudo apt install libsqlite3-dev

TODO DBeaverインストール

閲覧に便利なdbクライアントをインストールする。

TODO strategyを設定する

ubuntu22.04, ubuntu20.04, xubuntuを同時にテストできるようにしたい。できないにしても、動作確認には役立つ…か。少なくともデグレは防げる。

TODO dist-upgradeする

22.04をイメージのベースにするのが厳しそうなので、妥協してdist-upgradeを走らせる。

どうしてもアップデートの途中で止まってしまう。

TODO イメージ展開用のmakeタスクを作成

動作検証で頻繁にやるので。

Reference

Sacha Chua’s Emacs configuration(Sacha Chua)

Emacsで有名な人のdotfiles。設定が莫大。

My dotfiles(SqrtMinusOne)

Emacs界隈でよく見かける人。グラフ化していて良い。

How to create a custom Ubuntu live from scratch | live-custom-ubuntu-from-scratch

スクラッチでブータブルイメージを作る。

Archives

DONE dotfilesをCIテストする

テスト、Lintはセットしたが、実行時エラーが解消できない。guixに依存した .bash_profile なんだよな。

DONE Dockerでテストする

クリーンな環境で一連のインストール作業ができるかチェックすると安心だろう。 GNU Guix関連をどうするかで詰まっている。使いこなせればDockerでやる必要はなくなるはずだが。 docker ubuntuではsystemctlが起動できないようになっているなので、GNU Guixが起動せず、依存関係が満たせない。 GitHub Actionでは実行できるのでそれでやった。実行テストさえできればいいだろう。

DONE dotfilesにSSH設定の例を追加する

少なくとも例だけのせておくと便利だろう。 環境を楽に選択できるようconfigを設定する。 https://qiita.com/hkak03key/items/3b0c4752bfbcc52e676d

DONE インストールディスクを作成する(いちいち最初からするのが面倒なので)

すべて整備された状態でクリーンインストールできるようにしたい。イメージを作るとかそういうのができるはず。system.scmではパーティションやユーザ名を入力するのだから。

可能なことは確かだが、全然わからない。

CLOSE mozcのdotfilesを用意する

configファイルはないようだ。なのでファイル管理できない。

DONE polybarとpomodoroを連携させる

改良してゲージ型にした。 全体カウント機能を追加した。一日ごとにリセットする。

DONE Dockerで動作チェックできるようにする

クリーンな環境でうまくいっているかチェックしたい。 Guix関連が難しく、詰まっている。

DONE xfce4にする

EXWMの関係で、xfceのほうがいい。

CLOSE emacsをCIで初回起動する

いろいろ走るので初回が遅い。.emacs.dを指定して起動、とかしたらいいかな。emacs-sqliteのバイナリが見つからないエラーになる。ライブラリが入ってないため、コンパイルが自動でされないよう。

  • emacsql-sqlite

cコンパイラ(gcc, clang, build-essentialどれでも )をインストールするとemacs-sqliteのコンパイルはできるようになる。だがubuntu自体の起動が失敗する。謎。Ubuntuインストール後、Guixでgccインストール、手動でコンパイルするしかない。めんどくさい。

  • vterm

いくつかライブラリが必要。ない場合は自動コンパイルが走りわかりやすいエラー文も出るので対処はしやすい。

emacsを起動したイメージでブートすると、ユーザ作成モーダルを抜けられない。何らかの権限的な理由でユーザ作成に失敗しているように見える。

DONE caskはタグが打たれたときだけ実行する

実行時間が長いので、開発に支障が出る。

DONE cloner追加

cargo install clonerを追加する。

  • build-essential が入ってないので、ビルドに失敗する
  • build-essential を入れるとubiquityが失敗する

CLOSE バージョン情報、gitハッシュ情報をイメージに含める

あとから、イメージがどのバージョンなのかわからないので。それ用のファイルはありそうだが。

まあ、USBのパーティションの名前に含めればいいか。

DONE qemuを入れる

使うので。

DONE dockerイメージを作る

動作検証できるように、isoからイメージにしておく。

単にtarに固めただけでできた。デバッグやテストもやりやすそうだ。

DONE 必須のgoライブラリを入れる

LSP, DAPを入れる。

ダウンロードすると、起動しなくなる。emacsを起動と同じく、何か特定のことをすると動かなくなる。走らせるとシステムディレクトリに何らかの変更をもたらす場合、動かなくなる可能性。たとえば go install やemacs起動したとき、ホームディレクトリ以外に何かを保存するとか。

とりあえずisoビルド段階では入れず、makeタスクに追加した。

DONE makeタスクを整理

ブートイメージ化で不要になったものがあったり、逆に必要なものがあったりする。