diff --git a/.Xresources b/.Xresources index 51f534c..4cf13ec 100644 --- a/.Xresources +++ b/.Xresources @@ -61,12 +61,18 @@ urxvt*highlightSelection: true urxvt*colorMode: on ! black -*.color0: #263238 -*.color8: #37474f +*.color0: #333638 + +!white +*.color15: #eceff1 + +! gray +*.color7: #8b9396 +*.color8: #475760 ! red -*.color1: #ff9800 -*.color9: #ffa74d +*.color1: #ff3f00 +*.color9: #ef5345 ! green *.color2: #8bc34a @@ -77,20 +83,16 @@ urxvt*colorMode: on *.color11: #ffa000 ! blue -*.color4: #03a9f4 -*.color12: #81d4fa +*.color4: #0266f4 +*.color12: #3f86da ! magenta -*.color5: #e91e63 -*.color13: #A56ECC +*.color5: #cc17cc +*.color13: #a56ecC ! cyan -*.color6: #009688 -*.color14: #26a69a - -! white -*.color7: #cfd8dc -*.color15: #eceff1 +*.color6: #10aeba +*.color14: #5ddae2 !----------------------------- diff --git a/.config/Trolltech.conf b/.config/Trolltech.conf deleted file mode 100644 index e148896..0000000 --- a/.config/Trolltech.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Qt] -style=GTK+ diff --git a/.config/compton.conf b/.config/compton.conf index b8adc42..3c17bf4 100644 --- a/.config/compton.conf +++ b/.config/compton.conf @@ -29,7 +29,7 @@ alpha-step = 0.06; # XRender backend: Step size for alpha pictures. Increasin #inactive-dim-fixed = true; # Do not let dimness adjust based on window opacity. inactive-opacity-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ]; blur-background = true; # Blur background of transparent windows. -blur-background-exclude = [ "class_g = 'Peek'" ]; +blur-background-exclude = [ "class_g = 'Peek'", "class_g = 'Onboard'", "class_g = 'slop'" ]; blur-background-frame = false; # Blur background of opaque windows with transparent # frames as well. blur-background-fixed = true; # Do not let blur radius adjust based on window opacity. @@ -51,7 +51,7 @@ backend = "glx" # Backend to use: "xrender" or "glx". GLX backend is typical # much faster but depends on a sane driver. mark-wmwin-focused = true; # Try to detect WM windows and mark them as active. mark-ovredir-focused = true; # Mark all non-WM but override-redirect windows active (e.g. menus). -use-ewmh-active-win = false; # Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused +use-ewmh-active-win = true; # Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused # instead of using FocusIn/Out events. Usually more reliable but # depends on a EWMH-compliant WM. detect-rounded-corners = false; # Detect rounded corners and treat them as rectangular when --shadow-ignore-shaped is on. diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc index ef10c4d..9ad4a75 100644 --- a/.config/dunst/dunstrc +++ b/.config/dunst/dunstrc @@ -11,7 +11,7 @@ # . # If markup is not allowed, those tags will be stripped out of the # message. - allow_markup = yes + markup = yes # The format of the message. Possible variables are: # %a appname @@ -143,15 +143,14 @@ # Browser for opening urls in context menu. browser = /usr/bin/chromium - # Align icons left/right/off - icon_position = left + # Align icons left/right/off + icon_position = off # Paths to default icons. icon_folders = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ -[frame] - width = 3 - color = "#404552" + frame_width = 3 + frame_color = "#404552" [shortcuts] diff --git a/.config/fontconfig/fonts.conf b/.config/fontconfig/fonts.conf index 612be53..911a4a5 100644 --- a/.config/fontconfig/fonts.conf +++ b/.config/fontconfig/fonts.conf @@ -1,24 +1,41 @@ - - serif - - Noto Serif - - - - sans-serif - - Noto Sans - - - - monospace - - Sauce Code Pro - - + + + sans-serif + + + Noto Sans + Noto Color Emoji + + + + + serif + + + Noto Serif + Noto Color Emoji + + + + + monospace + + + Sauce Code Pro + Noto Color Emoji + + + + + Apple Color Emoji + + + Noto Color Emoji + + hintfull diff --git a/.config/git/config b/.config/git/config index 7fa64cc..52e1148 100644 --- a/.config/git/config +++ b/.config/git/config @@ -2,13 +2,13 @@ name = Joe Groocock email = frebib@gmail.com signingkey = CFBB6A86 - [commit] - gpgsign = true + gpgsign = true [color] ui = auto [alias] - verbs = !git log --pretty=format:'%s' | cut -d \" \" -f 1 | sort | uniq -c | sort -nr + verbs = !git log --pretty=format:'%s' | cut -d \" \" -f 1 | sort | uniq -c | sort -nr + pushall = !git remote | xargs -L1 git push [rebase] autoStash = true [push] @@ -20,3 +20,13 @@ rebase = true [core] autocrlf = input + excludesfile = /home/frebib/.config/git/gitignore +[diff] + algorithm = patience +[sendemail] + from = Joe Groocock + smtpserver = smtp.gmail.com + smtpuser = frebib@gmail.com + smtpencryption = tls + smtpserverport = 587 + suppresscc = self diff --git a/.config/git/gitignore b/.config/git/gitignore new file mode 100644 index 0000000..4ce3357 --- /dev/null +++ b/.config/git/gitignore @@ -0,0 +1,2 @@ +.idea/ +cmake-build-*/ diff --git a/.config/gtk-3.0/gtk.css b/.config/gtk-3.0/gtk.css index e21c045..e3723eb 100644 --- a/.config/gtk-3.0/gtk.css +++ b/.config/gtk-3.0/gtk.css @@ -1,5 +1,5 @@ VteTerminal, TerminalScreen, vte-terminal { - padding: 4px; + padding: 6px; } diff --git a/.config/i3/blocks/config b/.config/i3/blocks/config index 7e51c13..4ab750c 100644 --- a/.config/i3/blocks/config +++ b/.config/i3/blocks/config @@ -41,15 +41,14 @@ separator_block_width=12 #interval=persist [volume] -instance=Master -interval=10 +interval=persist signal=10 [separator] [iface] label= -interval=300 +interval=60 signal=15 [separator] @@ -57,12 +56,13 @@ signal=15 [updates] label= interval=600 +signal=5 [separator] [cpu_usage] label= -interval=2 +interval=persist [separator] diff --git a/.config/i3/blocks/cpu_usage b/.config/i3/blocks/cpu_usage index c0d659a..1703296 100755 --- a/.config/i3/blocks/cpu_usage +++ b/.config/i3/blocks/cpu_usage @@ -1,53 +1,31 @@ -#!/usr/bin/perl -# -# Copyright 2014 Pierre Mavro -# Copyright 2014 Vivien Didelot -# Copyright 2014 Andreas Guldstrand -# -# Licensed under the terms of the GNU GPL v3, or any later version. +#!/bin/bash +# by Paul Colby (http://colby.id.au), no rights reserved ;) +# https://github.com/Leo-G/DevopsWiki/wiki/How-Linux-CPU-Usage-Time-and-Percentage-is-calculated -use strict; -use warnings; -use utf8; -use Getopt::Long; +PREV_TOTAL=0 +PREV_IDLE=0 -# default values -my $t_warn = 50; -my $t_crit = 80; -my $cpu_usage = -1; +while true; do + # Get the total CPU statistics, discarding the 'cpu ' prefix. + CPU=(`sed -n 's/^cpu\s//p' /proc/stat`) + IDLE=${CPU[3]} # Just the idle CPU time. -sub help { - print "Usage: cpu_usage [-w ] [-c ]\n"; - print "-w : warning threshold to become yellow\n"; - print "-c : critical threshold to become red\n"; - exit 0; -} + # Calculate the total CPU time. + TOTAL=0 + for VALUE in "${CPU[@]}"; do + let "TOTAL=$TOTAL+$VALUE" + done -GetOptions("help|h" => \&help, - "w=i" => \$t_warn, - "c=i" => \$t_crit); + # Calculate the CPU usage since we last checked. + let "DIFF_IDLE=$IDLE-$PREV_IDLE" + let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL" + let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10" + echo -e "$DIFF_USAGE%\n$DIFF_USAGE%" -# Get CPU usage -$ENV{LC_ALL}="en_US"; # if mpstat is not run under en_US locale, things may break, so make sure it is -open (MPSTAT, 'mpstat 1 1 |') or die 'Cannot run mpstat'; -while () { - if (/^.*\s+(\d+\.\d+)\s+$/) { - $cpu_usage = 100 - $1; # 100% - %idle - last; - } -} -close(MPSTAT); + # Remember the total and idle CPU times for the next check. + PREV_TOTAL="$TOTAL" + PREV_IDLE="$IDLE" -#$cpu_usage eq -1 and die 'Can\'t find CPU information'; - -# Print short_text, full_text -printf "%.0f%%\n"x2, $cpu_usage; - -# Print color, if needed -if ($cpu_usage >= $t_crit) { - print "#FF0000\n"; -} elsif ($cpu_usage >= $t_warn) { - print "#FFCB00\n"; -} - -exit 0; + # Wait before checking again. + sleep 1 +done diff --git a/.config/i3/blocks/iface b/.config/i3/blocks/iface index 48e672e..4b49830 100755 --- a/.config/i3/blocks/iface +++ b/.config/i3/blocks/iface @@ -51,6 +51,6 @@ LOCIP=$(ip addr show $IF | perl -n -e "/$AF ([^\/]+).* scope global/ && print \$ #------------------------------------------------------------------------ case $BLOCK_BUTTON in - 1) echo $(curl -s http://whatismijnip.nl | cut -d " " -f 5);; + 1) curl -s https://api.ipify.org;; *) echo "$LOCIP";; esac diff --git a/.config/i3/blocks/updates b/.config/i3/blocks/updates index cfaaa21..9da2fb7 100755 --- a/.config/i3/blocks/updates +++ b/.config/i3/blocks/updates @@ -1,13 +1,31 @@ -#!/bin/python2 +#!/bin/bash +set -e -import commands -import os +for p in pacaur yaourt pacman; do + if $p --version &>/dev/null; then + PAC="$p" + break; + fi +done -button = os.environ.get('BLOCK_BUTTON') -if button == '1': - os.system("i3-sensible-terminal -r i3blocks-update-term -e 'pacaur -Syu'") +if [ -z "$PAC" ]; then + >&2 echo "Error: No Arch package manager found?" +fi -updates = commands.getstatusoutput("/usr/bin/checkupdates | wc -l")[1] -if updates and updates != '0': - print updates - print updates +if [ "$BLOCK_BUTTON" == 1 ]; then + nohup i3-sensible-terminal -r i3blocks-update-term -e "sh -c '$PAC -Syu; pkill -RTMIN+5 i3blocks'" &>/dev/null & + disown +fi + +if [ $p = "pacman" ]; then + exec 3< <(checkupdates) +else + exec 3< <({ checkupdates & cower -u & }) +fi + +count="$(wc -l <&3)" + +if [ -n "$count" -a "$count" -gt 0 ]; then + echo $count + echo $count +fi diff --git a/.config/i3/blocks/volume b/.config/i3/blocks/volume index f33b059..b8594e1 100755 --- a/.config/i3/blocks/volume +++ b/.config/i3/blocks/volume @@ -1,93 +1,182 @@ #!/bin/bash -# Copyright (C) 2014 Julien Bonjean -# Copyright (C) 2014 Alexander Keller +# Displays the default device, volume, and mute status for i3blocks -# 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. +AUDIO_HIGH_SYMBOL=' ' -# 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. +AUDIO_MED_THRESH=59 +AUDIO_MED_SYMBOL=' ' -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +AUDIO_LOW_THRESH=0 +AUDIO_LOW_SYMBOL=' ' -#------------------------------------------------------------------------ +AUDIO_MUTED_SYMBOL='X' -# The second parameter overrides the mixer selection -# For PulseAudio users, 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 -MIXER="default" -[ -n "$(lsmod | grep pulse)" ] && MIXER="pulse" -[ -n "$(lsmod | grep jack)" ] && MIXER="jackplug" -MIXER="${2:-$MIXER}" +AUDIO_INTERVAL=5 -# 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` -SCONTROL="${BLOCK_INSTANCE:-$(amixer -D $MIXER scontrols | - sed -n "s/Simple mixer control '\([A-Za-z ]*\)',0/\1/p" | - head -n1 - )}" +DEFAULT_COLOR="#ffffff" +MUTED_COLOR="#a0a0a0" -# 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) -STEP="${1:-2%}" +LONG_FORMAT=0 +SHORT_FORMAT=3 +USE_PERCENT=0 +USE_ALSA_NAME=0 +USE_DESCRIPTION=0 +SUBSCRIBE=1 -#------------------------------------------------------------------------ +while getopts F:Sf:padH:M:L:X:T:t:C:c:i:m:s:h opt; do + case "$opt" in + S) SUBSCRIBE=1 ;; + F) LONG_FORMAT="$OPTARG" ;; + f) SHORT_FORMAT="$OPTARG" ;; + p) USE_PERCENT=0 ;; + a) USE_ALSA_NAME=1 ;; + d) USE_DESCRIPTION=1 ;; + H) AUDIO_HIGH_SYMBOL="$OPTARG" ;; + M) AUDIO_MED_SYMBOL="$OPTARG" ;; + L) AUDIO_LOW_SYMBOL="$OPTARG" ;; + X) AUDIO_MUTED_SYMBOL="$OPTARG" ;; + T) AUDIO_MED_THRESH="$OPTARG" ;; + t) AUDIO_LOW_THRESH="$OPTARG" ;; + C) DEFAULT_COLOR="$OPTARG" ;; + c) MUTED_COLOR="$OPTARG" ;; + i) AUDIO_INTERVAL="$OPTARG" ;; + m) MIXER="$OPTARG" ;; + s) SCONTROL="$OPTARG" ;; + h) printf \ +"Usage: volume-pulseaudio [-S] [-F format] [-f format] [-p] [-a|-d] [-H symb] [-M symb] + [-L symb] [-X symb] [-T thresh] [-t thresh] [-C color] [-c color] [-i inter] + [-m mixer] [-s scontrol] [-h] +Options: +-F, -f\tOutput format (-F long format, -f short format) to use, amongst: +\t0\t symb vol [index:name]\t (default long) +\t1\t symb vol [name] +\t2\t symb vol [index]\t (default short) +\t3\t symb vol +-S\tSubscribe to volume events (requires persistent block, always uses long format) +-p\tOmit the percent sign (%%) in volume +-a\tUse ALSA name if possible +-d\tUse device description instead of name if possible +-H\tSymbol to use when audio level is high. Default: '$AUDIO_HIGH_SYMBOL' +-M\tSymbol to use when audio level is medium. Default: '$AUDIO_MED_SYMBOL' +-L\tSymbol to use when audio level is low. Default: '$AUDIO_LOW_SYMBOL' +-X\tSymbol to use when audio is muted. Default: '$AUDIO_MUTED_SYMBOL' +-T\tThreshold for medium audio level. Default: $AUDIO_MED_THRESH +-t\tThreshold for low audio level. Default: $AUDIO_LOW_THRESH +-C\tColor for non-muted audio. Default: $DEFAULT_COLOR +-c\tColor for muted audio. Default: $MUTED_COLOR +-i\tInterval size of volume increase/decrease. Default: $AUDIO_INTERVAL +-m\tUse the given mixer. +-s\tUse the given scontrol. +-h\tShow this help text +" && exit 0;; + esac +done -capability() { # Return "Capture" if the device is a capture device - amixer -D $MIXER get $SCONTROL | - sed -n "s/ Capabilities:.*cvolume.*/Capture/p" -} - -volume() { - amixer -D $MIXER get $SCONTROL $(capability) -} - -format() { - perl_filter='if (/.*\[(\d+)%\] (\[(-?\d+.\d+)dB\] )?\[(on|off)\]/)' - perl_filter+='{CORE::say $4 eq "off" ? "-1" : "' - perl_filter+=$([[ $STEP = *dB ]] && echo '$3' || echo '$1') - perl_filter+='"; exit}' - perl -ne "$perl_filter" -} - -#------------------------------------------------------------------------ - -case $BLOCK_BUTTON in - 1) pavucontrol &>/dev/null &;; - 2) ~/.config/i3/cycleaudio.py;; - 3) amixer -q -D $MIXER sset $SCONTROL $(capability) toggle ;; # right click, mute/unmute - 4) amixer -q -D $MIXER sset $SCONTROL $(capability) ${STEP}+ unmute ;; # scroll up, increase - 5) amixer -q -D $MIXER sset $SCONTROL $(capability) ${STEP}- unmute ;; # scroll down, decrease -esac - -#------------------------------------------------------------------------ - -VOL=$(volume | format) - -ACTIVE=$(pacmd list-sinks | grep '* index' | awk -F": " '{print $2}') - -if pactl list short sinks | grep -q \^$ACTIVE".*Yeti"; then - printf "" -elif pactl list short sinks | grep -q \^$ACTIVE".*bluez"; then - printf " " -elif [ "$VOL" -eq -1 ]; then - printf "X" - exit 0 -elif [ "$VOL" -eq 0 ]; then - printf "" -elif [ "$VOL" -gt 59 ]; then - printf "" -else - printf "" +if [[ -z "$MIXER" ]] ; then + MIXER="default" + if amixer -D pulse info >/dev/null 2>&1 ; then + MIXER="pulse" + fi fi -printf " $VOL" +if [[ -z "$SCONTROL" ]] ; then + SCONTROL=$(amixer -D "$MIXER" scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1) +fi + +CAPABILITY=$(amixer -D $MIXER get $SCONTROL | sed -n "s/ Capabilities:.*cvolume.*/Capture/p") + + +function move_sinks_to_new_default { + DEFAULT_SINK=$1 + pacmd list-sink-inputs | grep index: | grep -o '[0-9]\+' | while read SINK + do + pacmd move-sink-input $SINK $DEFAULT_SINK + done +} + +function set_default_playback_device_next { + inc=${1:-1} + num_devices=$(pacmd list-sinks | grep -c index:) + sink_arr=($(pacmd list-sinks | grep index: | grep -o '[0-9]\+')) + default_sink_index=$(( $(pacmd list-sinks | grep index: | grep -no '*' | grep -o '^[0-9]\+') - 1 )) + default_sink_index=$(( ($default_sink_index + $num_devices + $inc) % $num_devices )) + default_sink=${sink_arr[$default_sink_index]} + pacmd set-default-sink $default_sink + move_sinks_to_new_default $default_sink +} + +case "$BLOCK_BUTTON" in + 1) set_default_playback_device_next ;; + 2) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY toggle ;; + 3) set_default_playback_device_next -1 ;; + 4) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_INTERVAL%+ ;; + 5) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_INTERVAL%- ;; +esac + +function print_format { + PERCENT="%" + [[ $USE_PERCENT == 0 ]] && PERCENT="" + case "$1" in + 1) echo "$SYMBOL$VOL$PERCENT [$NAME]" ;; + 2) echo "$SYMBOL$VOL$PERCENT [$INDEX]";; + 3) echo "$SYMBOL$VOL$PERCENT" ;; + *) echo "$SYMBOL$VOL$PERCENT [$INDEX:$NAME]" ;; + esac +} + +function print_block { + for name in INDEX NAME VOL MUTED; do + read $name + done < <(pacmd list-sinks | grep "index:\|name:\|volume: front\|muted:" | grep -A3 '*') + INDEX=$(echo "$INDEX" | grep -o '[0-9]\+') + VOL=$(echo "$VOL" | grep -o "[0-9]*%" | head -1 ) + VOL="${VOL%?}" + + NAME=$(echo "$NAME" | sed \ +'s/.*<.*\.\(.*\)>.*/\1/; t;'\ +'s/.*<\(.*\)>.*/\1/; t;'\ +'s/.*/unknown/') + + if [[ $USE_ALSA_NAME == 1 ]] ; then + ALSA_NAME=$(pacmd list-sinks |\ +awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\ +grep "alsa.name\|alsa.mixer_name" |\ +head -n1 |\ +sed 's/.*= "\(.*\)".*/\1/') + NAME=${ALSA_NAME:-$NAME} + elif [[ $USE_DESCRIPTION == 1 ]] ; then + DESCRIPTION=$(pacmd list-sinks |\ +awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\ +grep "device.description" |\ +head -n1 |\ +sed 's/.*= "\(.*\)".*/\1/') + NAME=${DESCRIPTION:-$NAME} + fi + + if [[ $MUTED =~ "no" ]] ; then + SYMBOL=$AUDIO_HIGH_SYMBOL + [[ $VOL -le $AUDIO_MED_THRESH ]] && SYMBOL=$AUDIO_MED_SYMBOL + [[ $VOL -le $AUDIO_LOW_THRESH ]] && SYMBOL=$AUDIO_LOW_SYMBOL + COLOR=$DEFAULT_COLOR + else + SYMBOL=$AUDIO_MUTED_SYMBOL + COLOR=$MUTED_COLOR + VOL="" + fi + +# if [[ $SUBSCRIBE == 1 ]] ; then +# print_format "$LONG_FORMAT" +# else +# print_format "$LONG_FORMAT" + print_format "$SHORT_FORMAT" +# echo "$COLOR" +# fi +} + +print_block +if [[ $SUBSCRIBE == 1 ]] ; then + while read -r EVENT; do + print_block + done < <(pactl subscribe | stdbuf -oL grep change) +fi diff --git a/.config/i3/config b/.config/i3/config index 183a1f2..f00c8b6 100644 --- a/.config/i3/config +++ b/.config/i3/config @@ -118,12 +118,14 @@ bar { } # Window rules +for_window [class="Pinentry"] floating enable for_window [class="Pavucontrol"] floating enable for_window [class="Blueman-manager"] floating enable for_window [window_role="floating-term"] floating enable +for_window [window_role="pop-up"] floating enable for_window [window_role="i3blocks-update-term"] floating enable for_window [window_role="i3blocks-clock-term"] floating enable -for_window [title="rofi"] floating enable +for_window [title="^rofi$"] floating enable new_window pixel 5 new_float none @@ -136,7 +138,7 @@ focus_follows_mouse yes # keybindings bindsym $mod+Shift+j reload -bindsym $mod+Shift+p restart +#bindsym $mod+Shift+p restart bindsym $mod+c exec chromium bindsym $mod+v exec "i3-sensible-terminal -e \\"$SHELL -c vim;$SHELL\\" bindsym $mod+Ctrl+v exec "i3-sensible-terminal -r floating-term -e \\"$SHELL -c vim;$SHELL\\" @@ -148,10 +150,12 @@ bindsym $mod+Ctrl+Shift+Return exec i3-sensible-terminal -r floating-term --ge bindsym $mod+l exec ~/.config/i3/lock.sh # -fg "#CCD3DAE3" -bg "#CC383C4A" -hlbg "#CC5294E2" bindsym $mod+space exec "pkill rofi; rofi -show run -sidebar-mode -terminal i3-sensible-terminal -normal-window" +bindsym $mod+Shift+p exec rofi-pass +bindsym $mod+Shift+e exec rofi-emoji bindsym --release Print exec imgur-screenshot bindsym --release $mod+Print exec imgur-screenshot -f bindsym $mod+Mod1+space exec --no-startup-id ~/.config/i3/cycleaudio.py && pkill -RTMIN+10 i3blocks -bindsym $mod+numbersign exec notify-send "$(xclip -o | gpg --decrypt 2>&1)" +bindsym $mod+numbersign exec "termite -e 'sh -c xclip\ -o\ |\ gpg\ --decrypt\ 2>&1\ &&\ read'" bindsym $mod+g exec "LINK=$(gist -PRpc); notify-send -c transfer \\"$LINK\\"" # Media player controls @@ -160,30 +164,29 @@ bindsym XF86AudioPause exec --no-startup-id mpc pause bindsym XF86AudioStop exec --no-startup-id mpc stop bindsym XF86AudioNext exec --no-startup-id mpc next bindsym XF86AudioPrev exec --no-startup-id mpc previous -bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +2% && pkill -RTMIN+10 i3blocks -bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -2% && pkill -RTMIN+10 i3blocks -bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && pkill -RTMIN+10 i3blocks -exec --no-startup-id "ip monitor | while read line; do pkill -RTMIN+15 i3blocks; done" +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +1000 +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -1000 +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle +bindsym XF86MonBrightnessUp exec xbacklight -inc 5 && pkill -RTMIN+12 i3blocks +bindsym XF86MonBrightnessDown exec xbacklight -dec 5 && pkill -RTMIN+12 i3blocks +exec --no-startup-id "ip monitor | while read; do pkill -RTMIN+15 i3blocks; done" # app launch shortcuts exec --no-startup-id ~/.fehbg exec --no-startup-id ~/.config/i3/disable-standby-fs.py -exec xautolock -time 5 -locker ~/.config/i3/lock.sh +exec --no-startup-id xautolock -time 5 -locker ~/.config/i3/lock.sh -nocloseout -nocloseerr # startup programs exec --no-startup-id pulseaudio -exec --no-startup-id dropbox -exec --no-startup-id insync start -exec --no-startup-id nm-applet +exec --no-startup-id nextcloud exec --no-startup-id blueman-applet exec --no-startup-id redshift exec --no-startup-id xbindkeys exec --no-startup-id onboard -exec --no-startup-id ~/.local/share/surface-scripts/rotationd exec --no-startup-id compton -b --config ~/.config/compton.conf exec --no-startup-id chromium --no-startup-window +exec i3-msg 'workspace 1; exec sleep 2 && chromium' exec i3-msg 'workspace 2; exec i3-sensible-terminal' -exec i3-msg 'workspace 3; exec sleep 2 && chromium' # vim:ft=i3 diff --git a/.config/i3/disable-standby-fs.py b/.config/i3/disable-standby-fs.py old mode 100644 new mode 100755 index b8ca13f..13b2288 --- a/.config/i3/disable-standby-fs.py +++ b/.config/i3/disable-standby-fs.py @@ -16,16 +16,16 @@ args = parser.parse_args() def on_fullscreen_mode(i3, e): if e.container.props.fullscreen_mode: - call(['xset', 's', 'off']) - call(['xset', '-dpms']) + call(['xautolock', '-disable']) + print("disabling autolock") else: - call(['xset', 's', 'on']) - call(['xset', '+dpms']) + call(['xautolock', '-enable']) + print("enabling autolock") def on_window_close(i3, e): if e.container.props.fullscreen_mode: - call(['xset', 's', 'on']) - call(['xset', '+dpms']) + call(['xautolock', '-enable']) + print("enabling autolock") i3.on('window::fullscreen_mode', on_fullscreen_mode) i3.on('window::close', on_window_close) diff --git a/.config/i3/lock.sh b/.config/i3/lock.sh index 53217ca..43c383c 100755 --- a/.config/i3/lock.sh +++ b/.config/i3/lock.sh @@ -5,9 +5,6 @@ tmpbg='/tmp/screen.png' (( $# )) && { icon=$1; } -# screenshot -scrot "$tmpbg" - PX=0 PY=0 # lockscreen image info @@ -25,17 +22,19 @@ SROY=$(echo $RES | cut -d'x' -f 2 | cut -d'+' -f 3) # y offset PX=$(($SROX + $SRX/2 - $RX/2)) PY=$(($SROY + $SRY/2 - $RY/2)) +# screenshot, pixelise and overlay +maim | convert - -scale 5% -scale 2000% $icon -geometry +$PX+$PY -composite -matte $tmpbg -# pixelize and add lock icon -convert $tmpbg -scale 5% -scale 2000% $tmpbg -convert $tmpbg $icon -geometry +$PX+$PY -composite -matte $tmpbg - -playing=$(mpc status | grep playing | wc -l) -[[ $playing == 1 ]] && mpc pause +if command mpc 2>&1 1>/dev/null; then + playing=$(mpc status | grep playing | wc -l) + [[ $playing == 1 ]] && mpc pause +fi i3lock -i "$tmpbg" -n -e -[[ $playing == 1 ]] && mpc play +if command mpc 2>&1 1>/dev/null; then + [[ $playing == 1 ]] && mpc play +fi rm "$tmpbg" diff --git a/.config/i3/powermenu.sh b/.config/i3/powermenu.sh index ebe35d1..015327c 100755 --- a/.config/i3/powermenu.sh +++ b/.config/i3/powermenu.sh @@ -11,7 +11,7 @@ case $option in windows) windows=`efibootmgr | grep -Po -m1 'Boot\K(\d{4}).*Windows.*' | head -c4` sudo efibootmgr -n $windows - reboot;; + systemctl reboot;; esac exit 0 diff --git a/.config/imgur-screenshot/settings.conf b/.config/imgur-screenshot/settings.conf index 776bd53..301164f 100644 --- a/.config/imgur-screenshot/settings.conf +++ b/.config/imgur-screenshot/settings.conf @@ -1,11 +1,13 @@ imgur_icon_path="$HOME/.config/imgur-screenshot/imgur.ico" +imgur_acct_key="" +imgur_secret="" login="false" log_file="$HOME/.config/imgur-screenshot/imgur-screenshot.log" credentials_file="$HOME/.config/imgur-screenshot/credentials.conf" -file_name_format="scrot-%Y-%m-%d--%H:%M:%S.png" # when using scrot, must end with .png! +file_name_format="screenshot-%Y-%m-%d-%H%M%S.png" # when using scrot, must end with .png! file_dir="$HOME/pictures/screenshots" -screenshot_select_command="scrot -s %img" -screenshot_window_command="scrot %img" +screenshot_select_command="maim -m 10 -us %img" +screenshot_window_command="maim -m 10 -uw %img" edit_command="gimp %img" edit="false" exit_on_selection_fail="true" diff --git a/.config/termite/config b/.config/termite/config index 911654b..9bdf2f1 100644 --- a/.config/termite/config +++ b/.config/termite/config @@ -11,11 +11,15 @@ background = rgba(56, 60, 74, 0.95) highlight = #5294E2 # black -color0 = #263238 -color8 = #37474f +color0 = #333638 +# white +color15 = #eceff1 +# gray +color7 = #8b9396 +color8 = #475760 # red -color1 = #ff9800 -color9 = #ffa74d +color1 = #ff3f00 +color9 = #ef5345 # green color2 = #8bc34a color10 = #9ccc65 @@ -23,16 +27,13 @@ color10 = #9ccc65 color3 = #ffc107 color11 = #ffa000 # blue -color4 = #03a9f4 -color12 = #81d4fa +color4 = #0266f4 +color12 = #81b3f9 # magenta -color5 = #e91e63 -color13 = #A56ECC +color5 = #cc17cc +color13 = #a56ecc # cyan -color6 = #009688 -color14 = #26a69a -# white -color7 = #cfd8dc -color15 = #eceff1 +color6 = #10aeba +color14 = #5ddae2 # vim: ft=dosini cms=#%s diff --git a/.config/user-dirs.dirs b/.config/user-dirs.dirs index 86e9778..aa1e19d 100644 --- a/.config/user-dirs.dirs +++ b/.config/user-dirs.dirs @@ -5,11 +5,11 @@ # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # absolute path. No other format is supported. # -XDG_DESKTOP_DIR="$HOME/desktop" +XDG_DESKTOP_DIR="$HOME/documents" XDG_DOCUMENTS_DIR="$HOME/documents" XDG_DOWNLOAD_DIR="$HOME/downloads" XDG_MUSIC_DIR="$HOME/music" XDG_PICTURES_DIR="$HOME/pictures" XDG_VIDEOS_DIR="$HOME/music" XDG_PUBLICSHARE_DIR="$HOME" -XDG_TEMPLATES_DIR="$HOME/" +XDG_TEMPLATES_DIR="$HOME" diff --git a/.config/vim/.gitignore b/.config/vim/.gitignore new file mode 100644 index 0000000..1a49755 --- /dev/null +++ b/.config/vim/.gitignore @@ -0,0 +1,6 @@ +/bundle/ +/spell/ +/swapfiles/ +/viminfo +/vim-latex +/.netrwhist diff --git a/.vim/ftplugin/javascript/config.vim b/.config/vim/ftplugin/javascript/config.vim similarity index 100% rename from .vim/ftplugin/javascript/config.vim rename to .config/vim/ftplugin/javascript/config.vim diff --git a/.vim/ftplugin/ocaml/config.vim b/.config/vim/ftplugin/ocaml/config.vim similarity index 100% rename from .vim/ftplugin/ocaml/config.vim rename to .config/vim/ftplugin/ocaml/config.vim diff --git a/.vim/ftplugin/ocaml/keybinds.vim b/.config/vim/ftplugin/ocaml/keybinds.vim similarity index 100% rename from .vim/ftplugin/ocaml/keybinds.vim rename to .config/vim/ftplugin/ocaml/keybinds.vim diff --git a/.vimrc b/.config/vim/vimrc similarity index 64% rename from .vimrc rename to .config/vim/vimrc index ef7c5a6..8174964 100644 --- a/.vimrc +++ b/.config/vim/vimrc @@ -1,53 +1,84 @@ set nocompatible " be iMproved, required +" Reconfigure Vim to be clean! +set rtp+=~/.config/vim +set directory=.,~/.config/vim +set viminfo+=n~/.config/vim/viminfo +set directory=$HOME/.config/vim/swapfiles// + syntax enable +filetype plugin on + set tabstop=4 set shiftwidth=0 " Use tabstop set softtabstop=-1 " Use tabstop set expandtab +set smarttab +set smartindent set number +set linebreak set autoindent set laststatus=2 -set mouse=a set encoding=utf-8 set background=dark -set directory=$HOME/.vim/swapfiles// +set omnifunc=syntaxcomplete#Complete +set title +set clipboard=unnamed +set wildmenu +set report=0 +set lazyredraw +set ttyfast +set autoread +set showmatch +set scrolloff=6 +set nojoinspaces + +" Autosave settings +set autowrite +autocmd InsertLeave * save + +" Search options +set hlsearch +set ignorecase +set smartcase " GVim settings set guifont=Sauce\ Code\ Pro\ 10.5 set guioptions= -" Change to dvorak-mapped keys -let g:use_dvorak = 1 +" Whitespace highlight settings +set list +set listchars=eol:$,space:.,tab:>-,trail:~,extends:>,precedes:< +highlight SpecialKey ctermfg=7 + " set the runtime path to include Vundle and initialize -set rtp+=~/.vim/bundle/Vundle.vim +set rtp+=~/.config/vim/bundle/Vundle.vim call vundle#begin() +call vundle#rc('~/.config/vim/bundle') Plugin 'VundleVim/Vundle.vim' Plugin 'Valloric/YouCompleteMe' Plugin 'scrooloose/syntastic' Plugin 'tpope/vim-sensible' -Plugin 'vim-scripts/vim-auto-save' +Plugin 'tpope/vim-fugitive' +Plugin 'tpope/vim-rhubarb' +Plugin 'tpope/vim-abolish' Plugin 'airblade/vim-gitgutter' Plugin 'ryanoasis/vim-devicons' Plugin 'vim-airline/vim-airline' Plugin 'vim-airline/vim-airline-themes' Plugin 'PotatoesMaster/i3-vim-syntax' -Plugin 'solarnz/thrift.vim' Plugin 'lervag/vimtex' +Plugin 'JamshedVesuna/vim-markdown-preview' call vundle#end() -let g:opamshare = substitute(system('opam config var share'),'\n$','','''') -execute "set rtp+=" . g:opamshare . "/merlin/vim" -execute "set rtp+=" . g:opamshare . "/vim/syntax/ocp-indent.vim" -let g:syntastic_ocaml_checkers = ['merlin'] -let g:syntastic_ignore_files = ['\m\c.(mll|mly)$'] -set omnifunc=syntaxcomplete#Complete +" Change to dvorak-mapped keys +let g:use_dvorak = 1 -" YouCompleteMe python fix -let g:ycm_server_python_interpreter = '/usr/bin/python3' +" YouCompleteMe config +let g:ycm_confirm_extra_conf = 0 " Vim-Airline config let g:Powerline_symbols = 'fancy' @@ -55,8 +86,17 @@ let g:airline_powerline_fonts = 1 let g:airline_theme='solarized' let g:airline#extensions#tabline#enabled = 1 -" vim-auto-save -let g:auto_save = 1 " enable AutoSave on Vim startup +" vim-markdown plugin +let vim_markdown_preview_toggle=0 +let vim_markdown_preview_browser='Chromium' +let vim_markdown_preview_use_xdg_open=1 +let vim_markdown_preview_github=1 + + +" Disable mouse +set mouse=nicr +nnoremap +nnoremap let mapleader="\" " Unbind arrow keys @@ -108,10 +148,10 @@ if (exists("g:use_dvorak") && g:use_dvorak == 1) nnoremap nnoremap - "nnoremap h - "nnoremap j - "nnoremap k - "nnoremap l + nnoremap h + nnoremap j + nnoremap k + nnoremap l " Account for tag jumping nnoremap @@ -122,7 +162,7 @@ if (exists("g:use_dvorak") && g:use_dvorak == 1) " Remappings for the T key noremap j t - noremap J T + "noremap J T " Remapping for the L key noremap l n @@ -136,19 +176,14 @@ if (exists("g:use_dvorak") && g:use_dvorak == 1) noremap zh zj noremap zt zk + " Disable some default vimtex mappings that conflict with rebound keys + let g:vimtex_mappings_disable = { + \ 'n': ['tse', 'tsd', 'tsD', 'tsc', 'dse', 'dsc', 'ds$', 'dsd'], + \ 'x': ['tsd', 'tsD'], + \} + endif -" Interface with system clipboard -noremap y "*y -noremap p "*p -noremap Y "+y -noremap P "+p - -" Search options -set hlsearch -set ignorecase -set smartcase - " Save aliases. noremap q :wq com W w @@ -157,3 +192,7 @@ com Wq wq com WQ wq " Write with sudo cmap w!! w !sudo tee > /dev/null % + +autocmd FileType markdown setlocal ts=2 sts=2 sw=2 et +autocmd FileType yaml setlocal ts=2 sts=2 sw=2 et +autocmd FileType tex silent VimtexCompile diff --git a/.config/zsh/plugins/fish-theme.zsh b/.config/zsh/plugins/fish-theme.zsh new file mode 100644 index 0000000..9e961ce --- /dev/null +++ b/.config/zsh/plugins/fish-theme.zsh @@ -0,0 +1,83 @@ +# ZSH Theme emulating the Fish shell's default prompt. + +_fishy_collapsed_wd() { + echo $(pwd | perl -pe ' + BEGIN { + binmode STDIN, ":encoding(UTF-8)"; + binmode STDOUT, ":encoding(UTF-8)"; + }; s|^$ENV{HOME}|~|g; s|/([^/.])[^/]*(?=/)|/$1|g; s|/\.([^/])[^/]*(?=/)|/.$1|g +') +} + +git_prompt_info() { + ref=$(git symbolic-ref HEAD 2> /dev/null) || return + echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_SUFFIX" +} +git_prompt_status() { + # Get the status of the working tree + INDEX=$(command git status --porcelain -b 2> /dev/null) + STATUS="" + if $(echo "$INDEX" | grep -E '^\?\? ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS" + fi + if $(echo "$INDEX" | grep '^A ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" + elif $(echo "$INDEX" | grep '^M ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" + fi + if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" + elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" + elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" + fi + if $(echo "$INDEX" | grep '^R ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS" + fi + if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" + elif $(echo "$INDEX" | grep '^D ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" + elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" + fi + if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then + STATUS="$ZSH_THEME_GIT_PROMPT_STASHED$STATUS" + fi + if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS" + fi + if $(echo "$INDEX" | grep '^## .*ahead' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_AHEAD$STATUS" + fi + if $(echo "$INDEX" | grep '^## .*behind' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_BEHIND$STATUS" + fi + if $(echo "$INDEX" | grep '^## .*diverged' &> /dev/null); then + STATUS="$ZSH_THEME_GIT_PROMPT_DIVERGED$STATUS" + fi + echo $STATUS +} + +# Required for dynamic prompt +setopt prompt_subst + +local user_color='green'; [ $UID -eq 0 ] && user_color='red' +PROMPT="%n@%m %F{$user_color}\$(_fishy_collapsed_wd)%f%(!.#.>) " +PROMPT2='%F{red}\ %f' + +local return_status="%F{red}%(?..%?)%f" +RPROMPT='${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}' + +ZSH_THEME_GIT_PROMPT_PREFIX=" " +ZSH_THEME_GIT_PROMPT_SUFFIX="" +ZSH_THEME_GIT_PROMPT_DIRTY="" +ZSH_THEME_GIT_PROMPT_CLEAN="" + +ZSH_THEME_GIT_PROMPT_ADDED="%{$fg_bold[green]%}+" +ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg_bold[blue]%}!" +ZSH_THEME_GIT_PROMPT_DELETED="%{$fg_bold[red]%}-" +ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg_bold[magenta]%}>" +ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg_bold[yellow]%}#" +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg_bold[cyan]%}?" diff --git a/.config/zsh/plugins/sudo.zsh b/.config/zsh/plugins/sudo.zsh new file mode 100644 index 0000000..744e4ab --- /dev/null +++ b/.config/zsh/plugins/sudo.zsh @@ -0,0 +1,23 @@ +# Source: https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/sudo/sudo.plugin.zsh + +sudo-command-line() { + [[ -z $BUFFER ]] && zle up-history + if [[ $BUFFER == sudo\ * ]]; then + LBUFFER="${LBUFFER#sudo }" + elif [[ $BUFFER == $EDITOR\ * ]] || [[ $BUFFER == vi\ * ]]; then + LBUFFER="${LBUFFER#$EDITOR }" + LBUFFER="${LBUFFER#vi }" + LBUFFER="svi $LBUFFER" + elif [[ $BUFFER == sudoedit\ * ]] || [[ $BUFFER == svi\ * ]]; then + LBUFFER="${LBUFFER#sudoedit }" + LBUFFER="${LBUFFER#svi }" + LBUFFER="$EDITOR $LBUFFER" + else + LBUFFER="sudo $LBUFFER" + fi + + _zsh_highlight +} +zle -N sudo-command-line +# Defined shortcut keys: [Esc] [Esc] +bindkey "\e\e" sudo-command-line diff --git a/.fehbg b/.fehbg index 05f3c2f..94f6942 100755 --- a/.fehbg +++ b/.fehbg @@ -1,2 +1,2 @@ #!/bin/sh -feh --no-xinerama --bg-fill '/home/frebib/pictures/lakesidesunrise.jpg' +'feh' '--no-xinerama' '--bg-fill' '/home/frebib/pictures/lakesidesunrise.jpg' diff --git a/.gitignore b/.gitignore index 0dbe282..2c6d10d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ bookmarks +.config/secrets +.config/imgur-screenshot/credentials.conf *.log .xournal/recent-files diff --git a/.profile b/.profile index 3e7105e..b4ed5f4 100644 --- a/.profile +++ b/.profile @@ -2,29 +2,46 @@ export LC_ALL=en_GB.UTF-8 export LANG=en_GB.UTF-8 export LC_NUMERIC=en_GB -export CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}" -export DOTFILES=$CONFIG_DIR/dotfiles +export CONFIG_DIR="$HOME/.config" +export XDG_CONFIG_HOME="$CONFIG_DIR" +export DOTFILES="$CONFIG_DIR/dotfiles" export PATH="${PATH}:$DOTFILES/scripts" export XDG_CURRENT_DESKTOP="GNOME" # Fixes xdg-open +# Allow Vim to load from ~/.config/vim +export VIMDIR="$CONFIG_DIR/vim" +export MYVIMRC="$VIMDIR/vimrc" +export VIMINIT=":so $MYVIMRC" + export EDITOR="vim" export VISUAL="vim" -export PAGER="less -R" +export LESS="-RNI" +export PAGER="less $LESS" +export MANPAGER="less -+N" export TERMINAL="termite" export BROWSER="chromium" export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel" -export QT_STYLE_OVERRIDE=GTK+ export QT_QPA_PLATFORMTHEME=gtk2 -# Merge system clipboards -if ! [ -z $DISPLAY ] && which autocutsel &>/dev/null; then - autocutsel -fork & - autocutsel -selection PRIMARY -fork & +# Source secret keys and values into environment +if [ -f "$CONFIG_DIR/secrets" ]; then + set -o allexport + source $CONFIG_DIR/secrets + set +o allexport fi -# Start an ssh-agent -if [ -z $SSH_AUTH_SOCK ]; then - eval `ssh-agent` +# Merge system clipboards +if [ -n "$DISPLAY" ] && which autocutsel >/dev/null 2>&1; then + autocutsel -fork + autocutsel -selection PRIMARY -fork +fi + +if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && which dbus-launch >/dev/null 2>&1; then + eval $(dbus-launch --sh-syntax --exit-with-session) + dbus-update-activation-environment --systemd DISPLAY +fi + +# Start the gnome-keyring if it's installed +if which gnome-keyring-daemon >/dev/null 2>&1; then + export $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gnupg) fi -# Always add SSH key to the running agent; local or remote -ssh-add diff --git a/.xbindkeysrc b/.xbindkeysrc index 9e4f8b0..44a9751 100644 --- a/.xbindkeysrc +++ b/.xbindkeysrc @@ -1,15 +1,15 @@ -# thumb wheel up => increase volume and unmute -"amixer -D pulse set Master 1000+ unmute ; pkill -RTMIN+10 i3blocks" - b:6 - -# thumb wheel down => lower volume -"amixer -D pulse set Master 1000- ; pkill -RTMIN+10 i3blocks" - b:7 - -# backward button => previous song -"xte 'key XF86AudioPrev'" - b:8 - -# forward button => next song -"xte 'key XF86AudioNext'" +# thumb wheel up => increase volume and unmute +"xdotool key --clearmodifiers XF86AudioRaiseVolume" + b:6 + +# thumb wheel down => lower volume +"xdotool key --clearmodifiers XF86AudioLowerVolume" + b:7 + +# backward button => previous song +"xte 'key XF86AudioPrev'" + b:8 + +# forward button => next song +"xte 'key XF86AudioNext'" b:9 diff --git a/.xinitrc b/.xinitrc index a06f7ad..a149acb 100644 --- a/.xinitrc +++ b/.xinitrc @@ -1,9 +1,5 @@ #!/bin/sh -source ~/.profile -source ~/.xsession -xrdb -merge ~/.Xresources - # Run all system xinitrc shell scripts xinitdir="/etc/X11/xinit/xinitrc.d" if [ -d "$xinitdir" ]; then @@ -15,6 +11,8 @@ if [ -d "$xinitdir" ]; then done fi -~/.local/share/surfacetools/rotationd --once +source ~/.profile +source ~/.xsession +xrdb -merge ~/.Xresources exec i3 diff --git a/.zshrc b/.zshrc index d3fe10c..8cad46c 100644 --- a/.zshrc +++ b/.zshrc @@ -1,30 +1,78 @@ unsetopt MULTIBYTE -# Path to your oh-my-zsh installation. -ZSH=$HOME/.local/share/oh-my-zsh - -# Set the theme -ZSH_THEME="fishy" -#DISABLE_AUTO_UPDATE="true" - +# Config and cache directory paths CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}" -ZSH_CONFIG_DIR=$CONFIG_DIR/zsh -ZSH_CACHE_DIR=$CONFIG_DIR/oh-my-zsh/cache -mkdir -p $ZSH_CACHE_DIR $ZSH_CONFIG_DIR +ZSH_DIR="$CONFIG_DIR/zsh" +ZSH_CACHE_DIR="$CONFIG_DIR/oh-my-zsh/cache" +ADOTDIR="$ZSH_DIR/antigen" # Antigen directory +ANTIGEN_LOG="$ADOTDIR/log/antigen-$(date +"%Y_%m_%d_%I_%M_%p").log" -HISTFILE=$ZSH_CONFIG_DIR/histfile -HISTSIZE=100000 -SAVEHIST=100000 -setopt sharehistory histignoredups histignorespace histreduceblanks autocd autopushd extendedglob globcomplete alwaystoend dvorak +mkdir -p "$ZSH_CACHE_DIR" "$ZSH_DIR" "$ADOTDIR/log" -export WORDCHARS='*?_[]~=&;!#$%^(){}' +HISTFILE="$ZSH_DIR/histfile" +HISTSIZE=999999 +SAVEHIST=999999 +# Only set tty if running interactively +if tty -s; then + # Resolve at shell runtime + export GPG_TTY="$(tty)" +fi + +# Set some useful ZSH/Bash options +setopt sharehistory histignorealldups histignorespace histreduceblanks +setopt pathdirs autocd autopushd extendedglob alwaystoend dvorak + + +# Completion initialisation +autoload -U compinit ; compinit +autoload -U bashcompinit ; bashcompinit + +# gopass completion +if gopass --help &>/dev/null; then + source <(gopass completion bash) +fi + +zstyle ':completion:*:sudo|_::' environ PATH="/sbin:/usr/sbin:$PATH" HOME="/root" +zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|[._-]=** r:|=**' 'l:|=* r:|=*' +zstyle ':completion:*' rehash true +zstyle ':completion:*' menu select +zstyle ':completion:*' list-colors "${(@s.:.)LS_COLORS}" +zstyle ':compinstall' filename "$HOME/.zshrc" + + +# Load antigen & plugins +antigen_src="$ZSH_DIR/antigen.zsh" +if [ ! -f "$antigen_src" ]; then + if which curl &>/dev/null; then + getcmd='curl -L' + else + getcmd='wget -qO-' + fi + eval $getcmd git.io/antigen > "$antigen_src" +fi +source "$antigen_src" + +antigen bundle zsh-users/zsh-completions +antigen bundle zsh-users/zsh-autosuggestions +antigen bundle Tarrasch/zsh-syntax-highlighting +antigen bundle zsh-users/zsh-history-substring-search + +antigen apply + + +# Set some key-binds bindkey -e -bindkey "\e[1;3C" forward-word -bindkey "\e[1;3D" backward-word +bindkey "^[[1;3C" forward-word +bindkey "^[[1;5C" forward-word +bindkey "^[[1;3D" backward-word +bindkey "^[[1;5D" backward-word bindkey "^[[7~" beginning-of-line bindkey "^[[8~" end-of-line +bindkey "^[[3~" delete-char +bindkey "^[[3;3~" delete-word +export WORDCHARS='*?_[]~=&;!#$%^(){}' x-bash-backward-kill-word(){ WORDCHARS='' zle kill-word } @@ -32,57 +80,48 @@ zle -N x-bash-backward-kill-word bindkey '^[^[[3~' x-bash-backward-kill-word bindkey '^[^[[3^' x-bash-backward-kill-word -autoload -U up-line-or-beginning-search -autoload -U down-line-or-beginning-search -zle -N up-line-or-beginning-search -zle -N down-line-or-beginning-search -bindkey "^[[A" up-line-or-beginning-search # Up -bindkey "^[^[[A" up-line-or-beginning-search # Up -bindkey "^[[B" down-line-or-beginning-search # Down -bindkey "^[^[[B" down-line-or-beginning-search # Down +bindkey '^[[A' history-substring-search-up +bindkey '^[[B' history-substring-search-down -zstyle ':completion:*:sudo::' environ PATH="/sbin:/usr/sbin:$PATH" HOME="/root" -zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|[._-]=** r:|=**' 'l:|=* r:|=*' -zstyle :compinstall filename "$HOME/.zshrc" - -autoload -U compinit ; compinit - -plugins=(command-not-found history-substring-search sudo zsh-autosuggestions zsh-completions) -source $ZSH/oh-my-zsh.sh -source $ZSH/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ZSH_AUTOSUGGEST_CLEAR_WIDGETS=("${(@)ZSH_AUTOSUGGEST_CLEAR_WIDGETS:#(up|down)-line-or-history}") ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(history-substring-search-up history-substring-search-down) -ZSH_HIGHLIGHT_STYLES[default]='fg=blue' +HISTORY_SUBSTRING_SEARCH_FUZZY=true +HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=true +HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='underline' + +typeset -A ZSH_HIGHLIGHT_STYLES +ZSH_HIGHLIGHT_STYLES[default]='fg=12' ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold' ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=yellow' -ZSH_HIGHLIGHT_STYLES[alias]='fg=63' +ZSH_HIGHLIGHT_STYLES[alias]='fg=blue' ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=green,underline' -ZSH_HIGHLIGHT_STYLES[builtin]='fg=63' -ZSH_HIGHLIGHT_STYLES[function]='fg=63' -ZSH_HIGHLIGHT_STYLES[command]='fg=63' -ZSH_HIGHLIGHT_STYLES[precommand]='fg=63' -ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=blue' +ZSH_HIGHLIGHT_STYLES[builtin]='fg=blue' +ZSH_HIGHLIGHT_STYLES[function]='fg=blue' +ZSH_HIGHLIGHT_STYLES[command]='fg=blue' +ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue' +ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=cyan' ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' -ZSH_HIGHLIGHT_STYLES[path]='fg=63,underline' +ZSH_HIGHLIGHT_STYLES[path]='fg=blue' ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=yellow,bold' -ZSH_HIGHLIGHT_STYLES[path_approx]='fg=red,bold,underline' ZSH_HIGHLIGHT_STYLES[globbing]='fg=red' +ZSH_HIGHLIGHT_STYLES[comment]='fg=7' ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' -ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=blue' -ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=blue' -ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='none' +ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=12' +ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=12' +ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=magenta' ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow' ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]='fg=yellow' ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=cyan' -ZSH_HIGHLIGHT_STYLES[assign]='none' -ZSH_HIGHLIGHT_STYLES[redirection]='none' +ZSH_HIGHLIGHT_STYLES[assign]='fg=green' +ZSH_HIGHLIGHT_STYLES[redirection]='fg=cyan' -source $DOTFILES/aliases +source "$DOTFILES/aliases" -# OPAM configuration -. /home/frebib/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true +# Load some manual plugins +source "$ZSH_DIR/plugins/sudo.zsh" +source "$ZSH_DIR/plugins/fish-theme.zsh" diff --git a/aliases b/aliases index e9602ae..c97eea2 100644 --- a/aliases +++ b/aliases @@ -11,15 +11,16 @@ alias ..ll="cd..;ll" alias ..l="..ll" alias l=ll -alias ll="ls -lFh" -alias la="ls -lAFh" -alias lat='la -t' +alias ll="ls -lFh --group-directories-first" +alias la="ls -lAFh --group-directories-first" +alias lt='ls -lAFh --sort=time' alias al=la # No, I don't need the Mono Assembly Linker alias md="mkdir -p" -mcd(){ - mkdir -p $1 && cd $1 -} +alias rd="rmdir -p" +mcd(){ mkdir -p $@ && cd $@; } +alias -- -='cd -' +alias cdt='cd `mktemp -d`' alias grep='grep --color' alias -g H='| head' alias -g T='| tail' @@ -34,9 +35,7 @@ alias -g NUL="&> /dev/null" alias -g BG="&;disown" alias -g COL="| column -t" alias -g CLIP="| xclip -i -selection primary -f | xclip -i -selection clipboard" -calc() { - echo "$@" | bc -l -} +calc() { bc -l <<< "$@"; } alias svi=sudoedit # This will enable us to use aliases in sudo. @@ -52,12 +51,25 @@ alias mv='mv -i' alias cp='cp -ir' alias pacman='pacman --color=always' alias pacaur='pacaur --color=always' -alias less='less -R' alias tree='tree --dirsfirst -C -F' +alias make="make -j$(nproc)" alias dd='dd status=progress' +alias env='env | sort' +alias ssh="ssh -tt" +alias grip='grip --user=frebib --pass=$GRIP_API_KEY' +which gopass &>/dev/null && alias pass='gopass' +alias abuild='docker run -ti --rm \ + -e USER \ + -e PWD \ + -w $PWD \ + -v $PWD:$PWD \ + -v ~/.abuild:/home/$USER/.abuild \ + -v ~/.config/git:/home/$USER/.config/git:ro \ + -v ~/.gnupg:/home/$USER/.gnupg \ + frebib/alpine-sdk:edge abuild' # System aliases -alias s=systemctl +alias s="sudo systemctl" alias j=journalctl alias p=pacaur alias ps='ps aux' @@ -75,24 +87,25 @@ alias -s rar="unrar l" alias -s tar="tar tf" alias -s gz="tar tf" alias -s jar="java -jar" -alias -s git="git clone" +alias -s git="git clone --recursive" # Git Aliases alias g=git alias gignore='$EDITOR .gitignore' +alias ggignore='$EDITOR ~/.config/git/gitignore' alias gcl="git clone --recursive" alias gco="git checkout" alias gcom="git checkout master" alias ga="git add" +alias gap="git -c interactive.diffFilter=\"git diff --color-words\" add -p" alias gaa="ga -A" alias grm="git rm" alias gc="git commit" alias gcm="gc -m" -alias gcma="git commit --amend -m" -alias gcman="git commit --amend --no-edit -m" alias gca="git commit --amend" alias gcan="git commit --amend --no-edit" +alias gcam="git commit --amend -m" alias gst="git status" alias gm="git merge" @@ -106,18 +119,20 @@ alias gp="git push" alias gpf="gp --force" alias gpsu="git push --set-upstream" alias gpsuom="git push --set-upstream origin master" +alias gpall="git remote | xargs -L1 git push" alias gl="git pull --rebase" alias glp="gl && gp" gd() { local commit=$1 if [ -z "$commit" ] || [ ${commit:0:1} != '@' ]; then - git diff $@ + git diff --color-words $@ return else - git diff "@~${commit:1}^!" + git diff --color-words "@~${commit:1}^!" fi } -alias gds="git diff --staged" +alias gds="git diff --staged --color-words" +alias gsh="git show --color-words" alias glg="git log --stat --color" alias glog="git log --oneline --decorate --color --graph" @@ -126,6 +141,7 @@ alias gundo="git reset @~1" alias gclean="git clean" alias gbr="git branch" alias gr="git remote" +alias grv="git remote -v" alias gra="gr add" alias grr="gr rm" alias grao="gra origin" @@ -133,7 +149,7 @@ alias grro="grr origin" alias gsta='git stash' alias gstd='gsta drop' -alias gstl='gsta list' +alias gstl='gsta list --stat --color' alias gstp='gsta pop' alias gstv="gsta show -p stash@{0}" @@ -148,7 +164,7 @@ alias dbl='docker build --pull' alias dbl.='docker build --pull .' alias drun='docker run -ti' alias dkl='docker kill' -dklrm() { docker kill $1 ; docker rm $1 } +dklrm() { docker kill $@ ; docker rm $@ } alias dst='docker stop' alias drst='docker restart' alias dnet='docker network' @@ -157,21 +173,63 @@ alias dlg='docker logs -f' alias dalpine='docker run -ti --rm alpine /bin/sh' alias drm-stopped='docker container prune' alias drmi-untag='docker image prune' -alias dsh='_dsh exec' -alias drsh='_dsh "run --rm"' +alias dprune='docker system prune -f' +alias dsh='_CMD=dsh _dsh exec' +alias drsh='_CMD=drsh _dsh run --rm --entrypoint=' _dsh() { - local dowhat="$1" - local user=$(echo "$2" | cut -d'@' -f1 -s) - local prog="${@:3:$#}" - local usercmd="" - if [ -z "$user" ]; then - host="$2" - else - host=`echo $2 | cut -d'@' -f2 -s` - usercmd="--user=$user " + if [ $# -lt 2 ]; then + echo "Usage: ${_CMD:-$0} [user@]container [program [args]]" >&2 + return 64 fi - eval "docker $dowhat -ti $usercmd$host ${prog:-"/bin/sh"}" + local dowhat="$1" + local docker_args=() + shift + + while [ "${1:0:1}" = '-' ]; do + if [ "${1:0:2}" != '--' ]; then + docker_args+=("$1") + shift + fi + docker_args+=("$1") + shift + done + + local user="$(echo "$1" | cut -d'@' -f1 -s)" + local prog="${@:2:$#}" + local usercmd="" + if [ -z "$user" ]; then + host="$1" + else + host=`echo $1 | cut -d'@' -f2 -s` + usercmd="--user=$user" + fi + + if [ "$dowhat" = 'exec' -a -z "$(docker ps -q -f name="$host")" <&- ]; then + echo "No such container $host" >&2 + return 5 + fi + + if [ -z "$prog" ]; then + set -o pipefail + local rm= + if [ "$dowhat" = 'run' ]; then + rm='--rm --entrypoint=' + fi + for shell in bash sh; do + if shell_path="$(eval "docker $dowhat $rm $host which $shell" <&- | sed 's|[\r\n]||g')"; then + prog="$shell_path" + break + fi + done + set +o pipefail + if [ -z "$prog" ]; then + echo "Warning: No shell found in path.. trying /bin/sh" >&2 + prog=/bin/sh + fi + fi + + docker $dowhat ${docker_args[@]} -ti $usercmd $host $(xargs <<< $prog) } alias dm='docker-machine' @@ -188,15 +246,12 @@ alias zpool='sudo zpool' alias z=zfs alias zp=zpool -# Packer, Vagrant aliases -alias pk=packer -alias v=vagrant - # General Aliases alias ssha='eval `ssh-agent` ; ssh-add' -alias aliases="$EDITOR $DOTFILES/aliases ; source ~/.zshrc" -alias vimrc="$EDITOR ~/.vimrc" -alias zshrc="$EDITOR ~/.zshrc ; source ~/.zshrc" +alias aliases="$EDITOR $DOTFILES/aliases ; exec zsh" +alias vimrc="$EDITOR $MYVIMRC" +alias zshrc="$EDITOR ~/.zshrc ; exec zsh" +alias gitrc="$EDITOR ~/.config/git/config" alias xinitrc="$EDITOR ~/.xinitrc" alias xresources="$EDITOR ~/.Xresources ; xrdb merge ~/.Xresources" alias xsession="$EDITOR ~/.xsession" @@ -209,9 +264,8 @@ i3b() { } alias sf=screenfetch alias nf=neofetch -randstr() { - cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $1 | head -n 1 -} +randstr() { tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w $1 | head -n 1; } +alias rot13="tr '[A-Za-z]' '[N-ZA-Mn-za-m]'" alias lab="ssh -tt tw '~/ctl' 2>/dev/null" diff --git a/scripts/4screens b/scripts/4screens index 6e1e8f8..13b8da2 100755 --- a/scripts/4screens +++ b/scripts/4screens @@ -1,9 +1,14 @@ #!/bin/sh set -e -xrandr --output DP-0.1 --primary --mode 1920x1080 --pos 0x1080 --rotate normal \ - --output DP-0.2.1 --mode 1920x1080 --pos 0x0 --rotate inverted \ - --output DP-0.2.2.1 --mode 1920x1080 --pos 1920x0 --rotate inverted \ - --output DP-0.2.2.2.1 --mode 1920x1080 --pos 1920x1080 --rotate normal +TOP_LEFT="DP-1" +TOP_RIGHT="DP-3" +BOTTOM_LEFT="DP-5" +BOTTOM_RIGHT="HDMI-0" + +xrandr --output $BOTTOM_LEFT --primary --mode 1920x1080 --pos 0x1080 --rotate normal \ + --output $TOP_LEFT --mode 1920x1080 --pos 0x0 --rotate inverted \ + --output $TOP_RIGHT --mode 1920x1080 --pos 1920x0 --rotate inverted \ + --output $BOTTOM_RIGHT --mode 1920x1080 --pos 1920x1080 --rotate normal [ -e ~/.fehbg ] && ~/.fehbg diff --git a/scripts/rofi-emoji b/scripts/rofi-emoji new file mode 100755 index 0000000..3618201 --- /dev/null +++ b/scripts/rofi-emoji @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +# +# Use rofi to pick emoji because that's what this +# century is about apparently... +# +# Requirements: +# rofi, xsel, xdotool, curl, xmllint +# +# Usage: +# 1. Download all emoji +# $ rofi-emoji --download +# +# 2. Run it! +# $ rofi-emoji +# +# Notes: +# * You'll need a emoji font like "Noto Emoji" or "EmojiOne". +# * Confirming an item will automatically paste it WITHOUT +# writing it to your clipboard. +# * Ctrl+C will copy it to your clipboard WITHOUT pasting it. +# + +# Where to save the emojis file. +EMOJI_FILE="$HOME/.cache/emojis.txt" + +# Urls of emoji to download. +# You can remove what you don't need. +URLS=( + 'https://emojipedia.org/people/' + 'https://emojipedia.org/nature/' + 'https://emojipedia.org/food-drink/' + 'https://emojipedia.org/activity/' + 'https://emojipedia.org/travel-places/' + 'https://emojipedia.org/objects/' + 'https://emojipedia.org/symbols/' + 'https://emojipedia.org/flags/' +) + + +function download() { + echo "" > "$EMOJI_FILE" + + for url in "${URLS[@]}"; do + echo "Downloading: $url" + + # Download the list of emoji and remove all the junk around it + emojis=$(curl -s "$url" | \ + xmllint --html \ + --xpath '//ul[@class="emoji-list"]' - 2>/dev/null) + + # Get rid of starting/closing ul tags + emojis=$(echo "$emojis" | head -n -1 | tail -n +1) + + # Extract the emoji and its description + emojis=$(echo "$emojis" | \ + sed -rn 's/.*(.*)<\/span> (.*)<\/a><\/li>/\1 \2/p') + + echo "$emojis" >> "$EMOJI_FILE" + done +} + + +function display() { + emoji=$(cat "$EMOJI_FILE" | grep -v '#' | grep -v '^[[:space:]]*$') + line=$(echo "$emoji" | rofi -dmenu -i -p emoji -kb-custom-1 Ctrl+c $@) + exit_code=$? + + line=($line) + + if [ $exit_code == 0 ]; then + xdotool type --clearmodifiers "${line[0]}" + elif [ $exit_code == 10 ]; then + echo -n "${line[0]}" | xsel -i -b + fi +} + + +if [[ "$1" =~ -D|--download ]]; then + download + exit 0 +elif [[ "$1" =~ -h|--help ]]; then + echo "usage: $0 [-D|--download]" + exit 0 +fi + +display diff --git a/scripts/vim-setup b/scripts/vim-setup index 668c0eb..3719dce 100755 --- a/scripts/vim-setup +++ b/scripts/vim-setup @@ -1,18 +1,29 @@ -YCM=~/.vim/bundle/YouCompleteMe +#!/bin/sh +set -e -sudo pacman -S python cmake --needed --noconfirm +############################ +## Check for dependencies ## +############################ +error() { >&2 printf "Error: %s" "$1"; exit 1; } + +which cmake >/dev/null 2>&1 || error 'cmake is not installed' +which clang >/dev/null 2>&1 || error 'clang is not installed' +which python >/dev/null 2>&1 || error 'python is not installed' + +[ -z "$VIMDIR" ] && error '$VIMDIR is not set' ####################### ## Initialise Vundle ## ####################### -mkdir -p ~/.vim/{bundle,swapfiles} -git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim -vim +PluginInstall +qall - +mkdir -p "$VIMDIR/bundle" "$VIMDIR/swapfiles" +if [ ! -d "$VIMDIR/bundle/Vundle.vim" ]; then + git clone https://github.com/VundleVim/Vundle.vim.git "$VIMDIR/bundle/Vundle.vim" +fi +vim +PluginUpdate +qall ######################### ## Setup YouCompleteMe ## ######################### -cd "$YCM" +cd "$VIMDIR/bundle/YouCompleteMe" git submodule update --init --recursive -./install.py --clang-completer +./install.py --system-libclang --clang-completer diff --git a/scripts/zsh-setup b/scripts/zsh-setup index 7082432..d33ac90 100755 --- a/scripts/zsh-setup +++ b/scripts/zsh-setup @@ -2,9 +2,9 @@ set -e # Install pkgfile for command-not-found support -sudo pacman -S pkgfile --no-confirm --needed +sudo pacman -S pkgfile --noconfirm --needed sudo systemctl enable --now pkgfile-update.service -pkgfile --update +sudo pkgfile --update dest="$HOME/.local/share" mkdir -p "$dest"