[READ-ONLY] Mirror of https://github.com/probablykasper/ferrum. Music library app for Mac, Linux and Windows ferrum.kasper.space
electron linux macos music music-library music-player napi windows
0

Configure Feed

Select the types of activity you want to include in your feed.

Fix top/bottom bar padding

Kasper (Mar 5, 2026, 2:35 PM +0100) 6eb529dd d38e553d

+44 -16
+13
Cargo.lock
··· 1152 1152 "tauri-plugin-dialog", 1153 1153 "tauri-plugin-fs", 1154 1154 "tauri-plugin-opener", 1155 + "tauri-plugin-safe-area-insets-css", 1155 1156 "tauri-plugin-store", 1156 1157 "tauri-specta", 1157 1158 ] ··· 4404 4405 "url", 4405 4406 "windows 0.61.3", 4406 4407 "zbus", 4408 + ] 4409 + 4410 + [[package]] 4411 + name = "tauri-plugin-safe-area-insets-css" 4412 + version = "0.2.0" 4413 + source = "registry+https://github.com/rust-lang/crates.io-index" 4414 + checksum = "245c374d1f8b4f68b4b14596a8d4252c3410eb0591685cc21d2d34158aab3949" 4415 + dependencies = [ 4416 + "serde", 4417 + "tauri", 4418 + "tauri-plugin", 4419 + "thiserror 2.0.16", 4407 4420 ] 4408 4421 4409 4422 [[package]]
+10
mobile/package-lock.json
··· 16 16 "@tauri-apps/plugin-store": "^2.4.2" 17 17 }, 18 18 "devDependencies": { 19 + "@saurl/tauri-plugin-safe-area-insets-css-api": "^0.1.0", 19 20 "@sveltejs/adapter-static": "^3.0.6", 20 21 "@sveltejs/kit": "^2.9.0", 21 22 "@sveltejs/vite-plugin-svelte": "^5.0.0", ··· 876 877 "os": [ 877 878 "win32" 878 879 ] 880 + }, 881 + "node_modules/@saurl/tauri-plugin-safe-area-insets-css-api": { 882 + "version": "0.1.0", 883 + "resolved": "https://registry.npmjs.org/@saurl/tauri-plugin-safe-area-insets-css-api/-/tauri-plugin-safe-area-insets-css-api-0.1.0.tgz", 884 + "integrity": "sha512-cZbOexV7OSBvgGECrqInA7daoCRLG5wGcUy/zrRIDaqXVKP6THdLWwsC5Ho6UD0lsxr8O4+zd1PPFJwrlHxTYg==", 885 + "dev": true, 886 + "dependencies": { 887 + "@tauri-apps/api": "^2.5.0" 888 + } 879 889 }, 880 890 "node_modules/@standard-schema/spec": { 881 891 "version": "1.1.0",
+1
mobile/package.json
··· 24 24 "@tauri-apps/plugin-store": "^2.4.2" 25 25 }, 26 26 "devDependencies": { 27 + "@saurl/tauri-plugin-safe-area-insets-css-api": "^0.1.0", 27 28 "@sveltejs/adapter-static": "^3.0.6", 28 29 "@sveltejs/kit": "^2.9.0", 29 30 "@sveltejs/vite-plugin-svelte": "^5.0.0",
+1
mobile/src-tauri/Cargo.toml
··· 29 29 simd-json = "0.16.0" 30 30 tauri-plugin-fs = "2" 31 31 tauri-plugin-store = "2" 32 + tauri-plugin-safe-area-insets-css = "0.2.0" 32 33 33 34 [target.'cfg(target_os = "android")'.dependencies] 34 35 android_logger = "0.15.1"
+13 -14
mobile/src-tauri/capabilities/default.json
··· 1 1 { 2 - "$schema": "../gen/schemas/desktop-schema.json", 3 - "identifier": "default", 4 - "description": "Capability for the main window", 5 - "windows": [ 6 - "main" 7 - ], 8 - "permissions": [ 9 - "core:default", 10 - "opener:default", 11 - "dialog:default", 12 - "fs:default", 13 - "store:default" 14 - ] 15 - } 2 + "$schema": "../gen/schemas/desktop-schema.json", 3 + "identifier": "default", 4 + "description": "Capability for the main window", 5 + "windows": ["main"], 6 + "permissions": [ 7 + "core:default", 8 + "opener:default", 9 + "dialog:default", 10 + "fs:default", 11 + "store:default", 12 + "safe-area-insets-css:default" 13 + ] 14 + }
+1
mobile/src-tauri/src/lib.rs
··· 101 101 .plugin(tauri_plugin_fs::init()) 102 102 .plugin(tauri_plugin_dialog::init()) 103 103 .plugin(tauri_plugin_opener::init()) 104 + .plugin(tauri_plugin_safe_area_insets_css::init()) 104 105 .invoke_handler(specta_builder.invoke_handler()) 105 106 .run(tauri::generate_context!()) 106 107 .expect("error while running tauri application");
+5 -2
mobile/src/routes/+page.svelte
··· 5 5 import { readTextFile } from '@tauri-apps/plugin-fs' 6 6 import Library from './Library.svelte' 7 7 import { Store } from '@tauri-apps/plugin-store' 8 + import '@saurl/tauri-plugin-safe-area-insets-css-api' 8 9 9 10 let loading = $state(false) 10 11 let error = $state('') ··· 25 26 load_library(path) 26 27 } 27 28 } 28 - console.log(await store.entries()) 29 29 async function load_library(path: string) { 30 30 loading = true 31 31 library = null ··· 49 49 </script> 50 50 51 51 <div 52 - class="flex h-screen flex-col overflow-hidden bg-white text-sm text-neutral-800 scheme-light-dark dark:bg-neutral-950 dark:text-neutral-200" 52 + class="flex h-screen flex-col overflow-hidden bg-white text-sm text-neutral-800 scheme-light-dark dark:bg-neutral-950 dark:text-neutral-200 pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]" 53 + style:padding-top='var(--safe-area-inset-top)' 54 + style:padding-bottom='var(--safe-area-inset-bottom)' 55 + 53 56 > 54 57 {#if error} 55 58 <div class="shrink-0 border-b border-red-900 bg-red-950 px-4 py-2.5 text-xs text-red-400">