this post was submitted on 29 May 2024
20 points (95.5% liked)

Linux

47988 readers
1199 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

I'm a i3 user that has been trying to migrate to sway.

I use it with these environment variables:

export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/var/state"
export XDG_CONFIG_HOME="$HOME/.local/config"
export XDG_CACHE_HOME="$HOME/.local/var/cache"

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.

Thank you all for the help, ended up opening a bug report at sway: https://github.com/swaywm/sway/issues/8191

all 25 comments
sorted by: hot top controversial new old
[–] thingsiplay@beehaw.org 4 points 5 months ago (2 children)

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"?

[–] Samueru@lemmy.ml 4 points 5 months ago* (last edited 5 months ago) (2 children)

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.

[–] sga@lemmy.ml 3 points 5 months ago* (last edited 5 months ago) (1 children)

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

[–] Samueru@lemmy.ml 2 points 5 months ago (1 children)

I mean I use bash for some of my scripts, but I mostly try to keep them POSIX compliant, and yes I also use dash as my sh. zsh is just my interactive and login shell, which by being the login shell I export all my variables on .zprofile instead of what you are doing with the sway wrapper.

I also try to use mawk instead of gawk as that one is even faster than dash. (And in some tests, even faster than C++ btw), check this out if you want: https://github.com/Samueru-sama/dotfiles

I just went with zsh because I first tried to get bash to work and couldn't lol.

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),

https://github.com/Samueru-sama/dotfiles/blob/main/.local/scripts/xdg-hammer/librewolf.sh

I also use this one with steam: https://github.com/Samueru-sama/fixsteam/blob/main/steam

touch ${XDG_DATA_HOME}/bash-history

You may wanna move that to either XDG_CACHE_HOME or XDG_STATE_HOME (couldn't hold my xdg vigilantism sorry).

[–] sga@lemmy.ml 1 points 5 months ago (1 children)

why would i want to delete my bash history, like to refer to my old commands (and yes i semi-regularly clear the XDG_CACHE_HOME because many apps treat them as temporary locations, STATE_HOME would be better, but i also do not remember about its existence all the time, and thank you for the librewolf script, i had something similar (i did not actually specify with this granularity though)

[–] Samueru@lemmy.ml 1 points 5 months ago* (last edited 5 months ago) (1 children)

Yeah that is why I said either CACHE or STATE.

Before XDG_STATE_HOME there was a big question on whether log files would go on DATA or CACHE, because log files could go on either depending on how you treated them. To solve that issue XDG_STATE_HOME was created.

Ever since them the shell history gets treated with similar importance to log files. The arch wiki also suggests it for the bash history to be on STATE: https://wiki.archlinux.org/title/XDG_Base_Directory

And while XDG_CACHE_HOME is technically a temporary location, it doesn't really get used as one, one example is the very shader caches get placed in them, and I don't want to regularly clear my shader caches and wait a minute every time I start a game.

For that I use this script, which moves the cache I really want to be cleared to /tmp: https://github.com/Samueru-sama/dotfiles/blob/main/.local/scripts/tools/tmpfs.sh

And everything else stays in $XDG_CACHE_HOME and I don't clear it.

[–] sga@lemmy.ml 1 points 5 months ago* (last edited 5 months ago) (1 children)

just 1 thing, why are you moving yay/paru to tmpdir, since they often have aur builds, and if you dont have a baller setup (i definitely do not), downloading the source and the compiles are not really temporary waste, also a general tip, dont remove browser cache also (depending upon how aggressively should the cache, like i have a slow cpu, but i got a ram upgrade and fair speed, i get almost near instantaneous load time when going to pages i have cached(for configuration, please check betterfox speed setup))

[–] Samueru@lemmy.ml 1 points 5 months ago* (last edited 5 months ago)

I have 16 GiB of mem + zram. Nothing makes it run out of mem.

Zram gives me some insane compression ratios. Like I cannot get the system to run out of mem doing everything that I normally do at once.

Also that is old, I don't really use the aur anymore. The only aur package that I have installed is downgrade and that is used to troubleshoot issues with the official packages lol.

I also have the pacman cache in tmpfs, since I use btrfs snapshots for restoring.

Also my web pages and everything load just fine. I did mostly to reduce unnecessary writes to disk, the Gentoo wiki suggest moving the whole $XDG_CACHE_HOME to tmpfs which I think is extreme lol

Also my browser cache is not fully being cleared, notice that at the end of the script I have some syncing going on with rsync.

[–] thingsiplay@beehaw.org 3 points 5 months ago* (last edited 5 months ago) (1 children)

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.

[–] Samueru@lemmy.ml 3 points 5 months ago* (last edited 5 months ago) (2 children)

Also maybe there are programs that does not respect XDG and have hardcoded paths to ~/.cache.

That's what I'm thinking, and it seems that program is all wayland compositors for some reason, there is likely a hardcoded path to ~/.cache what else could be making a ~/.cache/mesa_shader_cache directory when logging in that doesn't happen on X11?

I made sure XDG_CACHE_HOME was set before starting sway and it still happens: https://lemmy.ml/post/16201068/11319192

[–] thingsiplay@beehaw.org 2 points 5 months ago (1 children)

Mesa contains the graphics driver in the Kernel. So maybe this is run very early. Theoretically you could do a workaround and remove that directory with each start, but that's an ugly solution. Does Steam start with your login session? Maybe Proton is creating the cache.

[–] Samueru@lemmy.ml 2 points 5 months ago* (last edited 5 months ago) (1 children)

No steam doesn't run when starting. The same programs when I start i3 which does not have this issue are the same programs that start when I start sway, as sway uses my i3 configuration.

I've also tested hyprland and cosmic and both of those have that issue as well.

Worth mentioning that when I'm on x11 ~/.cache never gets created, even when I run apps that use mesa.

[–] thingsiplay@beehaw.org 2 points 5 months ago (1 children)

I have no ideas left. Also explored a little bit web searches about this topic, but couldn't find anything useful. Sorry, this reply is even less useful.^^

[–] Samueru@lemmy.ml 2 points 5 months ago (1 children)

Wanna know something? I've been trying for about 5 months to fix this issue without success. I appreciate the help.

I haven't bothered to report this because A) I don't know who to report this to as I'm not sure what is creating the directory, and B) I've already reported other issues I've run into when using sway that were just ignored.

[–] thingsiplay@beehaw.org 2 points 5 months ago (1 children)

I know the feeling. Sometimes I have such little things that bugs me for months, sometimes without a resolution. For the reporting stuff, you could just start discussions and ask if its is even related and if you should create an issue. At least if there is a place for.

Now that I think, I just remembered a program that helps with cleaning the home folder: https://github.com/b3nj5m1n/xdg-ninja

[–] Samueru@lemmy.ml 2 points 5 months ago

I have good news, looks like this issue actually just sway only issue, it just happened that on archlinux all the other wayland compositors also have this issue lol. https://lemmy.ml/post/16201068/11320955

Now I know who to report this to.

[–] Samueru@lemmy.ml 3 points 5 months ago* (last edited 5 months ago) (1 children)

Alright, here is an update.

before starting sway: https://i.imgur.com/ZcePiEa.jpeg

after starting sway: https://i.imgur.com/TocM2dC.jpeg

[–] jasonfuchs@lemmy.ml 3 points 5 months ago (1 children)

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?

[–] Samueru@lemmy.ml 2 points 5 months ago* (last edited 5 months ago) (2 children)

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.

[–] jasonfuchs@lemmy.ml 1 points 5 months ago (1 children)

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?

[–] Samueru@lemmy.ml 1 points 5 months ago* (last edited 5 months ago)

Thanks for the suggestion, but I really want to stick to something like i3, which I think the only thing that is close is sway (and sway is not a perfect drop in replacement for i3 btw).

https://github.com/swaywm/sway/issues/8000

https://github.com/swaywm/sway/issues/8001

https://github.com/swaywm/sway/issues/8002

Actually not even i3 is perfect for me, I had to fork it to apply a patch that they haven't applied: https://github.com/i3/i3/pull/5521

A few months ago I really tried to switch to hyprland, it all ended with my wasting my time reading the documentation on how to assign workspaces to monitors for hyprland to tell me that the feature was deprecated 💀

Another issue that I had with hyprland is that I could not move a floating window between displays using the move left/right as those moved the window to the right/left of the display instead of a left/right direction.

I also use i3msg to do some mildly complex actions, which I really couldn't figure out how to do with hyprland, like this one:

https://github.com/Samueru-sama/dotfiles/blob/main/.local/config/i3/config

set $EXC exec --no-startup-id
set $ADUNST dunstify -r 33 -t 1500
set $RX1 i3-msg '[class="Brave" instance="^(?i)(?!web.telegram.org__k)(?!discord.com__app)(?!web.whatsapp.com).*"] focus'
$BIND $MOD+F1 $EXC $RX1 && $ADUNST "Brave" || ( brave & $ADUNST "Launching Brave" )

Which basically the same keybind either focuses or launches the web-browser, but does not focus on the PWA instances of the web browser as for that I use a different keybind.

Another bigger issue that I need to solve as well is that it seems it isn't possible to do "xrandr --setmonitor extended in wayland, as I use that with my 3 monitors to play some games. (it sets the 3 displays as one).