私は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 -l
bashrcでは実行されません):
nix-user-chroot ~/.nix bash -l
だから私の質問は、各端末に対して呼び出されるようにこれをどのように自動化できるかということです。
答え1
コメントでmuruが述べたように、問題は、最初の実行が正常に機能するがnix-user-chroot ~/.nix bash -l
再実行を試みる新しいシェルを作成することnix-user-chroot
です。解決策はnix-user-chroot
if句に入れ、nix環境がすでにロードされていることを確認することです。
if [ -z "${NIX_PROFILES}" ]; then
./nix-user-chroot ~/.nix bash -l
fi
後ろに.bashrc
nix設定ファイルをロードします(インストールプログラムまたはファイルに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