ターミナルセッションを開始するときに `nix-user-chroot`を自動的に実行します(Steam Deck)。

ターミナルセッションを開始するときに `nix-user-chroot`を自動的に実行します(Steam Deck)。

私はSteam DeckでArch Linuxを実行しています。 Steam Deckには読み取り専用のルートファイルシステムがあり、Flatpakを使用したり、パックマンベースのインストールを削除する代わりにファイルシステムを書き込み可能にする必要があります。Deckのソフトウェアをアップデートするたびに

私はFlatpakのファンではなく、Nixを好む。特にFlatpakには必要ありませんが、必要なパッケージがあるからです。

Nixを使用すると、chroot刑務所でrootアクセスなしで完全なパッケージマネージャを実行できます。nix ユーザー chroot便利です。

インストール後にchrooted nix環境に入るコマンドは、新しいnix-user-chroot ~/.nix bash -lシェルで正しく実行されます。

ここに画像の説明を入力してください。

しかし、最後に同じ行を貼り付けると.bashrcパニックになります。

ここに画像の説明を入力してください。

これは、コマンドを2回実行したときに発生するのとまったく同じエラーのようです。

ここに画像の説明を入力してください。

Steam Deckシェルはchroot刑務所で実行されているようです。この技術chrootしたかどうかを確認するには(nix-user-chroot ~/.nix bash -lbashrcでは実行されません):

ここに画像の説明を入力してください。

nix-user-chroot ~/.nix bash -lだから私の質問は、各端末に対して呼び出されるようにこれをどのように自動化できるかということです。

答え1

コメントでmuruが述べたように、問題は、最初の実行が正常に機能するがnix-user-chroot ~/.nix bash -l再実行を試みる新しいシェルを作成することnix-user-chrootです。解決策はnix-user-chrootif句に入れ、nix環境がすでにロードされていることを確認することです。

if [ -z "${NIX_PROFILES}" ]; then
    ./nix-user-chroot ~/.nix bash -l
fi

後ろに.bashrcnix設定ファイルをロードします(インストールプログラムまたはファイルに1行を追加しました.profile)。

答え2

Settings私は別のタスクを実行し、->のKonsoleコマンドをEdit Current Profile...次のように変更しました。

/bin/bash -c "~/.local/bin/nix-user-chroot ~/.nix bash"

Vapor構成ファイルが読み取り専用であるため、新しい構成ファイルを作成する必要がありました。

それはほぼ同じことをします。 Konsoleにのみあるので、これを行うと、何かを修正する必要がある場合に備えてbashが機能し続けます。 :)

次に、アプリケーション用の実行可能なbashスクリプトを生成し、~/.local/bin/<YOURAPPNAME>次のように実行可能にします。chmod +x ~/.local/bin/<YOURAPPNAME>

#! /usr/bin/env bash

~/.local/bin/nix-user-chroot ~/.nix ~/.nix-profile/bin/<YOURAPPNAME>

デスクトップを使用するには、以下を作成します~/.local/share/applications/<YOURAPPNAME>.desktop

[Desktop Entry]
Version=1.0
Name=<YOURAPPNAME>
Comment=<YOURAPPDESCRIPTION>
Exec=~/.local/bin/<YOURAPPNAME>
Terminal=false
Type=Application
Icon=meld
Categories=GNOME;Development;
StartupNotify=false
NoDisplay=false

関連情報