diff --git a/.chezmoiignore b/.chezmoiignore index 4257e02..c2437a5 100644 --- a/.chezmoiignore +++ b/.chezmoiignore @@ -12,3 +12,7 @@ README.md {{ if or (eq .chezmoi.hostname "daybreak") (eq .chezmoi.hostname "epoch") (eq .chezmoi.hostname "UGC13335X84") (eq .chezmoi.hostname "UGCB2YBS33") }} .local/share/gnupg/sshcontrol {{ end }} + +{{ if or (eq .chezmoi.hostname "daybreak") (eq .chezmoi.hostname "epoch") (eq .chezmoi.hostname "circadian") (eq .chezmoi.hostname "twilight") (env "ANDROID_ROOT") }} +.config/python +{{ end }} diff --git a/dot_config/python/pythonrc b/dot_config/python/pythonrc new file mode 100644 index 0000000..486f2d6 --- /dev/null +++ b/dot_config/python/pythonrc @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# This entire thing is unnecessary post v3.13.0a3 +# https://github.com/python/cpython/issues/73965 + + +def is_vanilla() -> bool: + """:return: whether running "vanilla" Python""" + import sys + + return not hasattr(__builtins__, "__IPYTHON__") and "bpython" not in sys.argv[0] + + +def setup_history(): + """read and write history from state file""" + import os + import atexit + import readline + from pathlib import Path + + # https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables + if state_home := os.environ.get("XDG_STATE_HOME"): + state_home = Path(state_home) + else: + state_home = Path.home() / ".local" / "state" + if not state_home.is_dir(): + print("Error: XDG_SATE_HOME does not exist at", state_home) + + history: Path = state_home / "python_history" + + # https://github.com/python/cpython/issues/105694 + if not history.is_file(): + with open(history, "w") as f: + f.write( + "_HiStOrY_V2_" + + "\ +\ + " + ) # breaks on macos + python3 without this. + + readline.read_history_file(history) + atexit.register(readline.write_history_file, history) + + +if is_vanilla(): + setup_history()