From 42731f74883abd8ea418490921c7fb99cd484490 Mon Sep 17 00:00:00 2001 From: Chris Nutter Date: Mon, 7 Sep 2020 14:07:04 -0700 Subject: [PATCH] dell-xps-15 branch should be good --- .Xresources | 237 + .bashrc | 139 + .config/dunst/dunstrc | 414 ++ .config/i3-scrot.conf | 1 + .config/i3/config | 434 ++ .config/kitty/kitty.conf | 1259 ++++ .config/neofetch/config.conf | 856 +++ .config/picom.conf | 98 + .config/polybar/config.ini | 281 + .../fonts/FantasqueSansMono-Regular.ttf | Bin 0 -> 140224 bytes .../polybar/fonts/MaterialIcons-Regular.ttf | Bin 0 -> 128180 bytes .config/polybar/launch.sh | 10 + .config/polybar/scripts/check-network | 20 + .config/polybar/scripts/checkupdates | 117 + .config/polybar/scripts/color-switch.sh | 100 + .config/polybar/scripts/colors-dark.sh | 263 + .config/polybar/scripts/colors-light.sh | 187 + .config/polybar/scripts/menu | 63 + .config/polybar/scripts/menu_full | 64 + .config/polybar/scripts/sysmenu | 69 + .config/polybar/scripts/updates.sh | 46 + .../__pycache__/devicons.cpython-38.opt-1.pyc | Bin 0 -> 3273 bytes .config/ranger/commands.py | 38 + .config/ranger/devicons.py | 219 + .config/ranger/plugins/__init__.py | 0 .../__pycache__/__init__.cpython-38.opt-1.pyc | Bin 0 -> 140 bytes .../devicons_linemode.cpython-38.opt-1.pyc | Bin 0 -> 1070 bytes .config/ranger/plugins/devicons_linemode.py | 22 + .../__pycache__/devicons.cpython-38.opt-1.pyc | Bin 0 -> 3273 bytes .config/ranger/ranger/commands.py | 38 + .config/ranger/ranger/devicons.py | 219 + .config/ranger/ranger/plugins/__init__.py | 0 .../__pycache__/__init__.cpython-38.opt-1.pyc | Bin 0 -> 140 bytes .../devicons_linemode.cpython-38.opt-1.pyc | Bin 0 -> 1070 bytes .../ranger/plugins/devicons_linemode.py | 22 + .config/ranger/ranger/rc.conf | 619 ++ .config/ranger/ranger/scope.sh | 121 + .config/ranger/rc.conf | 619 ++ .config/ranger/scope.sh | 121 + .config/rofi/config.rasi | 3 + .dmenurc | 24 + .mpd/mpd.conf | 28 + .mpd/mpd.db | Bin 0 -> 1579 bytes .mpd/mpd.log | 5173 +++++++++++++++++ .mpd/mpdstate | 29 + .ncmpcpp/error.log | 0 .scripts/loop-sl.sh | 8 + .scripts/ncmpcpp.sh | 3 + .scripts/patch-vivaldi.sh | 41 + .scripts/pick-ascii.sh | 7 + .scripts/polybar.sh | 13 + .scripts/purple_mount.sh | 1 + .scripts/pywal-dunst.sh | 36 + .scripts/wal-discord-injector.sh | 3 + .vimrc | 10 + .xinitrc | 70 + .zshrc | 118 + backup-files.sh | 42 + packages.txt | 1021 ++++ 59 files changed, 13326 insertions(+) create mode 100644 .Xresources create mode 100644 .bashrc create mode 100644 .config/dunst/dunstrc create mode 100644 .config/i3-scrot.conf create mode 100644 .config/i3/config create mode 100644 .config/kitty/kitty.conf create mode 100644 .config/neofetch/config.conf create mode 100644 .config/picom.conf create mode 100644 .config/polybar/config.ini create mode 100644 .config/polybar/fonts/FantasqueSansMono-Regular.ttf create mode 100644 .config/polybar/fonts/MaterialIcons-Regular.ttf create mode 100755 .config/polybar/launch.sh create mode 100755 .config/polybar/scripts/check-network create mode 100755 .config/polybar/scripts/checkupdates create mode 100755 .config/polybar/scripts/color-switch.sh create mode 100755 .config/polybar/scripts/colors-dark.sh create mode 100755 .config/polybar/scripts/colors-light.sh create mode 100755 .config/polybar/scripts/menu create mode 100755 .config/polybar/scripts/menu_full create mode 100755 .config/polybar/scripts/sysmenu create mode 100755 .config/polybar/scripts/updates.sh create mode 100644 .config/ranger/__pycache__/devicons.cpython-38.opt-1.pyc create mode 100644 .config/ranger/commands.py create mode 100644 .config/ranger/devicons.py create mode 100644 .config/ranger/plugins/__init__.py create mode 100644 .config/ranger/plugins/__pycache__/__init__.cpython-38.opt-1.pyc create mode 100644 .config/ranger/plugins/__pycache__/devicons_linemode.cpython-38.opt-1.pyc create mode 100644 .config/ranger/plugins/devicons_linemode.py create mode 100644 .config/ranger/ranger/__pycache__/devicons.cpython-38.opt-1.pyc create mode 100644 .config/ranger/ranger/commands.py create mode 100644 .config/ranger/ranger/devicons.py create mode 100644 .config/ranger/ranger/plugins/__init__.py create mode 100644 .config/ranger/ranger/plugins/__pycache__/__init__.cpython-38.opt-1.pyc create mode 100644 .config/ranger/ranger/plugins/__pycache__/devicons_linemode.cpython-38.opt-1.pyc create mode 100644 .config/ranger/ranger/plugins/devicons_linemode.py create mode 100644 .config/ranger/ranger/rc.conf create mode 100755 .config/ranger/ranger/scope.sh create mode 100644 .config/ranger/rc.conf create mode 100755 .config/ranger/scope.sh create mode 100644 .config/rofi/config.rasi create mode 100755 .dmenurc create mode 100644 .mpd/mpd.conf create mode 100644 .mpd/mpd.db create mode 100644 .mpd/mpd.log create mode 100644 .mpd/mpdstate create mode 100644 .ncmpcpp/error.log create mode 100755 .scripts/loop-sl.sh create mode 100755 .scripts/ncmpcpp.sh create mode 100755 .scripts/patch-vivaldi.sh create mode 100755 .scripts/pick-ascii.sh create mode 100755 .scripts/polybar.sh create mode 100755 .scripts/purple_mount.sh create mode 100755 .scripts/pywal-dunst.sh create mode 100755 .scripts/wal-discord-injector.sh create mode 100644 .vimrc create mode 100644 .xinitrc create mode 100644 .zshrc create mode 100755 backup-files.sh create mode 100644 packages.txt diff --git a/.Xresources b/.Xresources new file mode 100644 index 0000000..89e3aa1 --- /dev/null +++ b/.Xresources @@ -0,0 +1,237 @@ +Xft.dpi: 192 +Xft.antialias: true +Xft.hinting: true +Xft.rgba: rgb +Xft.autohint: false +Xft.hintstyle: hintslight +Xft.lcdfilter: lcddefault + +XTerm*background: #222D31 +XTerm*foreground: #d8d8d8 +XTerm*pointerColor: #1ABB9B +XTerm*faceName: Fixed +XTerm*faceSize: 11 +XTerm*reverseVideo: on +XTerm*selectToClipboard: true + +*background: #222D31 +*foreground: #d8d8d8 +*fading: 8 +*fadeColor: black +*cursorColor: #1ABB9B +*pointerColorBackground: #2B2C2B +*pointerColorForeground: #16A085 + +!! black dark/light +*color0: #222D31 +*color8: #585858 + +!! red dark/light +*color1: #ab4642 +*color9: #ab4642 + +!! green dark/light +*color2: #7E807E +*color10: #8D8F8D + +!! yellow dark/light +*color3: #f7ca88 +*color11: #f7ca88 + +!! blue dark/light +*color4: #7cafc2 +*color12: #7cafc2 + +!! magenta dark/light +*color5: #ba8baf +*color13: #ba8baf + +!! cyan dark/light +*color6: #1ABB9B +*color14: #1ABB9B + +!! white dark/light +*color7: #d8d8d8 +*color15: #f8f8f8 + +Xcursor.theme: xcursor-breeze +Xcursor.size: 0 + +URxvt.font: xft:TerminessTTFNerdFontMono:pixelsize=36 +!URxvt.font: xft:mononoki:size=8 + +! alternative font settings with 'terminus': +! URxvt.font: -xos4-terminus-medium-r-normal--16-160-72-72-c-80-iso10646-1 +! URxvt.bold.font: -xos4-terminus-bold-r-normal--16-160-72-72-c-80-iso10646-1 +!! terminus names see end of file! + +URxvt.depth: 32 +URxvt.background: [100]#222D31 +URxvt*scrollBar: false +URxvt*mouseWheelScrollPage: false +URxvt*cursorBlink: true +URxvt*background: black +URxvt*foreground: grey +URxvt*saveLines: 5000 + +! for 'fake' transparency (without Compton) uncomment the following three lines +! URxvt*inheritPixmap: true +! URxvt*transparent: true +! URxvt*shading: 138 + +! Normal copy-paste keybindings without perls +URxvt.iso14755: false +URxvt.keysym.Shift-Control-V: eval:paste_clipboard +URxvt.keysym.Shift-Control-C: eval:selection_to_clipboard +!Xterm escape codes, word by word movement +URxvt.keysym.Control-Left: \033[1;5D +URxvt.keysym.Shift-Control-Left: \033[1;6D +URxvt.keysym.Control-Right: \033[1;5C +URxvt.keysym.Shift-Control-Right: \033[1;6C +URxvt.keysym.Control-Up: \033[1;5A +URxvt.keysym.Shift-Control-Up: \033[1;6A +URxvt.keysym.Control-Down: \033[1;5B +URxvt.keysym.Shift-Control-Down: \033[1;6B +! Rxvt.perl-ext-common: ...,clipboard +! URxvt.keysym.M-C-c: perl:clipboard:copy +! URxvt.keysym.M-v: perl:clipboard:paste +! URxvt.keysym.M-C-v: perl:clipboard:paste_escaped +! URxvt*termName: string +! URxvt*geometry: geometry +! URxvt*chdir: string +! URxvt*loginShell: boolean +! URxvt*multiClickTime: number +! URxvt*jumpScroll: boolean +! URxvt*skipScroll: boolean +! URxvt*pastableTabs: boolean +! URxvt*scrollstyle: plain +! URxvt*scrollBar_right: boolean +! URxvt*scrollBar_floating: true +! URxvt*scrollBar_align: mode +! URxvt*thickness: number +! URxvt*scrollTtyOutput: boolean +! URxvt*scrollTtyKeypress: boolean +! URxvt*scrollWithBuffer: boolean +! URxvt*tintColor: !7DA55 +! URxvt*blurRadius: HxV +! URxvt*fading: number +! URxvt*fadeColor: color +! URxvt*utmpInhibit: boolean +! URxvt*urgentOnBell: boolean +! URxvt*visualBell: boolean +! URxvt*mapAlert: boolean +! URxvt*meta8: boolean +! URxvt*tripleclickwords: boolean +! URxvt*insecure: boolean +! URxvt*cursorUnderline: boolean +! URxvt*pointerBlank: boolean +! URxvt*color0: color +! URxvt*color1: color +! URxvt*color2: color +! URxvt*color3: color +! URxvt*color4: color +! URxvt*color5: color +! URxvt*color6: color +! URxvt*color7: color +! URxvt*color8: color +! URxvt*color9: color +! URxvt*color10: color +! URxvt*color11: color +! URxvt*color12: color +! URxvt*color13: color +! URxvt*color14: color +! URxvt*color15: color +! URxvt*colorBD: color +! URxvt*colorIT: color +! URxvt*colorUL: color +! URxvt*colorRV: color +! URxvt*underlineColor: color +! URxvt*scrollColor: color +! URxvt*troughColor: color +! URxvt*highlightColor: color +! URxvt*highlightTextColor: color +! URxvt*cursorColor: color +! URxvt*cursorColor2: color +! URxvt*pointerColor: color +! URxvt*pointerColor2: color +! URxvt*borderColor: color +! URxvt*iconFile: file +! URxvt*font: fontname +! URxvt*boldFont: fontname +! URxvt*italicFont: fontname +! URxvt*boldItalicFont: fontname +! URxvt*intensityStyles: boolean +! URxvt*inputMethod: name +! URxvt*preeditType: style +! URxvt*imLocale: string +! URxvt*imFont: fontname +! URxvt*title: string +! URxvt*iconName: string +! URxvt*buffered: boolean +! URxvt*depth: number +! URxvt*visual: number +! URxvt*transient-for: windowid +! URxvt*override-redirect: boolean +! URxvt*hold: boolean +! URxvt*externalBorder: number +! URxvt*internalBorder: number +! URxvt*borderLess: true +! URxvt*lineSpace: number +! URxvt*letterSpace: number +! URxvt*skipBuiltinGlyphs: boolean +! URxvt*pointerBlankDelay: number +! URxvt*backspacekey: string +! URxvt*deletekey: string +! URxvt*print-pipe: string +! URxvt*modifier: modifier +! URxvt*cutchars: string +! URxvt*answerbackString: string +! URxvt*secondaryScreen: boolean +! URxvt*secondaryScroll: boolean +! URxvt*perl-lib: string +! URxvt*perl-eval: perl-eval +! URxvt*perl-ext-common: string +! URxvt*perl-ext: string +! URxvt*iso14755: boolean +! URxvt*iso14755_52: boolean +! URxvt*xrm: string +! URxvt*keysym.sym: keysym +! URxvt*background.border: boolean +! URxvt*background.expr: string +! URxvt*background.interval: seconds +! URxvt*bell-command: string +! URxvt*kuake.hotkey: string +! URxvt*matcher.button: string +! URxvt*matcher.launcher: string +! URxvt*matcher.launcher.*: string +! URxvt*matcher.pattern.*: string +! URxvt*matcher.rend.*: string +! URxvt*remote-clipboard.fetch: string +! URxvt*remote-clipboard.store: string +! URxvt*searchable-scrollback: string +! URxvt*selection-autotransform.*: string +! URxvt*selection-pastebin.cmd: string +! URxvt*selection-pastebin.url: string +! URxvt*selection.pattern-0: string +! URxvt*tab-bg: colour +! URxvt*tab-fg: colour +! URxvt*tabbar-bg: colour +! URxvt*tabbar-fg: colour +! URxvt*url-launcher: string + +! The Terminus font uses the following X-names: +! -xos4-terminus-medium-r-normal--12-120-72-72-c-60-iso10646-1 +! -xos4-terminus-medium-r-normal--14-140-72-72-c-80-iso10646-1 +! -xos4-terminus-medium-r-normal--16-160-72-72-c-80-iso10646-1 +! -xos4-terminus-medium-r-normal--20-200-72-72-c-100-iso10646-1 +! -xos4-terminus-medium-r-normal--22-220-72-72-c-110-iso10646-1 +! -xos4-terminus-medium-r-normal--24-240-72-72-c-120-iso10646-1 +! -xos4-terminus-medium-r-normal--28-280-72-72-c-140-iso10646-1 +! -xos4-terminus-medium-r-normal--32-320-72-72-c-160-iso10646-1 +! -xos4-terminus-bold-r-normal--12-120-72-72-c-60-iso10646-1 +! -xos4-terminus-bold-r-normal--14-140-72-72-c-80-iso10646-1 +! -xos4-terminus-bold-r-normal--16-160-72-72-c-80-iso10646-1 +! -xos4-terminus-bold-r-normal--20-200-72-72-c-100-iso10646-1 +! -xos4-terminus-bold-r-normal--24-240-72-72-c-120-iso10646-1 +! -xos4-terminus-bold-r-normal--28-280-72-72-c-140-iso10646-1 +! -xos4-terminus-bold-r-normal--32-320-72-72-c-160-iso10646-1 diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..f06afed --- /dev/null +++ b/.bashrc @@ -0,0 +1,139 @@ +# +# ~/.bashrc +# + +[[ $- != *i* ]] && return + +colors() { + local fgc bgc vals seq0 + + printf "Color escapes are %s\n" '\e[${value};...;${value}m' + printf "Values 30..37 are \e[33mforeground colors\e[m\n" + printf "Values 40..47 are \e[43mbackground colors\e[m\n" + printf "Value 1 gives a \e[1mbold-faced look\e[m\n\n" + + # foreground colors + for fgc in {30..37}; do + # background colors + for bgc in {40..47}; do + fgc=${fgc#37} # white + bgc=${bgc#40} # black + + vals="${fgc:+$fgc;}${bgc}" + vals=${vals%%;} + + seq0="${vals:+\e[${vals}m}" + printf " %-9s" "${seq0:-(default)}" + printf " ${seq0}TEXT\e[m" + printf " \e[${vals:+${vals+$vals;}}1mBOLD\e[m" + done + echo; echo + done +} + +[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion + +# Change the window title of X terminals +case ${TERM} in + xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|interix|konsole*) + PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\007"' + ;; + screen*) + PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\033\\"' + ;; +esac + +use_color=true + +# Set colorful PS1 only on colorful terminals. +# dircolors --print-database uses its own built-in database +# instead of using /etc/DIR_COLORS. Try to use the external file +# first to take advantage of user additions. Use internal bash +# globbing instead of external grep binary. +safe_term=${TERM//[^[:alnum:]]/?} # sanitize TERM +match_lhs="" +[[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)" +[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(/dev/null \ + && match_lhs=$(dircolors --print-database) +[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true + +if ${use_color} ; then + # Enable colors for ls, etc. Prefer ~/.dir_colors #64489 + if type -P dircolors >/dev/null ; then + if [[ -f ~/.dir_colors ]] ; then + eval $(dircolors -b ~/.dir_colors) + elif [[ -f /etc/DIR_COLORS ]] ; then + eval $(dircolors -b /etc/DIR_COLORS) + fi + fi + + if [[ ${EUID} == 0 ]] ; then + PS1='\[\033[01;31m\][\h\[\033[01;36m\] \W\[\033[01;31m\]]\$\[\033[00m\] ' + else + PS1='\[\033[01;32m\][\u@\h\[\033[01;37m\] \W\[\033[01;32m\]]\$\[\033[00m\] ' + fi + + alias ls='ls --color=auto' + alias grep='grep --colour=auto' + alias egrep='egrep --colour=auto' + alias fgrep='fgrep --colour=auto' +else + if [[ ${EUID} == 0 ]] ; then + # show root@ when we don't have colors + PS1='\u@\h \W \$ ' + else + PS1='\u@\h \w \$ ' + fi +fi + +unset use_color safe_term match_lhs sh + +alias cp="cp -i" # confirm before overwriting something +alias df='df -h' # human-readable sizes +alias free='free -m' # show sizes in MB +alias np='nano -w PKGBUILD' +alias more=less + +xhost +local:root > /dev/null 2>&1 + +complete -cf sudo + +# Bash won't get SIGWINCH if another process is in the foreground. +# Enable checkwinsize so that bash will check the terminal size when +# it regains control. #65623 +# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11) +shopt -s checkwinsize + +shopt -s expand_aliases + +# export QT_SELECT=4 + +# Enable history appending instead of overwriting. #139609 +shopt -s histappend + +# +# # ex - archive extractor +# # usage: ex +ex () +{ + if [ -f $1 ] ; then + case $1 in + *.tar.bz2) tar xjf $1 ;; + *.tar.gz) tar xzf $1 ;; + *.bz2) bunzip2 $1 ;; + *.rar) unrar x $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar xf $1 ;; + *.tbz2) tar xjf $1 ;; + *.tgz) tar xzf $1 ;; + *.zip) unzip $1 ;; + *.Z) uncompress $1;; + *.7z) 7z x $1 ;; + *) echo "'$1' cannot be extracted via ex()" ;; + esac + else + echo "'$1' is not a valid file" + fi +} diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc new file mode 100644 index 0000000..95d9bd5 --- /dev/null +++ b/.config/dunst/dunstrc @@ -0,0 +1,414 @@ +[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 = "450x5-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 = 50 + + # Horizontal padding. + horizontal_padding = 50 + + # 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 = "#1369DE" + + # 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 = Mononoki 10 + + # 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: + # 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 + # %% Literal % + # Markup is allowed + format = "%s\n%b" + + # Alignment of message text. + # Possible values are "left", "center" and "right". + 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 = no + + ### 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_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/vivaldi-stable + + # 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 + + ### 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 action of 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. + mouse_left_click = close_current + mouse_middle_click = do_action + 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+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 = "#000000" + foreground = "#1369DE" + timeout = 10 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + background = "#000000" + foreground = "#1369DE" + timeout = 10 + # Icon for notifications with normal urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_critical] + background = "#000000" + foreground = "#1369DE" + frame_color = "#1369DE" + 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 diff --git a/.config/i3-scrot.conf b/.config/i3-scrot.conf new file mode 100644 index 0000000..6c686fb --- /dev/null +++ b/.config/i3-scrot.conf @@ -0,0 +1 @@ +scrot_dir=/home/cdnutter/Pictures diff --git a/.config/i3/config b/.config/i3/config new file mode 100644 index 0000000..58c17a6 --- /dev/null +++ b/.config/i3/config @@ -0,0 +1,434 @@ +# i3 config file (v4) +# Please see http://i3wm.org/docs/userguide.html for a complete reference! + +# Set mod key (Mod1=, Mod4=) +set $mod Mod4 + +# set default desktop layout (default is tiling) +# workspace_layout tabbed + +# Configure border style +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 kitty + +# kill focused window +bindsym $mod+Shift+q kill + +# start program launcher +bindsym $mod+d exec --no-startup-id rofi -show run + +# 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 kitty -e 'bmenu' +bindsym $mod+F2 exec vivaldi-stable +bindsym $mod+F3 exec pcmanfm +#bindsym $mod+F3 exec ranger +bindsym $mod+Shift+F3 exec pcmanfm_pkexec +bindsym $mod+F5 exec kitty -e ncmpcpp +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; compton -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 + +set_from_resource $fg i3wm.color7 +set_From_resource $bg i3wm.color2 + +# 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 $bg $bg $bg $fg $bg #556064 #556064 #80FFF9 #FDF6E3 + client.focused_inactive $bg $bg $bg $fg $bg #2F3D44 #2F3D44 #1ABC9C #454948 + client.unfocused $bg $bg $bg $fg $bg #2F3D44 #2F3D44 #1ABC9C #454948 + client.urgent $bg $bg $bg $fg $bg #CB4B16 #FDF6E3 #1ABC9C #268BD2 + client.placeholder $bg $bg $bg $fg $bg #000000 #0c0c0c #ffffff #000000 + + client.background $bg #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 +# 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 no_gaps + +# 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" +} + +# Custom Scripts + +exec_always --no-startup-id wal -i ~/Pictures/Wallpapers/ +exec sh ~/.config/polybar/launch.sh +exec_always sh ~/.scripts/pywal-dunst.sh + +exec pkill picom +exec picom -b -f + +#exec_always sh ~/.scripts/wal-discord.sh diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf new file mode 100644 index 0000000..f06506f --- /dev/null +++ b/.config/kitty/kitty.conf @@ -0,0 +1,1259 @@ +# vim:fileencoding=utf-8:ft=conf:foldmethod=marker + +include ~/.cache/wal/colors-kitty.conf + +######################################### + +#: Fonts {{{ + +#: kitty has very powerful font management. You can configure +#: individual font faces and even specify special fonts for particular +#: characters. + +font_family mononoki +bold_font auto +italic_font auto +bold_italic_font auto + +#: You can specify different fonts for the bold/italic/bold-italic +#: variants. To get a full list of supported fonts use the `kitty +#: list-fonts` command. By default they are derived automatically, by +#: the OSes font system. Setting them manually is useful for font +#: families that have many weight variants like Book, Medium, Thick, +#: etc. For example:: + +#: font_family Operator Mono Book +#: bold_font Operator Mono Medium +#: italic_font Operator Mono Book Italic +#: bold_italic_font Operator Mono Medium Italic + +font_size 9.0 + +#: Font size (in pts) + +force_ltr no + +#: kitty does not support BIDI (bidirectional text), however, for RTL +#: scripts, words are automatically displayed in RTL. That is to say, +#: in an RTL script, the words "HELLO WORLD" display in kitty as +#: "WORLD HELLO", and if you try to select a substring of an RTL- +#: shaped string, you will get the character that would be there had +#: the the string been LTR. For example, assuming the Hebrew word +#: ירושלים, selecting the character that on the screen appears to be ם +#: actually writes into the selection buffer the character י. + +#: kitty's default behavior is useful in conjunction with a filter to +#: reverse the word order, however, if you wish to manipulate RTL +#: glyphs, it can be very challenging to work with, so this option is +#: provided to turn it off. Furthermore, this option can be used with +#: the command line program GNU FriBidi +#: to get BIDI +#: support, because it will force kitty to always treat the text as +#: LTR, which FriBidi expects for terminals. + +adjust_line_height 0 +adjust_column_width 0 + +#: Change the size of each character cell kitty renders. You can use +#: either numbers, which are interpreted as pixels or percentages +#: (number followed by %), which are interpreted as percentages of the +#: unmodified values. You can use negative pixels or percentages less +#: than 100% to reduce sizes (but this might cause rendering +#: artifacts). + +# symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols + +#: Map the specified unicode codepoints to a particular font. Useful +#: if you need special rendering for some symbols, such as for +#: Powerline. Avoids the need for patched fonts. Each unicode code +#: point is specified in the form U+. You +#: can specify multiple code points, separated by commas and ranges +#: separated by hyphens. symbol_map itself can be specified multiple +#: times. Syntax is:: + +#: symbol_map codepoints Font Family Name + +disable_ligatures never + +#: Choose how you want to handle multi-character ligatures. The +#: default is to always render them. You can tell kitty to not render +#: them when the cursor is over them by using cursor to make editing +#: easier, or have kitty never render them at all by using always, if +#: you don't like them. The ligature strategy can be set per-window +#: either using the kitty remote control facility or by defining +#: shortcuts for it in kitty.conf, for example:: + +#: map alt+1 disable_ligatures_in active always +#: map alt+2 disable_ligatures_in all never +#: map alt+3 disable_ligatures_in tab cursor + +font_features none + +#: Choose exactly which OpenType features to enable or disable. This +#: is useful as some fonts might have features worthwhile in a +#: terminal. For example, Fira Code Retina includes a discretionary +#: feature, zero, which in that font changes the appearance of the +#: zero (0), to make it more easily distinguishable from Ø. Fira Code +#: Retina also includes other discretionary features known as +#: Stylistic Sets which have the tags ss01 through ss20. + +#: Note that this code is indexed by PostScript name, and not the font +#: family. This allows you to define very precise feature settings; +#: e.g. you can disable a feature in the italic font but not in the +#: regular font. + +#: To get the PostScript name for a font, use kitty + list-fonts +#: --psnames:: + +#: $ kitty + list-fonts --psnames | grep Fira +#: Fira Code +#: Fira Code Bold (FiraCode-Bold) +#: Fira Code Light (FiraCode-Light) +#: Fira Code Medium (FiraCode-Medium) +#: Fira Code Regular (FiraCode-Regular) +#: Fira Code Retina (FiraCode-Retina) + +#: The part in brackets is the PostScript name. + +#: Enable alternate zero and oldstyle numerals:: + +#: font_features FiraCode-Retina +zero +onum + +#: Enable only alternate zero:: + +#: font_features FiraCode-Retina +zero + +#: Disable the normal ligatures, but keep the calt feature which (in +#: this font) breaks up monotony:: + +#: font_features TT2020StyleB-Regular -liga +calt + +#: In conjunction with force_ltr, you may want to disable Arabic +#: shaping entirely, and only look at their isolated forms if they +#: show up in a document. You can do this with e.g.:: + +#: font_features UnifontMedium +isol -medi -fina -init + +box_drawing_scale 0.001, 1, 1.5, 2 + +#: Change the sizes of the lines used for the box drawing unicode +#: characters These values are in pts. They will be scaled by the +#: monitor DPI to arrive at a pixel value. There must be four values +#: corresponding to thin, normal, thick, and very thick lines. + +#: }}} + +#: Cursor customization {{{ + +cursor #cccccc + +#: Default cursor color + +cursor_text_color #111111 + +#: Choose the color of text under the cursor. If you want it rendered +#: with the background color of the cell underneath instead, use the +#: special keyword: background + +cursor_shape block + +#: The cursor shape can be one of (block, beam, underline) + +cursor_beam_thickness 1.5 + +#: Defines the thickness of the beam cursor (in pts) + +cursor_underline_thickness 2.0 + +#: Defines the thickness of the underline cursor (in pts) + +cursor_blink_interval -1 + +#: The interval (in seconds) at which to blink the cursor. Set to zero +#: to disable blinking. Negative values mean use system default. Note +#: that numbers smaller than repaint_delay will be limited to +#: repaint_delay. + +cursor_stop_blinking_after 15.0 + +#: Stop blinking cursor after the specified number of seconds of +#: keyboard inactivity. Set to zero to never stop blinking. + +#: }}} + +#: Scrollback {{{ + +scrollback_lines 2000 + +#: Number of lines of history to keep in memory for scrolling back. +#: Memory is allocated on demand. Negative numbers are (effectively) +#: infinite scrollback. Note that using very large scrollback is not +#: recommended as it can slow down resizing of the terminal and also +#: use large amounts of RAM. + +scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER + +#: Program with which to view scrollback in a new window. The +#: scrollback buffer is passed as STDIN to this program. If you change +#: it, make sure the program you use can handle ANSI escape sequences +#: for colors and text formatting. INPUT_LINE_NUMBER in the command +#: line above will be replaced by an integer representing which line +#: should be at the top of the screen. + +scrollback_pager_history_size 0 + +#: Separate scrollback history size, used only for browsing the +#: scrollback buffer (in MB). This separate buffer is not available +#: for interactive scrolling but will be piped to the pager program +#: when viewing scrollback buffer in a separate window. The current +#: implementation stores one character in 4 bytes, so approximatively +#: 2500 lines per megabyte at 100 chars per line. A value of zero or +#: less disables this feature. The maximum allowed size is 4GB. + +wheel_scroll_multiplier 5.0 + +#: Modify the amount scrolled by the mouse wheel. Note this is only +#: used for low precision scrolling devices, not for high precision +#: scrolling on platforms such as macOS and Wayland. Use negative +#: numbers to change scroll direction. + +touch_scroll_multiplier 1.0 + +#: Modify the amount scrolled by a touchpad. Note this is only used +#: for high precision scrolling devices on platforms such as macOS and +#: Wayland. Use negative numbers to change scroll direction. + +#: }}} + +#: Mouse {{{ + +mouse_hide_wait 3.0 + +#: Hide mouse cursor after the specified number of seconds of the +#: mouse not being used. Set to zero to disable mouse cursor hiding. +#: Set to a negative value to hide the mouse cursor immediately when +#: typing text. Disabled by default on macOS as getting it to work +#: robustly with the ever-changing sea of bugs that is Cocoa is too +#: much effort. + +url_color #0087bd +url_style curly + +#: The color and style for highlighting URLs on mouse-over. url_style +#: can be one of: none, single, double, curly + +open_url_modifiers kitty_mod + +#: The modifier keys to press when clicking with the mouse on URLs to +#: open the URL + +open_url_with default + +#: The program with which to open URLs that are clicked on. The +#: special value default means to use the operating system's default +#: URL handler. + +url_prefixes http https file ftp + +#: The set of URL prefixes to look for when detecting a URL under the +#: mouse cursor. + +copy_on_select no + +#: Copy to clipboard or a private buffer on select. With this set to +#: clipboard, simply selecting text with the mouse will cause the text +#: to be copied to clipboard. Useful on platforms such as macOS that +#: do not have the concept of primary selections. You can instead +#: specify a name such as a1 to copy to a private kitty buffer +#: instead. Map a shortcut with the paste_from_buffer action to paste +#: from this private buffer. For example:: + +#: map cmd+shift+v paste_from_buffer a1 + +#: Note that copying to the clipboard is a security risk, as all +#: programs, including websites open in your browser can read the +#: contents of the system clipboard. + +strip_trailing_spaces never + +#: Remove spaces at the end of lines when copying to clipboard. A +#: value of smart will do it when using normal selections, but not +#: rectangle selections. always will always do it. + +rectangle_select_modifiers ctrl+alt + +#: The modifiers to use rectangular selection (i.e. to select text in +#: a rectangular block with the mouse) + +terminal_select_modifiers shift + +#: The modifiers to override mouse selection even when a terminal +#: application has grabbed the mouse + +select_by_word_characters @-./_~?&=%+# + +#: Characters considered part of a word when double clicking. In +#: addition to these characters any character that is marked as an +#: alphanumeric character in the unicode database will be matched. + +click_interval -1.0 + +#: The interval between successive clicks to detect double/triple +#: clicks (in seconds). Negative numbers will use the system default +#: instead, if available, or fallback to 0.5. + +focus_follows_mouse no + +#: Set the active window to the window under the mouse when moving the +#: mouse around + +pointer_shape_when_grabbed arrow + +#: The shape of the mouse pointer when the program running in the +#: terminal grabs the mouse. Valid values are: arrow, beam and hand + +#: }}} + +#: Performance tuning {{{ + +repaint_delay 10 + +#: Delay (in milliseconds) between screen updates. Decreasing it, +#: increases frames-per-second (FPS) at the cost of more CPU usage. +#: The default value yields ~100 FPS which is more than sufficient for +#: most uses. Note that to actually achieve 100 FPS you have to either +#: set sync_to_monitor to no or use a monitor with a high refresh +#: rate. Also, to minimize latency when there is pending input to be +#: processed, repaint_delay is ignored. + +input_delay 3 + +#: Delay (in milliseconds) before input from the program running in +#: the terminal is processed. Note that decreasing it will increase +#: responsiveness, but also increase CPU usage and might cause flicker +#: in full screen programs that redraw the entire screen on each loop, +#: because kitty is so fast that partial screen updates will be drawn. + +sync_to_monitor yes + +#: Sync screen updates to the refresh rate of the monitor. This +#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing) +#: when scrolling. However, it limits the rendering speed to the +#: refresh rate of your monitor. With a very high speed mouse/high +#: keyboard repeat rate, you may notice some slight input latency. If +#: so, set this to no. + +#: }}} + +#: Terminal bell {{{ + +enable_audio_bell yes + +#: Enable/disable the audio bell. Useful in environments that require +#: silence. + +visual_bell_duration 0.0 + +#: Visual bell duration. Flash the screen when a bell occurs for the +#: specified number of seconds. Set to zero to disable. + +window_alert_on_bell yes + +#: Request window attention on bell. Makes the dock icon bounce on +#: macOS or the taskbar flash on linux. + +bell_on_tab yes + +#: Show a bell symbol on the tab if a bell occurs in one of the +#: windows in the tab and the window is not the currently focused +#: window + +command_on_bell none + +#: Program to run when a bell occurs. + +#: }}} + +#: Window layout {{{ + +remember_window_size no +initial_window_width 1450 +initial_window_height 850 + +#: If enabled, the window size will be remembered so that new +#: instances of kitty will have the same size as the previous +#: instance. If disabled, the window will initially have size +#: configured by initial_window_width/height, in pixels. You can use a +#: suffix of "c" on the width/height values to have them interpreted +#: as number of cells instead of pixels. + +enabled_layouts * + +#: The enabled window layouts. A comma separated list of layout names. +#: The special value all means all layouts. The first listed layout +#: will be used as the startup layout. Default configuration is all +#: layouts in alphabetical order. For a list of available layouts, see +#: the https://sw.kovidgoyal.net/kitty/index.html#layouts. + +window_resize_step_cells 2 +window_resize_step_lines 2 + +#: The step size (in units of cell width/cell height) to use when +#: resizing windows. The cells value is used for horizontal resizing +#: and the lines value for vertical resizing. + +window_border_width 1.0 + +#: The width (in pts) of window borders. Will be rounded to the +#: nearest number of pixels based on screen resolution. Note that +#: borders are displayed only when more than one window is visible. +#: They are meant to separate multiple windows. + +draw_minimal_borders yes + +#: Draw only the minimum borders needed. This means that only the +#: minimum needed borders for inactive windows are drawn. That is only +#: the borders that separate the inactive window from a neighbor. Note +#: that setting a non-zero window margin overrides this and causes all +#: borders to be drawn. + +window_margin_width 15 + +#: The window margin (in pts) (blank area outside the border). A +#: single value sets all four sides. Two values set the vertical and +#: horizontal sides. Three values set top, horizontal and bottom. Four +#: values set top, right, bottom and left. + +single_window_margin_width -1 + +#: The window margin (in pts) to use when only a single window is +#: visible. Negative values will cause the value of +#: window_margin_width to be used instead. A single value sets all +#: four sides. Two values set the vertical and horizontal sides. Three +#: values set top, horizontal and bottom. Four values set top, right, +#: bottom and left. + +window_padding_width 0 + +#: The window padding (in pts) (blank area between the text and the +#: window border). A single value sets all four sides. Two values set +#: the vertical and horizontal sides. Three values set top, horizontal +#: and bottom. Four values set top, right, bottom and left. + +placement_strategy center + +#: When the window size is not an exact multiple of the cell size, the +#: cell area of the terminal window will have some extra padding on +#: the sides. You can control how that padding is distributed with +#: this option. Using a value of center means the cell area will be +#: placed centrally. A value of top-left means the padding will be on +#: only the bottom and right edges. + +active_border_color #00ff00 + +#: The color for the border of the active window. Set this to none to +#: not draw borders around the active window. + +inactive_border_color #cccccc + +#: The color for the border of inactive windows + +bell_border_color #ff5a00 + +#: The color for the border of inactive windows in which a bell has +#: occurred + +inactive_text_alpha 1.0 + +#: Fade the text in inactive windows by the specified amount (a number +#: between zero and one, with zero being fully faded). + +hide_window_decorations no + +#: Hide the window decorations (title-bar and window borders) with +#: yes. On macOS, titlebar-only can be used to only hide the titlebar. +#: Whether this works and exactly what effect it has depends on the +#: window manager/operating system. + +resize_debounce_time 0.1 + +#: The time (in seconds) to wait before redrawing the screen when a +#: resize event is received. On platforms such as macOS, where the +#: operating system sends events corresponding to the start and end of +#: a resize, this number is ignored. + +resize_draw_strategy static + +#: Choose how kitty draws a window while a resize is in progress. A +#: value of static means draw the current window contents, mostly +#: unchanged. A value of scale means draw the current window contents +#: scaled. A value of blank means draw a blank window. A value of size +#: means show the window size in cells. + +resize_in_steps no + +#: Resize the OS window in steps as large as the cells, instead of +#: with the usual pixel accuracy. Combined with an +#: initial_window_width and initial_window_height in number of cells, +#: this option can be used to keep the margins as small as possible +#: when resizing the OS window. Note that this does not currently work +#: on Wayland. + +#: }}} + +#: Tab bar {{{ + +tab_bar_edge bottom + +#: Which edge to show the tab bar on, top or bottom + +tab_bar_margin_width 0.0 + +#: The margin to the left and right of the tab bar (in pts) + +tab_bar_style fade + +#: The tab bar style, can be one of: fade, separator, powerline, or +#: hidden. In the fade style, each tab's edges fade into the +#: background color, in the separator style, tabs are separated by a +#: configurable separator, and the powerline shows the tabs as a +#: continuous line. + +tab_bar_min_tabs 2 + +#: The minimum number of tabs that must exist before the tab bar is +#: shown + +tab_switch_strategy previous + +#: The algorithm to use when switching to a tab when the current tab +#: is closed. The default of previous will switch to the last used +#: tab. A value of left will switch to the tab to the left of the +#: closed tab. A value of last will switch to the right-most tab. + +tab_fade 0.25 0.5 0.75 1 + +#: Control how each tab fades into the background when using fade for +#: the tab_bar_style. Each number is an alpha (between zero and one) +#: that controls how much the corresponding cell fades into the +#: background, with zero being no fade and one being full fade. You +#: can change the number of cells used by adding/removing entries to +#: this list. + +tab_separator " ┇" + +#: The separator between tabs in the tab bar when using separator as +#: the tab_bar_style. + +tab_title_template "{title}" + +#: A template to render the tab title. The default just renders the +#: title. If you wish to include the tab-index as well, use something +#: like: {index}: {title}. Useful if you have shortcuts mapped for +#: goto_tab N. In addition you can use {layout_name} for the current +#: layout name and {num_windows} for the number of windows in the tab. +#: Note that formatting is done by Python's string formatting +#: machinery, so you can use, for instance, {layout_name[:2].upper()} +#: to show only the first two letters of the layout name, upper-cased. + +active_tab_title_template none + +#: Template to use for active tabs, if not specified falls back to +#: tab_title_template. + +active_tab_foreground #000 +active_tab_background #eee +active_tab_font_style bold-italic +inactive_tab_foreground #444 +inactive_tab_background #999 +inactive_tab_font_style normal + +#: Tab bar colors and styles + +tab_bar_background none + +#: Background color for the tab bar. Defaults to using the terminal +#: background color. + +#: }}} + +#: Color scheme {{{ + +foreground #dddddd +background #000000 + +#: The foreground and background colors + +background_opacity 0.92 + +#: The opacity of the background. A number between 0 and 1, where 1 is +#: opaque and 0 is fully transparent. This will only work if +#: supported by the OS (for instance, when using a compositor under +#: X11). Note that it only sets the background color's opacity in +#: cells that have the same background color as the default terminal +#: background. This is so that things like the status bar in vim, +#: powerline prompts, etc. still look good. But it means that if you +#: use a color theme with a background color in your editor, it will +#: not be rendered as transparent. Instead you should change the +#: default background color in your kitty config and not use a +#: background color in the editor color scheme. Or use the escape +#: codes to set the terminals default colors in a shell script to +#: launch your editor. Be aware that using a value less than 1.0 is a +#: (possibly significant) performance hit. If you want to dynamically +#: change transparency of windows set dynamic_background_opacity to +#: yes (this is off by default as it has a performance cost) + +background_image none + +#: Path to a background image. Must be in PNG format. + +background_image_layout tiled + +#: Whether to tile or scale the background image. + +background_image_linear no + +#: When background image is scaled, whether linear interpolation +#: should be used. + +dynamic_background_opacity no + +#: Allow changing of the background_opacity dynamically, using either +#: keyboard shortcuts (increase_background_opacity and +#: decrease_background_opacity) or the remote control facility. + +background_tint 0.0 + +#: How much to tint the background image by the background color. The +#: tint is applied only under the text area, not margin/borders. Makes +#: it easier to read the text. Tinting is done using the current +#: background color for each window. This setting applies only if +#: background_opacity is set and transparent windows are supported or +#: background_image is set. + +dim_opacity 0.75 + +#: How much to dim text that has the DIM/FAINT attribute set. One +#: means no dimming and zero means fully dimmed (i.e. invisible). + +selection_foreground #000000 + +#: The foreground for text selected with the mouse. A value of none +#: means to leave the color unchanged. + +selection_background #fffacd + +#: The background for text selected with the mouse. + + +#: The 16 terminal colors. There are 8 basic colors, each color has a +#: dull and bright version. You can also set the remaining colors from +#: the 256 color table as color16 to color255. + +color0 #000000 +color8 #767676 + +#: black + +color1 #cc0403 +color9 #f2201f + +#: red + +color2 #19cb00 +color10 #23fd00 + +#: green + +color3 #cecb00 +color11 #fffd00 + +#: yellow + +color4 #0d73cc +color12 #1a8fff + +#: blue + +color5 #cb1ed1 +color13 #fd28ff + +#: magenta + +color6 #0dcdcd +color14 #14ffff + +#: cyan + +color7 #dddddd +color15 #ffffff + +#: white + +mark1_foreground black + +#: Color for marks of type 1 + +mark1_background #98d3cb + +#: Color for marks of type 1 (light steel blue) + +mark2_foreground black + +#: Color for marks of type 2 + +mark2_background #f2dcd3 + +#: Color for marks of type 1 (beige) + +mark3_foreground black + +#: Color for marks of type 3 + +mark3_background #f274bc + +#: Color for marks of type 1 (violet) + +#: }}} + +#: Advanced {{{ + +shell . + +#: The shell program to execute. The default value of . means to use +#: whatever shell is set as the default shell for the current user. +#: Note that on macOS if you change this, you might need to add +#: --login to ensure that the shell starts in interactive mode and +#: reads its startup rc files. + +editor vim + +#: The console editor to use when editing the kitty config file or +#: similar tasks. A value of . means to use the environment variables +#: VISUAL and EDITOR in that order. Note that this environment +#: variable has to be set not just in your shell startup scripts but +#: system-wide, otherwise kitty will not see it. + +close_on_child_death no + +#: Close the window when the child process (shell) exits. If no (the +#: default), the terminal will remain open when the child exits as +#: long as there are still processes outputting to the terminal (for +#: example disowned or backgrounded processes). If yes, the window +#: will close as soon as the child process exits. Note that setting it +#: to yes means that any background processes still using the terminal +#: can fail silently because their stdout/stderr/stdin no longer work. + +allow_remote_control no + +#: Allow other programs to control kitty. If you turn this on other +#: programs can control all aspects of kitty, including sending text +#: to kitty windows, opening new windows, closing windows, reading the +#: content of windows, etc. Note that this even works over ssh +#: connections. You can chose to either allow any program running +#: within kitty to control it, with yes or only programs that connect +#: to the socket specified with the kitty --listen-on command line +#: option, if you use the value socket-only. The latter is useful if +#: you want to prevent programs running on a remote computer over ssh +#: from controlling kitty. + +listen_on none + +#: Tell kitty to listen to the specified unix/tcp socket for remote +#: control connections. Note that this will apply to all kitty +#: instances. It can be overridden by the kitty --listen-on command +#: line flag. This option accepts only UNIX sockets, such as +#: unix:${TEMP}/mykitty or (on Linux) unix:@mykitty. Environment +#: variables are expanded. If {kitty_pid} is present then it is +#: replaced by the PID of the kitty process, otherwise the PID of the +#: kitty process is appended to the value, with a hyphen. This option +#: is ignored unless you also set allow_remote_control to enable +#: remote control. See the help for kitty --listen-on for more +#: details. + +# env + +#: Specify environment variables to set in all child processes. Note +#: that environment variables are expanded recursively, so if you +#: use:: + +#: env MYVAR1=a +#: env MYVAR2=${MYVAR1}/${HOME}/b + +#: The value of MYVAR2 will be a//b. + +update_check_interval 0 + +#: Periodically check if an update to kitty is available. If an update +#: is found a system notification is displayed informing you of the +#: available update. The default is to check every 24 hrs, set to zero +#: to disable. + +startup_session none + +#: Path to a session file to use for all kitty instances. Can be +#: overridden by using the kitty --session command line option for +#: individual instances. See +#: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty +#: documentation for details. Note that relative paths are interpreted +#: with respect to the kitty config directory. Environment variables +#: in the path are expanded. + +clipboard_control write-clipboard write-primary + +#: Allow programs running in kitty to read and write from the +#: clipboard. You can control exactly which actions are allowed. The +#: set of possible actions is: write-clipboard read-clipboard write- +#: primary read-primary. You can additionally specify no-append to +#: disable kitty's protocol extension for clipboard concatenation. The +#: default is to allow writing to the clipboard and primary selection +#: with concatenation enabled. Note that enabling the read +#: functionality is a security risk as it means that any program, even +#: one running on a remote server via SSH can read your clipboard. + +term xterm-kitty + +#: The value of the TERM environment variable to set. Changing this +#: can break many terminal programs, only change it if you know what +#: you are doing, not because you read some advice on Stack Overflow +#: to change it. The TERM variable is used by various programs to get +#: information about the capabilities and behavior of the terminal. If +#: you change it, depending on what programs you run, and how +#: different the terminal you are changing it to is, various things +#: from key-presses, to colors, to various advanced features may not +#: work. + +#: }}} + +#: OS specific tweaks {{{ + +macos_titlebar_color system + +#: Change the color of the kitty window's titlebar on macOS. A value +#: of system means to use the default system color, a value of +#: background means to use the background color of the currently +#: active window and finally you can use an arbitrary color, such as +#: #12af59 or red. WARNING: This option works by using a hack, as +#: there is no proper Cocoa API for it. It sets the background color +#: of the entire window and makes the titlebar transparent. As such it +#: is incompatible with background_opacity. If you want to use both, +#: you are probably better off just hiding the titlebar with +#: hide_window_decorations. + +macos_option_as_alt no + +#: Use the option key as an alt key. With this set to no, kitty will +#: use the macOS native Option+Key = unicode character behavior. This +#: will break any Alt+key keyboard shortcuts in your terminal +#: programs, but you can use the macOS unicode input technique. You +#: can use the values: left, right, or both to use only the left, +#: right or both Option keys as Alt, instead. + +macos_hide_from_tasks no + +#: Hide the kitty window from running tasks (Option+Tab) on macOS. + +macos_quit_when_last_window_closed no + +#: Have kitty quit when all the top-level windows are closed. By +#: default, kitty will stay running, even with no open windows, as is +#: the expected behavior on macOS. + +macos_window_resizable yes + +#: Disable this if you want kitty top-level (OS) windows to not be +#: resizable on macOS. + +macos_thicken_font 0 + +#: Draw an extra border around the font with the given width, to +#: increase legibility at small font sizes. For example, a value of +#: 0.75 will result in rendering that looks similar to sub-pixel +#: antialiasing at common font sizes. + +macos_traditional_fullscreen no + +#: Use the traditional full-screen transition, that is faster, but +#: less pretty. + +macos_show_window_title_in all + +#: Show or hide the window title in the macOS window or menu-bar. A +#: value of window will show the title of the currently active window +#: at the top of the macOS window. A value of menubar will show the +#: title of the currently active window in the macOS menu-bar, making +#: use of otherwise wasted space. all will show the title everywhere +#: and none hides the title in the window and the menu-bar. + +macos_custom_beam_cursor no + +#: Enable/disable custom mouse cursor for macOS that is easier to see +#: on both light and dark backgrounds. WARNING: this might make your +#: mouse cursor invisible on dual GPU machines. + +linux_display_server auto + +#: Choose between Wayland and X11 backends. By default, an appropriate +#: backend based on the system state is chosen automatically. Set it +#: to x11 or wayland to force the choice. + +#: }}} + +#: Keyboard shortcuts {{{ + +#: For a list of key names, see: the GLFW key macros +#: . +#: The name to use is the part after the GLFW_KEY_ prefix. For a list +#: of modifier names, see: GLFW mods +#: + +#: On Linux you can also use XKB key names to bind keys that are not +#: supported by GLFW. See XKB keys +#: for a list of key names. The name to use is the part +#: after the XKB_KEY_ prefix. Note that you can only use an XKB key +#: name for keys that are not known as GLFW keys. + +#: Finally, you can use raw system key codes to map keys, again only +#: for keys that are not known as GLFW keys. To see the system key +#: code for a key, start kitty with the kitty --debug-keyboard option. +#: Then kitty will output some debug text for every key event. In that +#: text look for ``native_code`` the value of that becomes the key +#: name in the shortcut. For example: + +#: .. code-block:: none + +#: on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a' + +#: Here, the key name for the A key is 0x61 and you can use it with:: + +#: map ctrl+0x61 something + +#: to map ctrl+a to something. + +#: You can use the special action no_op to unmap a keyboard shortcut +#: that is assigned in the default configuration:: + +#: map kitty_mod+space no_op + +#: You can combine multiple actions to be triggered by a single +#: shortcut, using the syntax below:: + +#: map key combine action1 action2 action3 ... + +#: For example:: + +#: map kitty_mod+e combine : new_window : next_layout + +#: this will create a new window and switch to the next available +#: layout + +#: You can use multi-key shortcuts using the syntax shown below:: + +#: map key1>key2>key3 action + +#: For example:: + +#: map ctrl+f>2 set_font_size 20 + +kitty_mod ctrl+shift + +#: The value of kitty_mod is used as the modifier for all default +#: shortcuts, you can change it in your kitty.conf to change the +#: modifiers for all the default shortcuts. + +clear_all_shortcuts no + +#: You can have kitty remove all shortcut definition seen up to this +#: point. Useful, for instance, to remove the default shortcuts. + +# kitten_alias hints hints --hints-offset=0 + +#: You can create aliases for kitten names, this allows overriding the +#: defaults for kitten options and can also be used to shorten +#: repeated mappings of the same kitten with a specific group of +#: options. For example, the above alias changes the default value of +#: kitty +kitten hints --hints-offset to zero for all mappings, +#: including the builtin ones. + +#: Clipboard {{{ + +map kitty_mod+c copy_to_clipboard + +#: There is also a copy_or_interrupt action that can be optionally +#: mapped to Ctrl+c. It will copy only if there is a selection and +#: send an interrupt otherwise. Similarly, copy_and_clear_or_interrupt +#: will copy and clear the selection or send an interrupt if there is +#: no selection. + +map kitty_mod+v paste_from_clipboard +map kitty_mod+s paste_from_selection +map shift+insert paste_from_selection +map kitty_mod+o pass_selection_to_program + +#: You can also pass the contents of the current selection to any +#: program using pass_selection_to_program. By default, the system's +#: open program is used, but you can specify your own, the selection +#: will be passed as a command line argument to the program, for +#: example:: + +#: map kitty_mod+o pass_selection_to_program firefox + +#: You can pass the current selection to a terminal program running in +#: a new kitty window, by using the @selection placeholder:: + +#: map kitty_mod+y new_window less @selection + +#: }}} + +#: Scrolling {{{ + +map kitty_mod+up scroll_line_up +map kitty_mod+k scroll_line_up +map kitty_mod+down scroll_line_down +map kitty_mod+j scroll_line_down +map kitty_mod+page_up scroll_page_up +map kitty_mod+page_down scroll_page_down +map kitty_mod+home scroll_home +map kitty_mod+end scroll_end +map kitty_mod+h show_scrollback + +#: You can pipe the contents of the current screen + history buffer as +#: STDIN to an arbitrary program using the ``launch`` function. For +#: example, the following opens the scrollback buffer in less in an +#: overlay window:: + +#: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R + +#: For more details on piping screen and buffer contents to external +#: programs, see launch. + +#: }}} + +#: Window management {{{ + +map kitty_mod+enter new_window + +#: You can open a new window running an arbitrary program, for +#: example:: + +#: map kitty_mod+y launch mutt + +#: You can open a new window with the current working directory set to +#: the working directory of the current window using:: + +#: map ctrl+alt+enter launch --cwd=current + +#: You can open a new window that is allowed to control kitty via the +#: kitty remote control facility by prefixing the command line with @. +#: Any programs running in that window will be allowed to control +#: kitty. For example:: + +#: map ctrl+enter launch --allow-remote-control some_program + +#: You can open a new window next to the currently active window or as +#: the first window, with:: + +#: map ctrl+n launch --location=neighbor some_program +#: map ctrl+f launch --location=first some_program + +#: For more details, see launch. + +map kitty_mod+n new_os_window + +#: Works like new_window above, except that it opens a top level OS +#: kitty window. In particular you can use new_os_window_with_cwd to +#: open a window with the current working directory. + +map kitty_mod+w close_window +map kitty_mod+] next_window +map kitty_mod+[ previous_window +map kitty_mod+f move_window_forward +map kitty_mod+b move_window_backward +map kitty_mod+` move_window_to_top +map kitty_mod+r start_resizing_window +map kitty_mod+1 first_window +map kitty_mod+2 second_window +map kitty_mod+3 third_window +map kitty_mod+4 fourth_window +map kitty_mod+5 fifth_window +map kitty_mod+6 sixth_window +map kitty_mod+7 seventh_window +map kitty_mod+8 eighth_window +map kitty_mod+9 ninth_window +map kitty_mod+0 tenth_window +#: }}} + +#: Tab management {{{ + +map kitty_mod+right next_tab +map kitty_mod+left previous_tab +map kitty_mod+t new_tab +map kitty_mod+q close_tab +map kitty_mod+. move_tab_forward +map kitty_mod+, move_tab_backward +map kitty_mod+alt+t set_tab_title + +#: You can also create shortcuts to go to specific tabs, with 1 being +#: the first tab, 2 the second tab and -1 being the previously active +#: tab, and any number larger than the last tab being the last tab:: + +#: map ctrl+alt+1 goto_tab 1 +#: map ctrl+alt+2 goto_tab 2 + +#: Just as with new_window above, you can also pass the name of +#: arbitrary commands to run when using new_tab and use +#: new_tab_with_cwd. Finally, if you want the new tab to open next to +#: the current tab rather than at the end of the tabs list, use:: + +#: map ctrl+t new_tab !neighbor [optional cmd to run] +#: }}} + +#: Layout management {{{ + +map kitty_mod+l next_layout + +#: You can also create shortcuts to switch to specific layouts:: + +#: map ctrl+alt+t goto_layout tall +#: map ctrl+alt+s goto_layout stack + +#: Similarly, to switch back to the previous layout:: + +#: map ctrl+alt+p last_used_layout +#: }}} + +#: Font sizes {{{ + +#: You can change the font size for all top-level kitty OS windows at +#: a time or only the current one. + +map kitty_mod+equal change_font_size all +2.0 +map kitty_mod+minus change_font_size all -2.0 +map kitty_mod+backspace change_font_size all 0 + +#: To setup shortcuts for specific font sizes:: + +#: map kitty_mod+f6 change_font_size all 10.0 + +#: To setup shortcuts to change only the current OS window's font +#: size:: + +#: map kitty_mod+f6 change_font_size current 10.0 +#: }}} + +#: Select and act on visible text {{{ + +#: Use the hints kitten to select text and either pass it to an +#: external program or insert it into the terminal or copy it to the +#: clipboard. + +map kitty_mod+e kitten hints + +#: Open a currently visible URL using the keyboard. The program used +#: to open the URL is specified in open_url_with. + +map kitty_mod+p>f kitten hints --type path --program - + +#: Select a path/filename and insert it into the terminal. Useful, for +#: instance to run git commands on a filename output from a previous +#: git command. + +map kitty_mod+p>shift+f kitten hints --type path + +#: Select a path/filename and open it with the default open program. + +map kitty_mod+p>l kitten hints --type line --program - + +#: Select a line of text and insert it into the terminal. Use for the +#: output of things like: ls -1 + +map kitty_mod+p>w kitten hints --type word --program - + +#: Select words and insert into terminal. + +map kitty_mod+p>h kitten hints --type hash --program - + +#: Select something that looks like a hash and insert it into the +#: terminal. Useful with git, which uses sha1 hashes to identify +#: commits + +map kitty_mod+p>n kitten hints --type linenum + +#: Select something that looks like filename:linenum and open it in +#: vim at the specified line number. + + +#: The hints kitten has many more modes of operation that you can map +#: to different shortcuts. For a full description see kittens/hints. +#: }}} + +#: Miscellaneous {{{ + +map kitty_mod+f11 toggle_fullscreen +map kitty_mod+f10 toggle_maximized +map kitty_mod+u kitten unicode_input +map kitty_mod+f2 edit_config_file +map kitty_mod+escape kitty_shell window + +#: Open the kitty shell in a new window/tab/overlay/os_window to +#: control kitty using commands. + +map kitty_mod+a>m set_background_opacity +0.1 +map kitty_mod+a>l set_background_opacity -0.1 +map kitty_mod+a>1 set_background_opacity 1 +map kitty_mod+a>d set_background_opacity default +map kitty_mod+delete clear_terminal reset active + +#: You can create shortcuts to clear/reset the terminal. For example:: + +#: # Reset the terminal +#: map kitty_mod+f9 clear_terminal reset active +#: # Clear the terminal screen by erasing all contents +#: map kitty_mod+f10 clear_terminal clear active +#: # Clear the terminal scrollback by erasing it +#: map kitty_mod+f11 clear_terminal scrollback active +#: # Scroll the contents of the screen into the scrollback +#: map kitty_mod+f12 clear_terminal scroll active + +#: If you want to operate on all windows instead of just the current +#: one, use all instead of active. + +#: It is also possible to remap Ctrl+L to both scroll the current +#: screen contents into the scrollback buffer and clear the screen, +#: instead of just clearing the screen:: + +#: map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c + + +#: You can tell kitty to send arbitrary (UTF-8) encoded text to the +#: client program when pressing specified shortcut keys. For example:: + +#: map ctrl+alt+a send_text all Special text + +#: This will send "Special text" when you press the ctrl+alt+a key +#: combination. The text to be sent is a python string literal so you +#: can use escapes like \x1b to send control codes or \u21fb to send +#: unicode characters (or you can just input the unicode characters +#: directly as UTF-8 text). The first argument to send_text is the +#: keyboard modes in which to activate the shortcut. The possible +#: values are normal or application or kitty or a comma separated +#: combination of them. The special keyword all means all modes. The +#: modes normal and application refer to the DECCKM cursor key mode +#: for terminals, and kitty refers to the special kitty extended +#: keyboard protocol. + +#: Another example, that outputs a word and then moves the cursor to +#: the start of the line (same as pressing the Home key):: + +#: map ctrl+alt+a send_text normal Word\x1b[H +#: map ctrl+alt+a send_text application Word\x1bOH + +#: }}} + + +# }}} + +include ~/.cache/wal/colors-kitty.conf + + diff --git a/.config/neofetch/config.conf b/.config/neofetch/config.conf new file mode 100644 index 0000000..da0e4f5 --- /dev/null +++ b/.config/neofetch/config.conf @@ -0,0 +1,856 @@ +# See this wiki page for more info: +# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info +print_info() { + + prin + + info title + #info underline + + prin + + info "OS" distro + info "Host" model + #info "Kernel" kernel + #info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + #info "Theme" theme + #info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + #info "GPU" gpu + info "Memory" memory + + # info "GPU Driver" gpu_driver # Linux/macOS only + # info "CPU Usage" cpu_usage + # info "Disk" disk + # info "Battery" battery + # info "Font" font + # info "Song" song + # [[ "$player" ]] && prin "Music Player" "$player" + # info "Local IP" local_ip + # info "Public IP" public_ip + # info "Users" users + # info "Locale" locale # This only works on glibc systems. + + prin + + info cols +} + +# Title + + +# Hide/Show Fully qualified domain name. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --title_fqdn +title_fqdn="off" + + +# Kernel + + +# Shorten the output of the kernel function. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --kernel_shorthand +# Supports: Everything except *BSDs (except PacBSD and PC-BSD) +# +# Example: +# on: '4.8.9-1-ARCH' +# off: 'Linux 4.8.9-1-ARCH' +kernel_shorthand="on" + + +# Distro + + +# Shorten the output of the distro function +# +# Default: 'off' +# Values: 'on', 'tiny', 'off' +# Flag: --distro_shorthand +# Supports: Everything except Windows and Haiku +distro_shorthand="off" + +# Show/Hide OS Architecture. +# Show 'x86_64', 'x86' and etc in 'Distro:' output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --os_arch +# +# Example: +# on: 'Arch Linux x86_64' +# off: 'Arch Linux' +os_arch="on" + + +# Uptime + + +# Shorten the output of the uptime function +# +# Default: 'on' +# Values: 'on', 'tiny', 'off' +# Flag: --uptime_shorthand +# +# Example: +# on: '2 days, 10 hours, 3 mins' +# tiny: '2d 10h 3m' +# off: '2 days, 10 hours, 3 minutes' +uptime_shorthand="on" + + +# Memory + + +# Show memory pecentage in output. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --memory_percent +# +# Example: +# on: '1801MiB / 7881MiB (22%)' +# off: '1801MiB / 7881MiB' +memory_percent="off" + + +# Packages + + +# Show/Hide Package Manager names. +# +# Default: 'tiny' +# Values: 'on', 'tiny' 'off' +# Flag: --package_managers +# +# Example: +# on: '998 (pacman), 8 (flatpak), 4 (snap)' +# tiny: '908 (pacman, flatpak, snap)' +# off: '908' +package_managers="on" + + +# Shell + + +# Show the path to $SHELL +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --shell_path +# +# Example: +# on: '/bin/bash' +# off: 'bash' +shell_path="off" + +# Show $SHELL version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --shell_version +# +# Example: +# on: 'bash 4.4.5' +# off: 'bash' +shell_version="on" + + +# CPU + + +# CPU speed type +# +# Default: 'bios_limit' +# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. +# Flag: --speed_type +# Supports: Linux with 'cpufreq' +# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. +speed_type="bios_limit" + +# CPU speed shorthand +# +# Default: 'off' +# Values: 'on', 'off'. +# Flag: --speed_shorthand +# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz +# +# Example: +# on: 'i7-6500U (4) @ 3.1GHz' +# off: 'i7-6500U (4) @ 3.100GHz' +speed_shorthand="off" + +# Enable/Disable CPU brand in output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_brand +# +# Example: +# on: 'Intel i7-6500U' +# off: 'i7-6500U (4)' +cpu_brand="on" + +# CPU Speed +# Hide/Show CPU speed. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_speed +# +# Example: +# on: 'Intel i7-6500U (4) @ 3.1GHz' +# off: 'Intel i7-6500U (4)' +cpu_speed="on" + +# CPU Cores +# Display CPU cores in output +# +# Default: 'logical' +# Values: 'logical', 'physical', 'off' +# Flag: --cpu_cores +# Support: 'physical' doesn't work on BSD. +# +# Example: +# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) +# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) +# off: 'Intel i7-6500U @ 3.1GHz' +cpu_cores="logical" + +# CPU Temperature +# Hide/Show CPU temperature. +# Note the temperature is added to the regular CPU function. +# +# Default: 'off' +# Values: 'C', 'F', 'off' +# Flag: --cpu_temp +# Supports: Linux, BSD +# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable +# coretemp kernel module. This only supports newer Intel processors. +# +# Example: +# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' +# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' +# off: 'Intel i7-6500U (4) @ 3.1GHz' +cpu_temp="off" + + +# GPU + + +# Enable/Disable GPU Brand +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gpu_brand +# +# Example: +# on: 'AMD HD 7950' +# off: 'HD 7950' +gpu_brand="on" + +# Which GPU to display +# +# Default: 'all' +# Values: 'all', 'dedicated', 'integrated' +# Flag: --gpu_type +# Supports: Linux +# +# Example: +# all: +# GPU1: AMD HD 7950 +# GPU2: Intel Integrated Graphics +# +# dedicated: +# GPU1: AMD HD 7950 +# +# integrated: +# GPU1: Intel Integrated Graphics +gpu_type="all" + + +# Resolution + + +# Display refresh rate next to each monitor +# Default: 'off' +# Values: 'on', 'off' +# Flag: --refresh_rate +# Supports: Doesn't work on Windows. +# +# Example: +# on: '1920x1080 @ 60Hz' +# off: '1920x1080' +refresh_rate="off" + + +# Gtk Theme / Icons / Font + + +# Shorten output of GTK Theme / Icons / Font +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --gtk_shorthand +# +# Example: +# on: 'Numix, Adwaita' +# off: 'Numix [GTK2], Adwaita [GTK3]' +gtk_shorthand="off" + + +# Enable/Disable gtk2 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk2 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Adwaita [GTK3]' +gtk2="on" + +# Enable/Disable gtk3 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk3 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Numix [GTK2]' +gtk3="on" + + +# IP Address + + +# Website to ping for the public IP +# +# Default: 'http://ident.me' +# Values: 'url' +# Flag: --ip_host +public_ip_host="http://ident.me" + +# Public IP timeout. +# +# Default: '2' +# Values: 'int' +# Flag: --ip_timeout +public_ip_timeout=2 + + +# Desktop Environment + + +# Show Desktop Environment version +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --de_version +de_version="off" + + +# Disk + + +# Which disks to display. +# The values can be any /dev/sdXX, mount point or directory. +# NOTE: By default we only show the disk info for '/'. +# +# Default: '/' +# Values: '/', '/dev/sdXX', '/path/to/drive'. +# Flag: --disk_show +# +# Example: +# disk_show=('/' '/dev/sdb1'): +# 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 823G / 893G (93%)' +# +# disk_show=('/'): +# 'Disk (/): 74G / 118G (66%)' +# +disk_show=('/') + +# Disk subtitle. +# What to append to the Disk subtitle. +# +# Default: 'mount' +# Values: 'mount', 'name', 'dir', 'none' +# Flag: --disk_subtitle +# +# Example: +# name: 'Disk (/dev/sda1): 74G / 118G (66%)' +# 'Disk (/dev/sdb2): 74G / 118G (66%)' +# +# mount: 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Local Disk): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 74G / 118G (66%)' +# +# dir: 'Disk (/): 74G / 118G (66%)' +# 'Disk (Local Disk): 74G / 118G (66%)' +# 'Disk (Videos): 74G / 118G (66%)' +# +# none: 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +disk_subtitle="mount" + +# Disk percent. +# Show/Hide disk percent. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --disk_percent +# +# Example: +# on: 'Disk (/): 74G / 118G (66%)' +# off: 'Disk (/): 74G / 118G' +disk_percent="on" + + +# Song + + +# Manually specify a music player. +# +# Default: 'auto' +# Values: 'auto', 'player-name' +# Flag: --music_player +# +# Available values for 'player-name': +# +# amarok +# audacious +# banshee +# bluemindo +# clementine +# cmus +# deadbeef +# deepin-music +# dragon +# elisa +# exaile +# gnome-music +# gmusicbrowser +# gogglesmm +# guayadeque +# io.elementary.music +# iTunes +# juk +# lollypop +# mocp +# mopidy +# mpd +# muine +# netease-cloud-music +# pogo +# pragha +# qmmp +# quodlibet +# rhythmbox +# sayonara +# smplayer +# spotify +# strawberry +# tomahawk +# vlc +# xmms2d +# xnoise +# yarock +music_player="auto" + +# Format to display song information. +# +# Default: '%artist% - %album% - %title%' +# Values: '%artist%', '%album%', '%title%' +# Flag: --song_format +# +# Example: +# default: 'Song: Jet - Get Born - Sgt Major' +song_format="%artist% - %album% - %title%" + +# Print the Artist, Album and Title on separate lines +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --song_shorthand +# +# Example: +# on: 'Artist: The Fratellis' +# 'Album: Costello Music' +# 'Song: Chelsea Dagger' +# +# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' +song_shorthand="off" + +# 'mpc' arguments (specify a host, password etc). +# +# Default: '' +# Example: mpc_args=(-h HOST -P PASSWORD) +mpc_args=() + + +# Text Colors + + +# Text Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --colors +# +# Each number represents a different part of the text in +# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' +# +# Example: +# colors=(distro) - Text is colored based on Distro colors. +# colors=(4 6 1 8 8 6) - Text is colored in the order above. +colors=(distro) + + +# Text Options + + +# Toggle bold text +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bold +bold="on" + +# Enable/Disable Underline +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --underline +underline_enabled="on" + +# Underline character +# +# Default: '-' +# Values: 'string' +# Flag: --underline_char +underline_char="-" + + +# Info Separator +# Replace the default separator with the specified string. +# +# Default: ':' +# Flag: --separator +# +# Example: +# separator="->": 'Shell-> bash' +# separator=" =": 'WM = dwm' +separator=":" + + +# Color Blocks + + +# Color block range +# The range of colors to print. +# +# Default: '0', '15' +# Values: 'num' +# Flag: --block_range +# +# Example: +# +# Display colors 0-7 in the blocks. (8 colors) +# neofetch --block_range 0 7 +# +# Display colors 0-15 in the blocks. (16 colors) +# neofetch --block_range 0 15 +block_range=(0 15) + +# Toggle color blocks +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --color_blocks +color_blocks="on" + +# Color block width in spaces +# +# Default: '3' +# Values: 'num' +# Flag: --block_width +block_width=3 + +# Color block height in lines +# +# Default: '1' +# Values: 'num' +# Flag: --block_height +block_height=1 + +# Color Alignment +# +# Default: 'auto' +# Values: 'auto', 'num' +# Flag: --col_offset +# +# Number specifies how far from the left side of the terminal (in spaces) to +# begin printing the columns, in case you want to e.g. center them under your +# text. +# Example: +# col_offset="auto" - Default behavior of neofetch +# col_offset=7 - Leave 7 spaces then print the colors +col_offset="auto" + +# Progress Bars + + +# Bar characters +# +# Default: '-', '=' +# Values: 'string', 'string' +# Flag: --bar_char +# +# Example: +# neofetch --bar_char 'elapsed' 'total' +# neofetch --bar_char '-' '=' +bar_char_elapsed="-" +bar_char_total="=" + +# Toggle Bar border +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bar_border +bar_border="on" + +# Progress bar length in spaces +# Number of chars long to make the progress bars. +# +# Default: '15' +# Values: 'num' +# Flag: --bar_length +bar_length=15 + +# Progress bar colors +# When set to distro, uses your distro's logo colors. +# +# Default: 'distro', 'distro' +# Values: 'distro', 'num' +# Flag: --bar_colors +# +# Example: +# neofetch --bar_colors 3 4 +# neofetch --bar_colors distro 5 +bar_color_elapsed="distro" +bar_color_total="distro" + + +# Info display +# Display a bar with the info. +# +# Default: 'off' +# Values: 'bar', 'infobar', 'barinfo', 'off' +# Flags: --cpu_display +# --memory_display +# --battery_display +# --disk_display +# +# Example: +# bar: '[---=======]' +# infobar: 'info [---=======]' +# barinfo: '[---=======] info' +# off: 'info' +cpu_display="off" +memory_display="off" +battery_display="off" +disk_display="off" + + +# Backend Settings + + +# Image backend. +# +# Default: 'ascii' +# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off', +# 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty' +# Flag: --backend +image_backend="ascii" + +# Image Source +# +# Which image or ascii file to display. +# +# Default: 'auto' +# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' +# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' +# Flag: --source +# +# NOTE: 'auto' will pick the best image source for whatever image backend is used. +# In ascii mode, distro ascii art will be used and in an image mode, your +# wallpaper will be used. +image_source="auto" + + +# Ascii Options + + +# Ascii distro +# Which distro's ascii art to display. +# +# Default: 'auto' +# Values: 'auto', 'distro_name' +# Flag: --ascii_distro +# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, AOSC, +# Apricity, ArcoLinux, ArchBox, ARCHlabs, ArchStrike, +# XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, Bitrig, +# BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD, +# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, +# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, +# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin, +# DesaOS, Devuan, DracOS, DragonFly, Drauger, Elementary, +# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, +# FreeMiNT, Frugalware, Funtoo, GalliumOS, Gentoo, Pentoo, +# gNewSense, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, +# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion, +# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite, +# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, +# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib, +# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner, +# NuTyX, OBRevenge, OpenBSD, OpenIndiana, OpenMandriva, +# OpenWrt, osmc, Oracle, PacBSD, Parabola, Pardus, Parrot, +# Parsix, TrueOS, PCLinuxOS, Peppermint, popos, Porteus, +# PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix, Raspbian, +# Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, Regata, +# Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, +# SharkLinux, Siduction, Slackware, SliTaz, SmartOS, Solus, +# Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, +# openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, +# Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio, Ubuntu, +# Void, Obarun, windows10, Windows7, Xubuntu, Zorin, and IRIX +# have ascii logos +# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants. +# Use '{distro name}_old' to use the old logos. +# NOTE: Ubuntu has flavor variants. +# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, +# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. +# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, +# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, +# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, +# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, +# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, +# postmarketOS, and Void have a smaller logo variant. +# Use '{distro name}_small' to use the small variants. +ascii_distro="auto" + +# Ascii Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --ascii_colors +# +# Example: +# ascii_colors=(distro) - Ascii is colored based on Distro colors. +# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. +ascii_colors=(distro) + +# Bold ascii logo +# Whether or not to bold the ascii logo. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --ascii_bold +ascii_bold="on" + + +# Image Options + + +# Image loop +# Setting this to on will make neofetch redraw the image constantly until +# Ctrl+C is pressed. This fixes display issues in some terminal emulators. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --loop +image_loop="off" + +# Thumbnail directory +# +# Default: '~/.cache/thumbnails/neofetch' +# Values: 'dir' +thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" + +# Crop mode +# +# Default: 'normal' +# Values: 'normal', 'fit', 'fill' +# Flag: --crop_mode +# +# See this wiki page to learn about the fit and fill options. +# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F +crop_mode="normal" + +# Crop offset +# Note: Only affects 'normal' crop mode. +# +# Default: 'center' +# Values: 'northwest', 'north', 'northeast', 'west', 'center' +# 'east', 'southwest', 'south', 'southeast' +# Flag: --crop_offset +crop_offset="center" + +# Image size +# The image is half the terminal width by default. +# +# Default: 'auto' +# Values: 'auto', '00px', '00%', 'none' +# Flags: --image_size +# --size +image_size="auto" + +# Gap between image and text +# +# Default: '3' +# Values: 'num', '-num' +# Flag: --gap +gap=3 + +# Image offsets +# Only works with the w3m backend. +# +# Default: '0' +# Values: 'px' +# Flags: --xoffset +# --yoffset +yoffset=0 +xoffset=0 + +# Image background color +# Only works with the w3m backend. +# +# Default: '' +# Values: 'color', 'blue' +# Flag: --bg_color +background_color= + + +# Misc Options + +# Stdout mode +# Turn off all colors and disables image backend (ASCII/Image). +# Useful for piping into another command. +# Default: 'off' +# Values: 'on', 'off' +stdout="off" diff --git a/.config/picom.conf b/.config/picom.conf new file mode 100644 index 0000000..e9379ba --- /dev/null +++ b/.config/picom.conf @@ -0,0 +1,98 @@ +# Shadow +shadow = true; +shadow-radius = 7; +shadow-offset-x = -7; +shadow-offset-y = -7; +log-level = "warn"; +# log-file = "/path/to/your/log/file"; +# shadow-opacity = 0.7; +# shadow-red = 0.0; +# shadow-green = 0.0; +# shadow-blue = 0.0; +shadow-exclude = [ + "name = 'Notification'", + "class_g = 'Conky'", + "class_g ?= 'Notify-osd'", + "class_g = 'Cairo-clock'", + "_GTK_FRAME_EXTENTS@:c" +]; +# shadow-exclude = "n:e:Notification"; +# shadow-exclude-reg = "x10+0+0"; +# xinerama-shadow-crop = true; + +# Opacity +inactive-opacity = 0.95; +# active-opacity = 0.8; +frame-opacity = 0.95; +inactive-opacity-override = false; +# inactive-dim = 0.2; +# inactive-dim-fixed = true; +blur-background = true; +# blur-background-frame = true; +# blur-kern = "3x3gaussian"; +# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"; +# blur-background-fixed = true; +blur-background-exclude = [ + "window_type = 'dock'", + "window_type = 'desktop'", + "_GTK_FRAME_EXTENTS@:c" +]; + +blur: +{ + method = "kernel"; + size = 10; + deviation = 5.0; +}; + +opacity-rule = [ + "100:class_g = 'vlc'", + "100:class_g = 'YACReader'", + "100:class_g = 'Zathura'", + "100:class_g = 'evince'", + "100:class_g = 'Gnome-mpv'" +]; + +# Fading +fading = true; +# fade-delta = 30; +fade-in-step = 0.10; +fade-out-step = 0.10; +# no-fading-openclose = true; +# no-fading-destroyed-argb = true; +fade-exclude = [ ]; + +# Other +backend = "glx"; +mark-wmwin-focused = true; +mark-ovredir-focused = true; +# use-ewmh-active-win = true; +detect-rounded-corners = true; +detect-client-opacity = true; +refresh-rate = 0; +vsync = true; +# sw-opti = true; +# unredir-if-possible = true; +# unredir-if-possible-delay = 5000; +# unredir-if-possible-exclude = [ ]; +focus-exclude = [ "class_g = 'Cairo-clock'" ]; +detect-transient = true; +detect-client-leader = true; +invert-color-include = [ ]; +# resize-damage = 1; + +# GLX backend +#glx-no-stencil = true; +#glx-no-rebind-pixmap = true; +# xrender-sync-fence = true; +use-damage = false; + +# Window type settings +wintypes: +{ + tooltip = { fade = true; shadow = true; opacity = 0.95; focus = true; full-shadow = false; }; + dock = { shadow = false; } + dnd = { shadow = false; } + popup_menu = { opacity = 0.95; } + dropdown_menu = { opacity = 0.95; } +}; diff --git a/.config/polybar/config.ini b/.config/polybar/config.ini new file mode 100644 index 0000000..8f5dd0c --- /dev/null +++ b/.config/polybar/config.ini @@ -0,0 +1,281 @@ +;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +;; +;; ____ __ __ +;; / __ \____ / /_ __/ /_ ____ ______ +;; / /_/ / __ \/ / / / / __ \/ __ `/ ___/ +;; / ____/ /_/ / / /_/ / /_/ / /_/ / / +;; /_/ \____/_/\__, /_.___/\__,_/_/ +;; /____/ +;; +;; Created By Aditya Shakya @adi1090x +;; +;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ + +;[color] + +;bg = #1F1F1F +;fg = #FFFFFF +;fg-alt = #A9ABB0 + +;acolor = #00897b +;curgent = #e53935 +;coccupied = #1e88e5 + +;## Material Colors + +;red = #e53935 +;pink = #d81b60 +;purple = #8e24aa +;deep-purple = #5e35b1 +;indigo = #3949ab +;blue = #1e88e5 +;light-blue = #039be5 +;cyan = #00acc1 +;teal = #00897b +;green = #43a047 +;light-green = #7cb342 +;lime = #c0ca33 +;yellow = #fdd835 +;amber = #ffb300 +;orange = #fb8c00 +;deep-orange = #f4511e +;brown = #6d4c41 +;grey = #757575 +;blue-gray = #546e7a + +[color] + +bg = ${xrdb:color0:#222} +fg = ${xrdb:color7:#222} +fg-alt = ${xrdb:color7:#222} +coccupied = ${xrdb:color1:#222} +curgent = ${xrdb:color2:#222} +acolor = ${xrdb:color3:#222} + +;========================================================== + +[bar/main] +monitor = +width = 100% +height = 60 +offset-x = 0% +offset-y = 0% +bottom = true +fixed-center = false +line-size = 2 + +dpi = 192 + +background = ${color.bg} +foreground = ${color.fg} + +border-size = 3 +border-color = ${color.bg} + +module-margin-left = 1 +module-margin-right = 1 + +;========================================================== + +font-0 = "Fantasque Sans Mono:pixelsize=12;4" +font-1 = "Material Icons:size=13;7" + +;========================================================== + +cursor-click = pointer + +;tray-position = right +;tray-padding = 0 +;tray-maxsize = 16 +enable-ipc = true + +scroll-up = i3wm-wsnext +scroll-down = i3wm-wsprev + +;== Module Location ======================================================== + +modules-left = menu workspaces +;term files browser settings +modules-center = mpd +modules-right = pkg volume battery network date powermenu + +;== Modules ======================================================== + +[module/menu] +type = custom/text +;content =  +content =  +content-padding = 2 +content-background = ${color.acolor} +content-foreground = ${color.fg} + +click-left = rofi +click-middle = $HOME/.config/polybar/scripts/menu_full + +;click-left = $HOME/.config/polybar/scripts/menu +;click-right = $HOME/.config/polybar/scripts/color-switch.sh + +[module/workspaces] +type = internal/xworkspaces +pin-workspaces = false +enable-click = true +enable-scroll = true +format-padding = 0 + +icon-0 = 1; +icon-1 = 2; +icon-2 = 3; +icon-3 = 4; +icon-4 = 5; +icon-default = + +format = +label-active = %icon% +label-occupied = %icon% +label-urgent = %icon% +label-empty = %icon% + +label-occupied-padding = 2 +label-empty-padding = 2 +label-urgent-padding = 2 +label-active-padding = 2 + +label-active-foreground = ${color.acolor} +label-urgent-foreground = ${color.curgent} +label-empty-foreground = ${color.fg} +label-occupied-foreground = ${color.coccupied} + +label-active-underline = ${color.acolor} +label-urgent-underline = ${color.curgent} +label-occupied-underline = ${color.coccupied} + +[module/term] +type = custom/text +content =  +content-foreground = ${color.fg-alt} +click-left = termite & +click-middle = urxvt & +click-right = xfce4-terminal & + +[module/files] +type = custom/text +content =  +content-padding = 1 +content-foreground = ${color.fg-alt} +click-left = thunar & +click-right = ranger & + +[module/browser] +type = custom/text +content =  +content-padding = 1 +content-foreground = ${color.fg-alt} +click-left = chromium & +click-right = firefox & + +[module/settings] +type = custom/text +content =  +content-padding = 1 +content-foreground = ${color.fg-alt} +click-left = xfce4-settings & +click-right = lxappearance & + +;========================================================== + +[module/mpd] +type = internal/mpd +;format-online = +format-online =  + +icon-play =  +icon-pause =  + +label-song-maxlen = 125 +label-song-ellipsis = true + +;========================================================== + +[module/pkg] +type = custom/script +exec = $HOME/.config/polybar/scripts/updates.sh +;exec-if = "ping -q -w 2 -c 1 176.34.135.167 > /dev/null" +;label = %{A1:termite -e "aurman -Syyu" & disown:} %{A3:termite -e "aurman -Syyu" & disown:}%output%%{A} %{A} +tail = true + +[module/battery] +type = internal/battery +full-at = 99 +time-format = %H:%M +battery = BAT0 +adapter = AC +format-charging = +;label-charging = %percentage%% (%time%) +label-charging = %percentage%% +format-discharging = +;label-discharging = %percentage%% (%time%) +label-discharging = %percentage%% +format-full = + +format-full-prefix = " " +ramp-capacity-0 =  +ramp-capacity-1 =  +ramp-capacity-2 =  +ramp-capacity-3 =  +ramp-capacity-4 =  + +ramp-capacity-0-foreground = ${color.red} +ramp-capacity-foreground = ${color.fg} +bar-capacity-width = 10 + +animation-charging-0 = "" +animation-charging-1 = "" +animation-charging-2 = "" +animation-charging-3 = "" +animation-charging-4 = "" + +animation-charging-framerate = 750 + +[module/volume] +type = internal/alsa +;speaker-mixer = Speaker +;headphone-mixer = Headphone +;headphone-id = 16 +;mapped = true +format-volume = +label-volume = %percentage%% +format-muted-prefix = " " +label-muted = MUTE + +ramp-volume-0 =  +ramp-volume-1 =  +ramp-volume-2 =  +ramp-volume-3 =  +ramp-volume-4 =  +ramp-volume-5 =  +ramp-volume-6 =  + +[module/network] +type = custom/script +exec = $HOME/.config/polybar/scripts/check-network +click-left = networkmanager_dmenu & +click-right = networkmanager_dmenu & +tail = true + +[module/date] +type = internal/date +interval = 30 +label = %time% +time =  %H:%M %p +time-alt =  %Y-%m-%d + +[module/powermenu] +type = custom/text +content =  +content-padding = 2 +content-background = ${color.acolor} +content-foreground = ${color.fg} +click-left = $HOME/.config/polybar/scripts/sysmenu +click-right = $HOME/.config/polybar/scripts/sysmenu + +;== EOF ======================================================== diff --git a/.config/polybar/fonts/FantasqueSansMono-Regular.ttf b/.config/polybar/fonts/FantasqueSansMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2fa4311bf0c95470b53ad292dcdeb52dbcedf9ac GIT binary patch literal 140224 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 literal 0 HcmV?d00001 diff --git a/.config/polybar/fonts/MaterialIcons-Regular.ttf b/.config/polybar/fonts/MaterialIcons-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7015564ad166a3e9d88c82f17829f0cc01ebe29a GIT binary patch literal 128180 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 ohyj3!`#ee%L;DTjx@8!5k5~VH0QmdE^#A|> literal 0 HcmV?d00001 diff --git a/.config/polybar/launch.sh b/.config/polybar/launch.sh new file mode 100755 index 0000000..0d7a95e --- /dev/null +++ b/.config/polybar/launch.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +# Terminate already running bar instances +killall -q polybar + +# Wait until the processes have been shut down +while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done + +# Launch polybar +polybar main -c $HOME/.config/polybar/config.ini & diff --git a/.config/polybar/scripts/check-network b/.config/polybar/scripts/check-network new file mode 100755 index 0000000..c58ae66 --- /dev/null +++ b/.config/polybar/scripts/check-network @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +count=0 +disconnected="" +wireless_connected="" +ethernet_connected="" + +ID="$(ip link | awk '/state UP/ {print $2}')" + +while true; do + if (ping -c 1 archlinux.org || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) &>/dev/null; then + if [[ $ID == e* ]]; then + echo "$ethernet_connected" ; sleep 25 + else + echo "$wireless_connected" ; sleep 25 + fi + else + echo "$disconnected" ; sleep 0.5 + fi +done diff --git a/.config/polybar/scripts/checkupdates b/.config/polybar/scripts/checkupdates new file mode 100755 index 0000000..4d8a5e8 --- /dev/null +++ b/.config/polybar/scripts/checkupdates @@ -0,0 +1,117 @@ +#!/usr/bin/bash +# +# checkupdates: Safely print a list of pending updates. +# +# Copyright (c) 2013 Kyle Keen +# +# 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 2 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 . +# + +declare -r myname='checkupdates' +declare -r myver='1.0.0' + +plain() { + (( QUIET )) && return + local mesg=$1; shift + printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1 +} + +msg() { + (( QUIET )) && return + local mesg=$1; shift + printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1 +} + +msg2() { + (( QUIET )) && return + local mesg=$1; shift + printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&1 +} + +ask() { + local mesg=$1; shift + printf "${BLUE}::${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}" "$@" >&1 +} + +warning() { + local mesg=$1; shift + printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2 +} + +error() { + local mesg=$1; shift + printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2 +} + +# check if messages are to be printed using color +unset ALL_OFF BOLD BLUE GREEN RED YELLOW +if [[ -t 2 && ! $USE_COLOR = "n" ]]; then + # prefer terminal safe colored and bold text when tput is supported + if tput setaf 0 &>/dev/null; then + ALL_OFF="$(tput sgr0)" + BOLD="$(tput bold)" + BLUE="${BOLD}$(tput setaf 4)" + GREEN="${BOLD}$(tput setaf 2)" + RED="${BOLD}$(tput setaf 1)" + YELLOW="${BOLD}$(tput setaf 3)" + else + ALL_OFF="\e[1;0m" + BOLD="\e[1;1m" + BLUE="${BOLD}\e[1;34m" + GREEN="${BOLD}\e[1;32m" + RED="${BOLD}\e[1;31m" + YELLOW="${BOLD}\e[1;33m" + fi +fi +readonly ALL_OFF BOLD BLUE GREEN RED YELLOW + + +if (( $# > 0 )); then + echo "${myname} v${myver}" + echo + echo "Safely print a list of pending updates" + echo + echo "Usage: ${myname}" + echo + echo 'Note: Export the "CHECKUPDATES_DB" variable to change the path of the temporary database.' + exit 0 +fi + +if ! type -P fakeroot >/dev/null; then + error 'Cannot find the fakeroot binary.' + exit 1 +fi + +if [[ -z $CHECKUPDATES_DB ]]; then + CHECKUPDATES_DB="${TMPDIR:-/tmp}/checkup-db-${USER}/" +fi + +trap 'rm -f $CHECKUPDATES_DB/db.lck' INT TERM EXIT + +DBPath="$(pacman-conf DBPath)" +if [[ -z "$DBPath" ]] || [[ ! -d "$DBPath" ]]; then + DBPath="/var/lib/pacman/" +fi + +mkdir -p "$CHECKUPDATES_DB" +ln -s "${DBPath}/local" "$CHECKUPDATES_DB" &> /dev/null +if ! fakeroot -- pacman -Sy --dbpath "$CHECKUPDATES_DB" --logfile /dev/null &> /dev/null; then + error 'Cannot fetch updates' + exit 1 +fi +pacman -Qu --dbpath "$CHECKUPDATES_DB" 2> /dev/null | grep -v '\[.*\]' + +exit 0 + +# vim: set noet: diff --git a/.config/polybar/scripts/color-switch.sh b/.config/polybar/scripts/color-switch.sh new file mode 100755 index 0000000..5a5e5f6 --- /dev/null +++ b/.config/polybar/scripts/color-switch.sh @@ -0,0 +1,100 @@ +#!/bin/bash + +## Author : Aditya Shakya +## Github : adi1090x +# Custom Rofi Script + +BORDER="#1F1F1F" +SEPARATOR="#1F1F1F" +FOREGROUND="#FFFFFF" +BACKGROUND="#1F1F1F" +BACKGROUND_ALT="#252525" +HIGHLIGHT_BACKGROUND="#00897b" +HIGHLIGHT_FOREGROUND="#1F1F1F" + +BLACK="#000000" +WHITE="#ffffff" +RED="#e53935" +GREEN="#43a047" +YELLOW="#fdd835" +BLUE="#1e88e5" +MAGENTA="#00897b" +CYAN="#00acc1" +PINK="#d81b60" +PURPLE="#8e24aa" +INDIGO="#3949ab" +TEAL="#00897b" +LIME="#c0ca33" +AMBER="#ffb300" +ORANGE="#fb8c00" +BROWN="#6d4c41" +GREY="#757575" +BLUE_GREY="#546e7a" +DEEP_PURPLE="#5e35b1" +DEEP_ORANGE="#f4511e" +LIGHT_BLUE="#039be5" +LIGHT_GREEN="#7cb342" + +SDIR="$HOME/.config/polybar/scripts" + +# Launch Rofi +MENU="$(rofi -no-lazy-grab -sep "|" -dmenu -i -p 'Style :' \ +-hide-scrollbar true \ +-bw 0 \ +-lines 5 \ +-line-padding 10 \ +-padding 20 \ +-width 30 \ +-xoffset 68 -yoffset -70 \ +-location 7 \ +-columns 2 \ +-show-icons -icon-theme "Papirus" \ +-font "Fantasque Sans Mono 10" \ +-color-enabled true \ +-color-window "$BACKGROUND,$BORDER,$SEPARATOR" \ +-color-normal "$BACKGROUND_ALT,$FOREGROUND,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +-color-active "$BACKGROUND,$MAGENTA,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +-color-urgent "$BACKGROUND,$YELLOW,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +<<< "♥ amber|♥ blue|♥ blue-grey|♥ brown|♥ cyan|♥ deep-orange|♥ deep-purple|♥ green|♥ grey|♥ indigo|♥ blue-light|♥ green-light|♥ lime|♥ orange|♥ pink|♥ purple|♥ red|♥ teal|♥ yellow|♥ amber-dark|♥ blue-dark|♥ blue-grey-dark|♥ brown-dark|♥ cyan-dark|♥ deep-orange-dark|♥ deep-purple-dark|♥ green-dark|♥ grey-dark|♥ indigo-dark|♥ blue-light-dark|♥ green-light-dark|♥ lime-dark|♥ orange-dark|♥ pink-dark|♥ purple-dark|♥ red-dark|♥ teal-dark|♥ yellow-dark")" + case "$MENU" in + ## Light Colors + *amber) $SDIR/colors-light.sh -amber ;; + *blue) $SDIR/colors-light.sh -blue ;; + *blue-grey) $SDIR/colors-light.sh -blue-grey ;; + *brown) $SDIR/colors-light.sh -brown ;; + *cyan) $SDIR/colors-light.sh -cyan ;; + *deep-orange) $SDIR/colors-light.sh -deep-orange ;; + *deep-purple) $SDIR/colors-light.sh -deep-purple ;; + *green) $SDIR/colors-light.sh -green ;; + *grey) $SDIR/colors-light.sh -grey ;; + *indigo) $SDIR/colors-light.sh -indigo ;; + *blue-light) $SDIR/colors-light.sh -light-blue ;; + *green-light) $SDIR/colors-light.sh -light-green ;; + *lime) $SDIR/colors-light.sh -lime ;; + *orange) $SDIR/colors-light.sh -orange ;; + *pink) $SDIR/colors-light.sh -pink ;; + *purple) $SDIR/colors-light.sh -purple ;; + *red) $SDIR/colors-light.sh -red ;; + *teal) $SDIR/colors-light.sh -teal ;; + *yellow) $SDIR/colors-light.sh -yellow ;; + ## Dark Colors + *amber-dark) $SDIR/colors-dark.sh -amber ;; + *blue-dark) $SDIR/colors-dark.sh -blue ;; + *blue-grey-dark) $SDIR/colors-dark.sh -blue-grey ;; + *brown-dark) $SDIR/colors-dark.sh -brown ;; + *cyan-dark) $SDIR/colors-dark.sh -cyan ;; + *deep-orange-dark) $SDIR/colors-dark.sh -deep-orange ;; + *deep-purple-dark) $SDIR/colors-dark.sh -deep-purple ;; + *green-dark) $SDIR/colors-dark.sh -green ;; + *grey-dark) $SDIR/colors-dark.sh -grey ;; + *indigo-dark) $SDIR/colors-dark.sh -indigo ;; + *blue-light-dark) $SDIR/colors-dark.sh -light-blue ;; + *green-light-dark) $SDIR/colors-dark.sh -light-green ;; + *lime-dark) $SDIR/colors-dark.sh -lime ;; + *orange-dark) $SDIR/colors-dark.sh -orange ;; + *pink-dark) $SDIR/colors-dark.sh -pink ;; + *purple-dark) $SDIR/colors-dark.sh -purple ;; + *red-dark) $SDIR/colors-dark.sh -red ;; + *teal-dark) $SDIR/colors-dark.sh -teal ;; + *yellow-dark) $SDIR/colors-dark.sh -yellow + esac diff --git a/.config/polybar/scripts/colors-dark.sh b/.config/polybar/scripts/colors-dark.sh new file mode 100755 index 0000000..41a20ff --- /dev/null +++ b/.config/polybar/scripts/colors-dark.sh @@ -0,0 +1,263 @@ +#!/bin/bash + +## Author : Aditya Shakya +## Github : adi1090x + +PDIR="$HOME/.config/polybar" +LAUNCH="polybar-msg cmd restart" + +if [[ $1 = "-amber" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #ffb300/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#ffb300"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#ffb300"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#ffb300"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#ffb300"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-blue" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #1e88e5/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#1e88e5"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#1e88e5"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#1e88e5"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#1e88e5"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-blue-grey" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #546e7a/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#546e7a"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#546e7a"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#546e7a"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#546e7a"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-brown" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #6d4c41/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#6d4c41"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#6d4c41"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#6d4c41"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#6d4c41"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-cyan" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #00acc1/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#00acc1"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#00acc1"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#00acc1"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#00acc1"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-deep-orange" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #f4511e/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#f4511e"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#f4511e"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#f4511e"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#f4511e"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-deep-purple" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #5e35b1/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#5e35b1"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#5e35b1"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#5e35b1"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#5e35b1"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-green" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #43a047/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#43a047"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#43a047"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#43a047"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#43a047"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-grey" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #757575/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#757575"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#757575"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#757575"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#757575"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-indigo" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #3949ab/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#3949ab"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#3949ab"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#3949ab"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#3949ab"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-light-blue" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #039be5/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#039be5"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#039be5"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#039be5"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#039be5"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-light-green" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #7cb342/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#7cb342"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#7cb342"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#7cb342"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#7cb342"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-lime" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #c0ca33/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#c0ca33"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#c0ca33"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#c0ca33"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#c0ca33"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-orange" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #fb8c00/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#fb8c00"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#fb8c00"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#fb8c00"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#fb8c00"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-pink" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #d81b60/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#d81b60"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#d81b60"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#d81b60"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#d81b60"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-purple" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #8e24aa/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#8e24aa"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#8e24aa"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#8e24aa"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#8e24aa"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-red" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #e53935/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#e53935"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#e53935"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#e53935"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#e53935"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-teal" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #00897b/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#00897b"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#00897b"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#00897b"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#00897b"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-yellow" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #1F1F1F/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #A9ABB0/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #fdd835/g' $PDIR/config.ini +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#fdd835"/g' $PDIR/scripts/menu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#fdd835"/g' $PDIR/scripts/menu_full +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#fdd835"/g' $PDIR/scripts/sysmenu +sed -i -e 's/HIGHLIGHT_BACKGROUND=.*/HIGHLIGHT_BACKGROUND="#fdd835"/g' $PDIR/scripts/color-switch.sh +# Restarting polybar +$LAUNCH & + +else +echo "Available options: +-amber -blue -blue-grey -brown +-cyan -deep-orange -deep-purple -green +-grey -indigo -light-blue -light-green +-lime -orange -pink -purple +-red -teal -yellow" +fi diff --git a/.config/polybar/scripts/colors-light.sh b/.config/polybar/scripts/colors-light.sh new file mode 100755 index 0000000..97978f7 --- /dev/null +++ b/.config/polybar/scripts/colors-light.sh @@ -0,0 +1,187 @@ +#!/bin/bash + +## Author : Aditya Shakya +## Github : adi1090x + +PDIR="$HOME/.config/polybar" +LAUNCH="polybar-msg cmd restart" + +if [[ $1 = "-amber" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #ffb300/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-blue" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #1e88e5/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-blue-grey" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #546e7a/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-brown" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #6d4c41/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-cyan" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #00acc1/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-deep-orange" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #f4511e/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-deep-purple" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #5e35b1/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-green" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #43a047/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-grey" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #757575/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-indigo" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #3949ab/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-light-blue" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #039be5/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-light-green" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #7cb342/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-lime" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #c0ca33/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-orange" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #fb8c00/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-pink" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #d81b60/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-purple" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #8e24aa/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-red" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #e53935/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-teal" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #00897b/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +elif [[ $1 = "-yellow" ]]; then +# Replacing colors +sed -i -e 's/bg = .*/bg = #FFFFFF/g' $PDIR/config.ini +sed -i -e 's/fg = .*/fg = #2E2E2E/g' $PDIR/config.ini +sed -i -e 's/fg-alt = .*/fg-alt = #424242/g' $PDIR/config.ini +sed -i -e 's/acolor = .*/acolor = #fdd835/g' $PDIR/config.ini +# Restarting polybar +$LAUNCH & + +else +echo "Available options: +-amber -blue -blue-grey -brown +-cyan -deep-orange -deep-purple -green +-grey -indigo -light-blue -light-green +-lime -orange -pink -purple +-red -teal -yellow" +fi diff --git a/.config/polybar/scripts/menu b/.config/polybar/scripts/menu new file mode 100755 index 0000000..4b61dfd --- /dev/null +++ b/.config/polybar/scripts/menu @@ -0,0 +1,63 @@ +#!/bin/bash + +# Custom Rofi Script + +BORDER="#1F1F1F" +SEPARATOR="#1F1F1F" +FOREGROUND="#FFFFFF" +BACKGROUND="#1F1F1F" +BACKGROUND_ALT="#252525" +HIGHLIGHT_BACKGROUND="#00897b" +HIGHLIGHT_FOREGROUND="#1F1F1F" + +BLACK="#000000" +WHITE="#ffffff" +RED="#e53935" +GREEN="#43a047" +YELLOW="#fdd835" +BLUE="#1e88e5" +MAGENTA="#00897b" +CYAN="#00acc1" +PINK="#d81b60" +PURPLE="#8e24aa" +INDIGO="#3949ab" +TEAL="#00897b" +LIME="#c0ca33" +AMBER="#ffb300" +ORANGE="#fb8c00" +BROWN="#6d4c41" +GREY="#757575" +BLUE_GREY="#546e7a" +DEEP_PURPLE="#5e35b1" +DEEP_ORANGE="#f4511e" +LIGHT_BLUE="#039be5" +LIGHT_GREEN="#7cb342" + +# Launch Rofi +rofi -no-lazy-grab -show drun \ +-display-drun "Applications :" -drun-display-format "{name}" \ +-hide-scrollbar true \ +-bw 0 \ +-lines 10 \ +-line-padding 10 \ +-padding 20 \ +-width 30 \ +-xoffset 68 -yoffset -70 \ +-location 7 \ +-columns 2 \ +-show-icons -icon-theme "Papirus" \ +-font "Fantasque Sans Mono 10" \ +-color-enabled true \ +-color-window "$BACKGROUND,$BORDER,$SEPARATOR" \ +-color-normal "$BACKGROUND_ALT,$FOREGROUND,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +-color-active "$BACKGROUND,$MAGENTA,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +-color-urgent "$BACKGROUND,$YELLOW,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" + +# More Options +# -fullscreen \ + +# Theming help +# color window = background, border, separator +# color normal = background, foreground, background-alt, highlight-background, highlight-foreground +# color active = background, foreground, background-alt, highlight-background, highlight-foreground +# color urgent = background, foreground, background-alt, highlight-background, highlight-foreground diff --git a/.config/polybar/scripts/menu_full b/.config/polybar/scripts/menu_full new file mode 100755 index 0000000..d5b303c --- /dev/null +++ b/.config/polybar/scripts/menu_full @@ -0,0 +1,64 @@ +#!/bin/bash + +# Custom Rofi Script + +BORDER="#1F1F1F" +SEPARATOR="#1F1F1F" +FOREGROUND="#FFFFFF" +BACKGROUND="#1F1F1F" +BACKGROUND_ALT="#252525" +HIGHLIGHT_BACKGROUND="#00897b" +HIGHLIGHT_FOREGROUND="#1F1F1F" + +BLACK="#000000" +WHITE="#ffffff" +RED="#e53935" +GREEN="#43a047" +YELLOW="#fdd835" +BLUE="#1e88e5" +MAGENTA="#00897b" +CYAN="#00acc1" +PINK="#d81b60" +PURPLE="#8e24aa" +INDIGO="#3949ab" +TEAL="#00897b" +LIME="#c0ca33" +AMBER="#ffb300" +ORANGE="#fb8c00" +BROWN="#6d4c41" +GREY="#757575" +BLUE_GREY="#546e7a" +DEEP_PURPLE="#5e35b1" +DEEP_ORANGE="#f4511e" +LIGHT_BLUE="#039be5" +LIGHT_GREEN="#7cb342" + +# Launch Rofi +rofi -no-lazy-grab -show drun \ +-display-drun "Applications :" -drun-display-format "{name}" \ +-hide-scrollbar true \ +-bw 0 \ +-lines 10 \ +-line-padding 15 \ +-padding 60 \ +-width 30 \ +-xoffset 10 -yoffset 40 \ +-location 1 \ +-fullscreen \ +-columns 4 \ +-show-icons -icon-theme "Papirus" \ +-font "Fantasque Sans Mono 10" \ +-color-enabled true \ +-color-window "$BACKGROUND,$BORDER,$SEPARATOR" \ +-color-normal "$BACKGROUND_ALT,$FOREGROUND,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +-color-active "$BACKGROUND,$MAGENTA,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +-color-urgent "$BACKGROUND,$YELLOW,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" + +# More Options +# -fullscreen \ + +# Theming help +# color window = background, border, separator +# color normal = background, foreground, background-alt, highlight-background, highlight-foreground +# color active = background, foreground, background-alt, highlight-background, highlight-foreground +# color urgent = background, foreground, background-alt, highlight-background, highlight-foreground diff --git a/.config/polybar/scripts/sysmenu b/.config/polybar/scripts/sysmenu new file mode 100755 index 0000000..d3dfad4 --- /dev/null +++ b/.config/polybar/scripts/sysmenu @@ -0,0 +1,69 @@ +#!/bin/bash + +# Custom Rofi Script + +BORDER="#1F1F1F" +SEPARATOR="#1F1F1F" +FOREGROUND="#FFFFFF" +BACKGROUND="#1F1F1F" +BACKGROUND_ALT="#252525" +HIGHLIGHT_BACKGROUND="#00897b" +HIGHLIGHT_FOREGROUND="#1F1F1F" + +BLACK="#000000" +WHITE="#ffffff" +RED="#e53935" +GREEN="#43a047" +YELLOW="#fdd835" +BLUE="#1e88e5" +MAGENTA="#00897b" +CYAN="#00acc1" +PINK="#d81b60" +PURPLE="#8e24aa" +INDIGO="#3949ab" +TEAL="#00897b" +LIME="#c0ca33" +AMBER="#ffb300" +ORANGE="#fb8c00" +BROWN="#6d4c41" +GREY="#757575" +BLUE_GREY="#546e7a" +DEEP_PURPLE="#5e35b1" +DEEP_ORANGE="#f4511e" +LIGHT_BLUE="#039be5" +LIGHT_GREEN="#7cb342" + +# Launch Rofi +MENU="$(rofi -no-lazy-grab -sep "|" -dmenu -i -p 'System :' \ +-hide-scrollbar true \ +-bw 0 \ +-lines 4 \ +-line-padding 10 \ +-padding 20 \ +-width 15 \ +-xoffset -68 -yoffset -70 \ +-location 5 \ +-columns 1 \ +-show-icons -icon-theme "Papirus" \ +-font "Fantasque Sans Mono 10" \ +-color-enabled true \ +-color-window "$BACKGROUND,$BORDER,$SEPARATOR" \ +-color-normal "$BACKGROUND_ALT,$FOREGROUND,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +-color-active "$BACKGROUND,$MAGENTA,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +-color-urgent "$BACKGROUND,$YELLOW,$BACKGROUND_ALT,$HIGHLIGHT_BACKGROUND,$HIGHLIGHT_FOREGROUND" \ +<<< " Lock| Logout| Reboot| Shutdown")" +case "$MENU" in + *Lock) i3lock ;; + *Logout) openbox --exit;; + *Reboot) systemctl reboot ;; + *Shutdown) systemctl -i poweroff +esac + +# More Options +# -fullscreen \ + +# Theming help +# color window = background, border, separator +# color normal = background, foreground, background-alt, highlight-background, highlight-foreground +# color active = background, foreground, background-alt, highlight-background, highlight-foreground +# color urgent = background, foreground, background-alt, highlight-background, highlight-foreground diff --git a/.config/polybar/scripts/updates.sh b/.config/polybar/scripts/updates.sh new file mode 100755 index 0000000..6ea417d --- /dev/null +++ b/.config/polybar/scripts/updates.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +BAR_ICON="" +NOTIFY_ICON=/usr/share/icons/Papirus/32x32/apps/system-software-update.svg + +get_total_updates() { UPDATES=$(checkupdates 2>/dev/null | wc -l); } + +while true; do + get_total_updates + + # notify user of updates + if hash notify-send &>/dev/null; then + if (( UPDATES > 50 )); then + notify-send -u critical -i $NOTIFY_ICON \ + "You really need to update!!" "$UPDATES New packages" + elif (( UPDATES > 25 )); then + notify-send -u normal -i $NOTIFY_ICON \ + "You should update soon" "$UPDATES New packages" + elif (( UPDATES > 2 )); then + notify-send -u low -i $NOTIFY_ICON \ + "$UPDATES New packages" + fi + fi + + # when there are updates available + # every 10 seconds another check for updates is done + while (( UPDATES > 0 )); do + if (( UPDATES == 1 )); then + echo " $UPDATES" + elif (( UPDATES > 1 )); then + echo " $UPDATES" + else + echo $BAR_ICON + fi + sleep 10 + get_total_updates + done + + # when no updates are available, use a longer loop, this saves on CPU + # and network uptime, only checking once every 30 min for new updates + while (( UPDATES == 0 )); do + echo $BAR_ICON + sleep 1800 + get_total_updates + done +done diff --git a/.config/ranger/__pycache__/devicons.cpython-38.opt-1.pyc b/.config/ranger/__pycache__/devicons.cpython-38.opt-1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b94fda4c8159ca42dea1ba7f9fca4886e054eaa7 GIT binary patch literal 3273 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 Q-{TU$HkV$=4`s;z0C!dQqW}N^ literal 0 HcmV?d00001 diff --git a/.config/ranger/plugins/devicons_linemode.py b/.config/ranger/plugins/devicons_linemode.py new file mode 100644 index 0000000..37e1fa5 --- /dev/null +++ b/.config/ranger/plugins/devicons_linemode.py @@ -0,0 +1,22 @@ +import os +terminal=terminal=os.getenv('TERM') +if terminal != 'linux': + import ranger.api + from ranger.core.linemode import LinemodeBase + from devicons import * + + @ranger.api.register_linemode + class DevIconsLinemode(LinemodeBase): + name = "devicons" + + uses_metadata = False + + def filetitle(self, file, metadata): + return devicon(file) + ' ' + file.relative_path + + @ranger.api.register_linemode + class DevIconsLinemodeFile(LinemodeBase): + name = "filename" + + def filetitle(self, file, metadata): + return devicon(file) + ' ' + file.relative_path \ No newline at end of file diff --git a/.config/ranger/ranger/__pycache__/devicons.cpython-38.opt-1.pyc b/.config/ranger/ranger/__pycache__/devicons.cpython-38.opt-1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b94fda4c8159ca42dea1ba7f9fca4886e054eaa7 GIT binary patch literal 3273 zcmd^BO^h5z6`tvynVtQOoftbI0UQz=FV6PbjuXeuCWOTN7!+j5A+kzHtD1f_Grik? zsj6Pjv^Z=OJ5C^g69L&M>rEnvV1WoBApz#VVei~Hq&OlWA*9Tm6JK@r*c&PGg(Fky z_h0Y5dhc~je|vUzs)pY`|McN^{(Wz)_7BVK{$*gE!lQmuuhpnV^{~cDTxWH1$i>s3 zCbfVks14YrNvtWFhP32ofM;or?tpd=;1unpJLxXkN1vko*uAe>4!j(IjYD@sdk?Jk zLeiv9)4jkgx{p3XpQRb-@1f7p!NT%>x*r}skJTuAHGuC1btgSQ4`Q|G5Z2*pIrIhi zJA$1@Xr8`EN0Gr^dI&i!06tiF^k|WeVeNuIv9 zNzc$(z^~9(>1)7W-#o+`bdJ7pxyG7Qzfhb1=D%zozm>UwqnEE1_@k}gm;CxGCBN~L z3jd(OTNS=u;_JVx@UJTQ+ZFzCiMM`R;f)e+zFgsI-^LFMezg8UW%s)Z|DwWW{L%W0 zCBIS0H-1#{@057+j}`y(3cpt2@0WP%MuA6H$9cY6>0iwpod2(XuGs3>*SD)}W4Be> zTd!C0ar$qS{N^93{V!GgIQ)7gAKP!1{5w}leErJ2HqNP>IXqx4PgeofKy|n_ZYN3s z@)M@+=dOSBsBwMXVUF)J*AG`%1Hdn!Vl6-Ec7-qvKZ(0ANkOGS0>czOe5F7Q2BuD! z0WJ}eI>sf@0ULC?ra@VhGFMOxu%cK)q*(`~40EUZfN69C)n|=v$Pv05t{JBbhg}u0 zc2_B12C25}fVn*p8Mha7jnhl;c#YCkgx90yqj27>1c;^FGvh#92Gya+Q)xv2h|| zZnTPYZKNnfU87_TAbr?^ldKUHks?HDN14*x?+fN8y`FJX>M}R&r^ZP`=A<}P8Y5P! zP?l5?#6u86)FT}tN;{iBYrBvk6GyXlEOq zrp8Huo+uo})>A?vOiIgVcWxjrp0%;-{LT%VQc}9u`M@Sq1lf5J`5Yv1P)pw7VL!1) zEKiG(KNlfGjBMo?W7R4Si_t@>)?>gXFZf&{jxIi%A-->ka6QC;;L@6R8~r@V_Kx;zWD%BQ`H=v0zPU#NV>>u}XiWzr2okxvwy^z)`i zn7w?`Bekq_A_XK}t_Y4W9`^PLdLR=B^qpoG>z+_OQVAQGM)rU-JE7q0~r z@SExd_}=5CJX#je$RxHs&fDHNk2y~Y-&SF`kSRg1RU#C=7PKrVKt6fPE8Y%dI0)i2 z)6zG%9Bo=`g395{4~hZz^+Lq8-(T>#5{MtGKnH7L;kc&>8uqB>IrEk(0Al0@>yFx zo~FtR1EtwajNx9663TElvNr1E7Y&=l1pC^Fems2i=3lA_d}DsX%miu~anO`R z4$Xd$%SDbwMVE`33tZhjq0OumxCv18<&^8bIbbvYB;$R%7238ciItfYgNmN7+rOw# zY}e%DIKzMD7yC&h7JZ5{t%Y1fW9$GdN*<$@izJHfDK8zGiHiBq7N7-CtG8-%b@>FS z`4+BnVVp$C$H2;y7M!xcYKu_2z!GGpy;Qd1N$X0zg7UWO?UqyjzgVxehM#aw=VP+l Wadl_6_HV7lkL~g`kf~Lj;aUl9Jh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vIKO;XkRX;f; zue78jwMbttIX^EgGhM$ZF)tm+EyyWN&&(^lf(k<`MnX{s}EGN zW_=qCU=dfyRPo4H9`f^*IAc+u0?ZM*{b#UvIhy5m8`en$iI>ig?Uc-te5?U3pPs6T)>2=%h#&5YLn1bmco?L64mnry88hph#3wBr9h2 zG2r?A!Rai6!ARw0QGglrk;OQj3`~+wa68xKB+cz$%P+=~RF&w@Ke;A_EYd>59uXv_ zjDNm$QC)v`ZHVG!9Op>}aqL=gj5RGa+3h&~P$qhFB4~A;(t?e*gbnGhIM?8Sd?A9w zX)D7M_*K5kdvp_T|J@_yV}FDa*q^|4FDf{yN=Gt?*#EZ35IIAS-n0p*?rW&%ldfwx zxAnX8uk7_22IeY7=n~M6<~qTpUG=;r Q-{TU$HkV$=4`s;z0C!dQqW}N^ literal 0 HcmV?d00001 diff --git a/.config/ranger/ranger/plugins/devicons_linemode.py b/.config/ranger/ranger/plugins/devicons_linemode.py new file mode 100644 index 0000000..37e1fa5 --- /dev/null +++ b/.config/ranger/ranger/plugins/devicons_linemode.py @@ -0,0 +1,22 @@ +import os +terminal=terminal=os.getenv('TERM') +if terminal != 'linux': + import ranger.api + from ranger.core.linemode import LinemodeBase + from devicons import * + + @ranger.api.register_linemode + class DevIconsLinemode(LinemodeBase): + name = "devicons" + + uses_metadata = False + + def filetitle(self, file, metadata): + return devicon(file) + ' ' + file.relative_path + + @ranger.api.register_linemode + class DevIconsLinemodeFile(LinemodeBase): + name = "filename" + + def filetitle(self, file, metadata): + return devicon(file) + ' ' + file.relative_path \ No newline at end of file diff --git a/.config/ranger/ranger/rc.conf b/.config/ranger/ranger/rc.conf new file mode 100644 index 0000000..17a40f3 --- /dev/null +++ b/.config/ranger/ranger/rc.conf @@ -0,0 +1,619 @@ +# =================================================================== +# This file contains the default startup commands for ranger. +# To change them, it is recommended to create the file +# ~/.config/ranger/rc.conf and add your custom commands there. +# +# If you copy this whole file there, you may want to set the environment +# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice. +# +# The purpose of this file is mainly to define keybindings and settings. +# For running more complex python code, please create a plugin in "plugins/" or +# a command in "commands.py". +# +# Each line is a command that will be run before the user interface +# is initialized. As a result, you can not use commands which rely +# on the UI such as :delete or :mark. +# =================================================================== + +# =================================================================== +# == Options +# =================================================================== + +# Which viewmode should be used? Possible values are: +# miller: Use miller columns which show multiple levels of the hierarchy +# multipane: Midnight-commander like multipane view showing all tabs next +# to each other +set viewmode miller +#set viewmode multipane + +# How many columns are there, and what are their relative widths? +set column_ratios 1,3,4 + +# Which files should be hidden? (regular expression) +set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$ + +# Show hidden files? You can toggle this by typing 'zh' +set show_hidden false + +# Ask for a confirmation when running the "delete" command? +# Valid values are "always", "never", "multiple" (default) +# With "multiple", ranger will ask only if you delete multiple files at once. +set confirm_on_delete never + +# Which script is used to generate file previews? +# ranger ships with scope.sh, a script that calls external programs (see +# README.md for dependencies) to preview images, archives, etc. +set preview_script ~/.config/ranger/scope.sh + +# Use the external preview script or display simple plain text or image previews? +set use_preview_script true + +# Automatically count files in the directory, even before entering them? +set automatically_count_files true + +# Open all images in this directory when running certain image viewers +# like feh or sxiv? You can still open selected files by marking them. +set open_all_images true + +# Be aware of version control systems and display information. +set vcs_aware false + +# State of the three backends git, hg, bzr. The possible states are +# disabled, local (only show local info), enabled (show local and remote +# information). +set vcs_backend_git enabled +set vcs_backend_hg disabled +set vcs_backend_bzr disabled + +# Use one of the supported image preview protocols +set preview_images true + +# Set the preview image method. Supported methods: +# +# * w3m (default): +# Preview images in full color with the external command "w3mimgpreview"? +# This requires the console web browser "w3m" and a supported terminal. +# It has been successfully tested with "xterm" and "urxvt" without tmux. +# +# * iterm2: +# Preview images in full color using iTerm2 image previews +# (http://iterm2.com/images.html). This requires using iTerm2 compiled +# with image preview support. +# +# * urxvt: +# Preview images in full color using urxvt image backgrounds. This +# requires using urxvt compiled with pixbuf support. +# +# * urxvt-full: +# The same as urxvt but utilizing not only the preview pane but the +# whole terminal window. +set preview_images_method ueberzug + +# Use a unicode "..." character to mark cut-off filenames? +set unicode_ellipsis false + +# Show dotfiles in the bookmark preview box? +set show_hidden_bookmarks true + +# Which colorscheme to use? These colorschemes are available by default: +# default, jungle, snow, solarized +set colorscheme default + +# Preview files on the rightmost column? +# And collapse (shrink) the last column if there is nothing to preview? +set preview_files true +set preview_directories true +set collapse_preview true + +# Save the console history on exit? +set save_console_history true + +# Draw the status bar on top of the browser window (default: bottom) +set status_bar_on_top false + +# Draw a progress bar in the status bar which displays the average state of all +# currently running tasks which support progress bars? +set draw_progress_bar_in_status_bar true + +# Draw borders around columns? +set draw_borders true + +# Display the directory name in tabs? +set dirname_in_tabs false + +# Enable the mouse support? +set mouse_enabled true + +# Display the file size in the main column or status bar? +set display_size_in_main_column true +set display_size_in_status_bar true + +# Display files tags in all columns or only in main column? +set display_tags_in_all_columns true + +# Set a title for the window? +set update_title false + +# Set the title to "ranger" in the tmux program? +set update_tmux_title false + +# Shorten the title if it gets long? The number defines how many +# directories are displayed at once, 0 turns off this feature. +set shorten_title 3 + +# Abbreviate $HOME with ~ in the titlebar (first line) of ranger? +set tilde_in_titlebar false + +# How many directory-changes or console-commands should be kept in history? +set max_history_size 20 +set max_console_history_size 50 + +# Try to keep so much space between the top/bottom border when scrolling: +set scroll_offset 8 + +# Flush the input after each key hit? (Noticeable when ranger lags) +set flushinput true + +# Padding on the right when there's no preview? +# This allows you to click into the space to run the file. +set padding_right true + +# Save bookmarks (used with mX and `X) instantly? +# This helps to synchronize bookmarks between multiple ranger +# instances but leads to *slight* performance loss. +# When false, bookmarks are saved when ranger is exited. +set autosave_bookmarks true + +# You can display the "real" cumulative size of directories by using the +# command :get_cumulative_size or typing "dc". The size is expensive to +# calculate and will not be updated automatically. You can choose +# to update it automatically though by turning on this option: +set autoupdate_cumulative_size false + +# Turning this on makes sense for screen readers: +set show_cursor false + +# One of: size, natural, basename, atime, ctime, mtime, type, random +set sort natural + +# Additional sorting options +set sort_reverse false +set sort_case_insensitive true +set sort_directories_first true +set sort_unicode false + +# Enable this if key combinations with the Alt Key don't work for you. +# (Especially on xterm) +set xterm_alt_key false + +# Whether to include bookmarks in cd command +set cd_bookmarks true + +# Avoid previewing files larger than this size, in bytes. Use a value of 0 to +# disable this feature. +set preview_max_size 0 + +# Add the highlighted file to the path in the titlebar +set show_selection_in_titlebar true + +# The delay that ranger idly waits for user input, in milliseconds, with a +# resolution of 100ms. Lower delay reduces lag between directory updates but +# increases CPU load. +set idle_delay 2000 + +# When the metadata manager module looks for metadata, should it only look for +# a ".metadata.json" file in the current directory, or do a deep search and +# check all directories above the current one as well? +set metadata_deep_search false + +# Clear all existing filters when leaving a directory +set clear_filters_on_dir_change false + +# Disable displaying line numbers in main column +set line_numbers false + +# =================================================================== +# == Local Options +# =================================================================== +# You can set local options that only affect a single directory. + +# Examples: +# setlocal path=~/downloads sort mtime + +# =================================================================== +# == Command Aliases in the Console +# =================================================================== + +alias e edit +alias q quit +alias q! quitall +alias qa quitall +alias qall quitall +alias setl setlocal + +alias filter scout -prt +alias find scout -aeit +alias mark scout -mr +alias unmark scout -Mr +alias search scout -rs +alias search_inc scout -rts +alias travel scout -aefiklst + +# =================================================================== +# == Define keys for the browser +# =================================================================== + +# Basic +map Q quit! +map q quit +copymap q ZZ ZQ + +map R reload_cwd +map reset +map redraw_window +map abort +map change_mode normal +map ~ set viewmode! + +map i display_file +map ? help +map W display_log +map w taskview_open +map S shell $SHELL + +map : console +map ; console +map ! console shell%space +map @ console -p6 shell %%s +map # console shell -p%space +map s console shell%space +map r chain draw_possible_programs; console open_with%%space +#map f console find%space +map f console scout -ftsea%space +map cd console cd%space + +# Change the line mode +map Mf linemode filename +map Mi linemode fileinfo +map Mm linemode mtime +map Mp linemode permissions +map Ms linemode sizemtime +map Mt linemode metatitle + +# Tagging / Marking +map t tag_toggle +map ut tag_remove +map " tag_toggle tag=%any +map mark_files toggle=True +map v mark_files all=True toggle=True +map uv mark_files all=True val=False +map V toggle_visual_mode +map uV toggle_visual_mode reverse=True + +# For the nostalgics: Midnight Commander bindings +map help +map display_file +map edit +map copy +map cut +map console mkdir%space +map console delete +map exit + +# In case you work on a keyboard with dvorak layout +map move up=1 +map move down=1 +map move left=1 +map move right=1 +map move to=0 +map move to=-1 +map move down=1 pages=True +map move up=1 pages=True +map move right=1 +map console delete +map console touch%space + +# VIM-like +copymap k +copymap j +copymap h +copymap l +copymap gg +copymap G +copymap +copymap + +map J move down=0.5 pages=True +map K move up=0.5 pages=True +copymap J +copymap K + +# Jumping around +map H history_go -1 +map L history_go 1 +map ] move_parent 1 +map [ move_parent -1 +map } traverse + +map gh cd ~ +map ge cd /etc +map gu cd /usr +map gd cd /dev +map gl cd -r . +map gL cd -r %f +map go cd /opt +map gv cd /var +map gm cd /media +map gM cd /mnt +map gs cd /srv +map gr cd / +map gR eval fm.cd(ranger.RANGERDIR) +map g/ cd / +map g? cd /usr/share/doc/ranger + +# External Programs +map E edit +map du shell -p du --max-depth=1 -h --apparent-size +map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh +map yp shell -f echo -n %d/%f | xsel -i; xsel -o | xsel -i -b +map yd shell -f echo -n %d | xsel -i; xsel -o | xsel -i -b +map yn shell -f echo -n %f | xsel -i; xsel -o | xsel -i -b + +# Filesystem Operations +map = chmod + +#map cw console rename%space +map cw eval fm.execute_console("bulkrename") if fm.thisdir.marked_items else fm.open_console("rename ") +map a rename_append +map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) +map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7) + +map pp paste +map po paste overwrite=True +map pP paste append=True +map pO paste overwrite=True append=True +map pl paste_symlink relative=False +map pL paste_symlink relative=True +map phl paste_hardlink +map pht paste_hardlinked_subtree +map pr paste_as_root + +map dD console delete + +map dd cut +map ud uncut +map da cut mode=add +map dr cut mode=remove +map dt cut mode=toggle + +map yy copy +map uy uncut +map ya copy mode=add +map yr copy mode=remove +map yt copy mode=toggle + +# Temporary workarounds +map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) +map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) +map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) +map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) +map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) +map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) +map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) +map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) + +# Searching +map / console search%space +map n search_next +map N search_next forward=False +map ct search_next order=tag +map cs search_next order=size +map ci search_next order=mimetype +map cc search_next order=ctime +map cm search_next order=mtime +map ca search_next order=atime + +# Tabs +map tab_new ~ +map tab_close +map tab_move 1 +map tab_move -1 +map tab_move 1 +map tab_move -1 +map gt tab_move 1 +map gT tab_move -1 +map gn tab_new ~ +map gc tab_close +map uq tab_restore +map tab_open 1 +map tab_open 2 +map tab_open 3 +map tab_open 4 +map tab_open 5 +map tab_open 6 +map tab_open 7 +map tab_open 8 +map tab_open 9 + +# Sorting +map or set sort_reverse! +map oz set sort=random +map os chain set sort=size; set sort_reverse=False +map ob chain set sort=basename; set sort_reverse=False +map on chain set sort=natural; set sort_reverse=False +map om chain set sort=mtime; set sort_reverse=False +map oc chain set sort=ctime; set sort_reverse=False +map oa chain set sort=atime; set sort_reverse=False +map ot chain set sort=type; set sort_reverse=False +map oe chain set sort=extension; set sort_reverse=False + +map oS chain set sort=size; set sort_reverse=True +map oB chain set sort=basename; set sort_reverse=True +map oN chain set sort=natural; set sort_reverse=True +map oM chain set sort=mtime; set sort_reverse=True +map oC chain set sort=ctime; set sort_reverse=True +map oA chain set sort=atime; set sort_reverse=True +map oT chain set sort=type; set sort_reverse=True +map oE chain set sort=extension; set sort_reverse=True + +map dc get_cumulative_size + +# Settings +map zc set collapse_preview! +map zd set sort_directories_first! +map zh set show_hidden! +map set show_hidden! +map zI set flushinput! +map zi set preview_images! +map zm set mouse_enabled! +map zp set preview_files! +map zP set preview_directories! +map zs set sort_case_insensitive! +map zu set autoupdate_cumulative_size! +map zv set use_preview_script! +map zf console filter%space + +# Bookmarks +map ` enter_bookmark %any +map ' enter_bookmark %any +map m set_bookmark %any +map um unset_bookmark %any + +map m draw_bookmarks +copymap m um ` ' + +# Generate all the chmod bindings with some python help: +eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg)) + +eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg)) + +# =================================================================== +# == Define keys for the console +# =================================================================== +# Note: Unmapped keys are passed directly to the console. + +# Basic +cmap eval fm.ui.console.tab() +cmap eval fm.ui.console.tab(-1) +cmap eval fm.ui.console.close() +cmap eval fm.ui.console.execute() +cmap redraw_window + +copycmap +copycmap + +# Move around +cmap eval fm.ui.console.history_move(-1) +cmap eval fm.ui.console.history_move(1) +cmap eval fm.ui.console.move(left=1) +cmap eval fm.ui.console.move(right=1) +cmap eval fm.ui.console.move(right=0, absolute=True) +cmap eval fm.ui.console.move(right=-1, absolute=True) +cmap eval fm.ui.console.move_word(left=1) +cmap eval fm.ui.console.move_word(right=1) + +# Line Editing +cmap eval fm.ui.console.delete(-1) +cmap eval fm.ui.console.delete(0) +cmap eval fm.ui.console.delete_word() +cmap eval fm.ui.console.delete_word(backward=False) +cmap eval fm.ui.console.delete_rest(1) +cmap eval fm.ui.console.delete_rest(-1) +cmap eval fm.ui.console.paste() + +# And of course the emacs way +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap + +# Note: There are multiple ways to express backspaces. (code 263) +# and (code 127). To be sure, use both. +copycmap + +# This special expression allows typing in numerals: +cmap false + +# =================================================================== +# == Pager Keybindings +# =================================================================== + +# Movement +pmap pager_move down=1 +pmap pager_move up=1 +pmap pager_move left=4 +pmap pager_move right=4 +pmap pager_move to=0 +pmap pager_move to=-1 +pmap pager_move down=1.0 pages=True +pmap pager_move up=1.0 pages=True +pmap pager_move down=0.5 pages=True +pmap pager_move up=0.5 pages=True + +copypmap k +copypmap j +copypmap h +copypmap l +copypmap g +copypmap G +copypmap d +copypmap u +copypmap n f +copypmap p b + +# Basic +pmap redraw_window +pmap pager_close +copypmap q Q i +pmap E edit_file + +# =================================================================== +# == Taskview Keybindings +# =================================================================== + +# Movement +tmap taskview_move up=1 +tmap taskview_move down=1 +tmap taskview_move to=0 +tmap taskview_move to=-1 +tmap taskview_move down=1.0 pages=True +tmap taskview_move up=1.0 pages=True +tmap taskview_move down=0.5 pages=True +tmap taskview_move up=0.5 pages=True + +copytmap k +copytmap j +copytmap g +copytmap G +copytmap u +copytmap n f +copytmap p b + +# Changing priority and deleting tasks +tmap J eval -q fm.ui.taskview.task_move(-1) +tmap K eval -q fm.ui.taskview.task_move(0) +tmap dd eval -q fm.ui.taskview.task_remove() +tmap eval -q fm.ui.taskview.task_move(-1) +tmap eval -q fm.ui.taskview.task_move(0) +tmap eval -q fm.ui.taskview.task_remove() + +# Basic +tmap redraw_window +tmap taskview_close +copytmap q Q w +default_linemode devicons + +# find +map fzf_select \ No newline at end of file diff --git a/.config/ranger/ranger/scope.sh b/.config/ranger/ranger/scope.sh new file mode 100755 index 0000000..98515e0 --- /dev/null +++ b/.config/ranger/ranger/scope.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env sh +# ranger supports enhanced previews. If the option "use_preview_script" +# is set to True and this file exists, this script will be called and its +# output is displayed in ranger. ANSI color codes are supported. + +# NOTES: This script is considered a configuration file. If you upgrade +# ranger, it will be left untouched. (You must update it yourself.) +# Also, ranger disables STDIN here, so interactive scripts won't work properly + +# Meanings of exit codes: +# code | meaning | action of ranger +# -----+------------+------------------------------------------- +# 0 | success | success. display stdout as preview +# 1 | no preview | failure. display no preview at all +# 2 | plain text | display the plain content of the file +# 3 | fix width | success. Don't reload when width changes +# 4 | fix height | success. Don't reload when height changes +# 5 | fix both | success. Don't ever reload +# 6 | image | success. display the image $cached points to as an image preview +# 7 | image | success. display the file directly as an image + +# Meaningful aliases for arguments: +path="$1" # Full path of the selected file +width="$2" # Width of the preview pane (number of fitting characters) +height="$3" # Height of the preview pane (number of fitting characters) +cached="$4" # Path that should be used to cache image previews +preview_images="$5" # "True" if image previews are enabled, "False" otherwise. + +maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln + +# Find out something about the file: +mimetype=$(file --mime-type -Lb "$path") +extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}') + +# Functions: +# runs a command and saves its output into $output. Useful if you need +# the return value AND want to use the output in a pipe +try() { output=$(eval '"$@"'); } + +# writes the output of the previously used "try" command +dump() { /bin/echo "$output"; } + +# a common post-processing function used after most commands +trim() { head -n "$maxln"; } + +# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success +safepipe() { "$@"; test $? = 0 -o $? = 141; } + +# Image previews, if enabled in ranger. +if [ "$preview_images" = "True" ]; then + case "$mimetype" in + # Image previews for SVG files, disabled by default. + image/svg+xml) + convert "$path" "$cached" && exit 6 || exit 1;; + # Image previews for image files. w3mimgdisplay will be called for all + # image files (unless overriden as above), but might fail for + # unsupported types. + image/*) + exit 7;; + # Image preview for video, disabled by default.: + video/*) + ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;; + esac +fi + +case "$extension" in + # Archive extensions: + a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ + rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) + try als "$path" && { dump | trim; exit 0; } + try acat "$path" && { dump | trim; exit 3; } + try bsdtar -lf "$path" && { dump | trim; exit 0; } + exit 1;; + rar) + # avoid password prompt by providing empty password + try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;; + 7z) + # avoid password prompt by providing empty password + try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;; + # PDF documents: + pdf) + try pdftotext -l 10 -nopgbrk -q "$path" - && \ + { dump | trim | fmt -s -w $width; exit 0; } || exit 1;; + # BitTorrent Files + torrent) + try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;; + # ODT Files + odt|ods|odp|sxw) + try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;; + # HTML Pages: + htm|html|xhtml) + try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + ;; # fall back to highlight/cat if the text browsers fail +esac + +case "$mimetype" in + # Syntax highlight for text files: + text/* | */xml) + if [ "$(tput colors)" -ge 256 ]; then + pygmentize_format=terminal256 + highlight_format=xterm256 + else + pygmentize_format=terminal + highlight_format=ansi + fi + try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; } + try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; } + exit 2;; + # Ascii-previews of images: + image/*) + img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;; + # Display information about media files: + video/* | audio/*) + exiftool "$path" && exit 5 + # Use sed to remove spaces so the output fits into the narrow window + try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;; +esac + +exit 1 diff --git a/.config/ranger/rc.conf b/.config/ranger/rc.conf new file mode 100644 index 0000000..17a40f3 --- /dev/null +++ b/.config/ranger/rc.conf @@ -0,0 +1,619 @@ +# =================================================================== +# This file contains the default startup commands for ranger. +# To change them, it is recommended to create the file +# ~/.config/ranger/rc.conf and add your custom commands there. +# +# If you copy this whole file there, you may want to set the environment +# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice. +# +# The purpose of this file is mainly to define keybindings and settings. +# For running more complex python code, please create a plugin in "plugins/" or +# a command in "commands.py". +# +# Each line is a command that will be run before the user interface +# is initialized. As a result, you can not use commands which rely +# on the UI such as :delete or :mark. +# =================================================================== + +# =================================================================== +# == Options +# =================================================================== + +# Which viewmode should be used? Possible values are: +# miller: Use miller columns which show multiple levels of the hierarchy +# multipane: Midnight-commander like multipane view showing all tabs next +# to each other +set viewmode miller +#set viewmode multipane + +# How many columns are there, and what are their relative widths? +set column_ratios 1,3,4 + +# Which files should be hidden? (regular expression) +set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$ + +# Show hidden files? You can toggle this by typing 'zh' +set show_hidden false + +# Ask for a confirmation when running the "delete" command? +# Valid values are "always", "never", "multiple" (default) +# With "multiple", ranger will ask only if you delete multiple files at once. +set confirm_on_delete never + +# Which script is used to generate file previews? +# ranger ships with scope.sh, a script that calls external programs (see +# README.md for dependencies) to preview images, archives, etc. +set preview_script ~/.config/ranger/scope.sh + +# Use the external preview script or display simple plain text or image previews? +set use_preview_script true + +# Automatically count files in the directory, even before entering them? +set automatically_count_files true + +# Open all images in this directory when running certain image viewers +# like feh or sxiv? You can still open selected files by marking them. +set open_all_images true + +# Be aware of version control systems and display information. +set vcs_aware false + +# State of the three backends git, hg, bzr. The possible states are +# disabled, local (only show local info), enabled (show local and remote +# information). +set vcs_backend_git enabled +set vcs_backend_hg disabled +set vcs_backend_bzr disabled + +# Use one of the supported image preview protocols +set preview_images true + +# Set the preview image method. Supported methods: +# +# * w3m (default): +# Preview images in full color with the external command "w3mimgpreview"? +# This requires the console web browser "w3m" and a supported terminal. +# It has been successfully tested with "xterm" and "urxvt" without tmux. +# +# * iterm2: +# Preview images in full color using iTerm2 image previews +# (http://iterm2.com/images.html). This requires using iTerm2 compiled +# with image preview support. +# +# * urxvt: +# Preview images in full color using urxvt image backgrounds. This +# requires using urxvt compiled with pixbuf support. +# +# * urxvt-full: +# The same as urxvt but utilizing not only the preview pane but the +# whole terminal window. +set preview_images_method ueberzug + +# Use a unicode "..." character to mark cut-off filenames? +set unicode_ellipsis false + +# Show dotfiles in the bookmark preview box? +set show_hidden_bookmarks true + +# Which colorscheme to use? These colorschemes are available by default: +# default, jungle, snow, solarized +set colorscheme default + +# Preview files on the rightmost column? +# And collapse (shrink) the last column if there is nothing to preview? +set preview_files true +set preview_directories true +set collapse_preview true + +# Save the console history on exit? +set save_console_history true + +# Draw the status bar on top of the browser window (default: bottom) +set status_bar_on_top false + +# Draw a progress bar in the status bar which displays the average state of all +# currently running tasks which support progress bars? +set draw_progress_bar_in_status_bar true + +# Draw borders around columns? +set draw_borders true + +# Display the directory name in tabs? +set dirname_in_tabs false + +# Enable the mouse support? +set mouse_enabled true + +# Display the file size in the main column or status bar? +set display_size_in_main_column true +set display_size_in_status_bar true + +# Display files tags in all columns or only in main column? +set display_tags_in_all_columns true + +# Set a title for the window? +set update_title false + +# Set the title to "ranger" in the tmux program? +set update_tmux_title false + +# Shorten the title if it gets long? The number defines how many +# directories are displayed at once, 0 turns off this feature. +set shorten_title 3 + +# Abbreviate $HOME with ~ in the titlebar (first line) of ranger? +set tilde_in_titlebar false + +# How many directory-changes or console-commands should be kept in history? +set max_history_size 20 +set max_console_history_size 50 + +# Try to keep so much space between the top/bottom border when scrolling: +set scroll_offset 8 + +# Flush the input after each key hit? (Noticeable when ranger lags) +set flushinput true + +# Padding on the right when there's no preview? +# This allows you to click into the space to run the file. +set padding_right true + +# Save bookmarks (used with mX and `X) instantly? +# This helps to synchronize bookmarks between multiple ranger +# instances but leads to *slight* performance loss. +# When false, bookmarks are saved when ranger is exited. +set autosave_bookmarks true + +# You can display the "real" cumulative size of directories by using the +# command :get_cumulative_size or typing "dc". The size is expensive to +# calculate and will not be updated automatically. You can choose +# to update it automatically though by turning on this option: +set autoupdate_cumulative_size false + +# Turning this on makes sense for screen readers: +set show_cursor false + +# One of: size, natural, basename, atime, ctime, mtime, type, random +set sort natural + +# Additional sorting options +set sort_reverse false +set sort_case_insensitive true +set sort_directories_first true +set sort_unicode false + +# Enable this if key combinations with the Alt Key don't work for you. +# (Especially on xterm) +set xterm_alt_key false + +# Whether to include bookmarks in cd command +set cd_bookmarks true + +# Avoid previewing files larger than this size, in bytes. Use a value of 0 to +# disable this feature. +set preview_max_size 0 + +# Add the highlighted file to the path in the titlebar +set show_selection_in_titlebar true + +# The delay that ranger idly waits for user input, in milliseconds, with a +# resolution of 100ms. Lower delay reduces lag between directory updates but +# increases CPU load. +set idle_delay 2000 + +# When the metadata manager module looks for metadata, should it only look for +# a ".metadata.json" file in the current directory, or do a deep search and +# check all directories above the current one as well? +set metadata_deep_search false + +# Clear all existing filters when leaving a directory +set clear_filters_on_dir_change false + +# Disable displaying line numbers in main column +set line_numbers false + +# =================================================================== +# == Local Options +# =================================================================== +# You can set local options that only affect a single directory. + +# Examples: +# setlocal path=~/downloads sort mtime + +# =================================================================== +# == Command Aliases in the Console +# =================================================================== + +alias e edit +alias q quit +alias q! quitall +alias qa quitall +alias qall quitall +alias setl setlocal + +alias filter scout -prt +alias find scout -aeit +alias mark scout -mr +alias unmark scout -Mr +alias search scout -rs +alias search_inc scout -rts +alias travel scout -aefiklst + +# =================================================================== +# == Define keys for the browser +# =================================================================== + +# Basic +map Q quit! +map q quit +copymap q ZZ ZQ + +map R reload_cwd +map reset +map redraw_window +map abort +map change_mode normal +map ~ set viewmode! + +map i display_file +map ? help +map W display_log +map w taskview_open +map S shell $SHELL + +map : console +map ; console +map ! console shell%space +map @ console -p6 shell %%s +map # console shell -p%space +map s console shell%space +map r chain draw_possible_programs; console open_with%%space +#map f console find%space +map f console scout -ftsea%space +map cd console cd%space + +# Change the line mode +map Mf linemode filename +map Mi linemode fileinfo +map Mm linemode mtime +map Mp linemode permissions +map Ms linemode sizemtime +map Mt linemode metatitle + +# Tagging / Marking +map t tag_toggle +map ut tag_remove +map " tag_toggle tag=%any +map mark_files toggle=True +map v mark_files all=True toggle=True +map uv mark_files all=True val=False +map V toggle_visual_mode +map uV toggle_visual_mode reverse=True + +# For the nostalgics: Midnight Commander bindings +map help +map display_file +map edit +map copy +map cut +map console mkdir%space +map console delete +map exit + +# In case you work on a keyboard with dvorak layout +map move up=1 +map move down=1 +map move left=1 +map move right=1 +map move to=0 +map move to=-1 +map move down=1 pages=True +map move up=1 pages=True +map move right=1 +map console delete +map console touch%space + +# VIM-like +copymap k +copymap j +copymap h +copymap l +copymap gg +copymap G +copymap +copymap + +map J move down=0.5 pages=True +map K move up=0.5 pages=True +copymap J +copymap K + +# Jumping around +map H history_go -1 +map L history_go 1 +map ] move_parent 1 +map [ move_parent -1 +map } traverse + +map gh cd ~ +map ge cd /etc +map gu cd /usr +map gd cd /dev +map gl cd -r . +map gL cd -r %f +map go cd /opt +map gv cd /var +map gm cd /media +map gM cd /mnt +map gs cd /srv +map gr cd / +map gR eval fm.cd(ranger.RANGERDIR) +map g/ cd / +map g? cd /usr/share/doc/ranger + +# External Programs +map E edit +map du shell -p du --max-depth=1 -h --apparent-size +map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh +map yp shell -f echo -n %d/%f | xsel -i; xsel -o | xsel -i -b +map yd shell -f echo -n %d | xsel -i; xsel -o | xsel -i -b +map yn shell -f echo -n %f | xsel -i; xsel -o | xsel -i -b + +# Filesystem Operations +map = chmod + +#map cw console rename%space +map cw eval fm.execute_console("bulkrename") if fm.thisdir.marked_items else fm.open_console("rename ") +map a rename_append +map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) +map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7) + +map pp paste +map po paste overwrite=True +map pP paste append=True +map pO paste overwrite=True append=True +map pl paste_symlink relative=False +map pL paste_symlink relative=True +map phl paste_hardlink +map pht paste_hardlinked_subtree +map pr paste_as_root + +map dD console delete + +map dd cut +map ud uncut +map da cut mode=add +map dr cut mode=remove +map dt cut mode=toggle + +map yy copy +map uy uncut +map ya copy mode=add +map yr copy mode=remove +map yt copy mode=toggle + +# Temporary workarounds +map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) +map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) +map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) +map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) +map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) +map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) +map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) +map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) + +# Searching +map / console search%space +map n search_next +map N search_next forward=False +map ct search_next order=tag +map cs search_next order=size +map ci search_next order=mimetype +map cc search_next order=ctime +map cm search_next order=mtime +map ca search_next order=atime + +# Tabs +map tab_new ~ +map tab_close +map tab_move 1 +map tab_move -1 +map tab_move 1 +map tab_move -1 +map gt tab_move 1 +map gT tab_move -1 +map gn tab_new ~ +map gc tab_close +map uq tab_restore +map tab_open 1 +map tab_open 2 +map tab_open 3 +map tab_open 4 +map tab_open 5 +map tab_open 6 +map tab_open 7 +map tab_open 8 +map tab_open 9 + +# Sorting +map or set sort_reverse! +map oz set sort=random +map os chain set sort=size; set sort_reverse=False +map ob chain set sort=basename; set sort_reverse=False +map on chain set sort=natural; set sort_reverse=False +map om chain set sort=mtime; set sort_reverse=False +map oc chain set sort=ctime; set sort_reverse=False +map oa chain set sort=atime; set sort_reverse=False +map ot chain set sort=type; set sort_reverse=False +map oe chain set sort=extension; set sort_reverse=False + +map oS chain set sort=size; set sort_reverse=True +map oB chain set sort=basename; set sort_reverse=True +map oN chain set sort=natural; set sort_reverse=True +map oM chain set sort=mtime; set sort_reverse=True +map oC chain set sort=ctime; set sort_reverse=True +map oA chain set sort=atime; set sort_reverse=True +map oT chain set sort=type; set sort_reverse=True +map oE chain set sort=extension; set sort_reverse=True + +map dc get_cumulative_size + +# Settings +map zc set collapse_preview! +map zd set sort_directories_first! +map zh set show_hidden! +map set show_hidden! +map zI set flushinput! +map zi set preview_images! +map zm set mouse_enabled! +map zp set preview_files! +map zP set preview_directories! +map zs set sort_case_insensitive! +map zu set autoupdate_cumulative_size! +map zv set use_preview_script! +map zf console filter%space + +# Bookmarks +map ` enter_bookmark %any +map ' enter_bookmark %any +map m set_bookmark %any +map um unset_bookmark %any + +map m draw_bookmarks +copymap m um ` ' + +# Generate all the chmod bindings with some python help: +eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg)) + +eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg)) + +# =================================================================== +# == Define keys for the console +# =================================================================== +# Note: Unmapped keys are passed directly to the console. + +# Basic +cmap eval fm.ui.console.tab() +cmap eval fm.ui.console.tab(-1) +cmap eval fm.ui.console.close() +cmap eval fm.ui.console.execute() +cmap redraw_window + +copycmap +copycmap + +# Move around +cmap eval fm.ui.console.history_move(-1) +cmap eval fm.ui.console.history_move(1) +cmap eval fm.ui.console.move(left=1) +cmap eval fm.ui.console.move(right=1) +cmap eval fm.ui.console.move(right=0, absolute=True) +cmap eval fm.ui.console.move(right=-1, absolute=True) +cmap eval fm.ui.console.move_word(left=1) +cmap eval fm.ui.console.move_word(right=1) + +# Line Editing +cmap eval fm.ui.console.delete(-1) +cmap eval fm.ui.console.delete(0) +cmap eval fm.ui.console.delete_word() +cmap eval fm.ui.console.delete_word(backward=False) +cmap eval fm.ui.console.delete_rest(1) +cmap eval fm.ui.console.delete_rest(-1) +cmap eval fm.ui.console.paste() + +# And of course the emacs way +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap +copycmap + +# Note: There are multiple ways to express backspaces. (code 263) +# and (code 127). To be sure, use both. +copycmap + +# This special expression allows typing in numerals: +cmap false + +# =================================================================== +# == Pager Keybindings +# =================================================================== + +# Movement +pmap pager_move down=1 +pmap pager_move up=1 +pmap pager_move left=4 +pmap pager_move right=4 +pmap pager_move to=0 +pmap pager_move to=-1 +pmap pager_move down=1.0 pages=True +pmap pager_move up=1.0 pages=True +pmap pager_move down=0.5 pages=True +pmap pager_move up=0.5 pages=True + +copypmap k +copypmap j +copypmap h +copypmap l +copypmap g +copypmap G +copypmap d +copypmap u +copypmap n f +copypmap p b + +# Basic +pmap redraw_window +pmap pager_close +copypmap q Q i +pmap E edit_file + +# =================================================================== +# == Taskview Keybindings +# =================================================================== + +# Movement +tmap taskview_move up=1 +tmap taskview_move down=1 +tmap taskview_move to=0 +tmap taskview_move to=-1 +tmap taskview_move down=1.0 pages=True +tmap taskview_move up=1.0 pages=True +tmap taskview_move down=0.5 pages=True +tmap taskview_move up=0.5 pages=True + +copytmap k +copytmap j +copytmap g +copytmap G +copytmap u +copytmap n f +copytmap p b + +# Changing priority and deleting tasks +tmap J eval -q fm.ui.taskview.task_move(-1) +tmap K eval -q fm.ui.taskview.task_move(0) +tmap dd eval -q fm.ui.taskview.task_remove() +tmap eval -q fm.ui.taskview.task_move(-1) +tmap eval -q fm.ui.taskview.task_move(0) +tmap eval -q fm.ui.taskview.task_remove() + +# Basic +tmap redraw_window +tmap taskview_close +copytmap q Q w +default_linemode devicons + +# find +map fzf_select \ No newline at end of file diff --git a/.config/ranger/scope.sh b/.config/ranger/scope.sh new file mode 100755 index 0000000..98515e0 --- /dev/null +++ b/.config/ranger/scope.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env sh +# ranger supports enhanced previews. If the option "use_preview_script" +# is set to True and this file exists, this script will be called and its +# output is displayed in ranger. ANSI color codes are supported. + +# NOTES: This script is considered a configuration file. If you upgrade +# ranger, it will be left untouched. (You must update it yourself.) +# Also, ranger disables STDIN here, so interactive scripts won't work properly + +# Meanings of exit codes: +# code | meaning | action of ranger +# -----+------------+------------------------------------------- +# 0 | success | success. display stdout as preview +# 1 | no preview | failure. display no preview at all +# 2 | plain text | display the plain content of the file +# 3 | fix width | success. Don't reload when width changes +# 4 | fix height | success. Don't reload when height changes +# 5 | fix both | success. Don't ever reload +# 6 | image | success. display the image $cached points to as an image preview +# 7 | image | success. display the file directly as an image + +# Meaningful aliases for arguments: +path="$1" # Full path of the selected file +width="$2" # Width of the preview pane (number of fitting characters) +height="$3" # Height of the preview pane (number of fitting characters) +cached="$4" # Path that should be used to cache image previews +preview_images="$5" # "True" if image previews are enabled, "False" otherwise. + +maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln + +# Find out something about the file: +mimetype=$(file --mime-type -Lb "$path") +extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}') + +# Functions: +# runs a command and saves its output into $output. Useful if you need +# the return value AND want to use the output in a pipe +try() { output=$(eval '"$@"'); } + +# writes the output of the previously used "try" command +dump() { /bin/echo "$output"; } + +# a common post-processing function used after most commands +trim() { head -n "$maxln"; } + +# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success +safepipe() { "$@"; test $? = 0 -o $? = 141; } + +# Image previews, if enabled in ranger. +if [ "$preview_images" = "True" ]; then + case "$mimetype" in + # Image previews for SVG files, disabled by default. + image/svg+xml) + convert "$path" "$cached" && exit 6 || exit 1;; + # Image previews for image files. w3mimgdisplay will be called for all + # image files (unless overriden as above), but might fail for + # unsupported types. + image/*) + exit 7;; + # Image preview for video, disabled by default.: + video/*) + ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;; + esac +fi + +case "$extension" in + # Archive extensions: + a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ + rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) + try als "$path" && { dump | trim; exit 0; } + try acat "$path" && { dump | trim; exit 3; } + try bsdtar -lf "$path" && { dump | trim; exit 0; } + exit 1;; + rar) + # avoid password prompt by providing empty password + try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;; + 7z) + # avoid password prompt by providing empty password + try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;; + # PDF documents: + pdf) + try pdftotext -l 10 -nopgbrk -q "$path" - && \ + { dump | trim | fmt -s -w $width; exit 0; } || exit 1;; + # BitTorrent Files + torrent) + try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;; + # ODT Files + odt|ods|odp|sxw) + try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;; + # HTML Pages: + htm|html|xhtml) + try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + ;; # fall back to highlight/cat if the text browsers fail +esac + +case "$mimetype" in + # Syntax highlight for text files: + text/* | */xml) + if [ "$(tput colors)" -ge 256 ]; then + pygmentize_format=terminal256 + highlight_format=xterm256 + else + pygmentize_format=terminal + highlight_format=ansi + fi + try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; } + try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; } + exit 2;; + # Ascii-previews of images: + image/*) + img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;; + # Display information about media files: + video/* | audio/*) + exiftool "$path" && exit 5 + # Use sed to remove spaces so the output fits into the narrow window + try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;; +esac + +exit 1 diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi new file mode 100644 index 0000000..10cba71 --- /dev/null +++ b/.config/rofi/config.rasi @@ -0,0 +1,3 @@ +configuration { + theme: "~/.cache/wal/colors-rofi-dark"; +} diff --git a/.dmenurc b/.dmenurc new file mode 100755 index 0000000..d3b7b3e --- /dev/null +++ b/.dmenurc @@ -0,0 +1,24 @@ +# +# ~/.dmenurc +# + +## define the font for dmenu to be used +DMENU_FN="Noto-10.5" + +## background colour for unselected menu-items +DMENU_NB="#222D31" + +## textcolour for unselected menu-items +DMENU_NF="#F9FAF9" + +## background colour for selected menu-items +DMENU_SB="#16A085" + +## textcolour for selected menu-items +DMENU_SF="#F9FAF9" + +## command for the terminal application to be used: +TERMINAL_CMD="terminal -e" + +## export our variables +DMENU_OPTIONS="-fn $DMENU_FN -nb $DMENU_NB -nf $DMENU_NF -sf $DMENU_SF -sb $DMENU_SB" diff --git a/.mpd/mpd.conf b/.mpd/mpd.conf new file mode 100644 index 0000000..2af99d4 --- /dev/null +++ b/.mpd/mpd.conf @@ -0,0 +1,28 @@ +bind_to_address "127.0.0.1" +#bind_to_address "~/.mpd/socket" +music_directory "~/Music" +playlist_directory "~/.mpd/playlists" +db_file "~/.mpd/mpd.db" +log_file "~/.mpd/mpd.log" +pid_file "~/.mpd/mpd.pid" +state_file "~/.mpd/mpdstate" + +audio_output { + type "pulse" + name "pulse audio" + device "pulse" + mixer_type "hardware" +} + +audio_output { + type "alsa" + name "Alsa for audio sound card" + mixer_type "software" # optional +} + +audio_output { + type "fifo" + name "my_fifo" + path "/tmp/mpd.fifo" + format "44100:16:2" +} diff --git a/.mpd/mpd.db b/.mpd/mpd.db new file mode 100644 index 0000000000000000000000000000000000000000..1fc721f737ef92fc3d35667ab113367a77ed708e GIT binary patch literal 1579 zcmV+`2Gsc+l!mqi}P1nF5i5*+S#z%@Amra?eDKOT)(?~ zcXsn`XZzK*UDJN==U+PVaaDhrEV^m|Gs3kO)_TG0a_Y3v)Vl0A%iP#xC$GVaYoQIOB7tU&b5c2E>L78NnJQZF6r(mj ze&_-I8;a30Im?3z6iO~s+2W{oNzjy#t>T!;qD&t5cfSUYyRhH0^VK3&VX}LF%!rDK zE0J*|u2`y+ax|8pDT|WnqOG(tPu_22O)1XUjGLJl)9vtYO>MuWM)(SH`vBwv>J4cM zxop0{kXtFll&c}PFRf3&9wo5CtH7hm6k=jjMJ8zkp{e1PXX!+W+HHXqdjZR((~fyf zWsHDdN5-C=5R~(fHH2t#(uV*mQ97IUzG_JPPOh4^$ttwedlW2}O9K}^y%(xQn<7mqw3NQ*!jRIKEY&PQ04sdLIQRfm4aS^H zAb&M0Ow#A2Pn*s|oyIY%mQ&~DfZ5l5PVgQjyuL`s3lwTcGkPz_zABBac$h|vPy z!fW<}m-`?=p}HE4V^T(95+?)oO4;Bsl?&P)0Vl3+rIrxeQX1*cTlV_}7I5h5P#j?*AKry`}KVvf;Ec>tW8kt)z(_a%>B=B>UVI;$@@0kFQD$0{RMu{==e32pISSl^#}74v&YG-WzMT; zDU%E^G*y`fj0F%ei-)sDm5op5KHu*RRSYWnEP$dsV{FP%zk}3)g3-}&SB#QBb@1_is(&F>N3N^;hi(L{=2J1s^?Td@{`r?&Y^+bb9wn~|RM1{o8VsN(!?W5)C1|nW zW01}!{uB!E{a#QRt}+uAXbcu(fn+hm&zjRHxd7Y^Jjb89quRx*#9`E3NFz|ClP@x< zjnRqEqvR9QC$CDxLC1uH4h3<-rvPp`T-b{oY0SR5*CshZj-xx3hwJlxb?5 d$8Jk8+_*jY#Q&f8S<\/script>' $vivaldi_path/resources/vivaldi/browser.html) + if [ "$js_patched" = "" ] ; then + echo "Browser.html have been patched" + sed -i -e 's/<\/body>/