Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use XDG standard by default #304

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions tg/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@
_darwin = "Darwin"
_linux = "Linux"

def expand_path(path):
return os.path.expandvars(os.path.expanduser(path))
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What’s the purpose of expandvars() here? This seems like it might introduce unexpected behaviour in case any of the paths might have a "$" in them (for whatever reason).

The $XDG_* variables are already "expanded" by os.getenv, so e.g. os.getenv("XDG_CONFIG_HOME", "~/.config") following export XDG_CONFIG_HOME=$HOME/.xdg_config would return /home/user/.xdg_config, not $XDG_CONFIG_HOME/.xdg_config.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you are using default paths, then you're right. But what if someone changes cache folder location to "$XDG_CACHE_HOME/$USER/tg"? Then they couldn't expand it with os.getenv.
If you use the default paths, then you are right. But what if someone changes the location of the cache folder to "$XDG_CACHE_HOME/$USER/tg"? Then they won't be able to expand it with `os.getenv'.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mean change the location inside tg? Or set XDG_CACHE_HOME? If the former, then this PR is introducing a feature to the codebase beyond what it says it’s set out to do and unrelated to the XDG standard. If the latter, then $USER would be expanded by the system and stored in the XDG_CACHE_HOME envvar directly, so there’d be no need to expand it again inside tg.

And again, this may break in the case of a user for some reason or other decided to use a literal $ in their paths and it happens to resolve to a variable in the environment at time of evaluation.


CONFIG_DIR = os.path.expanduser("~/.config/tg/")
CONFIG_DIR = expand_path("$XDG_CONFIG_HOME/tg/")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't work if $XDG_CONFIG_HOME isn't set.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not really sure about this solution, but it works both with and without variables.

CONFIG_FILE = os.path.join(CONFIG_DIR, "conf.py")
FILES_DIR = os.path.expanduser("~/.cache/tg/")
FILES_DIR = expand_path("$XDG_CACHE_HOME/tg/")
MAILCAP_FILE: Optional[str] = None

LOG_LEVEL = "INFO"
LOG_PATH = os.path.expanduser("~/.local/share/tg/")
LOG_PATH = expand_path("$XDG_DATA_HOME/tg/")

API_ID = "559815"
API_HASH = "fd121358f59d764c57c55871aa0807ca"
Expand Down Expand Up @@ -78,7 +80,7 @@

FILE_PICKER_CMD = "ranger --choosefile={file_path}"

DOWNLOAD_DIR = os.path.expanduser("~/Downloads/")
DOWNLOAD_DIR = expand_path("$XDG_DOWNLOAD_DIR")

if os.path.isfile(CONFIG_FILE):
config_params = runpy.run_path(CONFIG_FILE) # type: ignore
Expand Down