Skip to content

[Linux] Move the .cursorless folder away from the home directory #2979

@Sytoplis

Description

@Sytoplis

Problem:
Hi, I am using talon with cursorless to program in a VS Codium flatpak installation. Works great 👍. Now the only thing that's bothering me is the location of the .cursorless directory in the home folder. To be more in line with the XDG Base Directory Specifications.

Solution:
I would recommend moving the folder to "~/.config/cursorless" or "~/.cache/cursorless". I don't know which one would be best here, as I don't really get what purpose that folder serves. If you want to be really fancy you could even read $XDG_CONFIG_HOME or $XDG_CACHE_HOME environment variable respectively to determine where to put it that folder, but i am not even asking for that much.

Implementation:
As far is I could tell by looking at the code, you are using that directory only once on Linux. And that is here:

SPOKEN_FORMS_OUTPUT_PATH = Path.home() / ".cursorless" / "state.json"

Take that with a grain of salt tho, as I only looked at the "cursorless-talon/src" folder.
You could change that to something like that:

from talon import app
import os #is this needed or can talon also read environment variables?
from pathlib import Path

def config_dir_linux():
    xdg_config_home = os.getenv("XDG_CONFIG_HOME")
    
    if xdg_config_home:
        # If XDG_CONFIG_HOME is set, use that path
        config_path = Path(xdg_config_home)
    else:
        # Otherwise, fall back to the default ~/.config
        config_path = Path.home() / ".config"
    
    return config_path / "cursorless"

if app.platform == "linux":
        SPOKEN_FORMS_OUTPUT_PATH = config_dir_linux() / "state.json"
else:
        SPOKEN_FORMS_OUTPUT_PATH = Path.home() / ".cursorless" / "state.json"

I hope that makes changing this relatively easy.

Thanks you for your time and effort.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions