rename: app id network.ur.urnetwork -> com.bringyour.network - #5

Merged
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename
Aug 21, 2026
Merged

rename: app id network.ur.urnetwork -> com.bringyour.network#5
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename

Conversation

@Ryanmello07

@Ryanmello07Ryanmello07 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The Android and Apple clients ship under com.bringyour.network. Linux was the
only platform on a different reverse-DNS id, which meant every place the id gets
written down had to be told which one to use. This makes Linux match.

Why it is one commit and not six

The app id is a join key. All of these must agree or the desktop stops
recognising the app, and they fail silently at runtime, not at build time:

ConsumerWhat it uses the id for
main.cppthe GApplication id passed to Gtk::Application::create()
*.desktopfilename (D-Bus activation), Icon=, StartupWMClass=
metainfo.xmlfilename, <id>, <launchable>
polkit .policyfilename and all four action ids, matched by ControlProtocol.hpp so the daemon asks about the actions the shipped file actually declares
hicolor iconsbasenames — Flatpak refuses to export an icon whose name is not the app id
flatpak manifestfilename, id:, and the desktop-file-edit paths
deb / rpm / tarball / AppImage / snapinstalled paths, conffile entries, and the uninstaller's stale-path list

Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare. Neither errors; both just stop
working.

Two things that are not search-and-replace

1. UrTheme::kAppIconName. The icon name was spelled as a literal in two
places — the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both pointing at a file that
no longer existed, and set_from_icon_name() renders a blank image without
raising anything, so the title-bar logo simply went empty. It is now one
constant shared by the packaging and both call sites.

2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp
moves with the id. This is deliberately not dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session (the
same one-time cost as a Flatpak data path moving), and the previous app identity
is not left holding live key material in the user's keyring with nothing to
clean it up. Calling that out explicitly because it is the one user-visible
consequence of this PR.

Verified

  • network.ur.urnetwork appears nowhere in the tree afterwards.
  • bash -n on every touched shell script; yaml.safe_load on every touched
    YAML; desktop-file-validate on both .desktop files; appstreamcli validate --no-net on the metainfo; XML well-formedness on the polkit policy.

Why this is split this way

This is the largest PR of the seven and it is unavoidably wide, but it is also
the shallowest: almost every hunk is one string. It is deliberately kept to
only the rename, so a reviewer can read it as "is this the right id, and did
they get every consumer" without also having to evaluate new artwork, a new
package format, or a build-system change. Those are PRs 3–6, each of which
rebases onto this one.

Two things that our internal branch does in the same commit have been held back
on purpose:

  • the new icon artwork and the extra sizes → PR 3. This PR renames the two
    existing icon files byte-for-byte, so the rename is reviewable without also
    reviewing artwork.
  • the metainfo templating → PR 4. This PR renames the static
    metainfo.xml and leaves it static, so the tree is self-consistent at this
    commit; PR 4 converts it to a configure_file template.

The Android and Apple clients ship under `com.bringyour.network`. Linux was
the only platform on a different reverse-DNS id, and every place the id is
written down had to be told which one to use. This makes Linux match, and it
has to be done in one change because the id is a join key: the GTK
application id, the .desktop basename, the AppStream component id, the polkit
action namespace, the icon-theme name and the Flatpak app id must all agree or
the desktop stops recognising the app.
WHAT MOVES, AND WHY IT IS ALL ONE COMMIT
main.cpp Gtk::Application::create() -- the GApplication id
*.desktop filename, Icon=, StartupWMClass=
metainfo.xml filename, <id>, <launchable>
polkit .policy filename + all four action ids, matched in
ControlProtocol.hpp so the daemon asks about the
actions the file actually declares
icons hicolor basenames; Flatpak refuses to export an icon
whose name is not the app id
flatpak manifest filename + id + the desktop-file-edit paths
deb/rpm/tarball/ the installed paths, the conffile entries, and the
AppImage/snap uninstaller's stale-path list
Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare -- both of which fail silently
at runtime rather than at build time.
TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE
1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two
places -- the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both lookups pointing at
a file that no longer existed, and `set_from_icon_name()` renders a blank
image without raising anything, so the title-bar logo simply went empty.
It is now one constant that the packaging and both call sites share.
2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves
with the id. This is deliberately NOT dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session
(the same one-time cost as the Flatpak data path moving), and the previous
app identity is not left holding live key material in the user's keyring
with nothing to clean it up.
No behaviour changes beyond those two. `network.ur.urnetwork` no longer
appears anywhere in the tree.
@Ryanmello07Ryanmello07 changed the title PR 2 — upstream/app-id-renamerename: app id network.ur.urnetwork -> com.bringyour.networkAug 21, 2026
@Ryanmello07
Ryanmello07 marked this pull request as ready for review August 21, 2026 15:40
@Ryanmello07
Ryanmello07 merged commit b11bb54 into urnetwork:mainAug 21, 2026
3 checks passed
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.

1 participant

@Ryanmello07
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e 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

rename: app id network.ur.urnetwork -> com.bringyour.network - #5

Merged
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename
Aug 21, 2026
Merged

rename: app id network.ur.urnetwork -> com.bringyour.network#5
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename

Conversation

@Ryanmello07

@Ryanmello07Ryanmello07 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The Android and Apple clients ship under com.bringyour.network. Linux was the
only platform on a different reverse-DNS id, which meant every place the id gets
written down had to be told which one to use. This makes Linux match.

Why it is one commit and not six

The app id is a join key. All of these must agree or the desktop stops
recognising the app, and they fail silently at runtime, not at build time:

ConsumerWhat it uses the id for
main.cppthe GApplication id passed to Gtk::Application::create()
*.desktopfilename (D-Bus activation), Icon=, StartupWMClass=
metainfo.xmlfilename, <id>, <launchable>
polkit .policyfilename and all four action ids, matched by ControlProtocol.hpp so the daemon asks about the actions the shipped file actually declares
hicolor iconsbasenames — Flatpak refuses to export an icon whose name is not the app id
flatpak manifestfilename, id:, and the desktop-file-edit paths
deb / rpm / tarball / AppImage / snapinstalled paths, conffile entries, and the uninstaller's stale-path list

Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare. Neither errors; both just stop
working.

Two things that are not search-and-replace

1. UrTheme::kAppIconName. The icon name was spelled as a literal in two
places — the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both pointing at a file that
no longer existed, and set_from_icon_name() renders a blank image without
raising anything, so the title-bar logo simply went empty. It is now one
constant shared by the packaging and both call sites.

2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp
moves with the id. This is deliberately not dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session (the
same one-time cost as a Flatpak data path moving), and the previous app identity
is not left holding live key material in the user's keyring with nothing to
clean it up. Calling that out explicitly because it is the one user-visible
consequence of this PR.

Verified

  • network.ur.urnetwork appears nowhere in the tree afterwards.
  • bash -n on every touched shell script; yaml.safe_load on every touched
    YAML; desktop-file-validate on both .desktop files; appstreamcli validate --no-net on the metainfo; XML well-formedness on the polkit policy.

Why this is split this way

This is the largest PR of the seven and it is unavoidably wide, but it is also
the shallowest: almost every hunk is one string. It is deliberately kept to
only the rename, so a reviewer can read it as "is this the right id, and did
they get every consumer" without also having to evaluate new artwork, a new
package format, or a build-system change. Those are PRs 3–6, each of which
rebases onto this one.

Two things that our internal branch does in the same commit have been held back
on purpose:

  • the new icon artwork and the extra sizes → PR 3. This PR renames the two
    existing icon files byte-for-byte, so the rename is reviewable without also
    reviewing artwork.
  • the metainfo templating → PR 4. This PR renames the static
    metainfo.xml and leaves it static, so the tree is self-consistent at this
    commit; PR 4 converts it to a configure_file template.

The Android and Apple clients ship under `com.bringyour.network`. Linux was
the only platform on a different reverse-DNS id, and every place the id is
written down had to be told which one to use. This makes Linux match, and it
has to be done in one change because the id is a join key: the GTK
application id, the .desktop basename, the AppStream component id, the polkit
action namespace, the icon-theme name and the Flatpak app id must all agree or
the desktop stops recognising the app.
WHAT MOVES, AND WHY IT IS ALL ONE COMMIT
main.cpp Gtk::Application::create() -- the GApplication id
*.desktop filename, Icon=, StartupWMClass=
metainfo.xml filename, <id>, <launchable>
polkit .policy filename + all four action ids, matched in
ControlProtocol.hpp so the daemon asks about the
actions the file actually declares
icons hicolor basenames; Flatpak refuses to export an icon
whose name is not the app id
flatpak manifest filename + id + the desktop-file-edit paths
deb/rpm/tarball/ the installed paths, the conffile entries, and the
AppImage/snap uninstaller's stale-path list
Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare -- both of which fail silently
at runtime rather than at build time.
TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE
1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two
places -- the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both lookups pointing at
a file that no longer existed, and `set_from_icon_name()` renders a blank
image without raising anything, so the title-bar logo simply went empty.
It is now one constant that the packaging and both call sites share.
2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves
with the id. This is deliberately NOT dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session
(the same one-time cost as the Flatpak data path moving), and the previous
app identity is not left holding live key material in the user's keyring
with nothing to clean it up.
No behaviour changes beyond those two. `network.ur.urnetwork` no longer
appears anywhere in the tree.
@Ryanmello07Ryanmello07 changed the title PR 2 — upstream/app-id-renamerename: app id network.ur.urnetwork -> com.bringyour.networkAug 21, 2026
@Ryanmello07
Ryanmello07 marked this pull request as ready for review August 21, 2026 15:40
@Ryanmello07
Ryanmello07 merged commit b11bb54 into urnetwork:mainAug 21, 2026
3 checks passed
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.

1 participant

@Ryanmello07
, '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

rename: app id network.ur.urnetwork -> com.bringyour.network - #5

Merged
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename
Aug 21, 2026
Merged

rename: app id network.ur.urnetwork -> com.bringyour.network#5
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename

Conversation

@Ryanmello07

@Ryanmello07Ryanmello07 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The Android and Apple clients ship under com.bringyour.network. Linux was the
only platform on a different reverse-DNS id, which meant every place the id gets
written down had to be told which one to use. This makes Linux match.

Why it is one commit and not six

The app id is a join key. All of these must agree or the desktop stops
recognising the app, and they fail silently at runtime, not at build time:

ConsumerWhat it uses the id for
main.cppthe GApplication id passed to Gtk::Application::create()
*.desktopfilename (D-Bus activation), Icon=, StartupWMClass=
metainfo.xmlfilename, <id>, <launchable>
polkit .policyfilename and all four action ids, matched by ControlProtocol.hpp so the daemon asks about the actions the shipped file actually declares
hicolor iconsbasenames — Flatpak refuses to export an icon whose name is not the app id
flatpak manifestfilename, id:, and the desktop-file-edit paths
deb / rpm / tarball / AppImage / snapinstalled paths, conffile entries, and the uninstaller's stale-path list

Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare. Neither errors; both just stop
working.

Two things that are not search-and-replace

1. UrTheme::kAppIconName. The icon name was spelled as a literal in two
places — the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both pointing at a file that
no longer existed, and set_from_icon_name() renders a blank image without
raising anything, so the title-bar logo simply went empty. It is now one
constant shared by the packaging and both call sites.

2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp
moves with the id. This is deliberately not dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session (the
same one-time cost as a Flatpak data path moving), and the previous app identity
is not left holding live key material in the user's keyring with nothing to
clean it up. Calling that out explicitly because it is the one user-visible
consequence of this PR.

Verified

  • network.ur.urnetwork appears nowhere in the tree afterwards.
  • bash -n on every touched shell script; yaml.safe_load on every touched
    YAML; desktop-file-validate on both .desktop files; appstreamcli validate --no-net on the metainfo; XML well-formedness on the polkit policy.

Why this is split this way

This is the largest PR of the seven and it is unavoidably wide, but it is also
the shallowest: almost every hunk is one string. It is deliberately kept to
only the rename, so a reviewer can read it as "is this the right id, and did
they get every consumer" without also having to evaluate new artwork, a new
package format, or a build-system change. Those are PRs 3–6, each of which
rebases onto this one.

Two things that our internal branch does in the same commit have been held back
on purpose:

  • the new icon artwork and the extra sizes → PR 3. This PR renames the two
    existing icon files byte-for-byte, so the rename is reviewable without also
    reviewing artwork.
  • the metainfo templating → PR 4. This PR renames the static
    metainfo.xml and leaves it static, so the tree is self-consistent at this
    commit; PR 4 converts it to a configure_file template.

The Android and Apple clients ship under `com.bringyour.network`. Linux was
the only platform on a different reverse-DNS id, and every place the id is
written down had to be told which one to use. This makes Linux match, and it
has to be done in one change because the id is a join key: the GTK
application id, the .desktop basename, the AppStream component id, the polkit
action namespace, the icon-theme name and the Flatpak app id must all agree or
the desktop stops recognising the app.
WHAT MOVES, AND WHY IT IS ALL ONE COMMIT
main.cpp Gtk::Application::create() -- the GApplication id
*.desktop filename, Icon=, StartupWMClass=
metainfo.xml filename, <id>, <launchable>
polkit .policy filename + all four action ids, matched in
ControlProtocol.hpp so the daemon asks about the
actions the file actually declares
icons hicolor basenames; Flatpak refuses to export an icon
whose name is not the app id
flatpak manifest filename + id + the desktop-file-edit paths
deb/rpm/tarball/ the installed paths, the conffile entries, and the
AppImage/snap uninstaller's stale-path list
Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare -- both of which fail silently
at runtime rather than at build time.
TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE
1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two
places -- the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both lookups pointing at
a file that no longer existed, and `set_from_icon_name()` renders a blank
image without raising anything, so the title-bar logo simply went empty.
It is now one constant that the packaging and both call sites share.
2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves
with the id. This is deliberately NOT dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session
(the same one-time cost as the Flatpak data path moving), and the previous
app identity is not left holding live key material in the user's keyring
with nothing to clean it up.
No behaviour changes beyond those two. `network.ur.urnetwork` no longer
appears anywhere in the tree.
@Ryanmello07Ryanmello07 changed the title PR 2 — upstream/app-id-renamerename: app id network.ur.urnetwork -> com.bringyour.networkAug 21, 2026
@Ryanmello07
Ryanmello07 marked this pull request as ready for review August 21, 2026 15:40
@Ryanmello07
Ryanmello07 merged commit b11bb54 into urnetwork:mainAug 21, 2026
3 checks passed
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.

1 participant

@Ryanmello07
, '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 \u003e 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

rename: app id network.ur.urnetwork -> com.bringyour.network - #5

Merged
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename
Aug 21, 2026
Merged

rename: app id network.ur.urnetwork -> com.bringyour.network#5
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename

Conversation

@Ryanmello07

@Ryanmello07Ryanmello07 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The Android and Apple clients ship under com.bringyour.network. Linux was the
only platform on a different reverse-DNS id, which meant every place the id gets
written down had to be told which one to use. This makes Linux match.

Why it is one commit and not six

The app id is a join key. All of these must agree or the desktop stops
recognising the app, and they fail silently at runtime, not at build time:

ConsumerWhat it uses the id for
main.cppthe GApplication id passed to Gtk::Application::create()
*.desktopfilename (D-Bus activation), Icon=, StartupWMClass=
metainfo.xmlfilename, <id>, <launchable>
polkit .policyfilename and all four action ids, matched by ControlProtocol.hpp so the daemon asks about the actions the shipped file actually declares
hicolor iconsbasenames — Flatpak refuses to export an icon whose name is not the app id
flatpak manifestfilename, id:, and the desktop-file-edit paths
deb / rpm / tarball / AppImage / snapinstalled paths, conffile entries, and the uninstaller's stale-path list

Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare. Neither errors; both just stop
working.

Two things that are not search-and-replace

1. UrTheme::kAppIconName. The icon name was spelled as a literal in two
places — the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both pointing at a file that
no longer existed, and set_from_icon_name() renders a blank image without
raising anything, so the title-bar logo simply went empty. It is now one
constant shared by the packaging and both call sites.

2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp
moves with the id. This is deliberately not dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session (the
same one-time cost as a Flatpak data path moving), and the previous app identity
is not left holding live key material in the user's keyring with nothing to
clean it up. Calling that out explicitly because it is the one user-visible
consequence of this PR.

Verified

  • network.ur.urnetwork appears nowhere in the tree afterwards.
  • bash -n on every touched shell script; yaml.safe_load on every touched
    YAML; desktop-file-validate on both .desktop files; appstreamcli validate --no-net on the metainfo; XML well-formedness on the polkit policy.

Why this is split this way

This is the largest PR of the seven and it is unavoidably wide, but it is also
the shallowest: almost every hunk is one string. It is deliberately kept to
only the rename, so a reviewer can read it as "is this the right id, and did
they get every consumer" without also having to evaluate new artwork, a new
package format, or a build-system change. Those are PRs 3–6, each of which
rebases onto this one.

Two things that our internal branch does in the same commit have been held back
on purpose:

  • the new icon artwork and the extra sizes → PR 3. This PR renames the two
    existing icon files byte-for-byte, so the rename is reviewable without also
    reviewing artwork.
  • the metainfo templating → PR 4. This PR renames the static
    metainfo.xml and leaves it static, so the tree is self-consistent at this
    commit; PR 4 converts it to a configure_file template.

The Android and Apple clients ship under `com.bringyour.network`. Linux was
the only platform on a different reverse-DNS id, and every place the id is
written down had to be told which one to use. This makes Linux match, and it
has to be done in one change because the id is a join key: the GTK
application id, the .desktop basename, the AppStream component id, the polkit
action namespace, the icon-theme name and the Flatpak app id must all agree or
the desktop stops recognising the app.
WHAT MOVES, AND WHY IT IS ALL ONE COMMIT
main.cpp Gtk::Application::create() -- the GApplication id
*.desktop filename, Icon=, StartupWMClass=
metainfo.xml filename, <id>, <launchable>
polkit .policy filename + all four action ids, matched in
ControlProtocol.hpp so the daemon asks about the
actions the file actually declares
icons hicolor basenames; Flatpak refuses to export an icon
whose name is not the app id
flatpak manifest filename + id + the desktop-file-edit paths
deb/rpm/tarball/ the installed paths, the conffile entries, and the
AppImage/snap uninstaller's stale-path list
Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare -- both of which fail silently
at runtime rather than at build time.
TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE
1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two
places -- the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both lookups pointing at
a file that no longer existed, and `set_from_icon_name()` renders a blank
image without raising anything, so the title-bar logo simply went empty.
It is now one constant that the packaging and both call sites share.
2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves
with the id. This is deliberately NOT dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session
(the same one-time cost as the Flatpak data path moving), and the previous
app identity is not left holding live key material in the user's keyring
with nothing to clean it up.
No behaviour changes beyond those two. `network.ur.urnetwork` no longer
appears anywhere in the tree.
@Ryanmello07Ryanmello07 changed the title PR 2 — upstream/app-id-renamerename: app id network.ur.urnetwork -> com.bringyour.networkAug 21, 2026
@Ryanmello07
Ryanmello07 marked this pull request as ready for review August 21, 2026 15:40
@Ryanmello07
Ryanmello07 merged commit b11bb54 into urnetwork:mainAug 21, 2026
3 checks passed
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.

1 participant

@Ryanmello07
, '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

rename: app id network.ur.urnetwork -> com.bringyour.network - #5

Merged
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename
Aug 21, 2026
Merged

rename: app id network.ur.urnetwork -> com.bringyour.network#5
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename

Conversation

@Ryanmello07

@Ryanmello07Ryanmello07 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The Android and Apple clients ship under com.bringyour.network. Linux was the
only platform on a different reverse-DNS id, which meant every place the id gets
written down had to be told which one to use. This makes Linux match.

Why it is one commit and not six

The app id is a join key. All of these must agree or the desktop stops
recognising the app, and they fail silently at runtime, not at build time:

ConsumerWhat it uses the id for
main.cppthe GApplication id passed to Gtk::Application::create()
*.desktopfilename (D-Bus activation), Icon=, StartupWMClass=
metainfo.xmlfilename, <id>, <launchable>
polkit .policyfilename and all four action ids, matched by ControlProtocol.hpp so the daemon asks about the actions the shipped file actually declares
hicolor iconsbasenames — Flatpak refuses to export an icon whose name is not the app id
flatpak manifestfilename, id:, and the desktop-file-edit paths
deb / rpm / tarball / AppImage / snapinstalled paths, conffile entries, and the uninstaller's stale-path list

Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare. Neither errors; both just stop
working.

Two things that are not search-and-replace

1. UrTheme::kAppIconName. The icon name was spelled as a literal in two
places — the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both pointing at a file that
no longer existed, and set_from_icon_name() renders a blank image without
raising anything, so the title-bar logo simply went empty. It is now one
constant shared by the packaging and both call sites.

2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp
moves with the id. This is deliberately not dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session (the
same one-time cost as a Flatpak data path moving), and the previous app identity
is not left holding live key material in the user's keyring with nothing to
clean it up. Calling that out explicitly because it is the one user-visible
consequence of this PR.

Verified

  • network.ur.urnetwork appears nowhere in the tree afterwards.
  • bash -n on every touched shell script; yaml.safe_load on every touched
    YAML; desktop-file-validate on both .desktop files; appstreamcli validate --no-net on the metainfo; XML well-formedness on the polkit policy.

Why this is split this way

This is the largest PR of the seven and it is unavoidably wide, but it is also
the shallowest: almost every hunk is one string. It is deliberately kept to
only the rename, so a reviewer can read it as "is this the right id, and did
they get every consumer" without also having to evaluate new artwork, a new
package format, or a build-system change. Those are PRs 3–6, each of which
rebases onto this one.

Two things that our internal branch does in the same commit have been held back
on purpose:

  • the new icon artwork and the extra sizes → PR 3. This PR renames the two
    existing icon files byte-for-byte, so the rename is reviewable without also
    reviewing artwork.
  • the metainfo templating → PR 4. This PR renames the static
    metainfo.xml and leaves it static, so the tree is self-consistent at this
    commit; PR 4 converts it to a configure_file template.

The Android and Apple clients ship under `com.bringyour.network`. Linux was
the only platform on a different reverse-DNS id, and every place the id is
written down had to be told which one to use. This makes Linux match, and it
has to be done in one change because the id is a join key: the GTK
application id, the .desktop basename, the AppStream component id, the polkit
action namespace, the icon-theme name and the Flatpak app id must all agree or
the desktop stops recognising the app.
WHAT MOVES, AND WHY IT IS ALL ONE COMMIT
main.cpp Gtk::Application::create() -- the GApplication id
*.desktop filename, Icon=, StartupWMClass=
metainfo.xml filename, <id>, <launchable>
polkit .policy filename + all four action ids, matched in
ControlProtocol.hpp so the daemon asks about the
actions the file actually declares
icons hicolor basenames; Flatpak refuses to export an icon
whose name is not the app id
flatpak manifest filename + id + the desktop-file-edit paths
deb/rpm/tarball/ the installed paths, the conffile entries, and the
AppImage/snap uninstaller's stale-path list
Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare -- both of which fail silently
at runtime rather than at build time.
TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE
1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two
places -- the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both lookups pointing at
a file that no longer existed, and `set_from_icon_name()` renders a blank
image without raising anything, so the title-bar logo simply went empty.
It is now one constant that the packaging and both call sites share.
2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves
with the id. This is deliberately NOT dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session
(the same one-time cost as the Flatpak data path moving), and the previous
app identity is not left holding live key material in the user's keyring
with nothing to clean it up.
No behaviour changes beyond those two. `network.ur.urnetwork` no longer
appears anywhere in the tree.
@Ryanmello07Ryanmello07 changed the title PR 2 — upstream/app-id-renamerename: app id network.ur.urnetwork -> com.bringyour.networkAug 21, 2026
@Ryanmello07
Ryanmello07 marked this pull request as ready for review August 21, 2026 15:40
@Ryanmello07
Ryanmello07 merged commit b11bb54 into urnetwork:mainAug 21, 2026
3 checks passed
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.

1 participant

@Ryanmello07
, '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

rename: app id network.ur.urnetwork -> com.bringyour.network - #5

Merged
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename
Aug 21, 2026
Merged

rename: app id network.ur.urnetwork -> com.bringyour.network#5
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename

Conversation

@Ryanmello07

@Ryanmello07Ryanmello07 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The Android and Apple clients ship under com.bringyour.network. Linux was the
only platform on a different reverse-DNS id, which meant every place the id gets
written down had to be told which one to use. This makes Linux match.

Why it is one commit and not six

The app id is a join key. All of these must agree or the desktop stops
recognising the app, and they fail silently at runtime, not at build time:

ConsumerWhat it uses the id for
main.cppthe GApplication id passed to Gtk::Application::create()
*.desktopfilename (D-Bus activation), Icon=, StartupWMClass=
metainfo.xmlfilename, <id>, <launchable>
polkit .policyfilename and all four action ids, matched by ControlProtocol.hpp so the daemon asks about the actions the shipped file actually declares
hicolor iconsbasenames — Flatpak refuses to export an icon whose name is not the app id
flatpak manifestfilename, id:, and the desktop-file-edit paths
deb / rpm / tarball / AppImage / snapinstalled paths, conffile entries, and the uninstaller's stale-path list

Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare. Neither errors; both just stop
working.

Two things that are not search-and-replace

1. UrTheme::kAppIconName. The icon name was spelled as a literal in two
places — the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both pointing at a file that
no longer existed, and set_from_icon_name() renders a blank image without
raising anything, so the title-bar logo simply went empty. It is now one
constant shared by the packaging and both call sites.

2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp
moves with the id. This is deliberately not dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session (the
same one-time cost as a Flatpak data path moving), and the previous app identity
is not left holding live key material in the user's keyring with nothing to
clean it up. Calling that out explicitly because it is the one user-visible
consequence of this PR.

Verified

  • network.ur.urnetwork appears nowhere in the tree afterwards.
  • bash -n on every touched shell script; yaml.safe_load on every touched
    YAML; desktop-file-validate on both .desktop files; appstreamcli validate --no-net on the metainfo; XML well-formedness on the polkit policy.

Why this is split this way

This is the largest PR of the seven and it is unavoidably wide, but it is also
the shallowest: almost every hunk is one string. It is deliberately kept to
only the rename, so a reviewer can read it as "is this the right id, and did
they get every consumer" without also having to evaluate new artwork, a new
package format, or a build-system change. Those are PRs 3–6, each of which
rebases onto this one.

Two things that our internal branch does in the same commit have been held back
on purpose:

  • the new icon artwork and the extra sizes → PR 3. This PR renames the two
    existing icon files byte-for-byte, so the rename is reviewable without also
    reviewing artwork.
  • the metainfo templating → PR 4. This PR renames the static
    metainfo.xml and leaves it static, so the tree is self-consistent at this
    commit; PR 4 converts it to a configure_file template.

The Android and Apple clients ship under `com.bringyour.network`. Linux was
the only platform on a different reverse-DNS id, and every place the id is
written down had to be told which one to use. This makes Linux match, and it
has to be done in one change because the id is a join key: the GTK
application id, the .desktop basename, the AppStream component id, the polkit
action namespace, the icon-theme name and the Flatpak app id must all agree or
the desktop stops recognising the app.
WHAT MOVES, AND WHY IT IS ALL ONE COMMIT
main.cpp Gtk::Application::create() -- the GApplication id
*.desktop filename, Icon=, StartupWMClass=
metainfo.xml filename, <id>, <launchable>
polkit .policy filename + all four action ids, matched in
ControlProtocol.hpp so the daemon asks about the
actions the file actually declares
icons hicolor basenames; Flatpak refuses to export an icon
whose name is not the app id
flatpak manifest filename + id + the desktop-file-edit paths
deb/rpm/tarball/ the installed paths, the conffile entries, and the
AppImage/snap uninstaller's stale-path list
Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare -- both of which fail silently
at runtime rather than at build time.
TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE
1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two
places -- the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both lookups pointing at
a file that no longer existed, and `set_from_icon_name()` renders a blank
image without raising anything, so the title-bar logo simply went empty.
It is now one constant that the packaging and both call sites share.
2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves
with the id. This is deliberately NOT dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session
(the same one-time cost as the Flatpak data path moving), and the previous
app identity is not left holding live key material in the user's keyring
with nothing to clean it up.
No behaviour changes beyond those two. `network.ur.urnetwork` no longer
appears anywhere in the tree.
@Ryanmello07Ryanmello07 changed the title PR 2 — upstream/app-id-renamerename: app id network.ur.urnetwork -> com.bringyour.networkAug 21, 2026
@Ryanmello07
Ryanmello07 marked this pull request as ready for review August 21, 2026 15:40
@Ryanmello07
Ryanmello07 merged commit b11bb54 into urnetwork:mainAug 21, 2026
3 checks passed
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.

1 participant

@Ryanmello07
, '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

rename: app id network.ur.urnetwork -> com.bringyour.network - #5

Merged
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename
Aug 21, 2026
Merged

rename: app id network.ur.urnetwork -> com.bringyour.network#5
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename

Conversation

@Ryanmello07

@Ryanmello07Ryanmello07 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The Android and Apple clients ship under com.bringyour.network. Linux was the
only platform on a different reverse-DNS id, which meant every place the id gets
written down had to be told which one to use. This makes Linux match.

Why it is one commit and not six

The app id is a join key. All of these must agree or the desktop stops
recognising the app, and they fail silently at runtime, not at build time:

ConsumerWhat it uses the id for
main.cppthe GApplication id passed to Gtk::Application::create()
*.desktopfilename (D-Bus activation), Icon=, StartupWMClass=
metainfo.xmlfilename, <id>, <launchable>
polkit .policyfilename and all four action ids, matched by ControlProtocol.hpp so the daemon asks about the actions the shipped file actually declares
hicolor iconsbasenames — Flatpak refuses to export an icon whose name is not the app id
flatpak manifestfilename, id:, and the desktop-file-edit paths
deb / rpm / tarball / AppImage / snapinstalled paths, conffile entries, and the uninstaller's stale-path list

Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare. Neither errors; both just stop
working.

Two things that are not search-and-replace

1. UrTheme::kAppIconName. The icon name was spelled as a literal in two
places — the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both pointing at a file that
no longer existed, and set_from_icon_name() renders a blank image without
raising anything, so the title-bar logo simply went empty. It is now one
constant shared by the packaging and both call sites.

2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp
moves with the id. This is deliberately not dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session (the
same one-time cost as a Flatpak data path moving), and the previous app identity
is not left holding live key material in the user's keyring with nothing to
clean it up. Calling that out explicitly because it is the one user-visible
consequence of this PR.

Verified

  • network.ur.urnetwork appears nowhere in the tree afterwards.
  • bash -n on every touched shell script; yaml.safe_load on every touched
    YAML; desktop-file-validate on both .desktop files; appstreamcli validate --no-net on the metainfo; XML well-formedness on the polkit policy.

Why this is split this way

This is the largest PR of the seven and it is unavoidably wide, but it is also
the shallowest: almost every hunk is one string. It is deliberately kept to
only the rename, so a reviewer can read it as "is this the right id, and did
they get every consumer" without also having to evaluate new artwork, a new
package format, or a build-system change. Those are PRs 3–6, each of which
rebases onto this one.

Two things that our internal branch does in the same commit have been held back
on purpose:

  • the new icon artwork and the extra sizes → PR 3. This PR renames the two
    existing icon files byte-for-byte, so the rename is reviewable without also
    reviewing artwork.
  • the metainfo templating → PR 4. This PR renames the static
    metainfo.xml and leaves it static, so the tree is self-consistent at this
    commit; PR 4 converts it to a configure_file template.

The Android and Apple clients ship under `com.bringyour.network`. Linux was
the only platform on a different reverse-DNS id, and every place the id is
written down had to be told which one to use. This makes Linux match, and it
has to be done in one change because the id is a join key: the GTK
application id, the .desktop basename, the AppStream component id, the polkit
action namespace, the icon-theme name and the Flatpak app id must all agree or
the desktop stops recognising the app.
WHAT MOVES, AND WHY IT IS ALL ONE COMMIT
main.cpp Gtk::Application::create() -- the GApplication id
*.desktop filename, Icon=, StartupWMClass=
metainfo.xml filename, <id>, <launchable>
polkit .policy filename + all four action ids, matched in
ControlProtocol.hpp so the daemon asks about the
actions the file actually declares
icons hicolor basenames; Flatpak refuses to export an icon
whose name is not the app id
flatpak manifest filename + id + the desktop-file-edit paths
deb/rpm/tarball/ the installed paths, the conffile entries, and the
AppImage/snap uninstaller's stale-path list
Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare -- both of which fail silently
at runtime rather than at build time.
TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE
1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two
places -- the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both lookups pointing at
a file that no longer existed, and `set_from_icon_name()` renders a blank
image without raising anything, so the title-bar logo simply went empty.
It is now one constant that the packaging and both call sites share.
2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves
with the id. This is deliberately NOT dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session
(the same one-time cost as the Flatpak data path moving), and the previous
app identity is not left holding live key material in the user's keyring
with nothing to clean it up.
No behaviour changes beyond those two. `network.ur.urnetwork` no longer
appears anywhere in the tree.
@Ryanmello07Ryanmello07 changed the title PR 2 — upstream/app-id-renamerename: app id network.ur.urnetwork -> com.bringyour.networkAug 21, 2026
@Ryanmello07
Ryanmello07 marked this pull request as ready for review August 21, 2026 15:40
@Ryanmello07
Ryanmello07 merged commit b11bb54 into urnetwork:mainAug 21, 2026
3 checks passed
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.

1 participant

@Ryanmello07
, '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

rename: app id network.ur.urnetwork -> com.bringyour.network - #5

Merged
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename
Aug 21, 2026
Merged

rename: app id network.ur.urnetwork -> com.bringyour.network#5
Ryanmello07 merged 1 commit into
urnetwork:mainfrom
Ryanmello07:upstream/app-id-rename

Conversation

@Ryanmello07

@Ryanmello07Ryanmello07 commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The Android and Apple clients ship under com.bringyour.network. Linux was the
only platform on a different reverse-DNS id, which meant every place the id gets
written down had to be told which one to use. This makes Linux match.

Why it is one commit and not six

The app id is a join key. All of these must agree or the desktop stops
recognising the app, and they fail silently at runtime, not at build time:

ConsumerWhat it uses the id for
main.cppthe GApplication id passed to Gtk::Application::create()
*.desktopfilename (D-Bus activation), Icon=, StartupWMClass=
metainfo.xmlfilename, <id>, <launchable>
polkit .policyfilename and all four action ids, matched by ControlProtocol.hpp so the daemon asks about the actions the shipped file actually declares
hicolor iconsbasenames — Flatpak refuses to export an icon whose name is not the app id
flatpak manifestfilename, id:, and the desktop-file-edit paths
deb / rpm / tarball / AppImage / snapinstalled paths, conffile entries, and the uninstaller's stale-path list

Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare. Neither errors; both just stop
working.

Two things that are not search-and-replace

1. UrTheme::kAppIconName. The icon name was spelled as a literal in two
places — the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both pointing at a file that
no longer existed, and set_from_icon_name() renders a blank image without
raising anything, so the title-bar logo simply went empty. It is now one
constant shared by the packaging and both call sites.

2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp
moves with the id. This is deliberately not dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session (the
same one-time cost as a Flatpak data path moving), and the previous app identity
is not left holding live key material in the user's keyring with nothing to
clean it up. Calling that out explicitly because it is the one user-visible
consequence of this PR.

Verified

  • network.ur.urnetwork appears nowhere in the tree afterwards.
  • bash -n on every touched shell script; yaml.safe_load on every touched
    YAML; desktop-file-validate on both .desktop files; appstreamcli validate --no-net on the metainfo; XML well-formedness on the polkit policy.

Why this is split this way

This is the largest PR of the seven and it is unavoidably wide, but it is also
the shallowest: almost every hunk is one string. It is deliberately kept to
only the rename, so a reviewer can read it as "is this the right id, and did
they get every consumer" without also having to evaluate new artwork, a new
package format, or a build-system change. Those are PRs 3–6, each of which
rebases onto this one.

Two things that our internal branch does in the same commit have been held back
on purpose:

  • the new icon artwork and the extra sizes → PR 3. This PR renames the two
    existing icon files byte-for-byte, so the rename is reviewable without also
    reviewing artwork.
  • the metainfo templating → PR 4. This PR renames the static
    metainfo.xml and leaves it static, so the tree is self-consistent at this
    commit; PR 4 converts it to a configure_file template.

The Android and Apple clients ship under `com.bringyour.network`. Linux was
the only platform on a different reverse-DNS id, and every place the id is
written down had to be told which one to use. This makes Linux match, and it
has to be done in one change because the id is a join key: the GTK
application id, the .desktop basename, the AppStream component id, the polkit
action namespace, the icon-theme name and the Flatpak app id must all agree or
the desktop stops recognising the app.
WHAT MOVES, AND WHY IT IS ALL ONE COMMIT
main.cpp Gtk::Application::create() -- the GApplication id
*.desktop filename, Icon=, StartupWMClass=
metainfo.xml filename, <id>, <launchable>
polkit .policy filename + all four action ids, matched in
ControlProtocol.hpp so the daemon asks about the
actions the file actually declares
icons hicolor basenames; Flatpak refuses to export an icon
whose name is not the app id
flatpak manifest filename + id + the desktop-file-edit paths
deb/rpm/tarball/ the installed paths, the conffile entries, and the
AppImage/snap uninstaller's stale-path list
Splitting these would leave an intermediate commit where, for example, the
.desktop names an icon that does not exist, or the daemon checks polkit
actions the shipped .policy does not declare -- both of which fail silently
at runtime rather than at build time.
TWO THINGS THAT ARE NOT PURE SEARCH-AND-REPLACE
1. `UrTheme::kAppIconName`. The icon name was spelled as a literal in two
places -- the by-path load in UrTheme.cpp and the by-name fallback in
MainWindow.cpp. Renaming the packaging alone left both lookups pointing at
a file that no longer existed, and `set_from_icon_name()` renders a blank
image without raising anything, so the title-bar logo simply went empty.
It is now one constant that the packaging and both call sites share.
2. The libsecret keyring attribute in SecretServiceRpcSessionStore.cpp moves
with the id. This is deliberately NOT dual-read: an entry written by an
older build is no longer found, the app falls back to a fresh RPC session
(the same one-time cost as the Flatpak data path moving), and the previous
app identity is not left holding live key material in the user's keyring
with nothing to clean it up.
No behaviour changes beyond those two. `network.ur.urnetwork` no longer
appears anywhere in the tree.
@Ryanmello07Ryanmello07 changed the title PR 2 — upstream/app-id-renamerename: app id network.ur.urnetwork -> com.bringyour.networkAug 21, 2026
@Ryanmello07
Ryanmello07 marked this pull request as ready for review August 21, 2026 15:40
@Ryanmello07
Ryanmello07 merged commit b11bb54 into urnetwork:mainAug 21, 2026
3 checks passed
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.

1 participant

@Ryanmello07