id = "ghostwriter" name = "ghostwriter" homepage = "https://ghostwriter.kde.org" description = "ghostwriter provides a relaxing, distraction-free writing environment." # The ghostwriter application icon, the scalable one from the project's own # icon set. icon = "https://raw.githubusercontent.com/KDE/ghostwriter/master/resources/icons/sc-apps-ghostwriter.svg" # src/CMakeLists.txt builds `add_executable(ghostwriter …)`; the desktop file # is org.kde.ghostwriter.desktop and the macOS bundle identifier is # org.kde.ghostwriter (MACOSX_BUNDLE_GUI_IDENTIFIER in the top-level # CMakeLists.txt). The binary is what a user types, so it is what is named here. executables = ["ghostwriter"] [dotfiles] # ghostwriter's own documentation does not state where it writes its settings, # so these are derived from its source plus Qt's documented behaviour, and the # derivation is set out here so a reviewer can check it: # # src/appmain.cpp builds `KAboutData aboutData("ghostwriter", …)` and calls # aboutData.setOrganizationDomain("kde.org"). Nothing in the tree ever calls # setOrganizationName — the only other QSettings-wide call is # QSettings::setDefaultFormat(QSettings::IniFormat) under #ifdef Q_OS_WIN32 in # src/settings/appsettings.cpp, with the comment "On Windows, don't ever use the # registry to store settings". src/settings/appsettings.cpp then reads settings # through the default constructor, `QSettings appSettings;`, which falls back to # the organization *domain* when the organization name is empty. So the # organization is kde.org, and the file is: # Linux $XDG_CONFIG_HOME/kde.org/ghostwriter.conf # macOS ~/Library/Preferences/org.kde.ghostwriter.plist (QSettings on # macOS reverses the domain and appends the application name) # Windows %APPDATA%/kde.org/ghostwriter.ini (IniFormat, forced above) # # The themes directory is stated outright in appsettings.cpp: # QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + # "/themes", created at startup. AppDataLocation appends the organization name # only when it is non-empty, and here it is empty, so this path is ghostwriter/ # rather than kde.org/ghostwriter/ — ~/.local/share on Linux, # ~/Library/Application Support on macOS, %APPDATA% on Windows. That Windows # half is %APPDATA% and not %LOCALAPPDATA%, so it is not [dataHome]; each # spelling is written out. # # [configHome] is used for the .conf because Qt does read $XDG_CONFIG_HOME # rather than hard-coding ~/.config. Its macOS and Windows halves resolve to # files ghostwriter never writes — those two platforms get the .plist and the # .ini below instead — so on them that entry simply is not there, the way # apps/alacritty.toml's bare $XDG_CONFIG_HOME entry is not there on Windows. paths = [ "[configHome]/kde.org/ghostwriter.conf", "[preferences]/org.kde.ghostwriter.plist", "%APPDATA%/kde.org/ghostwriter.ini", "~/.local/share/ghostwriter/themes/", "~/Library/Application Support/ghostwriter/themes/", "%APPDATA%/ghostwriter/themes/", ] # ghostwriter's automatic backups go to AppLocalDataLocation + "/backups/", # which is a different directory from the themes one above, so there is nothing # inside what syncs to carve out. # A Markdown editor stores no credential. secret = [] # No machine_lines. The settings file carries the editor font, theme, spell # check locale, focus mode and Markdown flavour, all of which a user wants # everywhere. It also holds a recent-file list and window geometry, which # belong to one machine — but on macOS this file is a property list, which has # no matcher in this schema, and naming a rule that runs on Linux and Windows # only is exactly the silent half-coverage the siblings check exists to stop.