Added Flatpak runtime detection - #1301

Open
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir
Open

Added Flatpak runtime detection#1301
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir

Conversation

@Jujstme

Copy link
Copy Markdown

This PR removes flatpak-specific preprocessor macros, leaving the game to figure out at runtime whether it's running under a flatpak environment or not.

To be more specific, this relies on checking the FLATPAK_ID environment variable, which is always set for sandboxed environments as described in the official documentation

For Unleashed Recompiled, FLATPAK_ID is set to io.github.hedge_dev.unleashedrecomp. This can be checked by entering the sandboxed environment and checking directly:

$ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
$ env | grep FLATPAK_ID

For Windows builds, the present PR bears no effect.

@Jujstme

Copy link
Copy Markdown
Author

Sorry for the confusion, i'm reopening the PR soon

@DarioSamo

Copy link
Copy Markdown
Contributor

No worries, it has to be reviewed anyway.

@DarioSamoDarioSamo reopened this Mar 10, 2025
@DarioSamo

Copy link
Copy Markdown
Contributor

Feel free to just force push and clean the commit.

This reverts commit 44effe4, reversing
changes made to d7d7c20.
Comment threadUnleashedRecomp/main.cpp Outdated

@DarioSamoDarioSamo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me except for the part that I pointed out. Needs Steam Deck testing from someone to confirm it. Will deploy some builds to test.

@blueskythlikesclouds

Copy link
Copy Markdown
Member

FYI the CI is broken and doesn't actually pull changes from branches outside the repository, so the CI build will be based on the main branch.

@orowith2osorowith2os left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does UR need to know if it's running under Flatpak? If you need to look for specific files, you should be looking inside of the folders you own under the XDG base directory spec.

Comment threadUnleashedRecomp/user/config.cpp
Comment threadUnleashedRecomp/user/paths.h
@blueskythlikesclouds

Copy link
Copy Markdown
Member

Why do we need a filesystem check? What was wrong with the environment variable approach?

@Jujstme

Copy link
Copy Markdown
Author

I don't think there's any difference, but if libportal uses this approach it's good to do the same imo.

Comment threadUnleashedRecomp/user/config.cpp Outdated
Co-authored-by: Skyth (Asilkan) <19259897+blueskythlikesclouds@users.noreply.github.com>
@DarioSamo

Copy link
Copy Markdown
Contributor

This approach is not reliable if a Flatpak application launches a native binary.

Zelda64Recomp/Zelda64Recomp#572 (comment)

@RushingAlien

RushingAlien commented May 23, 2025

Copy link
Copy Markdown

Checking it out, most of these Flatpak specific codes can be thrown away if Unleashed Recomp is compliant with XDG Base Directory Specification. These env vars are used to figure out which directories are to be used for user data, if the env vars are not set or is empty, the fallback directories are used.

$XDG_DATA_HOME defines the base directory relative to which user-specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

This is relevant to Flatpak because flatpak sets the following env vars automatically:

  • XDG_CONFIG_HOME to $HOME/.var/app/example.app.id/config; and
  • XDG_DATA_HOME to $HOME/.var/app/example.app.id/data.
 ➜ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
[📦 io.github.hedge_dev.unleashedrecomp ~]$ echo -e \
> $XDG_CONFIG_HOME \\n \
> $XDG_DATA_HOME
/home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/config /home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/data
[📦 io.github.hedge_dev.unleashedrecomp ~]$ 

but it seems currently ~/.config/UnleashedRecomp and ~/.var/app/io.github.hedge_dev.unleashedrecomp/data are both hard coded. And in this MR the latter is dynamically figured out, even if not XDG compliant.

Where it should attempt to use $XDG_CONFIG_HOME/UnleashedRecomp and $XDG_DATA_HOME/UnleashedRecomp for the game config and game data respectively. Otherwise fallback to ~/.config/UnleashedRecomp and ~/.local/share/UnleashedRecomp respectively.

EDIT: This is related #679

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Jujstme@DarioSamo@blueskythlikesclouds@RushingAlien@orowith2os
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Added Flatpak runtime detection - #1301

Open
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir
Open

Added Flatpak runtime detection#1301
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir

Conversation

@Jujstme

Copy link
Copy Markdown

This PR removes flatpak-specific preprocessor macros, leaving the game to figure out at runtime whether it's running under a flatpak environment or not.

To be more specific, this relies on checking the FLATPAK_ID environment variable, which is always set for sandboxed environments as described in the official documentation

For Unleashed Recompiled, FLATPAK_ID is set to io.github.hedge_dev.unleashedrecomp. This can be checked by entering the sandboxed environment and checking directly:

$ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
$ env | grep FLATPAK_ID

For Windows builds, the present PR bears no effect.

@Jujstme

Copy link
Copy Markdown
Author

Sorry for the confusion, i'm reopening the PR soon

@DarioSamo

Copy link
Copy Markdown
Contributor

No worries, it has to be reviewed anyway.

@DarioSamoDarioSamo reopened this Mar 10, 2025
@DarioSamo

Copy link
Copy Markdown
Contributor

Feel free to just force push and clean the commit.

This reverts commit 44effe4, reversing
changes made to d7d7c20.
Comment threadUnleashedRecomp/main.cpp Outdated

@DarioSamoDarioSamo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me except for the part that I pointed out. Needs Steam Deck testing from someone to confirm it. Will deploy some builds to test.

@blueskythlikesclouds

Copy link
Copy Markdown
Member

FYI the CI is broken and doesn't actually pull changes from branches outside the repository, so the CI build will be based on the main branch.

@orowith2osorowith2os left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does UR need to know if it's running under Flatpak? If you need to look for specific files, you should be looking inside of the folders you own under the XDG base directory spec.

Comment threadUnleashedRecomp/user/config.cpp
Comment threadUnleashedRecomp/user/paths.h
@blueskythlikesclouds

Copy link
Copy Markdown
Member

Why do we need a filesystem check? What was wrong with the environment variable approach?

@Jujstme

Copy link
Copy Markdown
Author

I don't think there's any difference, but if libportal uses this approach it's good to do the same imo.

Comment threadUnleashedRecomp/user/config.cpp Outdated
Co-authored-by: Skyth (Asilkan) <19259897+blueskythlikesclouds@users.noreply.github.com>
@DarioSamo

Copy link
Copy Markdown
Contributor

This approach is not reliable if a Flatpak application launches a native binary.

Zelda64Recomp/Zelda64Recomp#572 (comment)

@RushingAlien

RushingAlien commented May 23, 2025

Copy link
Copy Markdown

Checking it out, most of these Flatpak specific codes can be thrown away if Unleashed Recomp is compliant with XDG Base Directory Specification. These env vars are used to figure out which directories are to be used for user data, if the env vars are not set or is empty, the fallback directories are used.

$XDG_DATA_HOME defines the base directory relative to which user-specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

This is relevant to Flatpak because flatpak sets the following env vars automatically:

  • XDG_CONFIG_HOME to $HOME/.var/app/example.app.id/config; and
  • XDG_DATA_HOME to $HOME/.var/app/example.app.id/data.
 ➜ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
[📦 io.github.hedge_dev.unleashedrecomp ~]$ echo -e \
> $XDG_CONFIG_HOME \\n \
> $XDG_DATA_HOME
/home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/config /home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/data
[📦 io.github.hedge_dev.unleashedrecomp ~]$ 

but it seems currently ~/.config/UnleashedRecomp and ~/.var/app/io.github.hedge_dev.unleashedrecomp/data are both hard coded. And in this MR the latter is dynamically figured out, even if not XDG compliant.

Where it should attempt to use $XDG_CONFIG_HOME/UnleashedRecomp and $XDG_DATA_HOME/UnleashedRecomp for the game config and game data respectively. Otherwise fallback to ~/.config/UnleashedRecomp and ~/.local/share/UnleashedRecomp respectively.

EDIT: This is related #679

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Jujstme@DarioSamo@blueskythlikesclouds@RushingAlien@orowith2os
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Added Flatpak runtime detection - #1301

Open
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir
Open

Added Flatpak runtime detection#1301
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir

Conversation

@Jujstme

Copy link
Copy Markdown

This PR removes flatpak-specific preprocessor macros, leaving the game to figure out at runtime whether it's running under a flatpak environment or not.

To be more specific, this relies on checking the FLATPAK_ID environment variable, which is always set for sandboxed environments as described in the official documentation

For Unleashed Recompiled, FLATPAK_ID is set to io.github.hedge_dev.unleashedrecomp. This can be checked by entering the sandboxed environment and checking directly:

$ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
$ env | grep FLATPAK_ID

For Windows builds, the present PR bears no effect.

@Jujstme

Copy link
Copy Markdown
Author

Sorry for the confusion, i'm reopening the PR soon

@DarioSamo

Copy link
Copy Markdown
Contributor

No worries, it has to be reviewed anyway.

@DarioSamoDarioSamo reopened this Mar 10, 2025
@DarioSamo

Copy link
Copy Markdown
Contributor

Feel free to just force push and clean the commit.

This reverts commit 44effe4, reversing
changes made to d7d7c20.
Comment threadUnleashedRecomp/main.cpp Outdated

@DarioSamoDarioSamo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me except for the part that I pointed out. Needs Steam Deck testing from someone to confirm it. Will deploy some builds to test.

@blueskythlikesclouds

Copy link
Copy Markdown
Member

FYI the CI is broken and doesn't actually pull changes from branches outside the repository, so the CI build will be based on the main branch.

@orowith2osorowith2os left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does UR need to know if it's running under Flatpak? If you need to look for specific files, you should be looking inside of the folders you own under the XDG base directory spec.

Comment threadUnleashedRecomp/user/config.cpp
Comment threadUnleashedRecomp/user/paths.h
@blueskythlikesclouds

Copy link
Copy Markdown
Member

Why do we need a filesystem check? What was wrong with the environment variable approach?

@Jujstme

Copy link
Copy Markdown
Author

I don't think there's any difference, but if libportal uses this approach it's good to do the same imo.

Comment threadUnleashedRecomp/user/config.cpp Outdated
Co-authored-by: Skyth (Asilkan) <19259897+blueskythlikesclouds@users.noreply.github.com>
@DarioSamo

Copy link
Copy Markdown
Contributor

This approach is not reliable if a Flatpak application launches a native binary.

Zelda64Recomp/Zelda64Recomp#572 (comment)

@RushingAlien

RushingAlien commented May 23, 2025

Copy link
Copy Markdown

Checking it out, most of these Flatpak specific codes can be thrown away if Unleashed Recomp is compliant with XDG Base Directory Specification. These env vars are used to figure out which directories are to be used for user data, if the env vars are not set or is empty, the fallback directories are used.

$XDG_DATA_HOME defines the base directory relative to which user-specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

This is relevant to Flatpak because flatpak sets the following env vars automatically:

  • XDG_CONFIG_HOME to $HOME/.var/app/example.app.id/config; and
  • XDG_DATA_HOME to $HOME/.var/app/example.app.id/data.
 ➜ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
[📦 io.github.hedge_dev.unleashedrecomp ~]$ echo -e \
> $XDG_CONFIG_HOME \\n \
> $XDG_DATA_HOME
/home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/config /home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/data
[📦 io.github.hedge_dev.unleashedrecomp ~]$ 

but it seems currently ~/.config/UnleashedRecomp and ~/.var/app/io.github.hedge_dev.unleashedrecomp/data are both hard coded. And in this MR the latter is dynamically figured out, even if not XDG compliant.

Where it should attempt to use $XDG_CONFIG_HOME/UnleashedRecomp and $XDG_DATA_HOME/UnleashedRecomp for the game config and game data respectively. Otherwise fallback to ~/.config/UnleashedRecomp and ~/.local/share/UnleashedRecomp respectively.

EDIT: This is related #679

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Jujstme@DarioSamo@blueskythlikesclouds@RushingAlien@orowith2os
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Added Flatpak runtime detection - #1301

Open
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir
Open

Added Flatpak runtime detection#1301
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir

Conversation

@Jujstme

Copy link
Copy Markdown

This PR removes flatpak-specific preprocessor macros, leaving the game to figure out at runtime whether it's running under a flatpak environment or not.

To be more specific, this relies on checking the FLATPAK_ID environment variable, which is always set for sandboxed environments as described in the official documentation

For Unleashed Recompiled, FLATPAK_ID is set to io.github.hedge_dev.unleashedrecomp. This can be checked by entering the sandboxed environment and checking directly:

$ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
$ env | grep FLATPAK_ID

For Windows builds, the present PR bears no effect.

@Jujstme

Copy link
Copy Markdown
Author

Sorry for the confusion, i'm reopening the PR soon

@DarioSamo

Copy link
Copy Markdown
Contributor

No worries, it has to be reviewed anyway.

@DarioSamoDarioSamo reopened this Mar 10, 2025
@DarioSamo

Copy link
Copy Markdown
Contributor

Feel free to just force push and clean the commit.

This reverts commit 44effe4, reversing
changes made to d7d7c20.
Comment threadUnleashedRecomp/main.cpp Outdated

@DarioSamoDarioSamo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me except for the part that I pointed out. Needs Steam Deck testing from someone to confirm it. Will deploy some builds to test.

@blueskythlikesclouds

Copy link
Copy Markdown
Member

FYI the CI is broken and doesn't actually pull changes from branches outside the repository, so the CI build will be based on the main branch.

@orowith2osorowith2os left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does UR need to know if it's running under Flatpak? If you need to look for specific files, you should be looking inside of the folders you own under the XDG base directory spec.

Comment threadUnleashedRecomp/user/config.cpp
Comment threadUnleashedRecomp/user/paths.h
@blueskythlikesclouds

Copy link
Copy Markdown
Member

Why do we need a filesystem check? What was wrong with the environment variable approach?

@Jujstme

Copy link
Copy Markdown
Author

I don't think there's any difference, but if libportal uses this approach it's good to do the same imo.

Comment threadUnleashedRecomp/user/config.cpp Outdated
Co-authored-by: Skyth (Asilkan) <19259897+blueskythlikesclouds@users.noreply.github.com>
@DarioSamo

Copy link
Copy Markdown
Contributor

This approach is not reliable if a Flatpak application launches a native binary.

Zelda64Recomp/Zelda64Recomp#572 (comment)

@RushingAlien

RushingAlien commented May 23, 2025

Copy link
Copy Markdown

Checking it out, most of these Flatpak specific codes can be thrown away if Unleashed Recomp is compliant with XDG Base Directory Specification. These env vars are used to figure out which directories are to be used for user data, if the env vars are not set or is empty, the fallback directories are used.

$XDG_DATA_HOME defines the base directory relative to which user-specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

This is relevant to Flatpak because flatpak sets the following env vars automatically:

  • XDG_CONFIG_HOME to $HOME/.var/app/example.app.id/config; and
  • XDG_DATA_HOME to $HOME/.var/app/example.app.id/data.
 ➜ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
[📦 io.github.hedge_dev.unleashedrecomp ~]$ echo -e \
> $XDG_CONFIG_HOME \\n \
> $XDG_DATA_HOME
/home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/config /home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/data
[📦 io.github.hedge_dev.unleashedrecomp ~]$ 

but it seems currently ~/.config/UnleashedRecomp and ~/.var/app/io.github.hedge_dev.unleashedrecomp/data are both hard coded. And in this MR the latter is dynamically figured out, even if not XDG compliant.

Where it should attempt to use $XDG_CONFIG_HOME/UnleashedRecomp and $XDG_DATA_HOME/UnleashedRecomp for the game config and game data respectively. Otherwise fallback to ~/.config/UnleashedRecomp and ~/.local/share/UnleashedRecomp respectively.

EDIT: This is related #679

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Jujstme@DarioSamo@blueskythlikesclouds@RushingAlien@orowith2os
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Added Flatpak runtime detection - #1301

Open
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir
Open

Added Flatpak runtime detection#1301
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir

Conversation

@Jujstme

Copy link
Copy Markdown

This PR removes flatpak-specific preprocessor macros, leaving the game to figure out at runtime whether it's running under a flatpak environment or not.

To be more specific, this relies on checking the FLATPAK_ID environment variable, which is always set for sandboxed environments as described in the official documentation

For Unleashed Recompiled, FLATPAK_ID is set to io.github.hedge_dev.unleashedrecomp. This can be checked by entering the sandboxed environment and checking directly:

$ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
$ env | grep FLATPAK_ID

For Windows builds, the present PR bears no effect.

@Jujstme

Copy link
Copy Markdown
Author

Sorry for the confusion, i'm reopening the PR soon

@DarioSamo

Copy link
Copy Markdown
Contributor

No worries, it has to be reviewed anyway.

@DarioSamoDarioSamo reopened this Mar 10, 2025
@DarioSamo

Copy link
Copy Markdown
Contributor

Feel free to just force push and clean the commit.

This reverts commit 44effe4, reversing
changes made to d7d7c20.
Comment threadUnleashedRecomp/main.cpp Outdated

@DarioSamoDarioSamo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me except for the part that I pointed out. Needs Steam Deck testing from someone to confirm it. Will deploy some builds to test.

@blueskythlikesclouds

Copy link
Copy Markdown
Member

FYI the CI is broken and doesn't actually pull changes from branches outside the repository, so the CI build will be based on the main branch.

@orowith2osorowith2os left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does UR need to know if it's running under Flatpak? If you need to look for specific files, you should be looking inside of the folders you own under the XDG base directory spec.

Comment threadUnleashedRecomp/user/config.cpp
Comment threadUnleashedRecomp/user/paths.h
@blueskythlikesclouds

Copy link
Copy Markdown
Member

Why do we need a filesystem check? What was wrong with the environment variable approach?

@Jujstme

Copy link
Copy Markdown
Author

I don't think there's any difference, but if libportal uses this approach it's good to do the same imo.

Comment threadUnleashedRecomp/user/config.cpp Outdated
Co-authored-by: Skyth (Asilkan) <19259897+blueskythlikesclouds@users.noreply.github.com>
@DarioSamo

Copy link
Copy Markdown
Contributor

This approach is not reliable if a Flatpak application launches a native binary.

Zelda64Recomp/Zelda64Recomp#572 (comment)

@RushingAlien

RushingAlien commented May 23, 2025

Copy link
Copy Markdown

Checking it out, most of these Flatpak specific codes can be thrown away if Unleashed Recomp is compliant with XDG Base Directory Specification. These env vars are used to figure out which directories are to be used for user data, if the env vars are not set or is empty, the fallback directories are used.

$XDG_DATA_HOME defines the base directory relative to which user-specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

This is relevant to Flatpak because flatpak sets the following env vars automatically:

  • XDG_CONFIG_HOME to $HOME/.var/app/example.app.id/config; and
  • XDG_DATA_HOME to $HOME/.var/app/example.app.id/data.
 ➜ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
[📦 io.github.hedge_dev.unleashedrecomp ~]$ echo -e \
> $XDG_CONFIG_HOME \\n \
> $XDG_DATA_HOME
/home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/config /home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/data
[📦 io.github.hedge_dev.unleashedrecomp ~]$ 

but it seems currently ~/.config/UnleashedRecomp and ~/.var/app/io.github.hedge_dev.unleashedrecomp/data are both hard coded. And in this MR the latter is dynamically figured out, even if not XDG compliant.

Where it should attempt to use $XDG_CONFIG_HOME/UnleashedRecomp and $XDG_DATA_HOME/UnleashedRecomp for the game config and game data respectively. Otherwise fallback to ~/.config/UnleashedRecomp and ~/.local/share/UnleashedRecomp respectively.

EDIT: This is related #679

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Jujstme@DarioSamo@blueskythlikesclouds@RushingAlien@orowith2os
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Added Flatpak runtime detection - #1301

Open
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir
Open

Added Flatpak runtime detection#1301
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir

Conversation

@Jujstme

Copy link
Copy Markdown

This PR removes flatpak-specific preprocessor macros, leaving the game to figure out at runtime whether it's running under a flatpak environment or not.

To be more specific, this relies on checking the FLATPAK_ID environment variable, which is always set for sandboxed environments as described in the official documentation

For Unleashed Recompiled, FLATPAK_ID is set to io.github.hedge_dev.unleashedrecomp. This can be checked by entering the sandboxed environment and checking directly:

$ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
$ env | grep FLATPAK_ID

For Windows builds, the present PR bears no effect.

@Jujstme

Copy link
Copy Markdown
Author

Sorry for the confusion, i'm reopening the PR soon

@DarioSamo

Copy link
Copy Markdown
Contributor

No worries, it has to be reviewed anyway.

@DarioSamoDarioSamo reopened this Mar 10, 2025
@DarioSamo

Copy link
Copy Markdown
Contributor

Feel free to just force push and clean the commit.

This reverts commit 44effe4, reversing
changes made to d7d7c20.
Comment threadUnleashedRecomp/main.cpp Outdated

@DarioSamoDarioSamo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me except for the part that I pointed out. Needs Steam Deck testing from someone to confirm it. Will deploy some builds to test.

@blueskythlikesclouds

Copy link
Copy Markdown
Member

FYI the CI is broken and doesn't actually pull changes from branches outside the repository, so the CI build will be based on the main branch.

@orowith2osorowith2os left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does UR need to know if it's running under Flatpak? If you need to look for specific files, you should be looking inside of the folders you own under the XDG base directory spec.

Comment threadUnleashedRecomp/user/config.cpp
Comment threadUnleashedRecomp/user/paths.h
@blueskythlikesclouds

Copy link
Copy Markdown
Member

Why do we need a filesystem check? What was wrong with the environment variable approach?

@Jujstme

Copy link
Copy Markdown
Author

I don't think there's any difference, but if libportal uses this approach it's good to do the same imo.

Comment threadUnleashedRecomp/user/config.cpp Outdated
Co-authored-by: Skyth (Asilkan) <19259897+blueskythlikesclouds@users.noreply.github.com>
@DarioSamo

Copy link
Copy Markdown
Contributor

This approach is not reliable if a Flatpak application launches a native binary.

Zelda64Recomp/Zelda64Recomp#572 (comment)

@RushingAlien

RushingAlien commented May 23, 2025

Copy link
Copy Markdown

Checking it out, most of these Flatpak specific codes can be thrown away if Unleashed Recomp is compliant with XDG Base Directory Specification. These env vars are used to figure out which directories are to be used for user data, if the env vars are not set or is empty, the fallback directories are used.

$XDG_DATA_HOME defines the base directory relative to which user-specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

This is relevant to Flatpak because flatpak sets the following env vars automatically:

  • XDG_CONFIG_HOME to $HOME/.var/app/example.app.id/config; and
  • XDG_DATA_HOME to $HOME/.var/app/example.app.id/data.
 ➜ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
[📦 io.github.hedge_dev.unleashedrecomp ~]$ echo -e \
> $XDG_CONFIG_HOME \\n \
> $XDG_DATA_HOME
/home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/config /home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/data
[📦 io.github.hedge_dev.unleashedrecomp ~]$ 

but it seems currently ~/.config/UnleashedRecomp and ~/.var/app/io.github.hedge_dev.unleashedrecomp/data are both hard coded. And in this MR the latter is dynamically figured out, even if not XDG compliant.

Where it should attempt to use $XDG_CONFIG_HOME/UnleashedRecomp and $XDG_DATA_HOME/UnleashedRecomp for the game config and game data respectively. Otherwise fallback to ~/.config/UnleashedRecomp and ~/.local/share/UnleashedRecomp respectively.

EDIT: This is related #679

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Jujstme@DarioSamo@blueskythlikesclouds@RushingAlien@orowith2os
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Added Flatpak runtime detection - #1301

Open
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir
Open

Added Flatpak runtime detection#1301
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir

Conversation

@Jujstme

Copy link
Copy Markdown

This PR removes flatpak-specific preprocessor macros, leaving the game to figure out at runtime whether it's running under a flatpak environment or not.

To be more specific, this relies on checking the FLATPAK_ID environment variable, which is always set for sandboxed environments as described in the official documentation

For Unleashed Recompiled, FLATPAK_ID is set to io.github.hedge_dev.unleashedrecomp. This can be checked by entering the sandboxed environment and checking directly:

$ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
$ env | grep FLATPAK_ID

For Windows builds, the present PR bears no effect.

@Jujstme

Copy link
Copy Markdown
Author

Sorry for the confusion, i'm reopening the PR soon

@DarioSamo

Copy link
Copy Markdown
Contributor

No worries, it has to be reviewed anyway.

@DarioSamoDarioSamo reopened this Mar 10, 2025
@DarioSamo

Copy link
Copy Markdown
Contributor

Feel free to just force push and clean the commit.

This reverts commit 44effe4, reversing
changes made to d7d7c20.
Comment threadUnleashedRecomp/main.cpp Outdated

@DarioSamoDarioSamo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me except for the part that I pointed out. Needs Steam Deck testing from someone to confirm it. Will deploy some builds to test.

@blueskythlikesclouds

Copy link
Copy Markdown
Member

FYI the CI is broken and doesn't actually pull changes from branches outside the repository, so the CI build will be based on the main branch.

@orowith2osorowith2os left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does UR need to know if it's running under Flatpak? If you need to look for specific files, you should be looking inside of the folders you own under the XDG base directory spec.

Comment threadUnleashedRecomp/user/config.cpp
Comment threadUnleashedRecomp/user/paths.h
@blueskythlikesclouds

Copy link
Copy Markdown
Member

Why do we need a filesystem check? What was wrong with the environment variable approach?

@Jujstme

Copy link
Copy Markdown
Author

I don't think there's any difference, but if libportal uses this approach it's good to do the same imo.

Comment threadUnleashedRecomp/user/config.cpp Outdated
Co-authored-by: Skyth (Asilkan) <19259897+blueskythlikesclouds@users.noreply.github.com>
@DarioSamo

Copy link
Copy Markdown
Contributor

This approach is not reliable if a Flatpak application launches a native binary.

Zelda64Recomp/Zelda64Recomp#572 (comment)

@RushingAlien

RushingAlien commented May 23, 2025

Copy link
Copy Markdown

Checking it out, most of these Flatpak specific codes can be thrown away if Unleashed Recomp is compliant with XDG Base Directory Specification. These env vars are used to figure out which directories are to be used for user data, if the env vars are not set or is empty, the fallback directories are used.

$XDG_DATA_HOME defines the base directory relative to which user-specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

This is relevant to Flatpak because flatpak sets the following env vars automatically:

  • XDG_CONFIG_HOME to $HOME/.var/app/example.app.id/config; and
  • XDG_DATA_HOME to $HOME/.var/app/example.app.id/data.
 ➜ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
[📦 io.github.hedge_dev.unleashedrecomp ~]$ echo -e \
> $XDG_CONFIG_HOME \\n \
> $XDG_DATA_HOME
/home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/config /home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/data
[📦 io.github.hedge_dev.unleashedrecomp ~]$ 

but it seems currently ~/.config/UnleashedRecomp and ~/.var/app/io.github.hedge_dev.unleashedrecomp/data are both hard coded. And in this MR the latter is dynamically figured out, even if not XDG compliant.

Where it should attempt to use $XDG_CONFIG_HOME/UnleashedRecomp and $XDG_DATA_HOME/UnleashedRecomp for the game config and game data respectively. Otherwise fallback to ~/.config/UnleashedRecomp and ~/.local/share/UnleashedRecomp respectively.

EDIT: This is related #679

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Jujstme@DarioSamo@blueskythlikesclouds@RushingAlien@orowith2os
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Added Flatpak runtime detection - #1301

Open
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir
Open

Added Flatpak runtime detection#1301
Jujstme wants to merge 11 commits into
hedge-dev:mainfrom
Jujstme:workingdir

Conversation

@Jujstme

Copy link
Copy Markdown

This PR removes flatpak-specific preprocessor macros, leaving the game to figure out at runtime whether it's running under a flatpak environment or not.

To be more specific, this relies on checking the FLATPAK_ID environment variable, which is always set for sandboxed environments as described in the official documentation

For Unleashed Recompiled, FLATPAK_ID is set to io.github.hedge_dev.unleashedrecomp. This can be checked by entering the sandboxed environment and checking directly:

$ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
$ env | grep FLATPAK_ID

For Windows builds, the present PR bears no effect.

@Jujstme

Copy link
Copy Markdown
Author

Sorry for the confusion, i'm reopening the PR soon

@DarioSamo

Copy link
Copy Markdown
Contributor

No worries, it has to be reviewed anyway.

@DarioSamoDarioSamo reopened this Mar 10, 2025
@DarioSamo

Copy link
Copy Markdown
Contributor

Feel free to just force push and clean the commit.

This reverts commit 44effe4, reversing
changes made to d7d7c20.
Comment threadUnleashedRecomp/main.cpp Outdated

@DarioSamoDarioSamo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me except for the part that I pointed out. Needs Steam Deck testing from someone to confirm it. Will deploy some builds to test.

@blueskythlikesclouds

Copy link
Copy Markdown
Member

FYI the CI is broken and doesn't actually pull changes from branches outside the repository, so the CI build will be based on the main branch.

@orowith2osorowith2os left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does UR need to know if it's running under Flatpak? If you need to look for specific files, you should be looking inside of the folders you own under the XDG base directory spec.

Comment threadUnleashedRecomp/user/config.cpp
Comment threadUnleashedRecomp/user/paths.h
@blueskythlikesclouds

Copy link
Copy Markdown
Member

Why do we need a filesystem check? What was wrong with the environment variable approach?

@Jujstme

Copy link
Copy Markdown
Author

I don't think there's any difference, but if libportal uses this approach it's good to do the same imo.

Comment threadUnleashedRecomp/user/config.cpp Outdated
Co-authored-by: Skyth (Asilkan) <19259897+blueskythlikesclouds@users.noreply.github.com>
@DarioSamo

Copy link
Copy Markdown
Contributor

This approach is not reliable if a Flatpak application launches a native binary.

Zelda64Recomp/Zelda64Recomp#572 (comment)

@RushingAlien

RushingAlien commented May 23, 2025

Copy link
Copy Markdown

Checking it out, most of these Flatpak specific codes can be thrown away if Unleashed Recomp is compliant with XDG Base Directory Specification. These env vars are used to figure out which directories are to be used for user data, if the env vars are not set or is empty, the fallback directories are used.

$XDG_DATA_HOME defines the base directory relative to which user-specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user-specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

This is relevant to Flatpak because flatpak sets the following env vars automatically:

  • XDG_CONFIG_HOME to $HOME/.var/app/example.app.id/config; and
  • XDG_DATA_HOME to $HOME/.var/app/example.app.id/data.
 ➜ flatpak run --command=bash io.github.hedge_dev.unleashedrecomp
[📦 io.github.hedge_dev.unleashedrecomp ~]$ echo -e \
> $XDG_CONFIG_HOME \\n \
> $XDG_DATA_HOME
/home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/config /home/raambm/.var/app/io.github.hedge_dev.unleashedrecomp/data
[📦 io.github.hedge_dev.unleashedrecomp ~]$ 

but it seems currently ~/.config/UnleashedRecomp and ~/.var/app/io.github.hedge_dev.unleashedrecomp/data are both hard coded. And in this MR the latter is dynamically figured out, even if not XDG compliant.

Where it should attempt to use $XDG_CONFIG_HOME/UnleashedRecomp and $XDG_DATA_HOME/UnleashedRecomp for the game config and game data respectively. Otherwise fallback to ~/.config/UnleashedRecomp and ~/.local/share/UnleashedRecomp respectively.

EDIT: This is related #679

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Jujstme@DarioSamo@blueskythlikesclouds@RushingAlien@orowith2os