BlitterStudio / amiberry

Optimized Amiga emulator for Linux/macOS
https://amiberry.com
GNU General Public License v3.0
660 stars 89 forks source link

Create home directories on startup #1440

Closed midwan closed 1 month ago

midwan commented 1 month ago

Amiberry should create the required directories it uses on startup, if they are not found. Currently, we are depending on them existing, except in the case of MacOS, where they are created if they are missing. The same approach should be followed for the Linux version as well.

We need to decide on the location they will be created under, since currently there are several scenarios:

giantclambake commented 1 month ago

Comment: export list from standard debian bookworm amd64 install...

gcb@gallah:~$ export
declare -x COLORTERM="truecolor"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DESKTOP_SESSION="lightdm-xsession"
declare -x DISPLAY=":0.0"
declare -x GDMSESSION="lightdm-xsession"
declare -x GTK_MODULES="gail:atk-bridge"
declare -x HOME="/home/gcb"
declare -x LANG="en_AU.UTF-8"
declare -x LANGUAGE="en_AU:en"
declare -x LOGNAME="gcb"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.swp=00;90:*.tmp=00;90:*.dpkg-dist=00;90:*.dpkg-old=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:"
declare -x OLDPWD
declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
declare -x PWD="/home/gcb"
declare -x QT_ACCESSIBILITY="1"
declare -x SESSION_MANAGER="local/gallah:@/tmp/.ICE-unix/3532,unix/gallah:/tmp/.ICE-unix/3532"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_AGENT_PID="3593"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XXXXXX5ytvvj/agent.3532"
declare -x TERM="xterm-256color"
declare -x USER="gcb"
declare -x VTE_VERSION="7006"
declare -x WINDOWID="18965517"
declare -x XAUTHORITY="/home/gcb/.Xauthority"
declare -x XDG_CONFIG_DIRS="/etc/xdg"
declare -x XDG_CURRENT_DESKTOP="XFCE"
declare -x XDG_DATA_DIRS="/usr/share/xfce4:/usr/local/share/:/usr/share/:/usr/share"
declare -x XDG_GREETER_DATA_DIR="/var/lib/lightdm/data/gcb"
declare -x XDG_MENU_PREFIX="xfce-"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SEAT="seat0"
declare -x XDG_SEAT_PATH="/org/freedesktop/DisplayManager/Seat0"
declare -x XDG_SESSION_CLASS="user"
declare -x XDG_SESSION_DESKTOP="lightdm-xsession"
declare -x XDG_SESSION_ID="2"
declare -x XDG_SESSION_PATH="/org/freedesktop/DisplayManager/Session0"
declare -x XDG_SESSION_TYPE="x11"
declare -x XDG_VTNR="7"

Thus I think $HOME/.amiberry is appropriate for this system layout...otherwise you need to add another ENV variable? (may or may not be a good idea). As we can see, XDG_DATA_HOME & XDG_CONFIG_HOME are unset/unused.

That said, using the same debian instance in example, many applications use the XDG_* path directories, regardless of whether XDG_DATA_HOME & XDG_CONFIG_HOME are set or not, and most applications maintain a ~/.program-name directory as well...which looks like unneeded duplication to me, but don't shoot the reporter ; this is the current picture.

For mine, $HOME is absolute, ~/.amiberry is assured, and ~/Amiberry is expected....but I'm old and gray ;)

The question becomes, do you want to duplicate that, to satisfy the expectations of every linux distro out there, and as the answer is likely 'yes'....it probably results in what I'm seeing. Mind you, providing the XDG layout, means you end up with a ~/.config/amiberry/amiberry.conf location, and a ~/.config/amiberry/amiberryrc file (which can be used to define the size and placement of the GUI window blabla)....and at that level, you likely can't get away with just a ~/.amiberry location...

...my best guess is, seeing as everyone else is seemingly covering all bases come what may, that was the result of the headache they got thinking about this more than I have done here...there's only one way out...do them all...add app specific vars as required...

/2cents