# Configuration [Folders](#folders) ⬥ [settings.py](#settingspy) ⬥ [accounts.json](#accountsjson) ## Folders On Linux: - `$XDG_CONFIG_HOME/moment` if the `XDG_CONFIG_HOME` environment variable is set, else `~/.config/moment` for config files - `$XDG_DATA_HOME/moment` if that variable is set, else `~/.local/share/moment` for user data - `$XDG_CACHE_HOME/moment` if that variable is set, else `~/.cache/moment` for cache data For Flatpak installations: - `~/.var/app/xyz.mx_moment.moment/config/moment for config files - `~/.var/app/xyz.mx_moment.moment/data/moment for user data - `~/.var/app/xyz.mx_moment.moment/cache/moment for cache data These locations can be overriden with environment variables, see `moment --help`. The user data folder contains saved encryption data, interface states and [themes](THEMING.md), while the cache contains downloaded files and thumbnails. ## settings.py A file written in the [PCN format](PCN.md), located in the [config folder](#folders), which is manually created by the user to configure the application's behavior. The default `settings.py`, used when no user-written file exists, documents all the possible options and can be found at: - [`src/config/settings.py`][1] in this repository - `/usr/local/share/examples/moment/settings.py` or `/usr/share/examples/moment/settings.py` on Linux installations - `~/.local/share/flatpak/app/xyz.mx_moment.moment/current/active/files/share/examples/moment/settings.py` for per-user Flatpak installations - `/var/lib/flatpak/app/xyz.mx_moment.moment/current/active/files/share/examples/moment/settings.py` for system-wide Flatpak installations Rather than copying the entire default file, it is recommended to [`include`](PCN.md#including-built-in-files) it and only add the settings you want to override. For example, a user settings file that disables kinetic scrolling, sets a different theme, and changes some keybinds could look like this: ```python3 self.include_builtin("config/settings.py") class General: theme: str = "Glass.qpl" class Scrolling: kinetic: bool = False # Has issues on trackpad class Keys: # The default ctrl+= doesn't work on some keyboard layouts reset_zoom = ["Ctrl+Backspace", "Ctrl+="] class Messages: open_links_files = ["Ctrl+Shift+O"] open_links_files_externally = ["Ctrl+O"] ``` When this file is saved while the application is running, the settings will automatically be reloaded, except for some options which require a restart. The default `settings.py` indicates which options require a restart. You can also manually trigger a reload by updating the file's last change timestamp, e.g. with the `touch` command: ```sh touch ~/.config/moment/settings.py ``` [1]: https://gitlab.com/mx-moment/moment/-/blob/main/src/config/settings.py ## accounts.json This JSON file, located in the [config folder](#folders), is managed by the interface and doesn't need to be manually edited, except for changing account positions via their `order` key. The `order` key can be any number. If multiple accounts have the same `order`, they are sorted lexically by user ID. This file should never be shared, as anyone obtaining your access tokens will be able to use your accounts. Within the application, from the Sessions tab of your account's settings, access tokens can be revoked by signing out sessions, provided you have the account's password. Example file: ```json { "@user_id:example.org": { "device_id": "ABCDEFGHIJ", "enabled": true, "homeserver": "https://example.org", "order": 0, "presence": "online", "status_msg": "", "token": "" }, "@account_2:example.org": { "device_id": "KLMNOPQRST", "enabled": true, "homeserver": "https://example.org", "order": 1, "presence": "invisible", "status_msg": "", "token": "" } } ```