diff --git a/.config/i3/config b/.config/i3/config new file mode 100644 index 0000000..102d2dc --- /dev/null +++ b/.config/i3/config @@ -0,0 +1,238 @@ +# 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). +# +set $mod Mod4 +set $alt Mod1 + +new_window none + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:Roboto-Regular 10 + +# 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 8 + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# start a terminal +bindsym $mod+Return exec gnome-terminal + +# kill focused window +bindsym $mod+Shift+q kill + +# Start rofi +bindsym $mod+r exec rofi -show run -opacity 100 -lines 5 -location 2 + + + +# change focus +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+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+h 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+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 + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +#bindsym $mod+d focus child + +# Set monitor names +set $output1 first +set $output2 second +set $output3 third + +# Set workspace titles +set $workspace1 "1: " +set $workspace2 "2: " +set $workspace3 "3: Editor" +set $workspace4 "4: " +set $workspace5 "5: Messaging" +set $workspace6 "6: " +set $workspace7 "7: " +set $workspace8 "8: " +set $workspace9 "9: " +set $workspace10 "10: " + +# Assign workspaces to screens +workspace $workspace1 output $output1 +workspace $workspace2 output $output1 +workspace $workspace3 output $output1 +workspace $workspace4 output $output2 +workspace $workspace5 output $output1 +workspace $workspace6 output $output2 +workspace $workspace7 output $output1 +workspace $workspace8 output $output1 +workspace $workspace9 output $output2 +workspace $workspace10 output $output1 + +# Workspace switching +bindsym $mod+1 workspace $workspace1 +bindsym $mod+2 workspace $workspace2 +bindsym $mod+3 workspace $workspace3 +bindsym $mod+4 workspace $workspace4 +bindsym $mod+5 workspace $workspace5 +bindsym $mod+6 workspace $workspace6 +bindsym $mod+7 workspace $workspace7 +bindsym $mod+8 workspace $workspace8 +bindsym $mod+9 workspace $workspace9 +bindsym $mod+0 workspace $workspace10 + +bindsym $mod+KP_1 workspace $workspace1 +bindsym $mod+KP_2 workspace $workspace2 +bindsym $mod+KP_3 workspace $workspace3 +bindsym $mod+KP_4 workspace $workspace4 +bindsym $mod+KP_5 workspace $workspace5 +bindsym $mod+KP_6 workspace $workspace6 +bindsym $mod+KP_7 workspace $workspace7 +bindsym $mod+KP_8 workspace $workspace8 +bindsym $mod+KP_9 workspace $workspace9 +bindsym $mod+KP_0 workspace $workspace10 + +# Moving container to workspace +bindsym $mod+Shift+1 move container to workspace $workspace1 +bindsym $mod+Shift+2 move container to workspace $workspace2 +bindsym $mod+Shift+3 move container to workspace $workspace3 +bindsym $mod+Shift+4 move container to workspace $workspace4 +bindsym $mod+Shift+5 move container to workspace $workspace5 +bindsym $mod+Shift+6 move container to workspace $workspace6 +bindsym $mod+Shift+7 move container to workspace $workspace7 +bindsym $mod+Shift+8 move container to workspace $workspace8 +bindsym $mod+Shift+9 move container to workspace $workspace9 +bindsym $mod+Shift+0 move container to workspace $workspace10 + +bindsym $mod+Shift+KP_1 move container to workspace $workspace1 +bindsym $mod+Shift+KP_2 move container to workspace $workspace2 +bindsym $mod+Shift+KP_3 move container to workspace $workspace3 +bindsym $mod+Shift+KP_4 move container to workspace $workspace4 +bindsym $mod+Shift+KP_5 move container to workspace $workspace5 +bindsym $mod+Shift+KP_6 move container to workspace $workspace6 +bindsym $mod+Shift+KP_7 move container to workspace $workspace7 +bindsym $mod+Shift+KP_8 move container to workspace $workspace8 +bindsym $mod+Shift+KP_9 move container to workspace $workspace9 +bindsym $mod+Shift+KP_0 move container to workspace $workspace10 + +# Reload configuration file +bindsym $mod+Shift+c reload + +# Restart i3 +bindsym $mod+Shift+r restart + +# Logout from i3 +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 + + 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 + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+x mode "resize" + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + font pango: Roboto-Regular, FontAwesome 10 + status_command i3blocks -c ~/.config/i3/i3blocks.conf + position top +} + +# Custom key bindings +### +# Lock the screen +bindsym $mod+l exec ~/bin/screenlock.sh + +# Volume changing +bindsym $mod+KP_Add exec pactl set-sink-volume 0 +5% +bindsym $mod+KP_Subtract exec pactl set-sink-volume 0 -5% + +# Music controls +bindsym $mod+KP_Enter exec audtool playback-playpause +bindsym $mod+Ctrl+Right exec audtool playlist-advance +bindsym $mod+Ctrl+Left exec audtool playlist-reverse + +# Moving workspaces to other displays +bindsym $mod+$alt+Left move workspace to output left +bindsym $mod+$alt+Right move workspace to output right + +# Run specific applications on start +### + +# Compton +exec --no-startup-id compton + +# Background-Image +exec_always --no-startup-id feh --bg-center /home/severin/GoogleDrive/02_Media/01_Images/01_Wallpaper/Desktop/Zelda_1.jpg + +# Monitor settings +exec_always --no-startup-id xrandr --output $output2 --mode 1280x1024 --pos 1280x0 --rotate normal --output VIRTUAL1 --off --output DP1 --off --output $output1 --mode 1280x1024 --pos 0x0 --rotate normal + +# Other applications +exec --no-startup-id google-chrome-beta +exec --no-startup-id gnome-terminal -x bash -c "sudo apt-get update && sudo apt-get upgrade -y" +exec --no-startup-id gnome-terminal +exec --no-startup-id thunar +exec --no-startup-id thunar +#exec --no-startup-id steam +#exec --no-startup-id keepass2 +exec --no-startup-id audacious + +# Assign programs to specific workspaces +### +assign [class="google-chrome-beta"] $workspace1 +assign [class="Thunar"] $workspace4 +assign [class="Gnome-terminal"] $workspace2 +assign [class="Atom"] $workspace3 +assign [class="Steam"] $workspace6 +assign [class="KeePass2"] $workspace8 +assign [class="vlc"] $workspace9 +assign [class="Audacious"] $workspace10 + +# i3-gaps specific + +# Disable window titlebars +for_window [class="^.*"] border pixel 0 + +# Gaps +gaps inner 10 +gaps outer 10 diff --git a/.config/i3/i3bar/datetime.sh b/.config/i3/i3bar/datetime.sh new file mode 100755 index 0000000..046b33d --- /dev/null +++ b/.config/i3/i3bar/datetime.sh @@ -0,0 +1,2 @@ +#!/bin/bash +date '+ %d.%m.%Y  %H:%M:%S' diff --git a/.config/i3/i3bar/music.sh b/.config/i3/i3bar/music.sh new file mode 100755 index 0000000..34ae632 --- /dev/null +++ b/.config/i3/i3bar/music.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +echo " $(audtool current-song)" diff --git a/.config/i3/i3bar/shutdown.sh b/.config/i3/i3bar/shutdown.sh new file mode 100755 index 0000000..a71f83d --- /dev/null +++ b/.config/i3/i3bar/shutdown.sh @@ -0,0 +1,185 @@ +#!/bin/bash +# +# Use rofi/zenity to change system runstate thanks to systemd. +# +# Note: this currently relies on associative array support in the shell. +# +# Inspired from i3pystatus wiki: +# https://github.com/enkore/i3pystatus/wiki/Shutdown-Menu +# +# Copyright 2015 Benjamin Chrétien +# +# 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 . + +####################################################################### +# BEGIN CONFIG # +####################################################################### + +# Use a custom lock script +#LOCKSCRIPT="i3lock-extra -m pixelize" + +# Colors: FG (foreground), BG (background), HL (highlighted) +FG_COLOR="#bbbbbb" +BG_COLOR="#111111" +HLFG_COLOR="#111111" +HLBG_COLOR="#bbbbbb" +BORDER_COLOR="#222222" + +# Options not related to colors +ROFI_TEXT="Menu:" +ROFI_OPTIONS="-width -11 -location 3 -hide-scrollbar -bw 2" + +# Zenity options +ZENITY_TITLE="Menu" +ZENITY_TEXT="Action:" +ZENITY_OPTIONS="--column= --hide-header" + +####################################################################### +# END CONFIG # +####################################################################### + +# Whether to ask for user's confirmation +enable_confirmation=false + +# Preferred launcher if both are available +preferred_launcher="rofi" + +usage="$(basename "$0") [-h] [-c] [-p name] -- display a menu for shutdown, reboot, lock etc. + +where: + -h show this help text + -c ask for user confirmation + -p preferred launcher (rofi or zenity) + +This script depends on: + - systemd, + - i3, + - rofi or zenity." + +# Check whether the user-defined launcher is valid +launcher_list=(rofi zenity) +function check_launcher() { + if [[ ! "${launcher_list[@]}" =~ (^|[[:space:]])"$1"($|[[:space:]]) ]]; then + echo "Supported launchers: ${launcher_list[*]}" + exit 1 + else + # Get array with unique elements and preferred launcher first + # Note: uniq expects a sorted list, so we cannot use it + i=1 + launcher_list=($(for l in "$1" "${launcher_list[@]}"; do printf "%i %s\n" "$i" "$l"; let i+=1; done \ + | sort -uk2 | sort -nk1 | cut -d' ' -f2- | tr '\n' ' ')) + fi +} + +# Parse CLI arguments +while getopts "hcp:" option; do + case "${option}" in + h) echo "${usage}" + exit 0 + ;; + c) enable_confirmation=true + ;; + p) preferred_launcher="${OPTARG}" + check_launcher "${preferred_launcher}" + ;; + *) exit 1 + ;; + esac +done + +# Check whether a command exists +function command_exists() { + command -v "$1" &> /dev/null 2>&1 +} + +# systemctl required +if ! command_exists systemctl ; then + exit 1 +fi + +# menu defined as an associative array +typeset -A menu + +# Menu with keys/commands +menu=( + [Shutdown]="systemctl poweroff" + [Reboot]="systemctl reboot" + [Hibernate]="systemctl hibernate" + [Suspend]="systemctl suspend" + [Halt]="systemctl halt" + [Lock]="~/bin/screenlock.sh" + [Logout]="i3-msg exit" + [Cancel]="" +) +menu_nrows=${#menu[@]} + +# Menu entries that may trigger a confirmation message +menu_confirm="Shutdown Reboot Hibernate Suspend Halt Logout" + +launcher_exe="" +launcher_options="" +rofi_colors="" + +function prepare_launcher() { + if [[ "$1" == "rofi" ]]; then + rofi_colors="-bc ${BORDER_COLOR} -bg ${BG_COLOR} -fg ${FG_COLOR} \ + -hlfg ${HLFG_COLOR} -hlbg ${HLBG_COLOR}" + launcher_exe="rofi" + launcher_options="-dmenu -i -lines ${menu_nrows} -p ${ROFI_TEXT} \ + ${rofi_colors} ${ROFI_OPTIONS}" + elif [[ "$1" == "zenity" ]]; then + launcher_exe="zenity" + launcher_options="--list --title=${ZENITY_TITLE} --text=${ZENITY_TEXT} \ + ${ZENITY_OPTIONS}" + fi +} + +for l in "${launcher_list[@]}"; do + if command_exists "${l}" ; then + prepare_launcher "${l}" + break + fi +done + +# No launcher available +if [[ -z "${launcher_exe}" ]]; then + exit 1 +fi + +launcher="${launcher_exe} ${launcher_options}" +selection="$(printf '%s\n' "${!menu[@]}" | sort | ${launcher})" + +function ask_confirmation() { + if [ "${launcher_exe}" == "rofi" ]; then + confirmed=$(echo -e "Yes\nNo" | rofi -dmenu -i -lines 2 -p "${selection}?" \ + ${rofi_colors} ${ROFI_OPTIONS}) + [ "${confirmed}" == "Yes" ] && confirmed=0 + elif [ "${launcher_exe}" == "zenity" ]; then + zenity --question --text "Are you sure you want to ${selection,,}?" + confirmed=$? + fi + + if [ "${confirmed}" == 0 ]; then + i3-msg -q "exec ${menu[${selection}]}" + fi +} + +if [[ $? -eq 0 && ! -z ${selection} ]]; then + if [[ "${enable_confirmation}" = true && \ + ${menu_confirm} =~ (^|[[:space:]])"${selection}"($|[[:space:]]) ]]; then + ask_confirmation + else + i3-msg -q "exec ${menu[${selection}]}" + fi +fi diff --git a/.config/i3/i3bar/volume.sh b/.config/i3/i3bar/volume.sh new file mode 100755 index 0000000..c94c5e7 --- /dev/null +++ b/.config/i3/i3bar/volume.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# volume.sh +volume=$(/usr/share/i3blocks/volume 5 pulse) + +if [ ${volume::-1} -ge "35" ]; then + echo " $volume" +elif [ ${volume::-1} -gt "0" ]; then + echo " $volume" +else + echo " $volume" +fi diff --git a/.config/i3/i3blocks.conf b/.config/i3/i3blocks.conf new file mode 100644 index 0000000..b4d0ba2 --- /dev/null +++ b/.config/i3/i3blocks.conf @@ -0,0 +1,34 @@ +# i3blocks config file + + +# Global properties +command=/usr/share/i3blocks/$BLOCK_NAME +markup=none + +full_text= +align=center +separator=false +separator_block_width=10 + + +[Music] +markup=pango +command=~/.config/i3/i3bar/music.sh +interval=1 + +[seperator] + +[Volume] +full_text= +command=~/.config/i3/i3bar/volume.sh +interval=repeat + +[seperator] + +[Datetime] +command=~/.config/i3/i3bar/datetime.sh +interval=1 + +[Shutdown] +full_text= +command=~/.config/i3/i3bar/shutdown.sh -c -p rofi diff --git a/bin/screenlock.sh b/bin/screenlock.sh new file mode 100755 index 0000000..40868e7 --- /dev/null +++ b/bin/screenlock.sh @@ -0,0 +1,4 @@ +#!/bin/bash +scrot /tmp/screenshot.png +convert /tmp/screenshot.png -blur 0x5 /tmp/screenshotblur.png +i3lock -i /tmp/screenshotblur.png