~tsdh/swayr

6b87e5e51dba1a68de430e19d87a7265f7dbbb2d — Tassilo Horn 13 days ago 90f43c0
swayrbar: Add -c/--config-file command line option
5 files changed, 54 insertions(+), 16 deletions(-)

M Cargo.lock
M swayr/src/shared/cfg.rs
M swayrbar/Cargo.toml
M swayrbar/src/bar.rs
M swayrbar/src/bin/swayrbar.rs
M Cargo.lock => Cargo.lock +9 -8
@@ 78,9 78,9 @@ dependencies = [

[[package]]
name = "clap"
version = "3.1.17"
version = "3.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47582c09be7c8b32c0ab3a6181825ababb713fde6fff20fc573a3870dd45c6a0"
checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
dependencies = [
 "atty",
 "bitflags",


@@ 95,9 95,9 @@ dependencies = [

[[package]]
name = "clap_derive"
version = "3.1.7"
version = "3.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1"
checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"
dependencies = [
 "heck",
 "proc-macro-error",


@@ 641,6 641,7 @@ version = "0.2.1"
dependencies = [
 "battery",
 "chrono",
 "clap",
 "directories",
 "env_logger",
 "log",


@@ 657,9 658,9 @@ dependencies = [

[[package]]
name = "syn"
version = "1.0.92"
version = "1.0.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52"
checksum = "04066589568b72ec65f42d65a1a52436e954b168773148893c020269563decf2"
dependencies = [
 "proc-macro2",
 "quote",


@@ 668,9 669,9 @@ dependencies = [

[[package]]
name = "sysinfo"
version = "0.23.11"
version = "0.23.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bf915673a340ee41f2fc24ad1286c75ea92026f04b65a0d0e5132d80b95fc61"
checksum = "56b1e20ee77901236c389ff74618a899ff5fd34719a7ff0fd1d64f0acca5179a"
dependencies = [
 "cfg-if",
 "core-foundation-sys 0.8.3",

M swayr/src/shared/cfg.rs => swayr/src/shared/cfg.rs +17 -3
@@ 74,7 74,7 @@ where
                    + "I've created a fresh config for use with wofi for you in "
                    + &path.to_string_lossy()
                        + ". Adapt it to your needs."
                }else{
                } else {
                    "Welcome to swayrbar! ".to_owned()
                    + "I've created a fresh config for for you in "
                    + &path.to_string_lossy()


@@ 88,14 88,28 @@ where
            .spawn()
            .ok();
        log::debug!("Created new config in {}.", path.to_string_lossy());
    }

    load_config_file(&path)
}

pub fn load_config_file<T>(config_file: &Path) -> T
where
    T: Serialize + DeserializeOwned + Default,
{
    if !config_file.exists() {
        panic!(
            "Config file {} does not exist.",
            config_file.to_string_lossy()
        );
    } else {
        log::debug!("Loaded config from {}.", path.to_string_lossy());
        log::debug!("Loading config from {}.", config_file.to_string_lossy());
    }
    let mut file = OpenOptions::new()
        .read(true)
        .write(false)
        .create(false)
        .open(path)
        .open(config_file)
        .unwrap();
    let mut buf: String = String::new();
    file.read_to_string(&mut buf).unwrap();

M swayrbar/Cargo.toml => swayrbar/Cargo.toml +1 -0
@@ 9,6 9,7 @@ authors = ["Tassilo Horn <tsdh@gnu.org>"]
license = "GPL-3.0+"

[dependencies]
clap = {version = "3.0.0", features = ["derive"] }
battery = "0.7.8"
chrono = "0.4"
directories = "4.0"

M swayrbar/src/bar.rs => swayrbar/src/bar.rs +22 -2
@@ 21,6 21,7 @@ use crate::module::{BarModuleFn, NameInstanceAndReason, RefreshReason};
use env_logger::Env;
use serde_json;
use std::io;
use std::path::Path;
use std::process as p;
use std::sync::mpsc::sync_channel;
use std::sync::mpsc::Receiver;


@@ 30,11 31,30 @@ use std::{sync::Arc, thread};
use swaybar_types as sbt;
use swayipc as si;

pub fn start() {
#[derive(clap::Parser)]
#[clap(about, version, author)]
pub struct Opts {
    #[clap(
        short = 'c',
        long,
        help = "Path to a config.toml configuration file.
If not specified, the default config ~/.config/swayrbar/config.toml or
/etc/xdg/swayrbar/config.toml is used."
    )]
    config_file: Option<String>,
}

pub fn start(opts: Opts) {
    env_logger::Builder::from_env(Env::default().default_filter_or("warn"))
        .init();

    let config = config::load_config();
    let config = match opts.config_file {
        None => config::load_config(),
        Some(config_file) => {
            let path = Path::new(&config_file);
            crate::shared::cfg::load_config_file(path)
        }
    };
    let refresh_interval = config.refresh_interval;
    let mods: Arc<Vec<Box<dyn BarModuleFn>>> = Arc::new(create_modules(config));
    let mods_for_input = mods.clone();

M swayrbar/src/bin/swayrbar.rs => swayrbar/src/bin/swayrbar.rs +5 -3
@@ 15,8 15,10 @@

//! The `swayrbar` binary.

use clap::Parser;
use swayrbar::bar::Opts;

fn main() {
    // TODO: We need a config file cmd line option so that each bar can have
    // its own config.
    swayrbar::bar::start()
    let opts: Opts = Opts::parse();
    swayrbar::bar::start(opts);
}