diff --git a/Cargo.lock b/Cargo.lock
index 102d8d9..71b2813 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -313,6 +313,16 @@ dependencies = [
"zbus",
]
+[[package]]
+name = "assets"
+version = "1.0.0"
+dependencies = [
+ "anyhow",
+ "gpui",
+ "log",
+ "rust-embed",
+]
+
[[package]]
name = "async-broadcast"
version = "0.7.2"
@@ -7754,6 +7764,7 @@ dependencies = [
name = "signed"
version = "1.0.0"
dependencies = [
+ "assets",
"gpui",
"gpui-component",
"gpui_linux",
diff --git a/crates/assets/Cargo.toml b/crates/assets/Cargo.toml
new file mode 100644
index 0000000..3e3d11f
--- /dev/null
+++ b/crates/assets/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "assets"
+version.workspace = true
+edition.workspace = true
+publish.workspace = true
+
+[dependencies]
+gpui.workspace = true
+anyhow.workspace = true
+log.workspace = true
+rust-embed.workspace = true
diff --git a/crates/assets/assets/.keep b/crates/assets/assets/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/crates/assets/assets/icons/README.md b/crates/assets/assets/icons/README.md
new file mode 100644
index 0000000..62d9f35
--- /dev/null
+++ b/crates/assets/assets/icons/README.md
@@ -0,0 +1,115 @@
+# Icons
+
+Icon set for the Signed app. Each file mirrors the name of the equivalent
+[gpui-component](https://github.com/longbridge/gpui-component/tree/main/crates/assets/assets/icons)
+icon, but the artwork comes from
+[Remix Icon](https://remixicon.com/) v4.9.1 (Apache-2.0) unless noted.
+
+All SVGs are 24×24 (`viewBox="0 0 24 24"`) and use `fill="currentColor"`, so
+gpui renders them with the requested color.
+
+## Mapping (gpui-component icon → Remix Icon)
+
+| File | Remix Icon |
+| --- | --- |
+| `a-large-small.svg` | `font-size` |
+| `arrow-down.svg` | `arrow-down-line` |
+| `arrow-left.svg` | `arrow-left-line` |
+| `arrow-right.svg` | `arrow-right-line` |
+| `arrow-up.svg` | `arrow-up-line` |
+| `asterisk.svg` | `asterisk` |
+| `battery.svg` | `battery-line` |
+| `battery-charging.svg` | `battery-charge-line` |
+| `battery-low.svg` | `battery-low-line` |
+| `bell.svg` | `bell-line` |
+| `book-open.svg` | `book-open-line` |
+| `bot.svg` | `robot-line` |
+| `building-2.svg` | `building-2-line` |
+| `calendar.svg` | `calendar-line` |
+| `chart-pie.svg` | `pie-chart-2-line` |
+| `check.svg` | `check-line` |
+| `chevron-down.svg` | `arrow-down-s-line` |
+| `chevron-left.svg` | `arrow-left-s-line` |
+| `chevron-right.svg` | `arrow-right-s-line` |
+| `chevron-up.svg` | `arrow-up-s-line` |
+| `chevrons-up-down.svg` | `expand-up-down-line` |
+| `circle-check.svg` | `checkbox-circle-line` |
+| `circle-user.svg` | `account-circle-line` |
+| `circle-x.svg` | `close-circle-line` |
+| `close.svg` | `close-line` |
+| `copy.svg` | `file-copy-line` |
+| `cpu.svg` | `cpu-line` |
+| `dash.svg` | `subtract-line` |
+| `delete.svg` | `delete-bin-line` |
+| `ellipsis.svg` | `more-line` |
+| `ellipsis-vertical.svg` | `more-2-line` |
+| `external-link.svg` | `external-link-line` |
+| `eye.svg` | `eye-line` |
+| `eye-off.svg` | `eye-off-line` |
+| `file.svg` | `file-line` |
+| `folder.svg` | `folder-line` |
+| `folder-closed.svg` | `folder-2-line` |
+| `folder-open.svg` | `folder-open-line` |
+| `github.svg` | `github-line` |
+| `globe.svg` | `global-line` |
+| `hard-drive.svg` | `hard-drive-2-line` |
+| `heart.svg` | `heart-line` |
+| `inbox.svg` | `inbox-line` |
+| `info.svg` | `information-line` |
+| `layout-dashboard.svg` | `dashboard-line` |
+| `loader.svg` | `loader-line` |
+| `loader-circle.svg` | `loader-4-line` |
+| `map.svg` | `map-2-line` |
+| `maximize.svg` | `fullscreen-line` |
+| `menu.svg` | `menu-line` |
+| `minimize.svg` | `fullscreen-exit-line` |
+| `minus.svg` | `subtract-line` |
+| `moon.svg` | `moon-line` |
+| `network.svg` | `share-line` |
+| `palette.svg` | `palette-line` |
+| `panel-bottom.svg` | `layout-bottom-line` |
+| `panel-left.svg` | `layout-left-line` |
+| `panel-right.svg` | `layout-right-line` |
+| `pause.svg` | `pause-line` |
+| `play.svg` | `play-line` |
+| `plus.svg` | `add-line` |
+| `redo.svg` | `corner-up-right-line` |
+| `redo-2.svg` | `arrow-go-forward-line` |
+| `replace.svg` | `swap-box-line` |
+| `resize-corner.svg` | `corner-right-down-line` |
+| `search.svg` | `search-line` |
+| `settings.svg` | `settings-line` |
+| `settings-2.svg` | `equalizer-line` |
+| `sort-ascending.svg` | `sort-asc` |
+| `sort-descending.svg` | `sort-desc` |
+| `square-terminal.svg` | `terminal-box-line` |
+| `star.svg` | `star-line` |
+| `star-fill.svg` | `star-fill` |
+| `star-off.svg` | `star-off-line` |
+| `sun.svg` | `sun-line` |
+| `thumbs-down.svg` | `thumb-down-line` |
+| `thumbs-up.svg` | `thumb-up-line` |
+| `triangle-alert.svg` | `alert-line` |
+| `undo.svg` | `corner-up-left-line` |
+| `undo-2.svg` | `arrow-go-back-line` |
+| `user.svg` | `user-line` |
+| `window-close.svg` | `close-line` |
+| `window-maximize.svg` | `checkbox-blank-line` |
+| `window-minimize.svg` | `subtract-line` |
+| `window-restore.svg` | `picture-in-picture-line` |
+
+## Kept as original (no Remix equivalent)
+
+These have no close Remix Icon counterpart and keep the original lucide
+artwork from gpui-component:
+
+`battery-full.svg`, `battery-medium.svg`, `battery-warning.svg`,
+`case-sensitive.svg`, `frame.svg`, `gallery-vertical-end.svg`,
+`heart-off.svg`, `inspector.svg`, `memory-stick.svg`,
+`panel-bottom-open.svg`, `panel-left-close.svg`, `panel-left-open.svg`,
+`panel-right-close.svg`, `panel-right-open.svg`
+
+## Licensing
+
+- Remix Icon SVGs: [Apache-2.0](https://github.com/Remix-Design/RemixIcon/blob/master/License)
+- Lucide SVGs (kept originals): [ISC](https://github.com/lucide-icons/lucide/blob/main/LICENSE)
diff --git a/crates/assets/assets/icons/a-large-small.svg b/crates/assets/assets/icons/a-large-small.svg
new file mode 100644
index 0000000..17d60fc
--- /dev/null
+++ b/crates/assets/assets/icons/a-large-small.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/arrow-down.svg b/crates/assets/assets/icons/arrow-down.svg
new file mode 100644
index 0000000..3246720
--- /dev/null
+++ b/crates/assets/assets/icons/arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/arrow-left.svg b/crates/assets/assets/icons/arrow-left.svg
new file mode 100644
index 0000000..81cf0eb
--- /dev/null
+++ b/crates/assets/assets/icons/arrow-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/arrow-right.svg b/crates/assets/assets/icons/arrow-right.svg
new file mode 100644
index 0000000..d859f2d
--- /dev/null
+++ b/crates/assets/assets/icons/arrow-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/arrow-up.svg b/crates/assets/assets/icons/arrow-up.svg
new file mode 100644
index 0000000..241454c
--- /dev/null
+++ b/crates/assets/assets/icons/arrow-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/asterisk.svg b/crates/assets/assets/icons/asterisk.svg
new file mode 100644
index 0000000..77417cd
--- /dev/null
+++ b/crates/assets/assets/icons/asterisk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/battery-charging.svg b/crates/assets/assets/icons/battery-charging.svg
new file mode 100644
index 0000000..06d1b41
--- /dev/null
+++ b/crates/assets/assets/icons/battery-charging.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/battery-full.svg b/crates/assets/assets/icons/battery-full.svg
new file mode 100644
index 0000000..4279ecf
--- /dev/null
+++ b/crates/assets/assets/icons/battery-full.svg
@@ -0,0 +1,14 @@
+
diff --git a/crates/assets/assets/icons/battery-low.svg b/crates/assets/assets/icons/battery-low.svg
new file mode 100644
index 0000000..963008b
--- /dev/null
+++ b/crates/assets/assets/icons/battery-low.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/battery-medium.svg b/crates/assets/assets/icons/battery-medium.svg
new file mode 100644
index 0000000..65d6ac1
--- /dev/null
+++ b/crates/assets/assets/icons/battery-medium.svg
@@ -0,0 +1,18 @@
+
diff --git a/crates/assets/assets/icons/battery-warning.svg b/crates/assets/assets/icons/battery-warning.svg
new file mode 100644
index 0000000..aa35819
--- /dev/null
+++ b/crates/assets/assets/icons/battery-warning.svg
@@ -0,0 +1,16 @@
+
diff --git a/crates/assets/assets/icons/battery.svg b/crates/assets/assets/icons/battery.svg
new file mode 100644
index 0000000..d83ac0b
--- /dev/null
+++ b/crates/assets/assets/icons/battery.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/bell.svg b/crates/assets/assets/icons/bell.svg
new file mode 100644
index 0000000..eadf6f6
--- /dev/null
+++ b/crates/assets/assets/icons/bell.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/book-open.svg b/crates/assets/assets/icons/book-open.svg
new file mode 100644
index 0000000..5e07c2b
--- /dev/null
+++ b/crates/assets/assets/icons/book-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/bot.svg b/crates/assets/assets/icons/bot.svg
new file mode 100644
index 0000000..9d3b6e0
--- /dev/null
+++ b/crates/assets/assets/icons/bot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/building-2.svg b/crates/assets/assets/icons/building-2.svg
new file mode 100644
index 0000000..7cc62c4
--- /dev/null
+++ b/crates/assets/assets/icons/building-2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/calendar.svg b/crates/assets/assets/icons/calendar.svg
new file mode 100644
index 0000000..930d804
--- /dev/null
+++ b/crates/assets/assets/icons/calendar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/case-sensitive.svg b/crates/assets/assets/icons/case-sensitive.svg
new file mode 100644
index 0000000..648134f
--- /dev/null
+++ b/crates/assets/assets/icons/case-sensitive.svg
@@ -0,0 +1 @@
+
diff --git a/crates/assets/assets/icons/chart-pie.svg b/crates/assets/assets/icons/chart-pie.svg
new file mode 100644
index 0000000..6eb096d
--- /dev/null
+++ b/crates/assets/assets/icons/chart-pie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/check.svg b/crates/assets/assets/icons/check.svg
new file mode 100644
index 0000000..c0272c0
--- /dev/null
+++ b/crates/assets/assets/icons/check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/chevron-down.svg b/crates/assets/assets/icons/chevron-down.svg
new file mode 100644
index 0000000..e1bc908
--- /dev/null
+++ b/crates/assets/assets/icons/chevron-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/chevron-left.svg b/crates/assets/assets/icons/chevron-left.svg
new file mode 100644
index 0000000..7f92ade
--- /dev/null
+++ b/crates/assets/assets/icons/chevron-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/chevron-right.svg b/crates/assets/assets/icons/chevron-right.svg
new file mode 100644
index 0000000..94f2d24
--- /dev/null
+++ b/crates/assets/assets/icons/chevron-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/chevron-up.svg b/crates/assets/assets/icons/chevron-up.svg
new file mode 100644
index 0000000..3a424df
--- /dev/null
+++ b/crates/assets/assets/icons/chevron-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/chevrons-up-down.svg b/crates/assets/assets/icons/chevrons-up-down.svg
new file mode 100644
index 0000000..879deb1
--- /dev/null
+++ b/crates/assets/assets/icons/chevrons-up-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/circle-check.svg b/crates/assets/assets/icons/circle-check.svg
new file mode 100644
index 0000000..eaffe5e
--- /dev/null
+++ b/crates/assets/assets/icons/circle-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/circle-user.svg b/crates/assets/assets/icons/circle-user.svg
new file mode 100644
index 0000000..b96c221
--- /dev/null
+++ b/crates/assets/assets/icons/circle-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/circle-x.svg b/crates/assets/assets/icons/circle-x.svg
new file mode 100644
index 0000000..2230aa0
--- /dev/null
+++ b/crates/assets/assets/icons/circle-x.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/close.svg b/crates/assets/assets/icons/close.svg
new file mode 100644
index 0000000..4ee8e56
--- /dev/null
+++ b/crates/assets/assets/icons/close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/copy.svg b/crates/assets/assets/icons/copy.svg
new file mode 100644
index 0000000..84dfcd9
--- /dev/null
+++ b/crates/assets/assets/icons/copy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/cpu.svg b/crates/assets/assets/icons/cpu.svg
new file mode 100644
index 0000000..a69c58c
--- /dev/null
+++ b/crates/assets/assets/icons/cpu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/dash.svg b/crates/assets/assets/icons/dash.svg
new file mode 100644
index 0000000..fcc1e94
--- /dev/null
+++ b/crates/assets/assets/icons/dash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/delete.svg b/crates/assets/assets/icons/delete.svg
new file mode 100644
index 0000000..e074d3a
--- /dev/null
+++ b/crates/assets/assets/icons/delete.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/ellipsis-vertical.svg b/crates/assets/assets/icons/ellipsis-vertical.svg
new file mode 100644
index 0000000..c48b99d
--- /dev/null
+++ b/crates/assets/assets/icons/ellipsis-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/ellipsis.svg b/crates/assets/assets/icons/ellipsis.svg
new file mode 100644
index 0000000..52c69ea
--- /dev/null
+++ b/crates/assets/assets/icons/ellipsis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/external-link.svg b/crates/assets/assets/icons/external-link.svg
new file mode 100644
index 0000000..20c991f
--- /dev/null
+++ b/crates/assets/assets/icons/external-link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/eye-off.svg b/crates/assets/assets/icons/eye-off.svg
new file mode 100644
index 0000000..0b53e64
--- /dev/null
+++ b/crates/assets/assets/icons/eye-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/eye.svg b/crates/assets/assets/icons/eye.svg
new file mode 100644
index 0000000..0100f61
--- /dev/null
+++ b/crates/assets/assets/icons/eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/file.svg b/crates/assets/assets/icons/file.svg
new file mode 100644
index 0000000..7ed925e
--- /dev/null
+++ b/crates/assets/assets/icons/file.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/folder-closed.svg b/crates/assets/assets/icons/folder-closed.svg
new file mode 100644
index 0000000..0c9430b
--- /dev/null
+++ b/crates/assets/assets/icons/folder-closed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/folder-open.svg b/crates/assets/assets/icons/folder-open.svg
new file mode 100644
index 0000000..f950fa2
--- /dev/null
+++ b/crates/assets/assets/icons/folder-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/folder.svg b/crates/assets/assets/icons/folder.svg
new file mode 100644
index 0000000..55c4342
--- /dev/null
+++ b/crates/assets/assets/icons/folder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/frame.svg b/crates/assets/assets/icons/frame.svg
new file mode 100644
index 0000000..6511851
--- /dev/null
+++ b/crates/assets/assets/icons/frame.svg
@@ -0,0 +1,22 @@
+
diff --git a/crates/assets/assets/icons/gallery-vertical-end.svg b/crates/assets/assets/icons/gallery-vertical-end.svg
new file mode 100644
index 0000000..39b1f80
--- /dev/null
+++ b/crates/assets/assets/icons/gallery-vertical-end.svg
@@ -0,0 +1,18 @@
+
diff --git a/crates/assets/assets/icons/github.svg b/crates/assets/assets/icons/github.svg
new file mode 100644
index 0000000..f5587c7
--- /dev/null
+++ b/crates/assets/assets/icons/github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/globe.svg b/crates/assets/assets/icons/globe.svg
new file mode 100644
index 0000000..e2147e9
--- /dev/null
+++ b/crates/assets/assets/icons/globe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/hard-drive.svg b/crates/assets/assets/icons/hard-drive.svg
new file mode 100644
index 0000000..d0d0cec
--- /dev/null
+++ b/crates/assets/assets/icons/hard-drive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/heart-off.svg b/crates/assets/assets/icons/heart-off.svg
new file mode 100644
index 0000000..68cda02
--- /dev/null
+++ b/crates/assets/assets/icons/heart-off.svg
@@ -0,0 +1 @@
+
diff --git a/crates/assets/assets/icons/heart.svg b/crates/assets/assets/icons/heart.svg
new file mode 100644
index 0000000..43be902
--- /dev/null
+++ b/crates/assets/assets/icons/heart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/inbox.svg b/crates/assets/assets/icons/inbox.svg
new file mode 100644
index 0000000..456b522
--- /dev/null
+++ b/crates/assets/assets/icons/inbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/info.svg b/crates/assets/assets/icons/info.svg
new file mode 100644
index 0000000..8c02c93
--- /dev/null
+++ b/crates/assets/assets/icons/info.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/inspector.svg b/crates/assets/assets/icons/inspector.svg
new file mode 100644
index 0000000..c3517a4
--- /dev/null
+++ b/crates/assets/assets/icons/inspector.svg
@@ -0,0 +1,18 @@
+
diff --git a/crates/assets/assets/icons/layout-dashboard.svg b/crates/assets/assets/icons/layout-dashboard.svg
new file mode 100644
index 0000000..ad64197
--- /dev/null
+++ b/crates/assets/assets/icons/layout-dashboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/loader-circle.svg b/crates/assets/assets/icons/loader-circle.svg
new file mode 100644
index 0000000..712d0a8
--- /dev/null
+++ b/crates/assets/assets/icons/loader-circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/loader.svg b/crates/assets/assets/icons/loader.svg
new file mode 100644
index 0000000..2dbd761
--- /dev/null
+++ b/crates/assets/assets/icons/loader.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/map.svg b/crates/assets/assets/icons/map.svg
new file mode 100644
index 0000000..508c658
--- /dev/null
+++ b/crates/assets/assets/icons/map.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/maximize.svg b/crates/assets/assets/icons/maximize.svg
new file mode 100644
index 0000000..6f84e6f
--- /dev/null
+++ b/crates/assets/assets/icons/maximize.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/memory-stick.svg b/crates/assets/assets/icons/memory-stick.svg
new file mode 100644
index 0000000..7d12b57
--- /dev/null
+++ b/crates/assets/assets/icons/memory-stick.svg
@@ -0,0 +1,22 @@
+
diff --git a/crates/assets/assets/icons/menu.svg b/crates/assets/assets/icons/menu.svg
new file mode 100644
index 0000000..771d875
--- /dev/null
+++ b/crates/assets/assets/icons/menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/minimize.svg b/crates/assets/assets/icons/minimize.svg
new file mode 100644
index 0000000..7e9cb74
--- /dev/null
+++ b/crates/assets/assets/icons/minimize.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/minus.svg b/crates/assets/assets/icons/minus.svg
new file mode 100644
index 0000000..fcc1e94
--- /dev/null
+++ b/crates/assets/assets/icons/minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/moon.svg b/crates/assets/assets/icons/moon.svg
new file mode 100644
index 0000000..aa64d7f
--- /dev/null
+++ b/crates/assets/assets/icons/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/network.svg b/crates/assets/assets/icons/network.svg
new file mode 100644
index 0000000..c6b0fbd
--- /dev/null
+++ b/crates/assets/assets/icons/network.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/palette.svg b/crates/assets/assets/icons/palette.svg
new file mode 100644
index 0000000..119e1a4
--- /dev/null
+++ b/crates/assets/assets/icons/palette.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/panel-bottom-open.svg b/crates/assets/assets/icons/panel-bottom-open.svg
new file mode 100644
index 0000000..df77e5b
--- /dev/null
+++ b/crates/assets/assets/icons/panel-bottom-open.svg
@@ -0,0 +1 @@
+
diff --git a/crates/assets/assets/icons/panel-bottom.svg b/crates/assets/assets/icons/panel-bottom.svg
new file mode 100644
index 0000000..d70a752
--- /dev/null
+++ b/crates/assets/assets/icons/panel-bottom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/panel-left-close.svg b/crates/assets/assets/icons/panel-left-close.svg
new file mode 100644
index 0000000..5f26cc6
--- /dev/null
+++ b/crates/assets/assets/icons/panel-left-close.svg
@@ -0,0 +1,14 @@
+
diff --git a/crates/assets/assets/icons/panel-left-open.svg b/crates/assets/assets/icons/panel-left-open.svg
new file mode 100644
index 0000000..579e458
--- /dev/null
+++ b/crates/assets/assets/icons/panel-left-open.svg
@@ -0,0 +1 @@
+
diff --git a/crates/assets/assets/icons/panel-left.svg b/crates/assets/assets/icons/panel-left.svg
new file mode 100644
index 0000000..3dac79e
--- /dev/null
+++ b/crates/assets/assets/icons/panel-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/panel-right-close.svg b/crates/assets/assets/icons/panel-right-close.svg
new file mode 100644
index 0000000..5fe9dcd
--- /dev/null
+++ b/crates/assets/assets/icons/panel-right-close.svg
@@ -0,0 +1,14 @@
+
diff --git a/crates/assets/assets/icons/panel-right-open.svg b/crates/assets/assets/icons/panel-right-open.svg
new file mode 100644
index 0000000..3b5ff0b
--- /dev/null
+++ b/crates/assets/assets/icons/panel-right-open.svg
@@ -0,0 +1 @@
+
diff --git a/crates/assets/assets/icons/panel-right.svg b/crates/assets/assets/icons/panel-right.svg
new file mode 100644
index 0000000..d37f5e7
--- /dev/null
+++ b/crates/assets/assets/icons/panel-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/pause.svg b/crates/assets/assets/icons/pause.svg
new file mode 100644
index 0000000..3ac2f47
--- /dev/null
+++ b/crates/assets/assets/icons/pause.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/play.svg b/crates/assets/assets/icons/play.svg
new file mode 100644
index 0000000..4b95321
--- /dev/null
+++ b/crates/assets/assets/icons/play.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/plus.svg b/crates/assets/assets/icons/plus.svg
new file mode 100644
index 0000000..15eb956
--- /dev/null
+++ b/crates/assets/assets/icons/plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/redo-2.svg b/crates/assets/assets/icons/redo-2.svg
new file mode 100644
index 0000000..abf1431
--- /dev/null
+++ b/crates/assets/assets/icons/redo-2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/redo.svg b/crates/assets/assets/icons/redo.svg
new file mode 100644
index 0000000..06b39d0
--- /dev/null
+++ b/crates/assets/assets/icons/redo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/replace.svg b/crates/assets/assets/icons/replace.svg
new file mode 100644
index 0000000..d1fd435
--- /dev/null
+++ b/crates/assets/assets/icons/replace.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/resize-corner.svg b/crates/assets/assets/icons/resize-corner.svg
new file mode 100644
index 0000000..07f7aa6
--- /dev/null
+++ b/crates/assets/assets/icons/resize-corner.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/search.svg b/crates/assets/assets/icons/search.svg
new file mode 100644
index 0000000..4273096
--- /dev/null
+++ b/crates/assets/assets/icons/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/settings-2.svg b/crates/assets/assets/icons/settings-2.svg
new file mode 100644
index 0000000..de5d127
--- /dev/null
+++ b/crates/assets/assets/icons/settings-2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/settings.svg b/crates/assets/assets/icons/settings.svg
new file mode 100644
index 0000000..7703c63
--- /dev/null
+++ b/crates/assets/assets/icons/settings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/sort-ascending.svg b/crates/assets/assets/icons/sort-ascending.svg
new file mode 100644
index 0000000..b615797
--- /dev/null
+++ b/crates/assets/assets/icons/sort-ascending.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/sort-descending.svg b/crates/assets/assets/icons/sort-descending.svg
new file mode 100644
index 0000000..95bdec9
--- /dev/null
+++ b/crates/assets/assets/icons/sort-descending.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/square-terminal.svg b/crates/assets/assets/icons/square-terminal.svg
new file mode 100644
index 0000000..d818b08
--- /dev/null
+++ b/crates/assets/assets/icons/square-terminal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/star-fill.svg b/crates/assets/assets/icons/star-fill.svg
new file mode 100644
index 0000000..e177475
--- /dev/null
+++ b/crates/assets/assets/icons/star-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/star-off.svg b/crates/assets/assets/icons/star-off.svg
new file mode 100644
index 0000000..3f682ff
--- /dev/null
+++ b/crates/assets/assets/icons/star-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/star.svg b/crates/assets/assets/icons/star.svg
new file mode 100644
index 0000000..8879428
--- /dev/null
+++ b/crates/assets/assets/icons/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/sun.svg b/crates/assets/assets/icons/sun.svg
new file mode 100644
index 0000000..1242b0a
--- /dev/null
+++ b/crates/assets/assets/icons/sun.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/thumbs-down.svg b/crates/assets/assets/icons/thumbs-down.svg
new file mode 100644
index 0000000..f067dfd
--- /dev/null
+++ b/crates/assets/assets/icons/thumbs-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/thumbs-up.svg b/crates/assets/assets/icons/thumbs-up.svg
new file mode 100644
index 0000000..a46d747
--- /dev/null
+++ b/crates/assets/assets/icons/thumbs-up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/triangle-alert.svg b/crates/assets/assets/icons/triangle-alert.svg
new file mode 100644
index 0000000..a476591
--- /dev/null
+++ b/crates/assets/assets/icons/triangle-alert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/undo-2.svg b/crates/assets/assets/icons/undo-2.svg
new file mode 100644
index 0000000..c72e0ec
--- /dev/null
+++ b/crates/assets/assets/icons/undo-2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/undo.svg b/crates/assets/assets/icons/undo.svg
new file mode 100644
index 0000000..a29b7c6
--- /dev/null
+++ b/crates/assets/assets/icons/undo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/user.svg b/crates/assets/assets/icons/user.svg
new file mode 100644
index 0000000..c4292eb
--- /dev/null
+++ b/crates/assets/assets/icons/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/window-close.svg b/crates/assets/assets/icons/window-close.svg
new file mode 100644
index 0000000..4ee8e56
--- /dev/null
+++ b/crates/assets/assets/icons/window-close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/window-maximize.svg b/crates/assets/assets/icons/window-maximize.svg
new file mode 100644
index 0000000..b5a3265
--- /dev/null
+++ b/crates/assets/assets/icons/window-maximize.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/window-minimize.svg b/crates/assets/assets/icons/window-minimize.svg
new file mode 100644
index 0000000..fcc1e94
--- /dev/null
+++ b/crates/assets/assets/icons/window-minimize.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/assets/icons/window-restore.svg b/crates/assets/assets/icons/window-restore.svg
new file mode 100644
index 0000000..f55fa10
--- /dev/null
+++ b/crates/assets/assets/icons/window-restore.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/crates/assets/src/lib.rs b/crates/assets/src/lib.rs
new file mode 100644
index 0000000..4f06a44
--- /dev/null
+++ b/crates/assets/src/lib.rs
@@ -0,0 +1,47 @@
+use anyhow::Context;
+use gpui::{App, AssetSource, Result, SharedString};
+use rust_embed::RustEmbed;
+
+#[derive(RustEmbed)]
+#[folder = "assets"]
+#[include = "icons/**/*.svg"]
+#[exclude = "*.DS_Store"]
+pub struct Assets;
+
+impl AssetSource for Assets {
+ fn load(&self, path: &str) -> Result