LINUX.ORG.RU

Хочу нагадить в хомяк

 ,


0

1

Вот есть у меня прога hovno. И понадобились ей настройки и кеш. Куда писать? Просто в абсолютные ~/.hovno, ~/.cache/hovno? Или есть какие системные переменные на случай если эти каталоги отличаются?

Ответ на: комментарий от t184256

Почитал, ~/.config управляемый переменной там нашёл, да, и с кешем тоже. А когда какая нибудь лиса создаёт ~/.mozilla - это она на эту спецификацию кладёт или что?

DumLemming ★★
() автор топика
Ответ на: комментарий от t184256

Мне например надо запустить прогу с другой базовой директорией (например хочу организовать профили у проги, которая на это не рассчитана, и запускать их одновременно, или просто хочу локализовать всё что она создаёт в одном месте) - я могу это сделать так

HOME=$HOME/progname /path/to/prog
А если наставлены эти пачки этих XDG_ переменных - придётся переставлять ещё и их, да и запоминать список. Неудобно и ненужно.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

А если наставлены эти пачки этих XDG_ переменных - придётся переставлять ещё и их, да и запоминать список. Неудобно и ненужно.

Как будто ты руками их переставляешь

DumLemming ★★
() автор топика

.config/hovno, .cache/hovno, .local/share/hovno. Смотри спецификацию xdg, но я бы не стал поддерживать их XDG_* переменные окружения, потому что они неадекваты и переусложняют. Просто каталоги в $HOME.

anonymous
()
Ответ на: комментарий от anonymous

Просто каталоги в $HOME.

Гадить в корень хомяка тоже как-то некрасиво. Я для проги, что сейчас пишу, сделал в Documents каталог и пишу туда и конфиги и библиотеку, которую прога ведёт. Если понадобится несколько профилей(библиотек) реализовать, то можно будет сделать тупо сменой каталога сохранения. Но мне эти все XDG* и не подходили, т.к. я кроссплатформу пишу, мне и на венде надо чтобы примерно одинаково работало.

Loki13 ★★★★★
()
Ответ на: комментарий от Loki13

Гадить в корень хомяка тоже как-то некрасиво.

Гадить в корень хомяка это ~/.hovno. Если бы ты внимательно читал, что увидел бы что я предлагаю не это а ~/.config/hovno - это по всем современным стандартам (в т.ч. XDG) и best practices. Я просто против поддержки избыточных XDG_ переменных.

Я для проги, что сейчас пишу, сделал в Documents каталог
Но мне эти все XDG* и не подходили, т.к. я кроссплатформу пишу, мне и на венде надо чтобы примерно одинаково работало.

Это ложь. Вот Documents это точно не кроссплатформа, потому что это нестандарт и отсебятина абсолютно везде. А кроссплатформенный набор каталогов для данных приложения в отсутствие, к сожалению, единого стандарта для всех платформ, подразумевает свои каталоги на каждой платформе, но вот на *nix это может быть только XDG.

Вообще в нормальных языках должны быть библиотеки позволяющие абстрагироваться от этих деталей, в Rust, например, достаточо подключить https://crates.io/crates/directories и навсегда о проблеме забыть - всё будет лежать где надо на любой системе. Если у тебя не rust то можешь посмотреть как там сделано.

anonymous
()
Ответ на: комментарий от anonymous

Это ложь. Вот Documents это точно не кроссплатформа, потому что это нестандарт и отсебятина абсолютно везде

Я беру QStandardPaths::StandardLocation::DocumentsLocation, вот куда мне Кути говорят, что там документы, туда и сохраняю.

У меня там не только конфиги, у меня там и состояние интерфейса с последнего запуска и библиотека с рабочими файлами.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)
Ответ на: комментарий от Loki13

Я беру QStandardPaths::StandardLocation::DocumentsLocation, вот куда мне Кути говорят, что там документы, туда и сохраняю.

А, ну это норм. Это как раз кроссплатформенная абстракция о которой я говорил.

У меня там не только конфиги, у меня там и состояние интерфейса с последнего запуска и библиотека с рабочими файлами.

А вот это её неправильное использование. Конфиг должен быть в AppConfigLocation, состояние интерфейса и библиотека - в AppDataLocation.

anonymous
()
Ответ на: комментарий от anonymous

А вот это её неправильное использование. Конфиг должен быть в AppConfigLocation, состояние интерфейса и библиотека - в AppDataLocation.

Возможно, что неправильное, да. Но я больше отталкиваюсь от удобства пользователя. Чтобы можно было данные легко переносить с компа на комп, простым копированием каталога. И чтобы при этом и настройки данные, всё переносилось. Все эти поиски где что лежит в AppDat\Roaming(делаю кроссплатформу больше по личным мотивациям, основная платформа использования у клиента будет венда), ну его нафиг так людей мучать.

Конфиг должен быть в AppConfigLocation

А вот тут будет сохранена настройка(и только она) где всё таки находится каталог с данными, а также список таких каталогов для быстрого переключения между ними.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 2)
Ответ на: комментарий от Loki13

Возможно, что неправильное, да. Но я больше отталкиваюсь от удобства пользователя.

Так только о нём и чречь, и ты именно его и загубил. Эти пути именно поэтому разделены: документы - да, можно переносить с компа на комп, а состояние интерфейса нужно НЕ переносить, потому что на разных устройствах отличается буквально всё от разрешения до количества мониторов, и если ты мне настройки интерфейса с десктопа будешь вместе с данными каждый раз притаскивать на телефон и обратно, я тебе страшных вещей пожелаю от всего сердца.

С библиотекой чуть сложнее, но в общем случае также. Это не одноразовый документ, это состояние которое живёт долго и меняется в разных местах, и тупо перенося его ты теряешь изменения в другой копии. Я бы хранил такое локально в AppDataLocation, а в Documents по галке делал бы экспорт и через него синхронизировал локальные базы. Не заменой, естественно, а слиянием.

anonymous
()

Настройки в $XDG_CONFIG_HOME/hovno, кэш в $XDG_CACHE_HOME/hovno. На случай, если эти переменные среды не заданы, откатывать к дефолтным ~/.config/hovno и ~/.cache/hovno.

CrX ★★★
()
Ответ на: комментарий от firkax

Неудобно и ненужно.

Удобно и нужно. Потому что ты можешь захотеть чтобы прога хранила конфиги в ~/progname, но ходила в обычный ~/Downloads или ~/Documents пользователя. Изменив $HOME ты сломаешь вообще все пути в своём хомяке.

А если наставлены эти пачки этих XDG_ переменных - придётся переставлять ещё и их, да и запоминать список.

Тебе только эти XDG_ и нужно менять, независимо заданы они уже какие-то или нет. Запоминать не нужно, ты же всё равно алиас сделаешь или скрипт-обёртку.

anonymous
()
Ответ на: комментарий от CrX

она просто настолько неповоротлива

Да нет, они просто кладут на линукс как на неприоритетную платформу. Стандарты Windows и macOS соблюдаются почему-то.

anonymous
()
Ответ на: комментарий от anonymous

Потому что ты можешь захотеть чтобы прога хранила конфиги в ~/progname, но ходила в обычный ~/Downloads или ~/Documents пользователя.

Сложно представить когда такое может пригодиться.

Documents кстати вообще бесполезная директория, судя по всему появилась исключительно из-за чьего-то желания повторить за виндой.

firkax ★★★★★
()
Ответ на: комментарий от DumLemming

Лиса появилась раньше этой спеки и поддерживает обратную совместимость чтобы юзер мог обновиться и его профиль по максимуму(в пределах возможностей разрабы) сохранился

cobold ★★★★★
()
Ответ на: комментарий от firkax

Сложно представить когда такое может пригодиться.

Тебе сложно представить когда может пригодиться открыть файл из хомяка?

Documents кстати вообще бесполезная директория, судя по всему появилась исключительно из-за чьего-то желания повторить за виндой.

Речь про любое место в хомяке.

anonymous
()
Ответ на: комментарий от anonymous

Открывать файлы независимо от этих настроек в обоих случаях можно из любого места файловой системы, включая то которое вне $HOME. Эти настройки никак не ограничивают доступность файловой системы.

Речь именно про то чтоб у неё дефолтно было ~/Downloads для скачивания общее - не вижу смысла делать общее место для очевидно разных экземпляров программы. А для конкретных редких случаев исключений всегда можно настроить вручную в самой программе.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Открывать файлы независимо от этих настроек в обоих случаях можно из любого места файловой системы, включая то которое вне $HOME. Эти настройки никак не ограничивают доступность файловой системы.

Не ограничивают, но много всего ломают. Как минимум стартовая директория и закладки в диалогах открытия/сохранения будут другие. Как максимум, сломается вообще всё, но к сожалению XDG_* от этого не спасают. Я о других конфигах в которые неявно ходит приложение, например те же настройки закладок (не знаю где они лежат), всякие настройки тем qt/gtk, .Xdefaults, .signature, .ssh/id*, да мало ли что у меня общего что юзает куча приложений.

Речь именно про то чтоб у неё дефолтно было ~/Downloads для скачивания общее - не вижу смысла делать общее место для очевидно разных экземпляров программы.

Разные экземпляры в общем случае работают с одними и теми же файлами.

anonymous
()
Ответ на: комментарий от FishHook

Эту переменную вручную нужно устанавливать, всякие systemd, DE их не ставят. Это на усмотрение авторов дистрибутива. В баш скрипте чет типа такого постоянно надо писать:

XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
rtxtxtrx
()
Ответ на: комментарий от anonymous

Не ограничивают, но много всего ломают.

Ничего не ломают.

Как минимум стартовая директория и закладки в диалогах открытия/сохранения будут другие.

Конечно, я уже третий раз тебе пишу что это и есть суть разделения. Помойка куда смотрят все проги одновременно - не нужна.

Как максимум, сломается вообще всё

Это какие-то не то что даже фантазии а просто бред. Ломаться там нечему.

Разные экземпляры в общем случае работают с одними и теми же файлами.

Вовсе нет. Они на то и разные, что у них разные задачи которые не должны пересекаться. Но если иногда почему-то нужно открыть не свой файл - никто не запрещает вручную туда перейти.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Все 4 варианта распространены:

~/.cache/hovno
~/.local/share/hovno
~/.config/hovno
~/.hovno

Те переменные XDG_ устанавливаются вручную:

❯ cat ~/.zshenv
#!/usr/bin/zsh
# shellcheck shell=zsh
# Переменные, объявленные здесь, доступны в графических приложениях
# https://wiki.archlinux.org/title/XDG_Base_Directory
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
export XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"

Их можно в ~/.zprofile какой сунуть… Проблема лишь в том, что это не часть системды и тп, это лишь стандарт сферического в вакууме freedesktop, а поэтому огромное количество программ игнориует эти переменные, в других же пути типа ~/.config захардкожены, и если ты переопредилишь такую переменную, тебе все равно создадут каталох ~/.config, да и 99% мышевозов их не переопределяют

rtxtxtrx
()
Ответ на: комментарий от rtxtxtrx

А непонятно, на самом деле. Если ты пишешь баш-скрипт, который собрался туда лезть, то норм. А вот там ниже ты написал такие же строки в контексте .zshrc, вот там они бесполезны.

t184256 ★★★★★
()
Ответ на: комментарий от Loki13

Возможно, что неправильное, да. Но я больше отталкиваюсь от удобства пользователя.

Пользователю удобно кнопочки импорта/экспорта. Нажимаешь на экспорт, выставляешь галочки на нужном и получаешь архив в указанной папочке. При импорте скармливаешь архив и опять же отмечаешь что хочешь импортировать.

anonymous
()
Ответ на: комментарий от anonymous

У меня там специфические пользователи скорее всего будут. Подозреваю, что им вообще будет удобно всё своё(и саму софтину в том числе) носить на флешке. Тогда буду вообще хранить конфиг рядом с исполняемым файлом.

Но и насчет импорта\экспорта думаю. Так-то софтина на заказ, но с очень неопределенным ТЗ, в смысле что общая функциональность обозначена, а все детали я сам проектирую. Поэтому дальше развитие будет «по заказу». Где скажут, что удобно конфиг иметь, там и положу.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)

Вот есть у меня прога hovno. И понадобились ей настройки и кеш. Куда писать? Просто в абсолютные ~/.hovno, ~/.cache/hovno?

пиши в с:/temp, не ошибёшься

MKuznetsov ★★★★★
()