diff --git a/.bash_profile b/.bash_profile new file mode 100644 index 0000000..e1852a4 --- /dev/null +++ b/.bash_profile @@ -0,0 +1,7 @@ +# +# ~/.bash_profile +# + +[[ -f ~/.bashrc ]] && . ~/.bashrc + +[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..51e304f --- /dev/null +++ b/.bashrc @@ -0,0 +1,132 @@ +# Return if not run interactively +[[ $- != *i* ]] && return + +xhost +local:root > /dev/null 2>&1 + +use_fish=true + +# ==================== PATHS ==================== +if [ -d "$HOME/bin" ] ; then + export PATH="$HOME/bin:$PATH" + export PATH="$HOME/bin/scripts:$PATH" +fi + +export MANPATH="/usr/local/texlive/2020/texmf-dist/doc/man:$MANPATH" +export INFOPATH="/usr/local/texlive/2020/texmf-dist/doc/info:$INFOPATH" +export PATH="/usr/local/texlive/2020/bin/x86_64-linux:$PATH" + +export PATH="$HOME/.cargo/bin:$PATH" +# export PATH="$HOME/.gem/ruby/2.7.0/bin/:$PATH" + +export PATH="$PATH:$HOME/.rvm/bin" + +if [[ $(ps --no-header --pid=$PPID --format=cmd) != "fish" && ${use_fish} ]] +then + exec fish +fi + +# ==================== COLORS ==================== + +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 + +# ==================== Settings ==================== + +# Sudo autocompletiong +complete -cf sudo + +shopt -s checkwinsize +shopt -s expand_aliases +shopt -s autocd + +# ==================== ANACONDA ==================== + +# >>> conda initialize >>> +# !! Contents within this block are managed by 'conda init' !! +__conda_setup="$('/home/pavel/Programs/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" +if [ $? -eq 0 ]; then + eval "$__conda_setup" +else + if [ -f "/home/pavel/Programs/miniconda3/etc/profile.d/conda.sh" ]; then + . "/home/pavel/Programs/miniconda3/etc/profile.d/conda.sh" + else + export PATH="/home/pavel/Programs/miniconda3/bin:$PATH" + fi +fi +unset __conda_setup +# <<< conda initialize <<< + + +# ==================== BASH_IT ==================== + +# History +eval "$(starship init bash)" + +shopt -s histappend +export HISTCONTROL=ignoredups:erasedups +# if [[ (! $PROMPT_COMMAND =~ .*history.*) && -z $TMUX ]]; then +# export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r" +# fi +HISTSIZE= +HISTFILESIZE= + +# ==================== AUTOCOMPLETION ==================== + +[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion +source /usr/share/fzf/completion.bash +source /usr/share/fzf/key-bindings.bash + + +# ==================== ALIASES ==================== +alias v="nvim" +alias gg="lazygit" +alias ls="exa --icons" +alias ll="exa -lah --icons" +alias q="exit" +alias c="clear" + + diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc new file mode 100644 index 0000000..b25c73c --- /dev/null +++ b/.config/dunst/dunstrc @@ -0,0 +1,400 @@ +[global] + monitor = 0 + + 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 = "300x5-30+20" + + # Show how many messages are currently hidden (because of geometry). + indicate_hidden = yes + + # Shrink window if it's smaller than the width. Will be ignored if + # width is 0. + shrink = no + + # The transparency of the window. Range: [0; 100]. + # This option will only work if a compositing window manager is + # present (e.g. xcompmgr, compiz, etc.). + transparency = 15 + + # The height of the entire notification. If the height is smaller + # than the font height and padding combined, it will be raised + # to the font height and padding. + notification_height = 0 + + # Draw a line of "separator_height" pixel height between two + # notifications. + # Set to 0 to disable. + separator_height = 2 + + # Padding between text and separator. + padding = 8 + + # Horizontal padding. + horizontal_padding = 8 + + # Defines width in pixels of frame around the notification window. + # Set to 0 to disable. + frame_width = 3 + + # Defines color of the frame around the notification window. + frame_color = "#aaaaaa" + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background; + # * foreground: use the same color as the foreground; + # * frame: use the same color as the frame; + # * anything else will be interpreted as a X color. + separator_color = frame + + # Sort messages by urgency. + sort = yes + + # Don't remove messages, if the user is idle (no mouse or keyboard input) + # for longer than idle_threshold seconds. + # Set to 0 to disable. + # A client can set the 'transient' hint to bypass this. See the rules + # section for how to disable this if necessary + idle_threshold = 120 + + ### Text ### + + font = DejaVu Sans 9 + + # 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 = left + + # Show age of message if message is older than show_age_threshold + # seconds. + # Set to -1 to disable. + show_age_threshold = 60 + + # Split notifications into multiple lines if they don't fit into + # geometry. + word_wrap = yes + + # When word_wrap is set to no, specify where to make an ellipsis in long lines. + # Possible values are "start", "middle" and "end". + ellipsize = middle + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Stack together notifications with the same content + stack_duplicates = true + + # Hide the count of stacked notifications with the same content + hide_duplicate_count = false + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + ### Icons ### + + # Align icons left/right/off + icon_position = left + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 32 + + # Paths to default icons. + icon_path = /usr/share/icons/Mint-Y/status/32/;/usr/share/icons/Mint-Y/devices/32 + + ### 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/sensible-browser + + # 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 = "#222222" + foreground = "#888888" + timeout = 10 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + background = "#285577" + foreground = "#ffffff" + timeout = 10 + # Icon for notifications with normal urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_critical] + background = "#900000" + foreground = "#ffffff" + frame_color = "#ff0000" + timeout = 0 + # Icon for notifications with critical urgency, uncomment to enable + #icon = /path/to/icon + +# Every section that isn't one of the above is interpreted as a rules to +# override settings for certain messages. +# +# Messages can be matched by +# appname (discouraged, see desktop_entry) +# body +# category +# desktop_entry +# icon +# match_transient +# msg_urgency +# stack_tag +# summary +# +# and you can override the +# background +# foreground +# format +# frame_color +# fullscreen +# new_icon +# set_stack_tag +# set_transient +# timeout +# urgency +# +# Shell-like globbing will get expanded. +# +# Instead of the appname filter, it's recommended to use the desktop_entry filter. +# GLib based applications export their desktop-entry name. In comparison to the appname, +# the desktop-entry won't get localized. +# +# SCRIPTING +# You can specify a script that gets run when the rule matches by +# setting the "script" option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format +# to "". +# NOTE: It might be helpful to run dunst -print in a terminal in order +# to find fitting options for rules. + +# Disable the transient hint so that idle_threshold cannot be bypassed from the +# client +#[transient_disable] +# match_transient = yes +# set_transient = no +# +# Make the handling of transient notifications more strict by making them not +# be placed in history. +#[transient_history_ignore] +# match_transient = yes +# history_ignore = yes + +# fullscreen values +# show: show the notifications, regardless if there is a fullscreen window opened +# delay: displays the new notification, if there is no fullscreen window active +# If the notification is already drawn, it won't get undrawn. +# pushback: same as delay, but when switching into fullscreen, the notification will get +# withdrawn from screen again and will get delayed like a new notification +#[fullscreen_delay_everything] +# fullscreen = delay +#[fullscreen_show_critical] +# msg_urgency = critical +# fullscreen = show + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +# # This notification will not be displayed +# summary = "foobar" +# format = "" + +#[history-ignore] +# # This notification will not be saved in history +# summary = "foobar" +# history_ignore = yes + +#[skip-display] +# # This notification will not be displayed, but will be included in the history +# summary = "foobar" +# skip_display = yes + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +#[stack-volumes] +# appname = "some_volume_notifiers" +# set_stack_tag = "volume" +# +# vim: ft=cfg diff --git a/.config/fish/config.fish b/.config/fish/config.fish new file mode 100644 index 0000000..b19f3fe --- /dev/null +++ b/.config/fish/config.fish @@ -0,0 +1,19 @@ +starship init fish | source + +fish_vi_key_bindings + +alias c="clear" +alias v="nvim" +alias gg="lazygit" +alias ls="exa --icons" +alias ll="exa -lah --icons" +alias q="exit" + +# >>> conda initialize >>> +# !! Contents within this block are managed by 'conda init' !! +eval /home/pavel/Programs/miniconda3/bin/conda "shell.fish" "hook" $argv | source +# <<< conda initialize <<< + +if ! test -n "$TMUX"; and ! test -n "$IS_EMACS"; + colorscript random +end \ No newline at end of file diff --git a/.config/fontconfig/fonts.conf b/.config/fontconfig/fonts.conf new file mode 100644 index 0000000..45d01f3 --- /dev/null +++ b/.config/fontconfig/fonts.conf @@ -0,0 +1,32 @@ + + + + + + monospace + + + DejaVu Sans Mono + + + + + sans-serif + + + DejaVu Sans + + + + diff --git a/.config/fselect/config.toml b/.config/fselect/config.toml new file mode 100644 index 0000000..0818898 --- /dev/null +++ b/.config/fselect/config.toml @@ -0,0 +1,12 @@ +no_color = false +gitignore = false +hgignore = false +dockerignore = false +is_zip_archive = [".zip", ".jar", ".war", ".ear"] +is_archive = [".7z", ".bz2", ".bzip2", ".gz", ".gzip", ".lz", ".rar", ".tar", ".xz", ".zip"] +is_audio = [".aac", ".aiff", ".amr", ".flac", ".gsm", ".m4a", ".m4b", ".m4p", ".mp3", ".ogg", ".wav", ".wma"] +is_book = [".azw3", ".chm", ".djvu", ".epub", ".fb2", ".mobi", ".pdf"] +is_doc = [".accdb", ".doc", ".docm", ".docx", ".dot", ".dotm", ".dotx", ".mdb", ".ods", ".odt", ".pdf", ".potm", ".potx", ".ppt", ".pptm", ".pptx", ".rtf", ".xlm", ".xls", ".xlsm", ".xlsx", ".xlt", ".xltm", ".xltx", ".xps"] +is_image = [".bmp", ".gif", ".heic", ".jpeg", ".jpg", ".png", ".psb", ".psd", ".tiff", ".webp"] +is_source = [".asm", ".bas", ".c", ".cc", ".ceylon", ".clj", ".coffee", ".cpp", ".cs", ".d", ".dart", ".elm", ".erl", ".go", ".groovy", ".h", ".hh", ".hpp", ".java", ".js", ".jsp", ".kt", ".kts", ".lua", ".nim", ".pas", ".php", ".pl", ".pm", ".py", ".rb", ".rs", ".scala", ".swift", ".tcl", ".vala", ".vb"] +is_video = [".3gp", ".avi", ".flv", ".m4p", ".m4v", ".mkv", ".mov", ".mp4", ".mpeg", ".mpg", ".webm", ".wmv"] diff --git a/.config/i3/config b/.config/i3/config new file mode 100644 index 0000000..863e311 --- /dev/null +++ b/.config/i3/config @@ -0,0 +1,397 @@ +set $mod Mod4 +font pango:monospace 10 +# +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +mouse_warping output + +# Apply XFCE Settings +# exec "bash /home/pavel/.screenlayout/layout.sh" +exec xfsettingsd +exec xiccd + +# start a terminal +bindsym $mod+Return exec "i3-msg 'workspace 1 🚀; exec st'" + +# kill focused window +bindsym $mod+Shift+q kill + +# change focus +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right + +# alternatively, you can use the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# split in horizontal orientation +bindsym $mod+s split h + +# split in vertical orientation +bindsym $mod+v split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+w layout stacking +bindsym $mod+t layout tabbed +bindsym $mod+e layout toggle split + +# toggle tiling / floating +bindsym $mod+Shift+f floating toggle + +bindsym $mod+Tab move workspace to output right +bindsym $mod+q focus output right + +# change focus between tiling / floating windows +# bindsym $mod+space focus mode_toggle + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +bindsym $mod+Shift+A focus child + +# switch to workspace + +set $w1 "1 🚀" +set $w2 "2 🌍" +set $w3 "3 💬" +set $w4 "4 🛠️️" +set $w7 "7 🛰️" +set $w8 "8 📝" +set $w9 "9 🎵" +set $w10 "10 📦" + +bindsym $mod+1 workspace $w1 +bindsym $mod+2 workspace $w2 +bindsym $mod+3 workspace $w3 +bindsym $mod+4 workspace $w4 +bindsym $mod+5 workspace 5 +bindsym $mod+6 workspace 6 +bindsym $mod+7 workspace $w7 +bindsym $mod+8 workspace $w8 +bindsym $mod+9 workspace $w9 +bindsym $mod+0 workspace $w10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $w1 +bindsym $mod+Shift+2 move container to workspace $w2 +bindsym $mod+Shift+3 move container to workspace $w3 +bindsym $mod+Shift+4 move container to workspace $w4 +bindsym $mod+Shift+5 move container to workspace 5 +bindsym $mod+Shift+6 move container to workspace 6 +bindsym $mod+Shift+7 move container to workspace $w7 +bindsym $mod+Shift+8 move container to workspace $w8 +bindsym $mod+Shift+9 move container to workspace $w9 +bindsym $mod+Shift+0 move container to workspace $w10 + +# Cycle workspaces +bindsym $mod+comma workspace prev +bindsym $mod+period workspace next + +assign [class="qutebrowser"] $w2 +assign [class="firefox"] $w2 +assign [class="VK"] $w3 +assign [class="Slack"] $w3 +assign [class="discord"] $w3 +assign [class="TelegramDesktop"] $w3 +assign [class="Postman"] $w4 +assign [class="Chromium-browse"] $w4 +assign [class="chromium"] $w4 +assign [class="google-chrome"] $w4 +assign [title="Vue Developer Tools"] $w4 +assign [class="Google Play Music Desktop Player"] $w9 +assign [class="jetbrains-datagrip"] $w4 +assign [class="zoom"] $w7 +assign [class="skype"] $w7 +assign [class="Mailspring"] $w8 +assign [class="Thunderbird"] $w8 +assign [class="Joplin"] $w8 + +for_window [title="ncmpcpp.*"] move to workspace $w9 +for_window [class="cinnamon-settings*"] floating enable +for_window [title="Picture-in-Picture"] sticky enable +# 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'" + +# Scratchpad +for_window [instance="dropdown_*"] floating enable +for_window [instance="dropdown_*"] move scratchpad +for_window [instance="dropdown_*"] sticky enable +for_window [instance="dropdown_*"] scratchpad show +for_window [instance="dropdown_*"] move position center + +bindsym $mod+u exec ~/bin/scripts/dropdown + +# Borders +# for_window [class=".*"] border pixel 0 +default_border pixel 3 +hide_edge_borders both + +# Gaps +set $default_inner 10 +set $default_outer 0 + +gaps inner $default_inner +gaps outer $default_outer + +smart_gaps on + +mode "inner gaps" { + bindsym plus gaps inner current plus 5 + bindsym minus gaps inner current minus 5 + bindsym Shift+plus gaps inner all plus 5 + bindsym Shift+minus gaps inner all minus 5 + bindsym 0 gaps inner current set 0 + bindsym Shift+0 gaps inner all set 0 + + bindsym r gaps inner current set $default_inner + bindsym Shift+r gaps inner all set $default_inner + + bindsym Return mode "default" + bindsym Escape mode "default" +} + +mode "outer gaps" { + bindsym plus gaps outer current plus 5 + bindsym minus gaps outer current minus 5 + bindsym Shift+plus gaps outer all plus 5 + bindsym Shift+minus gaps outer all minus 5 + bindsym 0 gaps outer current set 0 + bindsym Shift+0 gaps outer all set 0 + + bindsym r gaps outer current set $default_outer + bindsym Shift+r gaps outer all set $default_outer + + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+g mode "inner gaps" +bindsym $mod+Shift+g mode "outer gaps" + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize grow height 10 px or 10 ppt + bindsym k resize shrink height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + bindsym Shift+h resize shrink width 100 px or 100 ppt + bindsym Shift+j resize grow height 100 px or 100 ppt + bindsym Shift+k resize shrink height 100 px or 100 ppt + bindsym Shift+l resize grow width 100 px or 100 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 + + bindsym Shift+Left resize shrink width 100 px or 100 ppt + bindsym Shift+Down resize grow height 100 px or 100 ppt + bindsym Shift+Up resize shrink height 100 px or 100 ppt + bindsym Shift+Right resize grow width 100 px or 100 ppt + + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+r mode "resize" + +bindsym $mod+m mode "move" focus floating + +mode "move" { + bindsym $mod+Tab focus right + + bindsym Left move left + bindsym Down move down + bindsym Up move up + bindsym Right move right + + bindsym h move left + bindsym j move down + bindsym k move up + bindsym l move right + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +# # dmenu +# bindsym $mod+d exec i3-dmenu-desktop --dmenu="dmenu -l 10" +# bindsym $mod+apostrophe mode "dmenu" + +# mode "dmenu" { +# bindsym d exec i3-dmenu-desktop --dmenu="dmenu -l 10"; mode default +# bindsym p exec dmenu_run -l 10; mode default +# bindsym m exec dmenu-man; mode default +# bindsym b exec dmenu-buku; mode default +# bindsym f exec dmenu-explore; mode default +# bindsym t exec dmenu-tmuxp; mode default +# bindsym Escape mode "default" +# } + +# bindsym $mod+b exec --no-startup-id dmenu-buku + +# rofi +bindsym $mod+d exec "rofi -modi 'drun,run' -show drun" +bindsym $mod+apostrophe mode "rofi" + +mode "rofi" { + bindsym d exec "rofi -modi 'drun,run' -show drun" + bindsym m exec rofi-man; mode default + bindsym b exec rofi-buku-mine; mode default +# bindsym f exec dmenu-explore; mode default + bindsym k exec rofi-keepassxc -d ~/MEGAsync/Passwords.kdbx; mode default + bindsym Escape mode "default" +} + +bindsym $mod+b exec --no-startup-id rofi-buku-mine + + +# Launch apps +bindsym $mod+semicolon mode "apps" + +mode "apps" { + bindsym Escape mode "default" + bindsym b exec firefox; mode default + bindsym v exec vk-messenger; mode default + bindsym s exec slack; mode default; + bindsym m exec "st -e ncmpcpp"; mode default + bindsym c exec "copyq toggle"; mode default + bindsym k exec "keepassxc"; mode default + bindsym e exec mailspring; mode default + bindsym a exec emacs; mode default + # bindsym a exec emacsclient -c; mode default + # bindsym Shift+a exec emacs; mode default +} + +bindsym $mod+p exec "copyq menu" +bindsym $mod+Shift+x exec "i3lock -f -i /home/pavel/Pictures/lock-wallpaper-2-1.png" + +# Colors +set $bg-color #292d3e +set $active-color #82aaff +set $inactive-bg-color #434758 +set $text-color #f3f4f5 +set $inactive-text-color #aaaaaa +set $urgent-bg-color #f07178 +set $urgent-text-color #000000 + +# window colors +# border background text indicator child border +client.focused $active-color $bg-color $text-color $bg-color $active-color +client.unfocused $bg-color $inactive-bg-color $inactive-text-color $bg-color $bg-color +client.focused_inactive $active-color $inactive-bg-color $inactive-text-color $bg-color $bg-color +client.urgent $urgent-bg-color $urgent-bg-color $urgent-text-color $bg-color $urgent-bg-color + +# bar +exec_always --no-startup-id "bash /home/pavel/bin/polybar.sh" +# bar { +# status_command i3blocks -c ~/.config/i3/i3blocks.conf +# i3bar_command i3bar +# font pango:monospace 12 +# output HDMI-A-0 +# tray_output none +# colors { +# background $bg-color +# separator #757575 +# # border background text +# focused_workspace $bg-color $bg-color $text-color +# inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color +# urgent_workspace $urgent-bg-color $urgent-bg-color $urgent-text-color +# } +# } + +# bar { +# status_command i3blocks -c ~/.config/i3/i3blocks.conf +# i3bar_command i3bar +# font pango:monospace 10 +# output DVI-D-0 +# colors { +# background $bg-color +# separator #757575 +# # border background text +# focused_workspace $bg-color $bg-color $text-color +# inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color +# urgent_workspace $urgent-bg-color $urgent-bg-color $urgent-text-color +# } +# } + +# Pulse Audio controls +bindsym XF86AudioRaiseVolume exec --no-startup-id "pulseaudio-ctl up && pkill -RTMIN+2 i3blocks" +bindsym XF86AudioLowerVolume exec --no-startup-id "pulseaudio-ctl down && pkill -RTMIN+2 i3blocks" +bindsym XF86AudioMute exec --no-startup-id "pulseaudio-ctl mute && pkill -RTMIN+2 i3blocks" + +# Media player controls +bindsym XF86AudioPlay exec mpc toggle +bindsym XF86AudioPause exec mpc pause +bindsym XF86AudioNext exec mpc next +bindsym XF86AudioPrev exec mpc prev + +# Screen brightness +bindsym XF86MonBrightnessUp exec xbacklight -inc 5 +bindsym XF86MonBrightnessDown exec xbacklight -dec 5 + +exec --no-startup-id pulseeffects --gapplication-service + +# Screenshots +bindsym --release Print exec "flameshot gui" +bindsym --release Shift+Print exec "xfce4-screenshooter" + +# Sudo +exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 + +# Wallpaper +# fallback +exec_always "feh --bg-fill ~/Pictures/wallpaper-2.jpg" +# exec_always "/home/pavel/bin/scripts/wallgif /home/pavel/Videos/OMSBG7.mov" + +# Compton +exec compton + +# Some scripts +exec_always --no-startup-id set_layout + +# Applets +exec --no-startup-id /usr/bin/nm-applet +exec --no-startup-id /usr/bin/blueman-applet + +# MPD +exec --no-startup-id mpd + +# Stuff +exec aw-qt +exec "bash /home/pavel/bin/bukuserver.sh" +exec dunst +exec kde-connect-indicator +exec copyq +exec "bash /home/pavel/bin/tabliss.sh" +# exec emacs --daemon \ No newline at end of file diff --git a/.config/i3/i3blocks.conf b/.config/i3/i3blocks.conf new file mode 100644 index 0000000..7436229 --- /dev/null +++ b/.config/i3/i3blocks.conf @@ -0,0 +1,94 @@ +# List of valid properties: +# +# align +# color +# command +# full_text +# instance +# interval +# label +# min_width +# name +# separator +# separator_block_width +# short_text +# signal +# urgent + +command=~/bin/i3blocks/$BLOCK_NAME +separator_block_width=15 +markup=none + +[volume] +label=♪ +instance=Master +interval=once +signal=2 +command=~/bin/i3blocks/volume 5 pulse +separator=false + +[mpd] +label= +interval=1 +color=#FFA000 +command=~/bin/i3blocks/mpd + +[cpu_usage] +label= +color=#89ddf +interval=2 +separator=false + +[memory] +label= +separator=false +color=#82aaff +interval=10 + +[memory] +label= +color=#ffcb6b +instance=swap +# separator=false +interval=10 + +[wifi] +# instance=wlp3s0 +instance=wlx58d56e980477 +label= +color=#c3e88d +interval=10 +separator=false + +[bandwidth3] +interval=persist +color=#c3e88d +label= +UNIT=KB +PRINTF_COMMAND=printf "%.0f/%.0f\n", rx, wx; +separator=false + +[ipstack] +API_KEY=8948d12cd68a3b7ac60d405ed4118b43 +interval=1200 + +[weather] +LOCATION="Saint-Petersburg" +color=#FF9600 +interval=3600 +separator=false + +[sun] +LAT=59.9375N +LON=30.308611E +interval=600 + +# [battery] +# interval=60 + +[aw_afk] +interval=60 + +[time] +command=date '+%H:%M' +interval=10 diff --git a/.config/mpd/mpd.conf b/.config/mpd/mpd.conf new file mode 100644 index 0000000..339b261 --- /dev/null +++ b/.config/mpd/mpd.conf @@ -0,0 +1,398 @@ +# An example configuration file for MPD. +# Read the user manual for documentation: http://www.musicpd.org/doc/user/ + + +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +music_directory "~/Music" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +playlist_directory "~/.mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +db_file "~/.mpd/database" +# +# These settings are the locations for the daemon log files for the daemon. +# These logs are great for troubleshooting, depending on your log_level +# settings. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog. +# +log_file "~/.mpd/log" +# +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +pid_file "~/.mpd/pid" +# +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +state_file "~/.mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +sticker_file "~/.mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +#user "nobody" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "nogroup" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other then the default, any. +# This setting can deny access to control of the daemon. Not effective if +# systemd socket activiation is in use. +# +# For network +#bind_to_address "any" +# +# And for Unix Socket +#bind_to_address "~/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +#port "6600" +# +# This setting controls the type of information which is logged. Available +# setting arguments are "default", "secure" or "verbose". The "verbose" setting +# argument is recommended for troubleshooting, though can quickly stretch +# available resources on limited hardware storage. +# +#log_level "default" +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +#restore_paused "no" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +#save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. The complete list of possible values can be +# found in the user manual. +#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This example just enables the "comment" tag without disabling all +# the other supported tags: +#metadata_to_use "+comment" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +#auto_update "yes" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +#follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +#follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. %h will be replaced with the hostname. +# +#zeroconf_name "Music Player @ %h" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Database ####################################################################### +# + +#database { +# plugin "proxy" +# host "other.mpd.host" +# port "6600" +#} + +# Input ####################################################################### +# + +input { + plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +} + +# +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# An example of an ALSA output: +# +#audio_output { +# type "alsa" +# name "My ALSA Device" +## device "hw:0,0" # optional +## mixer_type "hardware" # optional +## mixer_device "default" # optional +## mixer_control "PCM" # optional +## mixer_index "0" # optional +#} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoder "vorbis" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +# type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +audio_output { + type "pulse" + name "My Pulse Output" +# server "remote_server" # optional +# sink "remote_server_sink" # optional +} + +audio_output { + type "fifo" + name "my_fifo" + path "/tmp/mpd.fifo" + format "44100:16:2" +} + +# +# An example of a winmm output (Windows multimedia API). +# +#audio_output { +# type "winmm" +# name "My WinMM output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## mixer_type "hardware" # optional +#} +# +# An example of an openal output. +# +#audio_output { +# type "openal" +# name "My OpenAL output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +#} +# +# An example of an sndio output. +# +#audio_output { +# type "sndio" +# name "sndio output" +# mixer_type "hardware" +#} +# +# An example of an OS X output: +# +#audio_output { +# type "osx" +# name "My OS X Device" +## device "Built-in Output" # optional +## channel_map "-1,-1,0,1" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +#audio_output { +# type "null" +# name "My Null Output" +# mixer_type "none" # optional +#} +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album", "track" or "auto". "auto" is a special mode that +# chooses between "track" and "album" depending on the current state of +# random playback. If random playback is enabled then "track" mode is used. +# See for more details about ReplayGain. +# This setting is off by default. +# +#replaygain "album" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. +# By default this setting is disabled. +# +#replaygain_missing_preamp "0" +# +# This setting enables or disables ReplayGain limiting. +# MPD calculates actual amplification based on the ReplayGain tags +# and replaygain_preamp / replaygain_missing_preamp setting. +# If replaygain_limit is enabled MPD will never amplify audio signal +# above its original level. If replaygain_limit is disabled such amplification +# might occur. By default this setting is enabled. +# +#replaygain_limit "yes" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +#filesystem_charset "UTF-8" +# +############################################################################### diff --git a/.config/ncmpcpp/bindings b/.config/ncmpcpp/bindings new file mode 100644 index 0000000..757f109 --- /dev/null +++ b/.config/ncmpcpp/bindings @@ -0,0 +1,543 @@ +############################################################## +## This is the example bindings file. Copy it to ## +## ~/.ncmpcpp/bindings or $XDG_CONFIG_HOME/ncmpcpp/bindings ## +## and set up your preferences ## +############################################################## +## +##### General rules ##### +## +## 1) Because each action has runtime checks whether it's +## ok to run it, a few actions can be bound to one key. +## Actions will be bound in order given in configuration +## file. When a key is pressed, first action in order +## will test itself whether it's possible to run it. If +## test succeeds, action is executed and other actions +## bound to this key are ignored. If it doesn't, next +## action in order tests itself etc. +## +## 2) It's possible to bind more that one action at once +## to a key. It can be done using the following syntax: +## +## def_key "key" +## action1 +## action2 +## ... +## +## This creates a chain of actions. When such chain is +## executed, each action in chain is run until the end of +## chain is reached or one of its actions fails to execute +## due to its requirements not being met. If multiple actions +## and/or chains are bound to the same key, they will be +## consecutively run until one of them gets fully executed. +## +## 3) When ncmpcpp starts, bindings configuration file is +## parsed and then ncmpcpp provides "missing pieces" +## of default keybindings. If you want to disable some +## bindings, there is a special action called 'dummy' +## for that purpose. Eg. if you want to disable ability +## to crop playlists, you need to put the following +## into configuration file: +## +## def_key "C" +## dummy +## +## After that ncmpcpp will not bind any default action +## to this key. +## +## 4) To let you write simple macros, the following special +## actions are provided: +## +## - push_character "character" - pushes given special +## character into input queue, so it will be immediately +## picked by ncmpcpp upon next call to readKey function. +## Accepted values: mouse, up, down, page_up, page_down, +## home, end, space, enter, insert, delete, left, right, +## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\, +## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace. +## In addition, most of these names can be prefixed with +## alt-/ctrl-/shift- to be recognized with the appropriate +## modifier key(s). +## +## - push_characters "string" - pushes given string into +## input queue. +## +## - require_runnable "action" - checks whether given action +## is runnable and fails if it isn't. This is especially +## useful when mixed with previous two functions. Consider +## the following macro definition: +## +## def_key "key" +## push_characters "custom_filter" +## apply_filter +## +## If apply_filter can't be currently run, we end up with +## sequence of characters in input queue which will be +## treated just as we typed them. This may lead to unexpected +## results (in this case 'c' will most likely clear current +## playlist, 'u' will trigger database update, 's' will stop +## playback etc.). To prevent such thing from happening, we +## need to change above definition to this one: +## +## def_key "key" +## require_runnable "apply_filter" +## push_characters "custom_filter" +## apply_filter +## +## Here, first we test whether apply_filter can be actually run +## before we stuff characters into input queue, so if condition +## is not met, whole chain is aborted and we're fine. +## +## - require_screen "screen" - checks whether given screen is +## currently active. accepted values: browser, clock, help, +## media_library, outputs, playlist, playlist_editor, +## search_engine, tag_editor, visualizer, last_fm, lyrics, +## selected_items_adder, server_info, song_info, +## sort_playlist_dialog, tiny_tag_editor. +## +## - run_external_command "command" - runs given command using +## system() function. +## +## 5) In addition to binding to a key, you can also bind actions +## or chains of actions to a command. If it comes to commands, +## syntax is very similar to defining keys. Here goes example +## definition of a command: +## +## def_command "quit" [deferred] +## stop +## quit +## +## If you execute the above command (which can be done by +## invoking action execute_command, typing 'quit' and pressing +## enter), ncmpcpp will stop the player and then quit. Note the +## presence of word 'deferred' enclosed in square brackets. It +## tells ncmpcpp to wait for confirmation (ie. pressing enter) +## after you typed quit. Instead of 'deferred', 'immediate' +## could be used. Then ncmpcpp will not wait for confirmation +## (enter) and will execute the command the moment it sees it. +## +## Note: while command chains are executed, internal environment +## update (which includes current window refresh and mpd status +## update) is not performed for performance reasons. However, it +## may be desirable to do so in some situration. Therefore it's +## possible to invoke by hand by performing 'update enviroment' +## action. +## +## Note: There is a difference between: +## +## def_key "key" +## action1 +## +## def_key "key" +## action2 +## +## and +## +## def_key "key" +## action1 +## action2 +## +## First one binds two single actions to the same key whilst +## second one defines a chain of actions. The behavior of +## these two is different and is described in (1) and (2). +## +## Note: Function def_key accepts non-ascii characters. +## +##### List of unbound actions ##### +## +## The following actions are not bound to any key/command: +## +## - set_volume +## +# +#def_key "mouse" +# mouse_event +# +#def_key "up" +# scroll_up +# +#def_key "shift-up" +# select_item +# scroll_up +# +#def_key "down" +# scroll_down +# +#def_key "shift-down" +# select_item +# scroll_down +# +#def_key "[" +# scroll_up_album +# +#def_key "]" +# scroll_down_album +# +#def_key "{" +# scroll_up_artist +# +#def_key "}" +# scroll_down_artist +# +#def_key "page_up" +# page_up +# +#def_key "page_down" +# page_down +# +#def_key "home" +# move_home +# +#def_key "end" +# move_end +# +#def_key "insert" +# select_item +# +#def_key "enter" +# enter_directory +# +#def_key "enter" +# toggle_output +# +#def_key "enter" +# run_action +# +#def_key "enter" +# play_item +# +#def_key "space" +# add_item_to_playlist +# +#def_key "space" +# toggle_lyrics_update_on_song_change +# +#def_key "space" +# toggle_visualization_type +# +#def_key "delete" +# delete_playlist_items +# +#def_key "delete" +# delete_browser_items +# +#def_key "delete" +# delete_stored_playlist +# +#def_key "right" +# next_column +# +#def_key "right" +# slave_screen +# +#def_key "right" +# volume_up +# +#def_key "+" +# volume_up +# +#def_key "left" +# previous_column +# +#def_key "left" +# master_screen +# +#def_key "left" +# volume_down +# +#def_key "-" +# volume_down +# +#def_key ":" +# execute_command +# +#def_key "tab" +# next_screen +# +#def_key "shift-tab" +# previous_screen +# +def_key "h" + show_help +# +#def_key "1" +# show_playlist +# +#def_key "2" +# show_browser +# +#def_key "2" +# change_browse_mode +# +#def_key "3" +# show_search_engine +# +#def_key "3" +# reset_search_engine +# +#def_key "4" +# show_media_library +# +#def_key "4" +# toggle_media_library_columns_mode +# +#def_key "5" +# show_playlist_editor +# +#def_key "6" +# show_tag_editor +# +#def_key "7" +# show_outputs +# +#def_key "8" +# show_visualizer +# +#def_key "=" +# show_clock +# +#def_key "@" +# show_server_info +# +#def_key "s" +# stop +# +#def_key "p" +# pause +# +#def_key ">" +# next +# +#def_key "<" +# previous +# +#def_key "ctrl-h" +# jump_to_parent_directory +# +#def_key "ctrl-h" +# replay_song +# +#def_key "backspace" +# jump_to_parent_directory +# +#def_key "backspace" +# replay_song +# +#def_key "f" +# seek_forward +# +#def_key "b" +# seek_backward +# +#def_key "r" +# toggle_repeat +# +#def_key "z" +# toggle_random +# +#def_key "y" +# save_tag_changes +# +#def_key "y" +# start_searching +# +#def_key "y" +# toggle_single +# +#def_key "R" +# toggle_consume +# +#def_key "Y" +# toggle_replay_gain_mode +# +#def_key "T" +# toggle_add_mode +# +#def_key "|" +# toggle_mouse +# +#def_key "#" +# toggle_bitrate_visibility +# +#def_key "Z" +# shuffle +# +#def_key "x" +# toggle_crossfade +# +#def_key "X" +# set_crossfade +# +#def_key "u" +# update_database +# +#def_key "ctrl-s" +# sort_playlist +# +#def_key "ctrl-s" +# toggle_browser_sort_mode +# +#def_key "ctrl-s" +# toggle_media_library_sort_mode +# +#def_key "ctrl-r" +# reverse_playlist +# +#def_key "ctrl-f" +# apply_filter +# +#def_key "ctrl-_" +# select_found_items +# +#def_key "/" +# find +# +#def_key "/" +# find_item_forward +# +#def_key "?" +# find +# +#def_key "?" +# find_item_backward +# +#def_key "." +# next_found_item +# +#def_key "," +# previous_found_item +# +#def_key "w" +# toggle_find_mode +# +#def_key "e" +# edit_song +# +#def_key "e" +# edit_library_tag +# +#def_key "e" +# edit_library_album +# +#def_key "e" +# edit_directory_name +# +#def_key "e" +# edit_playlist_name +# +#def_key "e" +# edit_lyrics +# +#def_key "i" +# show_song_info +# +#def_key "I" +# show_artist_info +# +#def_key "g" +# jump_to_position_in_song +# +#def_key "l" +# show_lyrics +# +#def_key "ctrl-v" +# select_range +# +#def_key "v" +# reverse_selection +# +#def_key "V" +# remove_selection +# +#def_key "B" +# select_album +# +#def_key "a" +# add_selected_items +# +#def_key "c" +# clear_playlist +# +#def_key "c" +# clear_main_playlist +# +#def_key "C" +# crop_playlist +# +#def_key "C" +# crop_main_playlist +# +#def_key "m" +# move_sort_order_up +# +#def_key "m" +# move_selected_items_up +# +#def_key "n" +# move_sort_order_down +# +#def_key "n" +# move_selected_items_down +# +#def_key "M" +# move_selected_items_to +# +#def_key "A" +# add +# +#def_key "S" +# save_playlist +# +#def_key "o" +# jump_to_playing_song +# +#def_key "G" +# jump_to_browser +# +#def_key "G" +# jump_to_playlist_editor +# +#def_key "~" +# jump_to_media_library +# +#def_key "E" +# jump_to_tag_editor +# +#def_key "U" +# toggle_playing_song_centering +# +#def_key "P" +# toggle_display_mode +# +#def_key "\\" +# toggle_interface +# +#def_key "!" +# toggle_separators_between_albums +# +#def_key "L" +# toggle_lyrics_fetcher +# +#def_key "F" +# fetch_lyrics_in_background +# +#def_key "alt-l" +# toggle_fetching_lyrics_in_background +# +#def_key "ctrl-l" +# toggle_screen_lock +# +#def_key "`" +# toggle_library_tag_type +# +#def_key "`" +# refetch_lyrics +# +#def_key "`" +# add_random_items +# +#def_key "ctrl-p" +# set_selected_items_priority +# +#def_key "q" +# quit +# diff --git a/.config/ncmpcpp/config b/.config/ncmpcpp/config new file mode 100644 index 0000000..8c39b9d --- /dev/null +++ b/.config/ncmpcpp/config @@ -0,0 +1,406 @@ +ncmpcpp_directory = ~/.mpd/ncmpcpp +lyrics_directory = ~/.mpd/lyrics +# +##### connection settings ##### +mpd_host = localhost +mpd_port = 6600 +mpd_connection_timeout = 5 +mpd_music_dir = ~/Music + +##### music visualizer ##### + +audio_output { + type "fifo" + name "Visualizer feed" + path "/tmp/mpd.fifo" + format "44100:16:2" +} + +visualizer_fifo_path = /tmp/mpd.fifo + +visualizer_output_name = Visualizer feed + +visualizer_in_stereo = yes + +visualizer_sync_interval = 30 +# Available values: spectrum, wave, wave_filled, ellipse. +visualizer_type = spectrum +visualizer_look = ●▮ +#visualizer_color = blue, cyan, green, yellow, magenta, red +visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161 + +##### song format ##### +## %l - length +## %f - filename +## %D - directory +## %a - artist +## %A - album artist +## %t - title +## %b - album +## %y - date +## %n - track number (01/12 -> 01) +## %N - full track info (01/12 -> 01/12) +## %g - genre +## %c - composer +## %p - performer +## %d - disc +## %C - comment +## %P - priority +## $R - begin right alignment +## - 0 - default window color (discards all other colors) +## - 1 - black +## - 2 - red +## - 3 - green +## - 4 - yellow +## - 5 - blue +## - 6 - magenta +## - 7 - cyan +## - 8 - white +## - 9 - end of current color +## - b - bold text +## - u - underline text +## - r - reverse colors +## - a - use alternative character set + +song_list_format = {%a - }{$7%b$9 - }{%t}|{$8%f$9}$R{$3(%l)$9} +song_status_format = {{%a{ "%b"{ (%4y)}} - }{%t}}|{%f} +song_library_format = {%n - }{%t}|{%f} +alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b +alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%4y$9)}}|{%D} +current_item_prefix = $(yellow)$r +current_item_suffix = $/r$(end) +current_item_inactive_column_prefix = $(white)$r +current_item_inactive_column_suffix = $/r$(end) +now_playing_prefix = $b +now_playing_suffix = $/b +browser_playlist_prefix = "$2playlist$9 " +selected_item_prefix = $6 +selected_item_suffix = $9 +modified_item_prefix = $3> $9 +song_window_title_format = ncmpcpp - {%a - }{%t}|{%f} +## +## Note: Below variables are used for sorting songs in browser. The sort mode +## determines how songs are sorted, and can be used in combination with a sort +## format to specify a custom sorting format. Available values for +## browser_sort_mode are "name", "mtime", "format" and "noop". +## +# +browser_sort_mode = name +# +browser_sort_format = {%a - }{%t}|{%f} {(%l)} +# +##### columns settings ##### +## +## syntax of song columns list format is "column column etc." +## +## - syntax for each column is: +## +## (width of the column)[color of the column]{displayed tag} +## +## Note: Width is by default in %, if you want a column to have fixed size, add +## 'f' after the value, e.g. (10)[white]{a} will be the column that take 10% of +## screen (so the real width will depend on actual screen size), whereas +## (10f)[white]{a} will take 10 terminal cells, no matter how wide the screen +## is. +## +## - color is optional (if you want the default one, leave the field empty). +## +## Note: You can give a column additional attributes by putting appropriate +## character after displayed tag character. Available attributes are: +## +## - r - column will be right aligned +## - E - if tag is empty, empty tag marker won't be displayed +## +## You can also: +## +## - give a column custom name by putting it after attributes, separated with +## character ':', e.g. {lr:Length} gives you right aligned column of lengths +## named "Length". +## +## - define sequence of tags, that have to be displayed in case predecessor is +## empty in a way similar to the one in classic song format, i.e. using '|' +## character, e.g. {a|c|p:Owner} creates column named "Owner" that tries to +## display artist tag and then composer and performer if previous ones are not +## available. +## +# +song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l} +# +##### various settings ##### +# +## +## Note: Custom command that will be executed each time song changes. Useful for +## notifications etc. +## +#execute_on_song_change = "" +# +## +## Note: Custom command that will be executed each time player state +## changes. The environment variable MPD_PLAYER_STATE is set to the current +## state (either unknown, play, pause, or stop) for its duration. +## +# +#execute_on_player_state_change = "" +# +#playlist_show_mpd_host = no +# +#playlist_show_remaining_time = no +# +#playlist_shorten_total_times = no +# +#playlist_separate_albums = no +# +## +## Note: Possible display modes: classic, columns. +## +#playlist_display_mode = columns +# +browser_display_mode = columns +# +#search_engine_display_mode = classic +# +#playlist_editor_display_mode = classic +# +#discard_colors_if_item_is_selected = yes +# +#show_duplicate_tags = yes +# +incremental_seeking = yes +# +#seek_time = 1 +# +#volume_change_step = 2 +# +#autocenter_mode = no +# +#centered_cursor = no +# +## +## Note: You can specify third character which will be used to build 'empty' +## part of progressbar. +## +progressbar_look = => +# +## Available values: database, playlist. +## +#default_place_to_search_in = database +# +## Available values: classic, alternative. +## +user_interface = classic +# +#data_fetching_delay = yes +# +## Available values: artist, album_artist, date, genre, composer, performer. +## +media_library_primary_tag = album_artist +# +media_library_albums_split_by_date = yes +# +## Available values: wrapped, normal. +## +#default_find_mode = wrapped +# +#default_tag_editor_pattern = %n - %t +# +#header_visibility = yes +# +#statusbar_visibility = yes +# +#titles_visibility = yes +# +#header_text_scrolling = yes +# +#cyclic_scrolling = no +# +#lines_scrolled = 2 +# +lyrics_fetchers = lyricwiki, azlyrics, genius, sing365, lyricsmania, metrolyrics, justsomelyrics, jahlyrics, plyrics, tekstowo, internet +# +#follow_now_playing_lyrics = no +# +#fetch_lyrics_for_current_song_in_background = no +# +#store_lyrics_in_song_dir = no +# +#generate_win32_compatible_filenames = yes +# +#allow_for_physical_item_deletion = no +# +## +## Note: If you set this variable, ncmpcpp will try to get info from last.fm in +## language you set and if it fails, it will fall back to english. Otherwise it +## will use english the first time. +## +## Note: Language has to be expressed as an ISO 639 alpha-2 code. +## +#lastfm_preferred_language = en +# +#space_add_mode = add_remove +# +#show_hidden_files_in_local_browser = no +# +## +## How shall screen switcher work? +## +## - "previous" - switch between the current and previous screen. +## - "screen1,...,screenN" - switch between given sequence of screens. +## +## Screens available for use: help, playlist, browser, search_engine, +## media_library, playlist_editor, tag_editor, outputs, visualizer, clock, +## lyrics, last_fm. +## +#screen_switcher_mode = playlist, browser +# +## +## Note: You can define startup screen by choosing screen from the list above. +## +startup_screen = media_library +# +## +## Note: You can define startup slave screen by choosing screen from the list +## above or an empty value for no slave screen. +## +#startup_slave_screen = "" +# +#startup_slave_screen_focus = no +# +## +## Default width of locked screen (in %). Acceptable values are from 20 to 80. +## +# +#locked_screen_width_part = 50 +# +#ask_for_locked_screen_width_part = yes +# +#jump_to_now_playing_song_at_start = yes +# +#ask_before_clearing_playlists = yes +# +#clock_display_seconds = no +# +#display_volume_level = yes +# +#display_bitrate = no +# +#display_remaining_time = no +# +## Available values: none, basic, extended, perl. +## +#regular_expressions = perl +# +## +## Note: if below is enabled, ncmpcpp will ignore leading "The" word while +## sorting items in browser, tags in media library, etc. +## +#ignore_leading_the = no +# +## +## Note: if below is enabled, ncmpcpp will ignore diacritics while searching and +## filtering lists. This takes an effect only if boost was compiled with ICU +## support. +## +#ignore_diacritics = no +# +#block_search_constraints_change_if_items_found = yes +# +mouse_support = yes +# +#mouse_list_scroll_whole_page = yes +# +#empty_tag_marker = +# +#tags_separator = " | " +# +#tag_editor_extended_numeration = no +# +#media_library_sort_by_mtime = no +# +#enable_window_title = yes +# +## +## Note: You can choose default search mode for search engine. Available modes +## are: +## +## - 1 - use mpd built-in searching (no regexes, pattern matching) +## +## - 2 - use ncmpcpp searching (pattern matching with support for regexes, but +## if your mpd is on a remote machine, downloading big database to process +## it can take a while +## +## - 3 - match only exact values (this mode uses mpd function for searching in +## database and local one for searching in current playlist) +## +# +#search_engine_default_search_mode = 1 +# +external_editor = nvim +# +## Note: set to yes if external editor is a console application. +## +use_console_editor = yes +# +##### colors definitions ##### +## +## It is possible to set a background color by setting a color value +## "_", e.g. red_black will set foregound color to red +## and background color to black. +## +## In addition, for terminals that support 256 colors it is possible to set one +## of them by using a number in range [1, 256] instead of color name, +## e.g. numerical value corresponding to red_black is 2_1. To find out if the +## terminal supports 256 colors, run ncmpcpp and check out the bottom of the +## help screen for list of available colors and their numerical values. +## +## What is more, there are two special values for the background color: +## "transparent" and "current". The first one explicitly sets the background to +## be transparent, while the second one allows you to preserve current +## background color and change only the foreground one. It's used implicitly +## when background color is not specified. +## +## Moreover, it is possible to attach format information to selected color +## variables by appending to their end a colon followed by one or more format +## flags, e.g. black:b or red:ur. The following variables support this syntax: +## visualizer_color, color1, color2, empty_tag_color, volume_color, +## state_line_color, state_flags_color, progressbar_color, +## progressbar_elapsed_color, player_state_color, statusbar_time_color, +## alternative_ui_separator_color. +## +## Note: due to technical limitations of older ncurses version, if 256 colors +## are used there is a possibility that you'll be able to use only colors with +## transparent background. +# +#colors_enabled = yes +# +#empty_tag_color = cyan +# +#header_window_color = default +# +#volume_color = default +# +#state_line_color = default +# +#state_flags_color = default:b +# +#main_window_color = yellow +# +#color1 = white +# +#color2 = green +# +#progressbar_color = black:b +# +#progressbar_elapsed_color = green:b +# +#statusbar_color = default +# +#statusbar_time_color = default:b +# +#player_state_color = default:b +# +#alternative_ui_separator_color = black:b +# +#window_border_color = green +# +#active_window_border = red +# diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim new file mode 100644 index 0000000..324b3a2 --- /dev/null +++ b/.config/nvim/init.vim @@ -0,0 +1,1053 @@ +call plug#begin('~/.local/share/nvim/plugged') + +" UI +Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } +Plug 'xuyuanp/nerdtree-git-plugin' +Plug 'nathanaelkane/vim-indent-guides' +" Plug 'Yggdroot/indentLine' +Plug 'jistr/vim-nerdtree-tabs' +Plug 'luochen1990/rainbow' +Plug 'RRethy/vim-illuminate' + +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +Plug 'edkolev/tmuxline.vim' + +" Plug 'lilydjwg/colorizer' +Plug 'mhinz/vim-startify' + +" Plug 'camspiers/animate.vim' +" Plug 'camspiers/lens.vim' + +" Plug 'kien/tabman.vim' + +" LaTeX +Plug 'lervag/vimtex' +Plug 'KeitaNakamura/tex-conceal.vim', {'for': 'tex'} + +" Python +Plug 'python-mode/python-mode', { 'branch': 'develop' } +" Plug 'ivanov/vim-ipython' + +" Js & Co. +Plug 'pangloss/vim-javascript' +Plug 'posva/vim-vue' +" Plug 'heavenshell/vim-jsdoc' +Plug 'leafgarland/typescript-vim' +Plug 'mattn/emmet-vim' +Plug 'leafOfTree/vim-svelte-plugin' +" Plug 'chrisbra/colorizer' +" Plug 'mxw/vim-jsx' + +" C++ +" Plug 'octol/vim-cpp-enhanced-highlight' +" Plug 'zchee/deoplete-clang' + +" Misc file formats +Plug 'elzr/vim-json' +Plug 'plasticboy/vim-markdown' +Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } +" Plug 'adimit/prolog.vim' +Plug 'jidn/vim-dbml' +" Plug 'udalov/kotlin-vim' +" Plug 'suan/vim-instant-markdown', {'for': 'markdown'} "npm -g install instant-markdown-d +Plug 'euclio/vim-markdown-composer' +" Plug 'chrisbra/csv.vim' +Plug 'aklt/plantuml-syntax' +" Plug 'tyru/open-browser.vim' +Plug 'weirongxu/plantuml-previewer.vim' +" Plug 'rvesse/vim-sparql' +" Plug 'tikhomirov/vim-glsl' +" Plug 'digitaltoad/vim-jade' +" Plug 'tpope/vim-jdaddy' + +"Git +Plug 'tpope/vim-fugitive' +Plug 'junegunn/gv.vim' +Plug 'airblade/vim-gitgutter' +Plug 'jreybert/vimagit' +" Plug 'drn/blamer.nvim', {'branch': 'silence-file-length-fatal-messages'} + +"Snippets stuff +Plug 'honza/vim-snippets' +Plug 'sirver/ultisnips' + +" General powerful plugins +Plug 'neoclide/coc.nvim', {'branch': 'release'} +Plug 'w0rp/ale' +" Plug 'shougo/deoplete.nvim' +Plug 'janko-m/vim-test' +" Plug 'metakirby5/codi.vim' +" Plug 'axvr/zepl.vim' +" Plug 'valloric/youcompleteme' +" Plug 'scrooloose/syntastic' + +" Coding & navigation +Plug 'valloric/matchtagalways' +Plug 'alvan/vim-closetag' +Plug 'tpope/vim-surround' +Plug 'junegunn/vim-easy-align' +Plug 'tpope/vim-commentary' +Plug 'justinmk/vim-sneak' +Plug 'christoomey/vim-sort-motion' +Plug 'AndrewRadev/splitjoin.vim' +" Plug 'AndrewRadev/sideways.vim' +Plug 'unblevable/quick-scope' +" Plug 'terryma/vim-multiple-cursors' +" Plug 'scrooloose/nerdcommenter' +" Plug 'chrisbra/nrrwrgn' + +Plug 'jiangmiao/auto-pairs' +" Plug 'raimondi/delimitmate' +" Plug 'cohama/lexima.vim' + +" Plug 'dhruvasagar/vim-table-mode' +Plug 'bronson/vim-trailing-whitespace' + +Plug 'dkprice/vim-easygrep' +Plug 'easymotion/vim-easymotion' +" Plug 'liuchengxu/vista.vim' +Plug 'pechorin/any-jump.vim' +Plug 'vim-scripts/restore_view.vim' +Plug 'tpope/vim-repeat' +Plug 'kkoomen/vim-doge' +" Plug 'kshenoy/vim-signature' +" Plug 'ericbn/vim-relativize' +" Plug 'majutsushi/tagbar' +" Plug 'yuttie/comfortable-motion.vim' +" Plug 'derekwyatt/vim-fswitch' + +" Different extensions +Plug 'kana/vim-submode' +Plug 'skywind3000/asynctasks.vim' +Plug 'skywind3000/asyncrun.vim' +Plug 'chrisbra/unicode.vim' + +" Undo tree implementation +Plug 'sjl/gundo.vim' +" Plug 'mbbill/undotree' +" Plug 'simnalamburt/vim-mundo' + +" Custom text objects +Plug 'kana/vim-textobj-user' +Plug 'kana/vim-textobj-indent' +Plug 'kana/vim-textobj-line' +" Plug 'kana/vim-textobj-entire' + +" Themes +Plug 'drewtempelmeyer/palenight.vim' +Plug 'https://gitlab.com/protesilaos/tempus-themes-vim.git' +" Plug 'crusoexia/vim-monokai' +" Plug 'lifepillar/vim-solarized8' +" Plug 'haishanh/night-owl.vim' +" Plug 'arcticicestudio/nord-vim' + +" fuzzy file stuff +Plug 'liuchengxu/vim-clap' +" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } +" Plug 'ctrlpvim/ctrlp.vim' + +" Misc +Plug 'wakatime/vim-wakatime' +Plug 'ActivityWatch/aw-watcher-vim' +Plug 'vimwiki/vimwiki' +" Plug 'tpope/vim-rhubarb' +" Plug 'mtth/scratch.vim' + +" Has to be plugged the last +Plug 'ryanoasis/vim-devicons' +Plug 'tiagofumo/vim-nerdtree-syntax-highlight' +call plug#end() + +" General settings {{{ +set runtimepath+=~/.config/nvim/my-snippets/ +let $FZF_DEFAULT_COMMAND='fd --type f --exclude .git' + +set hidden + +set nobackup +set nowritebackup +set shortmess+=c + +set exrc +set secure +set number +set relativenumber +set linebreak +set nojoinspaces + +set hlsearch +set cursorline +set mouse=a +set splitbelow +set splitright +set inccommand=split +set switchbuf=vsplit +set redrawtime=500 + +" Indent +set tabstop=4 +set shiftwidth=4 +set smarttab +set expandtab +set autoindent + +" Folding +set foldmethod=syntax +set foldlevelstart=20 + +" }}} + +" Mappings {{{ +nnoremap :NERDTreeToggle +nnoremap "+p +" nnoremap :Files +nnoremap :Clap files +nnoremap ca :Clap grep +nnoremap aa :Clap grep +nnoremap cl :Clap blines +nnoremap cc :Clap filer +nnoremap ch :Clap history +nnoremap cj :Clap jumps + +" nnoremap s :%s/\<\>/ + +tnoremap +tnoremap :call chansend(b:terminal_job_id, "\Esc>")i +nnoremap q :lclose :pclose :cclose :noh + +noremap - ddkP +noremap _ ddp +nnoremap H ^ +nnoremap L $ + +nnoremap $ + +" Toggle conceal +nnoremap hc :let &cole=(&cole == 2) ? 0 : 2 echo 'conceallevel ' . &cole + +" lens.vim +nnoremap hl :call lens#toggle() + +" colorizer +nnoremap ho :ColorToggle + +" Delete line into _ +nnoremap d "_d +vnoremap d "_d + +" lol +" nnoremap ; : + +nnoremap u :GundoToggle + +" noremap :call comfortable_motion#flick(40) +" noremap :call comfortable_motion#flick(-40) +" nnoremap :TagbarToggle +nnoremap :Vista!! + +" vim-test +nnoremap tl :TestLast +nnoremap tf :TestFile +nnoremap ts :TestSuit +nnoremap tn :TestNearest +nnoremap tv :TestVisit + +" Tabs +nnoremap gn :tabnew +nnoremap gN :tabclose +" nnoremap t1 1gt +" nnoremap t2 2gt +" nnoremap t3 3gt +" nnoremap t4 4gt +" nnoremap t5 5gt +" nnoremap t6 6gt +" nnoremap t7 7gt +" nnoremap t8 8gt +" nnoremap t9 9gt + +" ALE +nnoremap af :ALEFix +nnoremap ad :ALEGoToDefinition +nnoremap asd :ALEGoToDefinitionInVSplit +nnoremap assd :ALEGoToDefinitionInSplit +nnoremap atd :ALEGoToDefinitionInTab +nnoremap ar :ALEFindReferences +nnoremap ah :ALEHover +nnoremap ac :ALERename + +" coc +" nnoremap ad (coc-definition) +" nnoremap ai (coc-implementation) +" nnoremap ar (coc-references) +" nnoremap ac (coc-rename) + +" Async tasks +nnoremap wl :AsyncTaskList +nnoremap wr :AsyncTask +nnoremap wa :CocList tasks + + +" Replace +nnoremap r :%s/\<\>/ + +" Sideways +nnoremap gh :SidewaysLeft +nnoremap gl :SidewaysRight +nnoremap g :SidewaysLeft +nnoremap g :SidewaysRight + +omap aa SidewaysArgumentTextobjA +xmap aa SidewaysArgumentTextobjA +omap ia SidewaysArgumentTextobjI +xmap ia SidewaysArgumentTextobjI + +" REPL +" nnoremap r :Repl + +" EasyAlign +xmap ga (EasyAlign) +nmap ga (EasyAlign) + +" quick-scope +let g:qs_highlight_on_keys = ['f', 'F', 't', 'T'] + +" vim-sneak +let g:sneak#s_next = 1 + +" Close vim-clap with Esc +autocmd FileType clap_input inoremap :call clap#handler#exit() + +" vimwiki +" nnoremap wah :VimwikiAll2HTML +" nnoremap wl :VimwikiTabnewLink + +nmap thestupidkeybinding1 VimwikiNextLink +let g:vimwiki_key_mappings = + \ { + \ 'table_mappings': 0, + \ } + +" FSwitch +" noremap + :FSAbove + +" Snippets +let g:UltiSnipsUsePythonVersion = 3 +let g:UltiSnipsExpandTrigger="" +let g:UltiSnipsJumpForwardTrigger="" +let g:UltiSnipsJumpBackwardTrigger="" + +" Multiple cursors +let g:multi_cursor_start_word_key = '' + +" Scratch +let g:scratch_no_mappings = 1 + +"}}} + +" Windows management mode {{{ +" Submode settings +let g:submode_always_show_submode = 1 +let g:submode_timeout = 0 +let g:submode_keyseqs_to_leave = [] + +" Enter and leave the mode +call submode#enter_with('Windows', 'n', '', 's', ':call WindowsModeEnter()') +call submode#map('Windows', 'n', 'x', '', ':call WindowsModeLeave()') + +function! WindowsModeEnter() + if g:lens#disabled == 0 + let g:lens#disabled = 1 + endif +endfunction + +function! WindowsModeLeave() + let g:lens#disabled = 0 + call lens#run() +endfunction + +" Switch to the left. If the window is left-most, swith to the right-most window +" of the previous tab +function! SwitchLeft() + let l:win = winnr() + execute 'wincmd h' + if l:win == winnr() + normal gT + execute winnr('$') . 'wincmd w' + endif +endfunction + +" The same for the left +function! SwitchRight() + let l:win = winnr() + execute 'wincmd l' + if l:win == winnr() + normal gt + execute 1 . 'wincmd w' + endif +endfunction + +" Switching +call submode#map('Windows', 'n', '', 'j', 'j') +call submode#map('Windows', 'n', '', 'k', 'k') +call submode#map('Windows', 'n', '', 'h', ':call SwitchLeft()') +call submode#map('Windows', 'n', '', 'l', ':call SwitchRight()') + +call submode#map('Windows', 'n', '', '', 'j') +call submode#map('Windows', 'n', '', '', 'k') +call submode#map('Windows', 'n', '', '', ':call SwitchLeft()') +call submode#map('Windows', 'n', '', '', ':call SwitchRight()') + +" Closing +call submode#map('Windows', 'n', '', 'q', 'c') +call submode#map('Windows', 'n', '', 'Q', ':q!') + +" Moving windows +call submode#map('Windows', 'n', '', '', 'J') +call submode#map('Windows', 'n', '', '', 'K') +call submode#map('Windows', 'n', '', '', 'H') +call submode#map('Windows', 'n', '', '', 'L') + +call submode#map('Windows', 'n', '', '', 'J') +call submode#map('Windows', 'n', '', '', 'K') +call submode#map('Windows', 'n', '', '', 'H') +call submode#map('Windows', 'n', '', '', 'L') + +call submode#map('Windows', 'n', '', 't', 'T') + +" New splits +call submode#map('Windows', 'n', '', 'v', 'v') +call submode#map('Windows', 'n', '', 's', 's') + +" Mappings for normal mode +nnoremap j +nnoremap k +nnoremap :call SwitchLeft() +nnoremap :call SwitchRight() + +nnoremap j +nnoremap k +nnoremap :call SwitchLeft() +nnoremap :call SwitchRight() +" }}} + +" Misc plugins settings {{{ +" NERDTree +let NERDTreeIgnore = ['\.pyc$', '^__pycache__$'] +let NERDTreeMinimalUI = 1 +let NERDTreeDirArrows = 1 +let NERDTreeMouseMode = 2 + +" csv +let g:csv_arrange_align = 'l*' + +" git +autocmd BufWritePost * GitGutter +let g:magit_default_fold_level = 0 +" let g:blamer_enabled = 1 +" let g:blamer_delay = 1000 +" let g:blamer_prefix = ' > ' + + +" splitjoin +let g:splitjoin_align = 1 +let g:splitjoin_python_brackets_on_separate_lines = 1 + +" asyncrun +let g:asyncrun_open = 6 +let g:asyncrun_rootmarks = ['.nvimrc', '.git'] +let g:asynctasks_term_pos = 'tab' + +" vimwiki +let g:vimwiki_list = [{'path': '~/MEGAsync/Sync/vimwiki/', 'path_html': '~/MEGAsync/Sync/vimwiki-html/', 'ext': '.wiki'}] +let g:vimwiki_global_ext = 0 + +" }}} + +" Filetype-specific settings {{{ + +" web-dev {{{ +augroup filetype_pug + autocmd! + autocmd Filetype pug setlocal foldmethod=indent + autocmd Filetype pug setlocal foldlevel=20 +augroup END + +augroup filetype_vue + autocmd! + autocmd Filetype vue command! -register JsDoc call jsdoc#insert() + autocmd Filetype vue setlocal conceallevel=2 +augroup END + +autocmd Filetype javascript setlocal conceallevel=2 + +autocmd Filetype typescript execute ':CloseTagDisableBuffer' + +let g:mta_filetypes = { 'html' : 1, 'xhtml' : 1, 'xml' : 1, 'jinja' : 1, 'xsd': 1, 'vue': 1 } +let g:closetag_filenames = '*.html,*.xhtml,*.vue,*.svelte' +let g:closetag_filetypes = 'html,xhtml,vue,xml,xsd,svelte' +let g:colorizer_auto_filetype='css,html,python,javascript,vue' + +let g:jsdoc_allow_input_prompt = 1 +let g:jsdoc_enable_es6 = 1 +let g:jsdoc_input_description = 1 + +let g:vue_pre_processors = [] +let g:vim_svelte_plugin_use_sass = 1 + +let g:javascript_plugin_jsdoc = 1 + +" let g:javascript_conceal_function = "ƒ" +" let g:javascript_conceal_null = "ø" +" let g:javascript_conceal_this = "#" +" let g:javascript_conceal_return = "⮜" +" let g:javascript_conceal_undefined = "¿" +" let g:javascript_conceal_NaN = "ℕ" +" let g:javascript_conceal_prototype = "¶" +" let g:javascript_conceal_static = "•" +" let g:javascript_conceal_super = "Ω" +" let g:javascript_conceal_arrow_function = "⮞" +" let g:javascript_conceal_noarg_arrow_function = "🞅" +" let g:javascript_conceal_underscore_arrow_function = "🞅" + +" }}} + +" LaTeX {{{ +let g:tex_flavor='latex' +let g:vimtex_fold_enabled = 1 +let g:vimtex_view_method='zathura' +let g:vimtex_quickfix_mode=0 +let g:tex_conceal='abdmgs' +let g:ale_tex_chktex_options='-I --nowarn 32' +" let g:syntastic_tex_lacheck_quiet_messages = { 'regex': ['\Vpossible unwanted space at', '\VUse ` to begin'] } + +augroup filetype_tex + autocmd! + autocmd Filetype tex setlocal foldlevel=0 + autocmd Filetype tex + \ let b:AutoPairs = {"(": ")", '[': ']', '{': '}', '$': '$', '\left(': '\right)', + \ '\left[': 'right]', "''": '``', "``": "''", '"': '"', 'sympy': 'sympy', '<<': '>>'} + autocmd Filetype tex setlocal conceallevel=2 +augroup END + +" }}} + +" Python {{{ +autocmd Filetype python + \ setlocal foldmethod=indent + +" let g:python_host_prog='/usr/bin/python' +" let g:python3_host_prog='/usr/bin/python3' +let g:pymode_python = 'python3' +let g:pymode_lint = 0 +let g:pymode_rope = 0 +let g:pymode_rope_completion = 0 +let g:pymode_rope_autoimport = 0 +let g:pymode_doc = 1 +" }}} + +" GO {{{ +let g:go_fmt_autosave = 0 +let g:go_imports_autosave = 0 +let g:go_mod_fmt_autosave = 0 + +augroup filetype_go + autocmd! + autocmd FileType go set noexpandtab +augroup END +" }}} + +" REPL {{{ +augroup zepl + autocmd! + autocmd FileType python let b:repl_config = { 'cmd': 'ipython --colors=Linux' } + autocmd FileType javascript let b:repl_config = { 'cmd': 'node' } +augroup END +" }}} + +" Misc file commands {{{ +augroup filetype_vim + autocmd! + autocmd Filetype vim setlocal foldmethod=marker + autocmd Filetype vim setlocal foldlevel=0 +augroup END + +augroup filetype_sparql let g:rainbow_active = 0 +augroup END + +au BufNewFile,BufRead *.frag,*.vert,*.fp,*.vp,*.glsl setf glsl +au BufNewFile,BufRead *.pl setf prolog +au BufNewFile,BufRead *.sparql setf sparql + +au TermEnter * IndentGuidesDisable +au TermLeave * IndentGuidesEnable + +let g:vim_markdown_conceal = 2 +let g:instant_markdown_autostart = 0 +let g:instant_markdown_mathjax = 1 +let g:instant_markdown_open_to_the_world = 1 +let g:instant_markdown_allow_external_content = 1 + +let g:markdown_composer_autostart = 0 +" }}} + +" }}} + +" Syntax check & autocomplete {{{ +" coc {{{ +inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() +inoremap pumvisible() ? "\" : "\" +inoremap pumvisible() ? "\" : "\u\" + +function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction + +" Use to trigger completion. +inoremap coc#refresh() +function! s:cocActionsOpenFromSelected(type) abort + execute 'CocCommand actions.open ' . a:type +endfunction +xmap p :execute 'CocCommand actions.open ' . visualmode() +nmap p :set operatorfunc=cocActionsOpenFromSelectedg@ +nnoremap K :call show_documentation() + +function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('') + else + call CocAction('doHover') + endif +endfunction + +autocmd CursorHold * silent call CocActionAsync('highlight') + +let g:coc_global_extensions = + \ [ + \ 'coc-actions', + \ 'coc-calc', + \ 'coc-css', + \ 'coc-json', + \ 'coc-marketplace', + \ 'coc-python', + \ 'coc-tasks', + \ 'coc-tsserver', + \ 'coc-ultisnips', + \ 'coc-vetur', + \ 'coc-vimtex' + \ ] + +" }}} + + +" Syntastic {{{ +" set statusline+=%#warningmsg# +" set statusline+=%{SyntasticStatuslineFlag()} +" set statusline+=%* +" +" let g:syntastic_ignore_files = ['\.py$', '\.tex$'] +" let g:syntastic_always_populate_loc_list = 1 +" let g:syntastic_auto_loc_list = 1 +" let g:syntastic_check_on_open = 1 +" let g:syntastic_check_on_wq = 0 +" }}} + +" ALE {{{ +let g:ale_open_list = 'on_save' +let g:ale_list_window_size = 7 +let g:ale_close_preview_on_insert = 1 +let g:ale_lint_on_text_changed = 'never' +let g:ale_lint_on_enter = 0 +let g:ale_lint_on_insert_leave = 0 +let g:ale_completion_enabled = 0 +let g:ale_linter_aliases = {'svelte': ['css', 'javascript']} +let g:ale_linters = {'python': ['prospector'], 'tex': ['chktex'], 'cpp': ['clang'], 'vue': ['eslint'], 'typescript': ['tsserver', 'tslint'], 'svelte': ['eslint']} +let g:ale_fixers = { + \ 'python': ['yapf', 'isort', 'remove_trailing_lines', 'trim_whitespace'], + \ 'tex': ['latexindent', 'textlint', 'remove_trailing_lines', 'trim_whitespace'], + \ 'js': ['prettier', 'eslint'], + \ 'javascript': ['prettier', 'eslint'], + \ 'typescript': ['prettier', 'tslint'], + \ 'jsx': ['prettier', 'eslint'], + \ 'vue': ['prettier', 'eslint'], + \ 'cpp': ['clang-format', 'remove_trailing_lines', 'trim_whitespace'], + \ 'json': ['prettier'], + \ 'svelte': ['eslint'], + \ 'go': ['gofmt'] + \} +let g:airline#extensions#ale#enabled = 1 +" }}} + +" Deoplete {{{ +" call deoplete#custom#var('omni', 'input_patterns', { +" \ 'tex': g:vimtex#re#deoplete +" \}) +" +" let g:deoplete#enable_at_startup = 1 +" call deoplete#custom#source('ale', 'rank', 999) +" +" inoremap +" \ pumvisible() ? "\" : +" \ check_back_space() ? "\" : +" \ deoplete#mappings#manual_complete() +" function! s:check_back_space() abort +" let col = col('.') - 1 +" return !col || getline('.')[col - 1] =~ '\s' +" endfunction +" +" let g:deoplete#sources#clang#libclang_path = '/usr/lib/llvm-6.0/lib/libclang.so.1' +" let g:deoplete#sources#clang#clang_header = '/usr/lib/llvm-6.0/lib/clang/6.0.0/include' +" }}} + +" Auto-pairs +let g:AutoPairsFlyMode = 0 +let g:AutoPairsShortcutBackInsert = '' + +" }}} + +" My scripts {{{ +" Subterminal {{{ + +function! GetSubTerminalName() + let current_tabpage = tabpagenr() + return current_tabpage . '_terminal' +endfunction + +function! SubTerminal() + let subterminal_name = GetSubTerminalName() + let terminal_num = bufnr(subterminal_name) + if terminal_num == -1 + execute ':new ' . subterminal_name + execute ':resize 10' + if isdirectory("venv") + execute ':terminal' + else + execute ':terminal' + endif + normal i + else + execute ':bwipeout! ' . terminal_num + execute ':bwipeout! ' . (terminal_num + 1) + endif +endfunction + +function! WipeSubTerminalBuffer() + let subterminal_name = GetSubTerminalName() + let terminal_num = bufnr(subterminal_name) + if terminal_num != -1 + execute ':bwipeout! ' . terminal_num + endif +endfunction + +autocmd BufWipeout term://* call WipeSubTerminalBuffer() + +nnoremap ` :call SubTerminal() + +" }}} + +" Terminal in tab {{{ +function! OpenTerminalInTab() + execute ':tabnew' + execute ':terminal' + normal i +endfunction + +nnoremap ~ :call OpenTerminalInTab() +" }}} + +" Diff with saved {{{ +function! s:DiffWithSaved() + let filetype=&ft + diffthis + vnew | r # | normal! 1Gdd + diffthis + exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype +endfunction + +com! DiffSaved call s:DiffWithSaved() +" }}} + +" Git diff stats {{{ +function! Gstats() + execute '!git diff --stat' +endfunction + +command! Gstats call Gstats() + +" }}} + +" Uptime {{{ +let s:start_time = localtime() + +function! UptimeSeconds() + let l:current_time = localtime() + let l:uptime = l:current_time - s:start_time + return l:uptime +endfunction + +function! s:AddLeadingZero(i) + if a:i == 0 + return "00" + elseif a:i < 10 + return "0" . a:i + else + return "" . a:i + endif +endfu + +function! Uptime(...) + let l:show_seconds = get(a:, 1, 0) + let l:uptime = UptimeSeconds() + let l:m_s = (l:uptime) % 60 + let l:m_m = (l:uptime/ 60) % 60 + let l:m_h = (l:uptime/ (60 * 60)) % 24 + let l:m_d = (l:uptime/ (60 * 60 * 24)) + + let l:msg = "" + if (l:m_d > 0) + let l:msg = l:msg . l:m_d . "d " + endif + let l:msg = l:msg . s:AddLeadingZero(l:m_h) . ":" . + \ s:AddLeadingZero(l:m_m) + if l:show_seconds == 1 + let l:msg = l:msg . ":" . s:AddLeadingZero(l:m_s) + endif + return l:msg +endfunction + +command! Uptime echo Uptime(1) + +" }}} + +" {{{ Delete Hidden buffers +function! DeleteHiddenBuffers() + let tpbl=[] + let closed = 0 + let terminals = 0 + call map(range(1, tabpagenr('$')), 'extend(tpbl, tabpagebuflist(v:val))') + for buf in filter(range(1, bufnr('$')), 'bufexists(v:val) && index(tpbl, v:val)==-1') + if getbufvar(buf, '&mod') == 0 + if matchstr(bufname(buf), '^term:\/\/.*$') == '' + silent execute 'bwipeout' buf + let closed += 1 + else + silent execute 'bwipeout!' buf + let closed += 1 + let terminals += 1 + endif + endif + endfor + echo "Closed " .closed. " hidden buffers (" . terminals . " terminals)" +endfunction + +command! DeleteHiddenBuffers call DeleteHiddenBuffers() + +" }}} + +" {{{ Fugitive conflict resolution + +function! GitVMergeSplit() + execute 'Gdiffsplit!' + wincmd k + wincmd H + let s:leftMergeBuffer = bufnr('%') + wincmd l + wincmd j + wincmd L + let s:rightMergeBuffer = bufnr('%') + wincmd h +endfunction + +function! GitMergeGetLeft() + execute ":diffget" . s:leftMergeBuffer +endfunction + +function! GitMergeGetRight() + execute ":diffget" . s:rightMergeBuffer +endfunction + +command! Gdiffmerge call GitVMergeSplit() +nnoremap gdh :call GitMergeGetLeft() +nnoremap gdl :call GitMergeGetRight() +nnoremap gd :call GitMergeGetLeft() +nnoremap gd :call GitMergeGetRight() + +" }}} + +" {{{ Folding + +function! SetFoldLevel() range + execute ":set foldlevel=" . v:count + echo("set foldlevel=" . v:count) +endfunction + +function! OnSpace() + if foldlevel('.') + if foldclosed('.') != -1 + return 'zO' + else + return 'za' + endif + else + return "\" + endif +endfunction + +nnoremap ff :call SetFoldLevel() +nnoremap @=(OnSpace()) + +" }}} + +" {{{ Better Home +function! Home() + let l:before = getpos('.') + normal ^ + let l:after = getpos('.') + if l:before[2] == l:after[2] + call cursor(l:after[0], 1) + endif +endfunction + +nnoremap :call Home() + +" }}} + +" {{{ Deoplete and multiple cursors +" function! Multiple_cursors_before() +" if deoplete#is_enabled() +" call deoplete#disable() +" let g:deoplete_is_enable_before_multi_cursors = 1 +" else +" let g:deoplete_is_enable_before_multi_cursors = 0 +" endif +" endfunc +" function! Multiple_cursors_after() +" if g:deoplete_is_enable_before_multi_cursors +" call deoplete#enable() +" endif +" endfunction +" }}} + +" {{{ Switch to project root +let g:markers = split('.git') " TODO nvimrc +function! CdToRepoRoot() abort + for marker in g:markers + let root = finddir(marker, expand('%:p:h') . ';') + if !empty(root) + let root = fnamemodify(root, ':h') + execute 'cd ' . root + echo 'cd ' . root . ' (found ' . marker . ')' + return + endif + endfor + echoerr 'No repo root found.' +endfunction + +nnoremap cr :call CdToRepoRoot() +" }}} + +" Put current time +command! Timestamp :put =strftime('%d-%m-%y %H:%M:%S') +" }}} + +" UI settings {{{ +set background=dark +" let g:solarized_visibility='high' +" tmux cursor + if exists('+termguicolors') + set termguicolors + endif +"set guifont=DroidSansMono\ Nerd\ Font\ 11 +augroup qs_colors + autocmd! + autocmd ColorScheme * highlight QuickScopePrimary guifg='#ff0000' gui=underline ctermfg=155 cterm=underline + autocmd ColorScheme * highlight QuickScopeSecondary guifg='#ffff00' gui=underline ctermfg=81 cterm=underline +augroup END + +set laststatus=2 +colorscheme palenight + +highlight! TermCursorNC guibg=red +"highlight Conceal guibg=Normal guifg=Normal +hi Normal guibg=NONE ctermbg=NONE +highlight! link Conceal Normal +highlight! illuminatedWord cterm=underline gui=underline + +" Airline +let g:airline_theme='palenight' +let g:airline_powerline_fonts = 1 +" let g:airline_extensions = [] +let g:airline#extensions#tabline#enabled = 1 +let g:airline#extensions#tabline#buffer_idx_mode = 1 +let g:airline#extensions#tabline#formatter = 'unique_tail' +let g:airline_section_b = '%{Uptime()}' +let g:airline_highlighting_cache = 1 + +" vim-clap +"let g:clap_search_box_border_symbols = {'curve': ["f", "g"], 'nil': ['', ''] } +let g:clap_search_box_border_style = 'nul' +let g:clap_layout = { 'relative': 'editor' } + +" Gundo +let g:gundo_preview_height = 15 + +" tmux line +let g:tmuxline_preset = { + \'a' : '#S', + \'b' : '#W', + \'win' : '#I #W #[align=left]', + \'cwin' : '#I #W', + \'x' : '%-H:%M', + \'y' : '%a, %b %d', + \'z' : '#H'} + +" Indent guides +let g:indent_guides_enable_on_vim_startup = 1 +let g:indent_guides_exclude_filetypes = ['help', 'nerdtree', 'tagbar', 'startify', 'vim-plug', 'clap_input', 'codi'] +let g:indent_guides_guide_size = 1 + +" let g:indentLine_fileTypeExclude = ['help', 'nerdtree', 'tagbar', 'startify', 'vim-plug', 'clap_input', 'codi'] +" let g:indentLine_char = '┊' + +" Autoresize +let g:lens#disabled = 1 +let g:lens#disabled_filetypes = ['nerdtree', 'tagbar', 'clap_input', 'startify', 'diff', 'gundo'] +let g:lens#width_resize_min = 10 +let g:lens#height_resize_min = 10 +let g:lens#width_resize_max = 90 + +" Highligh whitespace +let g:extra_whitespace_ignored_filetypes = ['help', 'nerdtree', 'tagbar', 'startify', 'vim-plug', 'clap_input', 'GV', 'taskedit'] + +" Brackets +let g:rainbow_active = 1 +let g:rainbow_conf = { + \ 'guifgs': ['red', 'yellow', 'lightgreen', 'lightblue'], + \ 'separately': { 'nerdtree': 0, 'vimwiki': 0, 'sparql': 0 } + \ } + +" Tagbar +let g:tagbar_sort = 0 +let g:tagbar_show_line_numbers = 1 +let g:tagbar_width = 60 +let g:tagbar_autofocus = 1 + +let g:vista_sidebar_width = 60 + +let g:startify_custom_header = [ + \ ' ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――', + \ ' _____ __ __ ____ ____ ', + \ ' / ___/____ ______/ /_/ |/ (_)___ __ _______/ __ \____ ___ ', + \ ' \__ \/ __ `/ ___/ __/ /|_/ / / __ \/ / / / ___/ / / / __ \/ _ \ ', + \ ' ___/ / /_/ / / / /_/ / / / / / / / /_/ (__ ) /_/ / / / / __/ ', + \ ' /____/\__, /_/ \__/_/ /_/_/_/ /_/\__,_/____/\____/_/ /_/\___/ ', + \ ' /_/ ', + \ ' ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――', + \ ' Conquering the darkest places ', + \ ] + +" }}} diff --git a/.config/nvim/my-snippets/UltiSnips/beamer.snippets b/.config/nvim/my-snippets/UltiSnips/beamer.snippets new file mode 100644 index 0000000..ed7d48f --- /dev/null +++ b/.config/nvim/my-snippets/UltiSnips/beamer.snippets @@ -0,0 +1 @@ +priority -50 diff --git a/.config/nvim/my-snippets/UltiSnips/eltech.snippets b/.config/nvim/my-snippets/UltiSnips/eltech.snippets new file mode 100644 index 0000000..e0e775c --- /dev/null +++ b/.config/nvim/my-snippets/UltiSnips/eltech.snippets @@ -0,0 +1,119 @@ +priority -50 + +global !p + +import glob + +PRIORITIES = { + 'generalPreamble': 0, + 'Locale': 1, + 'BibTex': 2, +} + +def get_styles(folder): + styles = [file[:-4] for file in glob.glob(f'{folder}/*.sty')] + priorities = [1] * len(styles) + for i, filename in enumerate(styles): + for name, priority in PRIORITIES.items(): + if name in filename: + priorities[i] = priority + if styles: + priorities, styles = zip(*sorted(zip(priorities, styles))) + return styles + +def try_get_styles(folders): + for folder in folders: + styles = get_styles(folder) + if len(styles) > 0: + return styles + +endglobal + +snippet defdoc "Default document template" +\documentclass[a4paper, 14pt]{extarticle} +`!p +res = "" +for style in try_get_styles(["./styles", '.', '..', '../styles']): + res += "\\usepackage{" + style + "}\n" +snip.rv = res +` + +\begin{document} +$0 +\end{document} +endsnippet + +snippet defrep "Default small report template" +\documentclass[a4paper, 14pt]{extarticle} +`!p +res = "" +for style in get_styles("./styles"): + res += "\\usepackage{" + style + "}\n" +snip.rv = res +` + +\title{$1} +\author{${2:Корытов Павел, 6304 \\\\ СПбГЭТУ \enquote{ЛЭТИ}}} +\date{${3:\today}} +\begin{document} +\maketitle +$0 +\end{document} +endsnippet + +snippet etutitle "ETU default report title" +\begin{titlepage} + \centering + {\bfseries + \uppercase{ + Минобрнауки России \\\\ + Санкт-Петербургский государственный \\\\ + Электротехнический университет \\\\ + \enquote{ЛЭТИ} им. В.И.Ульянова (Ленина)\\\\ + } + Кафедра ${1:МО ЭВМ} + + \vspace{\fill} + \uppercase{${2:Отчёт}} \\\\ + по ${3:лабораторной работе} ${4:№1} \\\\ + по дисциплине \enquote{$5} \\\\ + Тема: $6 + } + + \vspace{\fill} + \begin{tabularx}{0.8\textwidth}{l X c r} + Студент гр. 6304 & & \underline{\hspace{3cm}} & Корытов П.В.\\\\ + Преподаватель & & \underline{\hspace{3cm}} & $7 + \end{tabularx} + + \vspace{1cm} + Санкт-Петербург \\\\ + \the\year{} +\end{titlepage} + +$0 +endsnippet + +snippet fhdr "My default fancy header" +\usepackage{fancyhdr} +\pagestyle{fancy} + +\newcommand{\theversion}{${1:1.0}} + +\fancyhead[L]{ + \begin{tabular}{ll} + \textit{${2:Project}} \\\\ + ${3:Документ} + \end{tabular} +} + +\fancyhead[R]{ + \begin{tabular}{ll} + Версия: & \theversion{} \\\\ + Дата: & \today{} + \end{tabular} +} + +endsnippet + +# vim:ft=snippets: diff --git a/.config/nvim/my-snippets/UltiSnips/python.snippets b/.config/nvim/my-snippets/UltiSnips/python.snippets new file mode 100644 index 0000000..3fafd8a --- /dev/null +++ b/.config/nvim/my-snippets/UltiSnips/python.snippets @@ -0,0 +1,12 @@ +snippet qinit "def __init__(self, parent=None)" +def __init__(self, parent=None): + super().__init__(parent) + $0 + +endsnippet + + +snippet forl "[action for item in iterable]" +[$1 for $2 in $3] +$0 +endsnippet diff --git a/.config/nvim/my-snippets/UltiSnips/tex.snippets b/.config/nvim/my-snippets/UltiSnips/tex.snippets new file mode 100644 index 0000000..bca40a3 --- /dev/null +++ b/.config/nvim/my-snippets/UltiSnips/tex.snippets @@ -0,0 +1,194 @@ +priority 50 + +extends eltech + +global !p +import os + +def get_last_image(): + max_time = 0 + last_image = '' + for r, d, files in os.walk(os.path.join(os.getcwd(), 'img')): + for f in files: + time = os.path.getmtime(os.path.join(r, f)) + if time > max_time: + max_time = time + last_image = os.path.relpath(os.path.join(r, f)) + return last_image + +endglobal + +snippet 'sympy(.*)sympy' "evaluate sympy" wr +`!p +from sympy import * +x, y, z, t, i = symbols('x y z t i') +k, m, n = symbols('k m n', integer=True) +f, g, h = symbols('f g h', cls=Function) +init_printing() +snip.rv = eval('latex(' + match.group(1).replace('\\', '') \ + .replace('^', '**') \ + .replace('{', '(') \ + .replace('}', ')') + ')') +` +endsnippet + +snippet lfigp "last figure path" +`!p +snip.rv = get_last_image() +` +endsnippet + +snippet lfig +\begin{figure}[h] + \centering + \includegraphics[width=$1\textwidth]{`!p snip.rv = get_last_image()`} + \caption{$2}% + \label{img:$3} +\end{figure} + +$0 +endsnippet + +snippet ' -' "---" wr + --- $0 +endsnippet + +snippet vec "vector sign" +\vec{$1} $0 +endsnippet + +snippet suml "\sum\limits" +\sum\limits^{${1:n}}_{${2:i=1}} $0 +endsnippet + +snippet part "\partial" +\partial $0 +endsnippet + +snippet vmat "\begin{pmatrix} \end{pmatrix}" +\begin{pmatrix} $1 \end{pmatrix}$0 +endsnippet + +snippet dfn "\dfn{}" +\dfn{$1} $0 +endsnippet + +snippet fig "Default figure here" +\begin{figure}[h] + \centering + \includegraphics[width=$1\textwidth]{$2} + \caption{$3}% + \label{img:$4} +\end{figure} + +$0 +endsnippet + +snippet subfig "Figure with subfigures" +\begin{figure}[h] + \centering + \begin{subfigure}[b]{$1\textwidth} + \includegraphics[width=\textwidth]{$2} + \caption{$3} + \end{subfigure}% + \hspace{2cm} + \begin{subfigure}[b]{$4\textwidth} + \includegraphics[width=\textwidth]{$5} + \caption{$6} + \end{subfigure} +\end{figure} +$0 +endsnippet + +snippet << "Triangle brackets" +\left\langle $1 \right\rangle $0 +endsnippet + +snippet lorem "\lipsum[1] %TODO" +\lipsum[1] %TODO +$0 +endsnippet + +snippet /{ "/{ /}" +/{ $1 /} $0 +endsnippet + +snippet \[ "\[ \]" +\[ $1 \] $0 +endsnippet + +snippet <=> "\Reftrightarrow" +\Leftrightarrow $0 +endsnippet + +snippet => "\Rightarrow" +\Rightarrow $0 +endsnippet + +snippet -> "\rightarrow" +\rightarrow $0 +endsnippet + +snippet <= "\Leftarrow" +\Leftarrow $0 +endsnippet + +snippet '(\w+)_' "_\{text}" r +`!p snip.rv=match.group(1)`_\text{$1} $0 +endsnippet + +snippet '".*"' "`` ''" r +\`\``!p snip.rv=match.group(0)[1:-1]`'' $0 +endsnippet + +snippet '<<.*>>' "\enquote{text}" r +\enquote{`!p snip.rv=match.group(0)[2:-2]`} $0 +endsnippet + +snippet <- "\leftarrow" +\leftarrow $0 +endsnippet + +snippet ... "/ldots{}" +\ldots{} $0 +endsnippet + +snippet .. "/ldots" +\ldots $0 +endsnippet + +snippet in "\in" +\in $0 +endsnippet + +snippet a "alpha" +\alpha $0 +endsnippet + +snippet A "Alpha" +\Alpha $0 +endsnippet + +snippet b "beta" +\beta $0 +endsnippet + +snippet d "delta" +\delta $0 +endsnippet + +snippet e "varepsilon" +\varepsilon $0 +endsnippet + +snippet l "lambda" +\lambda $0 +endsnippet + +snippet w "omega" +\omega $0 +endsnippet + +snippet S "Sigma" +\Sigma $0 +endsnippet diff --git a/.config/nvim/my-snippets/UltiSnips/vue.snippets b/.config/nvim/my-snippets/UltiSnips/vue.snippets new file mode 100644 index 0000000..959500e --- /dev/null +++ b/.config/nvim/my-snippets/UltiSnips/vue.snippets @@ -0,0 +1,15 @@ +snippet comp "vue component" + + + + + +endsnippet diff --git a/.config/picom.conf b/.config/picom.conf new file mode 100644 index 0000000..9da288a --- /dev/null +++ b/.config/picom.conf @@ -0,0 +1,430 @@ +################################# +# Shadows # +################################# + + +# Enabled client-side shadows on windows. Note desktop windows +# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, +# unless explicitly requested using the wintypes option. +# +# shadow = false +shadow = true; + +# The blur radius for shadows, in pixels. (defaults to 12) +# shadow-radius = 12 +shadow-radius = 2; + +# The opacity of shadows. (0.0 - 1.0, defaults to 0.75) +# shadow-opacity = .75 + +# The left offset for shadows, in pixels. (defaults to -15) +# shadow-offset-x = -15 +shadow-offset-x = -2; + +# The top offset for shadows, in pixels. (defaults to -15) +# shadow-offset-y = -15 +shadow-offset-y = -2; + +# Avoid drawing shadows on dock/panel windows. This option is deprecated, +# you should use the *wintypes* option in your config file instead. +# +# no-dock-shadow = false + +# Don't draw shadows on drag-and-drop windows. This option is deprecated, +# you should use the *wintypes* option in your config file instead. +# +# no-dnd-shadow = false + +# Red color value of shadow (0.0 - 1.0, defaults to 0). +# shadow-red = 0 + +# Green color value of shadow (0.0 - 1.0, defaults to 0). +# shadow-green = 0 + +# Blue color value of shadow (0.0 - 1.0, defaults to 0). +# shadow-blue = 0 + +# Do not paint shadows on shaped windows. Note shaped windows +# here means windows setting its shape through X Shape extension. +# Those using ARGB background is beyond our control. +# Deprecated, use +# shadow-exclude = 'bounding_shaped' +# or +# shadow-exclude = 'bounding_shaped && !rounded_corners' +# instead. +# +# shadow-ignore-shaped = '' + +# Specify a list of conditions of windows that should have no shadow. +# +# examples: +# shadow-exclude = "n:e:Notification"; +# +# shadow-exclude = [] +shadow-exclude = [ + "name = 'Notification'", + "class_g = 'Conky'", + "name ?= 'cpt_frame_window'", + "class_g ?= 'Notify-osd'", + "class_g = 'Cairo-clock'", + "_GTK_FRAME_EXTENTS@:c" +]; + +# Specify a X geometry that describes the region in which shadow should not +# be painted in, such as a dock window region. Use +# shadow-exclude-reg = "x10+0+0" +# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on. +# +# shadow-exclude-reg = "" + +# Crop shadow of a window fully on a particular Xinerama screen to the screen. +# xinerama-shadow-crop = false + + +################################# +# Fading # +################################# + + +# Fade windows in/out when opening/closing and when opacity changes, +# unless no-fading-openclose is used. +# fading = false +fading = true + +# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) +# fade-in-step = 0.028 +fade-in-step = 0.03; + +# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) +# fade-out-step = 0.03 +fade-out-step = 0.03; + +# The time between steps in fade step, in milliseconds. (> 0, defaults to 10) +# fade-delta = 10 + +# Specify a list of conditions of windows that should not be faded. +# fade-exclude = [] + +# Do not fade on window open/close. +# no-fading-openclose = false + +# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc. +# no-fading-destroyed-argb = false + + +################################# +# Transparency / Opacity # +################################# + + +# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0) +# inactive-opacity = 1 +inactive-opacity = 1; + +# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) +# frame-opacity = 1.0 +frame-opacity = 1.0; + +# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0) +# menu-opacity = 1.0 + +# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows. +# inactive-opacity-override = true +inactive-opacity-override = false; + +# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0) +# active-opacity = 1.0 + +# Dim inactive windows. (0.0 - 1.0, defaults to 0.0) +# inactive-dim = 0.0 + +# Specify a list of conditions of windows that should always be considered focused. +# focus-exclude = [] +focus-exclude = [ "class_g = 'Cairo-clock'" ]; + +# Use fixed inactive dim value, instead of adjusting according to window opacity. +# inactive-dim-fixed = 1.0 + +# Specify a list of opacity rules, in the format `PERCENT:PATTERN`, +# like `50:name *= "Firefox"`. picom-trans is recommended over this. +# Note we don't make any guarantee about possible conflicts with other +# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows. +# example: +# opacity-rule = [ "80:class_g = 'URxvt'" ]; +# + +opacity-rule = [ + "0:_NET_WM_STATE@[0]:32a = '_NET_WM_STATE_HIDDEN'", + "0:_NET_WM_STATE@[1]:32a = '_NET_WM_STATE_HIDDEN'", + "0:_NET_WM_STATE@[2]:32a = '_NET_WM_STATE_HIDDEN'", + "0:_NET_WM_STATE@[3]:32a = '_NET_WM_STATE_HIDDEN'", + "0:_NET_WM_STATE@[4]:32a = '_NET_WM_STATE_HIDDEN'" +]; + +################################# +# Background-Blurring # +################################# + + +# Parameters for background blurring, see the *BLUR* section for more information. +# blur-method = +# blur-size = 12 +# +# blur-deviation = false + +# Blur background of semi-transparent / ARGB windows. +# Bad in performance, with driver-dependent behavior. +# The name of the switch may change without prior notifications. +# +# blur-background = false + +# Blur background of windows when the window frame is not opaque. +# Implies: +# blur-background +# Bad in performance, with driver-dependent behavior. The name may change. +# +# blur-background-frame = false + + +# Use fixed blur strength rather than adjusting according to window opacity. +# blur-background-fixed = false + + +# Specify the blur convolution kernel, with the following format: +# example: +# 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-kern = '' +blur-kern = "3x3box"; + + +# Exclude conditions for background blur. +# blur-background-exclude = [] +blur-background-exclude = [ + "window_type = 'dock'", + "window_type = 'desktop'", + "_GTK_FRAME_EXTENTS@:c" +]; + +################################# +# General Settings # +################################# + +# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers. +# daemon = false + +# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`. +# `xrender` is the default one. +# +# backend = 'glx' +backend = "xrender"; + +# Enable/disable VSync. +# vsync = false +vsync = true + +# Enable remote control via D-Bus. See the *D-BUS API* section below for more details. +# dbus = false + +# Try to detect WM windows (a non-override-redirect window with no +# child that has 'WM_STATE') and mark them as active. +# +# mark-wmwin-focused = false +mark-wmwin-focused = true; + +# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused. +# mark-ovredir-focused = false +mark-ovredir-focused = true; + +# Try to detect windows with rounded corners and don't consider them +# shaped windows. The accuracy is not very high, unfortunately. +# +# detect-rounded-corners = false +detect-rounded-corners = true; + +# Detect '_NET_WM_OPACITY' on client windows, useful for window managers +# not passing '_NET_WM_OPACITY' of client windows to frame windows. +# +# detect-client-opacity = false +detect-client-opacity = true; + +# Specify refresh rate of the screen. If not specified or 0, picom will +# try detecting this with X RandR extension. +# +# refresh-rate = 60 +refresh-rate = 0 + +# Limit picom to repaint at most once every 1 / 'refresh_rate' second to +# boost performance. This should not be used with +# vsync drm/opengl/opengl-oml +# as they essentially does sw-opti's job already, +# unless you wish to specify a lower refresh rate than the actual value. +# +# sw-opti = + +# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, +# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy, +# provided that the WM supports it. +# +# use-ewmh-active-win = false + +# Unredirect all windows if a full-screen opaque window is detected, +# to maximize performance for full-screen windows. Known to cause flickering +# when redirecting/unredirecting windows. +# +# unredir-if-possible = false + +# Delay before unredirecting the window, in milliseconds. Defaults to 0. +# unredir-if-possible-delay = 0 + +# Conditions of windows that shouldn't be considered full-screen for unredirecting screen. +# unredir-if-possible-exclude = [] + +# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows +# in the same group focused at the same time. +# +# detect-transient = false +detect-transient = true + +# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same +# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if +# detect-transient is enabled, too. +# +# detect-client-leader = false +detect-client-leader = true + +# Resize damaged region by a specific number of pixels. +# A positive value enlarges it while a negative one shrinks it. +# If the value is positive, those additional pixels will not be actually painted +# to screen, only used in blur calculation, and such. (Due to technical limitations, +# with use-damage, those pixels will still be incorrectly painted to screen.) +# Primarily used to fix the line corruption issues of blur, +# in which case you should use the blur radius value here +# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`, +# with a 5x5 one you use `--resize-damage 2`, and so on). +# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly. +# +# resize-damage = 1 + +# Specify a list of conditions of windows that should be painted with inverted color. +# Resource-hogging, and is not well tested. +# +# invert-color-include = [] + +# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer. +# Might cause incorrect opacity when rendering transparent content (but never +# practically happened) and may not work with blur-background. +# My tests show a 15% performance boost. Recommended. +# +# glx-no-stencil = false + +# GLX backend: Avoid rebinding pixmap on window damage. +# Probably could improve performance on rapid window content changes, +# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.). +# Recommended if it works. +# +# glx-no-rebind-pixmap = false + +# Disable the use of damage information. +# This cause the whole screen to be redrawn everytime, instead of the part of the screen +# has actually changed. Potentially degrades the performance, but might fix some artifacts. +# The opposing option is use-damage +# +# no-use-damage = false +use-damage = true + +# Use X Sync fence to sync clients' draw calls, to make sure all draw +# calls are finished before picom starts drawing. Needed on nvidia-drivers +# with GLX backend for some users. +# +# xrender-sync-fence = false + +# GLX backend: Use specified GLSL fragment shader for rendering window contents. +# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl` +# in the source tree for examples. +# +# glx-fshader-win = '' + +# Force all windows to be painted with blending. Useful if you +# have a glx-fshader-win that could turn opaque pixels transparent. +# +# force-win-blend = false + +# Do not use EWMH to detect fullscreen windows. +# Reverts to checking if a window is fullscreen based only on its size and coordinates. +# +# no-ewmh-fullscreen = false + +# Dimming bright windows so their brightness doesn't exceed this set value. +# Brightness of a window is estimated by averaging all pixels in the window, +# so this could comes with a performance hit. +# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0) +# +# max-brightness = 1.0 + +# Make transparent windows clip other windows like non-transparent windows do, +# instead of blending on top of them. +# +# transparent-clipping = false + +# Set the log level. Possible values are: +# "trace", "debug", "info", "warn", "error" +# in increasing level of importance. Case doesn't matter. +# If using the "TRACE" log level, it's better to log into a file +# using *--log-file*, since it can generate a huge stream of logs. +# +# log-level = "debug" +log-level = "warn"; + +# Set the log file. +# If *--log-file* is never specified, logs will be written to stderr. +# Otherwise, logs will to written to the given file, though some of the early +# logs might still be written to the stderr. +# When setting this option from the config file, it is recommended to use an absolute path. +# +# log-file = '/path/to/your/log/file' + +# Show all X errors (for debugging) +# show-all-xerrors = false + +# Write process ID to a file. +# write-pid-path = '/path/to/your/log/file' + +# Window type settings +# +# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard: +# "unknown", "desktop", "dock", "toolbar", "menu", "utility", +# "splash", "dialog", "normal", "dropdown_menu", "popup_menu", +# "tooltip", "notification", "combo", and "dnd". +# +# Following per window-type options are available: :: +# +# fade, shadow::: +# Controls window-type-specific shadow and fade settings. +# +# opacity::: +# Controls default opacity of the window type. +# +# focus::: +# Controls whether the window of this type is to be always considered focused. +# (By default, all window types except "normal" and "dialog" has this on.) +# +# full-shadow::: +# Controls whether shadow is drawn under the parts of the window that you +# normally won't be able to see. Useful when the window has parts of it +# transparent, and you want shadows in those areas. +# +# redir-ignore::: +# Controls whether this type of windows should cause screen to become +# redirected again after been unredirected. If you have unredir-if-possible +# set, and doesn't want certain window to cause unnecessary screen redirection, +# you can set this to `true`. +# +wintypes: +{ + tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; }; + dock = { shadow = false; } + dnd = { shadow = false; } + popup_menu = { opacity = 1; } + dropdown_menu = { opacity = 1; } +}; diff --git a/.config/polybar/config b/.config/polybar/config new file mode 100644 index 0000000..488ef33 --- /dev/null +++ b/.config/polybar/config @@ -0,0 +1,287 @@ +[colors] +; Palenight colorscheme https://github.com/JonathanSpeek/palenight-iterm2 +black = #292d3e +red = #f07178 +green = #c3e88d +yellow = #ffcb6b +blue = #82aaff +magenta = #c792ea +cyan = #89ddff +white = #d0d0d0 + +black-lighter = #434758 +red-lighter = #ff8b92 +green-lighter = #ddffa7 +yellow-lighter = #ffe585 +blue-lighter = #9cc4ff +magenta-lighter = #9cc4ff +cyan-lighter = #9cc4ff +white-lighter = ffffff + +background = ${colors.black} +; background = #ee292d3e +foreground = ${colors.white} + +[bar/mybar] +monitor = ${env:MONITOR:} +width = 100% +height = ${env:HEIGHT:27} +offset-x = 0 +offset-y = 0 +radius = 0.0 +fixed-center = false +bottom=true + +background = ${colors.background} +foreground = ${colors.foreground} + +line-size = 3 +line-color = #f00 + +padding-left = 0 +padding-right = 0 + +module-margin-left = 1 +module-margin-right = 1 + +font-0 = ${env:FONT0:pango:monospace:size=10;1} +font-1 = ${env:FONT1:NotoEmoji:scale=10:antialias=false;0} +font-2 = ${env:FONT2:fontawesome:pixelsize=10;1} +font-3 = ${env:FONT3:JetBrains Mono Nerd Font:monospace:size=10;1} + +modules-left = i3 +; modules-center = test +modules-right = ${env:RIGHT_BLOCKS} + +tray-position = ${env:TRAY:right} +tray-padding = 0 +tray-maxsize = 16 +;tray-background = #0063ff + +wm-restack = i3 +; override-redirect = true + +scroll-up = i3wm-wsnext +scroll-down = i3wm-wsprev + +; cursor-click = pointer +; cursor-scroll = ns-resize + +[module/test] +type = custom/script +exec = echo "%{u#0000ff}%{+u} hello %{u-}" + +[module/ipstack] +type = custom/script +exec = /home/pavel/bin/polybar/ipstack.sh +interval = 1200 + +[module/ipstack-vpn] +type = custom/script +exec = /home/pavel/bin/polybar/ipstack-vpn.sh +interval = 1200 + +[module/aw-afk] +type = custom/script +exec = /home/pavel/bin/polybar/aw_afk.sh +interval = 60 + +[module/sun] +type = custom/script +exec = /home/pavel/bin/polybar/sun.sh +interval = 60 + +[module/SEP] +type = custom/text +content = "|" +content-foreground = ${colors.magenta} +content-padding = 0 +content-margin = 0 + +[module/TSEP] +type = custom/script +exec = /home/pavel/bin/polybar/tray-sep.sh +format-foreground = ${colors.magenta} +interval = 0 + +[module/i3] +type = internal/i3 +format = +index-sort = true +wrapping-scroll = false + +; Only show workspaces on the same output as the bar +pin-workspaces = true + +label-mode-padding = 1 +label-mode-foreground = #000 +label-mode-background = ${colors.blue} + +; focused = Active workspace on focused monitor +label-focused = %name% +label-focused-background = ${colors.background} +label-focused-underline= ${colors.blue} +label-focused-padding = 1 + +; unfocused = Inactive workspace on any monitor +label-unfocused = %name% +label-unfocused-padding = 1 + +; visible = Active workspace on unfocused monitor +label-visible = %name% +label-visible-background = ${self.label-focused-background} +label-visible-underline = ${self.label-focused-underline} +label-visible-padding = ${self.label-focused-padding} + +; urgent = Workspace with urgency hint set +label-urgent = %name% +label-urgent-background = ${colors.red} +label-urgent-foreground = ${colors.black} +label-urgent-padding = 1 + +; Separator in between workspaces +; label-separator = | + +[module/xkeyboard] +type = internal/xkeyboard +format = + +format-underline = ${colors.magenta} +label-layout = %icon% +layout-icon-0 = ru;RU +layout-icon-1 = us;US + +[module/mpd] +type = internal/mpd + +format-playing = +format-paused = +format-stopped =  +label-song = [%album-artist%] %title% +label-time = %elapsed%/%total% + +label-song-maxlen = 30 +label-song-ellipsis = true + +format-playing-underline = ${colors.yellow} +format-paused-underline = ${colors.yellow} +format-stopped-underline = ${colors.yellow} + +label-separator = kek +separator-foreground = ${colors.red} + +icon-pause =  +icon-play =  +icon-stop =  +icon-prev = 1 +icon-next = 2 + +[module/pulseaudio] +type = internal/pulseaudio +use-ui-max = true + +bar-volume-width = 7 +bar-volume-foreground-0 = ${colors.white} +bar-volume-foreground-1 = ${colors.yellow} +bar-volume-foreground-2 = ${colors.yellor} +bar-volume-foreground-3 = ${colors.blue} +bar-volume-foreground-4 = ${colors.blue} +bar-volume-foreground-5 = ${colors.green} +bar-volume-foreground-6 = ${colors.green} +bar-volume-gradient = false +bar-volume-indicator = | +bar-volume-indicator-font = 2 +bar-volume-fill = ─ +bar-volume-fill-font = 2 +bar-volume-empty = ─ +bar-volume-empty-font = 2 +bar-volume-empty-foreground = ${colors.white-lighter} + +format-volume = ♪ +label-volume = %percentage%% + +format-mute = ♪ +label-muted = MUTE + +format-volume-underline = ${colors.white} +format-muted-underline = ${colors.black-lighter} + +[module/cpu] +type = internal/cpu +format = 