Closed12

ドットファイルをどう管理するか問題

dollplayer2501dollplayer2501

終了条件(このスクラップのクローズ条件)

自分的に、ある程度の運用ルールが定まった、と思える境地に至ったら。

裏目標として、Zennでの投稿に慣れる事。
理由は、私がテック系の情報をTwitter/Xで垂れ流すのではなく、それ専門のソーシャルネットワークで展開するのが苦手、という障壁を少しでも下げるため。

なお、おそらくだが、現在(も今後も?)スクラップをZenn CLIで管理する事はできない模様?

dollplayer2501dollplayer2501

現在の使用環境

  • PC/Hardware
    ThinkPad X13 Gen 1 (AMD), RAM 16GB
  • OS
    EndeavourOS, Endeavour Neo
  • DE/WM
    Qtile on Xfce4 [1]
  • Shell, etc.
    Kitty, Alacritty, fish shell with fisher, Starship, Neovim with lazy.nvim, Ranger with Überzug++, etc.
  • Purpose of use
    Daily use, such as for SNS.
    Apart from this, I also have a Windows desktop machine, which I use for other things besides SNS, such as browsing video sites.
Execution result of fastfetch


Scrotによるスクショ、GIMPで加工(crop)。

脚注
  1. 念のため…現時点でEndeavourOS本家ではなく、コミュニティ版としてQtile版が存在する。しかし私はまずXfce4でインストール、次いでQtileをyayでインストールした後に、Xfce4環境が使用するデーモンを起動させている。(いずれ記事にする予定) ↩︎

dollplayer2501dollplayer2501

湧き上がった問題に対しての一応の対応策

~/.config以下を全て管理したくない

一括で管理するのは楽ではあるが。
正確には、何らかの形で、全てを管理する必要が無いと感じている。
(例:Fcitx関連、Xfce4関連、Code OSS関連)

現状の結論としては、面倒だが、各アプリケーション単位でGitHubの非公開リポジトリへ。
現状で20個前後。
逆に言うと、~/.config以下を一つのリポジトリにして、.gitignoreを駆使して、という管理にはしていない。
(過去それで面倒になり、有耶無耶になった記憶)

ホーム直下のドットファイルの扱い

実体を~/.config/_dotfiles_etc/(私が新規作成)に移行。
そしてここから、ホーム直下へのシンボリックリンク(ln -s)とする方針で。

  • ~/.bashrc
  • ~/.gitconfig
    ただしこのファイルに関しては、後述の理由により、共有リポジトリでは管理しない
  • ~/.xprofile
  • ~/.Xresources

PEND)前述以外のコンフィグファイルの扱い

例えば/etc/samba/smb.conf
オーナー権限の関係上、扱いを割り切れていない。

それ専用のアプリケーションを使わないのか?

海外配信者の配信動画などを見る限り、とりあえず今回は使わない方針で、に至る。
理由は、ドットファイルの実体をさくっと修正したい、というのがあるので、そこに更にひと手間を掛けるのが…というのがある。
(ただしエアプ勢なので、実務的な業務フローは未確認)

以下、これを管理するアプリケーションを参考まで。

ドットファイル管理アプリケーション一覧(2025年2月現在?)
dollplayer2501dollplayer2501

この問題、実は解決している

目標を「(再度OSクリーンインストール時の)リストアが容易」であるに限定すれば。

https://github.com/syncthing/syncthing

…を用い、既に環境と運用フローが自分の中で確立されているので。

  • 手動、~/.config内(など)で、保存したいアプリケーションのディレクトリを都度バックアップ、世代管理無し
    つまり、同一環境内に本体とバックアップが共存、複数存在状態なので、割り切れない方は割り切れないかもしれません
  • Bashシェルスクリプトを実行、スクリプトは単純なcp -r -d SRC DSTの集合体
  • OSインストール後に優先するのは、Syncthingを通す事(SambaやGitHub接続以上に)、と自分のアタマの中で確立されている

あくまで自分的には、コマンド一発で新環境が立ち上がる、を一切目指していないので。
仮にそれが目的ならば、現在使用中(3年)のEndeavourOSでなく、NixOS(でしたかね、未確認)を使うと思う。


ただし
今後、GitHubも活用する方向に切り替えたので、例えば./gitディレクトリなどを除外する必要性が生じた。
このため、cpではなく、rsyncにて書き換え中。
(現在はcp後にrm -rfしている)
更に言うと、Bashスクリプトではなく、現在使用中のFishシェルでの書き換え、場合によっては世代管理も考慮に入れる方針。


では何故、共有リポジトリ、かと言うと、将来的には
https://www.reddit.com/r/unixporn/?rdt=46724
に投稿したいやん、その時にdotfiles、と言われるのが目に見えているので…
(ですが、現在、あまりにも海外のニキ達が凄すぎて、投稿を諦めている状態)

dollplayer2501dollplayer2501

GitHubも使い始めた

基本、現在は非公開状態だが、Neovimだけ公開…しかし、とても浅いですよ、使い方は…

https://github.com/dollplayer2501/dotfiles_nvim


さて、ここで課題が生じた。

  1. 前述の.git/なども除外する必要性
    現状、__pycache__のみしか存在しなかった
  2. どうせ使うなら、Lazygitとかも使い(現在はgitコマンドのみで完結)、更にNeovimとも連動させたいという欲
    当面はLazygitの操作性に慣れるのが目標で、当面は今同様、gitコマンドのみの運用になると思う
  3. 自分にはあまり馴染みの無いブランチを積極的に使うべきではないか?
    お恥ずかしながら。
    割と気分次第でコンフィグをいじるので(色など)、それを都度、git pushするのも…というのに対するアンサー
dollplayer2501dollplayer2501

以上

ここまでが過去(もしくは現在進行形)の出来事で、ここから先の投稿は、私にとって未体験ゾーンになります。
何ヶ月も投稿されないかもしれないし、放置してしまうかもしれない…ので、その節は皆様にご迷惑をおかけするかもしれません。
今の自分的には、終了条件を定めているので、それは無いと思っていますが。

…みたいな投稿がココ…Zennで許されるのですかね。
「スクラップは気楽に投稿して」を拡大解釈しているかもしれませんが、判断はZennのスタッフ様にお任せします。

dollplayer2501dollplayer2501

~/.gitconfigの扱い

お恥ずかしい話、現環境で今まで真面目にGit関連を触ってこなかったので、このファイルの必然性が見えていなかった。

このファイルは、個人のメールアドレスを記述するので、プライベートなリポジトリとはいえ表で管理したくないので下記の方針で。

  • GitHubでの管理はしない、もしくは、.gitignoreする
    (それまでの慣例だと、~/.gitconfigをシンボリックリンクにする)
  • Syncthingでのバックアップ対象には含める

これを考慮すると、各種ドットファイル管理アプリケーションが存在する理由が分かるというもの。
なお、現状、~/.ssh以下は管理対象にしていない。

dollplayer2501dollplayer2501

Gitブランチ運用に関して

下記の運用ルールで。

  • 少し色を変えたい、の様な場合、ブランチ側を修正
  • 明らかに今後、このコンフィグ設定を使うだろうな、という様な場合、メインを修正

ここで三つ問題が。

  1. 私がブランチ運用に慣れていない事
    メインorブランチのいずれかを更新した後、もう片方も差分を反映させる必要があるので、その操作方法。[1] [2]
  2. 常にメイン・ブランチを意識しないと、確実に間違える自信がある事
  3. TODOタスク管理
    普通はGitHubのIssuesで管理すると思うが、ドットファイルに関しては、Neovimのtodo-comments.nvimに一任の方針で。[3]

2番目に関しては、Stashipの表示を修正。
ブランチが目に付きやすい左側に移動。[4]

下記がプロンプト部分のソースコード。

format = """
[──┬─](#ff7f7f) $hostname[,](#7f3fbf) $username $fill $time [───>](#ff7f7f)
[  ├─](#ff7f7f) $directory  $git_status$git_branch$git_commit$git_state$git_metrics $fill $memory_usage [───>](#ff7f7f)
[  └─](#ff7f7f)$character
"""
right_format = "$python$nodejs$lua [───>](#ff7f7f)"

fillsymbolは半角スペースを設定。
ちなみに罫線はNerd Fontsではなく、Unicodeの罫線らしいですね。

脚注
  1. ただし、失敗しても人様に迷惑がかかる訳では無いので、最悪、ブランチ…リポジトリごと消して新たに登録すればいいか、という精神で。 ↩︎

  2. マイルールとして、ブランチ名はusing-yyyymmddと、Issueドリブン開発手法には即していない。(今、改めて気付いた) ↩︎

  3. このプラグインとGitHubのIssuesが連動するのかな、後日確認。(覚えていたら) ↩︎

  4. カラーが地味であるが。 ↩︎

dollplayer2501dollplayer2501

.gitignore、相変わらず苦手…

このディレクトリ内のこのファイルだけ管理する、はある程度慣れた。[1]
一方で、それを受けたテキストエディタがどう解釈するか…というゆらぎはさすがに無いか。
どのタイミング、自動でなのか、手動でなのか[2]、それも慣れたと(仮定)。

一方で、それまで管理下に存在したファイルをリポジトリから外すケースで失敗…メインからブランチへの反映のどこかの段階で失敗していたらしく、実ファイルを削除してしまい、結局、リポジトリを削除してゼロから作り直し。
この時、直前に前述によるバックアップを取っていたので、最低限の手戻りの手間で済んだのが僥倖。
どこかの段階で、サンドボックスを作り、このケースをカラダで覚える必然性が。

脚注
  1. イニシャルコミット時の前後関わらず ↩︎

  2. nvim-treeは:NvimTreeRefreshによる手動? ↩︎

dollplayer2501dollplayer2501

バックアップのスクリプトをFishシェルで書き直した

ざっくり、下記の様なソースコードをBashスクリプトから移植。
下記、コードの全てではないのと、世代管理まではしていない。

function my_backupping --description "Backup dotfiles for me"
  set my_array \
    "_dotfiles_etc" \
    "alacritty" \
    "bat" \
       :
    "xfce4" \
    "yazi"

  for item in $my_array
    set --local tmp_source_path      "$source_path/$item/"
    set --local tmp_destination_path "$destination_path/$item/"

    command rsync -av --quiet \
      --exclude '.git/' \
      --exclude '__pycache__/' \
      $tmp_source_path $tmp_destination_path
  end

また、下記の情報も保存。

  • /etc/samba/smb.conf
  • pacman -Qe
  • fc-list
  • ls -lA ~/.local/share/icons/
  • ls -lA ~/.local/share/themes/
  • code --list-extensions --show-versions
  • ~/.config/Code - OSS/User/settings.json
微妙にお気持ち表明

例えば、バッチ処理的な何か…コマンドラインから実行するプログラムを書きたい、と思った場合[1]、今までだと、かつてはPHP、今だとPythonで書いていた。
あくまで私の感覚的に、シェルのスクリプト言語とプログラム言語…スクリプト系であったとしても、出自が違うというか、世界観が全く別な印象があり、今までシェルスクリプトを割と積極的に避けていた。

一方で、2025年1月末頃から、ようやく自分もAI検索を使い始め、一般的なウェブ検索では得られない恩恵に預かっている。[2]
特にスクリプト言語は、記号を多用するので、検索しづらいという経験値が蓄積されていたのを覆した気が…AI検索の確度が、そこまで高くないとしても。

私の場合、Fishシェルのスクリプト…正確にはFunctionになるのか、忘れがちなコマンドライン引数をメモ帳代わりに作っている気がする。
例えばImageMagickなど。
ここでファイル名の文字列としての操作が、(他に、配列をループさせるなど)、今までだとシェルスクリプトで書くよりスクリプト系言語で書いた方が、というのが常にあったので使用を避けていた、というのが大きい。

脚注
  1. ローカルでの使用を前提。 ↩︎

  2. 高尚な議論はともかく。 ↩︎

dollplayer2501dollplayer2501

是が非でもブランチ管理する必要はないかなぁと思い始めた

改めてバックアップ対象…リポジトリ管理対象を見直した結果、Qtileだけでいいのでは?に至った。

さて、以下が現環境での~/.configである。

~/.config
>> command ls -lAF | xclip -selection clipboard

drwxr-xr-x dollplayer 4.0K 25 Feb 11:31 _dotfiles_etc/
drwxr-xr-x dollplayer 4.0K 24 Feb 22:04 alacritty/
drwxr-xr-x dollplayer 4.0K 05 Jan 12:34 autostart/
drwxr-xr-x dollplayer 4.0K 24 Feb 22:13 bat/
drwx------ dollplayer 4.0K 05 Jan 14:38 BraveSoftware/
drwx------ dollplayer 4.0K 24 Feb 22:46 cmus/
drwx------ dollplayer 4.0K 25 Feb 15:04 Code - OSS/
drwx------ dollplayer 4.0K 26 Feb 13:56 configstore/
drwxr-xr-x dollplayer 4.0K 01 Feb 00:05 conky/
drwx------ dollplayer 4.0K 26 Feb 18:37 dconf/
drwxr-xr-x dollplayer 4.0K 05 Jan 15:31 eos-log-tool/
drwxr--r-- dollplayer 4.0K 24 Feb 23:11 fastfetch/
drwx------ dollplayer 4.0K 07 Jan 20:49 fcitx/
drwx------ dollplayer 4.0K 26 Feb 17:59 fcitx5/
drwx------ dollplayer 4.0K 26 Feb 18:20 fish/
drwxr-xr-x dollplayer 4.0K 19 Feb 18:02 ghostty/
drwxr-xr-x dollplayer 4.0K 01 Feb 15:04 GIMP/
drwx------ dollplayer 4.0K 26 Feb 15:22 gtk-2.0/
drwxr-xr-x dollplayer 4.0K 26 Feb 12:45 gtk-3.0/
drwxr-xr-x dollplayer 4.0K 20 Jan 05:31 gtk-4.0/
drwx------ dollplayer 4.0K 07 Jan 20:49 ibus/
drwxr-xr-x dollplayer 4.0K 20 Feb 22:18 keepassxc/
drwxr-xr-x dollplayer 4.0K 24 Feb 23:31 kitty/
drwxr-xr-x dollplayer 4.0K 26 Feb 12:45 lazygit/
drwxr-xr-x dollplayer 4.0K 18 Jan 15:32 libreoffice/
drwxr-xr-x dollplayer 4.0K 18 Jan 17:05 libvirt/
drwxr-xr-x dollplayer 4.0K 24 Feb 23:34 lsd/
drwx------ dollplayer 4.0K 05 Jan 15:09 Mousepad/
drwx------ dollplayer 4.0K 26 Feb 18:21 mozc/
drwx------ dollplayer 4.0K 26 Feb 18:37 Notable/
drwxr-xr-x dollplayer 4.0K 25 Feb 13:26 nvim/
drwxr-xr-x dollplayer 4.0K 25 Feb 00:02 picom/
drwx------ dollplayer 4.0K 05 Jan 12:37 pulse/
drwxr-xr-x dollplayer 4.0K 25 Feb 15:05 qtile/
drwxr-xr-x dollplayer 4.0K 25 Feb 00:33 ranger/
drwx------ dollplayer 4.0K 05 Jan 15:21 ristretto/
drwxr-xr-x dollplayer 4.0K 25 Feb 14:02 starship/
drwx------ dollplayer 4.0K 05 Jan 14:45 Thunar/
drwxr-xr-x dollplayer 4.0K 26 Jan 15:11 vlc/
drwxr-xr-x dollplayer 4.0K 25 Feb 09:31 wezterm/
drwxr-xr-x dollplayer 4.0K 25 Feb 14:53 xfce4/
drwxr-xr-x dollplayer 4.0K 05 Jan 12:41 yay/
drwxr-xr-x dollplayer 4.0K 25 Feb 09:45 yazi/
.rw-r--r-- dollplayer 290B 05 Jan 12:38 EOS-greeter.conf
.rw------- dollplayer 633B 17 Jan 23:12 mimeapps.list
.rw-r--r-- dollplayer 108B 25 Feb 20:03 pavucontrol.ini
.rw-r--r-- dollplayer 647B 21 Feb 15:55 QtProject.conf
.rw-r--r-- dollplayer   1B 05 Jan 12:38 reflector-simple-free-params.txt
.rw------- dollplayer 633B 05 Jan 12:37 user-dirs.dirs
.rw-r--r-- dollplayer   5B 05 Jan 12:37 user-dirs.locale

この中で、現在の管理対象は下記。 [1]
当然、.gitignoreでコントロールしているが割愛。

アプリケーション ローカル管理 リモート管理 ブランチ管理 備考
_dotfiles_etc/ Yes Yes, hidden No ~/.gitconfigはローカル管理のみ
alacritty/ Yes Yes, hidden No
bat/ Yes Yes, hidden No
cmus/ Yes Yes, hidden No 私が作成したテーマのみ管理
conky/ PEND PEND PEND 公開したいテーマもあるので、どう管理するかを模索中
fastfetch/ Yes Yes, hidden No
fish/ Yes Yes, hidden? No 将来的にはpublic?
ghostty/ Yes No No 現在試用中
kitty/ Yes Yes, hidden No
lazygit/ Yes Yes, hidden No 予定(未定)
lsd/ Yes Yes, hidden No
nvim/ Yes Yes, public No 絶賛公開中
picom/ Yes Yes, hidden No
qtile/ Yes Yes, hidden Yes 将来的にはpublic
ranger/ Yes Yes, hidden No
starship/ Yes Yes, hidden Yes
wezterm/ Yes Yes, hidden No
xfce4/ Yes Yes, hidden No Xfce4-terminalだけ必要だが、一応全てを対象
yazi/ Yes Yes, hidden No

ついでに言うと、以前述べた通り、いわゆる「Linux rice」を稚拙ながらも公開したいと考えている。
Qtileと自作のConkyテーマがメインになると思う。
その時の扱いと、純粋な「バックアップ」との間で、如何に管理するかで悩んでいた、ともいえる。
今のところ、Riceはサブモジュール管理になるのかなぁ、と思う。

脚注
  1. 例えばBraveブラウザは、このブラウザの機能で拡張機能などを共有できるので、ここで管理していない。 ↩︎

dollplayer2501dollplayer2501

【閉じます】当面の管理要件が固まりました

先の投稿までの繰り返しになるが。

  1. 個々のアプリケーション単位でドットファイルをリポジトリ管理
    1. 色を変更する程度はブランチを切る(Qtileなど)
    2. 仕組みそのものを修正する場合、mainで
    3. 競合には注意(スキル不足のため、対応できない)
  2. リポジトリの公開・非公開は、基本的には非公開で
  3. これらとは別に、ローカルでもSyncthingで管理(現在はFishシェルの関数化済み)

いわゆるLinux Riceとして公開する場合、サブモジュールなどで管理、本体はスクショと説明文になる。

このスクラップは4ヶ月前にクローズされました