diff --git a/data/db_kernel_cachy.json b/data/db_kernel_cachy.json index 4493119..515bb21 100644 --- a/data/db_kernel_cachy.json +++ b/data/db_kernel_cachy.json @@ -3,15 +3,33 @@ "kernels": [ { "name": "CachyOS Default Kernel", - "package": "kernel-cachyos", - "description": "CachyOS Kernel with default scheduler.", + "main_package": "kernel-cachyos", + "packages": "kernel-cachyos kernel-cachyos-devel-matched", "min_x86_march": "3" }, { "name": "CachyOS LTS Kernel", - "package": "kernel-cachyos-lts", - "description": "CachyOS Long Term Support Kernel.", + "main_package": "kernel-cachyos-lts", + "packages": "kernel-cachyos kernel-cachyos-devel-matched", "min_x86_march": "2" + }, + { + "name": "UKSMD Daemon", + "main_package": "uksmd", + "packages": "uksmd", + "min_x86_march": "1" + }, + { + "name": "CachyOS-Settings", + "main_package": "cachyos-settings", + "packages": "cachyos-settings", + "min_x86_march": "1" + }, + { + "name": "Ananicy-CPP", + "main_package": "ananicy-cpp", + "packages": "ananicy-cpp", + "min_x86_march": "1" } ] } \ No newline at end of file diff --git a/data/scripts/core b/data/scripts/core index 8e9e31e..5b28f81 100644 Binary files a/data/scripts/core and b/data/scripts/core differ diff --git a/data/scripts/generate_package_info.sh b/data/scripts/generate_package_info.sh new file mode 100755 index 0000000..7f50a7f --- /dev/null +++ b/data/scripts/generate_package_info.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +if [[ $1 == "version" ]] +then + #apt-cache show $2 | grep Version: | cut -d":" -f2 | head -n1 + dnf info $2 | grep Version | cut -d":" -f2 | head -n1 +elif [[ $1 == "description" ]] +then + #apt-cache show $2 | grep 'Description*' | cut -d":" -f2 | head -n1 + dnf info $2 | sed -n '/Description/,/^$/p' | awk 'NR==1,/^$/ {if (/^$/ && printed) exit; if (NF) printed=1; if (NR==1) sub(/Description *: */, ""); else sub(/^ *: */, ""); print}' +fi \ No newline at end of file diff --git a/data/scripts/get_version.sh b/data/scripts/get_version.sh deleted file mode 100755 index 68ed988..0000000 --- a/data/scripts/get_version.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/bash - -dnf info $1 | grep Version | cut -d":" -f2 | head -n1 \ No newline at end of file diff --git a/src/build_ui/mod.rs b/src/build_ui/mod.rs index d521ffa..8cc5630 100644 --- a/src/build_ui/mod.rs +++ b/src/build_ui/mod.rs @@ -1,7 +1,7 @@ use crate::APP_GITHUB; -use crate::VERSION; -use crate::APP_ID; use crate::APP_ICON; +use crate::APP_ID; +use crate::VERSION; use crate::{content, kernel_pkg, sched_ext, KernelBranch}; use adw::prelude::*; use adw::*; @@ -69,7 +69,11 @@ pub fn build_ui(app: &adw::Application) { })); let window_headerbar = adw::HeaderBar::builder() - .title_widget(&adw::WindowTitle::builder().title("Fedora Kernel Manager").build()) + .title_widget( + &adw::WindowTitle::builder() + .title("Fedora Kernel Manager") + .build(), + ) .build(); let content_stack = gtk::Stack::builder() @@ -94,7 +98,7 @@ pub fn build_ui(app: &adw::Application) { &selected_kernel_branch2, &db_load_complete, &window, - &window_banner + &window_banner, ), Some("content_page"), ); diff --git a/src/content/mod.rs b/src/content/mod.rs index eeadd53..5d8cb8f 100644 --- a/src/content/mod.rs +++ b/src/content/mod.rs @@ -1,4 +1,4 @@ -use crate::{kernel_pkg, KernelBranch, RunningKernelInfo, sched_ext}; +use crate::{kernel_pkg, sched_ext, KernelBranch, RunningKernelInfo}; use adw::prelude::*; use adw::ExpanderRow; use async_channel::Receiver; @@ -90,7 +90,6 @@ pub fn content( .subtitle("Kernel Branch") .build(); - kernel_branch_expander_row.add_row(&kernel_branch_expandable( &kernel_branch_expander_row, &window_banner, @@ -100,18 +99,6 @@ pub fn content( get_kernel_branches_receiver.clone(), )); - // match .recv_blocking() { - // Ok(t) => { -// - // )); - // } - // _ => { - - // } - // - - - let kernel_branch_expander_row_boxedlist = gtk::ListBox::builder() .selection_mode(SelectionMode::None) .hexpand(true) @@ -167,8 +154,9 @@ pub fn content( .build(); config_kernel_button.add_css_class("circular"); - if ! is_scx_kernel() { - config_kernel_button.set_tooltip_text(Some("Currently running kernel doesn't support Sched-EXT")); + if !is_scx_kernel() { + config_kernel_button + .set_tooltip_text(Some("Currently running kernel doesn't support Sched-EXT")); } config_kernel_button.connect_clicked(clone!(@weak content_stack, @weak window => move |_| { @@ -385,28 +373,28 @@ pub fn create_kernel_badge( fn get_kernel_branches() -> Result, reqwest::Error> { let mut kernel_branches_array: Vec = Vec::new(); - let data = fs::read_to_string( - "/usr/lib/fedora-kernel-manager/kernel_branches.json", - ) - .expect("Unable to read file"); + let data = fs::read_to_string("/usr/lib/fedora-kernel-manager/kernel_branches.json") + .expect("Unable to read file"); let res: serde_json::Value = serde_json::from_str(&data).expect("Unable to parse"); if let serde_json::Value::Array(branches) = &res["branches"] { for branch in branches { let branch_name = branch["name"].as_str().to_owned().unwrap().to_string(); let branch_db_url = branch["db_url"].as_str().to_owned().unwrap().to_string(); - let branch_init_script = branch["init_script"].as_str().to_owned().unwrap().to_string(); - println!( - "Downloading & Parsing package DB for {}.", - &branch_name - ); - let branch_db = reqwest::blocking::get( - branch["db_url"].as_str().to_owned().unwrap().to_string(), - )?.text().unwrap(); + let branch_init_script = branch["init_script"] + .as_str() + .to_owned() + .unwrap() + .to_string(); + println!("Downloading & Parsing package DB for {}.", &branch_name); + let branch_db = + reqwest::blocking::get(branch["db_url"].as_str().to_owned().unwrap().to_string())? + .text() + .unwrap(); let branch = KernelBranch { name: branch_name, db_url: branch_db_url, init_script: branch_init_script, - db: branch_db + db: branch_db, }; println!("Download Complete!"); println!("Running {} init script.", &branch.name); diff --git a/src/kernel_pkg/mod.rs b/src/kernel_pkg/mod.rs index f547457..66ac133 100644 --- a/src/kernel_pkg/mod.rs +++ b/src/kernel_pkg/mod.rs @@ -148,26 +148,36 @@ fn add_package_rows( if let serde_json::Value::Array(kernels) = &res["kernels"] { for kernel in kernels { let kernel_name = kernel["name"].as_str().to_owned().unwrap().to_string(); - let kernel_package = kernel["package"].as_str().to_owned().unwrap().to_string(); - let kernel_description = kernel["description"] + let kernel_main_package = kernel["main_package"] .as_str() .to_owned() .unwrap() .to_string(); + let kernel_packages = kernel["packages"].as_str().to_owned().unwrap().to_string(); let kernel_min_x86_march = kernel["min_x86_march"] .as_str() .to_owned() .unwrap() .parse::() .unwrap(); - let kernel_package_version = - match Command::new("/usr/lib/fedora-kernel-manager/scripts/get_version.sh") - .args([&kernel_package]) - .output() - { - Ok(t) => String::from_utf8(t.stdout).unwrap(), - _ => "Error".to_owned(), - }; + let kernel_package_version = match Command::new( + "/usr/lib/fedora-kernel-manager/scripts/generate_package_info.sh", + ) + .args(["description", &kernel_main_package]) + .output() + { + Ok(t) => String::from_utf8(t.stdout).unwrap(), + _ => "Error".to_owned(), + }; + let kernel_description = match Command::new( + "/usr/lib/fedora-kernel-manager/scripts/generate_package_info.sh", + ) + .args(["description", &kernel_main_package]) + .output() + { + Ok(t) => String::from_utf8(t.stdout).unwrap(), + _ => "Error".to_owned(), + }; let (log_loop_sender, log_loop_receiver) = async_channel::unbounded(); let log_loop_sender: async_channel::Sender = log_loop_sender.clone(); @@ -181,11 +191,11 @@ fn add_package_rows( let kernel_status_loop_sender: async_channel::Sender = kernel_status_loop_sender.clone(); - let kernel_package_clone0 = kernel_package.clone(); + let kernel_main_package_clone0 = kernel_main_package.clone(); std::thread::spawn(move || loop { let command_installed_status = Command::new("rpm") - .args(["-q", &kernel_package_clone0]) + .args(["-q", &kernel_main_package_clone0]) .output() .unwrap(); if command_installed_status.status.success() { @@ -200,10 +210,10 @@ fn add_package_rows( std::thread::sleep(Duration::from_secs(6)); }); - let kernel_package_clone0 = kernel_package.clone(); + let kernel_main_package_clone0 = kernel_main_package.clone(); let kernel_expander_row = kernel_package_row::KernelPackageRow::new(); - kernel_expander_row.set_package(kernel_package_clone0); + kernel_expander_row.set_package(kernel_main_package_clone0); let kernel_status_icon = gtk::Image::builder() .icon_name("emblem-default") .pixel_size(24) @@ -329,7 +339,7 @@ fn add_package_rows( } })); // - kernel_install_button.connect_clicked(clone!(@weak kernel_install_log_terminal,@weak kernel_install_log_terminal_buffer, @weak kernel_install_dialog, @strong log_loop_sender, @strong log_status_loop_sender, @strong kernel_package => move |_| { + kernel_install_button.connect_clicked(clone!(@weak kernel_install_log_terminal,@weak kernel_install_log_terminal_buffer, @weak kernel_install_dialog, @strong log_loop_sender, @strong log_status_loop_sender, @strong kernel_packages => move |_| { kernel_install_log_terminal_buffer.delete(&mut kernel_install_log_terminal_buffer.bounds().0, &mut kernel_install_log_terminal_buffer.bounds().1); kernel_install_dialog.set_response_enabled("kernel_install_dialog_ok", false); kernel_install_dialog.set_response_enabled("kernel_install_dialog_reboot", false); @@ -344,9 +354,9 @@ fn add_package_rows( }); let log_status_loop_sender_clone = log_status_loop_sender.clone(); let log_loop_sender_clone= log_loop_sender.clone(); - let kernel_package_clone = kernel_package.clone(); + let kernel_packages_clone = kernel_packages.clone(); std::thread::spawn(move || { - let command = kernel_modify(log_loop_sender_clone, &kernel_package_clone); + let command = kernel_modify(log_loop_sender_clone, &kernel_packages_clone); match command { Ok(_) => { println!("Status: kernel modify Successful"); @@ -359,7 +369,7 @@ fn add_package_rows( } }); })); - kernel_remove_button.connect_clicked(clone!(@weak kernel_install_log_terminal,@weak kernel_install_log_terminal_buffer, @weak kernel_install_dialog, @strong log_loop_sender, @strong log_status_loop_sender, @strong kernel_package => move |_| { + kernel_remove_button.connect_clicked(clone!(@weak kernel_install_log_terminal,@weak kernel_install_log_terminal_buffer, @weak kernel_install_dialog, @strong log_loop_sender, @strong log_status_loop_sender, @strong kernel_packages => move |_| { kernel_install_log_terminal_buffer.delete(&mut kernel_install_log_terminal_buffer.bounds().0, &mut kernel_install_log_terminal_buffer.bounds().1); kernel_install_dialog.set_response_enabled("kernel_install_dialog_ok", false); kernel_install_dialog.set_response_enabled("kernel_install_dialog_reboot", false); @@ -374,9 +384,9 @@ fn add_package_rows( }); let log_status_loop_sender_clone = log_status_loop_sender.clone(); let log_loop_sender_clone= log_loop_sender.clone(); - let kernel_package_clone = kernel_package.clone(); + let kernel_packages_clone = kernel_packages.clone(); std::thread::spawn(move || { - let command = kernel_modify(log_loop_sender_clone, &kernel_package_clone); + let command = kernel_modify(log_loop_sender_clone, &kernel_packages_clone); match command { Ok(_) => { println!("Status: kernel modify Successful"); diff --git a/src/main.rs b/src/main.rs index 891bd97..abcf0fd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,7 +26,7 @@ struct KernelBranch { name: String, db_url: String, db: String, - init_script: String + init_script: String, } fn main() -> glib::ExitCode { diff --git a/src/sched_ext/mod.rs b/src/sched_ext/mod.rs index f443680..da16391 100644 --- a/src/sched_ext/mod.rs +++ b/src/sched_ext/mod.rs @@ -1,19 +1,19 @@ use crate::content::get_running_kernel_info; use crate::{KernelBranch, RunningKernelInfo}; use adw::prelude::*; +use duct::cmd; use glib::*; use gtk::prelude::*; +use gtk::AccessibleRole::Command; use gtk::*; -use std::{fs, io, thread}; use std::cell::RefCell; use std::fs::*; use std::process::Stdio; use std::rc::Rc; use std::time::Duration; -use duct::cmd; -use gtk::AccessibleRole::Command; +use std::{fs, io, thread}; -pub fn sched_ext_page(content_stack: >k::Stack, window: &adw::ApplicationWindow,) -> gtk::Box { +pub fn sched_ext_page(content_stack: >k::Stack, window: &adw::ApplicationWindow) -> gtk::Box { let main_box = gtk::Box::builder() .hexpand(true) .vexpand(true) @@ -70,16 +70,16 @@ pub fn sched_ext_page(content_stack: >k::Stack, window: &adw::ApplicationWindo .transient_for(window) .hide_on_close(true) .build(); - cmd_status_dialog.add_response( - "cmd_status_dialog_ok", - "Ok", - ); + cmd_status_dialog.add_response("cmd_status_dialog_ok", "Ok"); let scx_sched_expander_row = adw::ExpanderRow::builder() .subtitle("Select Sched-EXT Scheduler") .build(); - scx_sched_expander_row.add_row(&scx_sched_expandable(&scx_sched_expander_row, &selected_scx_sched)); + scx_sched_expander_row.add_row(&scx_sched_expandable( + &scx_sched_expander_row, + &selected_scx_sched, + )); let scx_sched_expander_row_boxedlist = gtk::ListBox::builder() .selection_mode(SelectionMode::None) @@ -205,8 +205,10 @@ fn create_current_sched_badge( )); } -fn scx_sched_expandable(expander_row: &adw::ExpanderRow, - selected_scx_sched: &Rc>) -> gtk::ListBox { +fn scx_sched_expandable( + expander_row: &adw::ExpanderRow, + selected_scx_sched: &Rc>, +) -> gtk::ListBox { let searchbar = gtk::SearchEntry::builder().search_delay(500).build(); searchbar.add_css_class("round-border-only-top"); @@ -225,9 +227,7 @@ fn scx_sched_expandable(expander_row: &adw::ExpanderRow, .label("No branch selected") .build(); - let data = fs::read_to_string( - "/usr/lib/fedora-kernel-manager/scx_scheds.json", - ) + let data = fs::read_to_string("/usr/lib/fedora-kernel-manager/scx_scheds.json") .expect("Unable to read file"); let res: serde_json::Value = serde_json::from_str(&data).expect("Unable to parse"); if let serde_json::Value::Array(scheds) = &res["scx_schedulers"] { @@ -249,7 +249,7 @@ fn scx_sched_expandable(expander_row: &adw::ExpanderRow, clone!(@weak sched_checkbutton, @weak expander_row, @strong selected_scx_sched => move |_| { if sched_checkbutton.is_active() == true { expander_row.set_title(&branch_row.title()); - *selected_scx_sched.borrow_mut() = sched.to_string();; + *selected_scx_sched.borrow_mut() = sched.to_string(); } }), ); @@ -302,12 +302,23 @@ fn get_current_scx_scheduler() -> String { scx_sched } -fn change_scx_scheduler(scx_sched: &str, - badge_box: >k::Box, - kernel_badges_size_group: >k::SizeGroup, - kernel_badges_size_group0: >k::SizeGroup, - kernel_badges_size_group1: >k::SizeGroup,) -> Result<(), io::Error> { - cmd!("pkexec", "bash", "-c", format!("/usr/lib/fedora-kernel-manager/scripts/scripts/change_scx.sh {}", scx_sched)).run()?; +fn change_scx_scheduler( + scx_sched: &str, + badge_box: >k::Box, + kernel_badges_size_group: >k::SizeGroup, + kernel_badges_size_group0: >k::SizeGroup, + kernel_badges_size_group1: >k::SizeGroup, +) -> Result<(), io::Error> { + cmd!( + "pkexec", + "bash", + "-c", + format!( + "/usr/lib/fedora-kernel-manager/scripts/scripts/change_scx.sh {}", + scx_sched + ) + ) + .run()?; create_current_sched_badge( &badge_box, &get_running_kernel_info(),