// nixos-config - My current NixOS configuration // // Copyright (C) 2025 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of my nixos-config. // // You should have received a copy of the License along with this program. // If not, see . use std::fs; use anyhow::Context; use clap::Parser; pub mod cli; pub mod key_map; pub mod wayland; use crate::{cli::Args, key_map::KeyMap}; fn main() -> Result<(), anyhow::Error> { let args = Args::parse(); let keymap_path = &args.keymap.canonicalize().with_context(|| { format!( "Failed to canonicalize kepmay path: '{}'", args.keymap.display() ) })?; let config = { let keymap_file = fs::read_to_string(keymap_path).with_context(|| { format!( "Failed to open keymap file at: '{}'.", keymap_path.display() ) })?; let keymap: KeyMap = keymap_file.parse().with_context(|| { format!("Failed to parse keymap file at: {}", keymap_path.display()) })?; keymap }; match args.command { cli::SubCommand::Init { dry_run } => { println!("{config}"); for mut command in config.to_commands(keymap_path)? { if dry_run { println!("{command:?}"); } else { let status = command .status() .with_context(|| format!("Failed to run command: '{command:?}'"))?; if !status.success() { eprintln!( "Command ('{command:?}') returned with non zero exit code: {status}" ); } } } } cli::SubCommand::ShowHelp {} => wayland::main(config)?, } Ok(()) }