From 352b894ce2d8f0ab66137b5454fd01c2f7bb133b Mon Sep 17 00:00:00 2001 From: TuDatTr Date: Wed, 14 Aug 2019 22:05:24 +0200 Subject: [PATCH] Added dunst --- config/.Xdefaults | 5 + config/.config/dunst/dunstrc | 323 +++++++++++++++++++++++++++ config/.config/i3/config | 9 +- config/.local/share/ranger/bookmarks | 2 +- config/.scripts/i3lock.py | 1 + config/.scripts/language_switch.sh | 19 ++ config/.scripts/lock.sh | 2 + config/.ssh/config | 12 +- vim/.vim/ftplugin/html.vim | 2 + vim/.vim/plugin/basics.vim | 6 +- vim/.vim/plugin/remaps.vim | 2 +- vim/.vim/spell/de.utf-8.add | 14 ++ vim/.vim/spell/de.utf-8.add.spl | Bin 10138 -> 10297 bytes zsh/.zshrc | 2 - 14 files changed, 389 insertions(+), 10 deletions(-) create mode 100644 config/.config/dunst/dunstrc create mode 100755 config/.scripts/language_switch.sh create mode 100755 config/.scripts/lock.sh create mode 100644 vim/.vim/ftplugin/html.vim diff --git a/config/.Xdefaults b/config/.Xdefaults index c09ddc3..9528eca 100644 --- a/config/.Xdefaults +++ b/config/.Xdefaults @@ -7,5 +7,10 @@ urxvt*scrollBar: false ! Plugins URxvt.perl-ext: default,matcher,resize-font,tabbed + +! Matcher URxvt.url-launcher: /usr/bin/xdg-open URxvt.matcher.button: 1 + +! Tabs +URxvt.tabbed.new-button: false diff --git a/config/.config/dunst/dunstrc b/config/.config/dunst/dunstrc new file mode 100644 index 0000000..7eabf8a --- /dev/null +++ b/config/.config/dunst/dunstrc @@ -0,0 +1,323 @@ +# From https://github.com/addy-dclxvi/almighty-dotfiles + +[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 = 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 = "250x-50-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 = 4 + + # Padding between text and separator. + padding = 16 + + # Horizontal padding. + horizontal_padding = 16 + + # Defines width in pixels of frame around the notification window. + # Set to 0 to disable. + frame_width = 2 + + # Defines color of the frame around the notification window. + frame_color = "#2f343f" + + # 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. + idle_threshold = 120 + + ### Text ### + + font = Roboto 8 + + # The spacing between lines. If the height is smaller than the + # font height, it will get raised to the font height. + line_height = 4 + + # Possible values are: + # full: Allow a small subset of html markup in notifications: + # bold + # italic + # strikethrough + # underline + # + # For a complete reference see + # . + # + # 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 + # Markup is allowed + format = "%s\n%b" + + # Alignment of message text. + # Possible values are "left", "center" and "right". + alignment = left + + # 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 + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Merge multiple notifications with the same content + stack_duplicates = true + + # Hide the count of merged notifications with the same content + hide_duplicate_count = true + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + ### Icons ### + + # Align icons left/right/off + icon_position = off + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 32 + + # Paths to default icons. + icon_folders = /usr/share/icons/Arc/status/16/:/usr/share/icons/Arc/devices/16/ + + ### 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 + + ### 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 + +# 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+space + + # Close all notifications. + close_all = ctrl+shift+space + + # 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+grave + + # Context menu. + context = ctrl+shift+period + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#2f343f" + foreground = "#f5f8f6" + timeout = 2 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + background = "#2f343f" + foreground = "#f5f8f6" + timeout = 4 + # Icon for notifications with normal urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_critical] + background = "#2f343f" + foreground = "#f5f8f6" + frame_color = "#e3788f" + 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", "summary", "body", "icon", "category", +# "msg_urgency" and you can override the "timeout", "urgency", "foreground", +# "background", "new_icon" and "format". +# Shell-like globbing will get expanded. +# +# 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. + +#[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 + +#[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 +# +# vim: ft=cfg + diff --git a/config/.config/i3/config b/config/.config/i3/config index 1c4827f..e5bb036 100644 --- a/config/.config/i3/config +++ b/config/.config/i3/config @@ -106,7 +106,8 @@ exec --no-startup-id udiskie exec --no-startup-id conky -c ~/.conky/syclo-crimson-bottomleft.conkyrc exec --no-startup-id urxvtd exec --no-startup-id synergyc -f --no-tray --debug INFO --name genesis --enable-crypto 192.168.178.38:24800 -exec --no-startup-id xss-lock -- python ~/.scripts/i3lock.py +exec --no-startup-id dunst +exec --no-startup-id ~/.scripts/language_switch.sh exec --no-startup-id /home/tuan/workspace/go/monthlyLedger/main /home/tuan/Templates/ledger/* ############################################################################### @@ -132,9 +133,9 @@ bindsym XF86MonBrightnessUp exec "xbacklight -inc 10; notify-send 'brightness up bindsym XF86MonBrightnessDown exec "xbacklight -dec 10; notify-send 'brightness down'" # Pulse Audio controls -bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% -bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% -bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle +bindsym XF86AudioRaiseVolume exec --no-startup-id "pactl set-sink-volume 0 +5%; notify-send 'sound up'" +bindsym XF86AudioLowerVolume exec --no-startup-id "pactl set-sink-volume 0 -5%; notify-send 'sound down'" +bindsym XF86AudioMute exec --no-startup-id "pactl set-sink-mute 0 toggle; notify-end 'sound muted'" bindsym XF86AudioPlay exec "playerctl play-pause; cmus-remote -u" bindsym XF86AudioStop exec "playerctl stop; cmus-remote -s" bindsym XF86AudioNext exec "playerctl next; cmus-remote -n" diff --git a/config/.local/share/ranger/bookmarks b/config/.local/share/ranger/bookmarks index c6ad130..b0de2bc 100644 --- a/config/.local/share/ranger/bookmarks +++ b/config/.local/share/ranger/bookmarks @@ -5,6 +5,6 @@ m:/run/media/tuan a:/home/tuan/Documents/Arbeit l:/home/tuan/Local c:/home/tuan/workspace_l/Projects/Angular/favorites -':/home/tuan/.scripts +':/run/media/tuan/UWU t:/home/tuan/Templates w:/home/tuan/workspace_l/Projects diff --git a/config/.scripts/i3lock.py b/config/.scripts/i3lock.py index aaddcaa..f0d9c3f 100755 --- a/config/.scripts/i3lock.py +++ b/config/.scripts/i3lock.py @@ -26,6 +26,7 @@ def pixelate(): Image.NEAREST) image.save('/tmp/i3lock.png') + os.chmod('/tmp/i3lock.png', 0o666) print('pixelate: {}'.format(time.time() - pxl_time)) diff --git a/config/.scripts/language_switch.sh b/config/.scripts/language_switch.sh new file mode 100755 index 0000000..f82b0d5 --- /dev/null +++ b/config/.scripts/language_switch.sh @@ -0,0 +1,19 @@ +#!/bin/bash +KBD=""; +oldKBD=""; +while : +do + oldKBD="$KBD"; + case "$(xset -q | grep -A 0 'LED' | cut -c59-67)" in + "00000000") + KBD="English (US)" ;; + "00001000") + KBD="Deutsch" ;; + *) KBD="unknown" ;; + esac + + if [ "$KBD" != "$oldKBD" ]; then + notify-send "$KBD"; + fi + sleep 1; +done diff --git a/config/.scripts/lock.sh b/config/.scripts/lock.sh new file mode 100755 index 0000000..ee9cd5a --- /dev/null +++ b/config/.scripts/lock.sh @@ -0,0 +1,2 @@ +#!/bin/bash +/usr/bin/python /home/tuan/.scripts/i3lock.py; diff --git a/config/.ssh/config b/config/.ssh/config index 5e84ee1..63787d9 100644 --- a/config/.ssh/config +++ b/config/.ssh/config @@ -10,6 +10,12 @@ Host helios User infra IdentityFile /mnt/veracrypt1/fse +Host www + HostName 132.252.238.16 + Port 22 + User infra + IdentityFile /mnt/veracrypt1/fse + Host infinity HostName mos4.de Port 22 @@ -34,4 +40,8 @@ Host gitlab.com User git IdentityFile /mnt/veracrypt1/git - +Host goldi + HostName mos4.de + Port 22 + User goldi + IdentityFile /mnt/veracrypt1/goldi diff --git a/vim/.vim/ftplugin/html.vim b/vim/.vim/ftplugin/html.vim new file mode 100644 index 0000000..dfd318a --- /dev/null +++ b/vim/.vim/ftplugin/html.vim @@ -0,0 +1,2 @@ +"html files +iabbrev diff --git a/vim/.vim/plugin/basics.vim b/vim/.vim/plugin/basics.vim index 5e4d281..a827daf 100644 --- a/vim/.vim/plugin/basics.vim +++ b/vim/.vim/plugin/basics.vim @@ -15,7 +15,7 @@ set tabstop=4 set shiftwidth=4 set softtabstop=4 -"" New window positions +" New window positions set splitbelow set splitright @@ -24,3 +24,7 @@ set statusline=%F%m%r%h%w[%L][%{&ff}]%y[%p%%][%04l,%04v] " Window Management let &winheight = &lines * 7 / 10 + +" Path +set path+=** +set wildmenu diff --git a/vim/.vim/plugin/remaps.vim b/vim/.vim/plugin/remaps.vim index dcf4504..5a3fd98 100644 --- a/vim/.vim/plugin/remaps.vim +++ b/vim/.vim/plugin/remaps.vim @@ -8,7 +8,7 @@ nnoremap K :bp nnoremap :earlier nnoremap :later noremap Y "+y -noremap :tabedit +noremap :tabedit **/* noremap :ter noremap == ==j nmap 0 ^ diff --git a/vim/.vim/spell/de.utf-8.add b/vim/.vim/spell/de.utf-8.add index 84fd866..95acf2a 100644 --- a/vim/.vim/spell/de.utf-8.add +++ b/vim/.vim/spell/de.utf-8.add @@ -791,3 +791,17 @@ SEP Points Credit Wirtschaftsinformatik +Schlüsselanhänger +Teilnahmebeitrag +selbstbewirtschaftet +Finanzreferat +dringstens +Schulungstermine +Unipolitik +Rademaker +Özlem +Yilmaz +Rümeysa +Orhan +AStAs +Brinda diff --git a/vim/.vim/spell/de.utf-8.add.spl b/vim/.vim/spell/de.utf-8.add.spl index 5335aafa84d994239d067bdb28d9aba2c2ac82d6..9f46322a994897c59151bd7b4e248badc71cef3c 100644 GIT binary patch literal 10297 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