Skip to content

Commit 50e54d2

Browse files
ptr1337vnepogodin
andauthored
actions: Add usermod docker group to winboat installation (#170)
* winboat: Add usermod docker group to winboat installation Signed-off-by: Peter Jung <admin@ptr1337.dev> * 🚧 actions: enable docker.socket instead * 🧹 actions: add to docker group only if needed --------- Signed-off-by: Peter Jung <admin@ptr1337.dev> Co-authored-by: Vladislav Nepogodin <nepogodin.vlad@gmail.com>
1 parent 1c39e2f commit 50e54d2

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/actions.rs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::ui::{Action, DialogMessage, MessageType, RunCmdCallback};
22
use crate::{fl, kwin_dbus, systemd_units, utils, PacmanWrapper};
33

4+
use std::env;
45
use std::path::Path;
56

67
use gtk::glib::Sender;
@@ -49,6 +50,12 @@ pub fn get_dns_for_connection(conn_name: &str) -> Option<(String, String)> {
4950
}
5051
}
5152

53+
fn get_user_groups() -> Vec<String> {
54+
let groups =
55+
Exec::cmd("/sbin/groups").stdout(Redirection::Pipe).capture().unwrap().stdout_str();
56+
groups.split('\n').filter(|x| !x.is_empty()).map(String::from).collect::<Vec<_>>()
57+
}
58+
5259
pub fn launch_kwin_debug_window() {
5360
if let Err(kwin_err) = kwin_dbus::launch_kwin_debug_window() {
5461
error!("Failed to launch kwin debug window: {kwin_err}");
@@ -252,12 +259,12 @@ pub fn install_winboat(callback: RunCmdCallback, dialog_tx: Sender<DialogMessage
252259
dialog_tx.clone(),
253260
);
254261

255-
// Enable docker.service after installation
256-
const DOCKER_SERVICE: &str = "docker.service";
257-
let docker_enabled = systemd_units::check_system_units(DOCKER_SERVICE);
262+
// Enable docker.socket after installation
263+
const DOCKER_TARGET: &str = "docker.socket";
264+
let docker_enabled = systemd_units::check_system_units(DOCKER_TARGET);
258265
if utils::is_alpm_pkg_installed("docker") && !docker_enabled {
259266
let (cmd, run_as_root) =
260-
utils::get_tweak_toggle_cmd("service", DOCKER_SERVICE, docker_enabled);
267+
utils::get_tweak_toggle_cmd("service", DOCKER_TARGET, docker_enabled);
261268
let status_code = utils::run_cmd(cmd, run_as_root).unwrap();
262269
if !status_code.success() {
263270
dialog_tx
@@ -272,4 +279,22 @@ pub fn install_winboat(callback: RunCmdCallback, dialog_tx: Sender<DialogMessage
272279
// refresh units cache
273280
systemd_units::refresh_system_cache();
274281
}
282+
283+
// Add the current user to the docker group
284+
let group_added = get_user_groups().iter().any(|x| x == "docker");
285+
if utils::is_alpm_pkg_installed("docker") && !group_added {
286+
if let Ok(current_user) = env::var("USER") {
287+
let status_code =
288+
utils::run_cmd(format!("/sbin/usermod -aG docker {current_user}"), true).unwrap();
289+
if !status_code.success() {
290+
dialog_tx
291+
.send(DialogMessage {
292+
msg: fl!("winboat-install-failed"),
293+
msg_type: MessageType::Error,
294+
action: Action::InstallWinboat,
295+
})
296+
.expect("Couldn't send data to channel");
297+
}
298+
}
299+
}
275300
}

src/systemd_units.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ async fn get_enabled_units(conn: &zbus::Connection) -> anyhow::Result<Vec<String
6161
let services = manager
6262
.list_unit_files_by_patterns(vec!["enabled".into()], vec![
6363
"*.service".into(),
64+
"*.socket".into(),
6465
"*.timer".into(),
6566
])
6667
.await?;

0 commit comments

Comments
 (0)