Adds helper methods to qualify strings to avoid regex interpretation

As discussed on today's functionality call, these are helper methods to qualify strings to avoid them being interpreted as regular expressions.
Expectation is the following:

OMASes wanting to do exact-match searches should call getQualifiedLiteralString() to get a string that can then be passed to the find... methods and will do an exact-match search
Repository connectors that want to check whether the passed criteria is a regular expression should call isLiteral() from their find... methods -- true indicates the entire expression is an exact match, false indicates that at least some portion of it is a regular expression (so if the connector will do partial regular expression handling it needs to handle its own complexity on a false response; otherwise can simply short-circuit directly at the point at which a false is seen if it should not handle regular expressions at all)
Repository connectors that cannot pass-down regular expressions to their back-end can call getUnqualifiedLiteralString() to "un-escape" the passed criteria to be able to push it down as an exact match (should only be done on the criteria or portion of the criteria that is not a regular expression: ie. when isLiteral() returns true or when the other complex handling for partial regex handling has been done.)

How does isLiteral() know whether this is a regular expression or not?
If the repository connector removes the escape characters then they are going to return too much?  This is the cause of the original issue.

How does isLiteral() know whether this is a regular expression or not?

It is reliant on someone obtaining the literal by using the related helper method referenced in the JavaDoc for the isLiteral() method: getQualifiedLiteralString().  This uses Java's native Pattern.quote() method to change the entire string into a literal (basically putting a \Q at the beginning of the string and a \E at the end of the string).  The isLiteral() method will therefore look for these presence of these to determine if the string is a literal (they're there) or not (they aren't there).

There is no means to "detect" whether something is a regex or not -- every string (even without any regex characters) is technically a regex -- so it's up to the caller (OMAS, etc) to define that behaviour based on whether or not it "qualifies" its criteria before calling.

The descriptions of the methods needs more explanation to say that the isLiteral assumes the presence of the escape characters.  For example string "Drop Foot" is literal and I would expect isLiteral() to return true but it won't.
I don't think the implementation needs changing - just clarification on the function.

Brought another question to my mind, though: will OMASes have access to these OMRSRepositoryHelper methods?  Or do we need some other means to expose getQualifiedLiteralString() (or eg. make it static in the OMRSRepositoryContentManager class)?

I don't think the implementation needs changing - just clarification on the function.

New JavaDoc description for isLiteral():

Determine whether the provided string should be interpreted literally (true) or as a regular expression (false). Note that this method relies on the use of the getQualifiedLiteralString helper method having been used to qualify a string when it should be treated as a literal. That is, this method relies on the presence of the escape sequences used by Java's Pattern.quote() method. The method is not intended to work on all strings in general to arbitrarily detect whether they might be a regular expression or not.

Primarily a helper method for methods that do not directly handle regular expressions (for those it
should be possible to just directly use the string as-is and it will be correctly interpreted).

Hmm...  hold this thought -- thinking some other common helper functions for cases like contains might be handy as well, so considering some method renames to further help clarify things.

Ok, thinking this is probably more logical now:

OMAS (or other caller) knows what behaviour it wants -- it either qualifies the string using one of the appropriate helper methods (getExactMatchRegex(), getContainsRegex(), getStartsWithRegex(), or getEndsWithRegex()), or builds its own custom regex, before calling to the enterprise connector. (We can expand these getXYZRegex() helpers if there are other common scenarios we come across.)
Enterprise Connector passes the string it receives as-is to the underlying repository connector(s).
Each repository connector can use the isExactMatchRegex() method to determine whether it is a literal string (should all be able to handle) or the other isXYZRegex() methods to check for a "relatively simple" regex that most repositories can likely handle (contains, startswith, endswith), or if none of those that it is a complex regex.
If it cannot handle regexes, the repository connector can decide at what point to short-circuit; if it can only handle the "simple" ones, it can use getUnqualifiedLiteralString() to remove the escapes that were put into the string by any of the getXYZRegex() methods (so it can pass along the result of that to its own search mechanism, even if it doesn't support regexes, after having determined what of its own proprietary wrapping it needs to do to achieve the "contains", "startswith" or "endswith" based on which simple regex was detected by the isXYZRegex() methods).

Hi @mandy-chessell -- so with the "redesign" outlined directly above, hopefully it makes more sense? =)  This will make it much easier to make use of the methods from the perspective of connectors like Atlas and IGC (both of which support a limited set of "simple" regex-like mechanisms, but not full regexes) while still allowing full regexes to be used in general by other repos.
I'm still wondering about OMAS invocation of the helpers: should we have these as static methods within the OMRSRepositoryContentManager?  (I'm assuming the OMASes won't have an instance of an OMRSRepositoryContentManager to use them non-statically?)

@cmgrote
The repository content manager is private to the OMRS.  An OMAS should not call it directly.
Every OMAS is passed an Enterprise Repository Connector instance.  This connector provides access to the repository helper instance.  The repository helper instance is initialized with a link to the repository content manager instance for this server.
Static methods are not needed.  We avoid using them to maintain maximum flexibility in the internal server implementation.


Rename InfoEnchantment to Enchantment

Renames Enchantment to EnchantmentType, and InfoEnchantment to Enchantment.
Reasoning for this: EnchantmentType fits the function that Enchantment has, and Enchantment as a name for InfoEnchantment fits because you can interpret the combination of type+level, e.g. "Sharpness II" as the actual enchantment.
Closes #1057.

Pretty sure I've got everything

Prospector: This isn't a map

Source code:

@Prospector please explain how your logic doesn't apply to state property. We need the two same stuff to follow the same rule than setting different rules for each of them, which will lead to maintenance hells like mojang's comparator level 15 redstone input hell

So before you guys go on answer this question real quick:

Object
The current class representation's name
Other representations(non-mojang classes in vanilla)
The name according to my logic
The name according to this pr's logic

Fortune II
InfoEnchantmentonly used when enchantments are added to item stacks via ench books or ench tables
Map.Entry<Enchantment, Integer>seen in EnchantmentHelper
EnchantmentsEntry
Enchantment

Fortune
Enchantment
(none)
Enchantment
EnchantmentType

"facing": "east"(in a block state json/nbt)
PropertiesEntryonly used in client data generator
Map.Entry<Propety, Comparable<?>> seen as just Map instead of used individually most of the time
PropertiesEntry
PAIR

"facing"the key of the thing above
Property
none
Property
KEY

Please give me an answer for PAIR and KEY.
I currently assume that you'd put Property for PAIR and PropertyType for KEY.
Guys, especially @2xsaiko who opened this pr, please post your answer. I find a logical fallacy in this pr if it doesn't ask for a name change for net.minecraft.state.property.Property.
Prospector answered Property for PAIR and PropertyKey for KEY.

No, I changed my answer after I thought about it more. PAIR should be something like StateComponent and KEY should be Property

Then same argument goes: we can have the enchantment pair as ItemStackComponent and the enchantment key as Enchantment. note that states have not only these key-value pairs but also a field for the block/fluid type's id. the item stack, holding enchantment pairs as one of its components, is similar, albeit it has a few more fields.

Key: Property. Like a Kotlin property, or the equivalent in Java, which is a field. Close enough.
Pair: Not sure, but I'm not a big fan of PropertiesEntry. I can't come up with something that I like right now.

we can have the enchantment pair as ItemStackComponent

No, we can't, since that's not its only use. It's also at least used in enchantment books as a standalone thing. And additionally that name is incredibly misleading.

Not at all, the enchantment pair is the enchantment. These are entirely unrelated and there is no reason to group things together.

This should really be ApplicableEnchantment

Another evidence for EnchantmentEntry:

@liach good point, but I think that it's Property that's named wrong. It should be PropertyType, and Property should be used for the class that actually stores the property.

guys, you need to think of the implications when someone puts your Enchantment into hashmap keys and cry "oh wtf this doesn't have hashcode/equals while it totally can and should have". Don't merge another #650 and bring another disaster to this project.

Actually, it makes sense for it to not have an equals method. The enchantments on two different items are different enchantments even if they have different levels and items.

according to your logic, two empty strings should not be equal if they are used to represent a suffix and a prefix. doesn't make sense to be. also this enchantment entry is not bound to item stacks at all

Also I have another doubt: what makes EnchantmentType better than EnchantmentKind or EnchantmentId, since the NBT is like Enchantments:[{id:"minecraft:protection", level: 1}]

Another conceptual question: If this enchantment entry becomes enchantment, then Mending II is considered different from Mending and won't trigger Mending logic if you just check the enchantment entry. That just... doesn't make sense.

Linking another argument from the other pr https://github.com/FabricMC/yarn/pull/1182#issuecomment-599152094
I am sorry for being quick-tempered when I see this pr had a lot of upvotes (because I think this change would be really harmful to modders who migrate)

Closing in favor of #1182


Automated Package Upgrade

:tada: This PR is included in version 25.4.53 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Adding Support for Non-blocking notifications.

Still need to test fully if this testing implementation is good.

Special thanks to @Leterax for implementing this.


Basalt doesn't install?

I'm not sure if it's a me issue but Basalt just refuses to install. I've looked at their discord server and bug issues and I've only seen a few people with a similar issues but they've all had them resolved with no more elaboration than "it works now" so it's frustrating.

here is a sc of the error I am getting

It seems that it is specific case. GeoMiner installer uses command wget run https://basalt.madefor.cc/install.lua packed taken from basalt's website. You can try to download basalt manually and then download GeoMiner by running wget https://raw.githubusercontent.com/MHDtA-dev/GeoMiner/main/GeoMiner.lua

Hi I forgot to update but I already did a manual install for both Basalt and Geominer, I think a day after.  Could you make a pull request?


Bulk-Create from file(s) not working

i was trying to using Bulk-Create from file(s) and nothing is showing up

Check #460 for a solution.


Cannot find name 'router'.

else{
| router.get('/make-payment', function(req, res) {
  | cca.makePayment(res); // It will redirect to ccavenue payment

What is router here?

router is object of server-js class


fetch data api in nuxt 3 using server

hi guys, my name is wisely i have an issue when im using useFetch in nuxt 3 for static my usefetch is accessed  public runtime config in nuxt config so the env files are exposed in client is there a way to access private runtime config in client nuxt or is there a way to use the useFetch to fetch it on the server and then on the client i just show the data i got from the generate this is my code can u see where im wrong
my idea is i split the useFetch in the server using private variable in nuxt config so it will fetch all data and fill the payload in dist after i npm run generate and i fill the payload with the data from usefetch server and if in the client i fill the artikelData  with the payload data
if (process.server) {
const { data: article } = await useFetch(endpoint, {
headers: {
Id: runTimeConfig.public.APP_ID,
Secret: runTimeConfig.public.APP_SECRET,
partner: runTimeConfig.public.PARTNER,
},
});
nuxtApp.payload.data = article.value;
artikelData = ref(nuxtApp.payload.data);
} else {
artikelData = nuxtApp.payload.data;
}
can u help me pleaseee?? tyyy

@gervasiuswisely in nuxt config https://nuxt.com/docs/api/composables/use-runtime-config#define-runtime-config you can set secret env

@gervasiuswisely You don't, hence "secret". I've explained that a bit more in detail in my video


Output to different folder and file after running with -r and DIFF=true

Hi,
Everything is great so far, just would like the output from -r with DIFF=true to be output in a file or different folder, I only see new subs in console. So everything new it finds would be in a folder called new-subs or something like that.
Thanks

From my POV I prefer to be notified about new findings but keeping the results in the same place/files/folders. But could be added as a feature in cfg like "DIFF_NEWFOLDER=true"

Thanks :)
Even a new line of subs in the same file will work too
ex:
sub.com
Sub1.com
New subs found /08-08-2021 ...
newsub.com
newsub1.com
New subs found /10-10-2021....
newersub.com
newersub1.com
etc....
Thanks.

The diff feature relies on anew tool to get the new assets found, so if we save the output in a different folder it will not compare against the original one :/ This requires a completely new "diff/compare mode" feature.


A promise is returned if no cb passed + error thrown when path is not a string

Note: this is a breaking change because of the error throwing

Coverage decreased (-1.2%) to 88.235% when pulling 19f32db8366e5ae6558f62363d7c526bb29196bf on zkochan:master into b256496bce7df9169bae8f33c0525db7e258dee7 on Kikobeats:master.

@zkochan released at 3.0.0 🎉 .


dlopen with RTLD_DEEPBIND causes crash

test.tar.gz
After spending good amount of time on a crash which originates from third party software which is complete blackbox, I finally understand what went wrong and I have created a tiny test case for it.
Steps to reproduce:
% untar
% make all TCMALLOC_STATIC_LIB=
% a.out
And it crashes like this
*** glibc detected *** ./a.out: free(): invalid pointer: 0x0000000001bc6018 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3250a75e5e]
/lib64/libc.so.6[0x3250a78cad]
./libtest.so(destroy+0x18)[0x7f7770afa1fb]
./a.out[0x4042e1]
/lib64/libc.so.6(__libc_start_main+0x100)[0x3250a1ed20]
./a.out[0x4040c9]
======= Memory map: ========
00400000-00403000 r--p 00000000 08:03 669993                             /tmp/small/a.out
00403000-00423000 r-xp 00003000 08:03 669993                             /tmp/small/a.out
00423000-00430000 r--p 00023000 08:03 669993                             /tmp/small/a.out
00431000-00432000 r--p 00030000 08:03 669993                             /tmp/small/a.out
00432000-00433000 rw-p 00031000 08:03 669993                             /tmp/small/a.out
00433000-005df000 rw-p 00000000 00:00 0
013b3000-01cd5000 rw-p 00000000 00:00 0                                  [heap]
3250600000-3250620000 r-xp 00000000 08:03 395074                         /lib64/ld-2.12.so
3250820000-3250821000 r--p 00020000 08:03 395074                         /lib64/ld-2.12.so
3250821000-3250822000 rw-p 00021000 08:03 395074                         /lib64/ld-2.12.so
3250822000-3250823000 rw-p 00000000 00:00 0
3250a00000-3250b8b000 r-xp 00000000 08:03 395091                         /lib64/libc-2.12.so
3250b8b000-3250d8a000 ---p 0018b000 08:03 395091                         /lib64/libc-2.12.so
3250d8a000-3250d8e000 r--p 0018a000 08:03 395091                         /lib64/libc-2.12.so
3250d8e000-3250d90000 rw-p 0018e000 08:03 395091                         /lib64/libc-2.12.so
3250d90000-3250d94000 rw-p 00000000 00:00 0
3250e00000-3250e17000 r-xp 00000000 08:03 426826                         /lib64/libpthread-2.12.so
3250e17000-3251017000 ---p 00017000 08:03 426826                         /lib64/libpthread-2.12.so
3251017000-3251018000 r--p 00017000 08:03 426826                         /lib64/libpthread-2.12.so
3251018000-3251019000 rw-p 00018000 08:03 426826                         /lib64/libpthread-2.12.so
3251019000-325101d000 rw-p 00000000 00:00 0
3251200000-3251202000 r-xp 00000000 08:03 426837                         /lib64/libdl-2.12.so
3251202000-3251402000 ---p 00002000 08:03 426837                         /lib64/libdl-2.12.so
3251402000-3251403000 r--p 00002000 08:03 426837                         /lib64/libdl-2.12.so
3251403000-3251404000 rw-p 00003000 08:03 426837                         /lib64/libdl-2.12.so
3251e00000-3251e83000 r-xp 00000000 08:03 426839                         /lib64/libm-2.12.so
3251e83000-3252082000 ---p 00083000 08:03 426839                         /lib64/libm-2.12.so
3252082000-3252083000 r--p 00082000 08:03 426839                         /lib64/libm-2.12.so
3252083000-3252084000 rw-p 00083000 08:03 426839                         /lib64/libm-2.12.so
3255200000-3255216000 r-xp 00000000 08:03 426840                         /lib64/libgcc_s-4.4.7-20120601.so.1
3255216000-3255415000 ---p 00016000 08:03 426840                         /lib64/libgcc_s-4.4.7-20120601.so.1
3255415000-3255416000 rw-p 00015000 08:03 426840                         /lib64/libgcc_s-4.4.7-20120601.so.1
7f7770744000-7f7770749000 rw-p 00000000 00:00 0
7f7770749000-7f77708d1000 r-xp 00000000 00:23 1837379                    /tool/gcc/8.3.0/lib64/libstdc++.so.6.0.25
7f77708d1000-7f7770ad0000 ---p 00188000 00:23 1837379                    /tool/gcc/8.3.0/lib64/libstdc++.so.6.0.25
7f7770ad0000-7f7770adb000 r--p 00187000 00:23 1837379                    /tool/gcc/8.3.0/lib64/libstdc++.so.6.0.25
7f7770adb000-7f7770add000 rw-p 00192000 00:23 1837379                    /tool/gcc/8.3.0/lib64/libstdc++.so.6.0.25
7f7770add000-7f7770ae2000 rw-p 00000000 00:00 0
7f7770af8000-7f7770af9000 rw-p 00000000 00:00 0
7f7770af9000-7f7770afa000 r--p 00000000 08:03 669992                     /tmp/small/libtest.so
7f7770afa000-7f7770afb000 r-xp 00001000 08:03 669992                     /tmp/small/libtest.so
7f7770afb000-7f7770afc000 r--p 00002000 08:03 669992                     /tmp/small/libtest.so
7f7770afc000-7f7770afd000 r--p 00002000 08:03 669992                     /tmp/small/libtest.so
7f7770afd000-7f7770afe000 rw-p 00003000 08:03 669992                     /tmp/small/libtest.so
7f7770afe000-7f7770aff000 rw-p 00000000 00:00 0
7ffc3fc25000-7ffc3fc3a000 rw-p 00000000 00:00 0                          [stack]
7ffc3fcdc000-7ffc3fcdd000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Abort

Reason for crash is that malloc/free definition from shared library libtest.so comes from libc.so while malloc definition from shared library libc.so (for strdup) comes from tcmalloc, and when libc free tries to free tc alloced block, it crashes.
In my opinion, all malloc/free should have come from tcmalloc and there would have been no problem whatsoever.

Now, when I know this issue, it looks like others have also faced it with other memory manager (jemalloc) and it seems like jemalloc has fix for it (I verified it on small test and it works and works as I suggested earlier)

Thanks for report. Notably that mozilla ticket is 11 years old. Also glibc has deprecated those hooks long time ago.
So gperftools dropped usage of those hooks in this commit: 7822b5b0b9fa7e016e1f6b46ea86f26f4691a457
So I am not sure how to help you, maybe don't use RTLD_DEEPBIND ?

Thanks for your comment.

So I am not sure how to help you, maybe don't use RTLD_DEEPBIND ?

What you see is a small hand-crafted test case after debugging crash which involves third party licensing library code which obfuscates debugging symbols. And this RTLD_DEEPBIND comes from inside third party code.
For this problem, malloc hooks appear to be the only way to fix this problem (if RTLD_DEEPBIND has to stay).

I understand. Thing is, glibc folks promised they'll soon shoot glibc's hooks.

Any suggestions how to make progress on this issue ?

There are two solutions:

Use a single malloc e.g. tcmalloc as the malloc for the entire application i.e. don't mix allocators.
Do not leak pointers between malloc implementations.

These are advanced topics for application design, and you cannot assume that you can freely change allocators like this or use RTLD_DEEPBIND without carefully architecting the application.
While glibc makes it possible to replace the system allocator it doesn't mean that this will work in all conceivable scenarios without additional design work. Likewise dlmopen can cause similar problems with namespaces leaking pointers from different allocators.

Use a single malloc e.g. tcmalloc as the malloc for the entire application i.e. don't mix allocators.

Can you please explain it ? Please note that I intend to use tcmalloc as the "malloc" for entire application but there is a third party software which calls dlopen with RTLD_DEEPBIND and calls glibc pt malloc. It's clear that even tcmalloc would have worked fine but just because of DEEPBIND it gets malloc from glibc.

Do not leak pointers between malloc implementations.

My earlier comment applies to this point as well; I don't want to switch memory managers but I need some way to force it. I can't change third party software.


"section navigation" only working for favorite projects/labels/filters

The navigation for different sections has stopped working except for labels and filters that aren't in favorites. I am using the beta version 1043 of the browser app in google chrome.

Thanks for reporting!  I believe this is fixed in version 113


Hingorani casas importer

When I run the importer, I get the following messages.

Starting import!
Skipping presumed header line in /Users/kcotto/Documents/Hingorani_Casas_genes...
Clearing cache
Done.
Process finished with exit code 0

It looks as though there is a change to the data directory but when I look at the local version of the database, the source is not seen.

@acoffman This is the issue I mentioned during our working group yesterday

@kcotto Awesome, thanks, I'll take a look!

 Finish DGIdb PRs

This PR fixes #175.


perf: create/close window and changing tiling layout significantly slower then other actions?

Already reported ? *

[X] I have searched the existing open and closed issues.

Regression?
Yes, No
System Info and Version
 System/Version info
Hyprland 0.45.0 built from branch feat/input-capture-impl at commit a7138aede9490781648226e016a1fcdb5c1391c0  ().
Date: Sat Dec 14 16:36:32 2024
Tag: v0.45.0-118-ga7138aed, commits: 5551
built against:
 aquamarine 0.4.5
 hyprlang 0.5.2
 hyprutils 0.2.6
 hyprcursor 0.1.9
 hyprgraphics 0.1.1

flags set:
debug

System Information:
System name: Linux
Node name: Arch-Linux
Release: 6.12.4-zen1-1-zen
Version: #1 ZEN SMP PREEMPT_DYNAMIC Mon, 09 Dec 2024 14:30:31 +0000

GPU information:
00:02.0 VGA compatible controller [0300]: Intel Corporation Raptor Lake-S GT1 [UHD Graphics 770] [8086:a780] (rev 04) (prog-if 00 [VGA controller])
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD103 [GeForce RTX 4080 SUPER] [10de:2702] (rev a1) (prog-if 00 [VGA controller])
NVRM version: NVIDIA UNIX x86_64 Kernel Module  565.77  Wed Nov 27 23:33:08 UTC 2024

os-release: NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo

plugins:

======Config-Start======

Config File: /home/system/.config/hypr/hyprland.conf: Read Succeeded
################
### MONITORS ###
################

# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,highres@highrr,auto,auto # ,bitdepth,10
# monitor=,preferred,auto,auto,bitdepth,10

###################
### MY PROGRAMS ###
###################

# Program defaults
$terminal = alacritty
$termfloat = [float; size 40% 40%; workspace +0] alacritty
$editor = lvim
# $browser = thorium-browser
$browser = zen-browser
$fileManager = thunar
$sessionManager = sddm
$menu = rofi -i -dmenu -theme $HOME/.config/rofi/configs.rasi

# Dirs
$HYPRDIR = $HOME/.config/hypr
$WAYBARDIR = $HOME/.config/waybar
$SCRIPTSDIR = $HOME/scripts
$rofiexec = $HOME/.config/rofi/scripts

# global vars
$outer_gaps = 12

source = $HYPRDIR/colors.conf

# misc
$waylandarg = --enable-features=WaylandWindowDecorations,UseOzonePlatform --ozone-platform-hint=auto --enable-wayland-ime

#####################
### LOOK AND FEEL ###
#####################

# Refer to https://wiki.hyprland.org/Configuring/Variables/

# https://wiki.hyprland.org/Configuring/Variables/#general
general {
    gaps_in = 3
    gaps_out = 7
    border_size = 3

    # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
    # col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg # DO THIS LATER
    # col.inactive_border = rgba(595959aa)
    # col.active_border = rgb(00a7f5) rgb(538620) rgb(538620) rgb(00a7f5) 90deg
    # col.inactive_border = rgb(00a7f5) rgb(538620) rgb(538620) rgb(00a7f5) 90deg
    # col.active_border = rgb(00a7f5) rgb(538620)
    # col.inactive_border = rgb(00a7f5) rgb(538620)
    col.inactive_border = $background
    col.active_border = $color15 $color13 $color10 $color8 $color6 $color4 $color2 $color0 # 45deg

    # Set to true enable resizing windows by clicking and dragging on borders and gaps
    resize_on_border = false

    # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
    allow_tearing = true

    layout = dwindle
    snap {
        enabled = true
        # border_overlap = false
    }
}

xwayland {
  force_zero_scaling = true
}

# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
    rounding = 7

    # Change transparency of focused and unfocused windows
    active_opacity = 0.95
    inactive_opacity = 0.85
    fullscreen_opacity = 1.0

    shadow {
        enabled = true
        range = 15
        render_power = 4
        # sharp = true
        ignore_window = true
        color = $background
        # color = rgba(1a1a1aee)
    }
    screen_shader = /usr/share/hyprshade/shaders/vibrance.glsl

    # dim_inactive = true
    # dim_strength = 0.4

    # https://wiki.hyprland.org/Configuring/Variables/#blur
    blur {
        enabled = true
        size = 6
        passes = 3
        # vibrancy = 1
        popups = true
        ignore_opacity = true # KEEP THIS, THIS MAKE BLUR ACTUALLY BLUR COOL
        # input_methods = true # broken rn
    }
}

# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
    enabled = true

    # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

    bezier = windowovershot, 1, 1, 0, 1.05
    bezier = overshot, 0.5, 1, 0, 1.2
    # bezier = outsideIn, 0.5, 1.1, 0, 0.9
    bezier = slow-fast, 1, 0.33, 0.3, 1
    bezier = fast-slow, 0.33, 0.8, 0, 1
    bezier = linear, 0, 0, 1, 1
    # bezier = linear, 0, 0, 1, 1
    # bezier = md3_standard, 0.2, 0, 0, 1
    bezier = md3_decel, 0.05, 0.7, 0.1, 1
    # bezier = md3_accel, 0.3, 0, 0.8, 0.15
    # bezier = overshot, 0.05, 0.9, 0.1, 1.1
    # bezier = crazyshot, 0.1, 1.5, 0.76, 0.92
    # bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
    # bezier = menu_decel, 0.1, 1, 0, 1
    # bezier = menu_accel, 0.38, 0.04, 1, 0.07
    # bezier = easeInOutCirc, 0.85, 0, 0.15, 1
    # bezier = easeOutCirc, 0, 0.55, 0.45, 1
    # bezier = easeOutExpo, 0.16, 1, 0.3, 1
    # bezier = softAcDecel, 0.26, 0.26, 0.15, 1
    # bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration

    animation = fade, 1, 4, md3_decel

    animation = windows, 1, 3, overshot, slide
    # animation = windowsOut, 1, 2, slow-fast, popin 15%
    animation = windowsOut, 1, 2, slow-fast, popin 15%
    # animation = windowsMove, 1, 2, md3_accel # when new window appears, it will block it for a while since its slower then windowIn animation
    animation = workspaces, 1, 6, fast-slow, slide
    animation = workspacesIn, 1, 6, fast-slow, slidefade
    animation = borderangle, 1, 100, linear, loop
}

# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
    pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = true # You probably want this
    force_split = 3
}

master {
    new_status = inherit
}

# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
    force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers
    focus_on_activate = true
    disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
    # vfr = false
    # vrr = 1 # 1 = always, 2 = only in full screen
    mouse_move_enables_dpms = true
    key_press_enables_dpms = true
    # animate_manual_resizes = true
    # animate_mouse_windowdragging = true
    middle_click_paste = false
    enable_swallow = false # true
    swallow_regex = ^(Alacritty)$
    new_window_takes_over_fullscreen = 2
}

group {
    groupbar {
        # enabled = false
        render_titles = false
        text_color = $foreground
        col.active = $color0
        col.inactive = $background
        col.locked_active = $color0
        col.locked_inactive = $background
    }
    col.border_active = $color0 $color15 $foreground $cursor
    col.border_inactive = $background
    col.border_locked_active = $color0 $background
    col.border_locked_inactive = $background
}

# binds {
    # workspace_back_and_forth = true
# }

render {
    explicit_sync = 1
    explicit_sync_kms = 1
    direct_scanout = true
}

opengl {
    # nvidia_anti_flicker = false
    # force_introspection = 0
}

#############
### INPUT ###
#############

# https://wiki.hyprland.org/Configuring/Variables/#input
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options =
    kb_rules =

    follow_mouse = 1
    # scroll_factor = 1.0

    # sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
    numlock_by_default = true
    repeat_delay = 300
    # touchpad {
    #     natural_scroll = false
    # }
}

cursor {
    use_cpu_buffer = true
    # no_hardware_cursors = false
    no_break_fs_vrr = true
    # zoom_rigid = true
    persistent_warps = true
}

plugin {
    overview {
        enabled = true
        disableGestures = true
        panelHeight = 150
    }
    # hyprfocus {
    #     enabled = yes
    #     focus_animation = shrink
    #     animate_floating = yes
    #     animate_worksapcechange = yes
    # }
    dynamic-cursors {
        mode = stretch
        shake {
            effects = true
        }
        shaperule = text, none
        # shaperule = clientside, none
    }
    # chromakey_background = $background
    # hy3 {
    #     # disable gaps when only one window is onscreen
    #     # 0 - always show gaps
    #     # 1 - hide gaps with a single window onscreen
    #     # 2 - 1 but also show the window border
    #     # no_gaps_when_only = <int> # default: 0

    #     # policy controlling what happens when a node is removed from a group,
    #     # leaving only a group
    #     # 0 = remove the nested group
    #     # 1 = keep the nested group
    #     # 2 = keep the nested group only if its parent is a tab group
    #     # node_collapse_policy = <int> # default: 2

    #     # offset from group split direction when only one window is in a group
    #     # group_inset = <int> # default: 10

    #     # if a tab group will automatically be created for the first window spawned in a workspace
    #     # tab_first_window = <bool>

    #     # tab group settings
    #     tabs {
    #       # height of the tab bar
    #       # height = <int> # default: 15

    #       # padding between the tab bar and its focused node
    #       # padding = <int> # default: 5

    #       # the tab bar should animate in/out from the top instead of below the window
    #       # from_top = <bool> # default: false

    #       # rounding of tab bar corners
    #       # rounding = <int> # default: 3

    #       # render the window title on the bar
    #       # render_text = <bool> # default: true

    #       # center the window title
    #       # text_center = <bool> # default: false

    #       # font to render the window title with
    #       # text_font = <string> # default: Sans

    #       # height of the window title
    #       # text_height = <int> # default: 8

    #       # left padding of the window title
    #       # text_padding = <int> # default: 3

    #       # active tab bar segment color
    #       # col.active = <color> # default: 0xff32b4ff

    #       # urgent tab bar segment color
    #       # col.urgent = <color> # default: 0xffff4f4f

    #       # inactive tab bar segment color
    #       # col.inactive = <color> # default: 0x80808080

    #       # active tab bar text color
    #       # col.text.active = <color> # default: 0xff000000

    #       # urgent tab bar text color
    #       # col.text.urgent = <color> # default: 0xff000000

    #       # inactive tab bar text color
    #       # col.text.inactive = <color> # default: 0xff000000
    #     }

    #     # autotiling settings
    #     autotile {
    #       # enable autotile
    #       # enable = <bool> # default: false

    #       # make autotile-created groups ephemeral
    #       # ephemeral_groups = <bool> # default: true

    #       # if a window would be squished smaller than this width, a vertical split will be created
    #       # -1 = never automatically split vertically
    #       # 0 = always automatically split vertically
    #       # <number> = pixel height to split at
    #       # trigger_width = <int> # default: 0

    #       # if a window would be squished smaller than this height, a horizontal split will be created
    #       # -1 = never automatically split horizontally
    #       # 0 = always automatically split horizontally
    #       # <number> = pixel height to split at
    #       # trigger_height = <int> # default: 0

    #       # a space or comma separated list of workspace ids where autotile should be enabled
    #       # it's possible to create an exception rule by prefixing the definition with "not:"
    #       # workspaces = 1,2 # autotiling will only be enabled on workspaces 1 and 2
    #       # workspaces = not:1,2 # autotiling will be enabled on all workspaces except 1 and 2
    #       # workspaces = <string> # default: all
    #     }
    # }
    # hyprwinwrap {
    #     class = winwrap
    # }
}

source = ~/.config/hypr/env.conf
source = ~/.config/hypr/rules.conf
source = ~/.config/hypr/binds.conf
source = ~/.config/hypr/autostart.conf

debug {
    # disable_logs = false
    # overlay = true # show fps
    suppress_errors = true
    error_position = 1
}

Config File: /home/system/.config/hypr/colors.conf: Read Succeeded
$wallpaper = /home/system/.cache/palm-tree-at-sunset.3840x2160.mp4.png
$background = rgb(10130F)
$foreground = rgb(E1FFFB)
$cursor = rgb(E1FFFB)
$color0 = rgb(383A37)
$color1 = rgb(2D0200)
$color2 = rgb(EB3859)
$color3 = rgb(EF5793)
$color4 = rgb(1EB3F6)
$color5 = rgb(FFDBFE)
$color6 = rgb(ABFFF5)
$color7 = rgb(CCF7F1)
$color8 = rgb(8FADA9)
$color9 = rgb(2D0200)
$color10 = rgb(EB3859)
$color11 = rgb(EF5793)
$color12 = rgb(1EB3F6)
$color13 = rgb(FFDBFE)
$color14 = rgb(ABFFF5)
$color15 = rgb(CCF7F1)

Config File: /home/system/.config/hypr/env.conf: Read Succeeded
#############################
### ENVIRONMENT VARIABLES ###
#############################

# See https://wiki.hyprland.org/Configuring/Environment-variables/

env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = HYPRCURSOR_THEME,Bibata-Rainbow-Modern

# Nvidia
env = LIBVA_DRIVER_NAME,nvidia
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
# env = __GL_GSYNC_ALLOWED,1
env = VDPAU_DRIVER,nvidia
env = NVD_BACKEND,direct
# just in case if it tried to use igpu for hardware accel
# env = AQ_DRM_DEVICES,/dev/dri/card1:/dev/dri/card0

# XDG
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland

# QT
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
# env = QT_QPA_PLATFORM=wayland;xcb    # Not yet working for onlyoffice-editor
env = QT_QPA_PLATFORM = xcb
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_QPA_PLATFORMTHEME,qt6ct
# env = SDL_VIDEODRIVER,wayland
# java fix
env = _JAVA_AWT_WM_NONREPARENTING,1

# Scale
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
# env = GDK_DPI_SCALE,1.5
# env = QT_SCALE_FACTOR,2
# Electron blurry etc fix
env = ELECTRON_OZONE_PLATFORM_HINT,auto

# Input method
# env = GTK_IM_MODULE,fcitx
env = QT_IM_MODULE,fcitx
env = QT_IM_MODULES,wayland;fcitx;ibus
env = XMODIFIERS,@im=fcitx
env = SDL_IM_MODULE,fcitx
env = GLFW_IM_MODULE,fcitx
env = INPUT_METHOD,fcitx
env = XMODIFIERS,fcitx
env = IMSETTINGS_MODULE,fcitx

# wine
env = WINEPREFIX, /opt/windows.wine

# howdy avoid spam from gstreamer
env = OPENCV_LOG_LEVEL, ERROR

# temp fix for gtk apps seg fault
# env = GSK_RENDERER, ngl

# Toolkit backend
env = GDK_BACKEND,wayland,x11,*
env = QT_QPA_PLATFORM,wayland;xcb
env = SDL_VIDEODRIVER,wayland # Remove or set to x11 if games that provide older versions of SDL cause compatibility issues

# QT
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_QPA_PLATFORM,wayland;xcb

# firefox
env = MOZ_DISABLE_RDD_SANDBOX, 1
env = MOZ_ENABLE_WAYLAND,1

Config File: /home/system/.config/hypr/rules.conf: Read Succeeded
##############################
### WINDOWS AND WORKSPACES ###
##############################

# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules

# Tag
# workspaces
windowrulev2 = workspace 1, tag:terminal
windowrulev2 = workspace 2, tag:web
windowrulev2 = workspace 3, tag:file
windowrulev2 = workspace 4, tag:code
windowrulev2 = workspace 5, tag:office
windowrulev2 = workspace 6, tag:communication
windowrulev2 = workspace 7, tag:media
windowrulev2 = workspace 8, tag:games
windowrulev2 = workspace 9, tag:system
windowrulev2 = workspace 10, tag:misc

# GUI Utils
windowrulev2 = opacity 0.85 0.75, tag:gui-utils
windowrulev2 = pin, tag:gui-utils
windowrulev2 = size 53% 60%, tag:gui-utils
windowrulev2 = move 46.5% 4.8%, tag:gui-utils
windowrulev2 = animation slide right top, tag:gui-utils

# media contents
windowrulev2 = float, tag:media-contents
windowrulev2 = pin, tag:media-contents
windowrulev2 = move 100%-w-$outer_gaps, tag:media-contents
windowrulev2 = noinitialfocus, tag:media-contents
windowrulev2 = noshadow, tag:media-contents
windowrulev2 = keepaspectratio, tag:media-contents
# It grabs our focus when it change video
windowrulev2 = suppressevent activatefocus, tag:media-contents

# fake fullscreen
windowrulev2 = fullscreenstate 0 2, tag:fakefullscreen

# Games
windowrulev2 = fullscreen, tag:games
# Tearing (for better gaming performance)
windowrulev2 = immediate, tag:games

# time-sensitive app rules
windowrulev2 = stayfocused, tag:time-sensitive
windowrulev2 = pin, tag:time-sensitive
windowrulev2 = dimaround, tag:time-sensitive
windowrulev2 = center, tag:time-sensitive
windowrulev2 = float, tag:time-sensitive

# cli util apps
windowrulev2 = float, tag:cli-utils
windowrulev2 = pin, tag:cli-utils
windowrulev2 = dimaround, tag:cli-utils

# hidden
windowrulev2 = movetoworkspacesilent, special:minimized, tag:hidden

# Group
# windowrule = group, ^virt-manager$

# Terminal applications
windowrulev2 = tag +terminal, class:^(Alacritty|Xfce4-terminal|Kitty)$

# Web browsers
windowrulev2 = tag +web, class:^($browser|Brave-browser|chromium|firefox|thorium|zen-alpha)$

# File managers
windowrulev2 = tag +file, class:^($fileManager|Pcmanfm|Thunar|qBittorrent|Caja)$

# Code editors
windowrulev2 = tag +code, class:^(Geany|code|code-url-handler|cursor-url-handler|code-oss|Code - OSS|install4j-burp-StartBurp|burp-StartBurp|Unity|jetbrains-pycharm-ce|Postman|jetbrains-clion)$

# Office applications
windowrulev2 = tag +office, class:^(Gucharmap|Atril|Evince|LibreOffice.*|libreoffice.*|Soffice|Typora|obsidian|figma-linux|anytype|craft-nativefier-e0958b|evince|ClickUp)$

# Communication apps
windowrulev2 = tag +communication, class:^(Thunderbird|TelegramDesktop|Hexchat|discord|vesktop|VencordDesktop|Chat-gpt|Whatsapp-for-linux|Chatbox)$

# Media applications
windowrulev2 = tag +media, class:^(Audacity|Music|MPlayer|Lxmusic|Inkscape|Gimp|Blender|obs|zoom|Zoom|Pitivi|kdenlive|openshot|vlc|cider|Cider|shotwell|Shotwell|fr.handbrake.ghb|Spotify)$

# Games
windowrulev2 = tag +games, class:^(Minecraft|Badlion|War|steam_proton|steam|csgo_linux64|cs2|minecraft-launcher|lutris|genshinimpact.exe|moe.launcher.an-anime-game-launcher|lunarclient|Lunar Client.*|zenlesszonezero.exe|moe.launcher.sleepy-launcher|org.vinegarhq.Sober)$
windowrule = tag +games, title:.*\.exe

# System/Settings applications
windowrulev2 = tag +system, class:^(virt-manager|blueman-adapters|GParted|Xdm-app|timeshift-gtk|com.nextcloud.desktopclient.nextcloud|gearlever|Lxappearance|Lxtask|Lxrandr|Arandr|System-config-printer.py|Pavucontrol|Exo-helper-1|Protonvpn|Xfce4-power-manager-settings|Mysql-workbench-bin|Grub-customizer|Nitrogen|archlinux-tweak-tool.py|pamac-manager|helvum|Vmware|btrfs-assistant|Bitwarden|wootility-lekker|nwg-look|com.github.wwmm.easyeffects|kvantummanager)$

# Miscellaneous applications
windowrulev2 = tag +misc, class:^(maxautoclicker|os_server|Os_server)$

# floating applications
windowrulev2 = float, class:^(Pcmanfm|Onboard|Yad|zoom|Xdm-app|wechat|WeChat|sxiv|Sxiv|Firefox:Places|Viewnior|feh|Nm-connection-editor|install4j-burp-StartBurp|thorium-app.shortwave.com__-Default|thorium-mdpkiolbdkhdjpekfbkbmhigcaggjagi-Profile_1|float|thorium-lnachpgegbbmnnlgpokibfjlmppeciah-Default|Beeper|electron|com.github.rafostar.Clapper)|Sign in – Google accounts$
windowrulev2 = float, title:^(Steam Settings)$

# pin apps
windowrulev2 = pin, title:^(zoom_linux_float_video_window)$

# specificly sized
# windowrulev2 = size 40% 40%, class:^(alacritty-float)$

# Sticky applicationsp

# App that have menu on top for stayfocused, without this, menus will dissappear when you move ur mouse
windowrulev2 = stayfocused, title:(menu)

# GUI Utils applications
windowrulev2 = tag +gui-utils, class:^(thorium-app.shortwave.com__-Default|thorium-mdpkiolbdkhdjpekfbkbmhigcaggjagi-Profile_1|thorium-lnachpgegbbmnnlgpokibfjlmppeciah-Default|Beeper)$
windowrulev2 = animation slide right top, tag:gui-utils

# bitwarden chrome extension popup
windowrulev2 = pin, class:^(thorium-nngceckbapebfimnlniiiahkandclblb-Default)$
windowrulev2 = float, class:^(thorium-nngceckbapebfimnlniiiahkandclblb-Default)$
windowrulev2 = stayfocused, class:^(thorium-nngceckbapebfimnlniiiahkandclblb-Default)$

# firefox
windowrulev2 = float, title:^Extension

# for media contents
windowrulev2 = tag +media-contents, class:^(blobdrop|dragon)$
# PIP
windowrulev2 = tag +media-contents, title:^(Picture-in-Picture)$
windowrulev2 = size 25% 25%, title:^(Picture-in-Picture)$

# removes title/border
windowrulev2 = tag +fakefullscreen, class:^(thorium-mdpkiolbdkhdjpekfbkbmhigcaggjagi-Profile_1|thorium-lnachpgegbbmnnlgpokibfjlmppeciah-Default)

# Full screen applications
# time-sensitive app rules
windowrulev2 = tag +time-sensitive, class:^(org.freedesktop.impl.portal.desktop.kde|polkit-gnome-authentication-agent-1|pinentry-|xdg-desktop-portal.*|hyprland-share-picker.*|gcr-prompter|io.missioncenter.MissionCenter)$
windowrulev2 = tag +time-sensitive, title:^(Open File|Open|Select a File|Choose wallpaper|Open Folder|Save As|Save File|Library|File Upload|.*- Properties)$
windowrulev2 = dimaround, tag:time-sensitive

# rofi
# windowrulev2 = float, class:^(Rofi)
# windowrulev2 = pin, class:^(Rofi)
# windowrulev2 = dimaround, class:^(Rofi)
# util apps
windowrulev2 = tag +cli-utils, title:^(nmd|cliphist|pulsemixer|ranger|btop)$
windowrulev2 = dimaround, tag:cli-utils
windowrulev2 = stayfocused, title:^(btop)$

# windowrulev2 = stayfocused, title:^(rofi - Command|rofi - Confirmation|rofi - ArchLinux (hyprland))

# No shadow for tiled window
windowrulev2 = noshadow,floating:0

# Opacity rules
# windowrule = opacity 0.89 override 0.89 override, .* set in decoration
# windowrulev2 = opacity 0.95 0.90, class:.+
windowrulev2 = opacity 0.85 0.75, class:^code-oss$
windowrulev2 = opacity 0.85 0.75, class:^code$
windowrulev2 = opacity 0.85 0.75, class:^code-url-handler$
windowrulev2 = opacity 0.85 0.75, class:^cursor-url-handler$
windowrulev2 = opacity 1.00 0.90, class:^TelegramDesktop$
windowrulev2 = opacity 0.90 0.80, class:^Spotify$
windowrulev2 = opacity 0.90 0.80, class:^Cider$
windowrulev2 = opacity 0.50 0.40, class:^fcitx$
windowrulev2 = opacity 0.90 0.80, class:^Brave-browser$
windowrulev2 = opacity 0.90 0.80, class:^thunar$
windowrulev2 = opacity 0.85 0.75, class:^discord$
windowrulev2 = opacity 0.90 0.80, class:^Caja$
windowrulev2 = opacity 0.80 0.70, class:^polkit-gnome-authentication-agent-1$
windowrulev2 = opacity 0.80 0.70, title:^Open$
windowrulev2 = opacity 0.8 0.5, title:^New Tab - Thorium$
# windowrulev2 = ignorezero, title:Annotation - Zoom

# Full screen no idle
windowrulev2 = idleinhibit fullscren, class:.*

# no blurs
windowrulev2 = noblur, title:^(Annotation - Zoom)$

# Layer rules/blur
layerrule = blurpopups

layerrule = blur, rofi
layerrule = ignorezero, rofi
layerrule = dimaround, rofi
layerrule = animation popin 65%, rofi

layerrule = blur,notifications
layerrule = ignorezero,notifications
layerrule = blur,swaync-notification-window
layerrule = ignorezero,swaync-notification-window
layerrule = blur,swaync-control-center
layerrule = animation slide right,swaync-notification-window
layerrule = animation slide right,swaync-control-center
layerrule = ignorezero,swaync-control-center

layerrule = blur,logout_dialog

layerrule = blur, waybar
layerrule = ignorezero, waybar

layerrule = blur, syshud
layerrule = ignorezero, syshud
# layerrule = blur,$browser

# Misc

# xwaylandvideobridge
windowrulev2 = opacity 0.0 override, class:^(xwaylandvideobridge)$
windowrulev2 = noanim, class:^(xwaylandvideobridge)$
windowrulev2 = noinitialfocus, class:^(xwaylandvideobridge)$
windowrulev2 = maxsize 1 1, class:^(xwaylandvideobridge)$
windowrulev2 = noblur, class:^(xwaylandvideobridge)$

# Roblox join private server
windowrulev2 = float, title:^(Join Friends)$ class:^(org.vinegarhq.Sober)$

# No transparency for fullscreen windows
windowrulev2 = plugin:chromakey,fullscreen:0

# Ignore maximize requests from apps. You'll probably like this.
windowrulev2 = suppressevent maximize, class:.*
# Fix some dragging issues with XWayland
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0

# workspace = w[tv1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]

Config File: /home/system/.config/hypr/binds.conf: Read Succeeded
####################
### KEYBINDINGSS ###
####################

binds {
#     allow_workspace_cycles = yes
      # movefocus_cycles_fullscreen = true
    allow_pin_fullscreen = true
}

# See https://wiki.hyprland.org/Configuring/Keywords/
$mod = SUPER # Sets "SUPER" key as main modifier

# Launching...
bind = $mod, return, execr, $terminal
bind = $mod shift, return, exec, $termfloat
# bind = $mod space, return, execr, $terminal start --class pseudo
bind = $mod alt, Delete, execr, $rofiexec/rofi_powermenu
bind = alt, F1, execr, $rofiexec/rofi_launcher
bind = alt, F2, execr, $rofiexec/rofi_runner
bind = alt, F3, execr, $rofiexec/sgpt
bind = $mod, period, execr, $rofiexec/rofi_emoji
# utils
bind = $mod, c, execr, $rofiexec/rofi_configs
bind = $mod, m, execr, $rofiexec/rofi_music
bind = $mod, n, execr, nmd
bind = $mod, r, execr, $rofiexec/rofi_asroot
# bind = $mod, s, execr, $rofiexec/rofi_screenshot
bind = $mod, v, execr, $rofiexec/rofi_clipboard
bind = $mod, w, execr, $rofiexec/rofi_windows
bind = $mod, x, execr, $rofiexec/rofi_powermenu
bind = $mod, b, execr, $rofiexec/rofi_bluetooth
# GUI
bind = $mod shift, f, execr, $fileManager
# bind = $mod shift, w, execr, $browser --restore-last-session
bind = $mod shift, w, execr, $browser # -new-tab about:sessionrestore
bind = $mod shift, e, execr, code
bind = $mod shift, d, execr, discord $waylandarg
bind = $mod shift, b, execr, beeper $waylandarg
# CLI
bind = ctrl alt, a, exec, $termfloat -T pulsemixer -e pulsemixer
bind = ctrl alt, r, exec, $termfloat -T ranger -e ranger
bind = ctrl alt, v, exec, $termfloat -e $editor

# Emergency
bindtp = ctrl alt, b, exec, $termfloat -T btop -e sudo nice -n -20 ionice -c 1 sudo btop
bindtp = ctrl alt, delete, execr, $rofiexec/rofi_shutdown_menu
bindtp = ctrl shift, escape, execr, missioncenter

# Misc
# bind = ctrl alt, m, execr, music
bind = $mod, p, execr, hyprpicker --autocopy
bindtp = ctrl alt, l, execr, loginctl lock-session
# Misc
bind = $mod shift, g, execr, gtk-launch shortwave.desktop
# bind = $mod shift, c, execr, gtk-launch google-chat.desktop

# XF86 keys & Misc
bind = ,XF86Print, execr, pidof slurp || $HOME/scripts/sysutil.sh screenshot --now
bind = alt, XF86AudioMute, execr, $HOME/scripts/sysutil.sh screenshot --in5sec
bind = $mod shift, s, execr, $HOME/scripts/sysutil.sh screenshot --area

# Volume
binde = ,XF86AudioRaiseVolume, execr, $HOME/scripts/sysutil.sh volume --inc
binde = ,XF86AudioLowerVolume, execr, $HOME/scripts/sysutil.sh volume --dec
bind = ,XF86AudioMute, execr, $HOME/scripts/sysutil.sh volume --toggle
bind = ,XF86AudioMicMute, execr, $HOME/scripts/sysutil.sh volume --toggle-mic
bind = ,XF86AudioNext, execr, playerctl position 5+
bindo = ,XF86AudioNext, execr, playerctl -p spotify next
bind = ,XF86AudioPrev, execr, playerctl position 5-
bindo = ,XF86AudioPrev, execr, playerctl -p spotify previous
bindl = ,XF86AudioPlay, exec, [workspace 7 silent; noinitialfocus] $HOME/scripts/play-pause.sh || LD_PRELOAD=/usr/lib/spotify-adblock.so spotify
bind = ,XF86AudioStop, execr, playerctl -p spotify stop
bind = ,XF86PowerOff, execr, $rofiexec/rofi_shutdown

# Pause
bind = ,Pause, execr, hyprfreeze -s -a

# Print
bind = ,Print, execr, $HOME/scripts/hyprshot --now

# Brightness
bind = ,XF86MonBrightnessUp, execr, $HOME/scripts/sysutil.sh brightness --inc
bind = ,XF86MonBrightnessDown, execr, $HOME/scripts/sysutil.sh brightness --dec

# Window management
# bind = $mod, d, execr, $HOME/scripts/hyprhide h
# bind = $mod, i, execr, $HOME/scripts/hyprhide s
bind = $mod, d, movetoworkspacesilent, special:minimized
bind = $mod, i, togglespecialworkspace, minimized
bind = $mod, i, movetoworkspace, +0
bind = $mod, q, killactive
bind = $mod shift, q, execr, kill -9 $(hyprctl activewindow | grep pid | tail -1 | awk '{print$2}')
bind = ctrl alt, escape, execr, hyprctl kill
bind = ctrl $mod shift, r, execr, systemctl restart $sessionManager
# restart bar
bind = ctrl $mod, escape, execr, killall -SIGUSR2 waybar || waybar &
# reload wall
bind = $mod alt, b, execr, killall wallust; killall mpvpaper.sh; $SCRIPTSDIR/mpvpaper.sh
# bind = ctrl, up, hyprexpo:expo, on
# bind = ctrl, down, hyprexpo:expo, off
bind = ctrl $mod alt, up, overview:open
bind = ctrl $mod alt, down, overview:close
# bind = alt, tab, execr, hyprswitch gui
# bind = alt, grave, execr, hyprswitch gui --reverse
# bindr = alt, tab, execr, hyprswitch close
# bindr = alt, grave, execr, hyprswitch close
bind = alt, tab, execr, hyprswitch gui --mod-key alt_l --key tab --close mod-key-release --reverse-key=key=grave && hyprswitch dispatch
bind = alt, grave, execr, hyprswitch gui --mod-key alt_l --key tab --close mod-key-release --reverse-key=key=grave && hyprswitch dispatch -r

binde = ctrl alt, left, workspace, -1
binde = ctrl alt, right, workspace, +1
binde = $mod shift, left, movewindow, l
binde = $mod shift, right, movewindow, r
binde = $mod shift, up, movewindow, u
binde = $mod shift, down, movewindow, d
binde = $mod shift, h, movewindow, l
binde = $mod shift, l, movewindow, r
binde = $mod shift, k, movewindow, u
binde = $mod shift, j, movewindow, d
# binde = ctrl shift, left, resizeactive, -20 0
# binde = ctrl shift, left, moveactive, 20 0
# binde = ctrl shift, right, resizeactive, -20 0
# binde = ctrl shift, up, resizeactive, 0 -20
# binde = ctrl shift, up, moveactive, 0 20
# binde = ctrl shift, down, resizeactive, 0 -20
binde = ctrl $mod, left, resizeactive, 20 0
binde = ctrl $mod, left, moveactive, -20 0
binde = ctrl $mod, right, resizeactive, 20 0
binde = ctrl $mod, up, resizeactive, 0 20
binde = ctrl $mod, up, moveactive, 0 -20
binde = ctrl $mod, down, resizeactive, 0 20
binde = ctrl $mod alt, f, setfloating, 1
binde = ctrl $mod alt, f, centerwindow, 1
binde = shift alt, left, moveactive, -20 0
binde = shift alt, right, moveactive, 20 0
binde = shift alt, up, moveactive, 0 -20
binde = shift alt, down, moveactive, 0 20

# zoom
bind = $mod, equal, execr, /bin/bash -c "hyprctl keyword cursor:zoom_factor $(($(hyprctl getoption cursor:zoom_factor | awk '/float/ {print $2}')+0.1))"

# window shortcuts
bind = $mod, f, fullscreen,
bind = $mod, space, togglefloating,
bind = $mod shift, space, pseudo, # dwindle
bind = $mod shift, m, togglesplit, # dwindle
bind = $mod, s, pin

# Move focus with mainMod + arrow keys
binde = $mod, left, movefocus, l
binde = $mod, right, movefocus, r
binde = $mod, up, movefocus, u
binde = $mod, down, movefocus, d
# vim binds
binde = $mod, h, movefocus, l
binde = $mod, l, movefocus, r
binde = $mod, k, movefocus, u
binde = $mod, j, movefocus, d

# Switch workspaces with mainMod + [0-9]
bind = $mod, 1, workspace, 1
bind = $mod, 2, workspace, 2
bind = $mod, 3, workspace, 3
bind = $mod, 4, workspace, 4
bind = $mod, 5, workspace, 5
bind = $mod, 6, workspace, 6
bind = $mod, 7, workspace, 7
bind = $mod, 8, workspace, 8
bind = $mod, 9, workspace, 9
bind = $mod, 0, workspace, 10

# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mod SHIFT, 1, movetoworkspace, 1
bind = $mod SHIFT, 2, movetoworkspace, 2
bind = $mod SHIFT, 3, movetoworkspace, 3
bind = $mod SHIFT, 4, movetoworkspace, 4
bind = $mod SHIFT, 5, movetoworkspace, 5
bind = $mod SHIFT, 6, movetoworkspace, 6
bind = $mod SHIFT, 7, movetoworkspace, 7
bind = $mod SHIFT, 8, movetoworkspace, 8
bind = $mod SHIFT, 9, movetoworkspace, 9
bind = $mod SHIFT, 0, movetoworkspacesilent, 10

# Scroll through existing workspaces with mainMod + scroll
# use waybar
# bind = $mod, mouse_down, workspace, e+1
# bind = $mod, mouse_up, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow

# bind = $mod, mouse:272, pin
# bindri = $mod, mouse:272, pin, disable

bindi = ,mouse:275, execr, exec -a autoclicker-left zsh -c 'while true; do wlrctl pointer click; sleep $((0.$RANDOM/10)); done'
bindi = ,mouse:276, execr, exec -a autoclicker-right zsh -c 'while true; do wlrctl pointer click right; sleep $((0.$RANDOM/10)); done'
bindri = ,mouse:275, execr, kill $(pgrep -f autoclicker-left)
bindri = ,mouse:276, execr, kill $(pgrep -f autoclicker-right)

# Make group
# bind = $mod, g, togglegroup

# bindie = ,mouse:276, execr, wlrctl pointer click
# bindie = ,mouse:275, execr, wlrctl pointer click right
# bindri = ,mouse:276, execr, kill $(pgrep -f autoclicker-left)
# bindri = ,mouse:275, execr, kill $(pgrep -f autoclicker-right)

# chroma
bind = $mod, O, togglechromakey

# input capture
bind = $mod SHIFT, escape, releaseinputcapture

Config File: /home/system/.config/hypr/autostart.conf: Read Succeeded
#################
### AUTOSTART ###
#################

# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:

# seems to be builtin?
# exec-once = dbus-update-activation-environment --all && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
# exec-once = systemctl --user import-environment XDG_SESSION_TYPE XDG_CURRENT_DESKTOP WAYLAND_DISPLAY QT_QPA_PLATFORMTHEME
# FIX CURSOR because keep reseting(see: https://www.reddit.com/r/hyprland/comments/1fgfmqb/gtk_apps_not_respecting_cursor_theme/)
exec-once = gsettings set org.gnome.desktop.interface cursor-theme Bibata-Rainbow-Modern
exec-once = hyprctl setcursor Bibata-Rainbow-Modern 24

# Launch hyprland plugins
exec-once = hyprpm reload || hyprpm update
# Start pyprland daemon
exec-once = pyprland

# Waybar
exec-once = waybar
# Hypr-Eco
# exec-once = hyprpaper
# exec-once = $SCRIPTSDIR/hyprpaper.sh
# exec-once = $SCRIPTSDIR/swww.sh
exec-once = $SCRIPTSDIR/mpvpaper.sh
exec-once = hypridle

# XWayland
exec-once = xrdb -merge ~/.Xresources

# Auth agent
# exec-once = systemctl --user start plasma-polkit-agent # doesnt respect themeing
# exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = systemctl --user start hyprpolkitagent
# keyring agent
exec-once = gnome-keyring-daemon --start --components=pkcs11,secrets,ssh
# Location service
exec-once = /usr/lib/geoclue-2.0/demos/agent &
# input method
exec-once = fcitx5 -d
# app armor notifications
# exec-once = aa-notify -p -s 1 -w 60 -f /var/log/audit/audit.log

# Clipboard history
# exec-once = wl-paste --watch cliphist store
exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store
# exec-once = wl-clip-persist --clipboard regular

# Notification agent
exec-once = swaync

# window swicher daemon
exec-once = hyprswitch init --size-factor 5

# audio auto adjust
exec-once = $HOME/scripts/audio-autoAdjust.sh --daemon

# effect for audio
exec-once = while true; do easyeffects --gapplication-service; done

# startup sound
exec-once = $HOME/scripts/startupsound.sh

# misc
# sys hud
exec-once = syshud -M audio_in,audio_out,brightness -b /sys/bus/ddcci/devices/ddcci13/backlight/ddcci13/
# night light
exec-once = gammastep -l geoclue2
# exec-once = $HOME/scripts/hyprsunset.sh

# user applications
exec-once = udiskie
exec-once = bitwarden-desktop
# exec-once = kdeconnectd
exec-once = killall input-leap input-leaps; input-leap # works with https://github.com/3l0w/Hyprland/tree/feat/input-capture-impl
exec-once = nextcloud --background
exec-once = [workspace 6 silent; noinitialfocus] discord --start-minimized
exec-once = beeper --no-sandbox --hidden --default-frame --enable-wayland-ime
# exec-once = echo 'ddcci 0x37' | sudo tee /sys/bus/i2c/devices/i2c-13/new_device

# Notify if stuff is already started
exec-once = warp-cli status | grep Connect && notify-send 'warp-vpn' 'connected'
exec-once = pactl get-source-mute @DEFAULT_SOURCE@ | grep 'Mute: yes' >/dev/null && notify-send 'microphone' 'muted'
exec-once = modprobe uvcvideo || notify-send 'uvcvideo' 'disabled'
exec-once = pgrep -f gpu-screen-recorder && notify-send 'recorder' 'recording'

# restore session
exec-once = hyprsession

# restore stuff like music etc
exec-once = $SCRIPTSDIR/hypridle.sh --stopidle

# spam of notification at start(e.g. chromium)
exec-once = swaync-client --dnd-on && sleep 3 && swaync-client --dnd-off

======Config-End========

Description
idk, was just board lol. but not sure why as the video indicates, every other action won't halt everything(compositor and stuff like the background etc) except for create/close window and togglefloat
note: not a thunar issue, happens with stuf like alacritty too
How to reproduce

just spam lot of windows
try do: create/close window or togglefloat

Crash reports, logs, images, videos
https://drive.google.com/file/d/1ShTKNXEbp4-ZwFNJg_Gdz1ohA9XZAWzG/view?usp=sharing

window rule recalcs are slow. I should fix that.

can you try #8735

still lags, but faster then before, prob good enough

Yeah there's probably some other resource hog. It's generally cuz we recalculate all window rules for all windows on the workspace

Just curious, have u ever thought of making this multi threaded?(render stuf one thread, those processing in another etc)?  Just realized the rendering require those recalc to know where

after today's and yesterday's commits it should be even better I think


Switch diffexp to pydeseq2 for differential gene and transcript expression testing

b91ffdde46a5dbd5c1f09856fbd7c4a4cce4b4bb Added example to documentation for PyDESeq2 usage.