🪟

WindowsとUbuntu系統で動作するDotfilesを作って、Windows 11 ProのHyper-Vで試す記事

に公開

大学三年生、後半です。つまり、パソコンのSSDが飛ぶ時期に近づいてまいりました。起動時のロゴが五回くらい表示される問題や休止モードが勝手に解除される問題などが出てきましたがまだ動きます。かろうじて動いている感じです。
そんなわけで正常に動くうちにWindows、Ubuntu系統で動くdotfilesのインストーラーを作成します。
https://github.com/c0b23092db/dotfiles

各OSの差異

最初に、Windowsのイかれた仕様に対応できるようにします。
まずは設定ファイルです。
MacやLinuxはHomeディレクトリあるいはconfigディレクトリに設置するだけでいいのですが、Windowsは頭の悪いことに四つのディレクトリに分かれます。

  • Homeディレクトリ
  • configディレクトリ
  • Localディレクトリ
  • Roamingディレクトリ

次に使用できるソフトウェアの違いを考えなければなりません。
普段使っているソフトはLinuxにも対応しているソフト(GodotやKrita)や代用が可能なソフトがほとんどですが、Clip Studioやゆっくりムービーメーカー4などLinuxには配布をしていない(もしくはWineでの動作を保証しない)Windows専用のソフトをどうするかです。
ただ、この点はLinuxに移行してから考えましょう。先はまだ長い。

それ以外にはパッケージインストーラーの違い(Windowsではwinget、Linuxではapt、それ以外にも!)など・・・様々な差異はありますが、ひとまず一番大きな問題である「スクリプト言語の違い」を解決しないことに変わりありません。

なにが必要?

Windows、Ubuntuという事で、PowershellとBashで動作する二種類のスクリプトを用意しなければなりません。
また、OS別に用意された各ソフトの設定ファイル、各OSの環境変数、エイリアス設定などの設定ファイルが存在するため、個別にディレクトリを用意する必要があります。
それを考慮して、このような配置になりました。

C:.
├─Config
│  ├─.config
│  ├─.Portable
│  ├─.Ubuntu
│  └─.Windows
│  └─設定ファイル
├─Package
│  └─パッケージ名が書かれたファイル
├─Resource
│  ├─github
│  └─Githubに乗せないファイル
└─Setup
    ├─Bash
    ├─Command
    │  └─Windows
    ├─Distribution
    └─Python
        ├─fail
        └─lib

配置を変えるとしても設定ファイルはPythonに記載された設定を変えるだけでいいので、ひとまずはこれで進めます。最終的に設定ファイルをまとめる可能性はあります。

処理の手法

Linux、MacOSではBashを使用しますが、WindowsはPowershellを使用しなければなりません。シェルとしてはPowershellのほうが使いやすいのですが、統一できないのが欠点。そのため、途中からの処理はPythonで行うようにします。
ドットファイルのセットアップには以下の要素を用意します。

  • 設定ファイルのコピーもしくはシンボリックリンク
  • 必要なパッケージのインストール
  • 壁紙やアイコンなどの配置

処理の優先度

LinuxはBashでの処理、WindowsはPowershellとPythonでの処理となっています。

Pythonを介さないBashでの処理は以下のようになっています。

  • ディストリビューションの確認
  • スクリプトの起動
  • 一時パスの設定
  • 事前のLinuxコマンドの実行
  • 設定ファイルのコピー / シンボリックリンクの作成
  • パッケージのインストール
  • パッケージを介さない独自のインストール
  • テキストファイルに記載されたコマンドの実行
  • 事後のLinuxコマンドの実行

Windowsの場合はPythonに依存した処理となります。

  • スクリプトの起動
  • スクリプトファイルのコマンド実行
  • Pythonインストーラーの起動
    • パッケージマネージャーによるCSVファイルでのインストール
    • パッケージマネージャーによるTXTファイルでのインストール
    • .priority_-name-_command.txtで指定したos依存のコマンド実行
    • os依存のコマンド実行
    • .priority_command.txtで指定したコマンド実行
    • コマンド実行

実行ファイルのコードを載せないのか、だって?
Githubで見てください。ここに載せるにはあまりにも多すぎる。

Dockerで試す

まずは軽い環境で試します。
そのためにDocker Desktopを入れました。ついでにlazydockerも導入します。
https://www.docker.com/ja-jp/products/docker-desktop/
https://github.com/jesseduffield/lazydocker

今回はUbuntuのイメージをインストールして使っていきます。

docker run -it ubuntu

Ubuntuのコンテナに入ると/に入るのでcd ~もしくはcd $HOMEと打ってホームディレクトリに移動します。
この時点ではセットアップファイルをGithubにあげてないので、Dockerを使ってデータを移すようにします。dotfilesのディレクトリでdocker cp . コンテナ名:/root/.dotfilesと入力することでファイルの転送が可能です。
デフォルトのコンテナを使用するため、curlsudoが標準で入っていないのでこれらをインストールする処理が必要です。そのため今回の場合、install.shではなくSetup/Distribution/Docker.shを直接実行します。
ちなみに、すべての処理を実行しきるのに約20分くらいかかる。

Dockerの実行環境
GUIが必要なパッケージはインストールできませんでしたが、CUIで必要なパッケージはすべてインストールできました。

Hyper-Vで試す

Dockerで正常に動作することを確認したので、仮想環境を作って確認しましょう。今回はWindows 11のPro版で使えるHyper-Vを使います。
https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/get-started/install-hyper-v?tabs=powershell&pivots=windows

注意点として、設定>セキュリティ>セキュアブートがMicrosoft Windowsの状態でオンになっていると起動しない問題が発生する。そのため以下の画面が出た場合は、起動する前に必ずオフかMicrosoft UEFI 認証機関に変更してから起動しよう。

試したディストリビューションは以下の通り。

  • Ubuntu
  • Ubuntu Sway Remix
  • Linux Mint
  • Zorin OS
  • Pop! OS
  • NixOS
  • CachyOS

仮想環境で試していないディストリビューションは以下の通り。

  • Arch Linux
  • Bazzite

初心者なのにNixOSやArch Linuxを候補に入れている時点でどうかと思うが・・・何はともあれHyper-Vで起動することはできました。
移行先に求める要求として、Windowsと同じ開発環境が必要(miseによるRustやPython(uv)の管理、UnityやGodotの開発環境、Visual Studio Codeなど特定のGUIソフト)、LTSを変更しても壊れない環境、Steamが立ち上がりProtonが使える環境(RPG Maker製などローカルゲームしかやらないのでBottlesが動く)、計三つの要求があります(後はデスクトップの見た目を変えるとか)。
この中で印象が良かったのは、Linux Mint、Zorin OSの二つ。さて、どれを選ぼうかと悩んだのだが、ディストリビューションの違いなど分からないなら悩んでも仕方がないーーーので集合知のChatGPTでDeep Searchを使ってみたらこんな感じの回答が返ってきました。
https://chatgpt.com/s/dr_68e38ae71124819185511fd8058d94f7
KDE neonやopenSUSE Leapなど知らないものも出ていいですね。

それを踏まえると以下のOSが候補に挙がります。

  • Pop!_OS
  • Linux Mint
  • Kubuntu
  • Zorin OS
  • KDE neon

Dockerでの実行を確認したのでGithubにファイルを移して試していきましょう。
とはいっても現状はデスクトップの見た目を変更することもないのでインストールが可能かを見ていくだけです。

Linux Mintは過不足なくインストールできました。

Pop! OS、Kubuntuも問題ないです。画像撮るの忘れてました。

Ubuntuベースで作られているディストリビューションは過不足なく正常に動作することが証明できました。

WarpでDockerfileを作ってみよう

小休憩として、巷で噂のWarpを使ってみました。

Warp:Dockerfile作成

Warpを初めて使う者です。実力を図るために、このドットファイルのセットアップから推測して、Dockerfileの作成を試みてください。

Plan:
• Scan the current directory to discover dotfiles and project files to infer runtimes/tools.
• Read key files (e.g., package.json, pyproject.toml, requirements.txt, .tool-versions, .nvmrc, etc.).
• Draft a Dockerfile tailored to the findings and create it in the current directory.

I will start by listing files in the current directory recursively to identify relevant configuration files.
Discover project and dotfiles
Inspect key config files
Draft Dockerfile based on findings
Create Dockerfile
I will scan the current directory to find relevant dotfiles and project manifests so I can infer the appropriate base image and tooling. Then I’ll open the key files to extract versions and dependencies before drafting the Dockerfile.


Dockerfile を作成しました。内容は、あなたの dotfiles とセットアップスクリプトから推測し、Ubuntu ベースで apt パッケージ、ロケール/TZ、zsh、neovim、ripgrep、fzf などを導入し、その後 Setup/Distribution/Docker.sh を実行して mise、Rust、starship、yazi などをインストールする流れです。場所:
•  C:\Users\LAlter\Documents\My_Data.config_ai\Dockerfile

ビルド方法 (PowerShell):
•  docker build -t my-dotfiles:latest C:\Users\LAlter\Documents\My_Data.config_ai
•  docker run -it --rm my-dotfiles:latest

補足ポイント:
•  ベースは ubuntu:24.04 にしました。Config/.Ubuntu 配下の設定を取り込むため、Ubuntu が適しています。
•  非対話で tzdata/ロケールを設定し、LANG/LC_ALL を ja_JP.UTF-8、TZ を Asia/Tokyo にしています。
•  スクリプトの実行権を付与した上で Setup/Distribution/Docker.sh を実行して、Package/bash-apt.txt、Setup/Command の優先/共通コマンドに従って環境構築します。
•  コンテナ起動時のデフォルトシェルは zsh です。

このままビルド・起動して検証しますか?それとも、インストールする apt パッケージや実行するコマンド(例: Rust ツール周りや yazi のプラグイン導入)を調整しますか。
Warp:コンテナの作成

では、このままビルド・起動して検証してみましょう。コンテナの名前は「ai_contena」で実装してください。

I’m going to run a few terminal commands to build the Docker image, ensure no previous container with the same name is running, start the container in the background, and then run non-interactive checks inside it to verify the setup.

ビルドして起動し、検証まで自動で実行しました。コンテナ名は ai_contena にしています。

実行内容
• 画像をビルド:
◦ docker build -t ai_contena:latest C:\Users\LAlter\Documents\My_Data.config_ai
• 既存の同名コンテナがあれば削除:
id = docker ps -a -q --filter "name=^ai_contena"; if ($id) { docker rm -f ai_contena | Out-Null }
• バックグラウンドで起動:
◦ docker run -d --name ai_contena ai_contena:latest sleep infinity
◦ 非対話モードの制約に合わせて sleep infinity で常駐
• 非対話で検証(バージョン確認など):
◦ 必須 PATH を一時追加して各ツールを検証

検証結果(要点)
• zsh 5.9
• nvim v0.9.5
• git 2.43.0
• fzf 0.44.1
• mise 2025.10.5
• rustc 1.90.0 / cargo 1.90.0
• uv 0.8.24
• Java OpenJDK 21.0.2
• starship 1.23.0
• yazi 25.5.31

補足
• コンテナ内の /.local/bin、/.local/share/mise/shims、~/.cargo/bin にバイナリが導入されています。非対話シェルでは ~/.zshrc が early-return するため、検証時は PATH を明示的に追加してチェックしました。対話セッションで使うときは zsh をインタラクティブに起動すれば PATH が揃います。

次の操作の候補
• 対話シェルに入る:
◦ docker exec -it ai_contena zsh
• コンテナの停止/削除:
◦ docker stop ai_contena
◦ docker rm ai_contena

このまま対話シェルで中身を確認しますか?それともボリュームやポートマッピングなどの追加設定を行いますか。

Dockerfile内でセットアップスクリプトを実装できるのであれば、install.shを介さなくてもよさそうですが、テストとして軽めに作ったということで質は無視でいいです。
途中でいろいろやっていたのでDockerfile自体は動かない可能性はありますが・・・ま、それでも平常に動作したならいいでしょう。適当にやるというのはこういうものだ。

どれを使う?

閑話休題、結局どのディストリビューションを使うのかに行き着くわけですが、少なくともWindows11 25H2や噂されているWindows 12が自分にとって扱いやすいかです。
もし使えそうになければLinuxに移行しますし、使えるのであれば今まで通りWidnowsを使っていきたいと考えています。そのためにWindows用のセットアップスクリプトを作っているんですから。
ディストリビューションはそのとき考えればいいわけですし、Ubuntuの24.04LTSが搭載されたLinux(Linux MintやPop! OS)がしっかりと出るのを待っても問題ないわけです。
好感触を覚えたのはLinux MintやKDE neon、デスクトップのカスタマイズを行わないのであればPop! OSの24.04やZorin OSの計四つです。使うのであればこれらを選択します。ただ、そうなるとiPhoneからAndroidへの移行も考えなければいけませんね。Microsoftの[放送禁止用語]。

AIレビューとか感想とか

Zennで追加されたAIレビューを使ってみましたが、誤字脱字が少なくほぼ完成している状態であればそこまで追及されることはないですね。ほぼ誤字の問題でした。
そもそも、最初のレビューで「公開して良い出来栄えです。」と書かれているくらいですし。

初めてドットファイルを作ったわけですが、Linuxのコマンドや機能を再認識するいい機会になりました。また、FlataptをはじめとしたStarShipやlazydockerなど新しいものに触れたものよい経験になったかと。
ただ、容量不足の関係上、やりたかったことの一つであるHyper-Vを用いたWindowsの検証ができてないのが心残りです。移行時にちゃんと動くのだろうか。
まぁ、ゲームができてプログラムができればなんでもいいです。OSなんて正常に問題なく動けばいいのですーーー。

Discussion