Merge branch 'master' into laptop
This commit is contained in:
431
i3/.config/dunst/dunstrc
Normal file
431
i3/.config/dunst/dunstrc
Normal file
@ -0,0 +1,431 @@
|
||||
[global]
|
||||
### Display ###
|
||||
|
||||
# Which monitor should the notifications be displayed on.
|
||||
monitor = 0
|
||||
|
||||
# Display notification on focused monitor. Possible modes are:
|
||||
# mouse: follow mouse pointer
|
||||
# keyboard: follow window with keyboard focus
|
||||
# none: don't follow anything
|
||||
#
|
||||
# "keyboard" needs a window manager that exports the
|
||||
# _NET_ACTIVE_WINDOW property.
|
||||
# This should be the case for almost all modern window managers.
|
||||
#
|
||||
# If this option is set to mouse or keyboard, the monitor option
|
||||
# will be ignored.
|
||||
follow = keyboard #mouse
|
||||
|
||||
# The geometry of the window:
|
||||
# [{width}]x{height}[+/-{x}+/-{y}]
|
||||
# The geometry of the message window.
|
||||
# The height is measured in number of notifications everything else
|
||||
# in pixels. If the width is omitted but the height is given
|
||||
# ("-geometry x2"), the message window expands over the whole screen
|
||||
# (dmenu-like). If width is 0, the window expands to the longest
|
||||
# message displayed. A positive x is measured from the left, a
|
||||
# negative from the right side of the screen. Y is measured from
|
||||
# the top and down respectively.
|
||||
# The width can be negative. In this case the actual width is the
|
||||
# screen width minus the width defined in within the geometry option.
|
||||
geometry = "300x5-30+20"
|
||||
|
||||
# Show how many messages are currently hidden (because of geometry).
|
||||
indicate_hidden = yes
|
||||
|
||||
# Shrink window if it's smaller than the width. Will be ignored if
|
||||
# width is 0.
|
||||
shrink = no
|
||||
|
||||
# The transparency of the window. Range: [0; 100].
|
||||
# This option will only work if a compositing window manager is
|
||||
# present (e.g. xcompmgr, compiz, etc.).
|
||||
transparency = 0
|
||||
|
||||
# The height of the entire notification. If the height is smaller
|
||||
# than the font height and padding combined, it will be raised
|
||||
# to the font height and padding.
|
||||
notification_height = 0
|
||||
|
||||
# Draw a line of "separator_height" pixel height between two
|
||||
# notifications.
|
||||
# Set to 0 to disable.
|
||||
separator_height = 2
|
||||
|
||||
# Padding between text and separator.
|
||||
padding = 8
|
||||
|
||||
# Horizontal padding.
|
||||
horizontal_padding = 8
|
||||
|
||||
# Defines width in pixels of frame around the notification window.
|
||||
# Set to 0 to disable.
|
||||
frame_width = 3
|
||||
|
||||
# Defines color of the frame around the notification window.
|
||||
frame_color = "#aaaaaa"
|
||||
|
||||
# Define a color for the separator.
|
||||
# possible values are:
|
||||
# * auto: dunst tries to find a color fitting to the background;
|
||||
# * foreground: use the same color as the foreground;
|
||||
# * frame: use the same color as the frame;
|
||||
# * anything else will be interpreted as a X color.
|
||||
separator_color = frame
|
||||
|
||||
# Sort messages by urgency.
|
||||
sort = yes
|
||||
|
||||
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||
# for longer than idle_threshold seconds.
|
||||
# Set to 0 to disable.
|
||||
# A client can set the 'transient' hint to bypass this. See the rules
|
||||
# section for how to disable this if necessary
|
||||
idle_threshold = 120
|
||||
|
||||
### Text ###
|
||||
|
||||
font = Monospace 12
|
||||
|
||||
# The spacing between lines. If the height is smaller than the
|
||||
# font height, it will get raised to the font height.
|
||||
line_height = 0
|
||||
|
||||
# Possible values are:
|
||||
# full: Allow a small subset of html markup in notifications:
|
||||
# <b>bold</b>
|
||||
# <i>italic</i>
|
||||
# <s>strikethrough</s>
|
||||
# <u>underline</u>
|
||||
#
|
||||
# For a complete reference see
|
||||
# <https://developer.gnome.org/pango/stable/pango-Markup.html>.
|
||||
#
|
||||
# strip: This setting is provided for compatibility with some broken
|
||||
# clients that send markup even though it's not enabled on the
|
||||
# server. Dunst will try to strip the markup but the parsing is
|
||||
# simplistic so using this option outside of matching rules for
|
||||
# specific applications *IS GREATLY DISCOURAGED*.
|
||||
#
|
||||
# no: Disable markup parsing, incoming notifications will be treated as
|
||||
# plain text. Dunst will not advertise that it has the body-markup
|
||||
# capability if this is set as a global setting.
|
||||
#
|
||||
# It's important to note that markup inside the format option will be parsed
|
||||
# regardless of what this is set to.
|
||||
markup = full
|
||||
|
||||
# The format of the message. Possible variables are:
|
||||
# %a appname
|
||||
# %s summary
|
||||
# %b body
|
||||
# %i iconname (including its path)
|
||||
# %I iconname (without its path)
|
||||
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||
# %n progress value if set without any extra characters
|
||||
# %% Literal %
|
||||
# Markup is allowed
|
||||
format = "<b>%s</b>\n%b"
|
||||
|
||||
# Alignment of message text.
|
||||
# Possible values are "left", "center" and "right".
|
||||
alignment = left
|
||||
|
||||
# Vertical alignment of message text and icon.
|
||||
# Possible values are "top", "center" and "bottom".
|
||||
vertical_alignment = center
|
||||
|
||||
# Show age of message if message is older than show_age_threshold
|
||||
# seconds.
|
||||
# Set to -1 to disable.
|
||||
show_age_threshold = 60
|
||||
|
||||
# Split notifications into multiple lines if they don't fit into
|
||||
# geometry.
|
||||
word_wrap = yes
|
||||
|
||||
# When word_wrap is set to no, specify where to make an ellipsis in long lines.
|
||||
# Possible values are "start", "middle" and "end".
|
||||
ellipsize = middle
|
||||
|
||||
# Ignore newlines '\n' in notifications.
|
||||
ignore_newline = no
|
||||
|
||||
# Stack together notifications with the same content
|
||||
stack_duplicates = true
|
||||
|
||||
# Hide the count of stacked notifications with the same content
|
||||
hide_duplicate_count = false
|
||||
|
||||
# Display indicators for URLs (U) and actions (A).
|
||||
show_indicators = yes
|
||||
|
||||
### Icons ###
|
||||
|
||||
# Align icons left/right/off
|
||||
icon_position = left
|
||||
|
||||
# Scale small icons up to this size, set to 0 to disable. Helpful
|
||||
# for e.g. small files or high-dpi screens. In case of conflict,
|
||||
# max_icon_size takes precedence over this.
|
||||
min_icon_size = 0
|
||||
|
||||
# Scale larger icons down to this size, set to 0 to disable
|
||||
max_icon_size = 32
|
||||
|
||||
# Paths to default icons.
|
||||
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
|
||||
|
||||
### History ###
|
||||
|
||||
# Should a notification popped up from history be sticky or timeout
|
||||
# as if it would normally do.
|
||||
sticky_history = yes
|
||||
|
||||
# Maximum amount of notifications kept in history
|
||||
history_length = 20
|
||||
|
||||
### Misc/Advanced ###
|
||||
|
||||
# dmenu path.
|
||||
dmenu = /usr/bin/dmenu -p dunst:
|
||||
|
||||
# Browser for opening urls in context menu.
|
||||
browser = /usr/bin/firefox -new-tab
|
||||
|
||||
# Always run rule-defined scripts, even if the notification is suppressed
|
||||
always_run_script = true
|
||||
|
||||
# Define the title of the windows spawned by dunst
|
||||
title = Dunst
|
||||
|
||||
# Define the class of the windows spawned by dunst
|
||||
class = Dunst
|
||||
|
||||
# Print a notification on startup.
|
||||
# This is mainly for error detection, since dbus (re-)starts dunst
|
||||
# automatically after a crash.
|
||||
startup_notification = false
|
||||
|
||||
# Manage dunst's desire for talking
|
||||
# Can be one of the following values:
|
||||
# crit: Critical features. Dunst aborts
|
||||
# warn: Only non-fatal warnings
|
||||
# mesg: Important Messages
|
||||
# info: all unimportant stuff
|
||||
# debug: all less than unimportant stuff
|
||||
verbosity = mesg
|
||||
|
||||
# Define the corner radius of the notification window
|
||||
# in pixel size. If the radius is 0, you have no rounded
|
||||
# corners.
|
||||
# The radius will be automatically lowered if it exceeds half of the
|
||||
# notification height to avoid clipping text and/or icons.
|
||||
corner_radius = 0
|
||||
|
||||
# Ignore the dbus closeNotification message.
|
||||
# Useful to enforce the timeout set by dunst configuration. Without this
|
||||
# parameter, an application may close the notification sent before the
|
||||
# user defined timeout.
|
||||
ignore_dbusclose = false
|
||||
|
||||
### Legacy
|
||||
|
||||
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
||||
# This setting is provided for compatibility with older nVidia drivers that
|
||||
# do not support RandR and using it on systems that support RandR is highly
|
||||
# discouraged.
|
||||
#
|
||||
# By enabling this setting dunst will not be able to detect when a monitor
|
||||
# is connected or disconnected which might break follow mode if the screen
|
||||
# layout changes.
|
||||
force_xinerama = false
|
||||
|
||||
### mouse
|
||||
|
||||
# Defines list of actions for each mouse event
|
||||
# Possible values are:
|
||||
# * none: Don't do anything.
|
||||
# * do_action: If the notification has exactly one action, or one is marked as default,
|
||||
# invoke it. If there are multiple and no default, open the context menu.
|
||||
# * close_current: Close current notification.
|
||||
# * close_all: Close all notifications.
|
||||
# These values can be strung together for each mouse event, and
|
||||
# will be executed in sequence.
|
||||
mouse_left_click = do_action, close_current
|
||||
mouse_middle_click = do_action, close_current
|
||||
mouse_right_click = close_all
|
||||
|
||||
# Experimental features that may or may not work correctly. Do not expect them
|
||||
# to have a consistent behaviour across releases.
|
||||
[experimental]
|
||||
# Calculate the dpi to use on a per-monitor basis.
|
||||
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||
# using the resolution and physical size. This might be useful in setups
|
||||
# where there are multiple screens with very different dpi values.
|
||||
per_monitor_dpi = false
|
||||
|
||||
[shortcuts]
|
||||
|
||||
# Shortcuts are specified as [modifier+][modifier+]...key
|
||||
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
|
||||
# "mod3" and "mod4" (windows-key).
|
||||
# Xev might be helpful to find names for keys.
|
||||
|
||||
# Close notification.
|
||||
close = ctrl+period
|
||||
|
||||
# Close all notifications.
|
||||
close_all = ctrl+shift+period
|
||||
|
||||
# Redisplay last message(s).
|
||||
# On the US keyboard layout "grave" is normally above TAB and left
|
||||
# of "1". Make sure this key actually exists on your keyboard layout,
|
||||
# e.g. check output of 'xmodmap -pke'
|
||||
history = ctrl+shift+space
|
||||
|
||||
# Context menu.
|
||||
context = ctrl+space
|
||||
|
||||
[urgency_low]
|
||||
# IMPORTANT: colors have to be defined in quotation marks.
|
||||
# Otherwise the "#" and following would be interpreted as a comment.
|
||||
background = "#222222"
|
||||
foreground = "#888888"
|
||||
timeout = 10
|
||||
# Icon for notifications with low urgency, uncomment to enable
|
||||
#icon = /path/to/icon
|
||||
|
||||
[urgency_normal]
|
||||
background = "#285577"
|
||||
foreground = "#ffffff"
|
||||
timeout = 10
|
||||
# Icon for notifications with normal urgency, uncomment to enable
|
||||
#icon = /path/to/icon
|
||||
|
||||
[urgency_critical]
|
||||
background = "#900000"
|
||||
foreground = "#ffffff"
|
||||
frame_color = "#ff0000"
|
||||
timeout = 0
|
||||
# Icon for notifications with critical urgency, uncomment to enable
|
||||
#icon = /path/to/icon
|
||||
|
||||
# Every section that isn't one of the above is interpreted as a rules to
|
||||
# override settings for certain messages.
|
||||
#
|
||||
# Messages can be matched by
|
||||
# appname (discouraged, see desktop_entry)
|
||||
# body
|
||||
# category
|
||||
# desktop_entry
|
||||
# icon
|
||||
# match_transient
|
||||
# msg_urgency
|
||||
# stack_tag
|
||||
# summary
|
||||
#
|
||||
# and you can override the
|
||||
# background
|
||||
# foreground
|
||||
# format
|
||||
# frame_color
|
||||
# fullscreen
|
||||
# new_icon
|
||||
# set_stack_tag
|
||||
# set_transient
|
||||
# timeout
|
||||
# urgency
|
||||
#
|
||||
# Shell-like globbing will get expanded.
|
||||
#
|
||||
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
|
||||
# GLib based applications export their desktop-entry name. In comparison to the appname,
|
||||
# the desktop-entry won't get localized.
|
||||
#
|
||||
# SCRIPTING
|
||||
# You can specify a script that gets run when the rule matches by
|
||||
# setting the "script" option.
|
||||
# The script will be called as follows:
|
||||
# script appname summary body icon urgency
|
||||
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
||||
#
|
||||
# NOTE: if you don't want a notification to be displayed, set the format
|
||||
# to "".
|
||||
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
||||
# to find fitting options for rules.
|
||||
|
||||
# Disable the transient hint so that idle_threshold cannot be bypassed from the
|
||||
# client
|
||||
#[transient_disable]
|
||||
# match_transient = yes
|
||||
# set_transient = no
|
||||
#
|
||||
# Make the handling of transient notifications more strict by making them not
|
||||
# be placed in history.
|
||||
#[transient_history_ignore]
|
||||
# match_transient = yes
|
||||
# history_ignore = yes
|
||||
|
||||
# fullscreen values
|
||||
# show: show the notifications, regardless if there is a fullscreen window opened
|
||||
# delay: displays the new notification, if there is no fullscreen window active
|
||||
# If the notification is already drawn, it won't get undrawn.
|
||||
# pushback: same as delay, but when switching into fullscreen, the notification will get
|
||||
# withdrawn from screen again and will get delayed like a new notification
|
||||
#[fullscreen_delay_everything]
|
||||
# fullscreen = delay
|
||||
#[fullscreen_show_critical]
|
||||
# msg_urgency = critical
|
||||
# fullscreen = show
|
||||
|
||||
#[espeak]
|
||||
# summary = "*"
|
||||
# script = dunst_espeak.sh
|
||||
|
||||
#[script-test]
|
||||
# summary = "*script*"
|
||||
# script = dunst_test.sh
|
||||
|
||||
#[ignore]
|
||||
# # This notification will not be displayed
|
||||
# summary = "foobar"
|
||||
# format = ""
|
||||
|
||||
#[history-ignore]
|
||||
# # This notification will not be saved in history
|
||||
# summary = "foobar"
|
||||
# history_ignore = yes
|
||||
|
||||
#[skip-display]
|
||||
# # This notification will not be displayed, but will be included in the history
|
||||
# summary = "foobar"
|
||||
# skip_display = yes
|
||||
|
||||
#[signed_on]
|
||||
# appname = Pidgin
|
||||
# summary = "*signed on*"
|
||||
# urgency = low
|
||||
#
|
||||
#[signed_off]
|
||||
# appname = Pidgin
|
||||
# summary = *signed off*
|
||||
# urgency = low
|
||||
#
|
||||
#[says]
|
||||
# appname = Pidgin
|
||||
# summary = *says*
|
||||
# urgency = critical
|
||||
#
|
||||
#[twitter]
|
||||
# appname = Pidgin
|
||||
# summary = *twitter.com*
|
||||
# urgency = normal
|
||||
#
|
||||
#[stack-volumes]
|
||||
# appname = "some_volume_notifiers"
|
||||
# set_stack_tag = "volume"
|
||||
#
|
||||
# vim: ft=cfg
|
1
i3/.config/i3-scrot.conf
Normal file
1
i3/.config/i3-scrot.conf
Normal file
@ -0,0 +1 @@
|
||||
scrot_dir=/home/julian/Pictures/screenshots
|
326
i3/.config/i3/config
Normal file
326
i3/.config/i3/config
Normal file
@ -0,0 +1,326 @@
|
||||
# This file has been auto-generated by i3-config-wizard(1).
|
||||
# It will not be overwritten, so edit it as you like.
|
||||
#
|
||||
# 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!
|
||||
|
||||
set $mod Mod4
|
||||
|
||||
# Font for window titles. Will also be used by the bar unless a different font
|
||||
# is used in the bar {} block below.
|
||||
font pango:monospace 12
|
||||
|
||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
||||
#font pango:DejaVu Sans Mono 12
|
||||
|
||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
||||
# they are included here as an example. Modify as you see fit.
|
||||
|
||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
||||
|
||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
||||
# 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 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
|
||||
|
||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||
floating_modifier $mod
|
||||
|
||||
# start a terminal
|
||||
bindsym $mod+Return exec xfce4-terminal
|
||||
|
||||
# kill focused window
|
||||
bindsym $mod+Shift+q kill
|
||||
bindsym $mod+q kill
|
||||
bindsym $mod+Shift+x kill
|
||||
bindsym $mod+x kill
|
||||
# for x button in laptop (produces alt+f4)
|
||||
bindsym Mod1+F4 kill
|
||||
|
||||
# start dmenu (a program launcher)
|
||||
bindsym $mod+d exec rofi -show run #dmenu_recency -i
|
||||
# There also is the (new) i3-dmenu-desktop which only displays applications
|
||||
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
|
||||
# installed.
|
||||
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
|
||||
|
||||
# change focus
|
||||
bindsym $mod+h focus left
|
||||
bindsym $mod+j focus down
|
||||
bindsym $mod+k focus up
|
||||
bindsym $mod+l focus right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
|
||||
# move focused window
|
||||
bindsym $mod+Shift+h move left
|
||||
bindsym $mod+Shift+j move down
|
||||
bindsym $mod+Shift+k move up
|
||||
bindsym $mod+Shift+l move right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
bindsym $mod+Shift+Left move left
|
||||
bindsym $mod+Shift+Down move down
|
||||
bindsym $mod+Shift+Up move up
|
||||
bindsym $mod+Shift+Right move right
|
||||
|
||||
# split in horizontal orientation
|
||||
bindsym $mod+Shift+v split h
|
||||
|
||||
# split in vertical orientation
|
||||
bindsym $mod+v split v
|
||||
|
||||
# enter fullscreen mode for the focused container
|
||||
bindsym $mod+f fullscreen toggle
|
||||
|
||||
# change container layout (stacked, tabbed, toggle split)
|
||||
bindsym $mod+Shift+w layout stacking
|
||||
bindsym $mod+w layout tabbed
|
||||
bindsym $mod+e layout toggle split
|
||||
|
||||
# toggle tiling / floating
|
||||
bindsym $mod+Shift+space floating toggle
|
||||
|
||||
# change focus between tiling / floating windows
|
||||
bindsym $mod+space focus mode_toggle
|
||||
|
||||
# focus the parent container
|
||||
bindsym $mod+a focus parent
|
||||
|
||||
# focus the child container
|
||||
#bindsym $mod+d focus child
|
||||
|
||||
# Define names for default workspaces for which we configure key bindings later on.
|
||||
# We use variables to avoid repeating the names in multiple places.
|
||||
set $ws1 "1"
|
||||
set $ws2 "2"
|
||||
set $ws3 "3"
|
||||
set $ws4 "4"
|
||||
set $ws5 "5"
|
||||
set $ws6 "6"
|
||||
set $ws7 "7"
|
||||
set $ws8 "8"
|
||||
set $ws9 "9"
|
||||
set $ws10 "10"
|
||||
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace number $ws1
|
||||
bindsym $mod+2 workspace number $ws2
|
||||
bindsym $mod+3 workspace number $ws3
|
||||
bindsym $mod+4 workspace number $ws4
|
||||
bindsym $mod+5 workspace number $ws5
|
||||
bindsym $mod+6 workspace number $ws6
|
||||
bindsym $mod+7 workspace number $ws7
|
||||
bindsym $mod+8 workspace number $ws8
|
||||
bindsym $mod+9 workspace number $ws9
|
||||
bindsym $mod+0 workspace number $ws10
|
||||
|
||||
# move focused container to workspace
|
||||
bindsym $mod+Ctrl+1 move container to workspace number $ws1
|
||||
bindsym $mod+Ctrl+2 move container to workspace number $ws2
|
||||
bindsym $mod+Ctrl+3 move container to workspace number $ws3
|
||||
bindsym $mod+Ctrl+4 move container to workspace number $ws4
|
||||
bindsym $mod+Ctrl+5 move container to workspace number $ws5
|
||||
bindsym $mod+Ctrl+6 move container to workspace number $ws6
|
||||
bindsym $mod+Ctrl+7 move container to workspace number $ws7
|
||||
bindsym $mod+Ctrl+8 move container to workspace number $ws8
|
||||
bindsym $mod+Ctrl+9 move container to workspace number $ws9
|
||||
bindsym $mod+Ctrl+0 move container to workspace number $ws10
|
||||
|
||||
# move focused container to workspace and follow
|
||||
bindsym $mod+Shift+1 move container to workspace number $ws1; workspace $ws1
|
||||
bindsym $mod+Shift+2 move container to workspace number $ws2; workspace $ws2
|
||||
bindsym $mod+Shift+3 move container to workspace number $ws3; workspace $ws3
|
||||
bindsym $mod+Shift+4 move container to workspace number $ws4; workspace $ws4
|
||||
bindsym $mod+Shift+5 move container to workspace number $ws5; workspace $ws5
|
||||
bindsym $mod+Shift+6 move container to workspace number $ws6; workspace $ws6
|
||||
bindsym $mod+Shift+7 move container to workspace number $ws7; workspace $ws7
|
||||
bindsym $mod+Shift+8 move container to workspace number $ws8; workspace $ws8
|
||||
bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9
|
||||
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
|
||||
|
||||
# Monitor config
|
||||
set $monitor_left eDP1
|
||||
set $monitor_right HDMI1
|
||||
|
||||
workspace $ws1 output $monitor_left
|
||||
workspace $ws2 output $monitor_left
|
||||
workspace $ws3 output $monitor_left
|
||||
workspace $ws4 output $monitor_left
|
||||
workspace $ws5 output $monitor_left
|
||||
workspace $ws6 output $monitor_right
|
||||
workspace $ws7 output $monitor_right
|
||||
workspace $ws8 output $monitor_right
|
||||
workspace $ws9 output $monitor_right
|
||||
workspace $ws10 output $monitor_right
|
||||
|
||||
# reload the configuration file
|
||||
#bindsym $mod+Shift+c reload
|
||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||
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'"
|
||||
|
||||
# resize window (you can also use the mouse for that)
|
||||
mode "resize" {
|
||||
# These bindings trigger as soon as you enter the resize mode
|
||||
|
||||
# Pressing left will shrink the window’s width.
|
||||
# Pressing right will grow the window’s width.
|
||||
# Pressing up will shrink the window’s height.
|
||||
# Pressing down will grow the window’s height.
|
||||
bindsym h resize shrink width 10 px or 10 ppt
|
||||
bindsym j resize grow height 10 px or 10 ppt
|
||||
bindsym k resize shrink height 10 px or 10 ppt
|
||||
bindsym l resize grow width 10 px or 10 ppt
|
||||
|
||||
# same bindings, but for the arrow keys
|
||||
bindsym Left resize shrink width 10 px or 10 ppt
|
||||
bindsym Down resize grow height 10 px or 10 ppt
|
||||
bindsym Up resize shrink height 10 px or 10 ppt
|
||||
bindsym Right resize grow width 10 px or 10 ppt
|
||||
|
||||
# back to normal: Enter or Escape or $mod+r
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym $mod+r mode "default"
|
||||
}
|
||||
|
||||
bindsym $mod+r mode "resize"
|
||||
|
||||
# Start i3bar to display a workspace bar (plus the system information i3status
|
||||
# finds out, if available)
|
||||
bar {
|
||||
status_command i3blocks
|
||||
tray_output $monitor_left
|
||||
position top
|
||||
i3bar_command i3bar --transparency
|
||||
}
|
||||
|
||||
|
||||
set $mode_system System (l) lock, (e) logout, (r) reboot, (s) shutdown
|
||||
mode "$mode_system" {
|
||||
bindsym l exec --no-startup-id i3lock, mode "default"
|
||||
bindsym e exec --no-startup-id i3exit logout, mode "default"
|
||||
bindsym r exec --no-startup-id i3exit reboot, mode "default"
|
||||
bindsym s exec --no-startup-id i3exit shutdown, mode "default"
|
||||
|
||||
# back to normal: Enter or Escape
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
bindsym $mod+Shift+e mode "$mode_system"
|
||||
|
||||
set $mode_screenshot_file Screenshot to file (w) Active window, (s) Selection, (d) Desktop
|
||||
mode "$mode_screenshot_file" {
|
||||
bindsym w exec --no-startup-id "i3-scrot -w", mode "default"
|
||||
bindsym --release s exec --no-startup-id "i3-scrot -s", mode "default"
|
||||
bindsym d exec --no-startup-id "i3-scrot -d", mode "default"
|
||||
bindsym --release Return exec --no-startup-id "i3-scrot -s", mode "default"
|
||||
|
||||
#back to normal: Escape
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
bindsym $mod+Shift+Print mode "$mode_screenshot_file"
|
||||
|
||||
set $mode_screenshot_clipboard Screenshot to clipboard (w) Active window, (s) Selection, (d) Desktop
|
||||
mode "$mode_screenshot_clipboard" {
|
||||
bindsym w exec --no-startup-id "i3-scrot -wc", mode "default"
|
||||
bindsym --release s exec --no-startup-id "i3-scrot -sc", mode "default"
|
||||
bindsym d exec --no-startup-id "i3-scrot -dc", mode "default"
|
||||
bindsym --release Return exec --no-startup-id "i3-scrot -sc", mode "default"
|
||||
|
||||
# back to normal: Escape
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
bindsym $mod+Print mode "$mode_screenshot_clipboard"
|
||||
|
||||
bindsym $mod+Ctrl+Right move workspace to output right
|
||||
bindsym $mod+Ctrl+Left move workspace to output right
|
||||
|
||||
bindsym $mod+c exec xfce4-terminal --role floating --hide-scrollbar --title Calculator -e qalc
|
||||
bindsym $mod+p exec xwacomcalibrate
|
||||
bindsym $mod+t exec thunar
|
||||
bindsym $mod+m exec xfce4-terminal -x mc
|
||||
bindsym $mod+Shift+c exec jupyter-calculator
|
||||
bindsym $mod+b exec firefox
|
||||
bindsym $mod+s exec pavucontrol
|
||||
|
||||
workspace_auto_back_and_forth yes
|
||||
|
||||
########## Window settings ##########
|
||||
default_border normal
|
||||
default_floating_border normal
|
||||
|
||||
assign [class="firefox" title="Mozilla Firefox$"] workspace $ws1
|
||||
assign [class="TelegramDesktop"] workspace $ws9
|
||||
assign [class="Signal"] workspace $ws9
|
||||
assign [class="Rocket.Chat"] workspace $ws9
|
||||
assign [class="Element"] workspace $ws9
|
||||
assign [class="Thunderbird"] workspace $ws10
|
||||
assign [class="zoom"] workspace $ws5
|
||||
|
||||
for_window [class="firefox"] focus
|
||||
#for_window [class="Thunderbird"] focus
|
||||
for_window [class="TelegramDesktop"] no_focus
|
||||
for_window [class="Rocket.Chat"] no_focus
|
||||
for_window [class="Element"] no_focus
|
||||
|
||||
#for_window [class="Thunderbird"] focus
|
||||
|
||||
for_window [title="Manjaro Settings Manager"] floating enable
|
||||
for_window [class="Pamac-manager"] floating enable
|
||||
for_window [class="Pamac-updater"] floating enable
|
||||
#for_window [class="zoom" title="Chat"] floating enable
|
||||
#for_window [class="Thunderbird" instance="Msgcompose"] floating enable
|
||||
#
|
||||
for_window [window_role=floating] floating enable
|
||||
|
||||
########## Autostart applications ##########
|
||||
exec --no-startup-id "i3-msg 'workspace 9; append_layout ~/.config/i3/workspace-chat.json'"
|
||||
|
||||
exec firefox
|
||||
exec thunderbird
|
||||
exec chat.rocket.RocketChat no_focus
|
||||
exec element-desktop no_focus
|
||||
exec telegram-desktop no_focus
|
||||
|
||||
exec --no-startup-id nm-applet
|
||||
exec --no-startup-id xfce4-power-manager
|
||||
exec --no-startup-id nextcloud
|
||||
# Authentication agent
|
||||
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
# Notify about software updates
|
||||
exec --no-startup-id pamac-tray
|
||||
# Notify about kernel updates
|
||||
exec --no-startup-id msm_notifier
|
||||
# Audio
|
||||
exec --no-startup-id start-pulseaudio-x11
|
||||
# Background
|
||||
#exec --no-startup-id feh --randomize --bg-fill /home/julian/Pictures/Hintergrundbilder/*
|
||||
exec --no-startup-id feh --bg-fill /home/julian/nextcloud/space.jpg
|
||||
# Notifications
|
||||
exec --no-startup-id dunst -config /home/julian/.config/dunst/dunstrc
|
||||
|
||||
# Default workspaces at startup (no need because autostart applications get always focused)
|
||||
#exec --no-startup-id i3-msg workspace $ws1
|
||||
exec --no-startup-id i3-msg workspace $ws10
|
||||
|
418
i3/.config/i3/manjaro-default-config
Normal file
418
i3/.config/i3/manjaro-default-config
Normal file
@ -0,0 +1,418 @@
|
||||
# i3 config file (v4)
|
||||
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
|
||||
|
||||
# Set mod key (Mod1=<Alt>, Mod4=<Super>)
|
||||
set $mod Mod4
|
||||
|
||||
# set default desktop layout (default is tiling)
|
||||
# workspace_layout tabbed <stacking|tabbed>
|
||||
|
||||
# Configure border style <normal|1pixel|pixel xx|none|pixel>
|
||||
default_border pixel 1
|
||||
default_floating_border normal
|
||||
|
||||
# Hide borders
|
||||
hide_edge_borders none
|
||||
|
||||
# change borders
|
||||
bindsym $mod+u border none
|
||||
bindsym $mod+y border pixel 1
|
||||
bindsym $mod+n border normal
|
||||
|
||||
# Font for window titles. Will also be used by the bar unless a different font
|
||||
# is used in the bar {} block below.
|
||||
font xft:URWGothic-Book 11
|
||||
|
||||
# Use Mouse+$mod to drag floating windows
|
||||
floating_modifier $mod
|
||||
|
||||
# start a terminal
|
||||
bindsym $mod+Return exec terminal
|
||||
|
||||
# kill focused window
|
||||
bindsym $mod+Shift+q kill
|
||||
|
||||
# start program launcher
|
||||
bindsym $mod+d exec --no-startup-id dmenu_recency
|
||||
|
||||
# launch categorized menu
|
||||
bindsym $mod+z exec --no-startup-id morc_menu
|
||||
|
||||
################################################################################################
|
||||
## sound-section - DO NOT EDIT if you wish to automatically upgrade Alsa -> Pulseaudio later! ##
|
||||
################################################################################################
|
||||
|
||||
#exec --no-startup-id volumeicon
|
||||
#bindsym $mod+Ctrl+m exec terminal -e 'alsamixer'
|
||||
exec --no-startup-id pulseaudio
|
||||
exec --no-startup-id pa-applet
|
||||
bindsym $mod+Ctrl+m exec pavucontrol
|
||||
|
||||
################################################################################################
|
||||
|
||||
# Screen brightness controls
|
||||
# bindsym XF86MonBrightnessUp exec "xbacklight -inc 10; notify-send 'brightness up'"
|
||||
# bindsym XF86MonBrightnessDown exec "xbacklight -dec 10; notify-send 'brightness down'"
|
||||
|
||||
# Start Applications
|
||||
bindsym $mod+Ctrl+b exec terminal -e 'bmenu'
|
||||
bindsym $mod+F2 exec palemoon
|
||||
bindsym $mod+F3 exec pcmanfm
|
||||
# bindsym $mod+F3 exec ranger
|
||||
bindsym $mod+Shift+F3 exec pcmanfm_pkexec
|
||||
bindsym $mod+F5 exec terminal -e 'mocp'
|
||||
bindsym $mod+t exec --no-startup-id pkill picom
|
||||
bindsym $mod+Ctrl+t exec --no-startup-id picom -b
|
||||
bindsym $mod+Shift+d --release exec "killall dunst; exec notify-send 'restart dunst'"
|
||||
bindsym Print exec --no-startup-id i3-scrot
|
||||
bindsym $mod+Print --release exec --no-startup-id i3-scrot -w
|
||||
bindsym $mod+Shift+Print --release exec --no-startup-id i3-scrot -s
|
||||
bindsym $mod+Shift+h exec xdg-open /usr/share/doc/manjaro/i3_help.pdf
|
||||
bindsym $mod+Ctrl+x --release exec --no-startup-id xkill
|
||||
|
||||
# focus_follows_mouse no
|
||||
|
||||
# change focus
|
||||
bindsym $mod+j focus left
|
||||
bindsym $mod+k focus down
|
||||
bindsym $mod+l focus up
|
||||
bindsym $mod+semicolon focus right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
|
||||
# move focused window
|
||||
bindsym $mod+Shift+j move left
|
||||
bindsym $mod+Shift+k move down
|
||||
bindsym $mod+Shift+l move up
|
||||
bindsym $mod+Shift+semicolon move right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
bindsym $mod+Shift+Left move left
|
||||
bindsym $mod+Shift+Down move down
|
||||
bindsym $mod+Shift+Up move up
|
||||
bindsym $mod+Shift+Right move right
|
||||
|
||||
# workspace back and forth (with/without active container)
|
||||
workspace_auto_back_and_forth yes
|
||||
bindsym $mod+b workspace back_and_forth
|
||||
bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth
|
||||
|
||||
# split orientation
|
||||
bindsym $mod+h split h;exec notify-send 'tile horizontally'
|
||||
bindsym $mod+v split v;exec notify-send 'tile vertically'
|
||||
bindsym $mod+q split toggle
|
||||
|
||||
# toggle fullscreen mode for the focused container
|
||||
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
|
||||
|
||||
# toggle tiling / floating
|
||||
bindsym $mod+Shift+space floating toggle
|
||||
|
||||
# change focus between tiling / floating windows
|
||||
bindsym $mod+space focus mode_toggle
|
||||
|
||||
# toggle sticky
|
||||
bindsym $mod+Shift+s sticky toggle
|
||||
|
||||
# focus the parent container
|
||||
bindsym $mod+a focus parent
|
||||
|
||||
# move the currently focused window to the scratchpad
|
||||
bindsym $mod+Shift+minus move scratchpad
|
||||
|
||||
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||
# If there are multiple scratchpad windows, this command cycles through them.
|
||||
bindsym $mod+minus scratchpad show
|
||||
|
||||
#navigate workspaces next / previous
|
||||
bindsym $mod+Ctrl+Right workspace next
|
||||
bindsym $mod+Ctrl+Left workspace prev
|
||||
|
||||
# Workspace names
|
||||
# to display names or symbols instead of plain workspace numbers you can use
|
||||
# something like: set $ws1 1:mail
|
||||
# set $ws2 2:
|
||||
set $ws1 1
|
||||
set $ws2 2
|
||||
set $ws3 3
|
||||
set $ws4 4
|
||||
set $ws5 5
|
||||
set $ws6 6
|
||||
set $ws7 7
|
||||
set $ws8 8
|
||||
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace $ws1
|
||||
bindsym $mod+2 workspace $ws2
|
||||
bindsym $mod+3 workspace $ws3
|
||||
bindsym $mod+4 workspace $ws4
|
||||
bindsym $mod+5 workspace $ws5
|
||||
bindsym $mod+6 workspace $ws6
|
||||
bindsym $mod+7 workspace $ws7
|
||||
bindsym $mod+8 workspace $ws8
|
||||
|
||||
# Move focused container to workspace
|
||||
bindsym $mod+Ctrl+1 move container to workspace $ws1
|
||||
bindsym $mod+Ctrl+2 move container to workspace $ws2
|
||||
bindsym $mod+Ctrl+3 move container to workspace $ws3
|
||||
bindsym $mod+Ctrl+4 move container to workspace $ws4
|
||||
bindsym $mod+Ctrl+5 move container to workspace $ws5
|
||||
bindsym $mod+Ctrl+6 move container to workspace $ws6
|
||||
bindsym $mod+Ctrl+7 move container to workspace $ws7
|
||||
bindsym $mod+Ctrl+8 move container to workspace $ws8
|
||||
|
||||
# Move to workspace with focused container
|
||||
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
|
||||
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
|
||||
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
|
||||
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
|
||||
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
|
||||
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
|
||||
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
|
||||
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8
|
||||
|
||||
# Open applications on specific workspaces
|
||||
# assign [class="Thunderbird"] $ws1
|
||||
# assign [class="Pale moon"] $ws2
|
||||
# assign [class="Pcmanfm"] $ws3
|
||||
# assign [class="Skype"] $ws5
|
||||
|
||||
# Open specific applications in floating mode
|
||||
for_window [title="alsamixer"] floating enable border pixel 1
|
||||
for_window [class="calamares"] floating enable border normal
|
||||
for_window [class="Clipgrab"] floating enable
|
||||
for_window [title="File Transfer*"] floating enable
|
||||
for_window [class="fpakman"] floating enable
|
||||
for_window [class="Galculator"] floating enable border pixel 1
|
||||
for_window [class="GParted"] floating enable border normal
|
||||
for_window [title="i3_help"] floating enable sticky enable border normal
|
||||
for_window [class="Lightdm-settings"] floating enable
|
||||
for_window [class="Lxappearance"] floating enable sticky enable border normal
|
||||
for_window [class="Manjaro-hello"] floating enable
|
||||
for_window [class="Manjaro Settings Manager"] floating enable border normal
|
||||
for_window [title="MuseScore: Play Panel"] floating enable
|
||||
for_window [class="Nitrogen"] floating enable sticky enable border normal
|
||||
for_window [class="Oblogout"] fullscreen enable
|
||||
for_window [class="octopi"] floating enable
|
||||
for_window [title="About Pale Moon"] floating enable
|
||||
for_window [class="Pamac-manager"] floating enable
|
||||
for_window [class="Pavucontrol"] floating enable
|
||||
for_window [class="qt5ct"] floating enable sticky enable border normal
|
||||
for_window [class="Qtconfig-qt4"] floating enable sticky enable border normal
|
||||
for_window [class="Simple-scan"] floating enable border normal
|
||||
for_window [class="(?i)System-config-printer.py"] floating enable border normal
|
||||
for_window [class="Skype"] floating enable border normal
|
||||
for_window [class="Timeset-gui"] floating enable border normal
|
||||
for_window [class="(?i)virtualbox"] floating enable border normal
|
||||
for_window [class="Xfburn"] floating enable
|
||||
|
||||
# switch to workspace with urgent window automatically
|
||||
for_window [urgent=latest] focus
|
||||
|
||||
# reload the configuration file
|
||||
bindsym $mod+Shift+c reload
|
||||
|
||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||
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'"
|
||||
|
||||
# Set shut down, restart and locking features
|
||||
bindsym $mod+0 mode "$mode_system"
|
||||
set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
|
||||
mode "$mode_system" {
|
||||
bindsym l exec --no-startup-id i3exit lock, mode "default"
|
||||
bindsym s exec --no-startup-id i3exit suspend, mode "default"
|
||||
bindsym u exec --no-startup-id i3exit switch_user, mode "default"
|
||||
bindsym e exec --no-startup-id i3exit logout, mode "default"
|
||||
bindsym h exec --no-startup-id i3exit hibernate, mode "default"
|
||||
bindsym r exec --no-startup-id i3exit reboot, mode "default"
|
||||
bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"
|
||||
|
||||
# exit system mode: "Enter" or "Escape"
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
|
||||
# Resize window (you can also use the mouse for that)
|
||||
bindsym $mod+r mode "resize"
|
||||
mode "resize" {
|
||||
# These bindings trigger as soon as you enter the resize mode
|
||||
# Pressing left will shrink the window’s width.
|
||||
# Pressing right will grow the window’s width.
|
||||
# Pressing up will shrink the window’s height.
|
||||
# Pressing down will grow the window’s height.
|
||||
bindsym j resize shrink width 5 px or 5 ppt
|
||||
bindsym k resize grow height 5 px or 5 ppt
|
||||
bindsym l resize shrink height 5 px or 5 ppt
|
||||
bindsym semicolon resize grow width 5 px or 5 ppt
|
||||
|
||||
# same bindings, but for the arrow keys
|
||||
bindsym Left resize shrink width 10 px or 10 ppt
|
||||
bindsym Down resize grow height 10 px or 10 ppt
|
||||
bindsym Up resize shrink height 10 px or 10 ppt
|
||||
bindsym Right resize grow width 10 px or 10 ppt
|
||||
|
||||
# exit resize mode: Enter or Escape
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
|
||||
# Lock screen
|
||||
bindsym $mod+9 exec --no-startup-id blurlock
|
||||
|
||||
# Autostart applications
|
||||
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
exec --no-startup-id nitrogen --restore; sleep 1; picom -b
|
||||
exec --no-startup-id manjaro-hello
|
||||
exec --no-startup-id nm-applet
|
||||
exec --no-startup-id xfce4-power-manager
|
||||
exec --no-startup-id pamac-tray
|
||||
exec --no-startup-id clipit
|
||||
# exec --no-startup-id blueman-applet
|
||||
# exec_always --no-startup-id sbxkb
|
||||
exec --no-startup-id start_conky_maia
|
||||
# exec --no-startup-id start_conky_green
|
||||
exec --no-startup-id xautolock -time 10 -locker blurlock
|
||||
exec_always --no-startup-id ff-theme-util
|
||||
exec_always --no-startup-id fix_xcursor
|
||||
|
||||
# Color palette used for the terminal ( ~/.Xresources file )
|
||||
# Colors are gathered based on the documentation:
|
||||
# https://i3wm.org/docs/userguide.html#xresources
|
||||
# Change the variable name at the place you want to match the color
|
||||
# of your terminal like this:
|
||||
# [example]
|
||||
# If you want your bar to have the same background color as your
|
||||
# terminal background change the line 362 from:
|
||||
# background #14191D
|
||||
# to:
|
||||
# background $term_background
|
||||
# Same logic applied to everything else.
|
||||
set_from_resource $term_background background
|
||||
set_from_resource $term_foreground foreground
|
||||
set_from_resource $term_color0 color0
|
||||
set_from_resource $term_color1 color1
|
||||
set_from_resource $term_color2 color2
|
||||
set_from_resource $term_color3 color3
|
||||
set_from_resource $term_color4 color4
|
||||
set_from_resource $term_color5 color5
|
||||
set_from_resource $term_color6 color6
|
||||
set_from_resource $term_color7 color7
|
||||
set_from_resource $term_color8 color8
|
||||
set_from_resource $term_color9 color9
|
||||
set_from_resource $term_color10 color10
|
||||
set_from_resource $term_color11 color11
|
||||
set_from_resource $term_color12 color12
|
||||
set_from_resource $term_color13 color13
|
||||
set_from_resource $term_color14 color14
|
||||
set_from_resource $term_color15 color15
|
||||
|
||||
# Start i3bar to display a workspace bar (plus the system information i3status if available)
|
||||
bar {
|
||||
i3bar_command i3bar
|
||||
status_command i3status
|
||||
position bottom
|
||||
|
||||
## please set your primary output first. Example: 'xrandr --output eDP1 --primary'
|
||||
# tray_output primary
|
||||
# tray_output eDP1
|
||||
|
||||
bindsym button4 nop
|
||||
bindsym button5 nop
|
||||
# font xft:URWGothic-Book 11
|
||||
strip_workspace_numbers yes
|
||||
|
||||
colors {
|
||||
background #222D31
|
||||
statusline #F9FAF9
|
||||
separator #454947
|
||||
|
||||
# border backgr. text
|
||||
focused_workspace #F9FAF9 #16a085 #292F34
|
||||
active_workspace #595B5B #353836 #FDF6E3
|
||||
inactive_workspace #595B5B #222D31 #EEE8D5
|
||||
binding_mode #16a085 #2C2C2C #F9FAF9
|
||||
urgent_workspace #16a085 #FDF6E3 #E5201D
|
||||
}
|
||||
}
|
||||
|
||||
# hide/unhide i3status bar
|
||||
bindsym $mod+m bar mode toggle
|
||||
|
||||
# Theme colors
|
||||
# class border backgr. text indic. child_border
|
||||
client.focused #556064 #556064 #80FFF9 #FDF6E3
|
||||
client.focused_inactive #2F3D44 #2F3D44 #1ABC9C #454948
|
||||
client.unfocused #2F3D44 #2F3D44 #1ABC9C #454948
|
||||
client.urgent #CB4B16 #FDF6E3 #1ABC9C #268BD2
|
||||
client.placeholder #000000 #0c0c0c #ffffff #000000
|
||||
|
||||
client.background #2B2C2B
|
||||
|
||||
#############################
|
||||
### settings for i3-gaps: ###
|
||||
#############################
|
||||
|
||||
# Set inner/outer gaps
|
||||
gaps inner 14
|
||||
gaps outer -2
|
||||
|
||||
# Additionally, you can issue commands with the following syntax. This is useful to bind keys to changing the gap size.
|
||||
# gaps inner|outer current|all set|plus|minus <px>
|
||||
# gaps inner all set 10
|
||||
# gaps outer all plus 5
|
||||
|
||||
# Smart gaps (gaps used if only more than one container on the workspace)
|
||||
smart_gaps on
|
||||
|
||||
# Smart borders (draw borders around container only if it is not the only container on this workspace)
|
||||
# on|no_gaps (on=always activate and no_gaps=only activate if the gap size to the edge of the screen is 0)
|
||||
smart_borders on
|
||||
|
||||
# Press $mod+Shift+g to enter the gap mode. Choose o or i for modifying outer/inner gaps. Press one of + / - (in-/decrement for current workspace) or 0 (remove gaps for current workspace). If you also press Shift with these keys, the change will be global for all workspaces.
|
||||
set $mode_gaps Gaps: (o) outer, (i) inner
|
||||
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
|
||||
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
|
||||
bindsym $mod+Shift+g mode "$mode_gaps"
|
||||
|
||||
mode "$mode_gaps" {
|
||||
bindsym o mode "$mode_gaps_outer"
|
||||
bindsym i mode "$mode_gaps_inner"
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
mode "$mode_gaps_inner" {
|
||||
bindsym plus gaps inner current plus 5
|
||||
bindsym minus gaps inner current minus 5
|
||||
bindsym 0 gaps inner current set 0
|
||||
|
||||
bindsym Shift+plus gaps inner all plus 5
|
||||
bindsym Shift+minus gaps inner all minus 5
|
||||
bindsym Shift+0 gaps inner all set 0
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
mode "$mode_gaps_outer" {
|
||||
bindsym plus gaps outer current plus 5
|
||||
bindsym minus gaps outer current minus 5
|
||||
bindsym 0 gaps outer current set 0
|
||||
|
||||
bindsym Shift+plus gaps outer all plus 5
|
||||
bindsym Shift+minus gaps outer all minus 5
|
||||
bindsym Shift+0 gaps outer all set 0
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
71
i3/.config/i3/scripts/jupyter-calculator
Executable file
71
i3/.config/i3/scripts/jupyter-calculator
Executable file
@ -0,0 +1,71 @@
|
||||
#!/bin/python3
|
||||
|
||||
import subprocess
|
||||
import time
|
||||
import psutil
|
||||
|
||||
NOTEBOOK_DIR = "/home/julian/jupyter-notebooks/"
|
||||
PORT = "8988"
|
||||
|
||||
def isOtherProcessRunning():
|
||||
process_count = 0
|
||||
for proc in psutil.process_iter():
|
||||
try:
|
||||
pinfo = proc.as_dict(attrs=['pid', 'name', 'create_time'])
|
||||
if "jupyter-calc" in pinfo['name'].lower():
|
||||
process_count += 1
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied , psutil.ZombieProcess) :
|
||||
pass
|
||||
return process_count > 1
|
||||
|
||||
def getNotebookPort(line):
|
||||
url = line.split(" :: ")[0]
|
||||
return url.split("localhost:")[1].split("/")[0]
|
||||
|
||||
def getNotebookToken(line):
|
||||
url = line.split(" :: ")[0]
|
||||
return url.split("token=")[1]
|
||||
|
||||
|
||||
def isNotebookRunning():
|
||||
answer = subprocess.check_output("jupyter notebook list", shell=True)
|
||||
lines = answer.decode("utf-8").split("\n")
|
||||
if lines[0] != "Currently running servers:":
|
||||
raise Exception("Invalid jupyter status message")
|
||||
|
||||
for i in range(1, len(lines) -1):
|
||||
if getNotebookPort(lines[i]) == PORT:
|
||||
return getNotebookToken(lines[i])
|
||||
return None
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
if not isNotebookRunning():
|
||||
subprocess.Popen(f"jupyter notebook --notebook-dir={NOTEBOOK_DIR} --port={PORT} --no-browser", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
|
||||
max_wait_seconds = 3
|
||||
delta_t_seconds = 0.1
|
||||
|
||||
current_wait_seconds = 0
|
||||
|
||||
token = ""
|
||||
while True:
|
||||
token = isNotebookRunning()
|
||||
if token:
|
||||
break
|
||||
|
||||
time.sleep(delta_t_seconds)
|
||||
current_wait_seconds += delta_t_seconds
|
||||
if current_wait_seconds >= max_wait_seconds:
|
||||
raise Exception(f"Maximum wait time of {max_wait_seconds} exceeded!")
|
||||
|
||||
subprocess.call(f"cp {NOTEBOOK_DIR}calculator_template.ipynb {NOTEBOOK_DIR}calculator.ipynb", shell=True, stdout=None)
|
||||
subprocess.call(f"electron 'http://localhost:{PORT}/notebooks/calculator.ipynb?token={token}'", shell=True, stdout=None)
|
||||
|
||||
finally:
|
||||
# TODO: not reliably working
|
||||
if not isOtherProcessRunning():
|
||||
try:
|
||||
subprocess.run(f"jupyter notebook stop {PORT}", shell=True)
|
||||
except Exception:
|
||||
pass
|
4
i3/.config/i3/scripts/rofi_calc
Executable file
4
i3/.config/i3/scripts/rofi_calc
Executable file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
LC_NUMERIC=en_US.utf8
|
||||
rofi -show calc -modi calc -no-show-match -no-sort -terse -calc-command "echo -n '{result}' | xclip"
|
6
i3/.config/i3/scripts/setupZoom
Executable file
6
i3/.config/i3/scripts/setupZoom
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
flatpak run us.zoom.Zoom &
|
||||
|
||||
i3-msg "workspace --no-auto-back-and-forth 5; exec mousepad /home/julian/Nextcloud/studium/zoom.txt"
|
||||
i3-msg "workspace --no-auto-back-and-forth 5; append_layout ~/.config/i3/workspace-zoom.json"
|
104
i3/.config/i3/workspace-chat.json
Normal file
104
i3/.config/i3/workspace-chat.json
Normal file
@ -0,0 +1,104 @@
|
||||
// vim:ts=4:sw=4:et
|
||||
{
|
||||
"border": "none",
|
||||
"current_border_width": 2,
|
||||
"floating": "auto_off",
|
||||
"geometry": {
|
||||
"height": 1026,
|
||||
"width": 560,
|
||||
"x": 1680,
|
||||
"y": 24
|
||||
},
|
||||
"marks": [],
|
||||
"name": "Telegram",
|
||||
"percent": 0.5,
|
||||
"swallows": [
|
||||
{
|
||||
"class": "^TelegramDesktop$",
|
||||
"instance": "^telegram\\-desktop$"
|
||||
// "title": "^Telegram\\ \\(18\\)$"
|
||||
}
|
||||
],
|
||||
"type": "con"
|
||||
}
|
||||
|
||||
{
|
||||
// splitv split container with 2 children
|
||||
"border": "normal",
|
||||
"floating": "auto_off",
|
||||
"layout": "splitv",
|
||||
"marks": [],
|
||||
"percent": 0.5,
|
||||
"type": "con",
|
||||
"nodes": [
|
||||
{
|
||||
// splith split container with 1 children
|
||||
"border": "normal",
|
||||
"floating": "auto_off",
|
||||
"layout": "splith",
|
||||
"marks": [],
|
||||
"percent": 0.5,
|
||||
"type": "con",
|
||||
"nodes": [
|
||||
{
|
||||
// splith split container with 1 children
|
||||
"border": "normal",
|
||||
"floating": "auto_off",
|
||||
"layout": "splith",
|
||||
"marks": [],
|
||||
"percent": 1,
|
||||
"type": "con",
|
||||
"nodes": [
|
||||
{
|
||||
"border": "normal",
|
||||
"current_border_width": 2,
|
||||
"floating": "auto_off",
|
||||
"geometry": {
|
||||
"height": 1002,
|
||||
"width": 800,
|
||||
"x": 2242,
|
||||
"y": 46
|
||||
},
|
||||
"marks": [],
|
||||
"name": "Element",
|
||||
"percent": 1,
|
||||
"swallows": [
|
||||
{
|
||||
"class": "^Element$",
|
||||
"instance": "^element$"
|
||||
// "title": "^Element\\ \\|\\ Skipper$",
|
||||
// "window_role": "^browser\\-window$"
|
||||
}
|
||||
],
|
||||
"type": "con"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"border": "normal",
|
||||
"current_border_width": 2,
|
||||
"floating": "auto_off",
|
||||
"geometry": {
|
||||
"height": 715,
|
||||
"width": 1366,
|
||||
"x": 183,
|
||||
"y": 396
|
||||
},
|
||||
"marks": [],
|
||||
"name": "Rocket Chat",
|
||||
"percent": 0.5,
|
||||
"swallows": [
|
||||
{
|
||||
"class": "^Rocket\\.Chat$",
|
||||
"instance": "^rocket\\.chat$"
|
||||
// "title": "^Chat\\ der\\ Uni\\ Würzburg$",
|
||||
// "window_role": "^browser\\-window$"
|
||||
}
|
||||
],
|
||||
"type": "con"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
86
i3/.config/i3/workspace-zoom.json
Normal file
86
i3/.config/i3/workspace-zoom.json
Normal file
@ -0,0 +1,86 @@
|
||||
// vim:ts=4:sw=4:et
|
||||
{
|
||||
"border": "normal",
|
||||
"current_border_width": 2,
|
||||
"floating": "auto_off",
|
||||
"geometry": {
|
||||
"height": 800,
|
||||
"width": 1188,
|
||||
"x": 246,
|
||||
"y": 125
|
||||
},
|
||||
"name": "Zoom Meeting",
|
||||
"percent": 0.8,
|
||||
"swallows": [
|
||||
{
|
||||
"class": "^zoom$",
|
||||
"instance": "^zoom$",
|
||||
"title": "^Zoom\\ Meeting$"
|
||||
}
|
||||
],
|
||||
"type": "con"
|
||||
}
|
||||
|
||||
{
|
||||
// splitv split container with 2 children
|
||||
"border": "normal",
|
||||
"floating": "auto_off",
|
||||
"layout": "splitv",
|
||||
"percent": 0.2,
|
||||
"type": "con",
|
||||
"nodes": [
|
||||
{
|
||||
// splith split container with 1 children
|
||||
"border": "normal",
|
||||
"floating": "auto_off",
|
||||
"layout": "splith",
|
||||
"percent": 0.5,
|
||||
"type": "con",
|
||||
"nodes": [
|
||||
{
|
||||
"border": "normal",
|
||||
"current_border_width": 2,
|
||||
"floating": "auto_off",
|
||||
"geometry": {
|
||||
"height": 1002,
|
||||
"width": 220,
|
||||
"x": 1458,
|
||||
"y": 46
|
||||
},
|
||||
"name": "Participants",
|
||||
"percent": 1,
|
||||
"swallows": [
|
||||
{
|
||||
"class": "^zoom$",
|
||||
"instance": "^zoom$",
|
||||
"title": "^Participants"
|
||||
}
|
||||
],
|
||||
"type": "con"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"border": "normal",
|
||||
"current_border_width": 2,
|
||||
"floating": "user_off",
|
||||
"geometry": {
|
||||
"height": 350,
|
||||
"width": 355,
|
||||
"x": 662,
|
||||
"y": 350
|
||||
},
|
||||
"name": "Chat",
|
||||
"percent": 0.5,
|
||||
"swallows": [
|
||||
{
|
||||
"class": "^zoom$",
|
||||
"instance": "^zoom$",
|
||||
"title": "^Chat$"
|
||||
}
|
||||
],
|
||||
"type": "con"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
30
i3/.config/i3blocks/activity
Executable file
30
i3/.config/i3blocks/activity
Executable file
@ -0,0 +1,30 @@
|
||||
#!/bin/sh
|
||||
|
||||
NONE="None"
|
||||
|
||||
get_current_activity() {
|
||||
activity=$(hamster current)
|
||||
if [ "$activity" = "No activity" ]; then
|
||||
echo $NONE
|
||||
else
|
||||
IFS=' '
|
||||
read -ra ADDR <<< "$activity"
|
||||
echo "${ADDR[2]}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
case "$BLOCK_BUTTON" in
|
||||
1|2|3)
|
||||
current_activity=$(get_current_activity)
|
||||
if [ "$current_activity" = "$NONE" ]; then
|
||||
hamster start "Comu@Work#Flexibill App"
|
||||
else
|
||||
hamster stop
|
||||
fi
|
||||
esac
|
||||
|
||||
current_activity=$(get_current_activity)
|
||||
|
||||
echo "$LABEL $current_activity"
|
||||
echo "$LABEL $current_activity"
|
793
i3/.config/i3blocks/battery-plus
Executable file
793
i3/.config/i3blocks/battery-plus
Executable file
@ -0,0 +1,793 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# battery-plus
|
||||
#
|
||||
# An enhanced battery status indicator for i3blocks.
|
||||
#
|
||||
# Requires:
|
||||
# awk (POSIX compatible)
|
||||
# bc
|
||||
# upower
|
||||
#
|
||||
# Recommended:
|
||||
# fonts-font-awesome or fonts-hack
|
||||
#
|
||||
# Optional:
|
||||
# notify-send or dunstify -- for notifications
|
||||
# zenity -- for dialogs
|
||||
#
|
||||
# Copyright (c) 2018 Beau Hastings. All rights reserved.
|
||||
# License: GNU General Public License v2
|
||||
#
|
||||
# Author: Beau Hastings <beau@saweet.net>
|
||||
# URL: https://github.com/hastinbe/i3blocks-battery-plus
|
||||
|
||||
_PERCENT="%"
|
||||
|
||||
# Hide the battery status if fully-charged,
|
||||
_HIDE_IF_CHARGED=${_HIDE_IF_CHARGED:-false}
|
||||
|
||||
# Color the battery symbol using gradient.
|
||||
_USE_BATT_GRADIENT=${_USE_BATT_GRADIENT:-false}
|
||||
|
||||
# Only show symbols.
|
||||
_SYMBOLS_ONLY=${_SYMBOLS_ONLY:-false}
|
||||
|
||||
# Hide the battery percentage
|
||||
_HIDE_PERCENTAGE=${_HIDE_PERCENTAGE:-false}
|
||||
|
||||
# Hide the battery time remaining
|
||||
_HIDE_TIME_REMAINING=${_HIDE_TIME_REMAINING:-true}
|
||||
|
||||
# Hide the time to charge the battery to full
|
||||
_HIDE_TIME_TO_FULL=${_HIDE_TIME_TO_FULL:-true}
|
||||
|
||||
# Show the direction of change for the battery's percentage
|
||||
_SHOW_CHARGE_DIRECTION=${_SHOW_CHARGE_DIRECTION:-true}
|
||||
|
||||
# Show an alert symbol when the battery capacity drops to the given percent (0=disable).
|
||||
_CAPACITY_ALERT=${_CAPACITY_ALERT:-75}
|
||||
|
||||
# Action to take when the battery level reaches critical.
|
||||
_CRITICAL_ACTION=${_CRITICAL_ACTION:-"notify"}
|
||||
|
||||
# Action to take when the battery level reaches low.
|
||||
_LOW_ACTION=${_LOW_ACTION:-"notify"}
|
||||
|
||||
# Method to use for notifications
|
||||
_NOTIFY_PROGRAM=${_NOTIFY_PROGRAM:-"notify-send"}
|
||||
|
||||
# The duration, in milliseconds, for the notification to appear on screen.
|
||||
_NOTIFY_EXPIRES="1500"
|
||||
|
||||
# Minimum time in seconds between notifications to prevent spam.
|
||||
_NOTIFY_THROTTLE=${_NOTIFY_THROTTLE:-120}
|
||||
|
||||
# Colors
|
||||
_COLOR_FULLY_CHARGED=${_COLOR_FULLY_CHARGED:-""}
|
||||
_COLOR_CHARGING=${_COLOR_CHARGING:-"yellow"}
|
||||
_COLOR_DISCHARGING=${_COLOR_CHARGING:-"yellow"}
|
||||
_COLOR_PENDING=${_COLOR_PENDING:-"blue"}
|
||||
_COLOR_ERROR=${_COLOR_ERROR:-"red"}
|
||||
_COLOR_BATTERY=${_COLOR_BATTERY:-"white"}
|
||||
_COLOR_ALERT=${_COLOR_ALERT:-"orange"}
|
||||
_COLOR_DIRECTIONAL_UP=${_COLOR_DIRECTIONAL_UP:-"green"}
|
||||
_COLOR_DIRECTIONAL_DOWN=${_COLOR_DIRECTIONAL_DOWN:-"red"}
|
||||
_COLOR_GRADIENT_START=${_COLOR_GRADIENT_START:-"#FF0000"}
|
||||
_COLOR_GRADIENT_END=${_COLOR_GRADIENT_END:-"#00FF00"}
|
||||
|
||||
# Symbols
|
||||
_SYMBOL_FULLY_CHARGED=${_SYMBOL_FULLY_CHARGED:-""}
|
||||
_SYMBOL_CHARGING=${_SYMBOL_CHARGING:-""}
|
||||
_SYMBOL_DISCHARGING=${_SYMBOL_DISCHARGING:-""}
|
||||
_SYMBOL_UNKNOWN=${_SYMBOL_UNKNOWN:-""}
|
||||
_SYMBOL_PENDING=${_SYMBOL_PENDING:-""}
|
||||
_SYMBOL_ERROR=${_SYMBOL_ERROR:-""}
|
||||
_SYMBOL_ALERT=${_SYMBOL_ALERT:-""}
|
||||
_SYMBOL_BATT_100=${_SYMBOL_BATT_100:-""}
|
||||
_SYMBOL_BATT_75=${_SYMBOL_BATT_75:-""}
|
||||
_SYMBOL_BATT_50=${_SYMBOL_BATT_50:-""}
|
||||
_SYMBOL_BATT_25=${_SYMBOL_BATT_25:-""}
|
||||
_SYMBOL_BATT_0=${_SYMBOL_BATT_0:-""}
|
||||
_SYMBOL_DIRECTION_UP=${_SYMBOL_DIRECTION_UP:-"↑"}
|
||||
_SYMBOL_DIRECTION_DOWN=${_SYMBOL_DIRECTION_DOWN:-"↓"}
|
||||
|
||||
# Get a the system's temporary files directory.
|
||||
#
|
||||
# Notes:
|
||||
# Executes a dry-run so we don't create a file.
|
||||
# Linux doesn't require the template option, but MacOSX does.
|
||||
#
|
||||
# Returns:
|
||||
# The path to the temporary directory.
|
||||
get_temp_dir() {
|
||||
echo $(dirname $(mktemp -ut "battery-plus.XXX"))
|
||||
}
|
||||
|
||||
# Output text wrapped in a span element
|
||||
#
|
||||
# Options:
|
||||
# -c <color> To specify a text color
|
||||
#
|
||||
# Arguments:
|
||||
# $1 or $3 - String to encapsulate within a span
|
||||
span() {
|
||||
local -A attribs
|
||||
local text="$*"
|
||||
|
||||
if [ -n "$FONT" ]; then attribs[font]="$FONT"; fi
|
||||
|
||||
if [ "$1" = "-c" ]; then
|
||||
attribs[color]="$2"
|
||||
text="${*:3}"
|
||||
fi
|
||||
|
||||
echo "<span$(build_attribs attribs)>$text</span>"
|
||||
}
|
||||
|
||||
# Builds html element attributes
|
||||
#
|
||||
# Arguments:
|
||||
# $1 - An associative array of attribute-value pairs
|
||||
build_attribs() {
|
||||
local -n array=$1
|
||||
for k in "${!array[@]}"; do
|
||||
echo -n " $k='${array[$k]}'"
|
||||
done
|
||||
echo
|
||||
}
|
||||
|
||||
# Interpolate between 2 RGB colors
|
||||
#
|
||||
# Arguments:
|
||||
# $1 - Color to interpolate from, as a hex triplet prefixed with #
|
||||
# $2 - Color to interpolate to, as a hex triplet prefixed with #
|
||||
# $3 - Amount of steps needed to get from start to end color
|
||||
interpolate_rgb() {
|
||||
local -i steps=$3
|
||||
local -a colors
|
||||
local color1=$1
|
||||
local color2=$2
|
||||
local reversed=false
|
||||
|
||||
if (( 0x${color1:1:5} > 0x${color2:1:5} )); then
|
||||
color1=$2
|
||||
color2=$1
|
||||
reversed=true
|
||||
fi
|
||||
|
||||
printf -v startR "%d" 0x${color1:1:2}
|
||||
printf -v startG "%d" 0x${color1:3:2}
|
||||
printf -v startB "%d" 0x${color1:5:2}
|
||||
printf -v endR "%d" 0x${color2:1:2}
|
||||
printf -v endG "%d" 0x${color2:3:2}
|
||||
printf -v endB "%d" 0x${color2:5:2}
|
||||
|
||||
stepR=$(( ($endR - $startR) / $steps ))
|
||||
stepG=$(( ($endG - $startG) / $steps ))
|
||||
stepB=$(( ($endB - $startB) / $steps ))
|
||||
|
||||
for i in $(seq 0 $steps); do
|
||||
local -i R=$(( $startR + ($stepR * $i) ))
|
||||
local -i G=$(( $startG + ($stepG * $i) ))
|
||||
local -i B=$(( $startB + ($stepB * $i) ))
|
||||
|
||||
colors+=( "$(printf "#%02x%02x%02x\n" $R $G $B)" )
|
||||
done
|
||||
colors+=( "$(printf "#%02x%02x%02x\n" $endR $endG $endB)" )
|
||||
|
||||
if $reversed; then
|
||||
reverse colors colors_reversed
|
||||
echo "${colors_reversed[@]}"
|
||||
else
|
||||
echo "${colors[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Reverse an array
|
||||
#
|
||||
# Arguments:
|
||||
# $1 - Array to reverse
|
||||
# $2 - Destination array
|
||||
reverse() {
|
||||
local -n arr="$1" rev="$2"
|
||||
for i in "${arr[@]}"
|
||||
do
|
||||
rev=("$i" "${rev[@]}")
|
||||
done
|
||||
}
|
||||
|
||||
min() {
|
||||
echo "if ($1 < $2) $1 else $2" | bc
|
||||
}
|
||||
|
||||
max() {
|
||||
echo "if ($1 > $2) $1 else $2" | bc
|
||||
}
|
||||
|
||||
clamp() {
|
||||
echo $(min $(max $1 $2) $3)
|
||||
}
|
||||
|
||||
# Retrieve an item from the provided lookup table based on the percentage of a number
|
||||
#
|
||||
# Arguments:
|
||||
# $1 - A number
|
||||
# $2 - Number to get a percentage of
|
||||
# $3 - An array of potential values
|
||||
plookup() {
|
||||
if [ -z "$2" -o -z "$3" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
local table=( ${@:3} )
|
||||
local number2=${2%.*}
|
||||
local number1=$(min ${1%.*} $number2)
|
||||
local percent_max=$(( $number1 * $number2 / 100 ))
|
||||
local index=$(( $percent_max * ${#table[@]} / 100 ))
|
||||
|
||||
index=$(clamp $index 0 $(( ${#table[@]} - 1 )) )
|
||||
|
||||
echo ${table[$index]}
|
||||
}
|
||||
|
||||
# Get battery status.
|
||||
#
|
||||
# Returns:
|
||||
# The battery's status or state.
|
||||
get_battery_status() {
|
||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "state:" {print $2}'
|
||||
}
|
||||
|
||||
# Get battery warning level.
|
||||
#
|
||||
# Returns:
|
||||
# The battery's warning level.
|
||||
get_battery_warning_level() {
|
||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "warning-level:" {print $2}'
|
||||
}
|
||||
|
||||
# Get battery percentage.
|
||||
#
|
||||
# Returns:
|
||||
# The battery's percentage, without the %.
|
||||
get_battery_percent() {
|
||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "percentage:" { gsub("%","",$2); print $2}'
|
||||
}
|
||||
|
||||
# Get battery capacity.
|
||||
#
|
||||
# Returns:
|
||||
# The battery's capcity, without the %.
|
||||
get_battery_capacity() {
|
||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "capacity:" { gsub("%","",$2); print $2}'
|
||||
}
|
||||
|
||||
# Get battery time left.
|
||||
#
|
||||
# Returns:
|
||||
# The battery's time left.
|
||||
get_time_to_empty() {
|
||||
echo "$__UPOWER_INFO" | awk -W posix -F':' '/time to empty:/{print $2}' | xargs
|
||||
}
|
||||
|
||||
# Get the time remaining until the battery is fully charged.
|
||||
#
|
||||
# Returns:
|
||||
# The time remaining until battery is fully charged.
|
||||
get_time_to_full() {
|
||||
echo "$__UPOWER_INFO" | awk -W posix -F':' '/time to full:/{print $2}' | xargs
|
||||
}
|
||||
|
||||
# Get symbol for the given battery percentage.
|
||||
#
|
||||
# Arguments:
|
||||
# $percent (int) Battery percentage.
|
||||
#
|
||||
# Returns:
|
||||
# The battery symbol.
|
||||
get_battery_charge_symbol() {
|
||||
local percent="$1"
|
||||
local symbol
|
||||
|
||||
if [ "$battery_percentage" -ge 90 ]; then symbol="$_SYMBOL_BATT_100"
|
||||
elif [ "$battery_percentage" -ge 70 ]; then symbol="$_SYMBOL_BATT_75"
|
||||
elif [ "$battery_percentage" -ge 40 ]; then symbol="$_SYMBOL_BATT_50"
|
||||
elif [ "$battery_percentage" -ge 20 ]; then symbol="$_SYMBOL_BATT_25"
|
||||
else symbol="$_SYMBOL_BATT_0"
|
||||
fi
|
||||
|
||||
echo "$symbol"
|
||||
}
|
||||
|
||||
# Get battery status symbol.
|
||||
#
|
||||
# Returns:
|
||||
# An symbol name, following the Symbol Naming Specification
|
||||
get_battery_status_symbol() {
|
||||
echo "$__UPOWER_INFO" | awk -W posix '$1 == "symbol-name:" {print $2}'
|
||||
}
|
||||
|
||||
# Get color for the given battery percentage.
|
||||
#
|
||||
# Arguments:
|
||||
# $percent (int) Battery percentage.
|
||||
#
|
||||
# Returns:
|
||||
# The color to use for the given battery percentage.
|
||||
get_percentage_color() {
|
||||
local colors=( $(interpolate_rgb "$_COLOR_GRADIENT_START" "$_COLOR_GRADIENT_END" 8) )
|
||||
echo $(plookup $1 100 ${colors[@]})
|
||||
}
|
||||
|
||||
# Determines whether or not we can send a notification.
|
||||
#
|
||||
# Returns:
|
||||
# 0 on false, 1 on true.
|
||||
can_notify() {
|
||||
local -i now=$(date +"%s")
|
||||
local -i last=$(get_last_notify_time)
|
||||
|
||||
if [ -z "$last" ]; then return 0; fi
|
||||
|
||||
local -i diff=$(($now - $last))
|
||||
|
||||
[ $diff -gt $_NOTIFY_THROTTLE ]
|
||||
}
|
||||
|
||||
# Get the last time we sent a notification.
|
||||
#
|
||||
# Returns:
|
||||
# Time in seconds since the Epoch.
|
||||
get_last_notify_time() {
|
||||
if [ -f "$TMP_NOTIFY" ]; then
|
||||
echo $(stat -c '%Y' "$TMP_NOTIFY")
|
||||
fi
|
||||
}
|
||||
|
||||
# Save the last time we sent a notification.
|
||||
save_last_notify_time() {
|
||||
touch -m "$TMP_NOTIFY"
|
||||
}
|
||||
|
||||
# Display the charging indicator.
|
||||
#
|
||||
# Returns:
|
||||
# The charging indicator.
|
||||
display_batt_charging() {
|
||||
if [ -n "$_SYMBOL_CHARGING" ]; then
|
||||
echo -n "$(span -c "${_COLOR_CHARGING}" "$_SYMBOL_CHARGING") "
|
||||
fi
|
||||
|
||||
echo "$colored_battery_symbol"
|
||||
}
|
||||
|
||||
# Display the discharging indicator.
|
||||
#
|
||||
# Returns:
|
||||
# The discharging indicator.
|
||||
display_batt_discharging() {
|
||||
if [ -n "$_SYMBOL_DISCHARGING" ]; then
|
||||
echo -n "$(span -c "${_COLOR_DISCHARGING}" "$_SYMBOL_DISCHARGING") "
|
||||
fi
|
||||
|
||||
echo "$battery_charge_symbol"
|
||||
}
|
||||
|
||||
# Display the pending charge indicator.
|
||||
#
|
||||
# Returns:
|
||||
# The pending charge indicator.
|
||||
display_batt_pending_charge() {
|
||||
if [ -n "$_SYMBOL_PENDING" ]; then
|
||||
echo -n "$(span -c "${_COLOR_PENDING}" "$_SYMBOL_PENDING") "
|
||||
fi
|
||||
|
||||
if [ -n "$_SYMBOL_CHARGING" ]; then
|
||||
echo -n "$(span -c "${_COLOR_CHARGING}" "$_SYMBOL_CHARGING") "
|
||||
fi
|
||||
|
||||
echo "${battery_charge_symbol}"
|
||||
}
|
||||
|
||||
# Display the pending discharge indicator.
|
||||
#
|
||||
# Returns:
|
||||
# The pending discharge indicator.
|
||||
display_batt_pending_discharge() {
|
||||
if [ -n "$_SYMBOL_PENDING" ]; then
|
||||
echo -n "$(span -c "${_COLOR_PENDING}" "$_SYMBOL_PENDING") "
|
||||
fi
|
||||
|
||||
if [ -n "$_SYMBOL_DISCHARGING" ]; then
|
||||
echo -n "$(span -c "${_COLOR_DISCHARGING}" "$_SYMBOL_DISCHARGING") "
|
||||
fi
|
||||
|
||||
echo "$colored_battery_symbol"
|
||||
}
|
||||
|
||||
# Display the empty battery indicator.
|
||||
#
|
||||
# Returns:
|
||||
# The empty battery indicator.
|
||||
display_batt_empty() {
|
||||
echo "$battery_charge_symbol"
|
||||
}
|
||||
|
||||
# Display the fully charged indicator.
|
||||
#
|
||||
# Returns:
|
||||
# The fully-charged indicator.
|
||||
display_batt_fully_charged() {
|
||||
if [ -n "$_SYMBOL_FULLY_CHARGED" ]; then
|
||||
echo -n "$(span -c "${_COLOR_FULLY_CHARGED}" "$_SYMBOL_FULLY_CHARGED") "
|
||||
fi
|
||||
|
||||
echo "$battery_charge_symbol"
|
||||
}
|
||||
|
||||
# Display the unknown battery indicator.
|
||||
#
|
||||
# Returns:
|
||||
# The unknonw battery indicator.
|
||||
display_batt_unknown() {
|
||||
if [ -n "$_SYMBOL_UNKNOWN" ]; then
|
||||
echo -n "$(span "$_SYMBOL_UNKNOWN") "
|
||||
fi
|
||||
|
||||
echo "$(get_battery_charge_symbol 0)"
|
||||
}
|
||||
|
||||
# Display the battery error indicator.
|
||||
#
|
||||
# Returns:
|
||||
# The battery error indicator.
|
||||
display_batt_error() {
|
||||
echo "$(span -c "${_COLOR_ERROR}" "$_SYMBOL_ERROR" "$_SYMBOL_BATT_0")"
|
||||
}
|
||||
|
||||
# Display the battery percentage.
|
||||
#
|
||||
# Returns:
|
||||
# The battery percentage, or nothing if disabled.
|
||||
display_percentage() {
|
||||
if ! [ $_SYMBOLS_ONLY = true -o $_HIDE_PERCENTAGE = true ]; then
|
||||
echo -n " $(span -c "${percentage_color}" "${battery_percentage:---}${_PERCENT}")"
|
||||
|
||||
if [ "$status" = "charging" ] && $_SHOW_CHARGE_DIRECTION; then
|
||||
echo -n "$(span -c "${_COLOR_DIRECTIONAL_UP}" "${_SYMBOL_DIRECTION_UP}")"
|
||||
elif [ "$status" = "discharging" ] && $_SHOW_CHARGE_DIRECTION; then
|
||||
echo -n "$(span -c "${_COLOR_DIRECTIONAL_DOWN}" "${_SYMBOL_DIRECTION_DOWN}")"
|
||||
fi
|
||||
|
||||
echo
|
||||
fi
|
||||
}
|
||||
|
||||
# Display the battery time remaining.
|
||||
#
|
||||
# Arguments:
|
||||
# $force (bool) Force display.
|
||||
#
|
||||
# Returns:
|
||||
# The time remaining, or nothing if disabled.
|
||||
display_time_remaining() {
|
||||
local force=${1:-false}
|
||||
|
||||
if [ $force = true ] || ! [ $_SYMBOLS_ONLY = true -o $_HIDE_TIME_REMAINING = true ]; then
|
||||
time_to_empty=$(get_time_to_empty "$battery_info")
|
||||
if [ -n "$time_to_empty" ]; then
|
||||
echo "$time_to_empty"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Display the battery time to fully charge.
|
||||
#
|
||||
# Arguments:
|
||||
# $force (bool) Force display.
|
||||
#
|
||||
# Returns:
|
||||
# The time to fully charge, or nothing if disabled.
|
||||
display_time_to_full() {
|
||||
local force=${1:-false}
|
||||
|
||||
if [ $force = true ] || ! [ $_SYMBOLS_ONLY = true -o $_HIDE_TIME_TO_FULL = true ]; then
|
||||
time_to_full=$(get_time_to_full "$battery_info")
|
||||
if [ -n "$time_to_full" ]; then
|
||||
echo "$time_to_full"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Displays an array of segments.
|
||||
#
|
||||
# Arguments:
|
||||
# $segments (array) The an array of segments.
|
||||
#
|
||||
# Returns:
|
||||
# Each segment after another, followed by a newline.
|
||||
display_segments() {
|
||||
local -a segments="$@"
|
||||
|
||||
for segment in "${segments[@]}"; do
|
||||
if [ -n "$segment" ]; then
|
||||
echo -n "$segment"
|
||||
fi
|
||||
done
|
||||
|
||||
echo
|
||||
}
|
||||
|
||||
# Colors text using either the first or second color
|
||||
#
|
||||
# Arguments:
|
||||
# $1 - Text
|
||||
# $2 - Color to use if toggle is false
|
||||
# $3 - Color to use if toggle is true
|
||||
# $4 - A boolean used to toggle between colors
|
||||
#
|
||||
# Returns:
|
||||
# The colored text
|
||||
multicolor() {
|
||||
local color="$2"
|
||||
local toggle=$4
|
||||
|
||||
if $toggle && [ -n "$3" ]; then
|
||||
color="$3"
|
||||
fi
|
||||
|
||||
if [ -n "$color" ]; then
|
||||
echo "$(span -c "$color" "$1")"
|
||||
else
|
||||
echo "$(span "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Display a notification.
|
||||
#
|
||||
# Arguments:
|
||||
# $text (string) The notification text.
|
||||
# $symbol (string) Name of an symbol.
|
||||
# $type (string) The type of notification.
|
||||
# $force (string) Force the notification, ignoring any throttle.
|
||||
# $rest (string) Any additional options to pass to the command.
|
||||
notify() {
|
||||
local text="$1"
|
||||
local symbol="$2"
|
||||
local type="$3"
|
||||
local force="$4"
|
||||
local rest="${@:5}"
|
||||
local command
|
||||
|
||||
if [ -z "$text" ] || ! $force && ! $(can_notify); then return; fi
|
||||
|
||||
if [ "$_NOTIFY_PROGRAM" = "dunstify" ]; then
|
||||
command="dunstify -r 1001"
|
||||
elif [ "$_NOTIFY_PROGRAM" = "notify-send" ]; then
|
||||
command="notify-send"
|
||||
fi
|
||||
|
||||
if [ -n "$_NOTIFY_EXPIRES" ]; then command="$command -t $_NOTIFY_EXPIRES"; fi
|
||||
if [ -n "$symbol" ]; then command="$command -i $symbol"; fi
|
||||
if [ -n "$type" ]; then command="$command -u $type"; fi
|
||||
|
||||
command="$command $rest \"$text\""
|
||||
if eval $command; then
|
||||
save_last_notify_time
|
||||
fi
|
||||
}
|
||||
|
||||
# Display a dialog.
|
||||
#
|
||||
# Arguments:
|
||||
# $text (string) The dialog text.
|
||||
# $symbol (string) Name of an symbol.
|
||||
# $type (string) The type of dialog.
|
||||
# $rest (string) Any additional options to pass to the command.
|
||||
dialog() {
|
||||
local text="$1"
|
||||
local symbol="$2"
|
||||
local type="$3"
|
||||
local rest="${@:4}"
|
||||
|
||||
if [ -z "$text" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
command="zenity"
|
||||
|
||||
if [ -n "$symbol" ]; then command="$command --symbol-name=\"$symbol\""; fi
|
||||
if [ -n "$type" ]; then command="$command --${type}"; fi
|
||||
|
||||
command="$command --text=\"$text\" $rest"
|
||||
eval $command
|
||||
}
|
||||
|
||||
# Display program usage.
|
||||
usage() {
|
||||
echo -e "Usage: $0 [options]
|
||||
Display the battery status using upower for i3blocks.\n
|
||||
Options:
|
||||
-a <none|notify>\taction to take when battery is low
|
||||
-A <color>\t\tcolor of the alert symbol
|
||||
-B <color>\t\tcolor of the battery symbol
|
||||
-c <capacity>\t\tset battery capacity alert percentage (0=disable)
|
||||
-C <color>\t\tcolor of the charging symbol
|
||||
-d\t\t\tshow the direction of change for the battery's percentage
|
||||
-D <color>\t\tcolor of the discharging symbol
|
||||
-e <millseconds>\texpiration time of notifications (Ubuntu's Notify OSD and GNOME Shell both ignore this parameter.)
|
||||
-E <color>\t\tcolor of the battery error symbol
|
||||
-f <font>\t\tfont for text and symbols
|
||||
-F <color>\t\tcolor of the fully-charged symbol
|
||||
-G\t\t\tcolor the battery symbol according to battery percentage
|
||||
-h\t\t\tdisplay this help and exit
|
||||
-H\t\t\tsuppress displaying if battery is fully-charged
|
||||
-i <color>\t\tcolor gradient start color
|
||||
-I\t\t\tonly display symbols
|
||||
-j <color>\t\tcolor gradient end color
|
||||
-J <symbol>\t\tsymbol for a battery 100% charged
|
||||
-k\t\t\thide the battery percentage
|
||||
-K <symbol>\t\tsymbol for a battery 75% charged
|
||||
-l <none|notify>\taction to take when the battery level reaches critical
|
||||
-L <symbol>\t\tsymbol to indicate there is an alert
|
||||
-M <symbol>\t\tsymbol for a battery 50% charged
|
||||
-n <program>\t\ta libnotify compatible notification program
|
||||
-N <color>\t\tcolor of the battery charge decreasing indicator
|
||||
-O <symbol>\t\tsymbol for a battery with no/low charge
|
||||
-p <symbol>\t\tsymbol to use for the percent sign
|
||||
-P <color>\t\tcolor of the pending charge symbol
|
||||
-Q <symbol>\t\tsymbol for a battery 25% charged
|
||||
-r\t\t\thide the battery time remaining
|
||||
-R <symbol>\t\tsymbol to indicate the battery state is undefined
|
||||
-S <symbol>\t\tsymbol to indicate battery is fully charged
|
||||
-t <seconds>\t\tminimum time in seconds between notifications to prevent spam
|
||||
-T <symbol>\t\tsymbol to indicate the battery is charging
|
||||
-u\t\t\thide the time to charge the battery to full
|
||||
-U <color>\t\tcolor of the battery charge increasing indicator
|
||||
-V <symbol>\t\tsymbol to indicate the battery state is unknown
|
||||
-W <symbol>\t\tsymbol to indicate battery charge is increasing
|
||||
-X <symbol>\t\tsymbol to indicate the battery state is pending
|
||||
-Y <symbol>\t\tsymbol to indicate the battery is discharging
|
||||
-Z <symbol>\t\tsymbol to indicate battery charge is decreasing
|
||||
" 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
|
||||
declare -a long_segments
|
||||
declare -a short_segments
|
||||
|
||||
__UPOWER_INFO=$(upower --show-info "/org/freedesktop/UPower/devices/battery_${BLOCK_INSTANCE:-BAT0}")
|
||||
TMP_NOTIFY="$(get_temp_dir)/battery-plus.last_notify"
|
||||
|
||||
while getopts "a:A:B:c:C:dD:e:E:F:GhHi:Ij:J:kK:l:L:M:n:N:O:p:P:Q:rR:S:t:T:uU:V:W:X:Y:Z:" o; do
|
||||
case "$o" in
|
||||
a) _LOW_ACTION="${OPTARG}" ;;
|
||||
A) _COLOR_ALERT="${OPTARG}" ;;
|
||||
B) _COLOR_BATTERY="${OPTARG}" ;;
|
||||
c) _CAPACITY_ALERT="${OPTARG}" ;;
|
||||
C) _COLOR_CHARGING="${OPTARG}" ;;
|
||||
d) _SHOW_CHARGE_DIRECTION=true ;;
|
||||
D) _COLOR_DISCHARGING="${OPTARG}" ;;
|
||||
e) _NOTIFY_EXPIRES="${OPTARG}" ;;
|
||||
E) _COLOR_ERROR="${OPTARG}" ;;
|
||||
F) _COLOR_FULLY_CHARGED="${OPTARG}" ;;
|
||||
G) _USE_BATT_GRADIENT=true ;;
|
||||
h | *) usage ;;
|
||||
H) _HIDE_IF_CHARGED=true ;;
|
||||
i) _COLOR_GRADIENT_START="${OPTARG}" ;;
|
||||
I) _SYMBOLS_ONLY=true ;;
|
||||
j) _COLOR_GRADIENT_END="${OPTARG}" ;;
|
||||
J) _SYMBOL_BATT_100="${OPTARG}" ;;
|
||||
k) _HIDE_PERCENTAGE=true ;;
|
||||
K) _SYMBOL_BATT_75="${OPTARG}" ;;
|
||||
l) _CRITICAL_ACTION="${OPTARG}" ;;
|
||||
L) _SYMBOL_ALERT="${OPTARG}" ;;
|
||||
M) _SYMBOL_BATT_50="${OPTARG}" ;;
|
||||
n) _NOTIFY_PROGRAM="${OPTARG}" ;;
|
||||
N) _COLOR_DIRECTIONAL_DOWN="${OPTARG}" ;;
|
||||
O) _SYMBOL_BATT_0="${OPTARG}" ;;
|
||||
p) _PERCENT="${OPTARG}" ;;
|
||||
P) _COLOR_PENDING="${OPTARG}" ;;
|
||||
Q) _SYMBOL_BATT_25="${OPTARG}" ;;
|
||||
r) _HIDE_TIME_REMAINING=true ;;
|
||||
R) _SYMBOL_ERROR="${OPTARG}" ;;
|
||||
S) _SYMBOL_FULLY_CHARGED="${OPTARG}" ;;
|
||||
t) _NOTIFY_THROTTLE="${OPTARG}" ;;
|
||||
T) _SYMBOL_CHARGING="${OPTARG}" ;;
|
||||
u) _HIDE_TIME_TO_FULL=true ;;
|
||||
U) _COLOR_DIRECTIONAL_UP="${OPTARG}" ;;
|
||||
V) _SYMBOL_UNKNOWN="${OPTARG}" ;;
|
||||
W) _SYMBOL_DIRECTION_UP="${OPTARG}" ;;
|
||||
X) _SYMBOL_PENDING="${OPTARG}" ;;
|
||||
Y) _SYMBOL_DISCHARGING="${OPTARG}" ;;
|
||||
Z) _SYMBOL_DIRECTION_DOWN="${OPTARG}" ;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND-1)) # Shift off options and optional --
|
||||
|
||||
battery_percentage=$(get_battery_percent)
|
||||
percentage_color=$(get_percentage_color "$battery_percentage")
|
||||
capacity=$(get_battery_capacity)
|
||||
battery_charge_symbol=$(get_battery_charge_symbol "$battery_percentage")
|
||||
battery_status_symbol=$(get_battery_status_symbol)
|
||||
colored_battery_symbol=$(multicolor "$battery_charge_symbol" "$_COLOR_BATTERY" "$percentage_color" $_USE_BATT_GRADIENT)
|
||||
warning_level=$(get_battery_warning_level)
|
||||
|
||||
# Handle battery warning levels
|
||||
case "$warning_level" in
|
||||
critical)
|
||||
case "$_CRITICAL_ACTION" in
|
||||
notify) $(notify "$(span "Your battery level is ${warning_level}!")" "$battery_status_symbol" "critical" false "-c device") ;;
|
||||
esac
|
||||
;;
|
||||
low)
|
||||
case "$_LOW_ACTION" in
|
||||
notify) $(notify "$(span "Your battery level is ${warning_level}")" "$battery_status_symbol" "normal" false "-c device") ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
# Displayable alerts
|
||||
if [ "$_CAPACITY_ALERT" -gt 0 ] && [ "${capacity%.*}" -le $_CAPACITY_ALERT ]; then
|
||||
CAPACITY_TRIGGERED=true
|
||||
long_segments+=( "$(span -c "$_COLOR_ALERT" "$_SYMBOL_ALERT") " )
|
||||
fi
|
||||
|
||||
# Battery statuses
|
||||
status=$(get_battery_status)
|
||||
case "$status" in
|
||||
charging) long_segments+=( "$(display_batt_charging)" ) ;;
|
||||
discharging) long_segments+=( "$(display_batt_discharging)" ) ;;
|
||||
empty) long_segments+=( "$(display_batt_empty)" ) ;;
|
||||
fully-charged)
|
||||
if $_HIDE_IF_CHARGED; then
|
||||
exit 0
|
||||
fi
|
||||
long_segments+=( "$(display_batt_fully_charged)" )
|
||||
;;
|
||||
pending-charge) long_segments+=( "$(display_batt_pending_charge)" ) ;;
|
||||
pending-discharge) long_segments+=( "$(display_batt_pending_discharge)" ) ;;
|
||||
unknown) long_segments+=( "$(display_batt_unknown)" ) ;;
|
||||
*) long_segments+=( "$(display_batt_error)" ) ;;
|
||||
esac
|
||||
|
||||
# Since long_segments contains no text at this point, lets use it for the short_text
|
||||
short_segments=( "${long_segments[@]}" )
|
||||
|
||||
# Append all text segments
|
||||
long_segments+=( "$(display_percentage)" )
|
||||
if [ -n "$(display_time_remaining)" ]; then
|
||||
long_segments+=( "($(display_time_remaining))" )
|
||||
fi
|
||||
if [ -n "$(display_time_to_full)" ]; then
|
||||
long_segments+=( "($(display_time_to_full))" )
|
||||
fi
|
||||
|
||||
# Display the block long_text
|
||||
display_segments ${long_segments[@]}
|
||||
|
||||
# Display the block short_text
|
||||
display_segments ${short_segments[@]}
|
||||
|
||||
# Handle click events
|
||||
case $BLOCK_BUTTON in
|
||||
1)
|
||||
if [ -n "$CAPACITY_TRIGGERED" ]; then
|
||||
$(dialog "$(span "Your battery capacity has reduced to ${capacity%.*}${_PERCENT}!")" "battery-caution" "warning" "--no-wrap")
|
||||
else
|
||||
if [ "$status" = "discharging" ]; then
|
||||
$(notify "$(span "$(display_time_remaining true) remaining")" "alarm-symbolic" "normal" true "-c device")
|
||||
elif [ "$status" = "charging" ]; then
|
||||
$(notify "$(span "$(display_time_to_full true) until fully charged")" "alarm-symbolic" "normal" true "-c device")
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$battery_percentage" ] && [ "$battery_percentage" -le 5 ]; then
|
||||
exit 33
|
||||
fi
|
35
i3/.config/i3blocks/calendar
Executable file
35
i3/.config/i3blocks/calendar
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
DATEFMT=${DATEFMT:-"+%a %d.%m.%Y %H:%M:%S"}
|
||||
SHORTFMT=${SHORTFMT:-"+%H:%M:%S"}
|
||||
|
||||
OPTIND=1
|
||||
while getopts ":f:" opt; do
|
||||
case $opt in
|
||||
f) DATEFMT="$OPTARG" ;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
:)
|
||||
echo "Option -$OPTARG requires an argument." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
case "$BLOCK_BUTTON" in
|
||||
1|2|3)
|
||||
# Try to focus Thunderbird
|
||||
i3-msg -q [class="Thunderbird" instance="Mail"] focus
|
||||
if [ $? == 2 ]
|
||||
then
|
||||
# Open Thunderbird if it was not open
|
||||
i3-msg -q "exec thunderbird -mail -calendar"
|
||||
else
|
||||
# Open calendar
|
||||
xdotool key --clearmodifiers --delay 5 ctrl+shift+c
|
||||
fi
|
||||
esac
|
||||
echo "$LABEL$(date "$DATEFMT")"
|
||||
echo "$LABEL$(date "$SHORTFMT")"
|
35
i3/.config/i3blocks/calendar.test
Normal file
35
i3/.config/i3blocks/calendar.test
Normal file
@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
DATEFMT=${DATEFMT:-"+%a %d.%m.%Y %H:%M:%S"}
|
||||
SHORTFMT=${SHORTFMT:-"+%H:%M:%S"}
|
||||
|
||||
OPTIND=1
|
||||
while getopts ":f:" opt; do
|
||||
case $opt in
|
||||
f) DATEFMT="$OPTARG" ;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
:)
|
||||
echo "Option -$OPTARG requires an argument." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
case "$BLOCK_BUTTON" in
|
||||
1|2|3)
|
||||
# Try to focus Thunderbird
|
||||
i3-msg -q [class="Thunderbird" instance="Mail"] focus
|
||||
if [ $? == 2 ]
|
||||
then
|
||||
# Open Thunderbird if it was not open
|
||||
i3-msg -q "exec thunderbird -mail -calendar"
|
||||
else
|
||||
# Open calendar
|
||||
xdotool key --clearmodifiers --delay 5 ctrl+shift+c
|
||||
fi
|
||||
esac
|
||||
echo "$LABEL$(date "$DATEFMT")"
|
||||
echo "$LABEL$(date "$SHORTFMT")"
|
34
i3/.config/i3blocks/config
Normal file
34
i3/.config/i3blocks/config
Normal file
@ -0,0 +1,34 @@
|
||||
# i3blocks configuration file
|
||||
#
|
||||
# The i3blocks man page describes the usage of the binary,
|
||||
# and its website describes the configuration:
|
||||
#
|
||||
# https://vivien.github.io/i3blocks
|
||||
|
||||
# Sources:
|
||||
# https://github.com/hastinbe/i3blocks-battery-plus
|
||||
# https://github.com/zakariaGatter/i3blocks-gate
|
||||
|
||||
# Global properties
|
||||
separator=true
|
||||
separator_block_width=15
|
||||
|
||||
[activity]
|
||||
command=./activity
|
||||
interval=10
|
||||
LABEL=
|
||||
|
||||
[volume]
|
||||
command=./volume
|
||||
LABEL=
|
||||
interval=10
|
||||
signal=10
|
||||
|
||||
[battery]
|
||||
command=./i3b-gate 6
|
||||
interval=120
|
||||
|
||||
[calendar]
|
||||
command=./calendar
|
||||
interval=1
|
||||
|
462
i3/.config/i3blocks/i3b-gate
Executable file
462
i3/.config/i3blocks/i3b-gate
Executable file
@ -0,0 +1,462 @@
|
||||
#!/usr/bin/env bash
|
||||
# Zakaria Barkouk ( Zakaria.gatter@gmail.com)
|
||||
|
||||
#---------------------#
|
||||
# SHOW CPU INFO (TOP) #
|
||||
#---------------------#
|
||||
_BLOCK_1_(){ #{{{
|
||||
mpstat | awk '/all/{print "'"${1:-} "'"$4}'
|
||||
} #}}}
|
||||
|
||||
#--------------------#
|
||||
# SHOW ALL CPUS INFO #
|
||||
#--------------------#
|
||||
_BLOCK_2_(){ #{{{
|
||||
mpstat -P ALL | awk -v icon=${1:-} 'BEGIN{printf "%s ", icon} {
|
||||
if($3 ~ /^[0-9]/){
|
||||
printf "%s ", $4
|
||||
}
|
||||
}'
|
||||
} #}}}
|
||||
|
||||
#--------------------------#
|
||||
# SHOW MEMORY USAGE (FREE) #
|
||||
#--------------------------#
|
||||
_BLOCK_3_(){ #{{{
|
||||
free -h | awk '/^Mem:/{print "'"${1:-} "'"$3}'
|
||||
} #}}}
|
||||
|
||||
#------------------------#
|
||||
# SHOW SWAP USAGE (FREE) #
|
||||
#------------------------#
|
||||
_BLOCK_4_(){ #{{{
|
||||
free -h | awk '/^Swap:/{print "'"${1:-}"' "$3}'
|
||||
} #}}}
|
||||
|
||||
#---------------------------#
|
||||
# SHOW DATE AND TIME (DATE) #
|
||||
#---------------------------#
|
||||
_BLOCK_5_(){ #{{{
|
||||
date +"${1:-} %R %D"
|
||||
} #}}}
|
||||
|
||||
#----------------------------#
|
||||
# SHOW BATTERY STATUS (ACPI) #
|
||||
#----------------------------#
|
||||
_BLOCK_6_(){ #{{{
|
||||
Bat=$(acpi | awk '{gsub(",|%","",$4); print $4}');
|
||||
adapt=$(acpi -a | awk '{print $3}');
|
||||
|
||||
if [ "$adapt" = "on-line" -a -n "$Bat" ];then
|
||||
icon0=" "
|
||||
icon1=" "
|
||||
icon2=" "
|
||||
icon3=" "
|
||||
icon4=" "
|
||||
elif [ "$adapt" = "on-line" ];then
|
||||
icon0=""
|
||||
icon1=""
|
||||
icon2=""
|
||||
icon3=""
|
||||
icon4=""
|
||||
else
|
||||
icon0=""
|
||||
icon1=""
|
||||
icon2=""
|
||||
icon3=""
|
||||
icon4=""
|
||||
fi
|
||||
|
||||
[ -z "$Bat" ] && echo "$icon0 $adapt" && return
|
||||
[ "$Bat" -gt "100" ] && echo "$icon4 Full"
|
||||
[ "$Bat" -gt "90" ] && echo "$icon3 $Bat%"
|
||||
[ "$Bat" -gt "60" ] && echo "$icon2 $Bat%"
|
||||
[ "$Bat" -gt "30" ] && echo "$icon1 $Bat%"
|
||||
[ "$Bat" -lt "30" ] && echo "$icon0 $Bat%"
|
||||
} #}}}
|
||||
|
||||
#----------------------#
|
||||
# SHOW DISK USAGE (DF) #
|
||||
#----------------------#
|
||||
_BLOCK_7_() { #{{{
|
||||
df -h "${1:-/}" | awk '/\/dev\//{print "'"${2:-}"' "$3-G"/"$2}'
|
||||
} #}}}
|
||||
|
||||
#----------------------#
|
||||
# SHOW KEYBOARD LAYOUT #
|
||||
#----------------------#
|
||||
_BLOCK_8_() { #{{{
|
||||
awk -F '"' '/XKBLAYOUT/{print "'"${1:-} "'"$2}' /etc/default/keyboard
|
||||
} #}}}
|
||||
|
||||
#----------------------#
|
||||
# SHOW SYSTEM LANGUAGE #
|
||||
#----------------------#
|
||||
_BLOCK_9_(){ #{{{
|
||||
echo "${1:-} ${LANG/.UTF-8/}"
|
||||
} #}}}
|
||||
|
||||
#------------------------------#
|
||||
# SHOW MACHINE UPTIME (UPTIME) #
|
||||
#------------------------------#
|
||||
_BLOCK_10_() { #{{{
|
||||
uptime | awk '{sub(",","",$4); print "'"${1:- } "'"$3 " " $4}'
|
||||
} #}}}
|
||||
|
||||
#----------------------#
|
||||
# SHOW TRASH SIZE (DU) #
|
||||
#----------------------#
|
||||
_BLOCK_11_() { #{{{
|
||||
[ -d "$HOME/.local/share/Trash/files" ] && {
|
||||
du -hc $HOME/.local/share/Trash/files | awk '/total$/{print "'"${1:-} "'"$1}'
|
||||
} || {
|
||||
echo "${1:-} ---"
|
||||
}
|
||||
} #}}}
|
||||
|
||||
#-------------------#
|
||||
# SHOW WINDOW USAGE #
|
||||
#-------------------#
|
||||
_BLOCK_12_() { #{{{
|
||||
focus=$(xprop -id `xprop -root | awk '/^_NET_ACTIVE_WINDOW/{print $5}'` | awk -F '"' '/^WM_NAME/{print $2}')
|
||||
if [ -z "$focus" ];then
|
||||
echo "${1:-} Welcome"
|
||||
else
|
||||
[ "${#focus}" -gt "${2:-30}" ] && echo "${1:-} ${focus::${2:-30}} ..." || echo "${1:-} $focus"
|
||||
fi
|
||||
} #}}}
|
||||
|
||||
#-----------------------------------------#
|
||||
# SHOW MOCP PLAYING SONG AND STATUS (MOC) #
|
||||
#-----------------------------------------#
|
||||
_BLOCK_13_() { # {{{
|
||||
Title=$(mocp -Q %title)
|
||||
F_Title=$(basename `mocp -Q %file | tr " " "_"`)
|
||||
Status=$(mocp -Q %state)
|
||||
|
||||
if [ "$Status" != "PLAY" ];then
|
||||
echo "${1:-} Pause"
|
||||
elif [ -z "$Title" ];then
|
||||
echo "${1:-} ${F_Title::30}"
|
||||
else
|
||||
echo "${1:-} $Title"
|
||||
fi
|
||||
} #}}}
|
||||
|
||||
#------------------------------------------------------#
|
||||
# SHOW MPD PLAYING SONG AND STATUS (MPD; NCMPCCP, MPC) #
|
||||
#------------------------------------------------------#
|
||||
_BLOCK_14_() { #{{{
|
||||
local NCMP=$(mpc | awk '/^\[playing\]/{print $1}')
|
||||
|
||||
if [ "$NCMP" = "[playing]" ];then
|
||||
echo "${1:-} $(basename $(mpc current)) "
|
||||
else
|
||||
echo "${1:-} Pause "
|
||||
fi
|
||||
} #}}}
|
||||
|
||||
#-------------------------#
|
||||
# SHOW CPU TEMP (XSENSER) #
|
||||
#-------------------------#
|
||||
_BLOCK_15_() { #{{{
|
||||
sensors | awk '/^CPU/{gsub("\+",""); print "'"${1:-} "'"$2}'
|
||||
} #}}}
|
||||
|
||||
#-------------------------#
|
||||
# SHOW GPU TEMP (XSENSER) #
|
||||
#-------------------------#
|
||||
_BLOCK_16_() { #{{{
|
||||
sensors | awk '/^GPU/{gsub("\+",""); print "'"${1:-} "'"$2}' | tail -1
|
||||
} #}}}
|
||||
|
||||
#----------------------------------#
|
||||
# SHOW TOUCHPAD STATUS (SYSCLIENT) #
|
||||
#----------------------------------#
|
||||
_BLOCK_17_() { #{{{
|
||||
[ "$(synclient -l | awk '/Touchpad/{print $3}')" = "0" ] && echo "${1:-} Enable" || echo "${1:-} Disable"
|
||||
} #}}}
|
||||
|
||||
#---------------------------#
|
||||
# SHOW VOLUME STATUS (ALSA) #
|
||||
#---------------------------#
|
||||
_BLOCK_18_() { #{{{
|
||||
local Vol=$(amixer get Master | awk '/Mono:/{gsub("\[|\%|\]",""); print $4}')
|
||||
local Mute=$(amixer get Master | awk '/Mono:/{gsub("\[|\]",""); print $6}')
|
||||
|
||||
if [ "$Mute" = "off" ];then
|
||||
echo -e " --"
|
||||
else
|
||||
if [ "$Vol" -gt "60" ];then
|
||||
echo -e " $Vol%"
|
||||
elif [ "$Vol" -gt "30" ];then
|
||||
echo -e " $Vol%"
|
||||
elif [ "$Vol" -lt "30" ];then
|
||||
echo -e " $Vol%"
|
||||
fi
|
||||
fi
|
||||
} #}}}
|
||||
|
||||
#----------------------------------------------#
|
||||
# SHOW WIFI INFO ; IP ; CONNECTED NAME (NMCLI) #
|
||||
#----------------------------------------------#
|
||||
_BLOCK_19_() { #{{{
|
||||
while read -a W ;do
|
||||
[ "${W[2]}" = "connected" ] && {
|
||||
_ip=$(nmcli device show ${W[0]} | awk '/^IP4.ADDRESS/{print $NF}')
|
||||
_name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}')
|
||||
echo -n "${1:-} ${_ip%/*} (${_name} )"
|
||||
} || {
|
||||
echo -n "${1:-} ---"
|
||||
}
|
||||
done< <(nmcli d | grep -w "wifi")
|
||||
echo -e ""
|
||||
} #}}}
|
||||
|
||||
#-------------------------------------------#
|
||||
# SHOW ETHERNET INFO ; IP ; CONNECTED NAME #
|
||||
#-------------------------------------------#
|
||||
_BLOCK_20_() { #{{{
|
||||
while read -a W ;do
|
||||
[ "${W[2]}" = "connected" ] && {
|
||||
_ip=$(nmcli device show ${W[0]} | awk '/^IP4.ADDRESS/{print $NF}')
|
||||
_name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}')
|
||||
echo -n "${1:-} ${_ip%/*} (${_name} ) "
|
||||
} || {
|
||||
echo -n "${1:-} ---"
|
||||
}
|
||||
done< <(nmcli d | grep "ethernet")
|
||||
echo -e ""
|
||||
} #}}}
|
||||
|
||||
|
||||
#-----------------------------------------------#
|
||||
# SHOW WIFI INFO ; IP6 ; CONNECTED NAME (NMCLI) #
|
||||
#-----------------------------------------------#
|
||||
_BLOCK_21_() { #{{{
|
||||
while read -a W ;do
|
||||
[ "${W[2]}" = "connected" ] && {
|
||||
_ip=$(nmcli device show ${W[0]} | awk '/^IP6.ADDRESS/{print $NF}')
|
||||
_name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}')
|
||||
echo -n "${1:-} ${_ip%/*} (${_name} ) "
|
||||
} || {
|
||||
echo -n "${1:-} ---"
|
||||
}
|
||||
done< <(nmcli d | grep "wifi")
|
||||
echo -e ""
|
||||
} #}}}
|
||||
|
||||
#--------------------------------------------#
|
||||
# SHOW ETHERNET INFO ; IP6 ; CONNECTED NAME #
|
||||
#--------------------------------------------#
|
||||
_BLOCK_22_() { #{{{
|
||||
while read -a W ;do
|
||||
[ "${W[2]}" = "connected" ] && {
|
||||
_ip=$(nmcli device show ${W[0]} | awk '/^IP6.ADDRESS/{print $NF}')
|
||||
_name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}')
|
||||
echo -n "${1:-} ${_ip%/*} (${_name} ) "
|
||||
} || {
|
||||
echo -n "${1:-} ---"
|
||||
}
|
||||
done< <(nmcli d | grep "ethernet")
|
||||
echo -e ""
|
||||
} #}}}
|
||||
|
||||
#-------------------------------#
|
||||
# SHOW PROSSES USE BY THIS USER #
|
||||
#-------------------------------#
|
||||
_BLOCK_23_() { #{{{
|
||||
echo "${1:-} $(ps -U $USER | wc -l)"
|
||||
} #}}}
|
||||
|
||||
#---------------------#
|
||||
# SHOW SYSTEM KERENEL #
|
||||
#---------------------#
|
||||
_BLOCK_24_() { #{{{
|
||||
echo "${1:-} $(uname -r)"
|
||||
} #}}}
|
||||
|
||||
#-----------------------------#
|
||||
# SHOW USB PLUG IN UR COMPUTE #
|
||||
#-----------------------------#
|
||||
_BLOCK_25_() { #{{{
|
||||
echo "${1:-} $(lsblk -l -o 'TRAN' | grep -c "usb")"
|
||||
} #}}}
|
||||
|
||||
#---------------------------------------#
|
||||
# SHOW TOTAL PKGS INSTALL IN YOUR SYSTE #
|
||||
#---------------------------------------#
|
||||
_BLOCK_26_() { #{{{
|
||||
echo "${1:-} $(dpkg -l | grep -c "^ii")"
|
||||
} #}}}
|
||||
|
||||
#--------------------------------------------#
|
||||
# CHECK IF THERE IS ANY UPDATE IN UR SYSTEM #
|
||||
#--------------------------------------------#
|
||||
_BLOCK_27_() { #{{{
|
||||
local U_PKGS=$(apt-get -s -o APT::Get::Show-User-Simulation-Note=0 dist-upgrade | grep "^\s\s" | wc -w);
|
||||
echo "${1:-} $U_PKGS"
|
||||
} #}}}
|
||||
|
||||
#-----------------#
|
||||
# SHOW UFW STATUS #
|
||||
#-----------------#
|
||||
_BLOCK_28_() { #{{{
|
||||
[ "$(systemctl status ufw | awk '/Active:/{print $2}')" == "active" ] && echo "${1:-} On" || echo "${1:-} Off"
|
||||
} #}}}
|
||||
|
||||
#-------------------------#
|
||||
# SHOW NUMBER LOCK STATUS #
|
||||
#-------------------------#
|
||||
_BLOCK_29_() { #{{{
|
||||
[ "$(xset -q | awk '/00:/{print $8}')" == "on" ] && echo "${1:-} On" || echo "${1:-} Off"
|
||||
} #}}}
|
||||
|
||||
#-----------------------#
|
||||
# SHOW BLUETOOTH STATUS #
|
||||
#-----------------------#
|
||||
_BLOCK_30_() { #{{{
|
||||
[ "$(systemctl status bluetooth.target | awk '/Active:/{print $2}')" == "active" ] && echo "${1:-} On" || echo "${1:-} Off"
|
||||
} #}}}
|
||||
|
||||
#------------------------#
|
||||
# SHOW CAPS LOCK STATUS #
|
||||
#------------------------#
|
||||
_BLOCK_31_() { #{{{
|
||||
[ "$(xset -q | awk '/00:/{print $4}')" == "on" ] && echo "${1:-} On" || echo "${1:-} Off"
|
||||
} #}}}
|
||||
|
||||
#-----------------------------#
|
||||
# DISPLAY X SCREENSAVER STATE #
|
||||
#-----------------------------#
|
||||
_BLOCK_32_() { #{{{
|
||||
[ "$(xdg-screensaver status)" != "enabled" ] && echo "${1:-} Off" || echo "${1:-} On"
|
||||
} #}}}
|
||||
|
||||
#--------------------------------#
|
||||
# CALCULE MOUNT POINTS ON SYSTEM #
|
||||
#--------------------------------#
|
||||
_BLOCK_33_() { #{{{
|
||||
echo "${1:-} $(cat /proc/mounts | grep -c "^/dev/sd*") "
|
||||
} #}}}
|
||||
|
||||
#-------------------------#
|
||||
# SHOW CMUS PLAYING SONG #
|
||||
#-------------------------#
|
||||
_BLOCK_34_() { #{{{
|
||||
local CMUS_P=$(cmus-remote -Q | awk '/^status/{print $2}')
|
||||
local CMUS_F=$(cmus-remote -Q | awk '/^file/{$1=""; print $2}')
|
||||
|
||||
if [ "$CMUS_P" = "Playing" ];then
|
||||
echo "${1:-} $(basename $CMUS_F)"
|
||||
else
|
||||
echo "${1:-} Pause"
|
||||
fi
|
||||
} #}}}
|
||||
|
||||
#----------------------#
|
||||
# SHOW APPARMOR STATUS #
|
||||
#----------------------#
|
||||
_BLOCK_35_() { #{{{
|
||||
[ "$(aa-enabled)" = "Yes" ] && {
|
||||
echo "${1:-} On"
|
||||
}||{
|
||||
echo "${1:-} Off"
|
||||
}
|
||||
} #}}}
|
||||
|
||||
#-----------------------------#
|
||||
# SHOW TOTAL PACKAGES IN ARCH #
|
||||
#-----------------------------#{{{
|
||||
_BLOCK_36_(){
|
||||
echo "${1:-} $(pacman -Q | grep -c "*")"
|
||||
}
|
||||
#}}}
|
||||
|
||||
#--------------------#
|
||||
# SHOW I3 WORKSPACES #
|
||||
#--------------------#
|
||||
_BLOCK_37_() { #{{{
|
||||
i3-msg -t get_workspaces | awk -F , '{
|
||||
for(i=1;i<=NF;i++){
|
||||
if($i~"name"){
|
||||
gsub("\"name\":|\"","",$i)
|
||||
WK=$i
|
||||
}
|
||||
if($i~"focused"){
|
||||
gsub("\"focused\":","",$i)
|
||||
WKF=$i
|
||||
}
|
||||
if($i~"urgent"){
|
||||
gsub("\"urgent\":|\]|\}","",$i)
|
||||
if($i=="false" && WKF=="true"){
|
||||
printf "%s ", WK
|
||||
}
|
||||
if($i=="false" && WKF=="false"){
|
||||
printf"[%s] ", WK
|
||||
}
|
||||
if($i=="true" && WKF=="false"){
|
||||
printf "[*%s] ", WK
|
||||
}
|
||||
if($i=="true" && WKF=="true"){
|
||||
printf "*%s ", WK
|
||||
}
|
||||
}
|
||||
}
|
||||
}'
|
||||
} #}}}
|
||||
|
||||
#-----------------#
|
||||
# SHOW USER NAME #
|
||||
#-----------------#
|
||||
_BLOCK_38_(){ #{{{
|
||||
echo -e "${1:-} $USER"
|
||||
} #}}}
|
||||
|
||||
#-------------------#
|
||||
# SHOW VOLUME PULSE #
|
||||
#-------------------#
|
||||
_BLOCK_39_(){
|
||||
local Vol=$(pactl list sinks | awk '/Volume: front/{print $5-"%"}')
|
||||
local Mute=$(amixer get Master | awk '/Mono:/{gsub("\[|\]",""); print $6}')
|
||||
|
||||
if [ "$Mute" = "off" ];then
|
||||
echo -e " --"
|
||||
else
|
||||
if [ "$Vol" -gt "60" ];then
|
||||
echo -e " $Vol%"
|
||||
elif [ "$Vol" -gt "30" ];then
|
||||
echo -e " $Vol%"
|
||||
elif [ "$Vol" -lt "30" ];then
|
||||
echo -e " $Vol%"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#------------------------#
|
||||
# USAGE AND HELP DIALOG #
|
||||
#------------------------#
|
||||
_USAGE_(){ #{{{
|
||||
echo -e "
|
||||
i3b-gate : is a all in one collaction of small script
|
||||
show you useful unformation about your system
|
||||
|
||||
There is 39 deffirent script to use
|
||||
for more information you can see the 'README' file
|
||||
or visite 'https://gitlab.com/zakariagatter/i3blocks-gate'
|
||||
|
||||
SYNTAX :
|
||||
i3b-gate [NUMBER] ...
|
||||
"
|
||||
} #}}}
|
||||
|
||||
#----------------#
|
||||
# MAIN ARGUMENT #
|
||||
#----------------#
|
||||
if [ "$1" -gt "39" ] || [ -z "$1" ] ;then
|
||||
_USAGE_
|
||||
elif [ "$1" = "-h" ]; then
|
||||
_USAGE_
|
||||
else
|
||||
eval $(echo "_BLOCK_$1_ $2 $3")
|
||||
fi
|
26
i3/.config/i3blocks/keyboard
Executable file
26
i3/.config/i3blocks/keyboard
Executable file
@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
get_current_layout () {
|
||||
setxkbmap -print | grep -q dvorak
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo dvorak
|
||||
else
|
||||
echo qwertz
|
||||
fi
|
||||
}
|
||||
|
||||
case "$BLOCK_BUTTON" in
|
||||
1|2|3)
|
||||
# Switch layout
|
||||
current_layout=$(get_current_layout)
|
||||
if [ $current_layout == dvorak ]; then
|
||||
setxkbmap -layout de
|
||||
else
|
||||
setxkbmap -layout de -variant dvorak
|
||||
fi
|
||||
esac
|
||||
|
||||
current_layout=$(get_current_layout)
|
||||
|
||||
echo "$LABEL $current_layout"
|
||||
echo "$LABEL $current_layout"
|
91
i3/.config/i3blocks/volume
Executable file
91
i3/.config/i3blocks/volume
Executable file
@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
# Copyright (C) 2014 Alexander Keller <github@nycroth.com>
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
# The second parameter overrides the mixer selection
|
||||
# For PulseAudio users, eventually use "pulse"
|
||||
# For Jack/Jack2 users, use "jackplug"
|
||||
# For ALSA users, you may use "default" for your primary card
|
||||
# or you may use hw:# where # is the number of the card desired
|
||||
if [[ -z "$MIXER" ]] ; then
|
||||
MIXER="default"
|
||||
if command -v pulseaudio >/dev/null 2>&1 && pulseaudio --check ; then
|
||||
# pulseaudio is running, but not all installations use "pulse"
|
||||
if amixer -D pulse info >/dev/null 2>&1 ; then
|
||||
MIXER="pulse"
|
||||
fi
|
||||
fi
|
||||
[ -n "$(lsmod | grep jack)" ] && MIXER="jackplug"
|
||||
MIXER="${2:-$MIXER}"
|
||||
fi
|
||||
|
||||
# The instance option sets the control to report and configure
|
||||
# This defaults to the first control of your selected mixer
|
||||
# For a list of the available, use `amixer -D $Your_Mixer scontrols`
|
||||
if [[ -z "$SCONTROL" ]] ; then
|
||||
SCONTROL="${BLOCK_INSTANCE:-$(amixer -D $MIXER scontrols |
|
||||
sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" |
|
||||
head -n1
|
||||
)}"
|
||||
fi
|
||||
|
||||
# The first parameter sets the step to change the volume by (and units to display)
|
||||
# This may be in in % or dB (eg. 5% or 3dB)
|
||||
if [[ -z "$STEP" ]] ; then
|
||||
STEP="${1:-5%}"
|
||||
fi
|
||||
|
||||
# AMIXER(1):
|
||||
# "Use the mapped volume for evaluating the percentage representation like alsamixer, to be
|
||||
# more natural for human ear."
|
||||
NATURAL_MAPPING=${NATURAL_MAPPING:-0}
|
||||
if [[ "$NATURAL_MAPPING" != "0" ]] ; then
|
||||
AMIXER_PARAMS="-M"
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
capability() { # Return "Capture" if the device is a capture device
|
||||
amixer $AMIXER_PARAMS -D $MIXER get $SCONTROL |
|
||||
sed -n "s/ Capabilities:.*cvolume.*/Capture/p"
|
||||
}
|
||||
|
||||
volume() {
|
||||
amixer $AMIXER_PARAMS -D $MIXER get $SCONTROL $(capability)
|
||||
}
|
||||
|
||||
format() {
|
||||
|
||||
perl_filter='if (/.*\[(\d+%)\] (\[(-?\d+.\d+dB)\] )?\[(on|off)\]/)'
|
||||
perl_filter+='{CORE::say $4 eq "off" ? "MUTE" : "'
|
||||
# If dB was selected, print that instead
|
||||
perl_filter+=$([[ $STEP = *dB ]] && echo '$3' || echo '$1')
|
||||
perl_filter+='"; exit}'
|
||||
output=$(perl -ne "$perl_filter")
|
||||
echo "$LABEL $output"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
case $BLOCK_BUTTON in
|
||||
1|2|3) pavucontrol ;; # right click, open gui
|
||||
4) amixer $AMIXER_PARAMS -q -D $MIXER sset $SCONTROL $(capability) ${STEP}+ unmute ;; # scroll up, increase
|
||||
5) amixer $AMIXER_PARAMS -q -D $MIXER sset $SCONTROL $(capability) ${STEP}- unmute ;; # scroll down, decrease
|
||||
esac
|
||||
|
||||
volume | format
|
277
i3/.config/rofi/config.rasi
Normal file
277
i3/.config/rofi/config.rasi
Normal file
@ -0,0 +1,277 @@
|
||||
configuration {
|
||||
modi: "run,drun";
|
||||
/* width: 50;*/
|
||||
lines: 10;
|
||||
/* columns: 1;*/
|
||||
/* font: "mono 12";*/
|
||||
/* bw: 1;*/
|
||||
/* location: 0;*/
|
||||
/* padding: 5;*/
|
||||
/* yoffset: 0;*/
|
||||
/* xoffset: 0;*/
|
||||
/* fixed-num-lines: true;*/
|
||||
show-icons: true;
|
||||
/* terminal: "rofi-sensible-terminal";*/
|
||||
/* ssh-client: "ssh";*/
|
||||
/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/
|
||||
/* run-command: "{cmd}";*/
|
||||
/* run-list-command: "";*/
|
||||
/* run-shell-command: "{terminal} -e {cmd}";*/
|
||||
/* window-command: "wmctrl -i -R {window}";*/
|
||||
/* window-match-fields: "all";*/
|
||||
/* icon-theme: ;*/
|
||||
/* drun-match-fields: "name,generic,exec,categories,keywords";*/
|
||||
/* drun-categories: ;*/
|
||||
/* drun-show-actions: false;*/
|
||||
/* drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";*/
|
||||
/* drun-url-launcher: "xdg-open";*/
|
||||
/* disable-history: false;*/
|
||||
/* ignored-prefixes: "";*/
|
||||
/* sort: false;*/
|
||||
/* sorting-method: "normal";*/
|
||||
/* case-sensitive: false;*/
|
||||
/* cycle: true;*/
|
||||
/* sidebar-mode: false;*/
|
||||
/* eh: 1;*/
|
||||
/* auto-select: false;*/
|
||||
/* parse-hosts: false;*/
|
||||
/* parse-known-hosts: true;*/
|
||||
/* combi-modi: "window,run";*/
|
||||
/* matching: "normal";*/
|
||||
/* tokenize: true;*/
|
||||
/* m: "-5";*/
|
||||
/* line-margin: 2;*/
|
||||
/* line-padding: 1;*/
|
||||
/* filter: ;*/
|
||||
/* separator-style: "dash";*/
|
||||
/* hide-scrollbar: false;*/
|
||||
/* fullscreen: false;*/
|
||||
/* fake-transparency: false;*/
|
||||
/* dpi: -1;*/
|
||||
/* threads: 0;*/
|
||||
/* scrollbar-width: 8;*/
|
||||
/* scroll-method: 0;*/
|
||||
/* fake-background: "screenshot";*/
|
||||
/* window-format: "{w} {c} {t}";*/
|
||||
/* click-to-exit: true;*/
|
||||
/* show-match: true;*/
|
||||
/* theme: ;*/
|
||||
/* color-normal: ;*/
|
||||
/* color-urgent: ;*/
|
||||
/* color-active: ;*/
|
||||
/* color-window: ;*/
|
||||
/* max-history-size: 25;*/
|
||||
/* combi-hide-mode-prefix: false;*/
|
||||
/* matching-negate-char: '-' /* unsupported */;*/
|
||||
/* cache-dir: ;*/
|
||||
/* window-thumbnail: false;*/
|
||||
/* drun-use-desktop-cache: false;*/
|
||||
/* drun-reload-desktop-cache: false;*/
|
||||
/* normalize-match: false;*/
|
||||
/* pid: "/run/user/1000/rofi.pid";*/
|
||||
/* display-window: ;*/
|
||||
/* display-windowcd: ;*/
|
||||
/* display-run: ;*/
|
||||
/* display-ssh: ;*/
|
||||
/* display-drun: ;*/
|
||||
/* display-combi: ;*/
|
||||
/* display-keys: ;*/
|
||||
/* display-file-browser: ;*/
|
||||
/* display-calc: ;*/
|
||||
/* kb-primary-paste: "Control+V,Shift+Insert";*/
|
||||
/* kb-secondary-paste: "Control+v,Insert";*/
|
||||
/* kb-clear-line: "Control+w";*/
|
||||
/* kb-move-front: "Control+a";*/
|
||||
/* kb-move-end: "Control+e";*/
|
||||
/* kb-move-word-back: "Alt+b,Control+Left";*/
|
||||
/* kb-move-word-forward: "Alt+f,Control+Right";*/
|
||||
/* kb-move-char-back: "Left,Control+b";*/
|
||||
/* kb-move-char-forward: "Right,Control+f";*/
|
||||
/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
|
||||
/* kb-remove-word-forward: "Control+Alt+d";*/
|
||||
/* kb-remove-char-forward: "Delete,Control+d";*/
|
||||
/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/
|
||||
/* kb-remove-to-eol: "Control+k";*/
|
||||
/* kb-remove-to-sol: "Control+u";*/
|
||||
/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
|
||||
kb-accept-custom: "Control+Return";
|
||||
/* kb-accept-alt: "Shift+Return";*/
|
||||
/* kb-delete-entry: "Shift+Delete";*/
|
||||
/* kb-mode-next: "Shift+Right,Control+Tab";*/
|
||||
/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
|
||||
/* kb-row-left: "Control+Page_Up";*/
|
||||
/* kb-row-right: "Control+Page_Down";*/
|
||||
/* kb-row-up: "Up,Control+p,ISO_Left_Tab";*/
|
||||
/* kb-row-down: "Down,Control+n";*/
|
||||
/* kb-row-tab: "Tab";*/
|
||||
/* kb-page-prev: "Page_Up";*/
|
||||
/* kb-page-next: "Page_Down";*/
|
||||
/* kb-row-first: "Home,KP_Home";*/
|
||||
/* kb-row-last: "End,KP_End";*/
|
||||
/* kb-row-select: "Control+space";*/
|
||||
/* kb-screenshot: "Alt+S";*/
|
||||
/* kb-ellipsize: "Alt+period";*/
|
||||
/* kb-toggle-case-sensitivity: "grave,dead_grave";*/
|
||||
/* kb-toggle-sort: "Alt+grave";*/
|
||||
/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/
|
||||
/* kb-custom-1: "Alt+1";*/
|
||||
/* kb-custom-2: "Alt+2";*/
|
||||
/* kb-custom-3: "Alt+3";*/
|
||||
/* kb-custom-4: "Alt+4";*/
|
||||
/* kb-custom-5: "Alt+5";*/
|
||||
/* kb-custom-6: "Alt+6";*/
|
||||
/* kb-custom-7: "Alt+7";*/
|
||||
/* kb-custom-8: "Alt+8";*/
|
||||
/* kb-custom-9: "Alt+9";*/
|
||||
/* kb-custom-10: "Alt+0";*/
|
||||
/* kb-custom-11: "Alt+exclam";*/
|
||||
/* kb-custom-12: "Alt+at";*/
|
||||
/* kb-custom-13: "Alt+numbersign";*/
|
||||
/* kb-custom-14: "Alt+dollar";*/
|
||||
/* kb-custom-15: "Alt+percent";*/
|
||||
/* kb-custom-16: "Alt+dead_circumflex";*/
|
||||
/* kb-custom-17: "Alt+ampersand";*/
|
||||
/* kb-custom-18: "Alt+asterisk";*/
|
||||
/* kb-custom-19: "Alt+parenleft";*/
|
||||
/* kb-select-1: "Super+1";*/
|
||||
/* kb-select-2: "Super+2";*/
|
||||
/* kb-select-3: "Super+3";*/
|
||||
/* kb-select-4: "Super+4";*/
|
||||
/* kb-select-5: "Super+5";*/
|
||||
/* kb-select-6: "Super+6";*/
|
||||
/* kb-select-7: "Super+7";*/
|
||||
/* kb-select-8: "Super+8";*/
|
||||
/* kb-select-9: "Super+9";*/
|
||||
/* kb-select-10: "Super+0";*/
|
||||
/* ml-row-left: "ScrollLeft";*/
|
||||
/* ml-row-right: "ScrollRight";*/
|
||||
/* ml-row-up: "ScrollUp";*/
|
||||
/* ml-row-down: "ScrollDown";*/
|
||||
/* me-select-entry: "MousePrimary";*/
|
||||
/* me-accept-entry: "MouseDPrimary";*/
|
||||
/* me-accept-custom: "Control+MouseDPrimary";*/
|
||||
}
|
||||
|
||||
|
||||
/*Dracula theme based on the Purple official rofi theme*/
|
||||
|
||||
* {
|
||||
font: "Jetbrains Mono 14";
|
||||
foreground: #f8f8f2;
|
||||
background-color: #282a36;
|
||||
active-background: #6272a4;
|
||||
urgent-background: #ff5555;
|
||||
selected-background: @active-background;
|
||||
selected-urgent-background: @urgent-background;
|
||||
selected-active-background: @active-background;
|
||||
separatorcolor: @active-background;
|
||||
bordercolor: @active-background;
|
||||
}
|
||||
|
||||
#window {
|
||||
background-color: @background;
|
||||
border: 1;
|
||||
border-radius: 6;
|
||||
border-color: @bordercolor;
|
||||
padding: 5;
|
||||
}
|
||||
#mainbox {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#message {
|
||||
border: 1px dash 0px 0px ;
|
||||
border-color: @separatorcolor;
|
||||
padding: 1px ;
|
||||
}
|
||||
#textbox {
|
||||
text-color: @foreground;
|
||||
}
|
||||
#listview {
|
||||
fixed-height: 0;
|
||||
border: 2px dash 0px 0px ;
|
||||
border-color: @bordercolor;
|
||||
spacing: 2px ;
|
||||
scrollbar: false;
|
||||
padding: 2px 0px 0px ;
|
||||
}
|
||||
#element {
|
||||
border: 0;
|
||||
padding: 1px ;
|
||||
}
|
||||
#element.normal.normal {
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#element.normal.urgent {
|
||||
background-color: @urgent-background;
|
||||
text-color: @urgent-foreground;
|
||||
}
|
||||
#element.normal.active {
|
||||
background-color: @active-background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#element.selected.normal {
|
||||
background-color: @selected-background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#element.selected.urgent {
|
||||
background-color: @selected-urgent-background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#element.selected.active {
|
||||
background-color: @selected-active-background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#element.alternate.normal {
|
||||
background-color: @background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#element.alternate.urgent {
|
||||
background-color: @urgent-background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#element.alternate.active {
|
||||
background-color: @active-background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#scrollbar {
|
||||
width: 2px ;
|
||||
border: 0;
|
||||
handle-width: 8px ;
|
||||
padding: 0;
|
||||
}
|
||||
#sidebar {
|
||||
border: 2px dash 0px 0px ;
|
||||
border-color: @separatorcolor;
|
||||
}
|
||||
#button.selected {
|
||||
background-color: @selected-background;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#inputbar {
|
||||
spacing: 0;
|
||||
text-color: @foreground;
|
||||
padding: 1px ;
|
||||
}
|
||||
#case-indicator {
|
||||
spacing: 0;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#entry {
|
||||
spacing: 0;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#prompt {
|
||||
spacing: 0;
|
||||
text-color: @foreground;
|
||||
}
|
||||
#inputbar {
|
||||
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||
}
|
||||
#textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: ":";
|
||||
margin: 0px 0.3em 0em 0em ;
|
||||
text-color: @foreground;
|
||||
}
|
Reference in New Issue
Block a user