Skip to content

Commit

Permalink
preparing to make from scratch
Browse files Browse the repository at this point in the history
  • Loading branch information
Walker-00 committed Aug 6, 2023
1 parent 79aaa2a commit 88060fb
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 169 deletions.
7 changes: 5 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ codegen-units = 1

[dependencies]
confy = { version = "0.5.1", features = ["yaml_conf"], default-features = false }
penrose = "0.3.3"
serde = { version = "1.0.181", default-features = false, features = ["derive"] }
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
tracing = "0.1.37"
tracing-subscriber ="0.3.17"
x11 = "2.21.0"
xcb = { version = "1.2.2", features = ["xkb"] }
xcb-util = { version = "0.4.0", features = ["ewmh", "icccm"] }
191 changes: 24 additions & 167 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,174 +1,31 @@
use confy::load;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

use penrose::{
builtin::{
actions::{exit, key_handler, modify_with, send_layout_message, spawn},
hooks::SpacingHook,
layout::{
messages::{ExpandMain, IncMain, ShrinkMain},
transformers::{Gaps, ReflectHorizontal, ReserveTop},
MainAndStack,
},
},
core::{
bindings::{parse_keybindings_with_xmodmap, KeyEventHandler},
layout::LayoutStack,
Config, WindowManager,
},
extensions::hooks::{
add_ewmh_hooks, add_named_scratchpads, manage::FloatingCentered, NamedScratchPad,
SpawnOnStartup, ToggleNamedScratchPad,
},
map, stack, util,
x::query::ClassName,
x11rb::RustConn,
Result,
};
use tracing_subscriber::{self, prelude::*};

#[derive(Serialize, Deserialize, Debug, Default)]
struct WMConfig {
spawn: HashMap<String, String>,
command: HashMap<String, String>,
use std::sync::Arc;

use tracing::{subscriber, Level};
use tracing_subscriber::FmtSubscriber;
use xcb::x::{Cursor, Window};
use xcb_util::ewmh::Connection;

struct Client {
window: Window,
workspace: Option<u8>,
visible: bool,
controlled: bool,
full_screen: bool,
padding_top: u32,
}

fn raw_key_bindings(
toggle_1: ToggleNamedScratchPad,
toggle_2: ToggleNamedScratchPad,
) -> HashMap<String, Box<dyn KeyEventHandler<RustConn>>> {
let mut raw_bindings = map! {
map_keys: |k: &str| k.to_string();

"M-j" => modify_with(|cs| cs.focus_down()),
"M-k" => modify_with(|cs| cs.focus_up()),
"M-S-j" => modify_with(|cs| cs.swap_down()),
"M-S-k" => modify_with(|cs| cs.swap_up()),
"M-S-q" => modify_with(|cs| cs.kill_focused()),
"M-Tab" => modify_with(|cs| cs.toggle_tag()),
"M-bracketright" => modify_with(|cs| cs.next_screen()),
"M-bracketleft" => modify_with(|cs| cs.previous_screen()),
"M-grave" => modify_with(|cs| cs.next_layout()),
"M-S-grave" => modify_with(|cs| cs.previous_layout()),
"M-S-Up" => send_layout_message(|| IncMain(1)),
"M-S-Down" => send_layout_message(|| IncMain(-1)),
"M-S-Right" => send_layout_message(|| ExpandMain),
"M-S-Left" => send_layout_message(|| ShrinkMain),
"M-semicolon" => spawn("dmenu_run"),
"M-S-Return" => spawn("alacritty"),
"M-A-Escape" => exit(),

"M-slash" => Box::new(toggle_1),
"M-p" => Box::new(toggle_2),
};

if let Ok(cfg) = load::<WMConfig>("sswm", Some("config")) {
for i in cfg.spawn {
let r = i.1.clone();
raw_bindings.insert(i.0, key_handler(move |_, _| util::spawn(r.clone())));
}

for i in cfg.command {
let cmd_match: Option<Box<dyn KeyEventHandler<RustConn>>> =
match i.1.to_lowercase().as_str() {
"killf" => Some(modify_with(|cs| cs.kill_focused())),
"focdw" => Some(modify_with(|cs| cs.focus_down())),
"focup" => Some(modify_with(|cs| cs.focus_up())),
"swpdw" => Some(modify_with(|cs| cs.swap_down())),
"swpup" => Some(modify_with(|cs| cs.swap_up())),
"togtg" => Some(modify_with(|cs| cs.toggle_tag())),
"nexsc" => Some(modify_with(|cs| cs.next_screen())),
"presc" => Some(modify_with(|cs| cs.previous_screen())),
"nexly" => Some(modify_with(|cs| cs.next_layout())),
"prely" => Some(modify_with(|cs| cs.previous_layout())),
"incmn" => Some(send_layout_message(|| IncMain(1))),
"decmn" => Some(send_layout_message(|| IncMain(-1))),
"expmn" => Some(send_layout_message(|| ExpandMain)),
"shkmn" => Some(send_layout_message(|| ShrinkMain)),
"exits" => Some(exit()),
_ => None,
};

if let Some(cmd) = cmd_match {
raw_bindings.insert(i.0, cmd);
}
}
}

for tag in &["1", "2", "3", "4", "5", "6", "7", "8", "9"] {
raw_bindings.extend([
(
format!("M-{tag}"),
modify_with(move |client_set| client_set.focus_tag(tag)),
),
(
format!("M-S-{tag}"),
modify_with(move |client_set| client_set.move_focused_to_tag(tag)),
),
]);
}

raw_bindings
struct Clients {
conn: Arc<Connection>,
}

fn layouts() -> LayoutStack {
let max_main = 1;
let ratio = 0.6;
let ratio_step = 0.1;
let outer_px = 5;
let inner_px = 5;
let top_px = 18;

stack!(
MainAndStack::side(max_main, ratio, ratio_step),
ReflectHorizontal::wrap(MainAndStack::side(max_main, ratio, ratio_step)),
MainAndStack::bottom(max_main, ratio, ratio_step)
)
.map(|layout| ReserveTop::wrap(Gaps::wrap(layout, outer_px, inner_px), top_px))
struct WM {
conn: Arc<Connection>,
cursor: Cursor,
}

fn main() -> Result<()> {
tracing_subscriber::fmt()
.with_env_filter("trace")
.finish()
.init();

let (nsp_1, toggle_1) = NamedScratchPad::new(
"terminal",
"alacritty",
ClassName("Alacritty"),
FloatingCentered::new(0.8, 0.8),
true,
);
let (nsp_2, toggle_2) = NamedScratchPad::new(
"qt-console",
"jupyter-qtconsole",
ClassName("jupyter-qtconsole"),
FloatingCentered::new(0.8, 0.8),
true,
);

let layout_hook = Box::new(SpacingHook {
inner_px: 5,
outer_px: 5,
top_px: 18,
bottom_px: 0,
});

let config = add_ewmh_hooks(Config {
default_layouts: layouts(),
layout_hook: Some(layout_hook),
..Config::default()
});

let conn = RustConn::new()?;
let key_bindings = parse_keybindings_with_xmodmap(raw_key_bindings(toggle_1, toggle_2))?;

let wm = add_named_scratchpads(
WindowManager::new(config, key_bindings, HashMap::new(), conn)?,
vec![nsp_1, nsp_2],
);

wm.run()
fn main() {
let sub = FmtSubscriber::builder()
.with_max_level(Level::TRACE)
.finish();
subscriber::set_global_default(sub).expect("Error due to: Setting Default Subscriber Failed!");
}

0 comments on commit 88060fb

Please sign in to comment.