Load config file
- Read image file path from config file. - "mode" left untouched for now.
This commit is contained in:
parent
432ddc5ca6
commit
c02d53464d
@ -8,6 +8,7 @@ anyhow = "1.0.100"
|
|||||||
dirs = "6.0.0"
|
dirs = "6.0.0"
|
||||||
image = { version = "0.25.9", default-features = false, features = ["png", "jpeg"] }
|
image = { version = "0.25.9", default-features = false, features = ["png", "jpeg"] }
|
||||||
pico-args = "0.5.0"
|
pico-args = "0.5.0"
|
||||||
|
serde = { version = "1.0.228", default-features = false, features = ["derive"] }
|
||||||
toml = "0.9.8"
|
toml = "0.9.8"
|
||||||
x11rb = { version = "0.13.2", default-features = false }
|
x11rb = { version = "0.13.2", default-features = false }
|
||||||
|
|
||||||
|
|||||||
36
src/config.rs
Normal file
36
src/config.rs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
use anyhow::{Context, Result};
|
||||||
|
use serde::Deserialize;
|
||||||
|
use std::fs;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
/// Runtime configuration for `icing`.
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
pub struct Config {
|
||||||
|
pub background_image: String,
|
||||||
|
pub mode: Option<String>, // Unused now, deal with it later
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Config {
|
||||||
|
/// Load config from config file.
|
||||||
|
pub fn load() -> Result<Self> {
|
||||||
|
let path = config_path()?;
|
||||||
|
|
||||||
|
let contents = fs::read_to_string(&path)
|
||||||
|
.with_context(|| format!("Failed to read config file: {}", path.display()))?;
|
||||||
|
|
||||||
|
let config: Config = toml::from_str(&contents)
|
||||||
|
.with_context(|| format!("Failed to parse config file: {}", path.display()))?;
|
||||||
|
|
||||||
|
Ok(config)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn config_path() -> Result<PathBuf> {
|
||||||
|
let mut path = dirs::config_dir().context("Could not determine XDG config directory")?; // Usually `~/.config/`
|
||||||
|
// `~/.config/candywidgets/icing/config.toml`
|
||||||
|
path.push("candywidgets");
|
||||||
|
path.push("icing");
|
||||||
|
path.push("config.toml");
|
||||||
|
|
||||||
|
Ok(path)
|
||||||
|
}
|
||||||
@ -10,11 +10,13 @@ use x11rb::{
|
|||||||
},
|
},
|
||||||
rust_connection::RustConnection,
|
rust_connection::RustConnection,
|
||||||
};
|
};
|
||||||
|
mod config;
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
// Path to wallpaper image.
|
// Load config
|
||||||
// This is hardcoded for now and will later be replaced by config loading.
|
let config = config::Config::load()?;
|
||||||
let image_path = "/path/to/image";
|
// Path to wallpaper image in config
|
||||||
|
let image_path = &config.background_image;
|
||||||
|
|
||||||
// Connect to the running graphical session, the X11 server.
|
// Connect to the running graphical session, the X11 server.
|
||||||
let (conn, screen_num) = RustConnection::connect(None)?;
|
let (conn, screen_num) = RustConnection::connect(None)?;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user