Which gives me a clean home with only ~/.local for my dotfiles.
And issue that I've noticed that I haven't been able to fix is that every time that I start sway, hyprland and also the alpha of cosmic is that I get a new ~/.cache directory created in my home that contains a mesa_shader_cache directory.
Btw in the middle of writing this post I just ran into another bug, thunar for some reason decided to steal my key presses from the web browser, and even though I had the browser window focused as I have sway configured to change the border color of the window with focus, thunar was like nope wtf.
Where do you set the environmental variables? If they are set and read AFTER the other applications started with the old value, then they will off course write into ~/.cache. Does it work, if you put the variables into "~/.bash_profile"?
I don't use bash. As there is no way to fix bash leaving dotfiles in home lol.
I use zsh with $ZDOTDIR set to $XDG_CONFIG_HOME/zsh and there my .zprofile contains my environment variables that I posted. zsh is my login shell so they get applied once I login.
But you made a good point, I will test defining XDG_CACHE_HOME in /etc/profile just to see if that fixes the issue.
I have not setup these particular XDG variables, but i have been able to use bash without creating any files in my home dir (i was also able to use firefox (librewolf) without having .dir in my $HOME)
first I do not use bash as my default shell (I am on arch and installed dash and a package which basically symlinks /bin/sh to dash (I think i it is called dashbinsh), because it is slightly faster (I have many shell scripts, for some of them difference is perceivable) and it does not create any files by default
also I use a login display manager (ly) (if you use something else, then that does not really change anything, if you just type out the command in tty, just the command will change), and I have edited my sway desktop file (/usr/share/wayland-sessions/sway.desktop), you can use any other de/wm, just replace the specific command to launch sway (here sway), with something else (for example, in xfce (a de), you have start-xfce4 command), and the desktop file used
[Desktop Entry]
Name=Sway
Comment=An i3-compatible Wayland compositor
Exec=sway-wrapper
Type=Application
I made a script sway-wrapper, placed it at /home/sg/.local/bin/sway-wrapper (my user name here is sg), and symlinked it to /bin/sway-wrapper
these are the only changes made to root system
here is my full sway-wrapper, it launches sway, and also declares all my system variables
#!/bin/sh
# here i have exported many variables, not necessary for now
# export A_LOT_OF_THINGS
exec sway
now I use bash as my shell (I also tried zsh, but was not really amazed), and I only use it in my terminal emulator (if you use it elsewhere (if in editors, most have some way to set the shell used, if in tty, then I think you can set via some systemd init thing that I have forgotten, but most likely you would not have to set it at many places), so I edited my terminal emulator's (foot) config file to launch with bash, but with a specific rc file,
shell=bash --rcfile /home/sg/.local/bin/bashrc.sh
(most terminal emulators have some way to set this)
and in my bashrc, i have
# many things, this is just your bashrc, you can simply move your old one here with almost no changes (if you pull some variables/aliases with relative path, then change them)
export HISTFILE=${XDG_DATA_HOME}/bash-history
and also do
touch ${XDG_DATA_HOME}/bash-history
beforehand, as bash does not create hist file if it does not already exist
I also started using different programs or use hem with different cli flags (with help of launch scripts) to have there stuff in different directories
Outside of xdg specification dirs, I have .librewolf (if you want to not have this(this approach works with pretty much all firefox derivatives/family), then make a script, which basically launches librewolf with different home, like HOME=$XDG_DATA_HOME librewolf (or wherever you want), after doing so, you may have to reinstall extensions, but they do not lose there data, also maybe have to reset the download path, or if you use nativemessaging (some extensions use this), you may hae to slightly edit them, then either create a different desktop file to launch browser with this script, or edit the existing desktop file for your browser(with first approach you would have to reset your default browser everywhere (either by choosing it again, or editing your mime file in .config), with the latter approach, you may have to edit your desktop file after each browser update))(i stopped doing because i have some broken mime issue that pretty much every file type that i have not already set the default opener for, got opened with browser, and that created the .dot dir again and again), and some proprietary stuff that i have tried with the browser approach, and it still does not work
There is also a dedicated "/etc/environment" , but that is systemwide for all users (not sure if this applies to root too). But that is the first in the chain, in case you want test it. Therefore it does not know any variables like $HOME, only hardcoded values.
Edit: Also maybe there are programs that does not respect XDG and have hardcoded paths to ~/.cache. And I am not sure if ~/ has the same value as XDG.
You're using Arch? That's an Arch specific issue, I switched to KISS Linux and don't have that anymore (I use XDG_CACHE_DIR=~/.var/cache). Also it's only Sway, Hyprland and River don't have that issue for example. Maybe try building Sway from source?
I cannot believe you were right. It is a arch only issue for hyprland.
I'm on artix linux since a few days ago, but I did not test hyprland on artix yet. I had only tested sway because I had a similar issue with xfce4 apps creating a ~/.config dir, which actually turned out to be a dbus issue which does not happen on artix because they don't use dbus-broker.
Indeed hyprland does not create the ~/.cache directory, but it does create a .dbus directory instead (something that sway doesn't do 🤔). So I basically just moved forward and backwards at the same time lol.
Btw don't tell me you use ~/.var/cache because flatpak hardcodes ~/.var like I cannot do that, I would not accept such defeat lol.
THANK YOU SO MUCH, I have been stuck with this issue for months, now I know where the problem is at least.
I think ~/.dbus/ wasn't really used by Hyprland, as far as I remember I just told Hyprland to remove the directory on startup, but it's been a while since I used Hyprland. Or maybe try River?