diff options
-rw-r--r-- | modules/10-i3/i3/config (renamed from modules/10-i3/config) | 42 | ||||
-rw-r--r-- | modules/10-i3/i3status/config | 85 | ||||
-rwxr-xr-x | modules/10-i3/i3status/run.sh | 73 | ||||
-rw-r--r-- | modules/10-i3/install.sh | 20 |
4 files changed, 201 insertions, 19 deletions
diff --git a/modules/10-i3/config b/modules/10-i3/i3/config index 7c11990..7d506e8 100644 --- a/modules/10-i3/config +++ b/modules/10-i3/i3/config @@ -4,7 +4,6 @@ # Should you change your keyboard layout some time, delete # this file and re-run i3-config-wizard(1). # - # i3 config file (v4) # # Please see https://i3wm.org/docs/userguide.html for a complete reference! @@ -40,8 +39,8 @@ exec --no-startup-id nm-applet # Use pactl to adjust volume in PulseAudio. set $refresh_i3status killall -SIGUSR1 i3status -bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status -bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% && $refresh_i3status +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% && $refresh_i3status bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status @@ -62,12 +61,12 @@ bindsym $mod+Return exec alacritty bindsym $mod+Shift+q kill # start dmenu (a program launcher) -bindsym $mod+d exec --no-startup-id dmenu_run +#bindsym $mod+d exec --no-startup-id dmenu_run # A more modern dmenu replacement is rofi: # bindcode $mod+40 exec "rofi -modi drun,run -show drun" # There also is i3-dmenu-desktop which only displays applications shipping a # .desktop file. It is a wrapper around dmenu, so you need that installed. -# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop +bindsym $mod+d exec --no-startup-id i3-dmenu-desktop # change focus bindsym $mod+j focus left @@ -94,10 +93,10 @@ bindsym $mod+Shift+Up move up bindsym $mod+Shift+Right move right # split in horizontal orientation -bindsym $mod+h split h +#bindsym $mod+h split h # split in vertical orientation -bindsym $mod+v split v +#bindsym $mod+v split v # enter fullscreen mode for the focused container bindsym $mod+f fullscreen toggle @@ -105,7 +104,7 @@ bindsym $mod+f fullscreen toggle # change container layout (stacked, tabbed, toggle split) bindsym $mod+s layout stacking bindsym $mod+w layout tabbed -bindsym $mod+e layout toggle split +#bindsym $mod+e layout toggle split # toggle tiling / floating bindsym $mod+Shift+space floating toggle @@ -157,11 +156,11 @@ bindsym $mod+Shift+9 move container to workspace number $ws9 bindsym $mod+Shift+0 move container to workspace number $ws10 # reload the configuration file -bindsym $mod+Shift+c reload +#bindsym $mod+Shift+c reload # restart i3 inplace (preserves your layout/session, can be used to upgrade i3) -bindsym $mod+Shift+r restart +#bindsym $mod+Shift+r restart # exit i3 (logs you out of your X session) -bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" +#bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" # resize window (you can also use the mouse for that) mode "resize" { @@ -200,16 +199,31 @@ mode $sys { bindsym Shift+r exec systemctl reboot; mode default bindsym Shift+s exec systemctl poweroff; mode default - bindsym q mode default - bindsym Escape mode default + bindsym q mode default + bindsym Escape mode default + bindsym $mod+Escape mode default } bindsym $mod+Escape mode $sys +# notification settings +set $notif "[e]nable - [d]isable/[p]ause - [t]oggle - [c]lear" +mode $notif { + bindsym e exec dunstctl set-paused false && $refresh_i3status; mode default + bindsym p exec dunstctl set-paused true && $refresh_i3status; mode default + bindsym d exec dunstctl set-paused true && $refresh_i3status; mode default + bindsym t exec dunstctl set-paused toggle && $refresh_i3status; mode default + bindsym c exec dunstctl close-all; mode default + + bindsym q mode default + bindsym Escape mode default + bindsym $mod+n mode default +} +bindsym $mod+n mode $notif # Start i3bar to display a workspace bar (plus the system information i3status # finds out, if available) bar { font pango:DejaVu Sans Mono 12 - status_command i3status + status_command ~/.config/i3status/run.sh } diff --git a/modules/10-i3/i3status/config b/modules/10-i3/i3status/config new file mode 100644 index 0000000..0c54f33 --- /dev/null +++ b/modules/10-i3/i3status/config @@ -0,0 +1,85 @@ +# i3status configuration file. +# see "man i3status" for documentation. + +# It is important that this file is edited as UTF-8. +# The following line should contain a sharp s: +# ß +# If the above line is not correctly displayed, fix your editor first! + +general { + output_format = "i3bar" + colors = true + interval = 1 +} + +#order += "ipv6" +#order += "path_exists VPN" +# order += "disk /" +order += "cpu_usage" +order += "memory" +order += "volume master" +order += "tztime holder__notif" +order += "wireless _first_" +order += "ethernet _first_" +order += "battery all" +order += "tztime local" + +tztime holder__notif { + format = "holder__notif" +} + +wireless _first_ { + #format_up = "W: %ip (%essid %frequency %signal %bitrate)" + format_up = "W: %ip (%essid %frequency %bitrate)" + format_down = "W: DOWN" +} + +ethernet _first_ { + format_up = "E: %ip (%speed)" + format_down = "" +} + +path_exists VPN { + path = "/proc/sys/net/ipv4/conf/tun0" +} + +battery all { + format = "%status %percentage %remaining" + format_down = "NO BAT" + path = "/sys/class/power_supply/BAT%d/uevent" + last_full_capacity = true + integer_battery_capacity = true + low_threshold = 20 +} + +disk "/" { + format = "%avail" +} + +load { + format = "[%1min %5min %15min]" +} + +cpu_usage { + format = "C: %usage" + max_threshold = 90 + degraded_threshold = 75 +} + +memory { + format = "M: %used (%percentage_used)" + threshold_degraded = "25%" + threshold_critical = "10%" +} + +volume master { + format = "V: %volume" + format_muted = "V: %volume (muted)" + device = "pulse" + #mixer = "Master" + #mixer_idx = 0 +} + +tztime local { + format = "%c" +} diff --git a/modules/10-i3/i3status/run.sh b/modules/10-i3/i3status/run.sh new file mode 100755 index 0000000..dcb5ce0 --- /dev/null +++ b/modules/10-i3/i3status/run.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash + +# This i3status wrapper allows to add custom information in any position of the statusline +# It was developed for i3bar (JSON format) + +# The idea is to define "holder" modules in i3status config and then replace them + +# In order to make this example work you need to add +# order += "tztime holder__hey_man" +# and +# tztime holder__hey_man { +# format = "holder__hey_man" +# } +# in i3staus config + +# Don't forget that i3status config should contain: +# general { +# output_format = i3bar +# } +# +# and i3 config should contain: +# bar { +# status_command exec /path/to/this/script.sh +# } + +# Make sure jq is installed +# That's it + +# You can easily add multiple custom modules using additional "holders" + +function update_holder { + local instance="$1" + local replacement="$2" + echo "$json_array" | jq --argjson arg_j "$replacement" "(.[] | (select(.instance==\"$instance\"))) |= \$arg_j" +} + +function remove_holder { + local instance="$1" + echo "$json_array" | jq "del(.[] | (select(.instance==\"$instance\")))" +} + +function hey_man { + local rand_val=$((RANDOM % 3)) + if [ $rand_val == 1 ] ; then + local json='{ "full_text": "Hey Man!", "color": "#00FF00" }' + json_array=$(update_holder holder__hey_man "$json") + elif [ $rand_val == 0 ] ; then + local json='{ "full_text": "Hey Man!", "color": "#FF0000" }' + json_array=$(update_holder holder__hey_man "$json") + else + json_array=$(remove_holder holder__hey_man) + fi +} + +function notif { + if [[ "$(dunstctl is-paused)" == "true" ]]; then + local json='{ "full_text": "N: paused", "color": "#FF0000" }' + json_array=$(update_holder holder__notif "$json") + else + local json='{ "full_text": "N: active" }' + json_array=$(update_holder holder__notif "$json") + fi +} + +_pre="" +i3status | (read line; echo "$line"; read line; echo "$line"; while true +do + read line + json_array="$(echo $line | sed -e 's/^,//')" + notif + echo "$_pre$json_array" + _pre="," +done) diff --git a/modules/10-i3/install.sh b/modules/10-i3/install.sh index dfb4501..17bc534 100644 --- a/modules/10-i3/install.sh +++ b/modules/10-i3/install.sh @@ -30,15 +30,25 @@ function preinstall() { function install() { # backup old file if it exists and we haven't backed it up before - if [[ -f "$HOME/.config/i3/config" ]] && ! [[ -f "$HOME/.config/i3/config.bak" ]] && ! [[ -f "$_scriptdir/.firstrun" ]]; then - log verbose "making backup" - cp "$HOME/.config/i3/config" "$HOME/.config/i3/config.bak" + if ! [[ -f "$_scriptdir/.firstrun" ]]; then + if [[ -d "$HOME/.config/i3" ]] && ! [[ -d "$HOME/.config/i3.bak" ]]; then + log verbose "making backup of i3" + cp -r "$HOME/.config/i3" "$HOME/.config/i3.bak" + fi + if [[ -d "$HOME/.config/i3status" ]] && ! [[ -d "$HOME/.config/i3status.bak" ]]; then + log verbose "making backup of i3status" + cp -r "$HOME/.config/i3status" "$HOME/.config/i3status.bak" + fi touch "$_scriptdir/.firstrun" fi log info "linking i3 config" - mkdir -p "$HOME/.config/i3" - ln -sf "$_scriptdir/config" "$HOME/.config/i3/config" + rm -rf "$HOME/.config/i3" + ln -sf "$_scriptdir/i3" "$HOME/.config/i3" + + log info "linking i3status config" + rm -rf "$HOME/.config/i3status" + ln -sf "$_scriptdir/i3status/" "$HOME/.config/i3status" log info "linking xinitrc" ln -sf "$_scriptdir/xinitrc" "$HOME/.xinitrc" |