From 3dab77f7794d20f402471c7c742c601fdfef3caf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Eahin=20Akkaya?= Date: Mon, 25 Dec 2023 13:21:57 +0300 Subject: [PATCH] Move old config to old-dots branch --- .Xresources | 29 + .agignore | 5 + .config/Asocia/splash | 10 + .config/betterlockscreenrc | 36 + .config/crontab | 27 + .config/dunst/dunstrc | 209 +++ .config/eww/bar/eww.scss | 531 ++++++ .config/eww/bar/eww.yuck | 463 +++++ .config/eww/bar/images/mic.png | Bin 0 -> 40034 bytes .config/eww/bar/images/music.png | Bin 0 -> 13774 bytes .config/eww/bar/images/speaker.png | Bin 0 -> 16246 bytes .config/eww/bar/scripts/battery | 43 + .config/eww/bar/scripts/indicator | 14 + .config/eww/bar/scripts/layout | 9 + .config/eww/bar/scripts/music_info | 98 + .config/eww/bar/scripts/pop | 89 + .config/eww/bar/scripts/qtile | 12 + .config/eww/bar/scripts/wifi | 26 + .config/eww/bar/scripts/workspace | 6 + .config/eww/bar/scripts/workspaces.py | 53 + .config/layouts/colemak/cdhpt.xml | 12 + .config/layouts/colemak/colemakdh | 62 + .config/layouts/colemak/colemakdhiso | 38 + .config/layouts/dvorak/rdvpt | 61 + .config/layouts/dvorak/rdvpt.map | 100 + .config/layouts/dvorak/rdvpt.xml | 6 + .config/mpd/mpd.conf | 426 +++++ .config/mpv/input.conf | 180 ++ .config/mpv/mpv.conf | 3 + .config/mpv/scripts/autload.lua | 212 +++ .config/mpv/scripts/mpv_chapters.js | 173 ++ .config/mpv/scripts/sponsorblock.lua | 597 ++++++ .../mpv/scripts/sponsorblock_shared/main.lua | 3 + .../sponsorblock_shared/sponsorblock.py | 124 ++ .../sponsorblock_shared/sponsorblock.txt | 1 + .config/nvim | 1 + .config/picom/picom.conf | 414 +++++ .config/qtile/config.py | 19 + .config/qtile/modules/groups.py | 52 + .config/qtile/modules/hooks.py | 35 + .config/qtile/modules/keys.py | 168 ++ .config/qtile/modules/layouts.py | 42 + .config/qtile/modules/mouse.py | 17 + .config/qtile/modules/screens.py | 3 + .config/qtile/scripts/Default.sh | 308 ++++ .config/tmux/plugins/tpm | 1 + .config/tmux/tmux.conf | 188 ++ .config/tridactyl/tridactylrc | 47 + .config/zsh/.aliases | 56 + .config/zsh/.p10k.zsh | 1619 +++++++++++++++++ .config/zsh/.zlogin | 26 + .config/zsh/.zlogout | 19 + .config/zsh/.zpreztorc | 237 +++ .config/zsh/.zprofile | 65 + .config/zsh/.zsh/_git | 294 +++ .config/zsh/.zshenv | 12 + .config/zsh/.zshrc | 147 ++ .gitignore | 1 + .gitmodules | 26 + .local/bin/passmenu | 35 + .profile | 8 + GitRepositories/bat-extras | 1 + GitRepositories/binary-wallpaper | 1 + GitRepositories/fzf | 1 + .../patches/polybar-wireguard/wireguard.patch | 33 + .../patches/rofi-bluetooth/dontshowmenu.patch | 71 + GitRepositories/polybar-wireguard | 1 + GitRepositories/rofi-bluetooth | 1 + GitRepositories/st | 1 + LICENSE | 674 +++++++ Pictures/Screenshots/ricing/Desktop.png | Bin 0 -> 1201519 bytes Pictures/Screenshots/ricing/terms.png | Bin 0 -> 1018391 bytes Pictures/Wallpapers/default.jpg | Bin 0 -> 1264726 bytes README.md | 24 + scripts/autostart.sh | 22 + scripts/check-battery.sh | 19 + scripts/chlayout | 11 + scripts/colorscripts/animals | 86 + scripts/colorscripts/bonsai | 48 + scripts/colorscripts/colorblocks | 22 + scripts/colorscripts/colorwheel | 25 + scripts/colorscripts/crunch | 18 + scripts/colorscripts/crunchbang | 40 + scripts/colorscripts/dna | 31 + scripts/colorscripts/emwave | 66 + scripts/colorscripts/faces | 19 + scripts/colorscripts/fade | 16 + scripts/colorscripts/ghosts | 24 + scripts/colorscripts/hedgehogs | 26 + scripts/colorscripts/illumina | 47 + scripts/colorscripts/invaders | 30 + scripts/colorscripts/mouseface | 18 + scripts/colorscripts/panes | 22 + scripts/colorscripts/pipes | 142 ++ scripts/colorscripts/pipes3d | 187 ++ scripts/colorscripts/railcars | 18 + scripts/colorscripts/rally-x | 28 + scripts/colorscripts/square | 16 + scripts/colorscripts/tanks | 24 + scripts/colorscripts/tiefighter | 26 + scripts/colorscripts/unix | 58 + scripts/colorscripts/zwaves | 15 + scripts/cpyfile | 21 + scripts/cpyout | 11 + scripts/getlength | 2 + scripts/git-rm-untracked | 5 + scripts/keyboard_backlight.sh | 25 + scripts/lock-screen | 41 + scripts/menu | 9 + scripts/rofi-bluetooth | 1 + scripts/rofi-wireguard | 1 + scripts/search-notes.sh | 8 + scripts/search-with-ag.sh | 11 + scripts/shrfile | 15 + scripts/shrout | 24 + scripts/toggle-screenkey | 11 + scripts/toggle-touchpad.sh | 11 + scripts/webcam | 12 + scripts/whereami | 5 + 119 files changed, 9623 insertions(+) create mode 100644 .Xresources create mode 100644 .agignore create mode 100644 .config/Asocia/splash create mode 100644 .config/betterlockscreenrc create mode 100644 .config/crontab create mode 100644 .config/dunst/dunstrc create mode 100644 .config/eww/bar/eww.scss create mode 100644 .config/eww/bar/eww.yuck create mode 100644 .config/eww/bar/images/mic.png create mode 100644 .config/eww/bar/images/music.png create mode 100644 .config/eww/bar/images/speaker.png create mode 100755 .config/eww/bar/scripts/battery create mode 100755 .config/eww/bar/scripts/indicator create mode 100755 .config/eww/bar/scripts/layout create mode 100755 .config/eww/bar/scripts/music_info create mode 100755 .config/eww/bar/scripts/pop create mode 100755 .config/eww/bar/scripts/qtile create mode 100755 .config/eww/bar/scripts/wifi create mode 100755 .config/eww/bar/scripts/workspace create mode 100644 .config/eww/bar/scripts/workspaces.py create mode 100644 .config/layouts/colemak/cdhpt.xml create mode 100644 .config/layouts/colemak/colemakdh create mode 100644 .config/layouts/colemak/colemakdhiso create mode 100644 .config/layouts/dvorak/rdvpt create mode 100644 .config/layouts/dvorak/rdvpt.map create mode 100644 .config/layouts/dvorak/rdvpt.xml create mode 100644 .config/mpd/mpd.conf create mode 100644 .config/mpv/input.conf create mode 100644 .config/mpv/mpv.conf create mode 100644 .config/mpv/scripts/autload.lua create mode 100644 .config/mpv/scripts/mpv_chapters.js create mode 100644 .config/mpv/scripts/sponsorblock.lua create mode 100644 .config/mpv/scripts/sponsorblock_shared/main.lua create mode 100644 .config/mpv/scripts/sponsorblock_shared/sponsorblock.py create mode 100644 .config/mpv/scripts/sponsorblock_shared/sponsorblock.txt create mode 160000 .config/nvim create mode 100644 .config/picom/picom.conf create mode 100644 .config/qtile/config.py create mode 100644 .config/qtile/modules/groups.py create mode 100644 .config/qtile/modules/hooks.py create mode 100644 .config/qtile/modules/keys.py create mode 100644 .config/qtile/modules/layouts.py create mode 100644 .config/qtile/modules/mouse.py create mode 100644 .config/qtile/modules/screens.py create mode 100755 .config/qtile/scripts/Default.sh create mode 160000 .config/tmux/plugins/tpm create mode 100644 .config/tmux/tmux.conf create mode 100644 .config/tridactyl/tridactylrc create mode 100644 .config/zsh/.aliases create mode 100644 .config/zsh/.p10k.zsh create mode 100644 .config/zsh/.zlogin create mode 100644 .config/zsh/.zlogout create mode 100644 .config/zsh/.zpreztorc create mode 100644 .config/zsh/.zprofile create mode 100644 .config/zsh/.zsh/_git create mode 100644 .config/zsh/.zshenv create mode 100644 .config/zsh/.zshrc create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100755 .local/bin/passmenu create mode 100644 .profile create mode 160000 GitRepositories/bat-extras create mode 160000 GitRepositories/binary-wallpaper create mode 160000 GitRepositories/fzf create mode 100644 GitRepositories/patches/polybar-wireguard/wireguard.patch create mode 100644 GitRepositories/patches/rofi-bluetooth/dontshowmenu.patch create mode 160000 GitRepositories/polybar-wireguard create mode 160000 GitRepositories/rofi-bluetooth create mode 160000 GitRepositories/st create mode 100644 LICENSE create mode 100644 Pictures/Screenshots/ricing/Desktop.png create mode 100644 Pictures/Screenshots/ricing/terms.png create mode 100644 Pictures/Wallpapers/default.jpg create mode 100644 README.md create mode 100755 scripts/autostart.sh create mode 100755 scripts/check-battery.sh create mode 100755 scripts/chlayout create mode 100755 scripts/colorscripts/animals create mode 100755 scripts/colorscripts/bonsai create mode 100755 scripts/colorscripts/colorblocks create mode 100755 scripts/colorscripts/colorwheel create mode 100755 scripts/colorscripts/crunch create mode 100755 scripts/colorscripts/crunchbang create mode 100755 scripts/colorscripts/dna create mode 100755 scripts/colorscripts/emwave create mode 100755 scripts/colorscripts/faces create mode 100755 scripts/colorscripts/fade create mode 100755 scripts/colorscripts/ghosts create mode 100755 scripts/colorscripts/hedgehogs create mode 100755 scripts/colorscripts/illumina create mode 100755 scripts/colorscripts/invaders create mode 100755 scripts/colorscripts/mouseface create mode 100755 scripts/colorscripts/panes create mode 100755 scripts/colorscripts/pipes create mode 100755 scripts/colorscripts/pipes3d create mode 100755 scripts/colorscripts/railcars create mode 100755 scripts/colorscripts/rally-x create mode 100755 scripts/colorscripts/square create mode 100755 scripts/colorscripts/tanks create mode 100755 scripts/colorscripts/tiefighter create mode 100755 scripts/colorscripts/unix create mode 100755 scripts/colorscripts/zwaves create mode 100755 scripts/cpyfile create mode 100755 scripts/cpyout create mode 100755 scripts/getlength create mode 100755 scripts/git-rm-untracked create mode 100755 scripts/keyboard_backlight.sh create mode 100755 scripts/lock-screen create mode 100755 scripts/menu create mode 120000 scripts/rofi-bluetooth create mode 120000 scripts/rofi-wireguard create mode 100755 scripts/search-notes.sh create mode 100755 scripts/search-with-ag.sh create mode 100755 scripts/shrfile create mode 100755 scripts/shrout create mode 100755 scripts/toggle-screenkey create mode 100755 scripts/toggle-touchpad.sh create mode 100755 scripts/webcam create mode 100755 scripts/whereami diff --git a/.Xresources b/.Xresources new file mode 100644 index 0000000..aaacaa4 --- /dev/null +++ b/.Xresources @@ -0,0 +1,29 @@ +Xft.autohint: 0 +Xft.lcdfilter: lcddefault +Xft.hintstyle: hintslight +Xft.hinting: 1 +Xft.antialias: 1 +Xft.rgba: rgb + +# colors +*background: #2E3440 +*foreground: #D8DEE9 +*cursorColor: #D8DEE9 + +*color0: #3B4252 +*color1: #BF616A +*color2: #A3BE8C +*color3: #EBCB8B +*color4: #81A1C1 +*color5: #B48EAD +*color6: #88C0D0 +*color7: #E5E9F0 + +*color8: #4C566A +*color9: #BF616A +*color10: #A3BE8C +*color11: #EBCB8B +*color12: #81A1C1 +*color13: #B48EAD +*color14: #8FBCBB +*color15: #ECEFF4 diff --git a/.agignore b/.agignore new file mode 100644 index 0000000..486feba --- /dev/null +++ b/.agignore @@ -0,0 +1,5 @@ +*.pyc +venv +.vscode +.idea +*~ diff --git a/.config/Asocia/splash b/.config/Asocia/splash new file mode 100644 index 0000000..5cbcaae --- /dev/null +++ b/.config/Asocia/splash @@ -0,0 +1,10 @@ + + + + + +_______ _____ +___ |__Welcome back, _________(_)______ _ +__ /| |__ ___/_ __ \_ ___/__ / _ __ `/ +_ ___ |_(__ ) / /_/ // /__ _ / / /_/ / +/_/ |_|/____/ \____/ \___/ /_/ \__,_/ diff --git a/.config/betterlockscreenrc b/.config/betterlockscreenrc new file mode 100644 index 0000000..abcfafc --- /dev/null +++ b/.config/betterlockscreenrc @@ -0,0 +1,36 @@ +# ~/.config/betterlockscreenrc + +# default options +display_on=0 +span_image=false +lock_timeout=300 +fx_list=(dim blur dimblur pixel dimpixel color) +dim_level=40 +blur_level=1 +pixel_scale=10,1000 +solid_color=333333 +wallpaper_cmd="feh --bg-fill" +# i3lockcolor_bin="i3lock-color" # Manually set command for i3lock-color + +# default theme +loginbox=00000066 +loginshadow=00000000 +locktext="Type satrtapassword to unlock..." +font="sans-serif" +ringcolor=ffffffff +insidecolor=00000000 +separatorcolor=00000000 +ringvercolor=ffffffff +insidevercolor=00000000 +ringwrongcolor=ffffffff +insidewrongcolor=d23c3dff +timecolor=ffffffff +time_format="%H:%M:%S" +greetercolor=ffffffff +layoutcolor=ffffffff +keyhlcolor=d23c3dff +bshlcolor=d23c3dff +verifcolor=ffffffff +wrongcolor=d23c3dff +modifcolor=d23c3dff +bgcolor=000000ff diff --git a/.config/crontab b/.config/crontab new file mode 100644 index 0000000..712cf83 --- /dev/null +++ b/.config/crontab @@ -0,0 +1,27 @@ + +DISPLAY=:0 +XDG_RUNTIME_DIR=/run/user/1000 + + +# Example of job definition: +# .---------------- minute (0 - 59) +# | .------------- hour (0 - 23) +# | | .---------- day of month (1 - 31) +# | | | .------- month (1 - 12) OR Jan-Dec +# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR SUN-SAT +# | | | | | +# * * * * * user-name command to be executed + +# * any value +# , value list separator +# - range of values +# / step values + +* * * * * /home/sahin/scripts/check-battery.sh 6 + +# At every 15th minute past every hour from 6 through 19. +*/15 06-19 * * * curl 'https://sks.itu.edu.tr/ExternalPages/sks/yemek-menu-v2/uzerinde-calisilan/yemek-menu.aspx' 2>/dev/null | grep -oP "js-nyro-modal.*?>\K(.+?)(?=<[is].*>)" > /home/sahin/.cronresults/todaysmenu + +* * * * * cat /var/spool/cron/sahin > /home/sahin/.config/crontab + +* * * * * /home/sahin/GitRepositories/binary-wallpaper/set_binary_wallpaper.sh diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc new file mode 100644 index 0000000..c56a53f --- /dev/null +++ b/.config/dunst/dunstrc @@ -0,0 +1,209 @@ + +[global] + + # --- Display --- # + + # The monitor to be displayed to + monitor = 0 + + # Follow monitor with mouse + follow = mouse + + # The geometry of the window + # widthxheight +/-x+/-y + geometry = "270x6-24+68" + + # geometry = "280x50-10+48" + + # Show how many messages are hidden + indicate_hidden = yes + + # Shrink window if it's smaller than the width. + shrink = no + + # The transparency of the window. + transparency = 1 + + # Set height to padding + font size + notification_height = 0 + + # Draw a line between multiple notifications + separator_height = 3 + separator_color = "#auto" + + # Set notification padding + padding = 16 + horizontal_padding = 16 + + # Disable frame (border) + frame_width = 3 + + # Sort messages by urgency. + sort = no + + # Disable idle time + idle_threshold = 0 + + + # --- Text --- # + + # Set the font + # font = "Noto Sans 11" + # font = "Hack Nerd Font 9.5" + font = JetBrains Mono 10 + + # Set line height to font height + line_height = 4 + + # Reference for markup and formatting: + # bold + # italic + # strikethrough + # underline + # . + # %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 = full + format = "%s\n%b" + + # Left align the text + alignment = left + + # Vertical alignment of message text and icon. + vertical_alignment = center + + # Show age of message if message is old + show_age_threshold = 120 + + # Wrap text if it doesn't fit in geometry + word_wrap = yes + + # Where to place ellipses if word wrap is disabled + # ellipsize = middle + + # Use newlines '\n' in notifications. + ignore_newline = no + + # Don't stack together notifications + stack_duplicates = false + + # Hide the count of stacked notifications + # 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 small icons up to this size, set to 0 to disable. + min_icon_size = 0 + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 40 + + # Paths to default icons. + icon_path = /usr/share/icons/ePapirus/128x128/apps:/usr/share/icons/ePapirus/128x128/devices:/usr/share/icons/ePapirus/128x128/mimetypes:/usr/share/icons/ePapirus/128x128/places:/usr/share/icons/Papirus/48x48/actions:/usr/share/icons/Papirus/48x48/apps:/usr/share/icons/Papirus/48x48/devices:/usr/share/icons/Papirus/48x48:emblems:/usr/share/icons/Papirus/48x48/emotes:/usr/share/icons/Papirus/48x48/mimetypes:/usr/share/icons/Papirus/48x48/places:/usr/share/icons/Papirus/48x48/status:/usr/share/icons/Papirus/16x16/actions:/usr/share/icons/Papirus/16x16/apps:/usr/share/icons/Papirus/16x16/devices:/usr/share/icons/Papirus/16x16/emblems:/usr/share/icons/Papirus/16x16/emotes:/usr/share/icons/Papirus/16x16/mimetypes:/usr/share/icons/Papirus/16x16/panel:/usr/share/icons/Papirus/16x16/places:/usr/share/icons/Papirus/16x16/status + + + # --- History --- # + + # Avoid timing out hidden notifications + sticky_history = yes + + # Maximum amount of notifications kept in history + history_length = 100 + + + # --- Misc/Advanced --- # + + dmenu = /usr/bin/dmenu -p dunst: + + # Browser for opening urls in context menu. + browser = /usr/bin/firefox -new-tab + + # Always run rule-defined scripts, even if the notification is suppressed + always_run_script = false + + # Define the title of the windows spawned by dunst + title = Dunst + + # Define the class of the windows spawned by dunst + class = Dunst + + # Avoid printing a notification on startup + startup_notification = false + + # Manage dunst's desire for talking + verbosity = mesg + + # Define the corner radius of the notification window + corner_radius = 0 + + # Don't gnore the dbus closeNotification message. + ignore_dbusclose = false + + + # --- Legacy --- # + + # Use the Xinerama extension instead of RandR for multi-monitor support. + force_xinerama = false + + + # --- Mouse --- # + mouse_middle_click = close_current + mouse_left_click = do_action, close_current + mouse_right_click = close_all + + + # --- Shortcuts --- # + # Close notification. + close = ctrl+space + + # Close all notifications. + close_all = ctrl+shift+space + + # Redisplay last message(s). + history = ctrl+grave + + # Context menu. + context = ctrl+shift+period + + +[experimental] + per_monitor_dpi = false + + +# --- Colors --- # + +[urgency_low] + # background = "#6BC6DE" + # foreground = "#d1e2e8" + + background = "#282C33" + foreground = "#D8D8D8" + timeout = 8 + +[urgency_normal] + # background = "#6BC6DE" + # foreground = "#d1e2e8" + background = "#282C33" + foreground = "#D8D8D8" + timeout = 8 + +[urgency_critical] + background = "#dd130ddd" + foreground = "#ffffff" + frame_color = "#30343B" + timeout = 0 + icon = abrt diff --git a/.config/eww/bar/eww.scss b/.config/eww/bar/eww.scss new file mode 100644 index 0000000..b12ef5f --- /dev/null +++ b/.config/eww/bar/eww.scss @@ -0,0 +1,531 @@ +/** EWW.SCSS +Created by saimoom **/ +*{ + all: unset; + font-family: "Iosevka Nerd Font", feather; + // font-family: DaddyTimeMono NF; +} + +// Variable Color's +$background: #1A1B26; +$foreground: #A9B1D6; + +$black: #24283B; +$gray: #565F89; +$red: #F7768E; +$green: #73DACA; +$yellow: #E0AF68; +$blue: #7AA2F7; +$magenta: #BB9AF7; +$cyan: #7DCFFF; +$white: $foreground; +/** General **/ +.bar_class { + background-color: #0f0f17; + border-radius: 16px; +} +.module { + margin: 0px 0px 0px 0px; + border-radius: 10px 16px 0px 10px; +} + +/** tooltip!! **/ +tooltip.background { + background-color: #0f0f17; + font-size: 18; + border-radius: 10px; + color: #bfc9db; +} + +tooltip label { + margin: 6px; +} + + +/** Widgets **/ + +.clock_time_sep { + font-size: 27; + color: #bfc9db; + margin: 0px 4px 1px 4px; +} +.clock_time_class, .clock_minute_class { + font-size: 23; +} +.clock_date_class { + font-size: 18; + margin: 0px 20px 0px -1px; + color: #d7beda; +} +.clock_minute_class { + margin: 0px 20px 0px 3px; + color: #bfc9db; +} + +.clock_time_class { + color: #bfc9db; + font-weight: bold; + margin: 0px 5px 0px 0px; +} + +.diskbar { + color: #AD5C6C; + background-color: #38384d; + border-radius: 10px; +} +.cpubar { + color: #297379; + background-color: #38384d; + border-radius: 10px; +} + +.membar { + color: #e0b089; + background-color: #38384d; + border-radius: 10px; +} + + +.bat{ + // font-family: JetBrainsMono Nerd Font; + font-family: Iosevka Nerd Font; + font-size: 1.2em; + padding-right: .5rem; + color: $blue; +} +.brightbar trough highlight { + background-image: linear-gradient(to right, #e4c9af 30%, #f2cdcd 50%, #e0b089 100% *50); + border-radius: 10px; +} +.volbar trough highlight { + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 10px; +} +.volume_icon { + font-size: 22; + color: #a1bdce; + margin: 0px 10px 0px 10px; +} + +.module_essid { + font-size: 18; + color: #a1bdce; + margin: 0px 10px 0px 0px; +} +.module_vpn { + font-size: 18; + color: #77DD77; + margin: 0px 10px 0px 0px; +} +.module-wif { + font-size: 22; + color: #a1bdce; + border-radius: 100%; + margin: 0px 10px 0px 5px; +} +.iconcpu { + color: #297379; +} + + +.icondisk { + color: #AD5C6C; +} + +.iconmem { + color: #e0b089; +} +.iconbat { + color: #afbea2; +} +.iconbat, .iconmem, .iconcpu, .icondisk { + font-size: 15; + margin: 10px; +} +.bright_icon { + font-size: 22; + color: #e4c9af; + margin: 0px 10px 0px 10px; +} + + +.separ { + color: #3e424f; + font-weight: bold; + font-size: 22px; + margin: 0px 8px 0px 8px; +} + +.mem_module, .cpu_module, .disk_module{ + background-color: #0f0f17; + border-radius: 16px; + margin: 0px 10px 0px 3px; +} +scale trough { + all: unset; + background-color: #22242b; + box-shadow: 0 2px 3px 2px #06060b; + border-radius: 16px; + min-height: 10px; + min-width: 70px; + margin: 0px 10px 0px 0px; +} + +.works { + font-size: 27px; + // font-size: 45px; + font-weight: normal; + font-family: Iosevka Nerd Font; + margin: 5px 0px 0px 20px; + background-color: #0f0f17; +} + +.0 , .01, .02, .03, .04, .05, .06, .07, .08, .09, .00, +.011, .022, .033, .044, .055, .066, .077, .088, .099, .000 { + margin: 5px 10px 0px 0px; +} + +/* Unoccupied */ +.0 { + color:#131d2c; +} + +/* Occupied */ +.01, .02, .03, .04, .05, .06, .07, .08, .09, .00 { + color: #5c6c82; +} + +/* Focused */ +.011, .022, .033, .044, .055, .066, .077, .088, .099, .000 { + color: #e4e6ea +} + +.033.thunderbird { + color: #1E5EBB; +} + +.066.twitter { + color: #1C9CEA; +} + +.firefox.077 { + color: #DF5D00; +} + + +.twitch.088 { + color: #613F9F; +} + +.discord.099 { + color:#5661EF; +} + + +.telegram.000 { + color: #0084C6; +} + +.song_cover_art { + background-size: cover; + background-position: center; + min-height: 24px; + min-width: 24px; + margin: 10px; + border-radius: 100px; +} + +.song { + color: #a1bdce; + font-size : 18px; + font-weight : bold; + margin : 3px 5px 0px 0px; +} + +.song_btn_play { + color: #a1bdce; + font-size : 28px; + margin : 3px 0px 0px 5px; + +} + + +.song_btn_prev, .song_btn_next { + color: #bfc9db; + font-size : 24px; + margin : 3px 0px 0px 5px; + +} +// Calendar +.cal { + background-color: #0f0f17; + font-family: "JetBrainsMono Nerd Font"; + font-size: 18px; + font-weight: normal; + + .cal-in { + padding: 0px 10px 0px 10px; + color: #bfc9db; + + .cal { + &.highlight { + padding: 20px; + } + + padding: 5px 5px 5px 5px; + margin-left: 10px; + } + } +} + + + +calendar:selected { + color: $blue; + font-size: 24px; + background: $background; +} + +calendar.header { + color: $blue; + font-weight: bold; +} + +calendar.button { + color: $magenta; +} + +calendar.highlight { + color: $magenta; + font-weight: bold; +} + +calendar:indeterminate { + color: $background; +} + + + + + + + +.sys_sep { + color: #38384d; + font-size: 18; + margin: 0px 10px 0px 10px; +} +.sys_text_bat_sub, .sys_text_mem_sub { + font-size: 16; + color: #bbc5d7; + margin: 5px 0px 0px 25px; +} +.sys_text_bat, .sys_text_mem { + font-size: 21; + font-weight: bold; + margin: 14px 0px 0px 25px; +} +.sys_icon_bat, .sys_icon_mem { + font-size: 30; + margin: 30px; +} +.sys_win { + background-color: #0f0f17; +} +.sys_bat { + color: #afbea2; + background-color: #38384d; + border-radius: 10px; +} +.sys_mem { + color: #e4c9af; + background-color: #38384d; + border-radius: 10px; +} +.sys_icon_bat, .sys_text_bat { + color: #afbea2; +} +.sys_icon_mem, .sys_text_mem { + color: #e4c9af; +} +.sys_bat_box { + border-radius: 16px; + margin: 15px 10px 10px 20px; +} +.sys_mem_box { + border-radius: 16px; + margin: 10px 10px 15px 20px; +} + +.music_pop { + background-color: #0f0f17; + border-radius: 16px; +} +.music_cover_art { + background-size: cover; + background-position: center; + min-height: 100px; + box-shadow: 5px 5px 5px 5px #06060b; + min-width: 170px; + margin: 20px; + border-radius: 20px; +} + +.music { + color: #a1bdce; + font-size : 20px; + font-weight : bold; + margin : 20px 0px 0px -15px; +} + +.music_artist { + color: #bbc5d7; + font-size : 16px; + font-weight : normal; + margin : 0px 0px 0px 0px; +} + +.music_btn_prev, .music_btn_play, .music_btn_next { + font-family: Iosevka Nerd Font; +} +.music_btn_prev { + color: #bbc5d7; + font-size : 32px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} +.music_btn_play { + color: #a1bdce; + font-size : 48px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} +.music_btn_next { + color: #bbc5d7; + font-size : 32px; + font-weight : normal; + margin: 0px 0px 0px 0px; +} + +.music_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.music_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 190px; + margin : -10px 10px 20px 0px; +} + +.audio-box { + background-color: #0f0f17; + border-radius: 16px; +} +.speaker_icon { + background-size: cover; + background-image: url('images/speaker.png'); + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 10px 20px 5px 20px; + border-radius: 12px; +} + +.speaker_text { + color: #a1bdce; + font-size : 26px; + font-weight : bold; + margin: 20px 0px 0px 0px; +} + +.speaker_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.speaker_bar scale trough { + all: unset; + background-color: #232232; + box-shadow: 0 6px 5px 2px #06060b; + border-radius: 24px; + min-height: 13px; + min-width: 120px; + margin : 0px 0px 5px 0px; +} + +.mic_icon { + background-size: cover; + background-image: url('images/mic.png'); + background-position: center; + min-height: 70px; + min-width: 75px; + margin: 5px 20px 20px 20px; + border-radius: 12px; +} + +.mic_text { + color: #a1bdce; + font-size : 26px; + font-weight : bold; + margin: 0px 0px 0px 0px; +} + +.mic_bar scale trough highlight { + all: unset; + background-image: linear-gradient(to right, #afcee0 30%, #a1bdce 50%, #77a5bf 100% *50); + border-radius: 24px; +} +.mic_bar scale trough { + all: unset; + box-shadow: 0 6px 5px 2px #06060b; + background-color: #232232; + border-radius: 24px; + min-height: 13px; + min-width: 120px; + margin : 0px 0px 20px 0px; +} + +.audio_sep { + color: #38384d; + font-size: 18; + margin : 0px 0px 0px 0px; +} + + +// Powermenu +.powermenu { + font-family: feather; + font-size: 1.3em; + font-weight: bold; +} +.button-qtres, .button-reb, .button-lock, +.button-quit, .button-off{ + padding: .5rem .2rem .5rem .2rem; + // transition: all .2s ease-in-out; +} +.button-off{ + color: $red; + margin-right: 15px; +} +.button-qtres:hover, .button-reb:hover, .button-lock:hover, +.button-quit:hover, .button-off:hover{ + font-size: 1.2em; + box-shadow: inset 0 0 0 10em $background; +} +.button-bspres{ + color: $green; +} +.button-reb{ + color: $yellow +} +.button-quit{ + color: $magenta; +} +.button-lock{ + color: $blue; +} diff --git a/.config/eww/bar/eww.yuck b/.config/eww/bar/eww.yuck new file mode 100644 index 0000000..f85085d --- /dev/null +++ b/.config/eww/bar/eww.yuck @@ -0,0 +1,463 @@ +;; Variables +(defpoll clock_time :interval "5s" "date +\%H") +(defpoll clock_minute :interval "5s" "date +\%M") +(defpoll clock_date :interval "5s" "date '+%d/%m'") +(defpoll volume_percent :interval "3s" :run-while vol_reveal "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll mic_percent :interval "3s" :run-while vol_reveal "amixer -D pulse sget Capture | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") +(defpoll brightness_percent :interval "5s" :run-while br_reveal "brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%'") +(defpoll caps_num_scroll_indicator :interval "300ms" "scripts/indicator") +(defvar vol_reveal false) +(defvar bat_rev false) +(defvar cpu_rev false) +(defvar mem_rev false) +(defvar disk_rev false) +(defvar br_reveal false) +(defvar vpn_reveal false) +(defvar bluetooth_rev false) +(defvar music_reveal false) +(defvar wifi_rev false) +(defvar time_rev false) +(defvar power_rev false) +(deflisten workspace "scripts/workspace") + +(deflisten CURRENT_LAYOUT_SYMBOL "scripts/layout") + +(defvar eww "$HOME/scripts/eww -c $HOME/.config/eww/bar") + + +(defpoll COL_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --COL") +(defpoll ESSID_WLAN :interval "1m" "~/.config/eww/bar/scripts/wifi --ESSID") +(defpoll VPN_NAME :interval "1s" "rofi-wireguard") +(defpoll BLUETOOTHDEV :interval "1s" "rofi-bluetooth --status") +(defpoll WLAN_ICON :interval "1m" "~/.config/eww/bar/scripts/wifi --ICON") + + +(defpoll song :interval "2s" "~/.config/eww/bar/scripts/music_info --song") +(defpoll song_artist :interval "2s" "~/.config/eww/bar/scripts/music_info --artist") +(defpoll current_status :interval "1s" "~/.config/eww/bar/scripts/music_info --time") +(defpoll song_status :interval "2s" "~/.config/eww/bar/scripts/music_info --status") +(defpoll cover_art :interval "2s" "~/.config/eww/bar/scripts/music_info --cover") + + +;; widgets + +(defwidget wifi [] + (eventbox :onhover "${eww} update wifi_rev=true" + :onhoverlost "${eww} update wifi_rev=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :onclick "networkmanager_dmenu" :wrap "false" :limit-width 12 :style "color: ${COL_WLAN};" WLAN_ICON) + (revealer :transition "slideleft" + :reveal wifi_rev + :duration "350ms" + (label :class "module_essid" + :text ESSID_WLAN + ))))) + + +(defwidget workspaces [] + (literal :content workspace)) + +(defwidget sep [] + (box :class "module-2" :vexpand "false" :hexpand "false" + (label :class "separ" :text "|"))) + +(defwidget clock_module [] + (eventbox :onhover "${eww} update time_rev=true" + :onhoverlost "${eww} update time_rev=false" + (box :class "module" :space-evenly "false" :orientation "h" :spacing "3" + (label :text clock_time :class "clock_time_class" ) + (label :text ":" :class "clock_time_sep" ) + (label :text clock_minute :class "clock_minute_class") + (revealer :transition "slideleft" + :reveal time_rev + :duration "350ms" + (button :class "clock_date_class" + :onclick "$HOME/.config/eww/bar/scripts/pop calendar" clock_date + ) + )))) + +(defwidget volume [] + (eventbox :onhover "${eww} update vol_reveal=true" + :onhoverlost "${eww} update vol_reveal=false" + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (button :onclick "scripts/pop audio" :class "volume_icon" "${BLUETOOTHDEV=="" ? "": ""}") + (revealer :transition "slideleft" + :reveal vol_reveal + :duration "350ms" + (scale :class "volbar" + :value volume_percent + :orientation "h" + :tooltip "${volume_percent}%" + :max 100 + :min 0 + :onchange "amixer -D pulse sset Master {}%" ))))) + +(defwidget bright [] + (eventbox :onhover "${eww} update br_reveal=true" :onhoverlost "${eww} update br_reveal=false" + (box :class "module-2" :space-evenly "false" :orientation "h" :spacing "3" + (label :text "" :class "bright_icon" :tooltip "brightness") + (revealer :transition "slideleft" + :reveal br_reveal + :duration "350ms" + (scale :class "brightbar" + :value brightness_percent + :orientation "h" + :tooltip "${brightness_percent}%" + :max 100 + :min 0 + :onchange "brightnessctl set {}%" ))))) + +;; Battery Widgets ;; +(defwidget bat [] + (eventbox :onhover "${eww} update bat_rev=true" + :onhoverlost "${eww} update bat_rev=false" + (box :space-evenly "false" + (label :class "bat" + :text battery + :tooltip "Battery: ${EWW_BATTERY["BAT0"].capacity}%") + + (revealer :transition "slideleft" + :reveal bat_rev + :duration "350ms" + :class "bat" + (label :text "${battery==""? "Charging": "Battery"}: ${EWW_BATTERY["BAT0"].capacity}%")) + ))) +(defpoll battery :interval "1s" "scripts/battery icon") + +(defwidget metric [widget widget_rev value tooltip_text] + (eventbox + :onhover "${eww} update ${widget}_rev=true" + :onhoverlost "${eww} update ${widget}_rev=false" + (box :class "${widget}_module" :vexpand "false" :hexpand "false" + (circular-progress + :value value + :class "${widget}bar" + :thickness 4 + (button + :class "icon${widget}" + :limit-width 9 + :tooltip tooltip_text + :onclick "$HOME/.config/eww/bar/scripts/pop system" + :show_truncated false + :wrap false + (revealer + :transition "slideleft" + :reveal widget_rev + :duration "350ms" + :class "icon${widget}" + (label + :text value + :tooltip "${tooltip_text}: ${value}%" + ) + ) + ) + ) + ) + ) + ) + +(defwidget metrics [] + (box :orientation "h" + :space-evenly false + (metric :widget "disk" :widget_rev disk_rev :value "${round((1 - (EWW_DISK["/"].free / EWW_DISK["/"].total)) * 100, 0)}" :tooltip_text "Disk usage") + (metric :widget "cpu" :widget_rev cpu_rev :value "${round(EWW_CPU.avg, 0)}" :tooltip_text "CPU usage") + (metric :widget "mem" :widget_rev mem_rev :value "${round(EWW_RAM.used_mem_perc, 0)}" :tooltip_text "RAM usage") + )) + + +(defwidget keyboard [] + (box :class "volume_icon" + :orientation "v" + (label :text caps_num_scroll_indicator + :style "font-size: 7;" + :valign "end" + ) + (label :text CURRENT_LAYOUT_SYMBOL + :valign "start" + :vexpand false + ) + + )) + + +(defwidget vpn [] + (eventbox :onhover "${eww} update vpn_reveal=true" + :onhoverlost "${eww} update vpn_reveal=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :timeout "10s" :onclick "rofi-wireguard --toggle" :wrap "false" + :limit-width 12 :style "color: ${VPN_NAME=="" ? "#3e424f": "#77DD77"};" "") + (revealer :transition "slideright" + :reveal vpn_reveal + :duration "350ms" + (button :class "module-wif" :timeout "10s" :onclick "rofi-wireguard --toggle" :wrap "false" + :limit-width 12 :style "color: ${VPN_NAME=="" ? "#3e424f": "#77DD77"};" VPN_NAME) + )))) + +(defwidget bluetooth [] + (eventbox :onhover "${eww} update bluetooth_rev=true" + :onhoverlost "${eww} update bluetooth_rev=false" + (box :vexpand "false" :hexpand "false" :space-evenly "false" + (button :class "module-wif" :timeout "30s" :onclick "rofi-bluetooth" :wrap "false" :limit-width 12 + :style "color: ${BLUETOOTHDEV=="" ? "#3e424f": "#77DD77"};" {BLUETOOTHDEV=="" ? "" : ""}) + (revealer :transition "slideright" + :reveal bluetooth_rev + :duration "350ms" + (button :class "module-wif" :timeout "30s" :onclick "rofi-bluetooth" :wrap "false" :limit-width 12 + :style "color: ${BLUETOOTHDEV=="" ? "#3e424f": "#77DD77"};" BLUETOOTHDEV) + )))) + +(defwidget power [] + (eventbox :onhover "${eww} update power_rev=true" + :onhoverlost "${eww} update power_rev=false" + (box :orientation "h" + :space-evenly "false" + :vexpand "false" + :class "powermenu" + (revealer :transition "slideleft" + :reveal power_rev + :duration "550ms" + (box :orientation "h" + :space-evenly "false" + + (button :class "button-qtres" + :tooltip "Restart qtile" + :onclick "scripts/qtile restart" "" ) + + (button :class "button-reb" + :tooltip "Reboot" + :onclick "reboot" "") + + (button :class "button-quit" + :tooltip "Logout" + :onclick "scripts/qtile shutdown" "") + + (button :class "button-lock" + :tooltip "Lock Screen" + :onclick "lock-screen" ""))) + + (button :class "button-off" + :tooltip "Shutdown" + :onclick "shutdown now" "")))) + + +;; Music +(defwidget music [] + (eventbox :onhover "${eww} update music_reveal=true" + :onhoverlost "${eww} update music_reveal=false" + (box :class "module-2" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :class "song_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") + (button :class "song" :onclick "~/.config/eww/bar/scripts/pop music" song) + (revealer :transition "slideright" + :reveal music_reveal + :duration "350ms" + (box :vexpand "false" :hexpand "false" :orientation "h" + (button :class "song_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") + (button :class "song_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) + (button :class "song_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")))))) + + +(defwidget left [] + (box :orientation "h" + :space-evenly false + :halign "end" + :class "left_modules" + (keyboard) + (vpn) + (bluetooth) + (bright) + (volume) + (wifi) + (sep) + (metrics) + (bat) + (sep) + (clock_module) + (power))) + + +(defwidget right [] + (box :orientation "h" + :space-evenly false + :halign "start" + :class "right_modules" + (workspaces))) + + +(defwidget center [] + (box :orientation "h" + :space-evenly false + :halign "center" + :class "center_modules" + (music))) + + +(defwidget topbar [] + (centerbox +:orientation "h" + :class "bar_class" + (right) + (center) + (left) + ) + ) + +(defwindow bar + :monitor 0 + :geometry (geometry :x "0%" + :y "4px" + :width "99%" + :height "50px" + :anchor "top center") + :stacking "fg" + :reserve (struts :distance "58px" :side "top") + :windowtype "dock" + :wm-ignore false + (topbar)) + +(defwidget system [] + (box :class "sys_win" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 0 + (box :class "sys_bat_box" :orientation "h" :space-evenly "false" + (circular-progress :value "${EWW_BATTERY["BAT0"].capacity}" + :class "sys_bat" + :thickness 9 + (label :text "" + :class "sys_icon_bat" + :limit-width 2 + :show_truncated false + :wrap false)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "battery" + :halign "start" + :class "sys_text_bat" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${EWW_BATTERY["BAT0"].capacity}%" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${EWW_BATTERY["BAT0"].status}" + :halign "start" + :class "sys_text_bat_sub" + :limit-width 22 + :show_truncated false + :wrap false))) + (label :text "" :class "sys_sep" :halign "center") + (box :class "sys_mem_box" :orientation "h" :space-evenly "false" :halign "start" + (circular-progress :value "${round(EWW_RAM.used_mem_perc, 0)}" + :class "sys_mem" + :thickness 9 + (label :text "" + :class "sys_icon_mem" + :limit-width 2 + :show_truncated false + :wrap false + :angle 0.0)) + (box :orientation "v" :space-evenly "false" :spacing 0 :hexpand "false" :vexpand "false" + (label :text "memory" + :halign "start" + :class "sys_text_mem" + :limit-width 9 + :show_truncated false + :wrap false) + (label :text "${round(EWW_RAM.used_mem/1024, 0)} | ${round(EWW_RAM.total_mem/1024, 0)}mb " + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false) + (label :text "${round(EWW_RAM.free_mem/1024,0)}mb free" + :halign "start" + :class "sys_text_mem_sub" + :limit-width 22 + :show_truncated false + :wrap false))))) + +(defwidget cal [] + (box :class "cal" :orientation "v" + (box :class "cal-in" + (calendar :class "cal" + ; :onclick "echo {} is selected >> /home/sahin/caltest" + :show-day-names true + :show-heading true + :show-details true + :show-week-numbers true + )))) + +(defwindow calendar + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "270px" + :height "60px") + (cal)) + + + +(defwidget audio [] + (box :class "audio-box" :orientation "v" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "speaker_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "speaker_text" :text "speaker" :valign "center" :halign "left" ) + (box :class "speaker_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value volume_percent + :space-evenly "false" + :orientation "h" + :onchange "amixer -D pulse sset Master {}%" + :tooltip "volume on ${volume_percent}%" + :max 100 + :min 0)))) + (label :text "" :class "audio_sep" :halign "center") + (box :halign "v" :space-evenly "false" :hexpand "false" :vexpand "false" + (box :class "mic_icon" :orientation "v") + (box :orientation "v" :halign "center" :vexpand "false" :hexpand "false" + (label :class "mic_text" :text "mic" :valign "center" :halign "left" ) + (box :class "mic_bar" :halign "center" :vexpand "false" :hexpand "false" + (scale :value mic_percent + :space-evenly "false" + :orientation "h" + :tooltip "mic on ${mic_percent}%" + :onchange "amixer -D pulse sset Capture {}%" + :max 100 + :min 0)))))) + +(defwindow audio_ctl + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "280px" + :height "60px") + (audio)) + + +(defwindow system + :geometry (geometry :x "-20px" + :y "7%" + :anchor "top right" + :width "290px" + :height "120px") + (system)) + +;; Music +(defwidget music_pop [] + (box :class "music_pop" :orientation "h" :space-evenly "false" :vexpand "false" :hexpand "false" + (box :class "music_cover_art" :vexpand "false" :hexpand "false" :style "background-image: url('${cover_art}');") + (box :orientation "v" :spacing 20 :space-evenly "false" :vexpand "false" :hexpand "false" + (label :halign "center" :class "music" :wrap "true" :limit-width 13 :text song) + (label :halign "center" :class "music_artist" :wrap "true" :limit-width 15 :text song_artist) + (box :orientation "h" :spacing 15 :halign "center" :space-evenly "false" :vexpand "false" :hexpand "false" + (button :class "music_btn_prev" :onclick "~/.config/eww/bar/scripts/music_info --prev" "") + (button :class "music_btn_play" :onclick "~/.config/eww/bar/scripts/music_info --toggle" song_status) + (button :class "music_btn_next" :onclick "~/.config/eww/bar/scripts/music_info --next" "")) + (box :class "music_bar" :halign "center" :vexpand "false" :hexpand "false" :space-evenly "false" + (scale :onscroll "mpc -q seek {}" :min 0 :active "true" :max 100 :value current_status))))) + + +;; music +(defwindow music_win :stacking "fg" :focusable "false" :screen 1 + :geometry (geometry :x "0" :y "7%" :width 428 :height 104 :anchor "top center") + (music_pop)) + diff --git a/.config/eww/bar/images/mic.png b/.config/eww/bar/images/mic.png new file mode 100644 index 0000000000000000000000000000000000000000..d77f315ac52ee020c5ad466458fda8f2daf09772 GIT binary patch literal 40034 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 ANdN!< literal 0 HcmV?d00001 diff --git a/.config/eww/bar/images/speaker.png b/.config/eww/bar/images/speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..79e005b7b6be6fb60206777ac70bb0bd21cf266a GIT binary patch literal 16246 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 YEY0e5AZ!bGn*{_@)KDn7Z~5f^0iwb?A^-pY literal 0 HcmV?d00001 diff --git a/.config/eww/bar/scripts/battery b/.config/eww/bar/scripts/battery new file mode 100755 index 0000000..d2ad310 --- /dev/null +++ b/.config/eww/bar/scripts/battery @@ -0,0 +1,43 @@ +#!/bin/sh + +bat=/sys/class/power_supply/BAT0/ +per="$(cat "$bat/capacity")" + +icon() { + +[ $(cat "$bat/status") = Charging ] && echo "" && exit + +if [ "$per" -gt "90" ]; then + icon="" +elif [ "$per" -gt "80" ]; then + icon="" +elif [ "$per" -gt "70" ]; then + icon="" +elif [ "$per" -gt "60" ]; then + icon="" +elif [ "$per" -gt "50" ]; then + icon="" +elif [ "$per" -gt "40" ]; then + icon="" +elif [ "$per" -gt "30" ]; then + icon="" +elif [ "$per" -gt "20" ]; then + icon="" +elif [ "$per" -gt "10" ]; then + icon="" +elif [ "$per" -gt "0" ]; then + icon="" +else + echo  && exit +fi +echo "$icon" +} + +percent() { +echo $per +} + +[ "$1" = "icon" ] && icon && exit +[ "$1" = "percent" ] && percent && exit +exit + diff --git a/.config/eww/bar/scripts/indicator b/.config/eww/bar/scripts/indicator new file mode 100755 index 0000000..3946cf4 --- /dev/null +++ b/.config/eww/bar/scripts/indicator @@ -0,0 +1,14 @@ +#!/bin/bash + +query=$(xset q | grep -Po "(?:Caps|Num|Scroll)\s+Lock:\s*(\w*)" | grep -Po "(off|on)") + + +result="" +for i in $query +do + [ $i = "off" ] && result+="ﰊ "|| result+="ﰉ " +done + +# somehow results are shown reversed. So i am reversing them here to fix it +echo $result | rev | xargs + diff --git a/.config/eww/bar/scripts/layout b/.config/eww/bar/scripts/layout new file mode 100755 index 0000000..780105f --- /dev/null +++ b/.config/eww/bar/scripts/layout @@ -0,0 +1,9 @@ +#!/bin/bash +xprop -spy -root _XKB_RULES_NAMES | while read -r line; do + variant=$(echo $line | cut -d',' -f4 | tr -d '"') + if [[ "$variant" == " cdhpt" ]]; then + echo "" + else + echo "" + fi +done diff --git a/.config/eww/bar/scripts/music_info b/.config/eww/bar/scripts/music_info new file mode 100755 index 0000000..ffafe87 --- /dev/null +++ b/.config/eww/bar/scripts/music_info @@ -0,0 +1,98 @@ +#!/bin/bash +# scripts by adi1090x + +## Get data +STATUS="$(mpc status)" +COVER="/tmp/.music_cover.png" +MUSIC_DIR="$HOME/Music" + +## Get status +get_status() { + if [[ $STATUS == *"[playing]"* ]]; then + echo "" + else + echo "奈" + fi +} + +## Get song +get_song() { + song=`mpc -f %title% current` + if [[ -z "$song" ]]; then + echo "Offline" + else + echo "$song" + fi +} + +## Get artist +get_artist() { + artist=`mpc -f %artist% current` + if [[ -z "$artist" ]]; then + echo "" + else + echo "$artist" + fi +} + +## Get time +get_time() { + time=`mpc status | grep "%)" | awk '{print $4}' | tr -d '(%)'` + if [[ -z "$time" ]]; then + echo "0" + else + echo "$time" + fi +} +get_ctime() { + ctime=`mpc status | grep "#" | awk '{print $3}' | sed 's|/.*||g'` + if [[ -z "$ctime" ]]; then + echo "0:00" + else + echo "$ctime" + fi +} +get_ttime() { + ttime=`mpc -f %time% current` + if [[ -z "$ttime" ]]; then + echo "0:00" + else + echo "$ttime" + fi +} + +## Get cover +get_cover() { + ffmpeg -i "${MUSIC_DIR}/$(mpc current -f %file%)" "${COVER}" -y &> /dev/null + STATUS=$? + + # Check if the file has a embbeded album art + if [ "$STATUS" -eq 0 ];then + echo "$COVER" + else + echo "images/music.png" + fi +} + +## Execute accordingly +if [[ "$1" == "--song" ]]; then + get_song +elif [[ "$1" == "--artist" ]]; then + get_artist +elif [[ "$1" == "--status" ]]; then + get_status +elif [[ "$1" == "--time" ]]; then + get_time +elif [[ "$1" == "--ctime" ]]; then + get_ctime +elif [[ "$1" == "--ttime" ]]; then + get_ttime +elif [[ "$1" == "--cover" ]]; then + get_cover +elif [[ "$1" == "--toggle" ]]; then + mpc -q toggle +elif [[ "$1" == "--next" ]]; then + { mpc -q next; get_cover; } +elif [[ "$1" == "--prev" ]]; then + { mpc -q prev; get_cover; } +fi diff --git a/.config/eww/bar/scripts/pop b/.config/eww/bar/scripts/pop new file mode 100755 index 0000000..ced6877 --- /dev/null +++ b/.config/eww/bar/scripts/pop @@ -0,0 +1,89 @@ +#!/bin/bash + +calendar() { +LOCK_FILE="$HOME/.cache/eww-calendar.lock" +EWW_BIN="eww" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open calendar +} + +# Open widgets +if [[ ! -f "$LOCK_FILE" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system music_win audio_ctl + touch "$LOCK_FILE" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close calendar + rm "$LOCK_FILE" && echo "closed" +fi +} + + +system() { +LOCK_FILE_MEM="$HOME/.cache/eww-system.lock" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open system +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_MEM" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close calendar music_win audio_ctl + touch "$LOCK_FILE_MEM" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close system + rm "$LOCK_FILE_MEM" && echo "closed" +fi +} + + +music() { +LOCK_FILE_SONG="$HOME/.cache/eww-song.lock" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open music_win +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_SONG" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar + touch "$LOCK_FILE_SONG" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close music_win + rm "$LOCK_FILE_SONG" && echo "closed" +fi +} + + + +audio() { +LOCK_FILE_AUDIO="$HOME/.cache/eww-audio.lock" + +run() { + ${EWW_BIN} -c $HOME/.config/eww/bar open audio_ctl +} + +# Open widgets +if [[ ! -f "$LOCK_FILE_AUDIO" ]]; then + ${EWW_BIN} -c $HOME/.config/eww/bar close system calendar music + touch "$LOCK_FILE_AUDIO" + run && echo "ok good!" +else + ${EWW_BIN} -c $HOME/.config/eww/bar close audio_ctl + rm "$LOCK_FILE_AUDIO" && echo "closed" +fi +} + + +if [ "$1" = "calendar" ]; then +calendar +elif [ "$1" = "system" ]; then +system +elif [ "$1" = "music" ]; then +music +elif [ "$1" = "audio" ]; then +audio +fi diff --git a/.config/eww/bar/scripts/qtile b/.config/eww/bar/scripts/qtile new file mode 100755 index 0000000..ad8e24c --- /dev/null +++ b/.config/eww/bar/scripts/qtile @@ -0,0 +1,12 @@ +#!/bin/bash + +case "$1" in + switch) qtile cmd-obj -o group $2 -f toscreen + ;; + restart) qtile cmd-obj -o cmd -f restart + ;; + shutdown) qtile cmd-obj -o cmd -f shutdown + ;; +esac + + diff --git a/.config/eww/bar/scripts/wifi b/.config/eww/bar/scripts/wifi new file mode 100755 index 0000000..024994d --- /dev/null +++ b/.config/eww/bar/scripts/wifi @@ -0,0 +1,26 @@ +#!/bin/bash + +status=$(nmcli g | grep -oE "disconnected") +essid=$(nmcli c | grep wlan0 | awk '{print ($1)}') + +if [ $status ] ; then + icon="" + text="" + col="#575268" + +else + icon="" + text="${essid}" + col="#a1bdce" +fi + + + +if [[ "$1" == "--COL" ]]; then + echo $col +elif [[ "$1" == "--ESSID" ]]; then + echo $text +elif [[ "$1" == "--ICON" ]]; then + echo $icon +fi + diff --git a/.config/eww/bar/scripts/workspace b/.config/eww/bar/scripts/workspace new file mode 100755 index 0000000..ca6747a --- /dev/null +++ b/.config/eww/bar/scripts/workspace @@ -0,0 +1,6 @@ +#!/bin/bash +dir=`dirname $0` +python3 $dir/workspaces.py +tail -F -n1 ~/.cache/workspaces | while read -r; do + python3 $dir/workspaces.py +done diff --git a/.config/eww/bar/scripts/workspaces.py b/.config/eww/bar/scripts/workspaces.py new file mode 100644 index 0000000..082c3c5 --- /dev/null +++ b/.config/eww/bar/scripts/workspaces.py @@ -0,0 +1,53 @@ +from libqtile.command.client import CommandClient +c = CommandClient() + + +groups = {} + +for name, group in c.call('groups').items(): + if name == "scratchpad": + continue + occupied = len(group["windows"]) > 0 + focused = group['screen'] is not None + groups[name] = {"occupied": occupied, "focused": focused} + +output = '(box :class "works" :orientation "h" :spacing 5 :space-evenly "false" ' +for name, prop in groups.items(): + command = f"scripts/qtile switch {name}" + class_ = "0" + focused, occupied = prop['focused'], prop['occupied'] + if focused: + class_ += name * 2 + elif occupied: + class_ += name + + if occupied: + if name == "3": + class_ += " thunderbird" + elif name == "6": + class_ += " twitter" + elif name == "7": + class_ += " firefox" + elif name == "8": + class_ += " twitch" + elif name == "9": + class_ += " discord" + elif name == "0": + class_ += " telegram" + icons = { + "1": "1", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "", + "7": "", + "8": "既", + "9": "ﭮ", + "0": "", + } + icon = icons[name] + output += f'(button :onclick "{command}" :class "{class_}" "{icon}") ' + +output += ')' +print(output) diff --git a/.config/layouts/colemak/cdhpt.xml b/.config/layouts/colemak/cdhpt.xml new file mode 100644 index 0000000..73f870c --- /dev/null +++ b/.config/layouts/colemak/cdhpt.xml @@ -0,0 +1,12 @@ + + + cdhpt + English (Programmer Colemak-DH with Turkish support) + + + + + cdhisopt + English (Programmer Colemak-DH ISO with Turkish support) + + diff --git a/.config/layouts/colemak/colemakdh b/.config/layouts/colemak/colemakdh new file mode 100644 index 0000000..99bfc2f --- /dev/null +++ b/.config/layouts/colemak/colemakdh @@ -0,0 +1,62 @@ +// Colemak-DH (ANSI) symbols for xkb on X.Org Server 7.x +// 2014-10-25 by SteveP, https://colemakmods.github.io/mod-dh/ + +xkb_symbols "cdhpt" { + + name[Group1]= "English (Programmer Colemak-DH with Turkish support)"; + + key { [ grave, asciitilde, dead_tilde, asciitilde ] }; + key { [ at, 1 ] }; + key { [ bracketleft, 2 ] }; + key { [ braceleft, 3 ] }; + key { [ parenleft, 4 ] }; + key { [ plus, 5 ] }; + key { [ equal, 6 ] }; + key { [ parenright, 7 ] }; + key { [ braceright, 8 ] }; + key { [ bracketright, 9 ] }; + key { [ percent, 0 ] }; + key { [ asterisk, numbersign ] }; + key { [ ampersand, exclam ] }; + + key { [ q, Q ] }; + key { [ w, W ] }; + key { [ f, F ] }; + key { [ p, P ] }; + key { [ b, B ] }; + key { [ j, J ] }; + key { [ l, L ] }; + key { [ u, U, udiaeresis, Udiaeresis ] }; + key { [ y, Y ] }; + key { [ semicolon, colon ] }; + key { [ minus, underscore ] }; + key { [ dollar, asciicircum ] }; + key { [ backslash, bar ] }; + + key { [ a, A ] }; + key { [ r, R ] }; + key { [ s, S, scedilla, Scedilla ] }; + key { [ t, T ] }; + key { [ g, G, gbreve, Gbreve ] }; + key { [ m, M ] }; + key { [ n, N ] }; + key { [ e, E ] }; + key { [ i, I, idotless, Iabovedot ] }; + key { [ o, O, odiaeresis, Odiaeresis ] }; + key { [ apostrophe, quotedbl ] }; + + key { [ z, Z ] }; + key { [ x, X ] }; + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ d, D ] }; + key { [ v, V ] } ; + key { [ k, K ] }; + key { [ h, H ] }; + key { [ comma, less ] }; + key { [ period, greater ] }; + key { [ slash, question ] }; + + key { [ space, space, space, nobreakspace ] }; + + include "level3(ralt_switch)" +}; diff --git a/.config/layouts/colemak/colemakdhiso b/.config/layouts/colemak/colemakdhiso new file mode 100644 index 0000000..86205b7 --- /dev/null +++ b/.config/layouts/colemak/colemakdhiso @@ -0,0 +1,38 @@ +// Colemak-DH (ISO) symbols for xkb on X.Org Server 7.x +// https://colemakmods.github.io/mod-dh/ + +xkb_symbols "cdhisopt" { + + include "us(colemak_dh)" + name[Group1]= "English (Programmer Colemak-DH ISO with Turkish support)"; + + key { [ grave, asciitilde, dead_tilde, asciitilde ] }; + key { [ at, 1 ] }; + key { [ bracketleft, 2 ] }; + key { [ braceleft, 3 ] }; + key { [ parenleft, 4 ] }; + key { [ plus, 5 ] }; + key { [ equal, 6 ] }; + key { [ parenright, 7 ] }; + key { [ braceright, 8 ] }; + key { [ bracketright, 9 ] }; + key { [ percent, 0 ] }; + key { [ asterisk, numbersign ] }; + key { [ ampersand, exclam ] }; + + key { [ u, U, udiaeresis, Udiaeresis ] }; + key { [ minus, underscore ] }; + key { [ m, M, Left, Left ] }; + key { [ n, N, Down, Down ] }; + key { [ e, E, Up, Up ] }; + key { [ i, I, Right, Right ] }; + key { [ apostrophe, quotedbl, idotless, Iabovedot ] }; + key { [ s, S, scedilla, Scedilla ] }; + key { [ g, G, gbreve, Gbreve ] }; + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ o, O, odiaeresis, Odiaeresis ] }; + key { [ dollar, asciicircum ] }; + key { [ backslash, bar, asciitilde, brokenbar] }; + + include "level3(ralt_switch)" +}; diff --git a/.config/layouts/dvorak/rdvpt b/.config/layouts/dvorak/rdvpt new file mode 100644 index 0000000..5a20603 --- /dev/null +++ b/.config/layouts/dvorak/rdvpt @@ -0,0 +1,61 @@ +// based on Michael Paulson's poor ideas. + +partial alphanumeric_keys +xkb_symbols "rdvpt" { + + include "level3(ralt_switch)" + name[Group1]= "English (Real Programmers Dvorak)"; + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + + key { [ at, 1 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ bracketleft, 2 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ braceleft, 3 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ parenleft, 4 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ plus, 5 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ equal, 6, dead_circumflex, dead_circumflex ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ parenright, 7 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ braceright, 8 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ bracketright, 9, dead_grave] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC"}; + key { [ percent, 0 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ asterisk, numbersign ] }; + key { [ ampersand , exclam ] }; + + key { [ semicolon, colon, dead_acute, dead_diaeresis ] }; + key { [ comma, less, dead_cedilla, dead_caron ] }; + key { [ period, greater, dead_abovedot, periodcentered ] }; + key { [ p, P ] }; + key { [ y, Y ] }; + key { [ f, F ] }; + key { [ g, G, gbreve, Gbreve ] }; + key { [ c, C ,ccedilla, Ccedilla ] }; + key { [ r, R ] }; + key { [ l, L ] }; + key { [ slash, question ] }; + key { [ dollar, asciicircum] }; + + key { [ a, A ] }; + key { [ o, O,odiaeresis, Odiaeresis ] }; + key { [ e, E ] }; + key { [ u, U, udiaeresis, Udiaeresis ] }; + key { [ i, I, idotless,Iabovedot ] }; + key { [ d, D ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ n, N ] }; + key { [ s, S,scedilla, Scedilla ] }; + key { [ minus, underscore ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + + key { [ apostrophe, quotedbl, dead_ogonek, dead_doubleacute ] }; + key { [ q, Q ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ x, X ] }; + key { [ b, B, grave,dead_grave ] }; + key { [ m, M ] }; + key { [ w, W ] }; + key { [ v, V ] }; + key { [ z, Z ] }; + + key { [ backslash, bar ] }; +}; diff --git a/.config/layouts/dvorak/rdvpt.map b/.config/layouts/dvorak/rdvpt.map new file mode 100644 index 0000000..dbcb043 --- /dev/null +++ b/.config/layouts/dvorak/rdvpt.map @@ -0,0 +1,100 @@ +! Real Programmer's Dvorak keymap with Turkish support +! +! Original from: http://www.kaufmann.no/roland/dvorak/ +! This file edited by: Merlin Dou (11 March 2014) +! +! This file is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 2 of the License, or +! (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program; if not, write to the Free Software +! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +! +keymaps 0-2,4-6,8-9,12 +alt_is_meta +include "linux-with-two-alt-keys.inc" +strings as usual +! -------------------------------------------------------------------------- +! Row 1 +! -------------------------------------------------------------------------- +keycode 1 = Escape +! -------------------------------------------------------------------------- +! Row 2 +! -------------------------------------------------------------------------- + +keycode 41 = grave asciitilde +keycode 2 = at 1 +keycode 3 = bracketleft 2 +keycode 4 = braceleft 3 +keycode 5 = parenleft 4 +keycode 6 = plus 5 +keycode 7 = equal 6 +keycode 8 = parenright 7 +keycode 9 = braceright 8 +keycode 10 = bracketright 9 +keycode 11 = percent 0 +keycode 12 = asterisk numbersign +keycode 13 = ampersand exclam +keycode 14 = Delete +! -------------------------------------------------------------------------- +! Row 3 +! -------------------------------------------------------------------------- +keycode 15 = Tab +keycode 16 = semicolon colon +keycode 17 = comma less +keycode 18 = period greater +keycode 19 = p +keycode 20 = y +keycode 21 = f +keycode 22 = g +keycode 23 = c +keycode 24 = r +keycode 25 = l +keycode 26 = slash question +keycode 27 = dollar asciicircum +keycode 28 = Return +! -------------------------------------------------------------------------- +! Row 4 +! -------------------------------------------------------------------------- +keycode 58 = Caps_Lock +keycode 30 = a +keycode 31 = o +keycode 32 = e +keycode 33 = u +keycode 34 = i +keycode 35 = d +keycode 36 = h +keycode 37 = t +keycode 38 = n +keycode 39 = s +keycode 40 = minus underscore +keycode 43 = backslash bar +! -------------------------------------------------------------------------- +! Row 5 +! -------------------------------------------------------------------------- +keycode 42 = Shift +keycode 44 = apostrophe quotedbl +keycode 45 = q +keycode 46 = j +keycode 47 = k +keycode 48 = x +keycode 49 = b +keycode 50 = m +keycode 51 = w +keycode 52 = v +keycode 53 = z +keycode 54 = Shift +! -------------------------------------------------------------------------- +! Row 6 +! -------------------------------------------------------------------------- +keycode 29 = Control +keycode 56 = Alt +keycode 57 = space +keycode 97 = Control diff --git a/.config/layouts/dvorak/rdvpt.xml b/.config/layouts/dvorak/rdvpt.xml new file mode 100644 index 0000000..b998cec --- /dev/null +++ b/.config/layouts/dvorak/rdvpt.xml @@ -0,0 +1,6 @@ + + + rdvpt + English (real programmer Dvorak with Turkish characters) + + diff --git a/.config/mpd/mpd.conf b/.config/mpd/mpd.conf new file mode 100644 index 0000000..541f581 --- /dev/null +++ b/.config/mpd/mpd.conf @@ -0,0 +1,426 @@ +# 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" +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" +playlist_directory "~/.config/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" + +db_file "~/.config/mpd/database" +# These settings are the locations for the daemon log files for the daemon. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog. +# +# If you use systemd, do not configure a log_file. With systemd, MPD +# defaults to the systemd journal, which is fine. +# +# log_file "~/.mpd/log" +log_file "syslog" + +# 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. +# +# If you use systemd, do not configure a pid_file. +# +# pid_file "~/.mpd/pid" +pid_file "~/.config/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" +state_file "~/.config/mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +#sticker_file "~/.mpd/sticker.sql" +sticker_file "~/.config/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 than 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" +# +# Suppress all messages below the given threshold. Use "verbose" for +# troubleshooting. Available setting arguments are "notice", "info", "verbose", +# "warning" and "error". +# +#log_level "notice" +# +# 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" +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 ####################################################################### +# +# An example of a database section instead of the old 'db_file' setting. +# It enables mounting other storages into the music directory. +# +#database { +# plugin "simple" +# path "~/.local/share/mpd/db +# cache_directory "~/.local/share/mpd/cache" +#} +# +# An example of database config for a sattelite setup +# +#music_directory "nfs://fileserver.local/srv/mp3" +#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 +## media_role "media_role" #optional +#} +# +# 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 a wasapi output (Windows multimedia API). +# +#audio_output { +# type "wasapi" +# name "My WASAPI output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## Exclusive mode blocks all other audio source, and get best audio quality without resampling. +## exclusive "no" # optional +## Enumerate all devices in log. +## enumerate "no" # 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/mpv/input.conf b/.config/mpv/input.conf new file mode 100644 index 0000000..f903b7a --- /dev/null +++ b/.config/mpv/input.conf @@ -0,0 +1,180 @@ +# mpv keybindings +# +# Location of user-defined bindings: ~/.config/mpv/input.conf +# + +# Lines starting with # are comments. Use SHARP to assign the # key. +# Copy this file and uncomment and edit the bindings you want to change. +# +# List of commands and further details: DOCS/man/input.rst +# List of special keys: --input-keylist +# Keybindings testing mode: mpv --input-test --force-window --idle +# +# Use 'ignore' to unbind a key fully (e.g. 'ctrl+a ignore'). +# +# Strings need to be quoted and escaped: +# KEY show-text "This is a single backslash: \\ and a quote: \" !" +# +# You can use modifier-key combinations like Shift+Left or Ctrl+Alt+x with +# the modifiers Shift, Ctrl, Alt and Meta (may not work on the terminal). +# +# The default keybindings are hardcoded into the mpv binary. +# You can disable them completely with: --no-input-default-bindings + +# Developer note: +# On compilation, this file is baked into the mpv binary, and all lines are +# uncommented (unless '#' is followed by a space) - thus this file defines the +# default key bindings. + +# If this is enabled, treat all the following bindings as default. +#default-bindings start + +#MBTN_LEFT ignore # don't do anything +#MBTN_LEFT_DBL cycle fullscreen # toggle fullscreen +#MBTN_RIGHT cycle pause # toggle pause/playback mode +#MBTN_BACK playlist-prev # skip to the previous file +#MBTN_FORWARD playlist-next # skip to the next file + +# Mouse wheels, touchpad or other input devices that have axes +# if the input devices supports precise scrolling it will also scale the +# numeric value accordingly +#WHEEL_UP seek 10 # seek 10 seconds forward +#WHEEL_DOWN seek -10 # seek 10 seconds backward +#WHEEL_LEFT add volume -2 +#WHEEL_RIGHT add volume 2 + +## Seek units are in seconds, but note that these are limited by keyframes +#RIGHT seek 5 # seek 5 seconds forward +#LEFT seek -5 # seek 5 seconds backward +#UP seek 60 # seek 1 minute forward +#DOWN seek -60 # seek 1 minute backward +# Do smaller, always exact (non-keyframe-limited), seeks with shift. +# Don't show them on the OSD (no-osd). +#Shift+RIGHT no-osd seek 1 exact # seek exactly 1 second forward +#Shift+LEFT no-osd seek -1 exact # seek exactly 1 second backward +#Shift+UP no-osd seek 5 exact # seek exactly 5 seconds forward +#Shift+DOWN no-osd seek -5 exact # seek exactly 5 seconds backward +#Ctrl+LEFT no-osd sub-seek -1 # seek to the previous subtitle +#Ctrl+RIGHT no-osd sub-seek 1 # seek to the next subtitle +#Ctrl+Shift+LEFT sub-step -1 # change subtitle timing such that the previous subtitle is displayed +#Ctrl+Shift+RIGHT sub-step 1 # change subtitle timing such that the next subtitle is displayed +#Alt+left add video-pan-x 0.1 # move the video right +#Alt+right add video-pan-x -0.1 # move the video left +#Alt+up add video-pan-y 0.1 # move the video down +#Alt+down add video-pan-y -0.1 # move the video up +#Alt++ add video-zoom 0.1 # zoom in +#Alt+- add video-zoom -0.1 # zoom out +#Alt+BS set video-zoom 0 ; set video-pan-x 0 ; set video-pan-y 0 # reset zoom and pan settings +#PGUP add chapter 1 # seek to the next chapter +#PGDWN add chapter -1 # seek to the previous chapter +#Shift+PGUP seek 600 # seek 10 minutes forward +#Shift+PGDWN seek -600 # seek 10 minutes backward +#[ multiply speed 1/1.1 # decrease the playback speed +#] multiply speed 1.1 # increase the playback speed +< multiply speed 1/1.5 +> multiply speed 1.5 +#BS set speed 1.0 # reset the speed to normal +#Shift+BS revert-seek # undo the previous (or marked) seek +#Shift+Ctrl+BS revert-seek mark # mark the position for revert-seek +#q quit +#Q quit-watch-later # exit and remember the playback position +#q {encode} quit 4 +#ESC set fullscreen no # leave fullscreen +#ESC {encode} quit 4 +#p cycle pause # toggle pause/playback mode +#. frame-step # advance one frame and pause +#, frame-back-step # go back by one frame and pause +#SPACE cycle pause # toggle pause/playback mode +#> playlist-next # skip to the next file +#ENTER playlist-next # skip to the next file +#< playlist-prev # skip to the previous file +#O no-osd cycle-values osd-level 3 1 # toggle displaying the OSD on user interaction or always +#o show-progress # show playback progress +#P show-progress # show playback progress +#i script-binding stats/display-stats # display information and statistics +#I script-binding stats/display-stats-toggle # toggle displaying information and statistics +#` script-binding console/enable # open the console +#z add sub-delay -0.1 # shift subtitles 100 ms earlier +#Z add sub-delay +0.1 # delay subtitles by 100 ms +#x add sub-delay +0.1 # delay subtitles by 100 ms +#ctrl++ add audio-delay 0.100 # change audio/video sync by delaying the audio +#ctrl+- add audio-delay -0.100 # change audio/video sync by shifting the audio earlier +#Shift+g add sub-scale +0.1 # increase the subtitle font size +#Shift+f add sub-scale -0.1 # decrease the subtitle font size +#9 add volume -2 +#/ add volume -2 +#0 add volume 2 +#* add volume 2 +#m cycle mute # toggle mute +#1 add contrast -1 +#2 add contrast 1 +#3 add brightness -1 +#4 add brightness 1 +#5 add gamma -1 +#6 add gamma 1 +#7 add saturation -1 +#8 add saturation 1 +#Alt+0 set current-window-scale 0.5 # halve the window size +#Alt+1 set current-window-scale 1.0 # reset the window size +#Alt+2 set current-window-scale 2.0 # double the window size +#d cycle deinterlace # toggle the deinterlacing filter +#r add sub-pos -1 # move subtitles up +#R add sub-pos +1 # move subtitles down +#t add sub-pos +1 # move subtitles down +#v cycle sub-visibility # hide or show the subtitles +#Alt+v cycle secondary-sub-visibility # hide or show the secondary subtitles +#V cycle sub-ass-vsfilter-aspect-compat # toggle stretching SSA/ASS subtitles with anamorphic videos to match the historical renderer +#u cycle-values sub-ass-override "force" "no" # toggle overriding SSA/ASS subtitle styles with the normal styles +#j cycle sub # switch subtitle track +#J cycle sub down # switch subtitle track backwards +#SHARP cycle audio # switch audio track +#_ cycle video # switch video track +#T cycle ontop # toggle placing the video on top of other windows +#f cycle fullscreen # toggle fullscreen +#s screenshot # take a screenshot of the video in its original resolution with subtitles +#S screenshot video # take a screenshot of the video in its original resolution without subtitles +#Ctrl+s screenshot window # take a screenshot of the window with OSD and subtitles +#Alt+s screenshot each-frame # automatically screenshot every frame; issue this command again to stop taking screenshots +#w add panscan -0.1 # decrease panscan +#W add panscan +0.1 # shrink black bars by cropping the video +#e add panscan +0.1 # shrink black bars by cropping the video +#A cycle-values video-aspect-override "16:9" "4:3" "2.35:1" "-1" # cycle the video aspect ratio ("-1" is the container aspect) +#POWER quit +#PLAY cycle pause # toggle pause/playback mode +#PAUSE cycle pause # toggle pause/playback mode +#PLAYPAUSE cycle pause # toggle pause/playback mode +#PLAYONLY set pause no # unpause +#PAUSEONLY set pause yes # pause +#STOP quit +#FORWARD seek 60 # seek 1 minute forward +#REWIND seek -60 # seek 1 minute backward +#NEXT playlist-next # skip to the next file +#PREV playlist-prev # skip to the previous file +#VOLUME_UP add volume 2 +#VOLUME_DOWN add volume -2 +#MUTE cycle mute # toggle mute +#CLOSE_WIN quit +#CLOSE_WIN {encode} quit 4 +#ctrl+w quit +#E cycle edition # switch edition +#l ab-loop # set/clear A-B loop points +#L cycle-values loop-file "inf" "no" # toggle infinite looping +#ctrl+c quit 4 +#DEL script-binding osc/visibility # cycle OSC visibility between never, auto (mouse-move) and always +#ctrl+h cycle-values hwdec "auto" "no" # toggle hardware decoding +#F8 show-text ${playlist} # show the playlist +#F9 show-text ${track-list} # show the list of video, audio and sub tracks + +# +# Legacy bindings (may or may not be removed in the future) +# +! add chapter -1 # seek to the previous chapter +@ add chapter 1 # seek to the next chapter + +# +# Not assigned by default +# (not an exhaustive list of unbound commands) +# + +# ? cycle sub-forced-only # toggle DVD forced subs +# ? stop # stop playback (quit or enter idle mode) diff --git a/.config/mpv/mpv.conf b/.config/mpv/mpv.conf new file mode 100644 index 0000000..9e8862e --- /dev/null +++ b/.config/mpv/mpv.conf @@ -0,0 +1,3 @@ +script-opts=ytdl_hook-ytdl_path=/usr/bin/yt-dlp +ytdl-format=bestvideo[height<=?480]+bestaudio/best + diff --git a/.config/mpv/scripts/autload.lua b/.config/mpv/scripts/autload.lua new file mode 100644 index 0000000..62b55c0 --- /dev/null +++ b/.config/mpv/scripts/autload.lua @@ -0,0 +1,212 @@ +-- This script automatically loads playlist entries before and after the +-- the currently played file. It does so by scanning the directory a file is +-- located in when starting playback. It sorts the directory entries +-- alphabetically, and adds entries before and after the current file to +-- the internal playlist. (It stops if it would add an already existing +-- playlist entry at the same position - this makes it "stable".) +-- Add at most 5000 * 2 files when starting a file (before + after). +--[[ +To configure this script use file autoload.conf in directory script-opts (the "script-opts" +directory must be in the mpv configuration directory, typically ~/.config/mpv/). + +Example configuration would be: + +disabled=no +images=no +videos=yes +audio=yes +ignore_hidden=yes + +--]] MAXENTRIES = 5000 + +local msg = require 'mp.msg' +local options = require 'mp.options' +local utils = require 'mp.utils' + +o = { + disabled = false, + images = true, + videos = true, + audio = true, + ignore_hidden = true +} +options.read_options(o) + +function Set(t) + local set = {} + for _, v in pairs(t) do set[v] = true end + return set +end + +function SetUnion(a, b) + local res = {} + for k in pairs(a) do res[k] = true end + for k in pairs(b) do res[k] = true end + return res +end + +EXTENSIONS_VIDEO = Set { + 'mkv', 'avi', 'mp4', 'ogv', 'webm', 'rmvb', 'flv', 'wmv', 'mpeg', 'mpg', + 'm4v', '3gp' +} + +EXTENSIONS_AUDIO = Set { + 'mp3', 'wav', 'ogm', 'flac', 'm4a', 'wma', 'ogg', 'opus' +} + +EXTENSIONS_IMAGES = Set { + 'jpg', 'jpeg', 'png', 'tif', 'tiff', 'gif', 'webp', 'svg', 'bmp' +} + +EXTENSIONS = Set {} +if o.videos then EXTENSIONS = SetUnion(EXTENSIONS, EXTENSIONS_VIDEO) end +if o.audio then EXTENSIONS = SetUnion(EXTENSIONS, EXTENSIONS_AUDIO) end +if o.images then EXTENSIONS = SetUnion(EXTENSIONS, EXTENSIONS_IMAGES) end + +function add_files_at(index, files) + index = index - 1 + local oldcount = mp.get_property_number('playlist-count', 1) + for i = 1, #files do + mp.commandv('loadfile', files[i], 'append') + mp.commandv('playlist-move', oldcount + i - 1, index + i - 1) + end +end + +function get_extension(path) + match = string.match(path, '%.([^%.]+)$') + if match == nil then + return 'nomatch' + else + return match + end +end + +table.filter = function(t, iter) + for i = #t, 1, -1 do if not iter(t[i]) then table.remove(t, i) end end +end + +-- splitbynum and alnumcomp from alphanum.lua (C) Andre Bogus +-- Released under the MIT License +-- http://www.davekoelle.com/files/alphanum.lua + +-- split a string into a table of number and string values +function splitbynum(s) + local result = {} + for x, y in (s or ''):gmatch('(%d*)(%D*)') do + if x ~= '' then table.insert(result, tonumber(x)) end + if y ~= '' then table.insert(result, y) end + end + return result +end + +function clean_key(k) + k = (' ' .. k .. ' '):gsub('%s+', ' '):sub(2, -2):lower() + return splitbynum(k) +end + +-- compare two strings +function alnumcomp(x, y) + local xt, yt = clean_key(x), clean_key(y) + for i = 1, math.min(#xt, #yt) do + local xe, ye = xt[i], yt[i] + if type(xe) == 'string' then + ye = tostring(ye) + elseif type(ye) == 'string' then + xe = tostring(xe) + end + if xe ~= ye then return xe < ye end + end + return #xt < #yt +end + +local autoloaded = nil + +function find_and_add_entries() + local path = mp.get_property('path', '') + local dir, filename = utils.split_path(path) + msg.trace(('dir: %s, filename: %s'):format(dir, filename)) + if o.disabled then + msg.verbose('stopping: autoload disabled') + return + elseif #dir == 0 then + msg.verbose('stopping: not a local path') + return + end + + local pl_count = mp.get_property_number('playlist-count', 1) + -- check if this is a manually made playlist + if (pl_count > 1 and autoloaded == nil) or + (pl_count == 1 and EXTENSIONS[string.lower(get_extension(filename))] == + nil) then + msg.verbose('stopping: manually made playlist') + return + else + autoloaded = true + end + + local pl = mp.get_property_native('playlist', {}) + local pl_current = mp.get_property_number('playlist-pos-1', 1) + msg.trace(('playlist-pos-1: %s, playlist: %s'):format(pl_current, + utils.to_string(pl))) + + local files = utils.readdir(dir, 'files') + if files == nil then + msg.verbose('no other files in directory') + return + end + table.filter(files, function(v, k) + -- The current file could be a hidden file, ignoring it doesn't load other + -- files from the current directory. + if (o.ignore_hidden and not (v == filename) and string.match(v, '^%.')) then + return false + end + local ext = get_extension(v) + if ext == nil then return false end + return EXTENSIONS[string.lower(ext)] + end) + table.sort(files, alnumcomp) + + if dir == '.' then dir = '' end + + -- Find the current pl entry (dir+"/"+filename) in the sorted dir list + local current + for i = 1, #files do + if files[i] == filename then + current = i + break + end + end + if current == nil then return end + msg.trace('current file position in files: ' .. current) + + local append = {[-1] = {}, [1] = {}} + for direction = -1, 1, 2 do -- 2 iterations, with direction = -1 and +1 + for i = 1, MAXENTRIES do + local file = files[current + i * direction] + local pl_e = pl[pl_current + i * direction] + if file == nil or file[1] == '.' then break end + + local filepath = dir .. file + if pl_e then + -- If there's a playlist entry, and it's the same file, stop. + msg.trace(pl_e.filename .. ' == ' .. filepath .. ' ?') + if pl_e.filename == filepath then break end + end + + if direction == -1 then + if pl_current == 1 then -- never add additional entries in the middle + msg.info('Prepending ' .. file) + table.insert(append[-1], 1, filepath) + end + else + msg.info('Adding ' .. file) + table.insert(append[1], filepath) + end + end + end + + add_files_at(pl_current + 1, append[1]) + add_files_at(pl_current, append[-1]) +end + +mp.register_event('start-file', find_and_add_entries) diff --git a/.config/mpv/scripts/mpv_chapters.js b/.config/mpv/scripts/mpv_chapters.js new file mode 100644 index 0000000..c89b8c3 --- /dev/null +++ b/.config/mpv/scripts/mpv_chapters.js @@ -0,0 +1,173 @@ +"use strict"; + +//display chapter on osd and easily switch between chapters by click on title of chapter +mp.register_event("file-loaded", init); +mp.observe_property("chapter", "number", onChapterChange); +mp.observe_property("chapter-list/count", "number", init); +var options = { + font_size: 16, + font_color: "00FFFF", + border_size: 1.0, + border_color: "000000", + font_color_currentChapter: "C27F1B", +}; +var playinfo = { + chapters: [], //array + chaptercount: "", // int + assinterface: [], //array(deprecated, use single assdraw instead) + currentChapter: "", //int + loaded:false, +}; +var toggle_switch = false; +var assdraw = mp.create_osd_overlay("ass-events"); +var autohidedelay = mp.get_property_number("cursor-autohide"); +//function +function init() { + playinfo.chapters = getChapters(); + playinfo.chaptercount = playinfo.chapters.length; + if(playinfo.chaptercount == 0){ + return; + } + while (playinfo.chaptercount * options.font_size > 1000 / 1.5) { + options.font_size = options.font_size - 1; + } + drawChapterList(); + mp.msg.info("initiated"); + playinfo.loaded = true; +} +function getChapters() { + var chapterCount = mp.get_property("chapter-list/count"); + if (chapterCount === 0) { + return ["null"]; + } else { + var chaptersArray = []; + for (var index = 0; index < chapterCount; index++) { + var chapterTitle = mp.get_property_native( + "chapter-list/" + index + "/title" + ); + + if (chapterTitle != undefined) { + chaptersArray.push(chapterTitle); + } + } + return chaptersArray; + } +} + +function drawChapterList() { + var resY = 0; + var resX = 0; + var assdrawdata = ""; + function setPos(str, _X, _Y) { + str = str + "{\\pos(" + _X + ", " + _Y + ")}"; + return str; + } + function setborderSize(str) { + str = str + "{\\bord" + options.border_size + "}"; + return str; + } + function setborderColor(str) { + str = str + "{\\3c&H" + options.border_color + "&}"; + return str; + } + function setFontColor(str, index) { + var _color; + if (playinfo.currentChapter == index) { + _color = options.font_color_currentChapter; + } else { + _color = options.font_color; + } + str = str + "{\\c&H" + _color + "&}"; + return str; + } + function setFont(str) { + str = str + "{\\fs" + options.font_size + "}"; + return str; + } + function setEndofmodifiers(str) { + str = str + "{\\p0}"; + return str; + } + function setEndofLine(str) { + str = str + "\n"; + return str; + } + playinfo.chapters.forEach(function (element, index) { + assdrawdata = setPos(assdrawdata, resX, resY); + assdrawdata = setborderSize(assdrawdata); + assdrawdata = setborderColor(assdrawdata); + assdrawdata = setFontColor(assdrawdata, index); + assdrawdata = setFont(assdrawdata); + assdrawdata = setEndofmodifiers(assdrawdata); + assdrawdata = assdrawdata + element; + assdrawdata = setEndofLine(assdrawdata); + resY += options.font_size; + }); + assdraw.data = assdrawdata + +} + +function toggleOverlay() { + if(!playinfo.loaded){ + return; + } + if (!toggle_switch) { + drawChapterList(); + assdraw.update(); + mp.set_property("cursor-autohide", "no"); + toggle_switch = !toggle_switch; + } else { + assdraw.remove(); + mp.set_property("cursor-autohide", autohidedelay); + toggle_switch = !toggle_switch; + } +} + +function onChapterChange() { + playinfo.currentChapter = mp.get_property_native("chapter"); + if (playinfo.currentChapter != undefined) { + drawChapterList(); + } + + if ((playinfo.currentChapter != undefined) & toggle_switch) { + assdraw.update(); + } +} +function pos2chapter(x, y, overallscale) { + var vectical = y / (options.font_size * overallscale); + if(vectical > playinfo.chaptercount){ + return null; + } + var intVectical = Math.floor(vectical); + var lengthofTitleClicked = playinfo.chapters[intVectical].length; + var lengthofTitleClicked_px = + (lengthofTitleClicked * options.font_size) / overallscale; + if (x < lengthofTitleClicked_px) { + return intVectical; + } else { + return null; + } +} +function getOverallScale() { + return mp.get_osd_size().height / 720; +} +function onMBTN_LEFT() { + //get mouse position + if(!playinfo.loaded){ + return; + } + if (toggle_switch) { + var overallscale = getOverallScale(); + var pos = mp.get_mouse_pos(); + var chapterClicked = pos2chapter(pos.x, pos.y, overallscale); + if (chapterClicked != null) { + mp.set_property_native("chapter", chapterClicked); + } + } +} +mp.add_key_binding("TAB", "tab", function () { + toggleOverlay(); +}); +mp.add_key_binding("MBTN_LEFT", "mbtn_left", function () { + onMBTN_LEFT(); +}); diff --git a/.config/mpv/scripts/sponsorblock.lua b/.config/mpv/scripts/sponsorblock.lua new file mode 100644 index 0000000..16999dc --- /dev/null +++ b/.config/mpv/scripts/sponsorblock.lua @@ -0,0 +1,597 @@ +-- sponsorblock.lua +-- +-- This script skips sponsored segments of YouTube videos +-- using data from https://github.com/ajayyy/SponsorBlock +local ON_WINDOWS = package.config:sub(1, 1) ~= '/' + +local options = { + server_address = 'https://sponsor.ajay.app', + + python_path = ON_WINDOWS and 'python' or 'python3', + + -- Categories to fetch + categories = 'sponsor,intro,outro,interaction,selfpromo', + + -- Categories to skip automatically + skip_categories = 'sponsor,intro,outro,interaction,selfpromo', + + -- If true, sponsored segments will only be skipped once + skip_once = true, + + -- Note that sponsored segments may ocasionally be inaccurate if this is turned off + -- see https://blog.ajay.app/voting-and-pseudo-randomness-or-sponsorblock-or-youtube-sponsorship-segment-blocker + local_database = false, + + -- Update database on first run, does nothing if local_database is false + auto_update = true, + + -- How long to wait between local database updates + -- Format: "X[d,h,m]", leave blank to update on every mpv run + auto_update_interval = '6h', + + -- User ID used to submit sponsored segments, leave blank for random + user_id = '', + + -- Name to display on the stats page https://sponsor.ajay.app/stats/ leave blank to keep current name + display_name = '', + + -- Tell the server when a skip happens + report_views = true, + + -- Auto upvote skipped sponsors + auto_upvote = false, + + -- Use sponsor times from server if they're more up to date than our local database + server_fallback = true, + + -- Create chapters at sponsor boundaries for OSC display and manual skipping + make_chapters = true, + + -- Minimum duration for sponsors (in seconds), segments under that threshold will be ignored + min_duration = 1, + + -- Fade audio for smoother transitions + audio_fade = false, + + -- Audio fade step, applied once every 100ms until cap is reached + audio_fade_step = 10, + + -- Audio fade cap + audio_fade_cap = 0, + + -- Fast forward through sponsors instead of skipping + fast_forward = false, + + -- Playback speed modifier when fast forwarding, applied once every second until cap is reached + fast_forward_increase = .2, + + -- Playback speed cap + fast_forward_cap = 2, + + -- Length of the sha256 prefix (3-32) when querying server, 0 to disable + sha256_length = 4, + + -- Pattern for video id in local files, ignored if blank + -- Recommended value for base youtube-dl is "-([%w-_]+)%.[mw][kpe][v4b]m?$" + local_pattern = '', + + -- Legacy option, use skip_categories instead + skip = true +} + +mp.options = require 'mp.options' +mp.options.read_options(options, 'sponsorblock') + +local legacy = mp.command_native_async == nil +if legacy then options.local_database = false end + +local utils = require 'mp.utils' +scripts_dir = mp.find_config_file('scripts') + +local sponsorblock = utils.join_path(scripts_dir, + 'sponsorblock_shared/sponsorblock.py') +local uid_path = utils.join_path(scripts_dir, + 'sponsorblock_shared/sponsorblock.txt') +local database_file = options.local_database and + utils.join_path(scripts_dir, + 'sponsorblock_shared/sponsorblock.db') or + '' +local youtube_id = nil +local ranges = {} +local init = false +local segment = {a = 0, b = 0, progress = 0, first = true} +local retrying = false +local last_skip = {uuid = '', dir = nil} +local speed_timer = nil +local fade_timer = nil +local fade_dir = nil +local volume_before = mp.get_property_number('volume') +local categories = {} +local all_categories = { + 'sponsor', 'intro', 'outro', 'interaction', 'selfpromo', 'music_offtopic' +} +local chapter_cache = {} + +for category in string.gmatch(options.skip_categories, '([^,]+)') do + categories[category] = true +end + +function file_exists(name) + local f = io.open(name, 'r') + if f ~= nil then + io.close(f) + return true + else + return false + end +end + +function t_count(t) + local count = 0 + for _ in pairs(t) do count = count + 1 end + return count +end + +function time_sort(a, b) + if a.time == b.time then return string.match(a.title, 'segment end') end + return a.time < b.time +end + +function parse_update_interval() + local s = options.auto_update_interval + if s == '' then return 0 end -- Interval Disabled + + local num, mod = s:match '^(%d+)([hdm])$' + + if num == nil or mod == nil then + mp.osd_message('[sponsorblock] auto_update_interval ' .. s .. ' is invalid', + 5) + return nil + end + + local time_table = {m = 60, h = 60 * 60, d = 60 * 60 * 24} + + return num * time_table[mod] +end + +function clean_chapters() + local chapters = mp.get_property_native('chapter-list') + local new_chapters = {} + for _, chapter in pairs(chapters) do + if chapter.title ~= 'Preview segment start' and chapter.title ~= + 'Preview segment end' then table.insert(new_chapters, chapter) end + end + mp.set_property_native('chapter-list', new_chapters) +end + +function create_chapter(chapter_title, chapter_time) + local chapters = mp.get_property_native('chapter-list') + local duration = mp.get_property_native('duration') + table.insert(chapters, { + title = chapter_title, + time = (duration == nil or duration > chapter_time) and chapter_time or + duration - .001 + }) + table.sort(chapters, time_sort) + mp.set_property_native('chapter-list', chapters) +end + +function process(uuid, t, new_ranges) + start_time = tonumber(string.match(t, '[^,]+')) + end_time = tonumber(string.sub(string.match(t, ',[^,]+'), 2)) + for o_uuid, o_t in pairs(ranges) do + if (start_time >= o_t.start_time and start_time <= o_t.end_time) or + (o_t.start_time >= start_time and o_t.start_time <= end_time) then + new_ranges[o_uuid] = o_t + return + end + end + category = string.match(t, '[^,]+$') + if categories[category] and end_time - start_time >= options.min_duration then + new_ranges[uuid] = { + start_time = start_time, + end_time = end_time, + category = category, + skipped = false + } + end + if options.make_chapters and not chapter_cache[uuid] then + chapter_cache[uuid] = true + local category_title = (category:gsub('^%l', string.upper):gsub('_', ' ')) + create_chapter(category_title .. ' segment start (' .. + string.sub(uuid, 1, 6) .. ')', start_time) + create_chapter( + category_title .. ' segment end (' .. string.sub(uuid, 1, 6) .. ')', + end_time) + end +end + +function getranges(_, exists, db, more) + if type(exists) == 'table' and exists['status'] == '1' then + if options.server_fallback then + mp.add_timeout(0, function() getranges(true, true, '') end) + else + return mp.osd_message('[sponsorblock] database update failed, gave up') + end + end + if db ~= '' and db ~= database_file then db = database_file end + if exists ~= true and not file_exists(db) then + if not retrying then + mp.osd_message('[sponsorblock] database update failed, retrying...') + retrying = true + end + return update() + end + if retrying then + mp.osd_message('[sponsorblock] database update succeeded') + retrying = false + end + local sponsors + local args = { + options.python_path, sponsorblock, 'ranges', db, options.server_address, + youtube_id, options.categories, tostring(options.sha256_length) + } + if not legacy then + sponsors = mp.command_native({ + name = 'subprocess', + capture_stdout = true, + playback_only = false, + args = args + }) + else + sponsors = utils.subprocess({args = args}) + end + mp.msg.debug('Got: ' .. string.gsub(sponsors.stdout, '[\n\r]', '')) + if not string.match(sponsors.stdout, '^%s*(.*%S)') then return end + if string.match(sponsors.stdout, 'error') then return getranges(true, true) end + local new_ranges = {} + local r_count = 0 + if more then r_count = -1 end + for t in string.gmatch(sponsors.stdout, '[^:%s]+') do + uuid = string.match(t, '([^,]+),[^,]+$') + if ranges[uuid] then + new_ranges[uuid] = ranges[uuid] + else + process(uuid, t, new_ranges) + end + r_count = r_count + 1 + end + local c_count = t_count(ranges) + if c_count == 0 or r_count >= c_count then ranges = new_ranges end +end + +function fast_forward() + if options.fast_forward and options.fast_forward == true then + speed_timer = nil + mp.set_property('speed', 1) + end + local last_speed = mp.get_property_number('speed') + local new_speed = math.min(last_speed + options.fast_forward_increase, + options.fast_forward_cap) + if new_speed <= last_speed then return end + mp.set_property('speed', new_speed) +end + +function fade_audio(step) + local last_volume = mp.get_property_number('volume') + local new_volume = math.max(options.audio_fade_cap, + math.min(last_volume + step, volume_before)) + if new_volume == last_volume then + if step >= 0 then fade_dir = nil end + if fade_timer ~= nil then fade_timer:kill() end + fade_timer = nil + return + end + mp.set_property('volume', new_volume) +end + +function skip_ads(name, pos) + if pos == nil then return end + local sponsor_ahead = false + for uuid, t in pairs(ranges) do + if (options.fast_forward == uuid or not options.skip_once or not t.skipped) and + t.start_time <= pos and t.end_time > pos then + if options.fast_forward == uuid then return end + if options.fast_forward == false then + mp.osd_message('[sponsorblock] ' .. t.category .. ' skipped') + mp.set_property('time-pos', t.end_time) + else + mp.osd_message('[sponsorblock] skipping ' .. t.category) + end + t.skipped = true + last_skip = {uuid = uuid, dir = nil} + if options.report_views or options.auto_upvote then + local args = { + options.python_path, sponsorblock, 'stats', database_file, + options.server_address, youtube_id, uuid, + options.report_views and '1' or '', uid_path, options.user_id, + options.auto_upvote and '1' or '' + } + if not legacy then + mp.command_native_async({ + name = 'subprocess', + playback_only = false, + args = args + }, function() end) + else + utils.subprocess_detached({args = args}) + end + end + if options.fast_forward ~= false then + options.fast_forward = uuid + if speed_timer ~= nil then speed_timer:kill() end + speed_timer = mp.add_periodic_timer(1, fast_forward) + end + return + elseif (not options.skip_once or not t.skipped) and t.start_time <= pos + 1 and + t.end_time > pos + 1 then + sponsor_ahead = true + end + end + if options.audio_fade then + if sponsor_ahead then + if fade_dir ~= false then + if fade_dir == nil then + volume_before = mp.get_property_number('volume') + end + if fade_timer ~= nil then fade_timer:kill() end + fade_dir = false + fade_timer = mp.add_periodic_timer(.1, function() + fade_audio(-options.audio_fade_step) + end) + end + elseif fade_dir == false then + fade_dir = true + if fade_timer ~= nil then fade_timer:kill() end + fade_timer = mp.add_periodic_timer(.1, function() + fade_audio(options.audio_fade_step) + end) + end + end + if options.fast_forward and options.fast_forward ~= true then + options.fast_forward = true + speed_timer:kill() + speed_timer = nil + mp.set_property('speed', 1) + end +end + +function vote(dir) + if last_skip.uuid == '' then + return mp.osd_message( + '[sponsorblock] no sponsors skipped, can\'t submit vote') + end + local updown = dir == '1' and 'up' or 'down' + if last_skip.dir == dir then + return mp.osd_message('[sponsorblock] ' .. updown .. + 'vote already submitted') + end + last_skip.dir = dir + local args = { + options.python_path, sponsorblock, 'stats', database_file, + options.server_address, youtube_id, last_skip.uuid, '', uid_path, + options.user_id, dir + } + if not legacy then + mp.command_native_async({ + name = 'subprocess', + playback_only = false, + args = args + }, function() end) + else + utils.subprocess({args = args}) + end + mp.osd_message('[sponsorblock] ' .. updown .. 'vote submitted') +end + +function update() + mp.command_native_async({ + name = 'subprocess', + playback_only = false, + args = { + options.python_path, sponsorblock, 'update', database_file, + options.server_address + } + }, getranges) +end + +function file_loaded() + local initialized = init + ranges = {} + segment = {a = 0, b = 0, progress = 0, first = true} + last_skip = {uuid = '', dir = nil} + chapter_cache = {} + local video_path = mp.get_property('path', '') + mp.msg.debug('Path: ' .. video_path) + local video_referer = string.match(mp.get_property('http-header-fields', ''), + 'Referer:([^,]+)') or '' + mp.msg.debug('Referer: ' .. video_referer) + + local urls = { + 'https?://youtu%.be/([%w-_]+).*', + 'https?://w?w?w?%.?youtube%.com/v/([%w-_]+).*', '/watch.*[?&]v=([%w-_]+).*', + '/embed/([%w-_]+).*' + } + youtube_id = nil + for i, url in ipairs(urls) do + youtube_id = youtube_id or string.match(video_path, url) or + string.match(video_referer, url) + end + youtube_id = youtube_id or string.match(video_path, options.local_pattern) + + if not youtube_id or string.len(youtube_id) < 11 or + (local_pattern and string.len(youtube_id) ~= 11) then return end + youtube_id = string.sub(youtube_id, 1, 11) + mp.msg.debug('Found YouTube ID: ' .. youtube_id) + init = true + if not options.local_database then + getranges(true, true) + else + local exists = file_exists(database_file) + if exists and options.server_fallback then + getranges(true, true) + mp.add_timeout(0, function() getranges(true, true, '', true) end) + elseif exists then + getranges(true, true) + elseif options.server_fallback then + mp.add_timeout(0, function() getranges(true, true, '') end) + end + end + if initialized then return end + if options.skip then mp.observe_property('time-pos', 'native', skip_ads) end + if options.display_name ~= '' then + local args = { + options.python_path, sponsorblock, 'username', database_file, + options.server_address, youtube_id, '', '', uid_path, options.user_id, + options.display_name + } + if not legacy then + mp.command_native_async({ + name = 'subprocess', + playback_only = false, + args = args + }, function() end) + else + utils.subprocess_detached({args = args}) + end + end + if not options.local_database or + (not options.auto_update and file_exists(database_file)) then return end + + if file_exists(database_file) then + local db_info = utils.file_info(database_file) + local cur_time = os.time(os.date('*t')) + local upd_interval = parse_update_interval() + if upd_interval == nil or os.difftime(cur_time, db_info.mtime) < + upd_interval then return end + end + + update() +end + +function set_segment() + if not youtube_id then return end + local pos = mp.get_property_number('time-pos') + if pos == nil then return end + if segment.progress > 1 then segment.progress = segment.progress - 2 end + if segment.progress == 1 then + segment.progress = 0 + segment.b = pos + mp.osd_message( + '[sponsorblock] segment boundary B set, press again for boundary A', 3) + else + segment.progress = 1 + segment.a = pos + mp.osd_message( + '[sponsorblock] segment boundary A set, press again for boundary B', 3) + end + if options.make_chapters and not segment.first then + local start_time = math.min(segment.a, segment.b) + local end_time = math.max(segment.a, segment.b) + if end_time - start_time ~= 0 and end_time ~= 0 then + clean_chapters() + create_chapter('Preview segment start', start_time) + create_chapter('Preview segment end', end_time) + end + end + segment.first = false +end + +function select_category(selected) + for category in string.gmatch(options.categories, '([^,]+)') do + mp.remove_key_binding('select_category_' .. category) + mp.remove_key_binding('kp_select_category_' .. category) + end + submit_segment(selected) +end + +function submit_segment(category) + if not youtube_id then return end + local start_time = math.min(segment.a, segment.b) + local end_time = math.max(segment.a, segment.b) + if end_time - start_time == 0 or end_time == 0 then + mp.osd_message('[sponsorblock] empty segment, not submitting') + elseif segment.progress <= 1 then + segment.progress = segment.progress + 2 + local category_list = '' + for category_id, category in pairs(all_categories) do + local category_title = (category:gsub('^%l', string.upper):gsub('_', ' ')) + category_list = category_list .. category_id .. ': ' .. category_title .. + '\n' + mp.add_forced_key_binding(tostring(category_id), + 'select_category_' .. category, + function() select_category(category) end) + mp.add_forced_key_binding('KP' .. tostring(category_id), + 'kp_select_category_' .. category, + function() select_category(category) end) + end + mp.osd_message(string.format( + '[sponsorblock] press a number to select category for segment: %.2d:%.2d:%.2d to %.2d:%.2d:%.2d\n\n' .. + category_list .. + '\nyou can press Shift+G again for default (Sponsor) or hide this message with g', + math.floor(start_time / (60 * 60)), + math.floor(start_time / 60 % 60), + math.floor(start_time % 60), + math.floor(end_time / (60 * 60)), + math.floor(end_time / 60 % 60), math.floor(end_time % 60)), + 30) + else + mp.osd_message('[sponsorblock] submitting segment...', 30) + local submit + local args = { + options.python_path, sponsorblock, 'submit', database_file, + options.server_address, youtube_id, tostring(start_time), + tostring(end_time), uid_path, options.user_id, category or 'sponsor' + } + if not legacy then + submit = mp.command_native({ + name = 'subprocess', + capture_stdout = true, + playback_only = false, + args = args + }) + else + submit = utils.subprocess({args = args}) + end + if string.match(submit.stdout, 'success') then + segment = {a = 0, b = 0, progress = 0, first = true} + mp.osd_message('[sponsorblock] segment submitted') + if options.make_chapters then + clean_chapters() + create_chapter('Submitted segment start', start_time) + create_chapter('Submitted segment end', end_time) + end + elseif string.match(submit.stdout, 'error') then + mp.osd_message( + '[sponsorblock] segment submission failed, server may be down. try again', + 5) + elseif string.match(submit.stdout, '502') then + mp.osd_message( + '[sponsorblock] segment submission failed, server is down. try again', + 5) + elseif string.match(submit.stdout, '400') then + mp.osd_message( + '[sponsorblock] segment submission failed, impossible inputs', 5) + segment = {a = 0, b = 0, progress = 0, first = true} + elseif string.match(submit.stdout, '429') then + mp.osd_message( + '[sponsorblock] segment submission failed, rate limited. try again', 5) + elseif string.match(submit.stdout, '409') then + mp.osd_message('[sponsorblock] segment already submitted', 3) + segment = {a = 0, b = 0, progress = 0, first = true} + else + mp.osd_message('[sponsorblock] segment submission failed', 5) + end + end +end + +mp.register_event('file-loaded', file_loaded) +mp.add_key_binding('g', 'set_segment', set_segment) +mp.add_key_binding('G', 'submit_segment', submit_segment) +mp.add_key_binding('h', 'upvote_segment', function() return vote('1') end) +mp.add_key_binding('H', 'downvote_segment', function() return vote('0') end) +-- Bindings below are for backwards compatibility and could be removed at any time +mp.add_key_binding(nil, 'sponsorblock_set_segment', set_segment) +mp.add_key_binding(nil, 'sponsorblock_submit_segment', submit_segment) +mp.add_key_binding(nil, 'sponsorblock_upvote', function() return vote('1') end) +mp.add_key_binding(nil, 'sponsorblock_downvote', function() return vote('0') end) diff --git a/.config/mpv/scripts/sponsorblock_shared/main.lua b/.config/mpv/scripts/sponsorblock_shared/main.lua new file mode 100644 index 0000000..2bbe7a2 --- /dev/null +++ b/.config/mpv/scripts/sponsorblock_shared/main.lua @@ -0,0 +1,3 @@ +-- This is a dummy main.lua +-- required for mpv 0.33 +-- do not delete \ No newline at end of file diff --git a/.config/mpv/scripts/sponsorblock_shared/sponsorblock.py b/.config/mpv/scripts/sponsorblock_shared/sponsorblock.py new file mode 100644 index 0000000..2fdf3d6 --- /dev/null +++ b/.config/mpv/scripts/sponsorblock_shared/sponsorblock.py @@ -0,0 +1,124 @@ +import urllib.request +import urllib.parse +import hashlib +import sqlite3 +import random +import string +import json +import sys +import os + +if sys.argv[1] in ["submit", "stats", "username"]: + if not sys.argv[8]: + if os.path.isfile(sys.argv[7]): + with open(sys.argv[7]) as f: + uid = f.read() + else: + uid = "".join(random.choices(string.ascii_letters + string.digits, k=36)) + with open(sys.argv[7], "w") as f: + f.write(uid) + else: + uid = sys.argv[8] + +opener = urllib.request.build_opener() +opener.addheaders = [("User-Agent", "mpv_sponsorblock/1.0 (https://github.com/po5/mpv_sponsorblock)")] +urllib.request.install_opener(opener) + +if sys.argv[1] == "ranges" and (not sys.argv[2] or not os.path.isfile(sys.argv[2])): + sha = None + if 3 <= int(sys.argv[6]) <= 32: + sha = hashlib.sha256(sys.argv[4].encode()).hexdigest()[:int(sys.argv[6])] + times = [] + try: + response = urllib.request.urlopen(sys.argv[3] + "/api/skipSegments" + ("/" + sha + "?" if sha else "?videoID=" + sys.argv[4] + "&") + urllib.parse.urlencode([("categories", json.dumps(sys.argv[5].split(",")))])) + segments = json.load(response) + for segment in segments: + if sha and sys.argv[4] != segment["videoID"]: + continue + if sha: + for s in segment["segments"]: + times.append(str(s["segment"][0]) + "," + str(s["segment"][1]) + "," + s["UUID"] + "," + s["category"]) + else: + times.append(str(segment["segment"][0]) + "," + str(segment["segment"][1]) + "," + segment["UUID"] + "," + segment["category"]) + print(":".join(times)) + except (TimeoutError, urllib.error.URLError) as e: + print("error") + except urllib.error.HTTPError as e: + if e.code == 404: + print("") + else: + print("error") +elif sys.argv[1] == "ranges": + conn = sqlite3.connect(sys.argv[2]) + conn.row_factory = sqlite3.Row + c = conn.cursor() + times = [] + for category in sys.argv[5].split(","): + c.execute("SELECT startTime, endTime, votes, UUID, category FROM sponsorTimes WHERE videoID = ? AND shadowHidden = 0 AND votes > -1 AND category = ?", (sys.argv[4], category)) + sponsors = c.fetchall() + best = list(sponsors) + dealtwith = [] + similar = [] + for sponsor_a in sponsors: + for sponsor_b in sponsors: + if sponsor_a is not sponsor_b and sponsor_a["startTime"] >= sponsor_b["startTime"] and sponsor_a["startTime"] <= sponsor_b["endTime"]: + similar.append([sponsor_a, sponsor_b]) + if sponsor_a in best: + best.remove(sponsor_a) + if sponsor_b in best: + best.remove(sponsor_b) + for sponsors_a in similar: + if sponsors_a in dealtwith: + continue + group = set(sponsors_a) + for sponsors_b in similar: + if sponsors_b[0] in group or sponsors_b[1] in group: + group.add(sponsors_b[0]) + group.add(sponsors_b[1]) + dealtwith.append(sponsors_b) + best.append(max(group, key=lambda x:x["votes"])) + for time in best: + times.append(str(time["startTime"]) + "," + str(time["endTime"]) + "," + time["UUID"] + "," + time["category"]) + print(":".join(times)) +elif sys.argv[1] == "update": + try: + urllib.request.urlretrieve(sys.argv[3] + "/database.db", sys.argv[2] + ".tmp") + os.replace(sys.argv[2] + ".tmp", sys.argv[2]) + except PermissionError: + print("database update failed, file currently in use", file=sys.stderr) + sys.exit(1) + except ConnectionResetError: + print("database update failed, connection reset", file=sys.stderr) + sys.exit(1) + except TimeoutError: + print("database update failed, timed out", file=sys.stderr) + sys.exit(1) + except urllib.error.URLError as e: + print("database update failed", file=sys.stderr) + print(e, file=sys.stderr) + + sys.exit(1) +elif sys.argv[1] == "submit": + try: + req = urllib.request.Request(sys.argv[3] + "/api/skipSegments", data=json.dumps({"videoID": sys.argv[4], "segments": [{"segment": [float(sys.argv[5]), float(sys.argv[6])], "category": sys.argv[9]}], "userID": uid}).encode(), headers={"Content-Type": "application/json"}) + response = urllib.request.urlopen(req) + print("success") + except urllib.error.HTTPError as e: + print(e.code) + except: + print("error") +elif sys.argv[1] == "stats": + try: + if sys.argv[6]: + urllib.request.urlopen(sys.argv[3] + "/api/viewedVideoSponsorTime?UUID=" + sys.argv[5]) + if sys.argv[9]: + urllib.request.urlopen(sys.argv[3] + "/api/voteOnSponsorTime?UUID=" + sys.argv[5] + "&userID=" + uid + "&type=" + sys.argv[9]) + except: + pass +elif sys.argv[1] == "username": + try: + data = urllib.parse.urlencode({"userID": uid, "userName": sys.argv[9]}).encode() + req = urllib.request.Request(sys.argv[3] + "/api/setUsername", data=data) + urllib.request.urlopen(req) + except: + pass diff --git a/.config/mpv/scripts/sponsorblock_shared/sponsorblock.txt b/.config/mpv/scripts/sponsorblock_shared/sponsorblock.txt new file mode 100644 index 0000000..04debc8 --- /dev/null +++ b/.config/mpv/scripts/sponsorblock_shared/sponsorblock.txt @@ -0,0 +1 @@ +VvdShPVADjWuTg9L44tkj5B1IqOS8Jfak5XX \ No newline at end of file diff --git a/.config/nvim b/.config/nvim new file mode 160000 index 0000000..b36dc41 --- /dev/null +++ b/.config/nvim @@ -0,0 +1 @@ +Subproject commit b36dc411e3a430e0c80561e60c463214351225a7 diff --git a/.config/picom/picom.conf b/.config/picom/picom.conf new file mode 100644 index 0000000..204d8fe --- /dev/null +++ b/.config/picom/picom.conf @@ -0,0 +1,414 @@ +################################# +# 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 = false; + +# The blur radius for shadows, in pixels. (defaults to 12) +# shadow-radius = 12 +shadow-radius = 24; + +# The opacity of shadows. (0.0 - 1.0, defaults to 0.75) +shadow-opacity = .86 + +# The left offset for shadows, in pixels. (defaults to -15) +shadow-offset-x = -15 +# shadow-offset-x = -7; + +# The top offset for shadows, in pixels. (defaults to -15) +shadow-offset-y = -15 +# shadow-offset-y = -7; + +# 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 + +# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue) +# shadow-color = "#000000" + +# 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'", + "class_g ?= 'Notify-osd'", + "class_g = 'Cairo-clock'", + "_GTK_FRAME_EXTENTS@:c" +]; + +# Specify a list of conditions of windows that should have no shadow painted over, such as a dock window. +# clip-shadow-above = [] + +# 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 +fade-delta = 5 + +# 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 = 0.5; + +# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) +# frame-opacity = 1.0 +# frame-opacity = 0.9; + +# Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows. +# inactive-opacity-override = true +inactive-opacity-override = true; + +# 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 never 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 = [] + + +################################# +# Corners # +################################# + +# Sets the radius of rounded window corners. When > 0, the compositor will +# round the corners of windows. Does not interact well with +# `transparent-clipping`. +# corner-radius = 13 + +# Exclude conditions for rounded corners. +rounded-corners-exclude = [ +"window_type = 'dock'", + "window_type = 'desktop'" +]; + + +################################# +# Background-Blurring # +################################# + + +# Parameters for background blurring, see the *BLUR* section for more information. +blur-method = "dual_kawase" +blur-size = 12 +# +# blur-deviation = false +# +blur-strength = 5 + +# 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 = false; + +# 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_WINDOW_OPACITY' on client windows, useful for window managers +# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows. +# +# detect-client-opacity = false +detect-client-opacity = true; + +# 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. This usually means windows from the same application +# will be considered focused or unfocused at the same time. +# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too. +# +# detect-client-leader = false + +# 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 = true; + +# 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. +# +# clip-shadow-above::: +# Controls wether shadows that would have been drawn above the window should +# be clipped. Useful for dock windows that should have no shadow painted on top. +# +# 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.90; focus = true; full-shadow = false; }; + dock = { shadow = false; clip-shadow-above = true; } + dnd = { shadow = false; } + popup_menu = { opacity = 1.0; shadow=false } + dropdown_menu = { opacity = 1.0; shadow=false } +}; diff --git a/.config/qtile/config.py b/.config/qtile/config.py new file mode 100644 index 0000000..533a084 --- /dev/null +++ b/.config/qtile/config.py @@ -0,0 +1,19 @@ +from modules.groups import groups +from modules.keys import keys, mod +from modules.layouts import floating_layout, layouts +from modules.mouse import mouse +from modules.hooks import * +from modules.screens import screens + +dgroups_key_binder = None +dgroups_app_rules = [] # type: List +main = None # WARNING: this is deprecated and will be removed soon +follow_mouse_focus = True +bring_front_click = False +cursor_warp = False +auto_fullscreen = True +focus_on_window_activation = "urgent" +wmname = "LG3D" +widget_defaults = dict( + font="Cascadia Code", fontsize=16, padding=12, foreground="CEC8C6" +) diff --git a/.config/qtile/modules/groups.py b/.config/qtile/modules/groups.py new file mode 100644 index 0000000..e638bbe --- /dev/null +++ b/.config/qtile/modules/groups.py @@ -0,0 +1,52 @@ +from libqtile.config import Group, Key, Match, ScratchPad, DropDown +from libqtile.lazy import lazy + +from .keys import keys, mod + +groups = [Group(i) for i in "1234567890"] + +browsers = [Match(wm_class=["firefox", "Google-chrome"])] +file_managers = [Match(wm_class="Thunar")] +video_players = [Match(wm_class=["streamlink-twitch-gui", "mpv"])] +groups = [ + Group("1"), + Group("2", matches=[Match(wm_class="VirtualBox Manager")]), + Group("3", matches=[Match(wm_class="Thunderbird")]), + Group("4", matches=[Match(wm_class="st-256color")]), + Group("5", matches=file_managers), + Group("6", matches=[Match(wm_class="ModernDeck")]), + Group("7", matches=browsers), + Group("8", matches=video_players), + Group("9"), + Group("0", matches=[Match(wm_class="TelegramDesktop")]), +] +groups.append( + ScratchPad( + "scratchpad", + [ + # define a drop down terminal. + # it is placed in the upper third of screen by default. + DropDown("term", "st", opacity=1.0) + ], + ) +) + +symbols = "arstgmneio" + +for i, j in zip(groups, symbols): + keys.extend( + [ + Key( + [mod], + j, + lazy.group[i.name].toscreen(), + desc="Switch to group {}".format(i.name), + ), + Key( + [mod, "shift"], + j, + lazy.window.togroup(i.name, switch_group=True), + desc="Switch to & move focused window to group {}".format(i.name), + ), + ] + ) diff --git a/.config/qtile/modules/hooks.py b/.config/qtile/modules/hooks.py new file mode 100644 index 0000000..bbd9657 --- /dev/null +++ b/.config/qtile/modules/hooks.py @@ -0,0 +1,35 @@ +import subprocess +import os + +from libqtile import hook + + +@hook.subscribe.startup +def autostart(): + subprocess.call(["autostart.sh"]) + + +@hook.subscribe.client_managed +def show_window(window): + window.group.cmd_toscreen() + + +@hook.subscribe.client_killed +def toggle_previous_group_if_last_window_killed(window): + group = window.group + if len(group.info()['windows']) == 1: + group.screen.toggle_group() + + +@hook.subscribe.client_managed +@hook.subscribe.client_urgent_hint_changed +@hook.subscribe.client_killed +@hook.subscribe.setgroup +@hook.subscribe.group_window_add +@hook.subscribe.current_screen_change +@hook.subscribe.changegroup +def hook_response(*args, **kwargs): + file = os.path.expanduser('~/.cache/workspaces') + with open(file, 'a') as f: + print('workspace changed', file=f) + diff --git a/.config/qtile/modules/keys.py b/.config/qtile/modules/keys.py new file mode 100644 index 0000000..6daae8e --- /dev/null +++ b/.config/qtile/modules/keys.py @@ -0,0 +1,168 @@ +import os + +from libqtile.config import Key, KeyChord +from libqtile.lazy import lazy + +mod = "mod4" +terminal = "st" +# terminal = "xfce4-terminal" +home = os.path.expanduser + + +@lazy.function +def explore(qtile): + """ open the app attached to current workspace""" + + preffered_apps = { + "1": "default", + "2": "virtualbox", + "3": "thunderbird", + "4": "st", + "5": "thunar", + "6": "ModernDeck", + "7": "firefox", + "8": "streamlink-twitch-gui", + "9": "default", + "0": "telegram-desktop", + } + group = qtile.current_group.info()['name'] + command = preffered_apps[group] + if command == "default": + command = "rofi -show drun" + + qtile.cmd_spawn(f'notify-send -t 1000 "Launching {command}"') + qtile.cmd_spawn(command) + + + +keys = [ + # '`': 'grave', + # '-': 'minus', + # '=': 'equal', + # '[': 'bracketleft', + # ']': 'bracketright', + # '\\': 'backslash', + # ';': 'semicolon', + # '\'': 'quote', + # ',': 'comma', + # '.': 'dot', + Key([mod], "h", lazy.layout.left(), desc="Move focus to left"), + Key([mod], "l", lazy.layout.right(), desc="Move focus to right"), + Key([mod], "j", lazy.layout.down(), desc="Move focus down"), + Key([mod], "k", lazy.layout.up(), desc="Move focus up"), + Key([mod], "u", explore, desc="Open app related with current group"), + Key( + [mod], + "Tab", + lazy.screen.toggle_group(), + desc="Toggle back and forth between latest groups", + ), + Key([mod], "d", lazy.spawn("rofi -show combi"), desc="spawn rofi"), + # Move windows between left/right columns or move up/down in current + # stack. Moving out of range in Columns layout will create new column. + Key( + [mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left" + ), + Key( + [mod, "shift"], + "l", + lazy.layout.shuffle_right(), + desc="Move window to the right", + ), + Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"), + Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), + # Grow windows. If current window is on the edge of screen and direction + # will be to screen edge - window would shrink. + Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow window to the left"), + Key( + [mod, "control"], "l", lazy.layout.grow_right(), desc="Grow window to the right" + ), + Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"), + Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"), + # KeyChord([mod], "w", [ + # Key([mod], "g", lazy.layout.grow()), + # Key([mod], "s", lazy.layout.shrink()), + # Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"), + # Key([mod], "m", lazy.layout.maximize())], + # mode="Windows" + # ), + Key([mod], "f", lazy.window.toggle_fullscreen(), desc="Toggle fullscreen"), + Key([mod, "shift"], "f", lazy.window.toggle_floating(), desc="Toggle floating"), + # Toggle between split and unsplit sides of stack. + # Split = all windows displayed + # Unsplit = 1 window displayed, like Max layout, but still with + # multiple stack panes + Key( + [mod, "shift"], + "Return", + lazy.layout.toggle_split(), + desc="Toggle between split and unsplit sides of stack", + ), + Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"), + # Toggle between different layouts as defined below + Key([mod], "space", lazy.next_layout(), desc="Toggle between layouts"), + Key([mod, "shift"], "space", lazy.spawn("chlayout"), desc="Next keyboard layout."), + Key([mod], "comma", lazy.screen.prev_group(), desc="Move to the group on the left"), + Key( + [mod], "period", lazy.screen.next_group(), desc="Move to the group on the right" + ), + Key([mod], "q", lazy.window.kill(), desc="Kill focused window"), + Key([mod, "shift", "control"], "h", lazy.layout.swap_column_left()), + Key([mod, "shift", "control"], "l", lazy.layout.swap_column_right()), + # Key([mod, "shift"], "space", lazy.layout.flip()), + Key([mod, "control"], "r", lazy.restart(), desc="Restart Qtile"), + Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), + Key([mod, "control"], "n", lazy.spawn("lock-screen"), desc="Lock screen"), + Key( + [mod, "control"], + "s", + lazy.spawn("toggle-screenkey"), + desc="Show keys on screen", + ), + Key( + [mod, "shift"], + "d", + lazy.spawncmd(), + desc="Spawn a command using a prompt widget", + ), + Key([mod], "p", lazy.spawn("passmenu"), desc="Spawn passmenu"), + # Key([mod, "shift"], "e", lazy.spawn("menu_powermenu"), desc="Spawn powermenu using rofi"), + # Key([mod], "n", lazy.spawn(home("~/Desktop/GitRepositories/networkmanager-dmenu/networkmanager_dmenu")), desc="Launch network manager"), + # Key([mod], "i", lazy.spawn("sxiv " + home("~/Pictures/keyboard-layout.jpg")), desc="Show current keyboard layout"), + Key([mod], "b", lazy.spawn("rofi-bluetooth"), desc="Manage bluetooth devices"), + Key( + [mod], + "v", + lazy.spawn("rofi-wireguard --toggle"), + desc="Manage VPN connections", + ), + # Key([mod], "x", lazy.spawn(home("~/scripts/kill-process.sh")), + # desc="Kill processes using rofi"), + # == audio + Key( + [], + "XF86AudioRaiseVolume", + lazy.spawn("pactl set-sink-volume @DEFAULT_SINK@ +5%"), + ), + Key( + [], + "XF86AudioLowerVolume", + lazy.spawn("pactl set-sink-volume @DEFAULT_SINK@ -5%"), + ), + Key([], "XF86AudioMute", lazy.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle")), + Key( + [], + "XF86AudioMicMute", + lazy.spawn("pactl set-source-mute @DEFAULT_SOURCE@ toggle"), + ), + # == backlight + Key([], "XF86MonBrightnessUp", lazy.spawn("light -A 5")), + Key([], "XF86MonBrightnessDown", lazy.spawn("light -U 5")), + Key([], "Print", lazy.spawn("flameshot gui")), + Key(["shift"], "Print", lazy.spawn("flameshot full")), + Key(["control"], "Print", lazy.spawn("flameshot full")), + Key([], "F12", lazy.group["scratchpad"].dropdown_toggle("term")), + Key([], "XF86KbdBrightnessUp", lazy.spawn("keyboard_backlight.sh inc")), + Key([], "XF86KbdBrightnessDown", lazy.spawn("keyboard_backlight.sh dec")), + Key([], "XF86TouchpadToggle", lazy.spawn("toggle-touchpad.sh")), +] diff --git a/.config/qtile/modules/layouts.py b/.config/qtile/modules/layouts.py new file mode 100644 index 0000000..f9efdd0 --- /dev/null +++ b/.config/qtile/modules/layouts.py @@ -0,0 +1,42 @@ +from libqtile import layout +from libqtile.config import Match + +# default = { +# "border_width": 2, +# "margin": 8, +# "border_focus": "#5294e2", +# "border_normal": "#2c5380"} +layouts = [ + # layout.MonadTall(margin=8, border_focus='#5294e2', + # border_normal='#2c5380'), + layout.Columns(margin=8, border_focus_stack="#d75f5f"), + layout.Max(), + # Try more layouts by unleashing below layouts. + # layout.Stack(num_stacks=2), + # layout.Bsp(), + # layout.Matrix(), + # layout.MonadTall(), + # layout.MonadWide(), + # layout.RatioTile(), + # layout.Tile(), + # layout.TreeTab(), + # layout.VerticalTile(), + # layout.Zoomy(), +] + +floating_layout = layout.Floating( + float_rules=[ + # Run the utility of `xprop` to see the wm class and name of an X client. + *layout.Floating.default_float_rules, + Match(wm_class="confirmreset"), # gitk + Match(wm_class="makebranch"), # gitk + Match(wm_class="maketag"), # gitk + Match(wm_class="ssh-askpass"), # ssh-askpass + Match(wm_class="sxiv"), + Match(wm_class="telegram-desktop"), + Match(wm_class="streamlink-twitch-gui"), + Match(wm_class="pinentry-gtk-2"), + Match(title="branchdialog"), # gitk + Match(title="pinentry"), # GPG key password entry + ] +) diff --git a/.config/qtile/modules/mouse.py b/.config/qtile/modules/mouse.py new file mode 100644 index 0000000..b3360b3 --- /dev/null +++ b/.config/qtile/modules/mouse.py @@ -0,0 +1,17 @@ +from libqtile.config import Click, Drag +from libqtile.lazy import lazy +from .keys import mod + +# Drag floating layouts. +mouse = [ + Drag( + [mod], + "Button1", + lazy.window.set_position_floating(), + start=lazy.window.get_position(), + ), + Drag( + [mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size() + ), + Click([mod], "Button2", lazy.window.bring_to_front()), +] diff --git a/.config/qtile/modules/screens.py b/.config/qtile/modules/screens.py new file mode 100644 index 0000000..cd3b860 --- /dev/null +++ b/.config/qtile/modules/screens.py @@ -0,0 +1,3 @@ +from libqtile.config import Screen + +screens = [Screen()] diff --git a/.config/qtile/scripts/Default.sh b/.config/qtile/scripts/Default.sh new file mode 100755 index 0000000..152cb7a --- /dev/null +++ b/.config/qtile/scripts/Default.sh @@ -0,0 +1,308 @@ +#!/usr/bin/env bash + +## Copyright (C) 2020-2021 Aditya Shakya +## Everyone is permitted to copy and distribute copies of this file under GNU-GPL3 + +## Dirs ############################################# +qtile_path="$HOME/.config/qtile" +polybar_path="$HOME/.config/qtile/polybar" +rofi_path="$HOME/.config/qtile/rofi" +terminal_path="$HOME/.config/alacritty" +xfce_term_path="$HOME/.config/xfce4/terminal" +geany_path="$HOME/.config/geany" +dunst_path="$HOME/.config/dunst" + +# wallpaper --------------------------------- +set_wallpaper() { + nitrogen --save --set-zoom-fill /usr/share/backgrounds/"$1" +} + +# polybar ----------------------------------- +change_polybar() { + sed -i -e "s/STYLE=.*/STYLE=\"$1\"/g" ${polybar_path}/launch.sh + sed -i -e "s/font-0 = .*/font-0 = \"$2\"/g" ${polybar_path}/"$1"/config.ini +} + +# rofi -------------------------------------- +change_rofi() { + sed -i -e "s/STYLE=.*/STYLE=\"$1\"/g" ${rofi_path}/bin/music ${rofi_path}/bin/network ${rofi_path}/bin/screenshot ${rofi_path}/bin/runner + sed -i -e "s/DIR=.*/DIR=\"$1\"/g" ${rofi_path}/bin/launcher ${rofi_path}/bin/powermenu + sed -i -e 's/STYLE=.*/STYLE="launcher"/g' ${rofi_path}/bin/launcher + sed -i -e 's/STYLE=.*/STYLE="powermenu"/g' ${rofi_path}/bin/powermenu + sed -i -e "s/font:.*/font: \"$2\";/g" ${rofi_path}/"$1"/font.rasi + + sed -i -e "s/font:.*/font: \"$2\";/g" ${rofi_path}/dialogs/askpass.rasi ${rofi_path}/dialogs/confirm.rasi + sed -i -e "s/border:.*/border: $3;/g" ${rofi_path}/dialogs/askpass.rasi ${rofi_path}/dialogs/confirm.rasi + sed -i -e "s/border-radius:.*/border-radius: $4;/g" ${rofi_path}/dialogs/askpass.rasi ${rofi_path}/dialogs/confirm.rasi + + if [[ -f "$HOME"/.config/rofi/config.rasi ]]; then + sed -i -e "s/icon-theme:.*/icon-theme: \"$5\";/g" "$HOME"/.config/rofi/config.rasi + fi + + cat > ${rofi_path}/dialogs/colors.rasi <<- _EOF_ + /* Color-Scheme */ + + * { + BG: #282C33ff; + FG: #D8D8D8ff; + BDR: #62AEEFff; + } + _EOF_ +} + +# network manager --------------------------- +change_nm() { + sed -i -e "s#dmenu_command = .*#dmenu_command = rofi -dmenu -theme ~/.config/qtile/rofi/$1/networkmenu.rasi#g" "$HOME"/.config/networkmanager-dmenu/config.ini +} + +# terminal ---------------------------------- +change_terminal() { + sed -i -e "s/family: .*/family: \"$1\"/g" ${terminal_path}/fonts.yml + sed -i -e "s/size: .*/size: $2/g" ${terminal_path}/fonts.yml + + cat > ${terminal_path}/colors.yml <<- _EOF_ + ## Colors configuration + colors: + # Default colors + primary: + background: '#1E2128' + foreground: '#ABB2BF' + + # Normal colors + normal: + black: '#32363D' + red: '#E06B74' + green: '#98C379' + yellow: '#E5C07A' + blue: '#62AEEF' + magenta: '#C778DD' + cyan: '#55B6C2' + white: '#ABB2BF' + + # Bright colors + bright: + black: '#50545B' + red: '#EA757E' + green: '#A2CD83' + yellow: '#EFCA84' + blue: '#6CB8F9' + magenta: '#D282E7' + cyan: '#5FC0CC' + white: '#B5BCC9' + _EOF_ +} + +# xfce terminal ----------------------------- +change_xfce_terminal() { + sed -i -e "s/FontName=.*/FontName=$1/g" ${xfce_term_path}/terminalrc + sed -i -e 's/ColorForeground=.*/ColorForeground=#ababb2b2bfbf/g' ${xfce_term_path}/terminalrc + sed -i -e 's/ColorBackground=.*/ColorBackground=#1e1e21212828/g' ${xfce_term_path}/terminalrc + sed -i -e 's/ColorCursor=.*/ColorCursor=#ababb2b2bfbf/g' ${xfce_term_path}/terminalrc + sed -i -e 's/ColorPalette=.*/ColorPalette=#323236363d3d;#e0e06b6b7474;#9898c3c37979;#e5e5c0c07a7a;#6262aeaeefef;#c7c77878dddd;#5555b6b6c2c2;#ababb2b2bfbf;#505054545b5b;#eaea75757e7e;#a2a2cdcd8383;#efefcaca8484;#6c6cb8b8f9f9;#d2d28282e7e7;#5f5fc0c0cccc;#b5b5bcbcc9c9/g' ${xfce_term_path}/terminalrc +} + +# geany ------------------------------------- +change_geany() { + sed -i -e "s/color_scheme=.*/color_scheme=$1.conf/g" ${geany_path}/geany.conf + sed -i -e "s/editor_font=.*/editor_font=$2/g" ${geany_path}/geany.conf +} + +# gtk theme, icons and fonts ---------------- +change_appearance() { + xfconf-query -c xsettings -p /Net/ThemeName -s "$1" + xfconf-query -c xsettings -p /Net/IconThemeName -s "$2" + xfconf-query -c xsettings -p /Gtk/CursorThemeName -s "$3" + xfconf-query -c xsettings -p /Gtk/FontName -s "$4" + + if [[ -f "$HOME"/.icons/default/index.theme ]]; then + sed -i -e "s/Inherits=.*/Inherits=$3/g" "$HOME"/.icons/default/index.theme + fi +} + +# qtile ----------------------------------- +obconfig () { + namespace="http://qtile.org/3.4/rc" + config="$qtile_path/rc.xml" + theme="$1" + layout="$2" + font="$3" + fontsize="$4" + + # Theme + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:name' -v "$theme" "$config" + + # Title + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:titleLayout' -v "$layout" "$config" + + # Fonts + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="ActiveWindow"]/a:name' -v "$font" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="ActiveWindow"]/a:size' -v "$fontsize" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' -v Bold "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' -v Normal "$config" + + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="InactiveWindow"]/a:name' -v "$font" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="InactiveWindow"]/a:size' -v "$fontsize" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="InactiveWindow"]/a:weight' -v Normal "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="InactiveWindow"]/a:slant' -v Normal "$config" + + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="MenuHeader"]/a:name' -v "$font" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="MenuHeader"]/a:size' -v "$fontsize" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="MenuHeader"]/a:weight' -v Bold "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="MenuHeader"]/a:slant' -v Normal "$config" + + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="MenuItem"]/a:name' -v "$font" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="MenuItem"]/a:size' -v "$fontsize" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="MenuItem"]/a:weight' -v Normal "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="MenuItem"]/a:slant' -v Normal "$config" + + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="ActiveOnScreenDisplay"]/a:name' -v "$font" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="ActiveOnScreenDisplay"]/a:size' -v "$fontsize" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="ActiveOnScreenDisplay"]/a:weight' -v Bold "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="ActiveOnScreenDisplay"]/a:slant' -v Normal "$config" + + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="InactiveOnScreenDisplay"]/a:name' -v "$font" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="InactiveOnScreenDisplay"]/a:size' -v "$fontsize" "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="InactiveOnScreenDisplay"]/a:weight' -v Normal "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:theme/a:font[@place="InactiveOnScreenDisplay"]/a:slant' -v Normal "$config" + + # qtile Menu Style + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:menu/a:file' -v "$5" "$config" + + # Margins + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:margins/a:top' -v 0 "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:margins/a:bottom' -v 10 "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:margins/a:left' -v 10 "$config" + xmlstarlet ed -L -N a="$namespace" -u '/a:qtile_config/a:margins/a:right' -v 10 "$config" +} + +# dunst ------------------------------------- +change_dunst() { + sed -i -e "s/geometry = .*/geometry = \"$1\"/g" ${dunst_path}/dunstrc + sed -i -e "s/font = .*/font = $2/g" ${dunst_path}/dunstrc + sed -i -e "s/frame_width = .*/frame_width = $3/g" ${dunst_path}/dunstrc + + sed -i '/urgency_low/Q' ${dunst_path}/dunstrc + cat >> ${dunst_path}/dunstrc <<- _EOF_ + [urgency_low] + timeout = 2 + background = "#282C33" + foreground = "#D8D8D8" + frame_color = "#30343B" + + [urgency_normal] + timeout = 5 + background = "#282C33" + foreground = "#D8D8D8" + frame_color = "#30343B" + + [urgency_critical] + timeout = 0 + background = "#282C33" + foreground = "#E06B74" + frame_color = "#30343B" + _EOF_ + + pkill dunst && dunst & +} + +# Plank ------------------------------------- +change_dock() { + cat > "$HOME"/.cache/plank.conf <<- _EOF_ + [dock1] + alignment='center' + auto-pinning=true + current-workspace-only=false + dock-items=['xfce-settings-manager.dockitem', 'Alacritty.dockitem', 'thunar.dockitem', 'firefox.dockitem', 'geany.dockitem'] + hide-delay=0 + hide-mode='intelligent' + icon-size=32 + items-alignment='center' + lock-items=false + monitor='' + offset=0 + pinned-only=false + position='bottom' + pressure-reveal=false + show-dock-item=false + theme='Transparent' + tooltips-enabled=true + unhide-delay=0 + zoom-enabled=true + zoom-percent=120 + _EOF_ +} + +# compositor -------------------------------- +compositor() { + comp_file="$HOME/.config/picom.conf" + + backend="$1" + cradius="$2" + shadow_r="$(echo $3 | cut -d' ' -f1)" + shadow_o="$(echo $3 | cut -d' ' -f2)" + shadow_x="$(echo $3 | cut -d' ' -f3)" + shadow_y="$(echo $3 | cut -d' ' -f4)" + method="$(echo $4 | cut -d' ' -f1)" + strength="$(echo $4 | cut -d' ' -f2)" + + # Rounded Corners + sed -i -e "s/backend = .*/backend = \"$backend\";/g" ${comp_file} + sed -i -e "s/corner-radius = .*/corner-radius = $cradius;/g" ${comp_file} + + # Shadows + sed -i -e "s/shadow-radius = .*/shadow-radius = $shadow_r;/g" ${comp_file} + sed -i -e "s/shadow-opacity = .*/shadow-opacity = $shadow_o;/g" ${comp_file} + sed -i -e "s/shadow-offset-x = .*/shadow-offset-x = $shadow_x;/g" ${comp_file} + sed -i -e "s/shadow-offset-y = .*/shadow-offset-y = $shadow_y;/g" ${comp_file} + + # Blur + sed -i -e "s/backend = .*/backend = \"$backend\";/g" ${comp_file} + sed -i -e "s/method = .*/method = \"$method\";/g" ${comp_file} + sed -i -e "s/strength = .*/strength = $strength;/g" ${comp_file} +} + +# notify ------------------------------------ +notify_user() { + local style=`basename $0` + dunstify -u normal --replace=699 -i /usr/share/archcraft/icons/dunst/themes.png "Applying Style : ${style%.*}" +} + +## Execute Script --------------------------- +notify_user + +# funct WALLPAPER +set_wallpaper 'default.jpg' + +# funct STYLE FONT +change_polybar 'default' 'JetBrains Mono:size=10;3' && "$polybar_path"/launch.sh +"$polybar_path"/launch.sh + +# funct STYLE FONT BORDER BORDER-RADIUS ICON (Change colors in funct) +change_rofi 'default' 'Iosevka 10' '0px 0px 2px 0px' '8px' 'Zafiro' + +# funct STYLE (network manager applet) +change_nm 'default' + +# funct FONT SIZE (Change colors in funct) +change_terminal 'JetBrainsMono Nerd Font' '10' + +# funct FONT (Change colors in funct) +change_xfce_terminal 'JetBrainsMono Nerd Font 10' + +# funct SCHEME FONT +change_geany 'arc' 'JetBrains Mono 10' + +# funct THEME ICON CURSOR FONT +change_appearance 'Arc-Dark' 'Zafiro' 'Qogirr' 'Noto Sans 9' + +# funct THEME LAYOUT FONT SIZE (Change margin in funct) +# obconfig 'Arc-Dark' 'DLIMC' 'JetBrains Mono' '9' 'menu-icons.xml' && qtile --reconfigure + +# funct GEOMETRY FONT BORDER (Change colors in funct) +change_dunst '280x50-10+48' 'JetBrains Mono 10' '6' + +# Paste settings in funct (PLANK) +change_dock && cat "$HOME"/.cache/plank.conf | dconf load /net/launchpad/plank/docks/ + +# Change compositor settings +#compositor 'glx' '6' '14 0.30 -12 -12' 'none 0' diff --git a/.config/tmux/plugins/tpm b/.config/tmux/plugins/tpm new file mode 160000 index 0000000..b699a7e --- /dev/null +++ b/.config/tmux/plugins/tpm @@ -0,0 +1 @@ +Subproject commit b699a7e01c253ffb7818b02d62bce24190ec1019 diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf new file mode 100644 index 0000000..b839d89 --- /dev/null +++ b/.config/tmux/tmux.conf @@ -0,0 +1,188 @@ +# remap prefix to Control + Space +set -g prefix C-Space +bind C-Space send-prefix +unbind C-b + + +# Smart pane switching with awareness of Vim splits. +# See: https://github.com/christoomey/vim-tmux-navigator +is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ + | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" +bind-key -n 'C-h' if-shell "$is_vim" { send-keys C-h } { if -F '#{pane_at_left}' { select-pane -L } { select-pane -L } +} +bind-key -n 'C-j' if-shell "$is_vim" { send-keys C-j } { if -F '#{pane_at_bottom}' { select-pane -D } { select-pane -D } +} +bind-key -n 'C-k' if-shell "$is_vim" { send-keys C-k } { if -F '#{pane_at_top}' { select-pane -U } { select-pane -U } +} +bind-key -n 'C-l' if-shell "$is_vim" { send-keys C-l } { if -F '#{pane_at_right}' { select-pane -R } { select-pane -R } } +tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")' +if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \ + "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'" +if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \ + "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'" + +bind-key -n C-] copy-mode +bind-key -n 'C-M-c' copy-mode +bind-key C-] copy-mode + +bind-key -n C-_ run-shell '/bin/bash ~/scripts/search-notes.sh' + +bind-key -T copy-mode-vi 'C-h' select-pane -L +bind-key -T copy-mode-vi 'C-j' select-pane -D +bind-key -T copy-mode-vi 'C-k' select-pane -U +bind-key -T copy-mode-vi 'C-l' select-pane -R + +# vim like copy mode +bind-key -T copy-mode-vi v send-keys -X begin-selection +bind-key -T copy-mode-vi r send-keys -X rectangle-toggle + +setw -g mode-keys vi + +# Mouse support - set to on if you want to use the mouse +setw -g mouse on + + +# source the .tmux.conf file with prefix + r +bind r source-file ~/.config/tmux/tmux.conf \; display "Configuration Reloaded!" + +bind-key - split-window -v +bind-key '\' split-window -h +bind-key _ split-window -fv +bind-key | split-window -fh + +bind -r h resize-pane -L 5 +bind -r j resize-pane -D 5 +bind -r k resize-pane -U 5 +bind -r l resize-pane -R 5 + + +# set -g lock-after-time 300 +# set -g lock-command "asciiquarium" + +# bind-key "'" choose-window +# bind-key '"' choose-session +# kill current pane/window +# bind-key -n q confirm-before kill-pane +# bind-key Q confirm-before kill-window +bind-key -n C-q confirm-before kill-pane +# bind-key -n C-w confirm-before kill-window + +# no prefix, just c-x +bind C-x setw synchronize-panes + +# reorder windows +bind-key -n C-S-Left swap-window -t -1\; select-window -t -1 +bind-key -n C-S-Right swap-window -t +1\; select-window -t +1 +bind-key -n C-Up swap-pane -s '{up-of}' +bind-key -n C-Down swap-pane -s '{down-of}' +bind-key -n C-Left swap-pane -s '{left-of}' +bind-key -n C-Right swap-pane -s '{right-of}' + +set -g default-terminal "tmux-256color" +# tell Tmux that outside terminal supports true color +set -ga terminal-overrides ",xterm-256color*:Tc" + +# start session number from 1 rather than 0 +# set -g base-index 1 + +# start pane number from 1 similar to windows +# setw -g pane-base-index 1 + + +# highlight active pane +# set -g window-style 'fg=colour247,bg=colour236' +# set -g window-active-style 'fg=colour250,bg=black' +# set-option -g pane-active-border-style fg=red + +# use C-l to clear screen +bind C-l send-keys 'C-l' + +# use Enter for zooming the current pane +bind-key Enter if-shell "$is_vim" { + resize-pane -Z + send-keys C-w = +} { + resize-pane -Z + } + +bind-key i run-shell "tmux neww ~/scripts/cheat.sh" + + + +# use C-j for join pane +bind-key C-j join-pane + + +# status bar theme +set -g status 'on' +# set -g status-bg 'colour235' +set -g status-justify 'centre' +set -g status-style 'none' +set -g status-left-style 'none' +set -g status-left-length '20' +set -g status-right-style 'none' +set -g status-right-length '100' +set -g message-command-style fg='colour222',bg='colour238' +set -g message-style bg='colour238',fg='colour222' +set -g pane-active-border-style fg='colour154' +set -g pane-border-style fg='colour238' +setw -g window-status-style fg='colour121',bg='colour235','none' +setw -g window-status-activity-style bg='colour235',fg='colour154','none' +setw -g window-status-separator '' +set-option -g status-style bg=default +set -g status-left '#[fg=colour232,bg=colour37] #S #[fg=colour37,bg=colour73,nobold,nounderscore,noitalics]#[fg=colour232,bg=colour73] #W #[fg=colour73,bg=default,nobold,nounderscore,noitalics] ' +# above status + whoami and uptime +# set -g status-left '#[fg=colour232,bg=colour154] #S #[fg=colour154,bg=colour238,nobold,nounderscore,noitalics]#[fg=colour222,bg=colour238] #W #[fg=colour238,bg=colour235,nobold,nounderscore,noitalics]#[fg=colour121,bg=colour235] #(whoami)  #(uptime | cut -d " " -f 1,2,3) #[fg=colour235,bg=colour235,nobold,nounderscore,noitalics]' +setw -g window-status-current-format '#[fg=colour235,bg=colour235,nobold,nounderscore,noitalics]#[fg=default,bg=colour235,bold,underscore]#I  #W  #F#[fg=colour235,bg=default,nobold,nounderscore,noitalics]' +setw -g window-status-format '#[fg=colour235,bg=colour235,nobold,nounderscore,noitalics]#[fg=colour150,bg=default]#I  #W#[fg=colour235,bg=colour235,nobold,nounderscore,noitalics]' +set -g status-right '#[fg=colour235,bg=default,nobold,nounderscore,noitalics]#[fg=colour121,bg=colour235]%R  %a  %h-%d #[fg=colour37,bg=colour235,nobold,nounderscore,noitalics] #{prefix_highlight}' + + +set -g status-interval 1 + +set-option -g automatic-rename on +set-option -g automatic-rename-format '#{b:pane_current_path}' + +# Plugin Customizations + +set -g @prefix_highlight_fg 'colour0' +set -g @prefix_highlight_bg 'colour37' +set -g @prefix_highlight_sync_mode_attr 'fg=colour0,bg=colour36' +set -g @prefix_highlight_copy_mode_attr 'fg=colour0,bg=colour33' +set -g @prefix_highlight_show_copy_mode 'on' +set -g @prefix_highlight_show_sync_mode 'on' +set -g @prefix_highlight_sync_prompt 'SYNC' + +set -g @resurrect-strategy-vim 'session' +set -g @batt_icon_status_charging '⚡' +set -g @yank_selection_mouse 'clipboard' # or 'primary' or 'secondary' +set -g @yank_action 'copy-pipe' # or 'copy-pipe-and-cancel' for the default +set -g @copycat_hash_search 'C-h' +set -g @copycat_ip_search 'M-i' +set -g @copytk-copy-command "xsel --clipboard" +set -g @menus_trigger 't' + +# set -g @pomodoro_start 'a' # Start a Pomodoro with tmux-prefix + p +# set -g @pomodoro_cancel 'A' # Cancel a Pomodoro with tmux-prefix key + P +# set -g @pomodoro_on " #[fg=$text_red]🍅 " # The formatted output when the pomodoro is running +# set -g @pomodoro_complete " #[fg=$text_green]🍅 " # The formatted output when the break is running + +# set -g @continuum-boot 'on' +# set -g @continuum-restore 'on' + +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @plugin 'tmux-plugins/tmux-continuum' +set -g @plugin 'tmux-plugins/tmux-open' +set -g @plugin 'tmux-plugins/tmux-yank' +set -g @plugin 'tmux-plugins/tmux-copycat' +set -g @plugin 'tmux-plugins/tmux-prefix-highlight' +set -g @plugin 'tmux-plugins/tmux-battery' +set -g @plugin 'tmux-plugins/tmux-cowboy' +set -g @plugin 'jaclu/tmux-menus' +set -g @plugin 'laktak/extrakto' +set -g @plugin 'CrispyConductor/tmux-copy-toolkit' +# set -g @plugin 'olimorris/tmux-pomodoro-plus' +run '~/.config/tmux/plugins/tpm/tpm' + diff --git a/.config/tridactyl/tridactylrc b/.config/tridactyl/tridactylrc new file mode 100644 index 0000000..f7038e9 --- /dev/null +++ b/.config/tridactyl/tridactylrc @@ -0,0 +1,47 @@ +" General Settings +set update.lastchecktime 1648676458956 +set configversion 2.0 +set smoothscroll true + +" Binds +bind j scrollline 5 +bind h back +bind l forward +bind H tabprev +bind L tabnext +bind J scrollpx -50 +bind K scrollpx 50 +bind q back +bind Q forward +bindurl github.com gp open github.com/Asocia +bindurl github.com gc composite git_clone | clipboard yank +bindurl github.com gC composite git_clone_ssh | clipboard yank +bindurl github.com yr composite js "\"" + document.location.href.split('#')[0].split('/').slice(3, 5).join('/') + "\"" | clipboard yank +bindurl gitlab.com gp open gitlab.com/Asocia +bindurl gitlab.com gc composite git_clone | clipboard yank +bindurl gitlab.com gC composite git_clone_ssh | clipboard yank +bindurl gitlab.com yr composite js "\"" + document.location.href.split('#')[0].split('/').slice(3, 5).join('/') + "\"" | clipboard yank +bindurl reddit.com gp open reddit.com/user/Asocia +bindurl stackoverflow.com gp open stackoverflow.com/users/9608759/asocia +bindurl youtube.com p composite get_current_url | mpvsafe +bindurl youtube.com P hint -W mpvsafe + +" Subconfig Settings +seturl monkeytype.com allowautofocus true +seturl www.google.com followpagepatterns.next Next +seturl overleaf.com allowautofocus true +seturl .*/.*\.ipynb allowautofocus true +seturl nitrotype.com allowautofocus true + +" Aliases +alias git_clone js "git clone " + document.location.href.split('#')[0].split('/').slice(0, 5).join('/') + " ;cd " + document.location.href.split('#')[0].split('/').at(4) +alias git_clone_ssh js "git clone " + document.location.href.split('#')[0].split('/').slice(0, 5).join('/').replace(/https?:\/\//,"git@").replace("/",":").replace(/$/,".git") + " ;cd " + document.location.href.split('#')[0].split('/').at(4) + +" Autocmds +autocmd DocStart monkeytype.com mode ignore +autocmd DocStart overleaf.com mode ignore +autocmd DocStart undefined mode ignore +autocmd DocStart .*/.*\.ipynb mode ignore + +" For syntax highlighting see https://github.com/tridactyl/vim-tridactyl +" vim: set filetype=tridactyl \ No newline at end of file diff --git a/.config/zsh/.aliases b/.config/zsh/.aliases new file mode 100644 index 0000000..b446e40 --- /dev/null +++ b/.config/zsh/.aliases @@ -0,0 +1,56 @@ +# alias af=alias-finder +alias menu="menu | lolcat" +alias nomnom="menu | lolcat" +alias so="shrout" +alias sf="shrfile" +alias co="cpyout" +alias cf="cpyfile" +alias ls=lsd +alias lsl="clear; ls" +alias lll="clear; ll" +alias rake='noglob bundled_rake' +alias weather='curl wttr.in/?0' +alias gdm='gd master' +alias s='gst .' +alias d='gd .' +alias intel="sudo prime-select intel" +alias nvidia="sudo prime-select nvidia" +alias pls="sudo" +alias p="pyenv" +alias cat="bat" +alias bd="batdiff" +alias man="batman" +alias cd.="cd .." +alias cd..="cd .." +alias xd="xdg-open &>/dev/null" +alias xd.="xdg-open &>/dev/null ." +alias suod="sudo" +alias sduo="sudo" +alias zz='z -c' # restrict matches to subdirs of $PWD +alias zi='z -I' # use fzf to select in multiple matches +alias n=z +alias ni='z -I' +alias nn='z -c' +alias nb='z -b' +alias t="todo.sh" +alias ta="todo.sh add" +alias tl="todo.sh list" +alias td="todo.sh do" +alias tp="todo.sh pri" +alias vim="nvim" +alias v="vim" +alias viz="vim ${ZDOTDIR:-$HOME}/.zshrc" +alias vizp="vim ${ZDOTDIR:-$HOME}/.zpreztorc" +alias vit="vim ~/.config/tmux/tmux.conf" +alias vip="vim ~/.config/polybar/config.ini" +alias viv="vim ~/.vimrc" +alias viw="vim ~/.which-key.vim" +alias via="vim ${ZDOTDIR:-$HOME}/.aliases" +alias vi3="vim ~/.config/i3/config" +alias viq="vim ~/.config/qtile/config.py" +alias top='htop' +alias cp='cp -ri' +alias mv='mv -i' +alias mkdir='mkdir -p' +alias dotfiles='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME' +alias dots='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME' diff --git a/.config/zsh/.p10k.zsh b/.config/zsh/.p10k.zsh new file mode 100644 index 0000000..0d6b44b --- /dev/null +++ b/.config/zsh/.p10k.zsh @@ -0,0 +1,1619 @@ +# Generated by Powerlevel10k configuration wizard on 2022-01-24 at 17:54 +03. +# Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 59558. +# Wizard options: nerdfont-complete + powerline, large icons, unicode, lean, 24h time, +# 2 lines, dotted, no frame, light-ornaments, sparse, many icons, concise, +# transient_prompt, instant_prompt=verbose. +# Type `p10k configure` to generate another config. +# +# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate +# your own config based on it. +# +# Tip: Looking for a nice color? Here's a one-liner to print colormap. +# +# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done + +# Temporarily change options. +'builtin' 'local' '-a' 'p10k_config_opts' +[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') +[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') +[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') +'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' + +() { + emulate -L zsh -o extended_glob + + # Unset all configuration options. This allows you to apply configuration changes without + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' + + # Zsh >= 5.1 is required. + autoload -Uz is-at-least && is-at-least 5.1 || return + + # The list of segments shown on the left. Fill it with the most important segments. + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + os_icon # os identifier + dir # current directory + vcs # git status + # =========================[ Line #2 ]========================= + newline # \n + background_jobs # presence of background jobs + prompt_char # prompt symbol + ) + + # The list of segments shown on the right. Fill it with less important segments. + # Right prompt on the last prompt line (where you are typing your commands) gets + # automatically hidden when the input line reaches it. Right prompt above the + # last prompt line gets hidden if it would overlap with left prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( + # =========================[ Line #1 ]========================= + status # exit code of the last command + command_execution_time # duration of the last command + direnv # direnv status (https://direnv.net/) + asdf # asdf version manager (https://github.com/asdf-vm/asdf) + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) + anaconda # conda environment (https://conda.io/) + pyenv # python environment (https://github.com/pyenv/pyenv) + goenv # go environment (https://github.com/syndbg/goenv) + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) + # node_version # node.js version + # go_version # go version (https://golang.org) + # rust_version # rustc version (https://www.rust-lang.org) + # dotnet_version # .NET version (https://dotnet.microsoft.com) + # php_version # php version (https://www.php.net/) + # laravel_version # laravel php framework version (https://laravel.com/) + # java_version # java version (https://www.java.com/) + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) + rvm # ruby version from rvm (https://rvm.io) + fvm # flutter version management (https://github.com/leoafarias/fvm) + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) + jenv # java version from jenv (https://github.com/jenv/jenv) + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) + haskell_stack # haskell version from stack (https://haskellstack.org/) + kubecontext # current kubernetes context (https://kubernetes.io/) + terraform # terraform workspace (https://www.terraform.io) + # terraform_version # terraform version (https://www.terraform.io) + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) + gcloud # google cloud cli account and project (https://cloud.google.com/) + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) + toolbox # toolbox name (https://github.com/containers/toolbox) + context # user@hostname + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) + ranger # ranger shell (https://github.com/ranger/ranger) + nnn # nnn shell (https://github.com/jarun/nnn) + xplr # xplr shell (https://github.com/sayanarijit/xplr) + vim_shell # vim shell indicator (:sh) + midnight_commander # midnight commander shell (https://midnight-commander.org/) + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) + # vpn_ip # virtual private network indicator + # load # CPU load + # disk_usage # disk usage + # ram # free RAM + # swap # used swap + todo # todo items (https://github.com/todotxt/todo.txt-cli) + timewarrior # timewarrior tracking status (https://timewarrior.net/) + taskwarrior # taskwarrior task count (https://taskwarrior.org/) + time # current time + # =========================[ Line #2 ]========================= + newline + # ip # ip address and bandwidth usage for a specified network interface + # public_ip # public IP address + # proxy # system-wide http/https/ftp proxy + # battery # internal battery + # wifi # wifi speed + # example # example user-defined segment (see prompt_example function below) + ) + + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. + typeset -g POWERLEVEL9K_MODE=nerdfont-complete + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. + typeset -g POWERLEVEL9K_ICON_PADDING=moderate + + # Basic style options that define the overall look of your prompt. You probably don't want to + # change them. + typeset -g POWERLEVEL9K_BACKGROUND= # transparent background + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space + typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol + + # When set to true, icons appear before content on both sides of the prompt. When set + # to false, icons go after content. If empty or not set, icons go before content in the left + # prompt and after content in the right prompt. + # + # You can also override it for a specific segment: + # + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false + # + # Or for a specific segment in specific state: + # + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true + + # Add an empty line before each prompt. + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true + + # Connect left prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= + # Connect right prompt lines with these symbols. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= + + # The left end of left prompt. + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + # The right end of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL= + + # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll + # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and + # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below. + typeset -g POWERLEVEL9K_SHOW_RULER=false + typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·' + typeset -g POWERLEVEL9K_RULER_FOREGROUND=242 + + # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─' + # to make it easier to see the alignment between left and right prompt and to separate prompt + # from command output. It serves the same purpose as ruler (see above) without increasing + # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false + # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact + # prompt. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='·' + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then + # The color of the filler. + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 + # Add a space between the end of left prompt and the filler. + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' ' + # Add a space between the filler and the start of right prompt. + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' ' + # Start filler from the edge of the screen if there are no left segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' + # End filler on the edge of the screen if there are no right segments on the first line. + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' + fi + + #################################[ os_icon: os identifier ]################################## + # OS identifier color. + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND= + # Custom icon. + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' + + ################################[ prompt_char: prompt symbol ]################################ + # Green prompt symbol if the last command succeeded. + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 + # Red prompt symbol if the last command failed. + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 + # Default prompt symbol. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' + # Prompt symbol in command vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' + # Prompt symbol in visual vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' + # Prompt symbol in overwrite vi mode. + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true + # No line terminator if prompt_char is the last segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='' + # No line introducer if prompt_char is the first segment. + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= + + ##################################[ dir: current directory ]################################## + # Default current directory color. + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 + # If directory is too long, shorten some of its segments to the shortest possible unique + # prefix. The shortened directory can be tab-completed to the original. + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique + # Replace removed segment suffixes with this symbol. + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= + # Color of the shortened directory segments. + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 + # Color of the anchor directory segments. Anchor segments are never shortened. The first + # segment is always an anchor. + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 + # Display anchor directory segments in bold. + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true + # Don't shorten directories that contain any of these files. They are anchors. + local anchor_files=( + .bzr + .citc + .git + .hg + .node-version + .python-version + .go-version + .ruby-version + .lua-version + .java-version + .perl-version + .php-version + .tool-version + .shorten_folder_marker + .svn + .terraform + CVS + Cargo.toml + composer.json + go.mod + package.json + stack.yaml + ) + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers + # and other directories don't. + # + # Optionally, "first" and "last" can be followed by ":" where is an integer. + # This moves the truncation point to the right (positive offset) or to the left (negative offset) + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" + # respectively. + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false + # Don't shorten this many last directory segments. They are anchors. + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 + # Shorten directory if it's longer than this even if there is space for it. The value can + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, + # directory will be shortened only when prompt doesn't fit or when other parameters demand it + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). + # If set to `0`, directory will always be shortened to its minimum length. + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this + # many columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 + # If set to true, embed a hyperlink into the directory. Useful for quickly + # opening a directory in the file manager simply by clicking the link. + # Can also be handy when the directory is shortened, as it allows you to see + # the full directory that was used in previous commands. + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false + + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON + # and POWERLEVEL9K_DIR_CLASSES below. + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 + + # The default icon shown next to non-writable and non-existent directories when + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. + # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' + + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different + # directories. It must be an array with 3 * N elements. Each triplet consists of: + # + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with + # extended_glob option enabled. + # 2. Directory class for the purpose of styling. + # 3. An empty string. + # + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. + # + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=( + # '~/work(|/*)' WORK '' + # '~(|/*)' HOME '' + # '*' DEFAULT '') + # + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or + # WORK_NON_EXISTENT. + # + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an + # option to define custom colors and icons for different directory classes. + # + # # Styling for WORK. + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NOT_WRITABLE. + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 + # + # # Styling for WORK_NON_EXISTENT. + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 + # + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls + # back to POWERLEVEL9K_DIR_FOREGROUND. + # + # typeset -g POWERLEVEL9K_DIR_CLASSES=() + + # Custom prefix. + # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin ' + + #####################################[ vcs: git status ]###################################### + # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 ' + + # Untracked files icon. It's really a question mark, your font isn't broken. + # Change the value of this parameter to show a different icon. + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' + + # Formatter for Git status. + # + # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. + # + # You can edit the function to customize how Git status looks. + # + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. + function my_git_formatter() { + emulate -L zsh + + if [[ -n $P9K_CONTENT ]]; then + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. + typeset -g my_git_format=$P9K_CONTENT + return + fi + + if (( $1 )); then + # Styling for up-to-date Git status. + local meta='%f' # default foreground + local clean='%76F' # green foreground + local modified='%178F' # yellow foreground + local untracked='%39F' # blue foreground + local conflicted='%196F' # red foreground + else + # Styling for incomplete and stale Git status. + local meta='%244F' # grey foreground + local clean='%244F' # grey foreground + local modified='%244F' # grey foreground + local untracked='%244F' # grey foreground + local conflicted='%244F' # grey foreground + fi + + local res + + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} + # If local branch name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show local branch name in full without truncation, delete the next line. + (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" + fi + + if [[ -n $VCS_STATUS_TAG + # Show tag only if not on a branch. + # Tip: To always show tag, delete the next line. + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line + ]]; then + local tag=${(V)VCS_STATUS_TAG} + # If tag name is at most 32 characters long, show it in full. + # Otherwise show the first 12 … the last 12. + # Tip: To always show tag name in full without truncation, delete the next line. + (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line + res+="${meta}#${clean}${tag//\%/%%}" + fi + + # Display the current Git commit if there is no branch and no tag. + # Tip: To always display the current Git commit, delete the next line. + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" + + # Show tracking branch name if it differs from local branch. + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" + fi + + # Display "wip" if the latest commit's summary contains "wip" or "WIP". + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then + res+=" ${modified}wip" + fi + + # ⇣42 if behind the remote. + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" + # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" + # ⇠42 if behind the push remote. + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " + # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" + # *42 if have stashes. + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" + # 'merge' if the repo is in an unusual state. + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" + # ~42 if have merge conflicts. + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" + # +42 if have staged changes. + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" + # !42 if have unstaged changes. + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" + # ?42 if have untracked files. It's really a question mark, your font isn't broken. + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. + # Remove the next line if you don't want to see untracked files at all. + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" + # "─" if the number of unstaged files is unknown. This can happen due to + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower + # than the number of files in the Git index, or due to bash.showDirtyState being set to false + # in the repository config. The number of staged and untracked files may also be unknown + # in this case. + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" + + typeset -g my_git_format=$res + } + functions -M my_git_formatter 2>/dev/null + + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with + # more than this many files in the index. Negative value means infinity. + # + # If you are working in Git repositories with tens of millions of files and seeing performance + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's + # config: `git config bash.showDirtyState false`. + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 + + # Don't show Git status in prompt for repositories whose workdir matches this pattern. + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' + + # Disable the default Git status formatting. + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true + # Install our own Git status formatter. + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' + # Enable counters for staged, unstaged, etc. + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 + + # Icon color. + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 + # Custom icon. + # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon ' + + # Show status of repositories of these types. You can add svn and/or hg if you are + # using them. If you do, your prompt may become slow even when your current directory + # isn't in an svn or hg reposotiry. + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) + + # These settings are used for repositories other than Git or when gitstatusd fails and + # Powerlevel10k has to fall back to using vcs_info. + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 + + ##########################[ status: exit code of the last command ]########################### + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and + # style them independently from the regular OK and ERROR state. + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true + + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as + # it will signify success by turning green. + typeset -g POWERLEVEL9K_STATUS_OK=false + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when some part of a pipe command fails but the overall exit status is zero. It may look + # like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' + + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as + # it will signify error by turning red. + typeset -g POWERLEVEL9K_STATUS_ERROR=false + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when the last command was terminated by a signal. + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 + # Use terse signal names: "INT" instead of "SIGINT(2)". + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' + + # Status when some part of a pipe command fails and the overall exit status is also non-zero. + # It may look like this: 1|0. + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' + + ###################[ command_execution_time: duration of the last command ]################### + # Show duration of the last command if takes at least this many seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 + # Show this many fractional digits. Zero means round to seconds. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 + # Execution time color. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101 + # Duration format: 1d 2h 3m 4s. + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' + # Custom icon. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook ' + + #######################[ background_jobs: presence of background jobs ]####################### + # Don't show the number of background jobs. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=true + # Background jobs color. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70 + # Custom icon. + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='' + # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ direnv: direnv status (https://direnv.net/) ]######################## + # Direnv color. + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### + # Default asdf color. Only used to display tools for which there is no color override (see below). + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 + + # There are four parameters that can be used to hide asdf tools. Each parameter describes + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to + # hide a tool, it gets shown. + # + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: + # + # asdf local python 3.8.1 + # asdf global python 3.8.1 + # + # After running both commands the current python version is 3.8.1 and its source is "local" as + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, + # it'll hide python version in this case because 3.8.1 is the same as the global version. + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't + # contain "local". + + # Hide tool versions that don't come from one of these sources. + # + # Available sources: + # + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" + # - local `asdf current` says "set by /some/not/home/directory/file" + # - global `asdf current` says "set by /home/username/file" + # + # Note: If this parameter is set to (shell local global), it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) + + # If set to false, hide tool versions that are the same as global. + # + # Note: The name of this parameter doesn't reflect its meaning at all. + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false + + # If set to false, hide tool versions that are equal to "system". + # + # Note: If this parameter is set to true, it won't hide tools. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true + + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern + # in the current directory, or its parent directory, or its grandparent directory, and so on. + # + # Note: If this parameter is set to empty value, it won't hide tools. + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. + # + # Example: Hide nodejs version when there is no package.json and no *.js files in the current + # directory, in `..`, in `../..` and so on. + # + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= + + # Ruby version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Python version from asdf. + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Go version from asdf. + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Node.js version from asdf. + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Rust version from asdf. + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' + + # .NET Core version from asdf. + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_DOTNET_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Flutter version from asdf. + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Lua version from asdf. + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Java version from asdf. + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Perl version from asdf. + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Erlang version from asdf. + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Elixir version from asdf. + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Postgres version from asdf. + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' + + # PHP version from asdf. + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Haskell version from asdf. + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' + + # Julia version from asdf. + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' + + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### + # NordVPN connection indicator color. + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 + # Hide NordVPN connection indicator when not connected. + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= + # Custom icon. + # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## + # Ranger shell color. + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### + # Nnn shell color. + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## + # xplr shell color. + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 + # Custom icon. + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### + # Vim shell indicator color. + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 + # Custom icon. + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### + # Midnight Commander shell color. + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 + # Custom icon. + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## + # Nix shell color. + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 + + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ disk_usage: disk usage ]################################## + # Colors for different levels of disk usage. + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 + # Thresholds for different levels of disk usage (percentage points). + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false + # Custom icon. + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ ram: free RAM ]####################################### + # RAM color. + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 + # Custom icon. + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################################[ swap: used swap ]###################################### + # Swap color. + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 + # Custom icon. + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ######################################[ load: CPU load ]###################################### + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. + typeset -g POWERLEVEL9K_LOAD_WHICH=5 + # Load color when load is under 50%. + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 + # Load color when load is between 50% and 70%. + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 + # Load color when load is over 70%. + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 + # Custom icon. + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ + # Todo color. + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 + # Hide todo when the total number of tasks is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true + # Hide todo when the number of tasks after filtering is zero. + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false + + # Todo format. The following parameters are available within the expansion. + # + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. + # + # These variables correspond to the last line of the output of `todo.sh -p ls`: + # + # TODO: 24 of 42 tasks shown + # + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. + # + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ + # Timewarrior color. + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 + # If the tracked task is longer than 24 characters, truncate and append "…". + # Tip: To always display tasks without truncation, delete the following parameter. + # Tip: To hide task names and display just the icon when time tracking is enabled, set the + # value of the following parameter to "". + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' + + # Custom icon. + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## + # Taskwarrior color. + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 + + # Taskwarrior segment format. The following parameters are available within the expansion. + # + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. + # + # Zero values are represented as empty parameters. + # + # The default format: + # + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' + # + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' + + # Custom icon. + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##################################[ context: user@hostname ]################################## + # Context color when running with privileges. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 + # Context color in SSH without privileges. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 + # Default context color (no privileges, no SSH). + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 + + # Context format when running with privileges: bold user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' + # Context format when in SSH without privileges: user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' + # Default context format (no privileges, no SSH): user@hostname. + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' + + # Don't show context unless running with privileges or in SSH. + # Tip: Remove the next line to always show context. + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= + + # Custom icon. + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith ' + + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### + # Python virtual environment color. + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 + # Don't show Python version next to the virtual environment name. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false + # If set to "false", won't show virtualenv if pyenv is already shown. + # If set to "if-different", won't show virtualenv if it's the same as pyenv. + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false + # Separate environment name from Python version only with a space. + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ anaconda: conda environment (https://conda.io/) ]###################### + # Anaconda environment color. + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 + + # Anaconda segment format. The following parameters are available within the expansion. + # + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). + # + # CONDA_PROMPT_MODIFIER can be configured with the following command: + # + # conda config --set env_prompt '({default_env}) ' + # + # The last argument is a Python format string that can use the following variables: + # + # - prefix The same as CONDA_PREFIX. + # - default_env The same as CONDA_DEFAULT_ENV. + # - name The last segment of CONDA_PREFIX. + # - stacked_env Comma-separated list of names in the environment stack. The first element is + # always the same as default_env. + # + # Note: '({default_env}) ' is the default value of env_prompt. + # + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former + # is empty. + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' + + # Custom icon. + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ + # Pyenv color. + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 + # Hide python version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) + # If set to false, hide python version if it's the same as global: + # $(pyenv version-name) == $(pyenv global). + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide python version if it's equal to "system". + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true + + # Pyenv segment format. The following parameters are available within the expansion. + # + # - P9K_CONTENT Current pyenv environment (pyenv version-name). + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). + # + # The default format has the following logic: + # + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or + # starts with "$P9K_PYENV_PYTHON_VERSION/". + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' + + # Custom icon. + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ + # Goenv color. + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 + # Hide go version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) + # If set to false, hide go version if it's the same as global: + # $(goenv version-name) == $(goenv global). + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide go version if it's equal to "system". + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## + # Nodenv color. + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 + # Hide node version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) + # If set to false, hide node version if it's the same as global: + # $(nodenv version-name) == $(nodenv global). + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide node version if it's equal to "system". + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### + # Nvm color. + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ + # Nodeenv color. + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 + # Don't show Node version next to the environment name. + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false + # Separate environment name from Node version only with a space. + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= + # Custom icon. + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##############################[ node_version: node.js version ]############################### + # Node version color. + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 + # Show node version only when in a directory tree containing package.json. + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ go_version: go version (https://golang.org) ]######################## + # Go version color. + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 + # Show go version only when in a go project subdirectory. + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## + # Rust version color. + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 + # Show rust version only when in a rust project subdirectory. + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ + # .NET version color. + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 + # Show .NET version only when in a .NET project subdirectory. + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #####################[ php_version: php version (https://www.php.net/) ]###################### + # PHP version color. + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 + # Show PHP version only when in a PHP project subdirectory. + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### + # Laravel version color. + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 + # Custom icon. + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ####################[ java_version: java version (https://www.java.com/) ]#################### + # Java version color. + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 + # Show java version only when in a java project subdirectory. + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true + # Show brief version. + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false + # Custom icon. + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### + # Package color. + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 + # Package format. The following parameters are available within the expansion. + # + # - P9K_PACKAGE_NAME The value of `name` field in package.json. + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. + # + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' + # Custom icon. + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## + # Rbenv color. + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 + # Hide ruby version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) + # If set to false, hide ruby version if it's the same as global: + # $(rbenv version-name) == $(rbenv global). + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide ruby version if it's equal to "system". + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## + # Rvm color. + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 + # Don't show @gemset at the end. + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false + # Don't show ruby- at the front. + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false + # Custom icon. + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ + # Fvm color. + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### + # Lua color. + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 + # Hide lua version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) + # If set to false, hide lua version if it's the same as global: + # $(luaenv version-name) == $(luaenv global). + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide lua version if it's equal to "system". + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ + # Java color. + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 + # Hide java version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) + # If set to false, hide java version if it's the same as global: + # $(jenv version-name) == $(jenv global). + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide java version if it's equal to "system". + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ + # Perl color. + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 + # Hide perl version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) + # If set to false, hide perl version if it's the same as global: + # $(plenv version-name) == $(plenv global). + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide perl version if it's equal to "system". + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ + # PHP color. + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 + # Hide php version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) + # If set to false, hide php version if it's the same as global: + # $(phpenv version-name) == $(phpenv global). + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide php version if it's equal to "system". + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### + # Scala color. + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 + # Hide scala version if it doesn't come from one of these sources. + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) + # If set to false, hide scala version if it's the same as global: + # $(scalaenv version-name) == $(scalaenv global). + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false + # If set to false, hide scala version if it's equal to "system". + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true + # Custom icon. + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### + # Haskell color. + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 + # Hide haskell version if it doesn't come from one of these sources. + # + # shell: version is set by STACK_YAML + # local: version is set by stack.yaml up the directory tree + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) + # If set to false, hide haskell version if it's the same as in the implicit global project. + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true + # Custom icon. + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# + # Show kubecontext only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show kubecontext. + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern' + + # Kubernetes context classes for the purpose of using different colors, icons and expansions with + # different contexts. + # + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current kubernetes context gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current kubernetes context is "deathray-testing/default", its class is TEST + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 + # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext + # segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # Within the expansion the following parameters are always available: + # + # - P9K_CONTENT The content that would've been displayed if there was no content + # expansion defined. + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the + # output of `kubectl config get-contexts`. + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE + # in the output of `kubectl config get-contexts`. If there is no + # namespace, the parameter is set to "default". + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the + # output of `kubectl config get-contexts`. + # + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), + # the following extra parameters are available: + # + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. + # + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=gke + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + # + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": + # + # - P9K_KUBECONTEXT_CLOUD_NAME=eks + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' + # Append the current context's namespace if it's not "default". + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' + + # Custom prefix. + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat ' + + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# + # Don't show terraform workspace if it's literally "default". + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current terraform workspace gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' OTHER) + # + # If your current terraform workspace is "project_test", its class is TEST because "project_test" + # doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' OTHER) + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## + # Terraform version color. + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 + # Custom icon. + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# + # Show aws only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show aws. + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' + + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element + # in each pair defines a pattern against which the current AWS profile gets matched. + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, + # you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The + # first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD + # '*test*' TEST + # '*' DEFAULT) + # + # If your current AWS profile is "company_test", its class is TEST + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' + typeset -g POWERLEVEL9K_AWS_CLASSES=( + # '*prod*' PROD # These values are examples that are unlikely + # '*test*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # AWS segment format. The following parameters are available within the expansion. + # + # - P9K_AWS_PROFILE The name of the current AWS profile. + # - P9K_AWS_REGION The region associated with the current AWS profile. + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' + + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# + # AWS Elastic Beanstalk environment color. + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 + # Custom icon. + # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## + # Show azure only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show azure. + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' + # Azure account name color. + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 + # Custom icon. + # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### + # Show gcloud only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show gcloud. + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' + # Google cloud color. + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 + + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative + # enough. You can use the following parameters in the expansions. Each of them corresponds to the + # output of `gcloud` tool. + # + # Parameter | Source + # -------------------------|-------------------------------------------------------------------- + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. + # + # Obtaining project name requires sending a request to Google servers. This can take a long time + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets + # set and gcloud prompt segment transitions to state COMPLETE. + # + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' + + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name + # this often. Negative value disables periodic polling. In this mode project name is retrieved + # only when the current configuration, account or project id changes. + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 + + # Custom icon. + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# + # Show google_app_cred only when the command you are typing invokes one of these tools. + # Tip: Remove the next line to always show google_app_cred. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' + + # Google application credentials classes for the purpose of using different colors, icons and + # expansions with different credentials. + # + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first + # element in each pair defines a pattern against which the current kubernetes context gets + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION + # parameters, you'll see this value in your prompt. The second element of each pair in + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. + # The first match wins. + # + # For example, given these settings: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD + # '*:*test*:*' TEST + # '*' DEFAULT) + # + # If your current Google application credentials is "service_account deathray-testing x@y.com", + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. + # + # You can define different colors, icons and content expansions for different classes: + # + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( + # '*:*prod*:*' PROD # These values are examples that are unlikely + # '*:*test*:*' TEST # to match your needs. Customize them as needed. + '*' DEFAULT) + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. + # + # You can use the following parameters in the expansion. Each of them corresponds to one of the + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. + # + # Parameter | JSON key file field + # ---------------------------------+--------------- + # P9K_GOOGLE_APP_CRED_TYPE | type + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email + # + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' + + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### + # Toolbox color. + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' + # Custom icon. + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin ' + + ###############################[ public_ip: public IP address ]############################### + # Public IP color. + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 + # Custom icon. + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ########################[ vpn_ip: virtual private network indicator ]######################### + # VPN IP color. + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 + # When on VPN, show just an icon without the IP address. + # Tip: To display the private IP address when on VPN, remove the next line. + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN + # to see the name of the interface. + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' + # If set to true, show one segment per matching network interface. If set to false, show only + # one segment corresponding to the first matching network interface. + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false + # Custom icon. + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### + # IP color. + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 + # The following parameters are accessible within the expansion: + # + # Parameter | Meaning + # ----------------------+------------------------------------------- + # P9K_IP_IP | IP address + # P9K_IP_INTERFACE | network interface + # P9K_IP_RX_BYTES | total number of bytes received + # P9K_IP_TX_BYTES | total number of bytes sent + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt + # P9K_IP_RX_RATE | receive rate (since last prompt) + # P9K_IP_TX_RATE | send rate (since last prompt) + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %70F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %215F⇡$P9K_IP_TX_RATE}' + # Show information for the first network interface whose name matches this regular expression. + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' + # Custom icon. + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' + + #########################[ proxy: system-wide http/https/ftp proxy ]########################## + # Proxy color. + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' + + ################################[ battery: internal battery ]################################# + # Show battery in red when it's below this level and not connected to power supply. + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 + # Show battery in green when it's charging or fully charged. + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 + # Show battery in yellow when it's discharging. + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 + # Battery pictograms going from low to high level of charge. + typeset -g POWERLEVEL9K_BATTERY_STAGES='\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' + # Don't show the remaining time to charge/discharge. + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false + + #####################################[ wifi: wifi speed ]##################################### + # WiFi color. + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 + # Custom icon. + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). + # + # # Wifi colors and icons for different signal strength levels (low to high). + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values + # + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' + # + # The following parameters are accessible within the expansions: + # + # Parameter | Meaning + # ----------------------+--------------- + # P9K_WIFI_SSID | service set identifier, a.k.a. network name + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) + + ####################################[ time: current time ]#################################### + # Current time color. + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 + # Format for the current time: 09:51:02. See `man 3 strftime`. + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' + # If set to true, time will update when you hit enter. This way prompts for the past + # commands will contain the start times of their commands as opposed to the default + # behavior where they contain the end times of their preceding commands. + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false + # Custom icon. + # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' + # Custom prefix. + # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat ' + + # Example of a user-defined prompt segment. Function prompt_example will be called on every + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. + # + # Type `p10k help segment` for documentation and a more sophisticated example. + function prompt_example() { + p10k segment -f 208 -i '⭐' -t 'hello, %n' + } + + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job + # is to generate the prompt segment for display in instant prompt. See + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k + # will replay these calls without actually calling instant_prompt_*. It is imperative that + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this + # rule is not observed, the content of instant prompt will be incorrect. + # + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. + function instant_prompt_example() { + # Since prompt_example always makes the same `p10k segment` calls, we can call it from + # instant_prompt_example. This will give us the same `example` prompt segment in the instant + # and regular prompts. + prompt_example + } + + # User-defined prompt segments can be customized the same way as built-in segments. + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' + + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt + # when accepting a command line. Supported values: + # + # - off: Don't change prompt when accepting a command line. + # - always: Trim down prompt when accepting a command line. + # - same-dir: Trim down prompt when accepting a command line unless this is the first command + # typed after changing current working directory. + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always + + # Instant prompt mode. + # + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found + # it incompatible with your zsh configuration files. + # - quiet: Enable instant prompt and don't print warnings when detecting console output + # during zsh initialization. Choose this if you've read and understood + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. + # - verbose: Enable instant prompt and print a warning when detecting console output during + # zsh initialization. Choose this if you've never tried instant prompt, haven't + # seen the warning, or if you are unsure what this all means. + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose + + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you + # really need it. + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true + + # If p10k is already loaded, reload configuration. + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. + (( ! $+functions[p10k] )) || p10k reload +} + +# Tell `p10k configure` which file it should overwrite. +typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} + +(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} +'builtin' 'unset' 'p10k_config_opts' diff --git a/.config/zsh/.zlogin b/.config/zsh/.zlogin new file mode 100644 index 0000000..ac4d342 --- /dev/null +++ b/.config/zsh/.zlogin @@ -0,0 +1,26 @@ +# +# Executes commands at login post-zshrc. +# +# Authors: +# Sorin Ionescu +# + +# Execute code that does not affect the current session in the background. +{ + # Compile the completion dump to increase startup speed. + zcompdump="${XDG_CACHE_HOME:-$HOME/.cache}/prezto/zcompdump" + if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then + zcompile "$zcompdump" + fi +} &! + +# Execute code only if STDERR is bound to a TTY. +if [[ -o INTERACTIVE && -t 2 ]]; then + + # Print a random, hopefully interesting, adage. + if (( $+commands[fortune] )); then + fortune -s + print + fi + +fi >&2 diff --git a/.config/zsh/.zlogout b/.config/zsh/.zlogout new file mode 100644 index 0000000..b5d9858 --- /dev/null +++ b/.config/zsh/.zlogout @@ -0,0 +1,19 @@ +# +# Executes commands at logout. +# +# Authors: +# Sorin Ionescu +# + +# Execute code only if STDERR is bound to a TTY. +[[ -o INTERACTIVE && -t 2 ]] && { + +SAYINGS=( + "So long and thanks for all the fish.\n -- Douglas Adams" + "Good morning! And in case I don't see ya, good afternoon, good evening and goodnight.\n --Truman Burbank" +) + +# Print a randomly-chosen message: +echo $SAYINGS[$(($RANDOM % ${#SAYINGS} + 1))] + +} >&2 diff --git a/.config/zsh/.zpreztorc b/.config/zsh/.zpreztorc new file mode 100644 index 0000000..8d2bbb8 --- /dev/null +++ b/.config/zsh/.zpreztorc @@ -0,0 +1,237 @@ +# +# Sets Prezto options. +# +# Authors: +# Sorin Ionescu +# + +# +# General +# + +# Set case-sensitivity for completion, history lookup, etc. +# zstyle ':prezto:*:*' case-sensitive 'yes' + +# Color output (auto set to 'no' on dumb terminals). +zstyle ':prezto:*:*' color 'yes' + +# Add additional directories to load prezto modules from +# zstyle ':prezto:load' pmodule-dirs $HOME/.zprezto-contrib + +# Allow module overrides when pmodule-dirs causes module name collisions +# zstyle ':prezto:load' pmodule-allow-overrides 'yes' + +# Set the Zsh modules to load (man zshmodules). +# zstyle ':prezto:load' zmodule 'attr' 'stat' + +# Set the Zsh functions to load (man zshcontrib). +# zstyle ':prezto:load' zfunction 'zargs' 'zmv' + +# Set the Prezto modules to load (browse modules). +# The order matters. +zstyle ':prezto:load' pmodule \ + 'environment' \ + 'terminal' \ + 'editor' \ + 'history' \ + 'directory' \ + 'spectrum' \ + 'utility' \ + 'rsync' \ + 'tmux' \ + 'archive' \ + 'completion' \ + 'syntax-highlighting' \ + 'history-substring-search' \ + 'autosuggestions' \ + 'prompt' + + # 'rsync' \ rsync-copy rsync-move + # 'git' \ use oh my zsh git + # https://github.com/Asocia/prezto/tree/master/modules/spectrum +# +# Autosuggestions +# + +# Set the query found color. +zstyle ':prezto:module:autosuggestions:color' found 'fg=32,bold' + +# +# Completions +# + +# Set the entries to ignore in static '/etc/hosts' for host completion. +# zstyle ':prezto:module:completion:*:hosts' etc-host-ignores \ +# '0.0.0.0' '127.0.0.1' + +# +# Editor +# + +# Set the key mapping style to 'emacs' or 'vi'. +zstyle ':prezto:module:editor' key-bindings 'vi' + +# Auto convert .... to ../.. +zstyle ':prezto:module:editor' dot-expansion 'yes' + +# Allow the zsh prompt context to be shown. +zstyle ':prezto:module:editor' ps-context 'yes' + +# +# Git +# + +# Ignore submodules when they are 'dirty', 'untracked', 'all', or 'none'. +# zstyle ':prezto:module:git:status:ignore' submodules 'all' + +# +# GNU Utility +# + +# Set the command prefix on non-GNU systems. +# zstyle ':prezto:module:gnu-utility' prefix 'g' + +# +# History Substring Search +# + +# Set the query found color. +# zstyle ':prezto:module:history-substring-search:color' found '' + +# Set the query not found color. +# zstyle ':prezto:module:history-substring-search:color' not-found '' + +# Set the search globbing flags. +# zstyle ':prezto:module:history-substring-search' globbing-flags '' + +# +# macOS +# + +# Set the keyword used by `mand` to open man pages in Dash.app +# zstyle ':prezto:module:osx:man' dash-keyword 'manpages' + +# +# Pacman +# + +# Set the Pacman frontend. +# zstyle ':prezto:module:pacman' frontend 'yaourt' + +# +# Prompt +# + +# Set the prompt theme to load. +# Setting it to 'random' loads a random theme. +# Auto set to 'off' on dumb terminals. +zstyle ':prezto:module:prompt' theme 'powerlevel10k' + +# Set the working directory prompt display length. +# By default, it is set to 'short'. Set it to 'long' (without '~' expansion) +# for longer or 'full' (with '~' expansion) for even longer prompt display. +# zstyle ':prezto:module:prompt' pwd-length 'short' + +# Set the prompt to display the return code along with an indicator for non-zero +# return codes. This is not supported by all prompts. +# zstyle ':prezto:module:prompt' show-return-val 'yes' + +# +# Python +# + +# Auto switch the Python virtualenv on directory change. +# zstyle ':prezto:module:python:virtualenv' auto-switch 'yes' + +# Automatically initialize virtualenvwrapper if pre-requisites are met. +# zstyle ':prezto:module:python:virtualenv' initialize 'yes' + +# +# Ruby +# + +# Auto switch the Ruby version on directory change. +# zstyle ':prezto:module:ruby:chruby' auto-switch 'yes' + +# +# Screen +# + +# Auto start a session when Zsh is launched in a local terminal. +# zstyle ':prezto:module:screen:auto-start' local 'yes' + +# Auto start a session when Zsh is launched in a SSH connection. +# zstyle ':prezto:module:screen:auto-start' remote 'yes' + +# +# SSH +# + +# Set the SSH identities to load into the agent. +# zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_rsa2' 'id_github' + +# +# Syntax Highlighting +# + +# Set syntax highlighters. +# By default, only the main highlighter is enabled. +zstyle ':prezto:module:syntax-highlighting' highlighters \ + 'main' \ + 'brackets' \ + 'pattern' \ + 'line' \ + 'cursor' \ + 'root' +# +# Set syntax highlighting styles. +# zstyle ':prezto:module:syntax-highlighting' styles \ +# 'builtin' 'bg=blue' \ +# 'command' 'bg=blue' \ +# 'function' 'bg=blue' +# +# Set syntax pattern styles. +# zstyle ':prezto:module:syntax-highlighting' pattern \ +# 'rm*-rf*' 'fg=white,bold,bg=red' + +# +# Terminal +# + +# Auto set the tab and window titles. +# zstyle ':prezto:module:terminal' auto-title 'yes' + +# Set the window title format. +# zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s' + +# Set the tab title format. +# zstyle ':prezto:module:terminal:tab-title' format '%m: %s' + +# Set the terminal multiplexer title format. +# zstyle ':prezto:module:terminal:multiplexer-title' format '%s' + +# +# Tmux +# + +# Auto start a session when Zsh is launched in a local terminal. +zstyle ':prezto:module:tmux:auto-start' local 'no' + +# Auto start a session when Zsh is launched in a SSH connection. +# zstyle ':prezto:module:tmux:auto-start' remote 'yes' + +# Integrate with iTerm2. +# zstyle ':prezto:module:tmux:iterm' integrate 'yes' + +# Set the default session name: +session_name=$(echo $TERM | cut -d"-" -f1) +zstyle ':prezto:module:tmux:session' name $session_name + +# +# Utility +# + +# Enabled safe options. This aliases cp, ln, mv and rm so that they prompt +# before deleting or overwriting files. Set to 'no' to disable this safer +# behavior. +# zstyle ':prezto:module:utility' safe-ops 'yes' diff --git a/.config/zsh/.zprofile b/.config/zsh/.zprofile new file mode 100644 index 0000000..d693344 --- /dev/null +++ b/.config/zsh/.zprofile @@ -0,0 +1,65 @@ +# +# Executes commands at login pre-zshrc. +# +# Authors: +# Sorin Ionescu +# + +export npm_config_prefix="$HOME/.local" + +# +# Browser +# + +if [[ "$OSTYPE" == darwin* ]]; then + export BROWSER='open' +fi + +# +# Editors +# + +export EDITOR='nvim' +export VISUAL="$EDITOR" +export PAGER='less' + +# +# Language +# + +if [[ -z "$LANG" ]]; then + export LANG='en_US.UTF-8' +fi + +# +# Paths +# + +# Ensure path arrays do not contain duplicates. +typeset -gU cdpath fpath mailpath path + +# Set the list of directories that cd searches. +# cdpath=( +# $cdpath +# ) + +# Set the list of directories that Zsh searches for programs. +path=( + /usr/local/{bin,sbin} + $path +) + +# +# Less +# + +# Set the default Less options. +# Mouse-wheel scrolling has been disabled by -X (disable screen clearing). +# Remove -X to enable it. +export LESS='-g -i -M -R -S -w -z-4' + +# Set the Less input preprocessor. +# Try both `lesspipe` and `lesspipe.sh` as either might exist on a system. +if (( $#commands[(i)lesspipe(|.sh)] )); then + export LESSOPEN="| /usr/bin/env $commands[(i)lesspipe(|.sh)] %s 2>&-" +fi diff --git a/.config/zsh/.zsh/_git b/.config/zsh/.zsh/_git new file mode 100644 index 0000000..6c56296 --- /dev/null +++ b/.config/zsh/.zsh/_git @@ -0,0 +1,294 @@ +#compdef git gitk + +# zsh completion wrapper for git +# +# Copyright (c) 2012-2020 Felipe Contreras +# +# The recommended way to install this script is to make a copy of it as a +# file named '_git' inside any directory in your fpath. +# +# For example, create a directory '~/.zsh/', copy this file to '~/.zsh/_git', +# and then add the following to your ~/.zshrc file: +# +# fpath=(~/.zsh $fpath) +# +# You need git's bash completion script installed. By default bash-completion's +# location will be used (e.g. pkg-config --variable=completionsdir bash-completion). +# +# If your bash completion script is somewhere else, you can specify the +# location in your ~/.zshrc: +# +# zstyle ':completion:*:*:git:*' script ~/.git-completion.bash +# + +zstyle -T ':completion:*:*:git:*' tag-order && \ + zstyle ':completion:*:*:git:*' tag-order 'common-commands' + +zstyle -s ":completion:*:*:git:*" script script +if [ -z "$script" ]; then + local -a locations + local e bash_completion + + bash_completion=$(pkg-config --variable=completionsdir bash-completion 2>/dev/null) || + bash_completion='/usr/share/bash-completion/completions/' + + locations=( + "$(dirname ${funcsourcetrace[1]%:*})"/git-completion.bash + "$HOME/.local/share/bash-completion/completions/git" + "$bash_completion/git" + '/etc/bash_completion.d/git' # old debian + ) + for e in $locations; do + test -f $e && script="$e" && break + done +fi + +local old_complete="$functions[complete]" +functions[complete]=: +GIT_SOURCING_ZSH_COMPLETION=y . "$script" +functions[complete]="$old_complete" + +__gitcomp () +{ + emulate -L zsh + + local cur_="${3-$cur}" + + case "$cur_" in + --*=) + ;; + --no-*) + local c IFS=$' \t\n' + local -a array + for c in ${=1}; do + if [[ $c == "--" ]]; then + continue + fi + c="$c${4-}" + case $c in + --*=|*.) ;; + *) c="$c " ;; + esac + array+=("$c") + done + compset -P '*[=:]' + compadd -Q -S '' -p "${2-}" -a -- array && _ret=0 + ;; + *) + local c IFS=$' \t\n' + local -a array + for c in ${=1}; do + if [[ $c == "--" ]]; then + c="--no-...${4-}" + array+=("$c ") + break + fi + c="$c${4-}" + case $c in + --*=|*.) ;; + *) c="$c " ;; + esac + array+=("$c") + done + compset -P '*[=:]' + compadd -Q -S '' -p "${2-}" -a -- array && _ret=0 + ;; + esac +} + +__gitcomp_direct () +{ + emulate -L zsh + + compset -P '*[=:]' + compadd -Q -S '' -- ${(f)1} && _ret=0 +} + +__gitcomp_nl () +{ + emulate -L zsh + + compset -P '*[=:]' + compadd -Q -S "${4- }" -p "${2-}" -- ${(f)1} && _ret=0 +} + +__gitcomp_file () +{ + emulate -L zsh + + compset -P '*[=:]' + compadd -f -p "${2-}" -- ${(f)1} && _ret=0 +} + +__gitcomp_direct_append () +{ + __gitcomp_direct "$@" +} + +__gitcomp_nl_append () +{ + __gitcomp_nl "$@" +} + +__gitcomp_file_direct () +{ + __gitcomp_file "$1" "" +} + +_git_zsh () +{ + __gitcomp "v1.1" +} + +__git_complete_command () +{ + emulate -L zsh + + local command="$1" + local completion_func="_git_${command//-/_}" + if (( $+functions[$completion_func] )); then + emulate ksh -c $completion_func + return 0 + else + return 1 + fi +} + +__git_zsh_bash_func () +{ + emulate -L ksh + + local command=$1 + + __git_complete_command "$command" && return + + local expansion=$(__git_aliased_command "$command") + if [ -n "$expansion" ]; then + words[1]=$expansion + __git_complete_command "$expansion" + fi +} + +__git_zsh_cmd_common () +{ + local -a list + list=( + add:'add file contents to the index' + bisect:'find by binary search the change that introduced a bug' + branch:'list, create, or delete branches' + checkout:'checkout a branch or paths to the working tree' + clone:'clone a repository into a new directory' + commit:'record changes to the repository' + diff:'show changes between commits, commit and working tree, etc' + fetch:'download objects and refs from another repository' + grep:'print lines matching a pattern' + init:'create an empty Git repository or reinitialize an existing one' + log:'show commit logs' + merge:'join two or more development histories together' + mv:'move or rename a file, a directory, or a symlink' + pull:'fetch from and merge with another repository or a local branch' + push:'update remote refs along with associated objects' + rebase:'forward-port local commits to the updated upstream head' + reset:'reset current HEAD to the specified state' + restore:'restore working tree files' + rm:'remove files from the working tree and from the index' + show:'show various types of objects' + status:'show the working tree status' + switch:'switch branches' + tag:'create, list, delete or verify a tag object signed with GPG') + _describe -t common-commands 'common commands' list && _ret=0 +} + +__git_zsh_cmd_alias () +{ + local -a list + list=(${${(0)"$(git config -z --get-regexp '^alias\.*')"}#alias.}) + list=(${(f)"$(printf "%s:alias for '%s'\n" ${(f@)list})"}) + _describe -t alias-commands 'aliases' list && _ret=0 +} + +__git_zsh_cmd_all () +{ + local -a list + emulate ksh -c __git_compute_all_commands + list=( ${=__git_all_commands} ) + _describe -t all-commands 'all commands' list && _ret=0 +} + +__git_zsh_main () +{ + local curcontext="$curcontext" state state_descr line + typeset -A opt_args + local -a orig_words + + orig_words=( ${words[@]} ) + + _arguments -C \ + '(-p --paginate --no-pager)'{-p,--paginate}'[pipe all output into ''less'']' \ + '(-p --paginate)--no-pager[do not pipe git output into a pager]' \ + '--git-dir=-[set the path to the repository]: :_directories' \ + '--bare[treat the repository as a bare repository]' \ + '(- :)--version[prints the git suite version]' \ + '--exec-path=-[path to where your core git programs are installed]:: :_directories' \ + '--html-path[print the path where git''s HTML documentation is installed]' \ + '--info-path[print the path where the Info files are installed]' \ + '--man-path[print the manpath (see `man(1)`) for the man pages]' \ + '--work-tree=-[set the path to the working tree]: :_directories' \ + '--namespace=-[set the git namespace]' \ + '--no-replace-objects[do not use replacement refs to replace git objects]' \ + '(- :)--help[prints the synopsis and a list of the most commonly used commands]: :->arg' \ + '(-): :->command' \ + '(-)*:: :->arg' && return + + case $state in + (command) + _tags common-commands alias-commands all-commands + while _tags; do + _requested common-commands && __git_zsh_cmd_common + _requested alias-commands && __git_zsh_cmd_alias + _requested all-commands && __git_zsh_cmd_all + let _ret || break + done + ;; + (arg) + local command="${words[1]}" __git_dir + + if (( $+opt_args[--bare] )); then + __git_dir='.' + else + __git_dir=${opt_args[--git-dir]} + fi + + (( $+opt_args[--help] )) && command='help' + + words=( ${orig_words[@]} ) + + __git_zsh_bash_func $command + ;; + esac +} + +_git () +{ + local _ret=1 + local cur cword prev + + cur=${words[CURRENT]} + prev=${words[CURRENT-1]} + let cword=CURRENT-1 + + if (( $+functions[__${service}_zsh_main] )); then + __${service}_zsh_main + elif (( $+functions[__${service}_main] )); then + emulate ksh -c __${service}_main + elif (( $+functions[_${service}] )); then + emulate ksh -c _${service} + elif (( $+functions[_${service//-/_}] )); then + emulate ksh -c _${service//-/_} + fi + + let _ret && _default && _ret=0 + return _ret +} + +_git diff --git a/.config/zsh/.zshenv b/.config/zsh/.zshenv new file mode 100644 index 0000000..4922792 --- /dev/null +++ b/.config/zsh/.zshenv @@ -0,0 +1,12 @@ +# +# Defines environment variables. +# +# Authors: +# Sorin Ionescu +# Şahin Akkaya + +# Ensure that a non-login, non-interactive shell has a defined environment. +if [[ ( "$SHLVL" -eq 1 && ! -o LOGIN ) && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then + source "${ZDOTDIR:-$HOME}/.zprofile" +fi +. "$HOME/.cargo/env" diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc new file mode 100644 index 0000000..0dd9483 --- /dev/null +++ b/.config/zsh/.zshrc @@ -0,0 +1,147 @@ + +d="$HOME/scripts/colorscripts" +bash "$d/`ls $d | shuf -n 1`" +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.config/zsh/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + +# +# Executes commands at the start of an interactive session. +# +# Authors: +# Sorin Ionescu +# + + +# Source Prezto. +if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then + source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" +fi + + +fpath=("${ZDOTDIR:-$HOME}/.zsh" $fpath) + +# Customize to your needs... +source "${ZDOTDIR:-$HOME}/.aliases" + +ZSH_AUTOSUGGEST_STRATEGY=(history) +ZSH_AUTOSUGGEST_MANUAL_REBIND=true + + +# To customize prompt, run `p10k configure` or edit ~/.config/zsh/.p10k.zsh. +[[ ! -f ~/.config/zsh/.p10k.zsh ]] || source ~/.config/zsh/.p10k.zsh + +### Added by Zinit's installer +if [[ ! -f $HOME/.local/share/zinit/zinit.git/zinit.zsh ]]; then + print -P "%F{33} %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f" + command mkdir -p "$HOME/.local/share/zinit" && command chmod g-rwX "$HOME/.local/share/zinit" + command git clone https://github.com/zdharma-continuum/zinit "$HOME/.local/share/zinit/zinit.git" && \ + print -P "%F{33} %F{34}Installation successful.%f%b" || \ + print -P "%F{160} The clone has failed.%f%b" +fi + +source "$HOME/.local/share/zinit/zinit.git/zinit.zsh" +autoload -Uz _zinit +(( ${+_comps} )) && _comps[zinit]=_zinit + +# Load a few important annexes, without Turbo +# (this is currently required for annexes) +zinit light-mode for \ + zdharma-continuum/zinit-annex-as-monitor \ + zdharma-continuum/zinit-annex-bin-gem-node \ + zdharma-continuum/zinit-annex-patch-dl \ + zdharma-continuum/zinit-annex-rust + +### End of Zinit's installer chunk + +zinit snippet OMZ::plugins/git/git.plugin.zsh +zinit snippet OMZ::plugins/last-working-dir/last-working-dir.plugin.zsh +zinit snippet OMZ::plugins/dirhistory/dirhistory.plugin.zsh +zinit light skywind3000/z.lua + +# ZVM +function zvm_config() { + ZVM_LINE_INIT_MODE=$ZVM_MODE_INSERT + ZVM_INSERT_MODE_CURSOR=$ZVM_CURSOR_BLINKING_BEAM + ZVM_NORMAL_MODE_CURSOR=$ZVM_CURSOR_BLINKING_BLOCK + ZVM_LAZY_KEYBINDINGS=true + ZVM_VI_INSERT_ESCAPE_BINDKEY=kj +} + +zinit ice depth=1 +zinit light jeffreytse/zsh-vi-mode + +# The plugin will auto execute this zvm_after_init function +function zvm_after_init() { + [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh + + bindkey '^b' backward-word + bindkey '^f' forward-word + bindkey '^g' autosuggest-accept + # allow ctrl-r and ctrl-s to search the history + # bindkey '^r' history-incremental-search-backward + # bindkey '^s' history-incremental-search-forward + bindkey '^h' backward-kill-word + bindkey '^[[M' kill-word + bindkey -s '^@' "" + bindkey -s '' "fg\n" + + + # allow ctrl-a and ctrl-e to move to beginning/end of line + bindkey '^a' beginning-of-line + bindkey '^e' end-of-line + + + # allow ctrl-h, ctrl-w, ctrl-? for char and word deletion (standard behaviour) + # bindkey '^h' backward-delete-char + bindkey '^w' backward-kill-word + + + bindkey '^x' fzf-cd-widget + bindkey "\e[1;3D" dirhistory_zle_dirhistory_back + bindkey "\e[1;3C" dirhistory_zle_dirhistory_future + bindkey "\e[1;3A" dirhistory_zle_dirhistory_up + bindkey "\e[1;3B" dirhistory_zle_dirhistory_down +} + +doit () +{ + # this function is created for forcing the deletion of the file or directory. + # + # ❯ rm somedir + # rm: cannot remove 'somedir': Is a directory + # ❯ rmdir somedir/ + # rmdir: failed to remove 'somedir/': Directory not empty + # ❯ rm -rf somedir/ + # rm: cannot remove 'somedir/': Permission denied + # + # Just remove the f**king directory!! + + + lastCommand=$(history | tail -n 1 | cut -d' ' -f3-) + firstWord=$(echo $lastCommand | cut -d' ' -f1) + RED="\033[1;31m" + GREEN="\033[1;32m" + NOCOLOR="\033[0m" + + lastWord=$(echo $lastCommand | awk '{print $NF}') + case "$firstWord" in + "rm"|"rmdir") + echo -en "Execute ${RED}\"sudo rm -rf $lastWord\"${NOCOLOR}?" + read -k "? " ans + echo + if [ "$ans" = "y" ]; then + sudo rm -rf $lastWord + fi + ;; + "cd") + mkdir $lastWord && cd $lastWord + ;; + *) echo "Don't know what to do with \"$lastCommand\"." + ;; + esac +} + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e71a4f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.cfg diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1091366 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,26 @@ +[submodule "GitRepositories/st"] + path = GitRepositories/st + url = https://github.com/Asocia/st.git +[submodule ".config/nvim"] + path = .config/nvim + url = https://github.com/Asocia/nvim-config.git +[submodule "GitRepositories/polybar-wireguard"] + path = GitRepositories/polybar-wireguard + url = https://github.com/mil-ad/polybar-wireguard.git + ignore = dirty +[submodule "GitRepositories/rofi-bluetooth"] + path = GitRepositories/rofi-bluetooth + url = https://github.com/nickclyde/rofi-bluetooth.git + ignore = dirty +[submodule "GitRepositories/binary-wallpaper"] + path = GitRepositories/binary-wallpaper + url = https://github.com/Asocia/binary-clock-wallpaper.git +[submodule "GitRepositories/bat-extras"] + path = GitRepositories/bat-extras + url = https://github.com/eth-p/bat-extras.git +[submodule "GitRepositories/fzf"] + path = GitRepositories/fzf + url = https://github.com/junegunn/fzf +[submodule ".config/tmux/plugins/tpm"] + path = .config/tmux/plugins/tpm + url = https://github.com/tmux-plugins/tpm diff --git a/.local/bin/passmenu b/.local/bin/passmenu new file mode 100755 index 0000000..76d92ab --- /dev/null +++ b/.local/bin/passmenu @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +shopt -s nullglob globstar + +typeit=0 +if [[ $1 == "--type" ]]; then + typeit=1 + shift +fi + +if [[ -n $WAYLAND_DISPLAY ]]; then + dmenu=dmenu-wl + xdotool="ydotool type --file -" +elif [[ -n $DISPLAY ]]; then + dmenu=dmenu + xdotool="xdotool type --clearmodifiers --file -" +else + echo "Error: No Wayland or X11 display detected" >&2 + exit 1 +fi + +prefix=${PASSWORD_STORE_DIR-~/.password-store} +password_files=( "$prefix"/**/*.gpg ) +password_files=( "${password_files[@]#"$prefix"/}" ) +password_files=( "${password_files[@]%.gpg}" ) + +password=$(printf '%s\n' "${password_files[@]}" | "$dmenu" "$@") + +[[ -n $password ]] || exit + +if [[ $typeit -eq 0 ]]; then + pass show -c "$password" 2>/dev/null +else + pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } | $xdotool +fi diff --git a/.profile b/.profile new file mode 100644 index 0000000..20685af --- /dev/null +++ b/.profile @@ -0,0 +1,8 @@ +export ZDOTDIR="/home/sahin/.config/zsh" +export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" + +export PATH="$PATH:$HOME/scripts:" +export PATH="$PATH:$HOME/.config/rofi/bin/:" +export PATH="$PATH:$HOME/.local/bin/" + +[ ! -s ~/.config/mpd/pid ] && mpd diff --git a/GitRepositories/bat-extras b/GitRepositories/bat-extras new file mode 160000 index 0000000..8ad00bd --- /dev/null +++ b/GitRepositories/bat-extras @@ -0,0 +1 @@ +Subproject commit 8ad00bd978678b67d61176e8397369e1e6afa4fc diff --git a/GitRepositories/binary-wallpaper b/GitRepositories/binary-wallpaper new file mode 160000 index 0000000..356f3bb --- /dev/null +++ b/GitRepositories/binary-wallpaper @@ -0,0 +1 @@ +Subproject commit 356f3bb253ecc14997e1abaf7406b914f69f06dc diff --git a/GitRepositories/fzf b/GitRepositories/fzf new file mode 160000 index 0000000..5f385d8 --- /dev/null +++ b/GitRepositories/fzf @@ -0,0 +1 @@ +Subproject commit 5f385d88e0a786f20c4231b82f250945a6583a17 diff --git a/GitRepositories/patches/polybar-wireguard/wireguard.patch b/GitRepositories/patches/polybar-wireguard/wireguard.patch new file mode 100644 index 0000000..186a0f9 --- /dev/null +++ b/GitRepositories/patches/polybar-wireguard/wireguard.patch @@ -0,0 +1,33 @@ +diff --git a/polybar-wireguard b/rofi-wireguard +similarity index 88% +rename from polybar-wireguard +rename to rofi-wireguard +index 6712185..03e7dcb 100755 +--- a/polybar-wireguard ++++ b/rofi-wireguard +@@ -6,11 +6,11 @@ + # https://github.com/polybar/polybar/wiki/Formatting#format-tags-inside-polybar-config + green=#55aa55 + +-configs_path="/PATH/TO/CONF/FILES" ++configs_path="$HOME/.config/wireguard" + connected_interface=$(sudo wg | grep interface | cut -d " " -f2) + + connect() { +- selected_config=$(ls $configs_path/*.conf | xargs basename -a -s .conf | dmenu) ++ selected_config=$(ls $configs_path/*.conf | xargs basename -a -s .conf | rofi -i -dmenu -p "Select a VPN server to connect: ") + [[ $selected_config ]] && sudo wg-quick up "$configs_path"/"$selected_config".conf + } + +@@ -36,9 +36,9 @@ toggle() { + print() { + if [[ $connected_interface ]] + then +- echo %{u"$green"}%{+u}%{T4}%{F"$green"}%{T-}%{F-} "$connected_interface" ++ echo $connected_interface + else +- echo %{T4}%{T-} ++ echo + fi + } + diff --git a/GitRepositories/patches/rofi-bluetooth/dontshowmenu.patch b/GitRepositories/patches/rofi-bluetooth/dontshowmenu.patch new file mode 100644 index 0000000..1d8e91b --- /dev/null +++ b/GitRepositories/patches/rofi-bluetooth/dontshowmenu.patch @@ -0,0 +1,71 @@ +diff --git a/rofi-bluetooth b/rofi-bluetooth +index 5c52fd8..012e612 100755 +--- a/rofi-bluetooth ++++ b/rofi-bluetooth +@@ -33,7 +33,6 @@ power_on() { + toggle_power() { + if power_on; then + bluetoothctl power off +- show_menu + else + if rfkill list bluetooth | grep -q 'blocked: yes'; then + rfkill unblock bluetooth && sleep 3 +@@ -59,7 +58,6 @@ toggle_scan() { + if scan_on; then + kill $(pgrep -f "bluetoothctl scan on") + bluetoothctl scan off +- show_menu + else + bluetoothctl scan on & + echo "Scanning..." +@@ -83,10 +81,8 @@ pairable_on() { + toggle_pairable() { + if pairable_on; then + bluetoothctl pairable off +- show_menu + else + bluetoothctl pairable on +- show_menu + fi + } + +@@ -105,10 +101,8 @@ discoverable_on() { + toggle_discoverable() { + if discoverable_on; then + bluetoothctl discoverable off +- show_menu + else + bluetoothctl discoverable on +- show_menu + fi + } + +@@ -126,10 +120,8 @@ device_connected() { + toggle_connection() { + if device_connected $1; then + bluetoothctl disconnect $1 +- device_menu "$device" + else + bluetoothctl connect $1 +- device_menu "$device" + fi + } + +@@ -183,8 +175,6 @@ toggle_trust() { + # Useful for status bars like polybar, etc. + print_status() { + if power_on; then +- printf '' +- + mapfile -t paired_devices < <(bluetoothctl paired-devices | grep Device | cut -d ' ' -f 2) + counter=0 + +@@ -202,8 +192,6 @@ print_status() { + fi + done + printf "\n" +- else +- echo "" + fi + } + diff --git a/GitRepositories/polybar-wireguard b/GitRepositories/polybar-wireguard new file mode 160000 index 0000000..838ec1c --- /dev/null +++ b/GitRepositories/polybar-wireguard @@ -0,0 +1 @@ +Subproject commit 838ec1c59f9b9686bece53f9d6e470ff51e35d06 diff --git a/GitRepositories/rofi-bluetooth b/GitRepositories/rofi-bluetooth new file mode 160000 index 0000000..893db1f --- /dev/null +++ b/GitRepositories/rofi-bluetooth @@ -0,0 +1 @@ +Subproject commit 893db1f2b549e7bc0e9c62e7670314349a29cdf2 diff --git a/GitRepositories/st b/GitRepositories/st new file mode 160000 index 0000000..137175b --- /dev/null +++ b/GitRepositories/st @@ -0,0 +1 @@ +Subproject commit 137175be7526764a3b00600dd9ff4c65393718b0 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Pictures/Screenshots/ricing/Desktop.png b/Pictures/Screenshots/ricing/Desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..708d993810fb4a107b95a18474f6a067b719cd7f GIT binary patch literal 1201519 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≫#Kc7M(RlEp{%!i@#VJOE5{1Md2vn635s@Aq8Nl*)zui^4@{uigYY;8%W`_|d zb1%oxQm+ptGCOZv`(MyeLUh%b8Y^fKSKXz*ip?qdKU(fb*~Fl|m2oqE{Hlvi{L+Ja zhjmf6z$&0I6@d*0I}P~c$$}v#?~B^rbS!c-=tR1O8thK<8o>3SwU^pgiq#{*a*KOT zf*OTqz*e+i{mIH*;%^KzzsrHuEf~(35+XoD4P_fORSiNpsYb2S4IadyCMTNhfk`R| zQJ$CUVB1=p4zIm1_!$1R;b=XX3Jep&8WXBOLz>kR6%UFK-n%Mfc9AJ1FvIYGhN*RQ zM1zv@M+~L5+BL#h9$5&$!n5xq` zLv71HxGgL!CiwC!qG6N8tCP%Nyu5Tr~A{O z{vHIL*Y>bGh^!=uyj%m5(FD6|ku?fa3g{f$O!5^5X9Fi|Ci~8l8&a3(#duQiF}x); zVwd*42TTP1{#(d}C6Ppp&xLV9@zRtlFZOwO=0ZphE0NNux@;RCf9UA-KFDz382B-3@@AXKQ-#{oVvE_<#PzG{!)`tOj3smv@@6W+d%WaN}#wmr=>;2 z{}X3I?C|d3kuUugP`d6Rt(&ya26xfDap5jd)$Y--aGC&OD9U$4p2^anv8piLrNAxY z8xEjqBC`0=ahAY#T{f`1 zS%I&S*83)YY<(e;lITDMk<2 z(SMt>{tl}`Uz244-=3_}l|3gbC+iha)UW^k|LzJR-Tu4UKp9b#vohxrwCuXk-fVAE zowv=l#vFPXd0N@`6%s6F00XUsrF*qrvwe(%$2)|Vos|Uy!codd28=u>|FGyiij;ZmoZPL8KfU&l= zcCE>Sj*-vVi6p!ZvN1PN2+>X98*xXn&t$Pi} zlGxqTyo%mEVqEs`l%6;P4D{4N-xMRLF#Y}Ot0qEt>tw*BYITL}=qDEJ5f$U#NwX;$ zw8_p51<)Iyq|AkLlROm%jsRF48z1|al@D#wD8Ns(

+M&lx6M0*~ZeWE%{@ha!Cb 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%0ABB^FQBxrFG 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 z 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