diff --git a/sysdata/programs/render_example/src/examples/assets/able.bmp b/sysdata/assets/able.bmp
similarity index 100%
rename from sysdata/programs/render_example/src/examples/assets/able.bmp
rename to sysdata/assets/able.bmp
diff --git a/sysdata/consolefonts/tamsyn/10x20b.psf b/sysdata/assets/consolefonts/tamsyn/10x20b.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/10x20b.psf
rename to sysdata/assets/consolefonts/tamsyn/10x20b.psf
diff --git a/sysdata/consolefonts/tamsyn/10x20r.psf b/sysdata/assets/consolefonts/tamsyn/10x20r.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/10x20r.psf
rename to sysdata/assets/consolefonts/tamsyn/10x20r.psf
diff --git a/sysdata/consolefonts/tamsyn/5x9b.psf b/sysdata/assets/consolefonts/tamsyn/5x9b.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/5x9b.psf
rename to sysdata/assets/consolefonts/tamsyn/5x9b.psf
diff --git a/sysdata/consolefonts/tamsyn/5x9r.psf b/sysdata/assets/consolefonts/tamsyn/5x9r.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/5x9r.psf
rename to sysdata/assets/consolefonts/tamsyn/5x9r.psf
diff --git a/sysdata/consolefonts/tamsyn/6x12b.psf b/sysdata/assets/consolefonts/tamsyn/6x12b.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/6x12b.psf
rename to sysdata/assets/consolefonts/tamsyn/6x12b.psf
diff --git a/sysdata/consolefonts/tamsyn/6x12r.psf b/sysdata/assets/consolefonts/tamsyn/6x12r.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/6x12r.psf
rename to sysdata/assets/consolefonts/tamsyn/6x12r.psf
diff --git a/sysdata/consolefonts/tamsyn/7x13b.psf b/sysdata/assets/consolefonts/tamsyn/7x13b.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/7x13b.psf
rename to sysdata/assets/consolefonts/tamsyn/7x13b.psf
diff --git a/sysdata/consolefonts/tamsyn/7x13r.psf b/sysdata/assets/consolefonts/tamsyn/7x13r.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/7x13r.psf
rename to sysdata/assets/consolefonts/tamsyn/7x13r.psf
diff --git a/sysdata/consolefonts/tamsyn/7x14b.psf b/sysdata/assets/consolefonts/tamsyn/7x14b.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/7x14b.psf
rename to sysdata/assets/consolefonts/tamsyn/7x14b.psf
diff --git a/sysdata/consolefonts/tamsyn/7x14r.psf b/sysdata/assets/consolefonts/tamsyn/7x14r.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/7x14r.psf
rename to sysdata/assets/consolefonts/tamsyn/7x14r.psf
diff --git a/sysdata/consolefonts/tamsyn/8x15b.psf b/sysdata/assets/consolefonts/tamsyn/8x15b.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/8x15b.psf
rename to sysdata/assets/consolefonts/tamsyn/8x15b.psf
diff --git a/sysdata/consolefonts/tamsyn/8x15r.psf b/sysdata/assets/consolefonts/tamsyn/8x15r.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/8x15r.psf
rename to sysdata/assets/consolefonts/tamsyn/8x15r.psf
diff --git a/sysdata/consolefonts/tamsyn/8x16b.psf b/sysdata/assets/consolefonts/tamsyn/8x16b.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/8x16b.psf
rename to sysdata/assets/consolefonts/tamsyn/8x16b.psf
diff --git a/sysdata/consolefonts/tamsyn/8x16r.psf b/sysdata/assets/consolefonts/tamsyn/8x16r.psf
similarity index 100%
rename from sysdata/consolefonts/tamsyn/8x16r.psf
rename to sysdata/assets/consolefonts/tamsyn/8x16r.psf
diff --git a/sysdata/consolefonts/tamsyn/LICENSE b/sysdata/assets/consolefonts/tamsyn/LICENSE
similarity index 100%
rename from sysdata/consolefonts/tamsyn/LICENSE
rename to sysdata/assets/consolefonts/tamsyn/LICENSE
diff --git a/sysdata/programs/render_example/src/examples/assets/mini.bmp b/sysdata/assets/mini.bmp
similarity index 100%
rename from sysdata/programs/render_example/src/examples/assets/mini.bmp
rename to sysdata/assets/mini.bmp
diff --git a/sysdata/programs/render_example/src/examples/assets/mini.qoi b/sysdata/assets/mini.qoi
similarity index 100%
rename from sysdata/programs/render_example/src/examples/assets/mini.qoi
rename to sysdata/assets/mini.qoi
diff --git a/sysdata/programs/render_example/src/examples/assets/wallpaper.qoi b/sysdata/assets/wallpaper.qoi
similarity index 100%
rename from sysdata/programs/render_example/src/examples/assets/wallpaper.qoi
rename to sysdata/assets/wallpaper.qoi
diff --git a/sysdata/libraries/horizon_api/src/widgets/image.hb b/sysdata/libraries/horizon_api/src/widgets/image.hb
index 67e5391..b686aa8 100644
--- a/sysdata/libraries/horizon_api/src/widgets/image.hb
+++ b/sysdata/libraries/horizon_api/src/widgets/image.hb
@@ -1,5 +1,13 @@
-// Image := struct {
-// 	magic: uint,
-// 	is_dirty: bool,
-// 	surface: Surface,
-// }
\ No newline at end of file
+render := @use("../../../../libraries/render/src/lib.hb");
+.{Surface} := render
+
+Image := struct {
+	magic: uint,
+	is_dirty: bool,
+	surface: Surface,
+}
+
+image_from_surface := fn(surface: Surface): Image {
+	img := Image.(4, true, surface)
+	return img
+}
\ No newline at end of file
diff --git a/sysdata/libraries/render/src/image/qoi.hb b/sysdata/libraries/render/src/image/qoi.hb
index 23a4907..2f4c888 100644
--- a/sysdata/libraries/render/src/image/qoi.hb
+++ b/sysdata/libraries/render/src/image/qoi.hb
@@ -4,20 +4,20 @@
 /* source:
    https://github.com/phoboslab/qoi/blob/master/qoi.h */
 
-QOI_SRGB := 0
-QOI_LINEAR := 1
-QOI_OP_INDEX := 0x0
-QOI_OP_DIFF := 0x40
-QOI_OP_LUMA := 0x80
-QOI_OP_RUN := 0xC0
-QOI_OP_RGB := 0xFE
-QOI_OP_RGBA := 0xFF
-QOI_MASK_2 := 0xC0
+$QOI_SRGB := 0
+$QOI_LINEAR := 1
+$QOI_OP_INDEX := 0x0
+$QOI_OP_DIFF := 0x40
+$QOI_OP_LUMA := 0x80
+$QOI_OP_RUN := 0xC0
+$QOI_OP_RGB := 0xFE
+$QOI_OP_RGBA := 0xFF
+$QOI_MASK_2 := 0xC0
 QOI_COLOR_HASH := fn(c: Color): u8 {
 	return (c.r * 3 + c.g * 5 + c.b * 7 + c.a * 11) % 64
 }
-QOI_MAGIC := 0x716F6966
-QOI_PIXELS_MAX := 400000000
+$QOI_MAGIC := 0x716F6966
+$QOI_PIXELS_MAX := 400000000
 
 QuiteOkayHeader := packed struct {
 	magic: u32,
diff --git a/sysdata/libraries/render/src/lib.hb b/sysdata/libraries/render/src/lib.hb
index 465a004..c72b8cd 100644
--- a/sysdata/libraries/render/src/lib.hb
+++ b/sysdata/libraries/render/src/lib.hb
@@ -17,22 +17,22 @@ indexptr := mode.indexptr
 
 // Colours
 Color := packed struct {b: u8, g: u8, r: u8, a: u8}
-white := Color.(255, 255, 255, 255)
-black := Color.(0, 0, 0, 255)
-gray := Color.(127, 127, 127, 255)
-red := Color.(0, 0, 205, 255)
-green := Color.(0, 205, 0, 255)
-yellow := Color.(0, 205, 205, 255)
-blue := Color.(205, 0, 0, 255)
-magenta := Color.(205, 0, 205, 255)
-cyan := Color.(205, 205, 0, 255)
-light_gray := Color.(229, 229, 229, 255)
-light_red := Color.(0, 0, 255, 255)
-light_green := Color.(0, 255, 0, 255)
-light_yellow := Color.(0, 255, 255, 255)
-light_blue := Color.(255, 0, 0, 255)
-light_magenta := Color.(255, 0, 255, 255)
-light_cyan := Color.(255, 255, 0, 255)
+$white := Color.(255, 255, 255, 255)
+$black := Color.(0, 0, 0, 255)
+$gray := Color.(127, 127, 127, 255)
+$red := Color.(0, 0, 205, 255)
+$green := Color.(0, 205, 0, 255)
+$yellow := Color.(0, 205, 205, 255)
+$blue := Color.(205, 0, 0, 255)
+$magenta := Color.(205, 0, 205, 255)
+$cyan := Color.(205, 205, 0, 255)
+$light_gray := Color.(229, 229, 229, 255)
+$light_red := Color.(0, 0, 255, 255)
+$light_green := Color.(0, 255, 0, 255)
+$light_yellow := Color.(0, 255, 255, 255)
+$light_blue := Color.(255, 0, 0, 255)
+$light_magenta := Color.(255, 0, 255, 255)
+$light_cyan := Color.(255, 255, 0, 255)
 
 // Drawing
 put_pixel := mode.put_pixel
diff --git a/sysdata/programs/app_bar/README.md b/sysdata/programs/app_bar/README.md
deleted file mode 100644
index 78d8cc6..0000000
--- a/sysdata/programs/app_bar/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# app bar
-The app bar is a mini-bar meant to launch applications.
\ No newline at end of file
diff --git a/sysdata/programs/app_bar/meta.toml b/sysdata/programs/app_bar/meta.toml
deleted file mode 100644
index 80e868e..0000000
--- a/sysdata/programs/app_bar/meta.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-[package]
-name = "app_bar"
-authors = ["able"]
-
-[dependants.libraries]
-
-[dependants.binaries]
-hblang.version = "1.0.0"
-
-[build]
-command = "hblang src/main.hb"
diff --git a/sysdata/programs/app_bar/src/main.hb b/sysdata/programs/app_bar/src/main.hb
deleted file mode 100644
index 68f601d..0000000
--- a/sysdata/programs/app_bar/src/main.hb
+++ /dev/null
@@ -1,35 +0,0 @@
-stn := @use("../../../libraries/stn/src/lib.hb");
-.{string, memory, buffer, random, log} := stn;
-.{Vec2} := stn.math
-
-horizon_api := @use("../../../libraries/horizon_api/src/lib.hb")
-
-render := @use("../../../libraries/render/src/lib.hb")
-
-psf := @embed("../../../consolefonts/tamsyn/10x20r.psf")
-
-main := fn(): int {
-	screen := render.init(true)
-
-	// Clear the screen to black.
-	render.clear(screen, render.black)
-
-	x := 0
-
-	mem_buf := memory.request_page(1)
-	color := random.any(render.Color)
-
-	str := "Window Title Bar\0"
-	font := render.text.font_from_psf2(@bitcast(&psf))
-
-	loop {
-		// Clear the screen
-		render.clear(screen, render.black)
-
-		render.put_rect(screen, .(0, 0), .(screen.width - 1, 26), render.white)
-		// Sync the screen
-		render.sync(screen)
-	}
-
-	return 0
-}
\ No newline at end of file
diff --git a/sysdata/programs/horizon/src/main.hb b/sysdata/programs/horizon/src/main.hb
index b146c96..37cad69 100644
--- a/sysdata/programs/horizon/src/main.hb
+++ b/sysdata/programs/horizon/src/main.hb
@@ -21,7 +21,8 @@ Window := struct {
 	y: int,
 }
 
-psf := @embed("../../../consolefonts/tamsyn/10x20r.psf")
+psf := @embed("../../../assets/consolefonts/tamsyn/10x20r.psf")
+img := @embed("../../../assets/wallpaper.qoi")
 
 main := fn(): int {
 	win_buff := buffer.create("XHorizon\0")
@@ -31,6 +32,11 @@ main := fn(): int {
 	// Clear the screen to black.
 	render.clear(screen, render.black)
 
+	wallpaper := render.image.from(@bitcast(&img))
+	if wallpaper == null {
+		return 1
+	}
+
 	window := render.new_surface(screen.width / 3, screen.height / 3)
 
 	mem_buf := memory.request_page(1)
@@ -43,12 +49,14 @@ main := fn(): int {
 	mouse_x := @as(i16, 0)
 	mouse_y := @as(i16, 0)
 	text_label := new_label("Hi\0")
+
 	// widgets := "()\0"
 	// ui := sexpr_parser(widgets)
 
 	loop {
 		// Clear the screen
 		render.clear(screen, render.black)
+		render.put_surface(screen, wallpaper, .(0, 0), false)
 
 		// TODO: Read the window buffer here
 		{
@@ -77,7 +85,7 @@ main := fn(): int {
 		{
 			pos := Vec2(uint).(1, screen.height - 21)
 			render_label_to_surface(screen, text_label, font, pos)
-			render.put_rect(screen, .(0, screen.height - 21), .(screen.width - 1, screen.height - 1), render.white)
+			render.put_rect(screen, .(0, screen.height - 21), .(screen.width - 1, 20), render.white)
 		}
 
 		{
@@ -113,9 +121,11 @@ main := fn(): int {
 
 				if mouse_event.left {
 					set_label_text(text_label, "LEFT CLICK\0")
-				} else if mouse_event.middle {
+				}
+				if mouse_event.middle {
 					set_label_text(text_label, "MIDDLE CLICK\0")
-				} else if mouse_event.right {
+				}
+				if mouse_event.right {
 					set_label_text(text_label, "RIGHT CLICK\0")
 				}
 			}
diff --git a/sysdata/programs/ps2_mouse_driver/src/main.hb b/sysdata/programs/ps2_mouse_driver/src/main.hb
index 43544fa..5468017 100644
--- a/sysdata/programs/ps2_mouse_driver/src/main.hb
+++ b/sysdata/programs/ps2_mouse_driver/src/main.hb
@@ -6,22 +6,11 @@ intouch := @use("../../../libraries/intouch/src/lib.hb");
 
 i9 := packed struct {sign: bool, value: u8}
 Button := struct {id: u8}
-LeftButton := Button.(1)
-RightButton := Button.(2)
-MiddleButton := Button.(4)
-Button4 := Button.(8)
-Button5 := Button.(16)
-
-mouse_moved := fn(delta: Vec2(i9)): void {
-	// log.info("Mouse movement.\0")
-}
-button_event := fn(button: Button, pressed: bool): void {
-	if pressed {
-		// log.info("Mouse-button pressed.\0")
-	} else {
-		// log.info("Mouse-button released.\0")
-	}
-}
+$LeftButton := Button.(1)
+$RightButton := Button.(2)
+$MiddleButton := Button.(4)
+$Button4 := Button.(8)
+$Button5 := Button.(16)
 
 send_byte := fn(target: u8, data: u8): void {
 	loop if (memory.inb(0x64) & 2) == 0 break
@@ -41,7 +30,6 @@ send_command_byte := fn(byte: u8): void {
 	@inline(send_byte, 0x64, 0xD4)
 	@inline(send_byte, 0x60, byte)
 	loop if memory.inb(0x60) == 0xFA {
-		log.info("ACK\0")
 		return
 	}
 }
@@ -61,13 +49,13 @@ set_linear_scaling := fn(): void @inline(send_command_byte, 0xE6)
 resend_packet := fn(): void @inline(send_command_byte, 0xFE)
 
 SampleRate := struct {value: u8}
-sr10 := SampleRate.(10)
-sr20 := SampleRate.(20)
-sr40 := SampleRate.(40)
-sr60 := SampleRate.(60)
-sr80 := SampleRate.(80)
-sr100 := SampleRate.(100)
-sr200 := SampleRate.(200)
+$sr10 := SampleRate.(10)
+$sr20 := SampleRate.(20)
+$sr40 := SampleRate.(40)
+$sr60 := SampleRate.(60)
+$sr80 := SampleRate.(80)
+$sr100 := SampleRate.(100)
+$sr200 := SampleRate.(200)
 
 set_sample_rate := fn(sample_rate: SampleRate): void {
 	@inline(send_command_byte, 0xE6)
@@ -75,10 +63,10 @@ set_sample_rate := fn(sample_rate: SampleRate): void {
 }
 
 Resolution := struct {value: u8}
-res_1count_per_mm := Resolution.(0)
-res_2count_per_mm := Resolution.(1)
-res_4count_per_mm := Resolution.(2)
-res_8count_per_mm := Resolution.(3)
+$res_1count_per_mm := Resolution.(0)
+$res_2count_per_mm := Resolution.(1)
+$res_4count_per_mm := Resolution.(2)
+$res_8count_per_mm := Resolution.(3)
 
 set_resolution := fn(resolution: Resolution): void {
 	@inline(send_command_byte, 0xE6)
@@ -122,28 +110,22 @@ main := fn(): int {
 
 		changes := button_states ^ status & 7
 
-		if (changes & LeftButton.id) != 0 {
-			if (status & LeftButton.id) != 0 {
-				event.left = true
-			} else {
-				event.left = false
-			}
+		if (changes & LeftButton.id) != 0 | (status & LeftButton.id) != 0 {
+			event.left = true
+		} else {
+			event.left = false
 		}
 
-		if (changes & MiddleButton.id) != 0 {
-			if (status & MiddleButton.id) != 0 {
-				event.middle = true
-			} else {
-				event.middle = false
-			}
+		if (changes & MiddleButton.id) != 0 | (status & MiddleButton.id) != 0 {
+			event.middle = true
+		} else {
+			event.middle = false
 		}
 
-		if (changes & RightButton.id) != 0 {
-			if (status & RightButton.id) != 0 {
-				event.right = true
-			} else {
-				event.right = false
-			}
+		if (changes & RightButton.id) != 0 | (status & RightButton.id) != 0 {
+			event.right = true
+		} else {
+			event.right = false
 		}
 
 		button_states ^= changes
diff --git a/sysdata/programs/render_example/src/examples/image.hb b/sysdata/programs/render_example/src/examples/image.hb
index 621e6fa..d9f58e5 100644
--- a/sysdata/programs/render_example/src/examples/image.hb
+++ b/sysdata/programs/render_example/src/examples/image.hb
@@ -6,8 +6,8 @@ render := @use("../../../../libraries/render/src/lib.hb")
 
 example := fn(): void {
 	screen := render.init(true)
-	image_qoi := render.image.from(@bitcast(&@embed("./assets/mini.qoi")))
-	image_bmp := render.image.from(@bitcast(&@embed("./assets/mini.bmp")))
+	image_qoi := render.image.from(@bitcast(&@embed("../../../../assets/mini.qoi")))
+	image_bmp := render.image.from(@bitcast(&@embed("../../../../assets/mini.bmp")))
 
 	if image_qoi == null | image_bmp == null {
 		log.error("failed to load images for whatever reason\0")
diff --git a/sysdata/programs/render_example/src/examples/text.hb b/sysdata/programs/render_example/src/examples/text.hb
index f9e0a5e..74ae601 100644
--- a/sysdata/programs/render_example/src/examples/text.hb
+++ b/sysdata/programs/render_example/src/examples/text.hb
@@ -13,8 +13,8 @@ render := @use("../../../../libraries/render/src/lib.hb")
    - shift key support
 */
 
-psf := @embed("../../../../consolefonts/tamsyn/10x20r.psf")
-img := @embed("./assets/wallpaper.qoi")
+psf := @embed("../../../../assets/consolefonts/tamsyn/10x20r.psf")
+img := @embed("../../../../assets/wallpaper.qoi")
 
 is_shift_pressed := false
 is_ctrl_pressed := false