summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/10-i3/i3/config (renamed from modules/10-i3/config)42
-rw-r--r--modules/10-i3/i3status/config85
-rwxr-xr-xmodules/10-i3/i3status/run.sh73
-rw-r--r--modules/10-i3/install.sh20
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"