「ドットファイル」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (序文を英語版から訳出) |
(→ユーザーリポジトリ: 翻訳を修正) |
||
(2人の利用者による、間の11版が非表示) | |||
2行目: | 2行目: | ||
[[Category:設定管理]] |
[[Category:設定管理]] |
||
[[en:Dotfiles]] |
[[en:Dotfiles]] |
||
+ | [[es:Dotfiles]] |
||
[[pt:Dotfiles]] |
[[pt:Dotfiles]] |
||
+ | [[zh-hans:Dotfiles]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|XDG Base Directory サポート}} |
{{Related|XDG Base Directory サポート}} |
||
10行目: | 12行目: | ||
ユーザー固有のアプリケーション設定は、伝統的に [[Wikipedia:dotfile|ドットファイル]](ファイル名がドットで始まるファイル) に保存されています。変更を追跡し、さまざまなホスト間でドットファイルを同期するために、[[Git]] などの [[バージョン管理システム]] でドットファイルを管理することは一般的な方法です。ドットファイルを管理するには、さまざまな方法があります(例えば、ホームディレクトリでドットファイルを直接追跡する、サブディレクトリに保存する、[[シェル]]スクリプト や[[#他のツール|専用ツール]] でファイルをシンボリックリンク/コピー/生成するなど)。ドットファイルの管理方法とは別に、この記事には、[[#リポジトリ|ドットファイルのリボジトリのリスト]] も含まれています。 |
ユーザー固有のアプリケーション設定は、伝統的に [[Wikipedia:dotfile|ドットファイル]](ファイル名がドットで始まるファイル) に保存されています。変更を追跡し、さまざまなホスト間でドットファイルを同期するために、[[Git]] などの [[バージョン管理システム]] でドットファイルを管理することは一般的な方法です。ドットファイルを管理するには、さまざまな方法があります(例えば、ホームディレクトリでドットファイルを直接追跡する、サブディレクトリに保存する、[[シェル]]スクリプト や[[#他のツール|専用ツール]] でファイルをシンボリックリンク/コピー/生成するなど)。ドットファイルの管理方法とは別に、この記事には、[[#リポジトリ|ドットファイルのリボジトリのリスト]] も含まれています。 |
||
+ | == ドットファイルを Git で直接追跡する == |
||
− | == バージョン管理 == |
||
+ | ドットファイルを直接 Git で追跡することの利点は、[[Git]] だけで済み、シンボリックリンクを必要としないことです。デメリットは、[[#ホスト固有の設定|ホスト固有の設定]] では一般的に複数の [[Git#Branching|branches]] に変更をマージする必要があるということです。 |
||
− | [[Git]] などのバージョン管理ソフトウェアでドットファイルを管理することで、変更を記録したり他のユーザーとファイルを共有したり、複数のホスト間でドットファイルを同期することができます。 |
||
+ | このアプローチを実現する最も簡単な方法は、[[Git]] リポジトリをホームディレクトリで直接初期化し、デフォルトで {{man|5|gitignore}} パターンの {{ic|*}} を使用してすべてのファイルを無視することです。ただし、この方法には 2 つの欠点があります。ホームディレクトリに他の Git リポジトリがある場合は混乱する可能性があります (たとえば、リポジトリの初期化を忘れた場合、突然 dotfile リポジトリを操作することになります) また、ディレクトリ内のどのファイルが簡単に確認できなくなります。現在のディレクトリは追跡されません (無視されるため) |
||
− | === gitignore を使う === |
||
+ | これらの欠点がない別の方法として、[https://news.ycombinator.com/item?id=11071754 Ask Hacker News] で人気のある "bare repository and alias method" があります。これは、3つのコマンドでセットアップすることができます。 |
||
− | ホームディレクトリに [https://git-scm.com/blog/2010/04/11/environment.html git ディレクトリ] を作成することで変更を直接記録することができます。インデックスに追加するファイルは {{man|1|git-add}} で選択することを推奨します。 |
||
+ | $ git init --bare ~/.dotfiles |
||
− | 変更が追跡されないファイルが生じないように ({{man|1|git-clean}} で削除されます)、まずは {{man|5|gitignore}} で全てのファイルを除外してください: |
||
+ | $ alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' |
||
+ | $ config config status.showUntrackedFiles no |
||
+ | このドットファイルを使って新しいシステムに複製できます: |
||
− | {{hc|~/.git/info/exclude| |
||
− | *}} |
||
+ | $ git clone --bare <git-repo-url> $HOME/.dotfiles |
||
− | それから {{ic|git add -f}} で追跡したいファイルだけを追加します: |
||
+ | $ alias config='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"' |
||
+ | $ config checkout |
||
+ | $ config config --local status.showUntrackedFiles no |
||
+ | * 上書きされる可能性のあるいくつかのストック設定がすでにある場合は、次のようなエラーが発生します: |
||
− | $ git add -f ~/.config/* |
||
+ | :{{bc|<nowiki> |
||
+ | $ config checkout |
||
+ | error: The following untracked working tree files would be overwritten by checkout: |
||
+ | .bashrc |
||
+ | .gitignore |
||
+ | Please move or remove them before you can switch branches. |
||
+ | Aborting |
||
+ | </nowiki>}} |
||
+ | :既存のファイルを書き換える {{ic|$ config checkout -f}} を使用することもできます。または、より安全な方法として、次のスクリプトを使用してすべてのファイルのバックアップを取得し、{{ic|checkout}} を使用することもできます: |
||
− | 最後に変更を {{man|1|git-commit}} してください: |
||
+ | :{{bc|<nowiki> |
||
+ | mkdir -p .config-backup && \ |
||
+ | config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \ |
||
+ | xargs -I{} mv {} .config-backup/{} |
||
+ | </nowiki>}} |
||
+ | その後、作成した [[エイリアス]] でドットファイルを管理することができます。もし [[Bash]] を使っていてこのエイリアスを bash 補完したい場合は、{{AUR|bash-complete-alias}} をインストールして、エイリアスと次の行を {{ic|~/.bashrc}} に追加してください。 |
||
− | $ git commit -a |
||
+ | $ complete -F _complete_alias config |
||
− | === 他のツール === |
||
− | * {{App|dotbot|ドットファイルリポジトリの git サブモジュールとしてインストールすることができるミニマルなドットファイルマネージャ。|https://github.com/anishathalye/dotbot}} |
||
− | * {{App|dotdrop|様々なホストのドットファイルを管理するツール。|https://github.com/deadc0de6/dotdrop|{{AUR|dotdrop}}}} |
||
− | * {{App|dotfiles|$HOME のドットファイルのシンボリックリンクを簡単に管理することができるツール。|https://github.com/jbernard/dotfiles|{{AUR|dotfiles}}}} |
||
− | * {{App|dotgit|ドットファイルを管理するための包括的なソリューション。|http://github.com/Cube777/dotgit|{{AUR|dotgit}}}} |
||
− | * {{App|dots|計画的にドットファイルを管理するためのポータブルツール。|https://github.com/EvanPurkhiser/dots|{{AUR|dots-manager}}}} |
||
− | * {{App|[[etckeeper]]|システム全体の設定が存在する {{ic|/etc}} をバージョン管理します。バージョン管理ソフトウェアが無視するパーミッションやモードを記録することで動作します。様々な SCM システムをバックエンドとして使用可能。フックを使用することでシステムがアップグレードされる前にリポジトリに変更を自動的にコミットできます。|http://etckeeper.branchable.com/|{{Pkg|etckeeper}}}} |
||
− | * {{App|GNU Stow|リポジトリのドットファイルから {{ic|$HOME}} ツリーにシンボリックリンクを作成します。詳しくは [http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html] を見てください。|https://www.gnu.org/software/stow/|{{Pkg|stow}}}} |
||
− | * {{App|homeshick|[[Bash]] で書かれた git ドットファイル同期ツール。|https://github.com/andsens/homeshick|{{AUR|homeshick-git}}}} |
||
− | * {{App|mackup|アプリケーションの設定を同期する小さな Python ユーティリティ。|https://github.com/lra/mackup|{{AUR|mackup}}}} |
||
− | * {{App|Pearl|ドットファイルやプラグイン、プログラムあるいは git から入手できるあらゆるコードのパッケージマネージャ。システム間でパッケージを簡単に共有・同期することができ、すぐに使える状態にできます。|https://github.com/pearl-core/pearl|{{AUR|pearl-git}}}} |
||
− | * {{App|rcm|リポジトリから $HOME ツリーにドットファイルのシンボリックリンクを作成できます。|https://github.com/thoughtbot/rcm|{{AUR|rcm}}}} |
||
− | * {{App|vcsh|全てのドットファイルをひとつのリポジトリで管理するのではなく、様々なモジュール (Emacs の設定や zsh の設定など) を別々のリポジトリに分割することで管理を分けることができます。git でしか動作しません。|https://github.com/RichiH/vcsh|{{AUR|vcsh}}}} |
||
− | * {{App|yadm|ひとつの Git リポジトリを使って複数のシステムでファイルを管理します。特定の OS やホストで別のファイルを使うようにすることができます。機密情報を暗号化することでリポジトリに安全に保存することが可能。|https://github.com/TheLocehiliosan/yadm|{{AUR|yadm-git}}}} |
||
+ | bash で補完させるもう一つの方法は、{{ic|~/.bashrc}} に以下を追加することです。([https://askubuntu.com/a/642778] から引用) |
||
− | === 複数のマシンでドットファイルを管理する === |
||
+ | source /usr/share/bash-completion/completions/git |
||
− | 共有する設定をマスターブランチで管理して、マシンごとのブランチを作成することで、カスタマイズを加えながら様々なマシンのドットファイルを管理するという方法があります。特定のマシンの設定は専用のブランチにコミットし、共通設定はマスターブランチに追加します。そしてマスターを更新したら各マシンのブランチをリベースします。 |
||
+ | __git_complete config __git_main |
||
+ | {{Tip|機密情報を誤ってコミットしないようにするには、[https://wiki.archlinux.org/title/Git#Filtering_confidential_information Git#Filtering confidential information] を参照してください。}} |
||
− | また、特定のマシンの設定を特殊なコメントブロックに記述して [https://pypi.python.org/pypi/mir.qualia/ qualia] を使って自動的にアンコメントさせるという方法もあります。この方法は手間が少ない上にマージによる衝突が発生しません。 |
||
+ | == ホスト固有の設定 == |
||
− | === 機密情報 === |
||
+ | 様々なマシンで dotfiles を同期させる際によくある問題が、ホスト固有の設定です。 |
||
− | ときとして、ソフトウェアはパスワードを平文で設定ファイルに保存することがあります。そのような場合、git clean フィルターを利用することで機密情報を間違ってコミットする危険を減らすことができます。例えば、以下の .gitattributes ファイルは “some-dotfile” ファイルにフィルターを適用します: |
||
+ | [[Git]] では、すべての共有設定を master ブランチで管理し、個々のマシンにはマシン固有のブランチをチェックアウトすることでこれを解決できます。ホスト固有の設定はマシン固有のブランチにコミットすることができます。共有設定が master ブランチで変更された場合、マシンごとのブランチは更新された master の上にリベースされる必要があります。 |
||
− | {{hc|.gitattributes|<nowiki> |
||
− | some-dotfile filter=remove-pass |
||
− | </nowiki>}} |
||
+ | [[コマンドラインシェル#設定ファイル|シェル設定ファイル]] のような設定スクリプトでは、条件付きロジックを使用することができます。例えば、[[Bash]] スクリプト (すなわち {{ic|.bashrc}}) は、マシン名 (またはタイプ、カスタム変数など) に応じて異なる設定を適用することができます。 |
||
− | “some-dotfile” ファイルが git にチェックインされた場合、git は “remove-pass” フィルターを実行します。フィルターは {{ic|.git/config}} に以下のように定義してください: |
||
+ | if <nowiki>[[ "$(hostname)" == "archlaptop" ]];</nowiki> then |
||
− | {{hc|.git/config|<nowiki> |
||
+ | # laptop specific commands here |
||
− | [filter "remove-pass"] |
||
+ | else |
||
− | clean = "sed -e 's/^password=.*/#password=TODO/'" |
||
+ | # desktop or server machine commands |
||
− | </nowiki>}} |
||
+ | fi |
||
+ | |||
+ | 同様のことは、[[.Xresources]] でも実現できます。[https://jnrowe.github.io/articles/tips/Sharing_Xresources_between_systems.html] |
||
+ | |||
+ | Git ブランチのリベースが面倒だと感じる場合は、''ファイルのグループ化'' をサポートする [[#Tools|ツール]] や、さらに柔軟性を求めるなら ''加工処理'' を行うツールを使用するとよいでしょう。 |
||
+ | |||
+ | == ツール == |
||
+ | |||
+ | ;ファイルのグループ化 |
||
+ | :設定ファイルを設定グループ (プロファイルまたはパッケージとも呼ばれる) にグループ化する方法です。 |
||
+ | 処理 |
||
+ | :ホストによってカスタマイズできるように、設定ファイルを処理するツールもあります。 |
||
+ | |||
+ | {| class="wikitable sortable" style="text-align: center;" |
||
+ | ! 名前 !! パッケージ !! 言語 !! ファイルのグループ化 !! 処理 |
||
+ | |- |
||
+ | ! [https://github.com/anishathalye/dotbot dotbot] |
||
+ | | {{Pkg|chezmoi}} || Python || 設定ファイル || No |
||
+ | |- |
||
+ | ! [https://github.com/twpayne/chezmoi chezmoi] |
||
+ | | {{AUR|dotbot}} || Go || ディレクトリベース || Go テンプレート |
||
+ | |- |
||
+ | ! [https://github.com/kesslern/dot-templater dot-templater] |
||
+ | | {{AUR|dot-templater-git}} || Rust || ディレクトリベース || カスタムシンタックス |
||
+ | |- |
||
+ | ! [https://github.com/oknozor/toml-bombadil toml-bombadil] |
||
+ | | {{Pkg|toml-bombadil}} || Rust || 設定ファイル || tera |
||
+ | |- |
||
+ | ! [https://deadc0de.re/dotdrop/ dotdrop] |
||
+ | | {{AUR|dotdrop}} || Python || 設定ファイル || Jinja2 |
||
+ | |- |
||
+ | ! [https://github.com/jbernard/dotfiles dotfiles] |
||
+ | | {{AUR|dotfiles}} || Python || {{Grey|[https://github.com/jbernard/dotfiles/pull/24 No]}} || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/EvanPurkhiser/dots Dots] |
||
+ | | {{AUR|dots-manager}} || Python || ディレクトリベース || カスタム追加ポイント |
||
+ | |- |
||
+ | ! [https://github.com/SuperCuber/dotter dotter] |
||
+ | | {{AUR|dotter-rs}} || Rust || 設定ファイル || Handlebars |
||
+ | |- |
||
+ | ! [https://dt.cli.rs dt-cli] |
||
+ | | {{AUR|dt-cli}} || Rust || 設定ファイル || Handlebars |
||
+ | |- |
||
+ | ! [https://www.gnu.org/software/stow/ GNU Stow] |
||
+ | | {{Pkg|stow}} || Perl || ディレクトリベース [http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html] || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/lra/mackup Mackup] |
||
+ | | {{AUR|mackup}} || Python || アプリケーションごとに自動 || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/darkfeline/mir.qualia mir.qualia] |
||
+ | | {{AUR|mir.qualia}} || Python || {{Grey|No}} || カスタムブロック |
||
+ | |- |
||
+ | ! [https://github.com/thoughtbot/rcm rcm] |
||
+ | | {{AUR|rcm}} || Perl || ディレクトリベース (ホストまたはタグによる) || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/sebastiancarlos/yas-bdsm yas-bdsm] |
||
+ | | {{-}} || Shell || ディレクトリベース || {{Grey|No}} |
||
+ | |} |
||
+ | |||
+ | === Git を wrapping するツール === |
||
+ | |||
+ | [[Git]] に不安がある場合は、バージョン管理システムを (多かれ少なかれ) 抽象化するこれらのツールのいずれかを使用することをお勧めします。 |
||
+ | |||
+ | {| class="wikitable sortable" style="text-align:center;" |
||
+ | ! 名前 !! パッケージ !! 言語 !! ファイルのグループ化 !! 処理 |
||
+ | |- |
||
+ | ! [https://github.com/kazhala/dotbare dotbare] |
||
+ | | {{AUR|dotbare}} || Shell ({{Pkg|fzf}}) || リポジトリ的 || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/kobus-v-schoor/dotgit dotgit] |
||
+ | | {{AUR|dotgit}} || Python || ファイル名ベース || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/andsens/homeshick homeshick] |
||
+ | | {{AUR|homeshick-git}} || Bash || リポジトリ的 || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/technicalpickles/homesick homesick] |
||
+ | | {{-}} || Ruby || リポジトリ的 || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/pearl-core/pearl Pearl] |
||
+ | | {{AUR|pearl-git}} || Python || リポジトリ的 || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://github.com/RichiH/vcsh vcsh] |
||
+ | | {{Pkg|vcsh}} || Shell || リポジトリ的 || {{Grey|No}} |
||
+ | |- |
||
+ | ! [https://yadm.io yadm]<sup>(1)</sup> |
||
+ | | {{Pkg|yadm}} || Bash || ファイル名ベース<br>(by class/OS/distro/hostname/user)[https://yadm.io/docs/alternates] ||組み込みのテンプレート /Jinja2/ESH [https://yadm.io/docs/templates]<br>(オプション) |
||
+ | |- |
||
+ | ! [https://github.com/justone/dotfiles dfm] |
||
+ | | {{AUR|dfm}} || Perl || リポジトリ的 || {{Grey|No}} |
||
+ | |} |
||
+ | |||
+ | # [[GPG]] または OpenSS による機密ファイルの暗号化をサポートします。 [https://yadm.io/docs/encryption] |
||
+ | |||
+ | == ユーザーリポジトリ == |
||
+ | {{Note|このテーブルは、ドットファイルの参照/例として使用して下さい。ドットファイルをテーブルに追加する場合は、それらがクリーンでコメントされていて、最新の状態に保たれているかを確認してください。}} |
||
− | == リポジトリ == |
||
+ | {{Warning|これらのドットファイルは Arch Linux スタッフによって検証されていないため、自己責任で使用してください。}} |
||
{| class="wikitable sortable" |
{| class="wikitable sortable" |
||
168行目: | 268行目: | ||
| zsh || dwm || vim || rxvt-unicode || tmux || ncmpcpp || custom || mutt || irssi |
| zsh || dwm || vim || rxvt-unicode || tmux || ncmpcpp || custom || mutt || irssi |
||
|- |
|- |
||
− | ! [https://github.com/ |
+ | ! [https://github.com/whitelynx/dotfiles whitelynx] |
+ | | fish || i3 || neovim || kitty || || || i3pystatus || || |
||
− | | bash || herbstluftwm ||vim || rxvt-unicode || screen ||mpd ([https://github.com/Wintervenom/Scripts/tree/master/audio/mpd mpc-utils]) || [https://github.com/Wintervenom/Scripts/blob/master/wm/herbstluftwm/hlwm-dzen2 hlwm-dzen2] || mutt || weechat |
||
|- |
|- |
||
− | ! [https:// |
+ | ! [https://git.sr.ht/~whynothugo/dotfiles whynothugo] |
− | | |
+ | | zsh || sway || neovim || alacritty || || mpv || waybar, top || neomutt || |
|- |
|- |
||
− | ! [https://github.com/ |
+ | ! [https://github.com/wryonik/dotfiles wryonik] |
+ | | zsh || i3-gaps-rounded || vim || terminator || || cmus || htop, i3blocks, gotop || || |
||
− | | [https://github.com/zendeavor/config-stuff/tree/sandbag/zsh zsh] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/config i3] || [https://github.com/zendeavor/dotvim/tree/sandbag vim] || [https://github.com/zendeavor/config-stuff/blob/sandbag/X11/Xresources#L14 rxvt-unicode] || [https://github.com/zendeavor/config-stuff/tree/sandbag/tmux tmux] || [https://github.com/zendeavor/config-stuff/blob/sandbag/ncmpcpp/config ncmpcpp] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/i3status.conf i3status] || || [https://github.com/zendeavor/config-stuff/tree/kiwi/weechat weechat] |
||
|} |
|} |
2024年2月10日 (土) 21:17時点における最新版
ユーザー固有のアプリケーション設定は、伝統的に ドットファイル(ファイル名がドットで始まるファイル) に保存されています。変更を追跡し、さまざまなホスト間でドットファイルを同期するために、Git などの バージョン管理システム でドットファイルを管理することは一般的な方法です。ドットファイルを管理するには、さまざまな方法があります(例えば、ホームディレクトリでドットファイルを直接追跡する、サブディレクトリに保存する、シェルスクリプト や専用ツール でファイルをシンボリックリンク/コピー/生成するなど)。ドットファイルの管理方法とは別に、この記事には、ドットファイルのリボジトリのリスト も含まれています。
ドットファイルを Git で直接追跡する
ドットファイルを直接 Git で追跡することの利点は、Git だけで済み、シンボリックリンクを必要としないことです。デメリットは、ホスト固有の設定 では一般的に複数の branches に変更をマージする必要があるということです。
このアプローチを実現する最も簡単な方法は、Git リポジトリをホームディレクトリで直接初期化し、デフォルトで gitignore(5) パターンの *
を使用してすべてのファイルを無視することです。ただし、この方法には 2 つの欠点があります。ホームディレクトリに他の Git リポジトリがある場合は混乱する可能性があります (たとえば、リポジトリの初期化を忘れた場合、突然 dotfile リポジトリを操作することになります) また、ディレクトリ内のどのファイルが簡単に確認できなくなります。現在のディレクトリは追跡されません (無視されるため)
これらの欠点がない別の方法として、Ask Hacker News で人気のある "bare repository and alias method" があります。これは、3つのコマンドでセットアップすることができます。
$ git init --bare ~/.dotfiles $ alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' $ config config status.showUntrackedFiles no
このドットファイルを使って新しいシステムに複製できます:
$ git clone --bare <git-repo-url> $HOME/.dotfiles $ alias config='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"' $ config checkout $ config config --local status.showUntrackedFiles no
- 上書きされる可能性のあるいくつかのストック設定がすでにある場合は、次のようなエラーが発生します:
$ config checkout error: The following untracked working tree files would be overwritten by checkout: .bashrc .gitignore Please move or remove them before you can switch branches. Aborting
- 既存のファイルを書き換える
$ config checkout -f
を使用することもできます。または、より安全な方法として、次のスクリプトを使用してすべてのファイルのバックアップを取得し、checkout
を使用することもできます: mkdir -p .config-backup && \ config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \ xargs -I{} mv {} .config-backup/{}
その後、作成した エイリアス でドットファイルを管理することができます。もし Bash を使っていてこのエイリアスを bash 補完したい場合は、bash-complete-aliasAUR をインストールして、エイリアスと次の行を ~/.bashrc
に追加してください。
$ complete -F _complete_alias config
bash で補完させるもう一つの方法は、~/.bashrc
に以下を追加することです。([1] から引用)
source /usr/share/bash-completion/completions/git __git_complete config __git_main
ホスト固有の設定
様々なマシンで dotfiles を同期させる際によくある問題が、ホスト固有の設定です。
Git では、すべての共有設定を master ブランチで管理し、個々のマシンにはマシン固有のブランチをチェックアウトすることでこれを解決できます。ホスト固有の設定はマシン固有のブランチにコミットすることができます。共有設定が master ブランチで変更された場合、マシンごとのブランチは更新された master の上にリベースされる必要があります。
シェル設定ファイル のような設定スクリプトでは、条件付きロジックを使用することができます。例えば、Bash スクリプト (すなわち .bashrc
) は、マシン名 (またはタイプ、カスタム変数など) に応じて異なる設定を適用することができます。
if [[ "$(hostname)" == "archlaptop" ]]; then # laptop specific commands here else # desktop or server machine commands fi
同様のことは、.Xresources でも実現できます。[2]
Git ブランチのリベースが面倒だと感じる場合は、ファイルのグループ化 をサポートする ツール や、さらに柔軟性を求めるなら 加工処理 を行うツールを使用するとよいでしょう。
ツール
- ファイルのグループ化
- 設定ファイルを設定グループ (プロファイルまたはパッケージとも呼ばれる) にグループ化する方法です。
処理
- ホストによってカスタマイズできるように、設定ファイルを処理するツールもあります。
名前 | パッケージ | 言語 | ファイルのグループ化 | 処理 |
---|---|---|---|---|
dotbot | chezmoi | Python | 設定ファイル | No |
chezmoi | dotbotAUR | Go | ディレクトリベース | Go テンプレート |
dot-templater | dot-templater-gitAUR | Rust | ディレクトリベース | カスタムシンタックス |
toml-bombadil | toml-bombadil | Rust | 設定ファイル | tera |
dotdrop | dotdropAUR | Python | 設定ファイル | Jinja2 |
dotfiles | dotfilesAUR | Python | No | No |
Dots | dots-managerAUR | Python | ディレクトリベース | カスタム追加ポイント |
dotter | dotter-rsAUR | Rust | 設定ファイル | Handlebars |
dt-cli | dt-cliAUR | Rust | 設定ファイル | Handlebars |
GNU Stow | stow | Perl | ディレクトリベース [3] | No |
Mackup | mackupAUR | Python | アプリケーションごとに自動 | No |
mir.qualia | mir.qualiaAUR | Python | No | カスタムブロック |
rcm | rcmAUR | Perl | ディレクトリベース (ホストまたはタグによる) | No |
yas-bdsm | – | Shell | ディレクトリベース | No |
Git を wrapping するツール
Git に不安がある場合は、バージョン管理システムを (多かれ少なかれ) 抽象化するこれらのツールのいずれかを使用することをお勧めします。
名前 | パッケージ | 言語 | ファイルのグループ化 | 処理 |
---|---|---|---|---|
dotbare | dotbareAUR | Shell (fzf) | リポジトリ的 | No |
dotgit | dotgitAUR | Python | ファイル名ベース | No |
homeshick | homeshick-gitAUR | Bash | リポジトリ的 | No |
homesick | – | Ruby | リポジトリ的 | No |
Pearl | pearl-gitAUR | Python | リポジトリ的 | No |
vcsh | vcsh | Shell | リポジトリ的 | No |
yadm(1) | yadm | Bash | ファイル名ベース (by class/OS/distro/hostname/user)[4] |
組み込みのテンプレート /Jinja2/ESH [5] (オプション) |
dfm | dfmAUR | Perl | リポジトリ的 | No |
ユーザーリポジトリ
作者 | シェル | WM / DE | エディタ | ターミナル | マルチプレクサ | オーディオ | モニター | メール | IRC |
---|---|---|---|---|---|---|---|---|---|
Ambrevar | zsh | awesome | emacs | rxvt-unicode | cmus | htop/vicious | mutt | ||
awal | fish | i3 | vim | sakura | tmux | i3status | The Lounge | ||
ayekat | zsh | karuiwm | vim | rxvt-unicode | tmux | ncmpcpp/mpd | karuibar | mutt | irssi |
bamos | zsh | i3/xmonad | vim/emacs | rxvt-unicode | tmux | mpv/cmus | conky/xmobar | mutt | ERC |
brisbin33 | zsh | xmonad | vim | rxvt-unicode | screen | dzen | mutt | irssi | |
cinelli | zsh | dwm | vim | termite-git | pianobar | htop | mutt-kz | weechat | |
dillebidum | zsh/mksh | dwm/i3 | vim/vis | st | tmux/dvtm | ncmpcpp/mpv | htop/i3blocks | mutt | ii/irssi |
Earnestly | zsh | i3/orbment | vim/emacs | termite | tmux | mpd | conky | mutt | weechat |
ErikBjare | zsh | xmonad/xfce4 | vim | terminator | tmux | xfce4-panel | weechat | ||
falconindy | bash | i3 | vim | rxvt-unicode | ncmpcpp | conky | mutt | ||
graysky | zsh | xfce4 | vim | terminal | ncmpcpp | custom | thunderbird | ||
hugdru | zsh | awesome | neovim | rxvt-unicode | tmux | thunderbird | weechat | ||
insanum | bash | herbstluftwm | vim | evilvte | tmux | dzen | mutt-kz | ||
izmntuk | zsh | xfce4 | vim | rxvt-unicode/yaft | tmux | cmus | xfce4-panel | irssi | |
jasonwryan | bash/zsh | dwm | vim | rxvt-unicode | tmux | ncmpcpp | custom | mutt | irrsi |
jdevlieghere | zsh | xmonad | vim | terminal | tmux | htop | mutt | weechat | |
jelly | zsh | i3 | vim | termite | tmux | ncmpcpp | mutt-kz-git | weechat | |
maximbaz | zsh | i3-gaps | neovim | alacritty | tmux | py3status | thunderbird | ||
meskarune | bash | herbstluftwm | vim | rxvt-unicode | screen | conky | weechat | ||
neersighted | zsh | i3 | vim | rxvt-unicode | tmux | ncmpcpp | htop | mutt | irssi |
OK100 | bash | dwm | vim | rxvt-unicode | cmus | conky, dzen | mutt | weechat | |
pid1 | zsh | dwm | neovim | st | tmux | custom | mutt | weechat | |
polyzen | zsh | i3 | vim | termite | tmux | i3status | weechat | ||
sistematico | zsh/fish/bash | i3 Gaps | vim/nano | termite | tmux | ncmpcpp | polybar | mutt | weechat |
swalladge | zsh/bash | i3 | neovim/vim | termite | tmux | cmus | i3pystatus | mutt | |
thiagowfx | bash/zsh | i3 | vim/emacs | rxvt-unicode | ncmpcpp | i3blocks | |||
unexist | zsh | subtle | vim | rxvt-unicode | ncmpcpp | mutt | irssi | ||
vodik | zsh | xmonad | vim | termite-git | tmux | ncmpcpp | custom | mutt | weechat |
w0ng | zsh | dwm | vim | rxvt-unicode | tmux | ncmpcpp | custom | mutt | irssi |
whitelynx | fish | i3 | neovim | kitty | i3pystatus | ||||
whynothugo | zsh | sway | neovim | alacritty | mpv | waybar, top | neomutt | ||
wryonik | zsh | i3-gaps-rounded | vim | terminator | cmus | htop, i3blocks, gotop |
参照
- gregswiki:DotFiles
- XMonad Config Archive
- dotshare.it
- dotfiles.github.io
- terminal.sexy - ターミナルのカラースキームデザイナー