from pathlib import Path p = Path("/home/rain/.config/foot/foot.ini") text = p.read_text() old_lines = [ "# foot does not expand env variables in the `shell=` value, so we have to", "# go through `sh -c` to make the parent's $SHELL take effect. When foot", "# is launched from a fish session, $SHELL is /bin/fish, and foot runs fish.", "# When launched from bash, $SHELL is /bin/bash, and foot runs bash. The", "# default fallback is /bin/bash if $SHELL is unset for any reason.", 'shell=sh,-c,"exec ${SHELL:-/bin/bash} -i"', ] new_lines = [ "# kaiser runs zsh as the login shell. Hardcode /usr/bin/zsh here.", "# foot does NOT expand $SHELL in shell= (it passes the literal string", "# to its child process), so the sh,-c trick makes foot try to exec a", '# binary literally named "${SHELL:-/bin/bash}" and die with', '# "No such file or directory". Point shell= at the binary directly.', "shell=/usr/bin/zsh", ] old = "\n".join(old_lines) new = "\n".join(new_lines) assert old in text, "old block not found in foot.ini" text = text.replace(old, new, 1) p.write_text(text) print("OK, new size:", len(text))