Plugin de Tauri para persistir la configuración de Vasak, leerla desde el frontend y reaccionar a cambios externos del archivo.
Pensado para npm, con una API limpia para Vue 3 + Pinia y una superficie mínima para consumirlo también sin store.
| Capacidad | Qué hace |
|---|---|
| Persistencia | Guarda y lee configuración sin lógica duplicada en el frontend. |
| Sincronización | Emite eventos cuando el archivo cambia externamente. |
| Compatibilidad | Mantiene soporte con configs previas gracias a defaults y campos opcionales. |
| Integración visual | Sincroniza tema y esquema cuando el entorno lo permite. |
npm install @vasakgroup/plugin-config-managerO con Bun:
bun add @vasakgroup/plugin-config-managerEn tu proyecto Rust agrega el plugin y registra la inicialización:
[dependencies]
tauri-plugin-config-manager = { git = "https://github.com/Vasak-OS/tauri-plugin-config-manager" }fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_config_manager::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}El flujo típico es simple: el frontend invoca el plugin, el plugin persiste la configuración y emite config-changed cuando detecta cambios externos.
import { onMounted } from "vue";
import { listen } from "@tauri-apps/api/event";
import { useConfigStore } from "@vasakgroup/plugin-config-manager";
const configStore = useConfigStore();
let unlistenConfig: null | (() => void) = null;
onMounted(async () => {
await configStore.loadConfig();
unlistenConfig = await listen("config-changed", async () => {
await configStore.loadConfig();
});
});import {
readConfig,
writeConfig,
setDarkMode,
getSchemes,
getSchemeById,
} from "@vasakgroup/plugin-config-manager";
const config = await readConfig();
await writeConfig({
style: {
darkmode: true,
"color-scheme": "vasak-default",
radius: 8,
},
desktop: {
wallpaper: [],
iconsize: 48,
showfiles: true,
showhiddenfiles: false,
},
fonts: {
termina: "JetBrains Mono",
title: "Inter",
apps: "Noto Sans",
},
});Lee el archivo de configuración y lo parsea como JSON.
Guarda la configuración completa.
Actualiza el modo oscuro en la configuración y, cuando corresponde, intenta sincronizar el tema del sistema.
Lista todos los esquemas disponibles.
Busca un esquema por ID.
Store de Pinia que carga la configuración y aplica las variables visuales del tema.
<script lang="ts" setup>
import { onMounted, onUnmounted } from "vue";
import { listen } from "@tauri-apps/api/event";
import { useConfigStore } from "@vasakgroup/plugin-config-manager";
const configStore = useConfigStore();
let unlistenConfig: null | (() => void) = null;
onMounted(async () => {
await configStore.loadConfig();
unlistenConfig = await listen("config-changed", async () => {
await configStore.loadConfig();
});
});
onUnmounted(() => {
unlistenConfig?.();
});
</script>export type VSKConfig = {
style: {
darkmode: boolean;
"color-scheme": string;
radius: number;
};
desktop: {
wallpaper: string[];
iconsize: number;
showfiles: boolean;
showhiddenfiles: boolean;
};
fonts: {
termina: string;
title: string;
apps: string;
};
};Ejemplo completo:
{
"style": {
"darkmode": false,
"color-scheme": "vasak-default",
"radius": 8
},
"desktop": {
"wallpaper": [],
"iconsize": 48,
"showfiles": true,
"showhiddenfiles": false
},
"fonts": {
"termina": "JetBrains Mono",
"title": "Inter",
"apps": "Noto Sans"
}
}- Linux es la plataforma principal soportada.
setDarkModedetecta el backend desktop usandoXDG_CURRENT_DESKTOPyDESKTOP_SESSION.- La sincronización del tema del sistema solo se intenta en GNOME.
- Si
gsettingsno está disponible, la persistencia de configuración sigue funcionando. - La ruta del archivo de configuración puede sobrescribirse con
VASAK_CONFIG_PATH. - La búsqueda de schemes puede sobrescribirse con
VASAK_SCHEMES_PATHS.
Prioridad de búsqueda de schemes:
- Orden definido en
VASAK_SCHEMES_PATHSsi existe. - Orden por defecto:
~/.config/vasak/schemesy luego/usr/share/vasak-schemes.
El crate Rust expone la feature system-theme-sync.
system-theme-synchabilitada por defecto.- Deshabilítala si no quieres sincronizar el tema del sistema.
[dependencies]
tauri-plugin-config-manager = { git = "https://github.com/Vasak-OS/tauri-plugin-config-manager", default-features = false }[dependencies]
tauri-plugin-config-manager = { git = "https://github.com/Vasak-OS/tauri-plugin-config-manager" }Si no necesitas sincronización con GNOME/gsettings, desactiva la feature por defecto:
[dependencies]
tauri-plugin-config-manager = { git = "https://github.com/Vasak-OS/tauri-plugin-config-manager", default-features = false }El plugin emite el evento config-changed cuando el archivo de configuración se actualiza.
La estructura actual soporta:
style: color scheme, dark mode y radius.desktop: wallpaper, icon size y visibilidad de archivos.fonts: fuentes para terminal, títulos y apps.
Las claves fonts.termina, fonts.title y fonts.apps se serializan como strings y se mantienen compatibles con configuraciones previas.
- Carga la configuración una vez al arrancar la app.
- Escucha
config-changedsi otro proceso puede modificar el archivo. - Usa
writeConfigpara persistir cambios del usuario. - Usa
setDarkModesolo cuando quieras sincronizar también el estado visual del sistema.
LGPL-3.0-or-later