diff --git a/kitty/cli.py b/kitty/cli.py index 45d6dfafe..53c3336dc 100644 --- a/kitty/cli.py +++ b/kitty/cli.py @@ -43,7 +43,8 @@ directory is always used and the above searching does not happen. If :file:`/etc/xdg/{appname}/{conf_name}.conf` exists it is merged before (i.e. with lower priority) than any user config files. It can be used to specify system-wide -defaults for all users. +defaults for all users. You can use either :code:`-` or :code:`/dev/stdin` to read the +config from STDIN. '''.replace( '{macos_confpath}', (':file:`~/Library/Preferences/{appname}/{conf_name}.conf`,' if is_macos else ''), 1 diff --git a/kitty/conf/utils.py b/kitty/conf/utils.py index d978dac57..8026a0ce7 100644 --- a/kitty/conf/utils.py +++ b/kitty/conf/utils.py @@ -4,6 +4,7 @@ import os import re import shlex +import sys from contextlib import contextmanager from typing import ( Any, Callable, Dict, Generator, Generic, Iterable, Iterator, List, @@ -261,12 +262,17 @@ def load_config( for path in paths: if not path: continue - try: - with open(path, encoding='utf-8', errors='replace') as f: - with currently_parsing.set_file(path): - vals = parse_config(f) - except (FileNotFoundError, PermissionError): - continue + if path == '-': + path = '/dev/stdin' + with currently_parsing.set_file(path): + vals = parse_config(sys.stdin) + else: + try: + with open(path, encoding='utf-8', errors='replace') as f: + with currently_parsing.set_file(path): + vals = parse_config(f) + except (FileNotFoundError, PermissionError): + continue found_paths.append(path) ans = merge_configs(ans, vals) if overrides is not None: