diff --git a/app/icons/bitcoind.png b/app/icons/bitcoind.png deleted file mode 100644 index e1ba21e..0000000 Binary files a/app/icons/bitcoind.png and /dev/null differ diff --git a/app/icons/bitcoind.svg b/app/icons/bitcoind.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/bitcoind.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/btcpayserver.png b/app/icons/btcpayserver.png deleted file mode 100644 index 0b97642..0000000 Binary files a/app/icons/btcpayserver.png and /dev/null differ diff --git a/app/icons/btcpayserver.svg b/app/icons/btcpayserver.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/btcpayserver.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/caddy.png b/app/icons/caddy.png deleted file mode 100644 index 302e984..0000000 Binary files a/app/icons/caddy.png and /dev/null differ diff --git a/app/icons/electrs.png b/app/icons/electrs.png deleted file mode 100644 index 25ec2bf..0000000 Binary files a/app/icons/electrs.png and /dev/null differ diff --git a/app/icons/electrs.svg b/app/icons/electrs.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/electrs.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/haven.png b/app/icons/haven.png deleted file mode 100644 index acd73c9..0000000 Binary files a/app/icons/haven.png and /dev/null differ diff --git a/app/icons/livekit.png b/app/icons/livekit.png deleted file mode 100644 index 1bb245e..0000000 --- a/app/icons/livekit.png +++ /dev/null @@ -1,1402 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GitHub · Change is constant. GitHub keeps you ahead. · GitHub - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- Skip to content - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - - - -
- - - - - -
- - - - - - - - - -
-
- - - - - - - - - - - - -

The future of building happens together

Tools and trends evolve, but collaboration endures. With GitHub, developers, agents, and code come together on one platform.

Try GitHub Copilot free

GitHub features

A demonstration animation of a code editor using GitHub Copilot Chat, where the user requests GitHub Copilot to refactor duplicated logic and extract it into a reusable function for a given code snippet.

Write, test, and fix code quickly with GitHub Copilot, from simple boilerplate to complex features.

GitHub customers

American AirlinesDuolingoErnst and YoungFordInfoSysMercado LibreMercedes-BenzShopifyPhilipsSociété GénéraleSpotifyVodafone

Accelerate your entire workflow

From your first line of code to final deployment, GitHub provides AI and automation tools to help you build and ship better software faster.

A Copilot chat window with the 'Ask' mode enabled. The user switches from 'Ask' mode to 'Agent' mode from a dropdown menu, then sends the prompt 'Update the website to allow searching for running races by name.' Copilot analyzes the codebase, then explains the required edits for three files before generating them. Copilot then confirms completion and summarizes the implemented changes for the new functionality allowing users to search races by name and view paginated, filtered results.

Your AI partner everywhere. Copilot is ready to work with you at each step of the software development lifecycle.

Duolingo boosts developer speed by 25% with GitHub Copilot

Read customer story

2025 Gartner® Magic Quadrant™ for AI Code Assistants

Read industry report

Ship faster with secure, reliable CI/CD.

Explore GitHub Actions

Built-in application security where found means fixed

Use AI to find and fix vulnerabilities so your team can ship more secure software faster.

Apply fixes in seconds. Spend less time debugging and more time building features with Copilot Autofix.

Copilot Autofix identifies vulnerable code and provides an explanation, together with a secure code suggestion to remediate the vulnerability.

Security debt, solved. Leverage security campaigns and Copilot Autofix to reduce application vulnerabilities.

Learn about GitHub Code Security
A security campaign screen displays the campaign’s progress bar with 97% completed of 701 alerts. A total of 23 alerts are left with 13 in progress, and the campaign started 20 days ago. The status below shows that there are 7 days left in the campaign with a due date of November 15, 2024.

Dependencies you can depend on. Update vulnerable dependencies with supported fixes for breaking changes.

Learn about Dependabot
List of dependencies defined in a requirements .txt file.

Your secrets, your business. Detect, prevent, and remediate leaked secrets across your organization.

Learn about GitHub Secret Protection
GitHub push protection confirms and displays an active secret, and blocks the push.

70% MTTR reduction with Copilot Autofix

8.3M secret leaks stopped in the past 12 months with push protection

Work together, achieve more

From planning and discussion to code review, GitHub keeps your team’s conversation and context next to your code.

A project management dashboard showing tasks for the ‘OctoArcade Invaders’ project, with tasks grouped under project phase categories like ‘Prototype,’ ‘Beta,’ and ‘Launch’ in a table layout. One of the columns displays sub-issue progress bars with percentages for each issue.

Plan with clarity. Organize everything from high-level roadmaps to everyday tasks.

It helps us onboard new software engineers and get them productive right away. We have all our source code, issues, and pull requests in one place... GitHub is a complete platform that frees us from menial tasks and enables us to do our best work.
Fabian FaulhaberApplication manager at Mercedes-Benz

Create issues and manage projects with tools that adapt to your code.

Explore GitHub Issues

Millions of developers and businesses call GitHub home

Whether you’re scaling your development process or just learning how to code, GitHub is where you belong. Join the world’s most widely adopted developer platform to build the technologies that shape what’s next.

-
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - diff --git a/app/icons/lnd.png b/app/icons/lnd.png deleted file mode 100644 index 9c60603..0000000 Binary files a/app/icons/lnd.png and /dev/null differ diff --git a/app/icons/lnd.svg b/app/icons/lnd.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/lnd.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/mempool.png b/app/icons/mempool.png deleted file mode 100644 index 05fde6a..0000000 Binary files a/app/icons/mempool.png and /dev/null differ diff --git a/app/icons/mempool.svg b/app/icons/mempool.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/mempool.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/nextcloud.png b/app/icons/nextcloud.png deleted file mode 100644 index 06713fa..0000000 Binary files a/app/icons/nextcloud.png and /dev/null differ diff --git a/app/icons/nextcloud.svg b/app/icons/nextcloud.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/nextcloud.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/rtl.png b/app/icons/rtl.png deleted file mode 100644 index 773a47e..0000000 Binary files a/app/icons/rtl.png and /dev/null differ diff --git a/app/icons/rtl.svg b/app/icons/rtl.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/rtl.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/synapse.png b/app/icons/synapse.png deleted file mode 100644 index 728be42..0000000 Binary files a/app/icons/synapse.png and /dev/null differ diff --git a/app/icons/synapse.svg b/app/icons/synapse.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/synapse.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/tor.png b/app/icons/tor.png deleted file mode 100644 index 43ce3d5..0000000 Binary files a/app/icons/tor.png and /dev/null differ diff --git a/app/icons/vaultwarden.png b/app/icons/vaultwarden.png deleted file mode 100644 index 209754a..0000000 Binary files a/app/icons/vaultwarden.png and /dev/null differ diff --git a/app/icons/vaultwarden.svg b/app/icons/vaultwarden.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/vaultwarden.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/icons/wordpress.png b/app/icons/wordpress.png deleted file mode 100644 index 02e35ae..0000000 Binary files a/app/icons/wordpress.png and /dev/null differ diff --git a/app/icons/wordpress.svg b/app/icons/wordpress.svg new file mode 100644 index 0000000..874a747 --- /dev/null +++ b/app/icons/wordpress.svg @@ -0,0 +1 @@ +404: This page could not be found.Umbrel App Store
Explore umbrelOS

404

This page could not be found.

\ No newline at end of file diff --git a/app/sovran_systemsos_hub/service_tile.py b/app/sovran_systemsos_hub/service_tile.py index faa7786..e59d841 100644 --- a/app/sovran_systemsos_hub/service_tile.py +++ b/app/sovran_systemsos_hub/service_tile.py @@ -19,6 +19,9 @@ LOADING_STATES = {"reloading", "activating", "deactivating", "maintenance"} # Icon directory injected by the Nix derivation via environment variable ICON_DIR = os.environ.get("SOVRAN_HUB_ICONS", "") +# Supported icon extensions in priority order +ICON_EXTENSIONS = [".svg", ".png"] + class ServiceTile(Gtk.Box): """A square tile showing a service logo, name, status, toggle, and restart.""" @@ -106,16 +109,26 @@ class ServiceTile(Gtk.Box): self.refresh() def _set_logo(self, icon_name: str): - """Set the tile logo from a PNG in the icons dir, or fall back to a symbolic icon.""" + """Set the tile logo from an SVG or PNG in the icons dir.""" if icon_name and ICON_DIR: - png_path = os.path.join(ICON_DIR, f"{icon_name}.png") - if os.path.isfile(png_path): - pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( - png_path, 48, 48, True - ) - texture = Gdk.Texture.new_for_pixbuf(pixbuf) - self._logo.set_from_paintable(texture) - return + for ext in ICON_EXTENSIONS: + icon_path = os.path.join(ICON_DIR, f"{icon_name}{ext}") + if os.path.isfile(icon_path): + if ext == ".svg": + # GTK4 handles SVGs natively via GdkPixbuf + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( + icon_path, 48, 48, True + ) + texture = Gdk.Texture.new_for_pixbuf(pixbuf) + self._logo.set_from_paintable(texture) + else: + # PNG path + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( + icon_path, 48, 48, True + ) + texture = Gdk.Texture.new_for_pixbuf(pixbuf) + self._logo.set_from_paintable(texture) + return # Fallback: themed symbolic icon self._logo.set_from_icon_name("system-run-symbolic") diff --git a/modules/core/sovran-hub.nix b/modules/core/sovran-hub.nix index cfb19e5..449c663 100644 --- a/modules/core/sovran-hub.nix +++ b/modules/core/sovran-hub.nix @@ -67,6 +67,7 @@ let pkgs.libadwaita pkgs.gobject-introspection pkgs.gdk-pixbuf + pkgs.librsvg ]; propagatedBuildInputs = [ @@ -85,7 +86,7 @@ let cp style.css $out/lib/sovran-hub/style.css # Copy logos from the repo (no fetchurl needed) - cp icons/*.png $out/share/sovran-hub/icons/ + cp icons/* $out/share/sovran-hub/icons/ 2>/dev/null || true # Install the generated config cp ${generatedConfig} $out/lib/sovran-hub/config.json @@ -130,4 +131,4 @@ in config = { environment.systemPackages = [ sovran-hub ]; }; -} \ No newline at end of file +}