Move old config to old-dots branch

This commit is contained in:
Şahin Akkaya 2023-12-25 13:21:57 +03:00
commit 3dab77f779
119 changed files with 9623 additions and 0 deletions

29
.Xresources Normal file
View File

@ -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

5
.agignore Normal file
View File

@ -0,0 +1,5 @@
*.pyc
venv
.vscode
.idea
*~

10
.config/Asocia/splash Normal file
View File

@ -0,0 +1,10 @@
_______ _____
___ |__Welcome back, _________(_)______ _
__ /| |__ ___/_ __ \_ ___/__ / _ __ `/
_ ___ |_(__ ) / /_/ // /__ _ / / /_/ /
/_/ |_|/____/ \____/ \___/ /_/ \__,_/

View File

@ -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

27
.config/crontab Normal file
View File

@ -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

209
.config/dunst/dunstrc Normal file
View File

@ -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:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
# <https://developer.gnome.org/pango/stable/pango-Markup.html>.
# %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 = "<b>%s</b>\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

531
.config/eww/bar/eww.scss Normal file
View File

@ -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;
}

463
.config/eww/bar/eww.yuck Normal file
View File

@ -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))

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

43
.config/eww/bar/scripts/battery Executable file
View File

@ -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

View File

@ -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

9
.config/eww/bar/scripts/layout Executable file
View File

@ -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

View File

@ -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

89
.config/eww/bar/scripts/pop Executable file
View File

@ -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

12
.config/eww/bar/scripts/qtile Executable file
View File

@ -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

26
.config/eww/bar/scripts/wifi Executable file
View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -0,0 +1,12 @@
<variant>
<configItem>
<name>cdhpt</name>
<description>English (Programmer Colemak-DH with Turkish support)</description>
</configItem>
</variant>
<variant>
<configItem>
<name>cdhisopt</name>
<description>English (Programmer Colemak-DH ISO with Turkish support)</description>
</configItem>
</variant>

View File

@ -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 <TLDE> { [ grave, asciitilde, dead_tilde, asciitilde ] };
key <AE01> { [ at, 1 ] };
key <AE02> { [ bracketleft, 2 ] };
key <AE03> { [ braceleft, 3 ] };
key <AE04> { [ parenleft, 4 ] };
key <AE05> { [ plus, 5 ] };
key <AE06> { [ equal, 6 ] };
key <AE07> { [ parenright, 7 ] };
key <AE08> { [ braceright, 8 ] };
key <AE09> { [ bracketright, 9 ] };
key <AE10> { [ percent, 0 ] };
key <AE11> { [ asterisk, numbersign ] };
key <AE12> { [ ampersand, exclam ] };
key <AD01> { [ q, Q ] };
key <AD02> { [ w, W ] };
key <AD03> { [ f, F ] };
key <AD04> { [ p, P ] };
key <AD05> { [ b, B ] };
key <AD06> { [ j, J ] };
key <AD07> { [ l, L ] };
key <AD08> { [ u, U, udiaeresis, Udiaeresis ] };
key <AD09> { [ y, Y ] };
key <AD10> { [ semicolon, colon ] };
key <AD11> { [ minus, underscore ] };
key <AD12> { [ dollar, asciicircum ] };
key <BKSL> { [ backslash, bar ] };
key <AC01> { [ a, A ] };
key <AC02> { [ r, R ] };
key <AC03> { [ s, S, scedilla, Scedilla ] };
key <AC04> { [ t, T ] };
key <AC05> { [ g, G, gbreve, Gbreve ] };
key <AC06> { [ m, M ] };
key <AC07> { [ n, N ] };
key <AC08> { [ e, E ] };
key <AC09> { [ i, I, idotless, Iabovedot ] };
key <AC10> { [ o, O, odiaeresis, Odiaeresis ] };
key <AC11> { [ apostrophe, quotedbl ] };
key <AB01> { [ z, Z ] };
key <AB02> { [ x, X ] };
key <AB03> { [ c, C, ccedilla, Ccedilla ] };
key <AB04> { [ d, D ] };
key <AB05> { [ v, V ] } ;
key <AB06> { [ k, K ] };
key <AB07> { [ h, H ] };
key <AB08> { [ comma, less ] };
key <AB09> { [ period, greater ] };
key <AB10> { [ slash, question ] };
key <SPCE> { [ space, space, space, nobreakspace ] };
include "level3(ralt_switch)"
};

View File

@ -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 <TLDE> { [ grave, asciitilde, dead_tilde, asciitilde ] };
key <AE01> { [ at, 1 ] };
key <AE02> { [ bracketleft, 2 ] };
key <AE03> { [ braceleft, 3 ] };
key <AE04> { [ parenleft, 4 ] };
key <AE05> { [ plus, 5 ] };
key <AE06> { [ equal, 6 ] };
key <AE07> { [ parenright, 7 ] };
key <AE08> { [ braceright, 8 ] };
key <AE09> { [ bracketright, 9 ] };
key <AE10> { [ percent, 0 ] };
key <AE11> { [ asterisk, numbersign ] };
key <AE12> { [ ampersand, exclam ] };
key <AD08> { [ u, U, udiaeresis, Udiaeresis ] };
key <AD11> { [ minus, underscore ] };
key <AC06> { [ m, M, Left, Left ] };
key <AC07> { [ n, N, Down, Down ] };
key <AC08> { [ e, E, Up, Up ] };
key <AC09> { [ i, I, Right, Right ] };
key <AC11> { [ apostrophe, quotedbl, idotless, Iabovedot ] };
key <AC03> { [ s, S, scedilla, Scedilla ] };
key <AC05> { [ g, G, gbreve, Gbreve ] };
key <AB02> { [ c, C, ccedilla, Ccedilla ] };
key <AC10> { [ o, O, odiaeresis, Odiaeresis ] };
key <AD12> { [ dollar, asciicircum ] };
key <AB05> { [ backslash, bar, asciitilde, brokenbar] };
include "level3(ralt_switch)"
};

View File

@ -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 <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
key <AE01> { [ at, 1 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE02> { [ bracketleft, 2 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE03> { [ braceleft, 3 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE04> { [ parenleft, 4 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE05> { [ plus, 5 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE06> { [ equal, 6, dead_circumflex, dead_circumflex ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE07> { [ parenright, 7 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE08> { [ braceright, 8 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE09> { [ bracketright, 9, dead_grave] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC"};
key <AE10> { [ percent, 0 ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AE11> { [ asterisk, numbersign ] };
key <AE12> { [ ampersand , exclam ] };
key <AD01> { [ semicolon, colon, dead_acute, dead_diaeresis ] };
key <AD02> { [ comma, less, dead_cedilla, dead_caron ] };
key <AD03> { [ period, greater, dead_abovedot, periodcentered ] };
key <AD04> { [ p, P ] };
key <AD05> { [ y, Y ] };
key <AD06> { [ f, F ] };
key <AD07> { [ g, G, gbreve, Gbreve ] };
key <AD08> { [ c, C ,ccedilla, Ccedilla ] };
key <AD09> { [ r, R ] };
key <AD10> { [ l, L ] };
key <AD11> { [ slash, question ] };
key <AD12> { [ dollar, asciicircum] };
key <AC01> { [ a, A ] };
key <AC02> { [ o, O,odiaeresis, Odiaeresis ] };
key <AC03> { [ e, E ] };
key <AC04> { [ u, U, udiaeresis, Udiaeresis ] };
key <AC05> { [ i, I, idotless,Iabovedot ] };
key <AC06> { [ d, D ] };
key <AC07> { [ h, H ] };
key <AC08> { [ t, T ] };
key <AC09> { [ n, N ] };
key <AC10> { [ s, S,scedilla, Scedilla ] };
key <AC11> { [ minus, underscore ] ,type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
key <AB01> { [ apostrophe, quotedbl, dead_ogonek, dead_doubleacute ] };
key <AB02> { [ q, Q ] };
key <AB03> { [ j, J ] };
key <AB04> { [ k, K ] };
key <AB05> { [ x, X ] };
key <AB06> { [ b, B, grave,dead_grave ] };
key <AB07> { [ m, M ] };
key <AB08> { [ w, W ] };
key <AB09> { [ v, V ] };
key <AB10> { [ z, Z ] };
key <BKSL> { [ backslash, bar ] };
};

View File

@ -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

View File

@ -0,0 +1,6 @@
<variant>
<configItem>
<name>rdvpt</name>
<description>English (real programmer Dvorak with Turkish characters)</description>
</configItem>
</variant>

426
.config/mpd/mpd.conf Normal file
View File

@ -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 <https://wiki.hydrogenaud.io/index.php?title=Replaygain> 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"
#
###############################################################################

180
.config/mpv/input.conf Normal file
View File

@ -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)

3
.config/mpv/mpv.conf Normal file
View File

@ -0,0 +1,3 @@
script-opts=ytdl_hook-ytdl_path=/usr/bin/yt-dlp
ytdl-format=bestvideo[height<=?480]+bestaudio/best

View File

@ -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)

View File

@ -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();
});

View File

@ -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)

View File

@ -0,0 +1,3 @@
-- This is a dummy main.lua
-- required for mpv 0.33
-- do not delete

View File

@ -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

View File

@ -0,0 +1 @@
VvdShPVADjWuTg9L44tkj5B1IqOS8Jfak5XX

1
.config/nvim Submodule

@ -0,0 +1 @@
Subproject commit b36dc411e3a430e0c80561e60c463214351225a7

414
.config/picom/picom.conf Normal file
View File

@ -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 }
};

19
.config/qtile/config.py Normal file
View File

@ -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"
)

View File

@ -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),
),
]
)

View File

@ -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)

View File

@ -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")),
]

View File

@ -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
]
)

View File

@ -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()),
]

View File

@ -0,0 +1,3 @@
from libqtile.config import Screen
screens = [Screen()]

308
.config/qtile/scripts/Default.sh Executable file
View File

@ -0,0 +1,308 @@
#!/usr/bin/env bash
## Copyright (C) 2020-2021 Aditya Shakya <adi1090x@gmail.com>
## 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'

@ -0,0 +1 @@
Subproject commit b699a7e01c253ffb7818b02d62bce24190ec1019

188
.config/tmux/tmux.conf Normal file
View File

@ -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 <prefix> C-l to clear screen
bind C-l send-keys 'C-l'
# use <prefix> 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 <prefix> 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'

View File

@ -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

56
.config/zsh/.aliases Normal file
View File

@ -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'

1619
.config/zsh/.p10k.zsh Normal file

File diff suppressed because it is too large Load Diff

26
.config/zsh/.zlogin Normal file
View File

@ -0,0 +1,26 @@
#
# Executes commands at login post-zshrc.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
# 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

19
.config/zsh/.zlogout Normal file
View File

@ -0,0 +1,19 @@
#
# Executes commands at logout.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
# 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

237
.config/zsh/.zpreztorc Normal file
View File

@ -0,0 +1,237 @@
#
# Sets Prezto options.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
#
# 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'

65
.config/zsh/.zprofile Normal file
View File

@ -0,0 +1,65 @@
#
# Executes commands at login pre-zshrc.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
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

294
.config/zsh/.zsh/_git Normal file
View File

@ -0,0 +1,294 @@
#compdef git gitk
# zsh completion wrapper for git
#
# Copyright (c) 2012-2020 Felipe Contreras <felipe.contreras@gmail.com>
#
# 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

12
.config/zsh/.zshenv Normal file
View File

@ -0,0 +1,12 @@
#
# Defines environment variables.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
# Şahin Akkaya <sahin@sahinakkaya.dev>
# 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"

147
.config/zsh/.zshrc Normal file
View File

@ -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 <sorin.ionescu@gmail.com>
#
# 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
}

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.cfg

26
.gitmodules vendored Normal file
View File

@ -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

35
.local/bin/passmenu Executable file
View File

@ -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

8
.profile Normal file
View File

@ -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

@ -0,0 +1 @@
Subproject commit 8ad00bd978678b67d61176e8397369e1e6afa4fc

@ -0,0 +1 @@
Subproject commit 356f3bb253ecc14997e1abaf7406b914f69f06dc

1
GitRepositories/fzf Submodule

@ -0,0 +1 @@
Subproject commit 5f385d88e0a786f20c4231b82f250945a6583a17

View File

@ -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
}

View File

@ -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
}

@ -0,0 +1 @@
Subproject commit 838ec1c59f9b9686bece53f9d6e470ff51e35d06

@ -0,0 +1 @@
Subproject commit 893db1f2b549e7bc0e9c62e7670314349a29cdf2

1
GitRepositories/st Submodule

@ -0,0 +1 @@
Subproject commit 137175be7526764a3b00600dd9ff4c65393718b0

674
LICENSE Normal file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
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.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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 <https://www.gnu.org/licenses/>.
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:
<program> Copyright (C) <year> <name of author>
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
<https://www.gnu.org/licenses/>.
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
<https://www.gnu.org/licenses/why-not-lgpl.html>.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 994 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

24
README.md Normal file
View File

@ -0,0 +1,24 @@
# sahinakkaya's dotfiles
**Note: These are my old dotfiles. You can find up-to-date version at [sahinakkaya/dotfiles](https://github.com/sahinakkaya/dotfiles/).**
### Showcase
![showcase](https://user-images.githubusercontent.com/32161460/160180461-efc75d21-ccd4-45f5-8a14-5ea47efc51eb.gif)
![Desktop](https://raw.github.com/sahinakkaya/old-dotfiles/master/Pictures/Screenshots/ricing/Desktop.png)
![Some terminals](https://raw.github.com/sahinakkaya/old-dotfiles/master/Pictures/Screenshots/ricing/terms.png)
### My dotfiles
- Window manager: [Qtile](https://qtile.org)
- Compositor: [Picom](https://github.com/yshui/picom)
- Status bar: [Eww - Elkowars Wacky Widgets](https://github.com/elkowar/eww)
- Terminal: [My own st build](https://github.com/sahinakkaya/st)
- Shell: [zsh](https://www.zsh.org/) configured with [Prezto](https://github.com/sorin-ionescu/prezto)
- Shell theme: [powerlevel10k](https://github.com/romkatv/powerlevel10k/)
- Editor: [neovim](https://github.com/neovim/neovim)
- Notifications: [dunst](https://github.com/dunst-project/dunst)
### Todo
- Create an installation script

22
scripts/autostart.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/sh
function run {
if ! pgrep $1 > /dev/null ;
then
$@&
fi
}
#feh --bg-scale /usr/share/endeavouros/backgrounds/endeavouros-wallpaper.png
rm ~/.cache/workspaces
nitrogen --save --set-zoom-fill ~/Pictures/Wallpapers/default.jpg
# run picom --experimental-backends -b # --vsync should prevent screen tearing on most setups if needed
run picom -b # --vsync should prevent screen tearing on most setups if needed
eww -c ~/.config/eww/bar/ close-all
eww -c ~/.config/eww/bar/ open bar
keynav daemonize
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & disown # start polkit agent from GNOME

19
scripts/check-battery.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
# Set limit to shell argument
batteryLimit=$1
fullAt=92
# Get the current battery level with acpi
batteryLevel=$(acpi | cut -d ' ' -f 4 | tr -d '%|,| ')
charging=$(acpi | cut -d ' ' -f 3 | tr -d ',| ')
echo $batteryLevel
if [[ "$batteryLevel" -le "$batteryLimit" ]] && [[ "$charging" == "Discharging" ]]; then
/usr/bin/notify-send -a "Battery Warning" --urgency critical "Battery level at ${batteryLevel}%" -i abrt -t 10000
/usr/bin/paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga
#elif [[ "$batteryLevel" -gt "$fullAt" ]] && [[ ! "$charging" == "Discharging" ]]; then
# /usr/bin/notify-send -a "Battery Warning" "Battery is full: ${batteryLevel}" -i abrt -t 10000
# /usr/bin/paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga
fi

11
scripts/chlayout Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
variant=$(setxkbmap -query | grep variant | cut -d" " -f5)
if [[ $variant == "cdhisopt" ]]
then
setxkbmap us cdhpt -option ''
else
setxkbmap us cdhisopt 'caps:ctrl_modifier'
fi

86
scripts/colorscripts/animals Executable file
View File

@ -0,0 +1,86 @@
#!/usr/bin/env bash
# ============
# ASCII ANIMAL
# ============
# ANSI COLOUR CODES
RD='\x1B[0;31m'
GR='\x1B[0;32m'
YL='\x1B[1;33m'
OR='\x1B[0;33m'
BL='\x1B[0;34m'
LBL='\x1B[1;34m'
CY='\x1B[1;36m'
NC='\x1B[0m' # No Color
echo ""
# LIZARD ####################################################################
# Adapted from: http://chris.com/ascii/index.php?art=animals/reptiles/lizards - Glo Pearl
liz1="${GR} ${YL}O${GR}--${YL}O${GR}^^^^^^^^^^^^\________${NC}\n"
liz2="${GR} \__/||-------||---------~${NC}\n"
liz="$liz1$liz2"
# DINOSAUR ##################################################################
# Adapted from: http://chris.com/ascii/index.php?art=animals/reptiles/dinosaurs
din1="${OR} __ ${NC}\n"
din2="${OR} / ${LBL}°${OR}_)${NC}\n"
din3="${OR} _.----. _ / / ${NC}\n"
din4="${OR} / ../ ${NC}\n"
din5="${OR} ___/ ( | ( ..| ${NC}\n"
din6="${OR} -------|_|--|_| ${NC}\n"
din="$din1$din2$din3$din4$din5$din6"
# DUCK #####################################################################
# Adapted from: http://textart.io/art/tag/duck
duc1=" __ \n"
duc2=" ___( o)${OR}>${NC} \n"
duc3=" \ <_. ) ${GR}V${NC} \n"
duc4=" ${BL}~~~~~${NC}\`---'${BL}~~~~~${GR}|${BL}~~~${NC}\n"
duc="$duc1$duc2$duc3$duc4"
# PEACOCK #################################################################
# Adapted from: http://www.chris.com/ascii/joan/www.geocities.com/SoHo/7373/birds.html#peacockk
pea1=" ${CY}_ _ ${NC}\n"
pea2=" ${GR}__${CY}/o'V'o\\\\${GR}__ ${NC}\n"
pea3=" ${CY}__${GR}/o ${CY}\\ : / ${GR}o\\\\${CY}__ ${NC}\n"
pea4=" ${CY}/o ${GR}\`. ${CY}\ : / ${GR}.' ${CY}o\\ ${NC}\n"
pea5=" ${GR}_${CY}\\ ${GR}'. ${NC}/\"\\ ${GR}.' ${CY}/${GR}_ ${NC}\n"
pea6=" ${GR}/o${CY} \`-._ ${GR}'${NC}\\\v/${GR}' ${CY}_.-\` ${GR}o\\\ ${NC}\n"
pea7=" ${GR}\\_${CY} \`-.${NC}/ \\\\${CY}.-\` ${GR}_/ ${NC}\n"
pea8=" ${CY}/o${NC} ${GR}\`\`---._${NC}/ \\\\${GR}_.---'' ${CY}o\\\\${NC}\n"
pea9=" ${CY}\_________${NC}\ /${CY}_________/${NC}\n"
pea10=" '\_/' \n"
pea11=" ${OR}_|_|_${NC} \n"
pea="$pea1$pea2$pea3$pea4$pea5$pea6$pea7$pea8$pea9$pea10$pea11"
# SQUIRREL ################################################################
# Adapted from: http://www.heartnsoul.com/ascii_art/squirrels.txt
squ1="${OR} ,;;:;, ${NC}\n"
squ2="${OR} ;;;;; ${NC}\n"
squ3="${OR} ,:;;:; ,'=. ${NC}\n"
squ4="${OR} ;:;:;' .=\" ,'_\\\\${NC}\n"
squ5="${OR} ':;:;,/ ,__:=${RD}@${NC}\n"
squ6="${OR} ';;:; =./)_ ${NC}\n"
squ7="${OR} \`\"=\_ )_\"\` ${NC}\n"
squ8="${OR} \`\`'\"\` ${NC}\n"
squ="$squ1$squ2$squ3$squ4$squ5$squ6$squ7$squ8"
# Generate random number
RAND=$((((RANDOM + RANDOM) % 5) + 1))
case "$RAND" in
1) echo -e "$liz"
;;
2) echo -e "$din"
;;
3) echo -e "$duc"
;;
4) echo -e "$pea"
;;
5) echo -e "$squ"
;;
*)
;;
esac

48
scripts/colorscripts/bonsai Executable file
View File

@ -0,0 +1,48 @@
#!/bin/sh
# &&
# &&&&&
# &&&\/& &&&
# &&|,/ |/& &&
# &&/ / /_& &&
# \ { |_____/_&
# { / / &&&
# .`. \{___\________\/_\}
# \} \}\{ \
# }\{\{ \____&
# \{\}\{ `&&&
# {{} &&
# , -=-~{ .-^- _
# `.
# File: bonsai-tree.textart
# Description: Bonsai tree
# Author: Hazel Levine
# └─ https://git.knightsofthelambdacalcul.us/hazel
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: bonsai-tree
# └─ https://git.knightsofthelambdacalcul.us/hazel/etc/src/branch/canon/bin/bonsai-tree
# This file from NNB's text art collections
# └─ https://github.com/NNBnh/nnbs-text-art/blob/main/other/bonsai-tree.textart
# Start
echo -e "\n \033[32m&&
\033[32m&&&&&
\033[32m&&&\033[33m\/\033[32m& &&&
\033[32m&&\033[33m|,/ |/\033[32m& &&
\033[32m&&\033[33m/ / /_\033[32m& &&
\033[33m\ { |_____/_\033[32m&
\033[33m{ / / \033[32m&&&
\033[33m.\`. \\{___\________\/_\}
\033[33m\} \}\{ \\
\033[33m}\{\{ \\____\033[32m&
\033[33m\{\}\{ \`\033[32m&\033[33m\\033[32m&&
\033[33m{{} \033[32m&&
\033[33m, -=-~{ .-^- _
\`.\n"
exit 0

View File

@ -0,0 +1,22 @@
#!/bin/sh
# ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒
# ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒
# ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒ ░░░░░░▒▒
# ▓▓▓▓▓▓██ ▓▓▓▓▓▓██ ▓▓▓▓▓▓██ ▓▓▓▓▓▓██ ▓▓▓▓▓▓██ ▓▓▓▓▓▓██
# File: colorblocks.textart
# Description: Show the terminal colourscheme as blocks
# Author: Adhi Pambudi
# └─ https://github.com/addy-dclxvi
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/colorblocks.textart
# Start
echo -e "\n\033[41m \033[101m \033[0m \033[42m \033[102m \033[0m \033[43m \033[103m \033[0m \033[44m \033[104m \033[0m \033[45m \033[105m \033[0m \033[46m \033[106m \033[0m
\033[41m \033[101m \033[0m \033[42m \033[102m \033[0m \033[43m \033[103m \033[0m \033[44m \033[104m \033[0m \033[45m \033[105m \033[0m \033[46m \033[106m \033[0m
\033[41m \033[101m \033[0m \033[42m \033[102m \033[0m \033[43m \033[103m \033[0m \033[44m \033[104m \033[0m \033[45m \033[105m \033[0m \033[46m \033[106m \033[0m
\033[47m \033[107m \033[0m \033[47m \033[107m \033[0m \033[47m \033[107m \033[0m \033[47m \033[107m \033[0m \033[47m \033[107m \033[0m \033[47m \033[107m \033[0m\n"
exit 0

25
scripts/colorscripts/colorwheel Executable file
View File

@ -0,0 +1,25 @@
#!/bin/sh
# ||||||
# ||||||||||
# ||||||||||
# ||||||||||
# ||||||
# File: colorwheel.textart
# Description: {{des}}
# Author: Bastien Dejean
# └─ https://github.com/baskerville
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/stark/colorwheel.textart
# Start
echo -e "\n \033[49;35m|\033[49;31m|\033[101;31m|\033[41;97m|\033[49;91m|\033[49;93m|\033[0m
\033[105;35m|\033[45;97m|\033[49;97m||\033[100;97m||\033[49;37m||\033[103;33m|\033[43;97m|\033[0m
\033[49;95m|\033[49;94m|\033[100;37m||\033[40;97m||\033[40;37m||\033[49;33m|\033[49;32m|\033[0m
\033[104;34m|\033[44;97m|\033[49;90m||\033[40;39m||\033[49;39m||\033[102;32m|\033[42;97m|\033[0m
\033[49;34m|\033[49;36m|\033[106;36m|\033[46;97m|\033[49;96m|\033[49;92m|\033[0m\n"
exit 0

18
scripts/colorscripts/crunch Executable file
View File

@ -0,0 +1,18 @@
#!/bin/sh
# File: crunch.textart
# Description: {{des}}
# Author: Gutterslob
# └─ https://crunchbang.org/forums/profile.php?id=3763
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/crunch.textart
# Start
echo -e "\n \033[41m \033[0m \033[41m \033[0m \033[42m \033[0m \033[42m \033[0m \033[43m \033[0m \033[43m \033[0m \033[44m \033[0m \033[44m \033[0m \033[45m \033[0m \033[45m \033[0m \033[46m \033[0m \033[46m \033[0m
\033[41m \033[0m \033[42m \033[0m \033[43m \033[0m \033[44m \033[0m \033[45m \033[0m \033[46m \033[0m
\033[41m \033[101m \033[41m \033[0m \033[42m \033[102m \033[42m \033[0m \033[43m \033[103m \033[43m \033[0m \033[44m \033[104m \033[44m \033[0m \033[45m \033[105m \033[45m \033[0m \033[46m \033[106m \033[46m \033[0m
\033[41m \033[0m \033[42m \033[0m \033[43m \033[0m \033[44m \033[0m \033[45m \033[0m \033[46m \033[0m
\033[41m \033[0m \033[41m \033[0m \033[42m \033[0m \033[42m \033[0m \033[43m \033[0m \033[43m \033[0m \033[44m \033[0m \033[44m \033[0m \033[45m \033[0m \033[45m \033[0m \033[46m \033[0m \033[46m \033[0m\n"
exit 0

40
scripts/colorscripts/crunchbang Executable file
View File

@ -0,0 +1,40 @@
#!/usr/bin/env bash
# ANSI Color -- use these variables to easily have different color
# and format output. Make sure to output the reset sequence after
# colors (f = foreground, b = background), and use the 'off'
# feature for anything you turn on.
initializeANSI()
{
esc=""
blackf="${esc}[30m"; redf="${esc}[31m"; greenf="${esc}[32m"
yellowf="${esc}[33m" bluef="${esc}[34m"; purplef="${esc}[35m"
cyanf="${esc}[36m"; whitef="${esc}[37m"
blackb="${esc}[40m"; redb="${esc}[41m"; greenb="${esc}[42m"
yellowb="${esc}[43m" blueb="${esc}[44m"; purpleb="${esc}[45m"
cyanb="${esc}[46m"; whiteb="${esc}[47m"
boldon="${esc}[1m"; boldoff="${esc}[22m"
italicson="${esc}[3m"; italicsoff="${esc}[23m"
ulon="${esc}[4m"; uloff="${esc}[24m"
invon="${esc}[7m"; invoff="${esc}[27m"
reset="${esc}[0m"
}
# note in this first use that switching colors doesn't require a reset
# first - the new color overrides the old one.
initializeANSI
cat << EOF
${reset}${redf}▄█▄█▄ ${reset}${boldon}${redf}█ ${reset}${greenf}▄█▄█▄ ${reset}${boldon}${greenf}█ ${reset}${yellowf}▄█▄█▄ ${reset}${boldon}${yellowf}█ ${reset}${bluef}▄█▄█▄ ${reset}${boldon}${bluef}█ ${reset}${purplef}▄█▄█▄ ${reset}${boldon}${purplef}█ ${reset}${cyanf}▄█▄█▄ ${reset}${boldon}${cyanf}█${reset}
${reset}${redf}▄█▄█▄ ${reset}${boldon}${redf}▀ ${reset}${greenf}▄█▄█▄ ${reset}${boldon}${greenf}▀ ${reset}${yellowf}▄█▄█▄ ${reset}${boldon}${yellowf}▀ ${reset}${bluef}▄█▄█▄ ${reset}${boldon}${bluef}▀ ${reset}${purplef}▄█▄█▄ ${reset}${boldon}${purplef}▀ ${reset}${cyanf}▄█▄█▄ ${reset}${boldon}${cyanf}▀${reset}
${reset}${redf} ▀ ▀ ${reset}${boldon}${redf}▀ ${reset}${greenf} ▀ ▀ ${reset}${boldon}${greenf}▀ ${reset}${yellowf} ▀ ▀ ${reset}${boldon}${yellowf}▀ ${reset}${bluef} ▀ ▀ ${reset}${boldon}${bluef}▀ ${reset}${purplef} ▀ ▀ ${reset}${boldon}${purplef}▀ ${reset}${cyanf} ▀ ▀ ${reset}${boldon}${cyanf}▀${reset}
EOF

31
scripts/colorscripts/dna Executable file
View File

@ -0,0 +1,31 @@
#!/bin/sh
# File: dna.textart
# Description: {{des}}
# Author: Pfh
# └─ https://crunchbang.org/forums/profile.php?id=9103
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/dna.textart
# Start
echo -e "\n \033[31m\\---\033[91m/\033[0m \033[32m\\---\033[92m/\033[0m \033[33m\\---\033[93m/\033[0m \033[34m\\---\033[94m/\033[0m \033[35m\\---\033[95m/\033[0m \033[36m\\---\033[96m/\033[0m
\033[31m\\-\033[91m/\033[0m \033[32m\\-\033[92m/\033[0m \033[33m\\-\033[93m/\033[0m \033[34m\\-\033[94m/\033[0m \033[35m\\-\033[95m/\033[0m \033[36m\\-\033[96m/\033[0m
\033[31m\\\\\033[0m \033[32m\\\\\033[0m \033[33m\\\\\033[0m \033[34m\\\\\033[0m \033[35m\\\\\033[0m \033[36m\\\\\033[0m
\033[91m/-\033[31m\\\\\033[0m \033[92m/-\033[32m\\\\\033[0m \033[93m/-\033[33m\\\\\033[0m \033[94m/-\033[34m\\\\\033[0m \033[95m/-\033[35m\\\\\033[0m \033[96m/-\033[36m\\\\\033[0m
\033[91m/---\033[31m\\\\\033[0m \033[92m/---\033[32m\\\\\033[0m \033[93m/---\033[33m\\\\\033[0m \033[94m/---\033[34m\\\\\033[0m \033[95m/---\033[35m\\\\\033[0m \033[96m/---\033[36m\\\\\033[0m
\033[91m(-----\033[31m)\033[0m \033[92m(-----\033[32m)\033[0m \033[93m(-----\033[33m)\033[0m \033[94m(-----\033[34m)\033[0m \033[95m(-----\033[35m)\033[0m \033[96m(-----\033[36m)\033[0m
\033[91m\\---\033[31m/\033[0m \033[92m\\---\033[32m/\033[0m \033[93m\\---\033[33m/\033[0m \033[94m\\---\033[34m/\033[0m \033[95m\\---\033[35m/\033[0m \033[96m\\---\033[36m/\033[0m
\033[91m\\-\033[31m/\033[0m \033[92m\\-\033[32m/\033[0m \033[93m\\-\033[33m/\033[0m \033[94m\\-\033[34m/\033[0m \033[95m\\-\033[35m/\033[0m \033[96m\\-\033[36m/\033[0m
\033[91m/\033[0m \033[92m/\033[0m \033[93m/\033[0m \033[94m/\033[0m \033[95m/\033[0m \033[96m/\033[0m
\033[31m/-\033[91m\\\\\033[0m \033[32m/-\033[92m\\\\\033[0m \033[33m/-\033[93m\\\\\033[0m \033[34m/-\033[94m\\\\\033[0m \033[35m/-\033[95m\\\\\033[0m \033[36m/-\033[96m\\\\\033[0m
\033[31m/---\033[91m\\\\\033[0m \033[32m/---\033[92m\\\\\033[0m \033[33m/---\033[93m\\\\\033[0m \033[34m/---\033[94m\\\\\033[0m \033[35m/---\033[95m\\\\\033[0m \033[36m/---\033[96m\\\\\033[0m
\033[31m(-----\033[91m)\033[0m \033[32m(-----\033[92m)\033[0m \033[33m(-----\033[93m)\033[0m \033[34m(-----\033[94m)\033[0m \033[35m(-----\033[95m)\033[0m \033[36m(-----\033[96m)\033[0m
\033[31m\\---\033[91m/\033[0m \033[32m\\---\033[92m/\033[0m \033[33m\\---\033[93m/\033[0m \033[34m\\---\033[94m/\033[0m \033[35m\\---\033[95m/\033[0m \033[36m\\---\033[96m/\033[0m
\033[31m\\-\033[91m/\033[0m \033[32m\\-\033[92m/\033[0m \033[33m\\-\033[93m/\033[0m \033[34m\\-\033[94m/\033[0m \033[35m\\-\033[95m/\033[0m \033[36m\\-\033[96m/\033[0m
\033[31m\\\\\033[0m \033[32m\\\\\033[0m \033[33m\\\\\033[0m \033[34m\\\\\033[0m \033[35m\\\\\033[0m \033[36m\\\\\033[0m
\033[91m/\033[0m \033[92m/\033[0m \033[93m/\033[0m \033[94m/\033[0m \033[95m/\033[0m \033[96m/\033[0m
\033[31m/-\033[91m\\\\\033[0m \033[32m/-\033[92m\\\\\033[0m \033[33m/-\033[93m\\\\\033[0m \033[34m/-\033[94m\\\\\033[0m \033[35m/-\033[95m\\\\\033[0m \033[36m/-\033[96m\\\\\033[0m
\033[31m/---\033[91m\\\\\033[0m \033[32m/---\033[92m\\\\\033[0m \033[33m/---\033[93m\\\\\033[0m \033[34m/---\033[94m\\\\\033[0m \033[35m/---\033[95m\\\\\033[0m \033[36m/---\033[96m\\\\\033[0m\n"
exit 0

66
scripts/colorscripts/emwave Executable file
View File

@ -0,0 +1,66 @@
#!/bin/sh
# /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
# File: emwave.textart
# Description: {{des}}
# Author: Ilya144
# └─ https://github.com/ilya144
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/emwave.textart
# 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 <https://www.gnu.org/licenses/>.
# Values
TEXT="${1:-/\\}"
while [ "${#TEXTS}" -le '75' ]; do
TEXTS="$TEXTS$TEXT"
done
TEXTS=$(printf '%s' "$TEXTS" | sed -e 's/^\(.\{75\}\).*/\1/')
# Start
i='0'
while [ -n "$TEXTS" ]; do
charater=$(echo "$TEXTS" | sed -e 's/^\(.\{1\}\).*/\1/')
TEXTS="${TEXTS#?}"
case "$charater" in
'\') charater='\\' ;;
'%') charater='%%' ;;
esac
r=$(( 255 - ( i * ( 255 / 76 ) ) ))
g=$(( i * ( 512 / 76 ) ))
b=$(( i * ( 255 / 76 ) ))
[ "$g" -gt 255 ] && g=$(( 510 - g ))
rr=$(( 255 - r ))
gg=$(( 255 - g ))
bb=$(( 255 - b ))
print="$print\033[48;2;${r};${g};${b}m\033[38;2;${rr};${gg};${bb}m$charater\033[0m"
i=$(( i + 1 ))
done
echo -e "$print"
exit 0

19
scripts/colorscripts/faces Executable file
View File

@ -0,0 +1,19 @@
#!/bin/sh
# File: faces.textart
# Description: {{des}}
# Author: Pfh
# └─ https://crunchbang.org/forums/profile.php?id=9103
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/faces.textart
# Start
echo -e "\n╔══════════════════════════════════════════════════════════════════╗
║ \033[31m▄█ █▄ \033[32m▄█ █▄ \033[33m▄█ █▄ \033[34m▄█ █▄ \033[35m▄█ █▄ \033[36m▄█ █▄ \033[0m║
║ \033[91m▄█◄► ◄►█▄ \033[92m▄█◄► ◄►█▄ \033[93m▄█◄► ◄►█▄ \033[94m▄█◄► ◄►█▄ \033[95m▄█◄► ◄►█▄ \033[96m▄█◄► ◄►█▄ \033[0m║
║ \033[91m▀█  █▀ \033[92m▀█  █▀ \033[93m▀█  █▀ \033[94m▀█  █▀ \033[95m▀█  █▀ \033[96m▀█  █▀ \033[0m║
║ \033[31m▀█ █▀ \033[32m▀█ █▀ \033[33m▀█ █▀ \033[34m▀█ █▀ \033[35m▀█ █▀ \033[36m▀█ █▀ \033[0m║
╚══════════════════════════════════════════════════════════════════╝\n"
exit 0

16
scripts/colorscripts/fade Executable file
View File

@ -0,0 +1,16 @@
#!/bin/sh
# File: fade.textart
# Description: {{des}}
# Author: Pfh
# └─ https://crunchbang.org/forums/profile.php?id=9103
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/fade.textart
# Start
echo -e "\n\033[31m▒▒▒▒ \033[91m▒▒ \033[32m▒▒▒▒ \033[92m▒▒ \033[33m▒▒▒▒ \033[93m▒▒ \033[34m▒▒▒▒ \033[94m▒▒ \033[35m▒▒▒▒ \033[95m▒▒ \033[36m▒▒▒▒ \033[96m▒▒\033[0m
\033[31m▒▒ ■ \033[91m▒▒ \033[32m▒▒ ■ \033[92m▒▒ \033[33m▒▒ ■ \033[93m▒▒ \033[34m▒▒ ■ \033[94m▒▒ \033[35m▒▒ ■ \033[95m▒▒ \033[36m▒▒ ■ \033[96m▒▒\033[0m
\033[31m▒▒ \033[91m▒▒▒▒ \033[32m▒▒ \033[92m▒▒▒▒ \033[33m▒▒ \033[93m▒▒▒▒ \033[34m▒▒ \033[94m▒▒▒▒ \033[35m▒▒ \033[95m▒▒▒▒ \033[36m▒▒ \033[96m▒▒▒▒\033[0m\n"
exit 0

24
scripts/colorscripts/ghosts Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
# File: ghosts.textart
# Description: {{des}}
# Author: Pfh
# └─ https://crunchbang.org/forums/profile.php?id=9103
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/ghosts.textart
# Start
echo -e "\n \033[31m▄▄▄ \033[32m▄▄▄ \033[33m▄▄▄ \033[34m▄▄▄ \033[35m▄▄▄ \033[36m▄▄▄\033[0m
\033[31m▀█▀██ ▄ \033[32m▀█▀██ ▄ \033[33m▀█▀██ ▄ \033[34m▀█▀██ ▄ \033[35m▀█▀██ ▄ \033[36m▀█▀██ ▄\033[0m
\033[31m▀▄██████▀ \033[32m▀▄██████▀ \033[33m▀▄██████▀ \033[34m▀▄██████▀ \033[35m▀▄██████▀ \033[36m▀▄██████▀\033[0m
\033[31m▀█████ \033[32m▀█████ \033[33m▀█████ \033[34m▀█████ \033[35m▀█████ \033[36m▀█████\033[0m
\033[31m▀▀▀▀▄ \033[32m▀▀▀▀▄ \033[33m▀▀▀▀▄ \033[34m▀▀▀▀▄ \033[35m▀▀▀▀▄ \033[36m▀▀▀▀▄\033[0m
\033[91m▄▄▄ \033[92m▄▄▄ \033[93m▄▄▄ \033[94m▄▄▄ \033[95m▄▄▄ \033[96m▄▄▄\033[0m
\033[91m▀█▀██ ▄ \033[92m▀█▀██ ▄ \033[93m▀█▀██ ▄ \033[94m▀█▀██ ▄ \033[95m▀█▀██ ▄ \033[96m▀█▀██ ▄\033[0m
\033[91m▀▄██████▀ \033[92m▀▄██████▀ \033[93m▀▄██████▀ \033[94m▀▄██████▀ \033[95m▀▄██████▀ \033[96m▀▄██████▀\033[0m
\033[91m▀█████ \033[92m▀█████ \033[93m▀█████ \033[94m▀█████ \033[95m▀█████ \033[96m▀█████\033[0m
\033[91m▀▀▀▀▄ \033[92m▀▀▀▀▄ \033[93m▀▀▀▀▄ \033[94m▀▀▀▀▄ \033[95m▀▀▀▀▄ \033[96m▀▀▀▀▄\033[0m\n"
exit 0

26
scripts/colorscripts/hedgehogs Executable file
View File

@ -0,0 +1,26 @@
#!/usr/bin/env bash
# ANSI color scheme script by github.com/joshdk
red=$(printf '\e[31m')
grn=$(printf '\e[32m')
ylw=$(printf '\e[33m')
blu=$(printf '\e[34m')
mag=$(printf '\e[35m')
cya=$(printf '\e[36m')
bld=$(printf '\e[1m')
rst=$(printf '\e[0m')
cat << ART
$red ╷╽╽╽╽╽╽╽╽╽╷ $grn ╷╽╽╽╽╽╽╽╽╽╷ $ylw ╷╽╽╽╽╽╽╽╽╽╷ $blu ╷╽╽╽╽╽╽╽╽╽╷ $mag ╷╽╽╽╽╽╽╽╽╽╷ $cya ╷╽╽╽╽╽╽╽╽╽╷
$red ╽┃┃┃┃┃┃┃┃┃┃┃╽ $grn ╽┃┃┃┃┃┃┃┃┃┃┃╽ $ylw ╽┃┃┃┃┃┃┃┃┃┃┃╽ $blu ╽┃┃┃┃┃┃┃┃┃┃┃╽ $mag ╽┃┃┃┃┃┃┃┃┃┃┃╽ $cya ╽┃┃┃┃┃┃┃┃┃┃┃╽
$red ┪┃┃┃┃┃┃┃┃┃┃' .\ $grn /. '✿┃┃┃┃┃┃┃┃┃┢ $ylw ┪┃┃┃┃┃┃┃┃┃┃' .\ $blu /. '✿┃┃┃┃┃┃┃┃┃┢ $mag ┪┃┃┃┃┃┃┃┃┃┃' .\ $cya /. '✿┃┃┃┃┃┃┃┃┃┢
$red ╹┃┃┃┃┃┃┃┃⧓ ___• $grn •___ ┃┃┃┃┃┃┃┃┃╹ $ylw ╹┃┃┃┃┃┃┃┃⧓ ___• $blu •___ ┃┃┃┃┃┃┃┃┃╹ $mag ╹┃┃┃┃┃┃┃┃⧓ ___• $cya •___ ┃┃┃┃┃┃┃┃┃╹
$bld
$red ╷╽╽╽╽╽╽╽╽╽╷ $grn ╷╽╽╽╽╽╽╽╽╽╷ $ylw ╷╽╽╽╽╽╽╽╽╽╷ $blu ╷╽╽╽╽╽╽╽╽╽╷ $mag ╷╽╽╽╽╽╽╽╽╽╷ $cya ╷╽╽╽╽╽╽╽╽╽╷
$red ╽┃┃┃┃┃┃┃┃┃┃┃╽ $grn ╽┃┃┃┃┃┃┃┃┃┃┃╽ $ylw ╽┃┃┃┃┃┃┃┃┃┃┃╽ $blu ╽┃┃┃┃┃┃┃┃┃┃┃╽ $mag ╽┃┃┃┃┃┃┃┃┃┃┃╽ $cya ╽┃┃┃┃┃┃┃┃┃┃┃╽
$red ┪┃┃┃┃┃┃┃┃┃✿' .\ $grn /. '┃┃┃┃┃┃┃┃┃┃┢ $ylw ┪┃┃┃┃┃┃┃┃┃✿' .\ $blu /. '┃┃┃┃┃┃┃┃┃┃┢ $mag ┪┃┃┃┃┃┃┃┃┃✿' .\ $cya /. '┃┃┃┃┃┃┃┃┃┃┢
$red ╹┃┃┃┃┃┃┃┃┃ ___• $grn •___ ⧓┃┃┃┃┃┃┃┃╹ $ylw ╹┃┃┃┃┃┃┃┃┃ ___• $blu •___ ⧓┃┃┃┃┃┃┃┃╹ $mag ╹┃┃┃┃┃┃┃┃┃ ___• $cya •___ ⧓┃┃┃┃┃┃┃┃╹
$rst
ART

47
scripts/colorscripts/illumina Executable file
View File

@ -0,0 +1,47 @@
#!/bin/sh
# ._________________________________.
# |▓▓▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░▒|
# |░▒ _ ▒░|
# |▓ //\ ▒|
# |▓ //-- // \ ========, ▒|
# |▒ // // \ / ▒|
# |▒ // // \ / ▒|
# |▒ __________ ___▒█__ _________▒|
# |▒ / \ █▒ // // ▓|
# |▒ / \ // // ▓|
# |▒ /__________________// ▓|
# |▓ \ // ▓|
# |▓ \// ▓|
# | ▒ " ▓█|
# |▓░ ░░░░░░░▓▓▓▓▓▓▓████████▓|
# '---------------------------------'
# File: illumina.textart
# Description: {{des}}
# Author: Venam
# └─ https://venam.nixers.net/blog
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/stark/illumina.textart
# Start
echo -e "\n\033[1;33m._________________________________.\033[0m
\033[1;33m|\033[0;104;94m##\033[0m\033[46;36m########\033[106;96m#######\033[45;35m#######\033[105;95m#######\033[45;35m#\033[41;31m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;106;96m#\033[0m\033[44;34m#\033[0m \033[34m_ \033[101;91m#\033[105;95m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;104;94m#\033[0m \033[34m//\ \033[41;31m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;104;94m#\033[0m \033[32m/\033[1;32m/-- \033[0;34m/\033[1;34m/ \033[0;36m\ \033[32m========, \033[41;31m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;44;34m#\033[0m \033[32m/\033[1;32m/ \033[0;34m/\033[1;34m/ \033[0;36m\ \033[32m/ \033[101;91m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;44;34m#\033[0m \033[32m/\033[1;32m/ \033[0;34m/\033[1;34m/ \033[0;36m\ \033[32m/ \033[101;91m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;44;34m#\033[0m \033[1;31m__________ ___\033[41;31m#\033[107;97m#\033[0;31m__ _________\033[101;91m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;42;32m#\033[0m \033[32m/ \033[34m\ \033[47;37m#\033[101;91m#\033[0m \033[1;34m/\033[0;34m/ \033[1;32m/\033[0;32m/ \033[43;33m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;42;32m#\033[0m \033[32m/ \033[34m\ \033[1;34m/\033[0;34m/ \033[1;32m/\033[0;32m/ \033[43;33m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;42;32m#\033[0m \033[32m/__________________\033[1;32m/\033[0;32m/ \033[43;33m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;102;92m#\033[0m \033[34m\ \033[1;34m/\033[0;34m/ \033[103;93m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;102;92m#\033[0m \033[34m\\\\\033[1;34m/\033[0;34m/ \033[103;93m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;40;30m#\033[42;32m#\033[0m \033[1;34m\" \033[0;43;33m#\033[107;97m#\033[0;1;33m|\033[0m
\033[1;33m|\033[0;102;92m#\033[100;90m#\033[40;30m########\033[100;90m#######\033[47;37m#######\033[107;97m#######\033[47;37m#\033[103;93m#\033[0;1;33m|\033[0m
\033[1;33m'---------------------------------'\033[0m\n"
exit 0

30
scripts/colorscripts/invaders Executable file
View File

@ -0,0 +1,30 @@
#!/bin/sh
# File: space-invaders.textart
# Description: Space Invaders
# Author: Lolilolicon
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/space-invaders.textart
# Start
echo -e "\n \033[31m▀▄ ▄▀ \033[32m▄▄▄████▄▄▄ \033[33m▄██▄ \033[34m▀▄ ▄▀ \033[35m▄▄▄████▄▄▄ \033[36m▄██▄\033[0m
\033[31m▄█▀███▀█▄ \033[32m███▀▀██▀▀███ \033[33m▄█▀██▀█▄ \033[34m▄█▀███▀█▄ \033[35m███▀▀██▀▀███ \033[36m▄█▀██▀█▄\033[0m
\033[31m█▀███████▀█ \033[32m▀▀███▀▀███▀▀ \033[33m▀█▀██▀█▀ \033[34m█▀███████▀█ \033[35m▀▀███▀▀███▀▀ \033[36m▀█▀██▀█▀\033[0m
\033[31m▀ ▀▄▄ ▄▄▀ ▀ \033[32m▀█▄ ▀▀ ▄█▀ \033[33m▀▄ ▄▀ \033[34m▀ ▀▄▄ ▄▄▀ ▀ \033[35m▀█▄ ▀▀ ▄█▀ \033[36m▀▄ ▄▀\033[0m
\033[91m▄ ▀▄ ▄▀ ▄ \033[92m▄▄▄████▄▄▄ \033[93m▄██▄ \033[94m▄ ▀▄ ▄▀ ▄ \033[95m▄▄▄████▄▄▄ \033[96m▄██▄\033[0m
\033[91m█▄█▀███▀█▄█ \033[92m███▀▀██▀▀███ \033[93m▄█▀██▀█▄ \033[94m█▄█▀███▀█▄█ \033[95m███▀▀██▀▀███ \033[96m▄█▀██▀█▄\033[0m
\033[91m▀█████████▀ \033[92m▀▀▀██▀▀██▀▀▀ \033[93m▀▀█▀▀█▀▀ \033[94m▀█████████▀ \033[95m▀▀▀██▀▀██▀▀▀ \033[96m▀▀█▀▀█▀▀\033[0m
\033[91m▄▀ ▀▄ \033[92m▄▄▀▀ ▀▀ ▀▀▄▄ \033[93m▄▀▄▀▀▄▀▄ \033[94m▄▀ ▀▄ \033[95m▄▄▀▀ ▀▀ ▀▀▄▄ \033[96m▄▀▄▀▀▄▀▄\033[0m
\033[37m▌\033[0m
\033[37m▌\033[0m
\033[37m▄█▄\033[0m
\033[37m▄█████████▄\033[0m
\033[37m▀▀▀▀▀▀▀▀▀▀▀\033[0m\n"
exit 0

18
scripts/colorscripts/mouseface Executable file
View File

@ -0,0 +1,18 @@
#!/bin/sh
# File: mouseface2.textart
# Description: {{des}}
# Author: Ivo
# └─ https://crunchbang.org/forums/profile.php?id=10160
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/mouseface2.textart
# Start
echo -e "\n \033[91m██ ██ \033[92m██ ██ \033[93m██ ██ \033[94m██ ██ \033[95m██ ██ \033[96m██ ██\033[0m
\033[91m█ \033[37m■\033[91m█ █\033[37m■ \033[91m█ \033[92m█ \033[37m■\033[92m█ █\033[37m■ \033[92m█ \033[93m█ \033[37m■\033[93m█ █\033[37m■ \033[93m█ \033[94m█ \033[37m■\033[94m█ █\033[37m■ \033[94m█ \033[95m█ \033[37m■\033[95m█ █\033[37m■ \033[95m█ \033[96m█ \033[37m■\033[96m█ █\033[37m■ \033[96m█\033[0m
\033[31m█ █ █ █ \033[32m█ █ █ █ \033[33m█ █ █ █ \033[34m█ █ █ █ \033[35m█ █ █ █ \033[36m█ █ █ █\033[0m
\033[31m█ █ █ \033[32m█ █ █ \033[33m█ █ █ \033[34m█ █ █ \033[35m█ █ █ \033[36m█ █ █\033[0m
\033[31m=■= \033[32m=■= \033[33m=■= \033[34m=■= \033[35m=■= \033[36m=■=\033[0m\n"
exit 0

22
scripts/colorscripts/panes Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Author: GekkoP
# Source: http://linuxbbq.org/bbs/viewtopic.php?f=4&t=1656#p33189
f=3 b=4
for j in f b; do
for i in {0..7}; do
printf -v $j$i %b "\e[${!j}${i}m"
done
done
d=$'\e[1m'
t=$'\e[0m'
v=$'\e[7m'
cat << EOF
$f0████$d▄$t $f1████$d▄$t $f2████$d▄$t $f3████$d▄$t $f4████$d▄$t $f5████$d▄$t $f6████$d▄$t $f7████$d▄$t
$f0████$d█$t $f1████$d█$t $f2████$d█$t $f3████$d█$t $f4████$d█$t $f5████$d█$t $f6████$d█$t $f7████$d█$t
$f0████$d█$t $f1████$d█$t $f2████$d█$t $f3████$d█$t $f4████$d█$t $f5████$d█$t $f6████$d█$t $f7████$d█$t
$d$f0 ▀▀▀▀ $d$f1 ▀▀▀▀ $f2▀▀▀▀ $f3▀▀▀▀ $f4▀▀▀▀ $f5▀▀▀▀ $f6▀▀▀▀ $f7▀▀▀▀$t
EOF

142
scripts/colorscripts/pipes Executable file
View File

@ -0,0 +1,142 @@
#!/usr/bin/env bash
# pipes.sh: Animated pipes terminal screensaver.
# Copyleft (ↄ) 2015 - Acidhub <acidhub@craft.net.br>
# 2015 - Pipeseroni - http://github.com/pipeseroni
# 2014 - Yu-Jie Lin <livibetter@gmail.com>
# ???? - Mathew Simpson
#
# 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 <http://www.gnu.org/licenses/>.
#
VERSION=1.2
M=32768
p=3
f=75 s=13 r=2000 t=0
w=$(tput cols) h=$(tput lines)
# ab -> idx = a*4 + b
# 0: up, 1: right, 2: down, 3: left
# 00 means going up , then going up -> ┃
# 12 means going right, then going down -> ┓
sets=(
"┃┏ ┓┛━┓ ┗┃┛┗ ┏━" # -t 0 "default"
"│╭ ╮╯─╮ ╰│╯╰ ╭─" # -t 1 "round"
"│┌ ┐┘─┐ └│┘└ ┌─" # -t 2 "weak"
"║╔ ╗╝═╗ ╚║╝╚ ╔═" # -t 3 "double"
"|+ ++-+ +|++ +-" # -t 4 "add/sub"
"|/ \/-\ \|/\ /-" # -t 5 "It' something"
".. .... .... .." # -t 6 "dots"
".o oo.o o.oo o." # -t 7 "dot-O"
"-\ /\|/ /-\/ \|" # -t 8 "railway"
"▓≡▓≡≡▓≡ ≡▓≡≡▓≡▓" # -t 9 "blocks"
)
v=()
RNDSTART=0
BOLD=1
NOCOLOR=0
OPTIND=1
while getopts "p:t:f:s:r:RBChv" arg; do
case $arg in
p) ((p=(OPTARG>0)?OPTARG:p));;
t)
if [[ "$OPTARG" = c???????????????? ]]; then
V+=(${#sets[@]})
sets+=("${OPTARG:1}")
else
((OPTARG>=0 && OPTARG<${#sets[@]})) && V+=($OPTARG)
fi
;;
f) ((f=(OPTARG>19 && OPTARG<101)?OPTARG:f));;
s) ((s=(OPTARG>4 && OPTARG<16 )?OPTARG:s));;
r) ((r=(OPTARG>=0)?OPTARG:r));;
R) RNDSTART=1;;
B) BOLD=0;;
C) NOCOLOR=1;;
h) echo -e "Usage: $(basename $0) [OPTION]..."
echo -e "Animated pipes terminal screensaver.\n"
echo -e " -p [1-?]\tnumber of pipes (D=3)."
echo -e " -t [0-$((${#sets[@]} - 1))]\ttype of pipes, can be used more than once (D=0)."
echo -e " -t c[16 chars]\tcustom type of pipes."
echo -e " -f [20-100]\tframerate (D=75)."
echo -e " -s [5-15]\tprobability of a straight fitting (D=13)."
echo -e " -r LIMIT\treset after x characters, 0 if no limit (D=2000)."
echo -e " -R \t\trandom starting point."
echo -e " -B \t\tno bold effect."
echo -e " -C \t\tno color."
echo -e " -h\t\thelp (this screen)."
echo -e " -v\t\tprint version number.\n"
exit 0;;
v) echo "$(basename -- "$0") $VERSION"
exit 0
esac
done
# set default values if not by options
((${#V[@]})) || V=(0)
cleanup() {
# clear up standard input
read -t 0.001 && cat </dev/stdin>/dev/null
# terminal has no smcup and rmcup capabilities
((FORCE_RESET)) && reset && exit 0
tput rmcup
tput cnorm
stty echo
((NOCOLOR)) && echo -ne '\e[0m'
exit 0
}
trap cleanup HUP TERM
trap 'break 2' INT
for (( i=1; i<=p; i++ )); do
c[i]=$((i%8)) n[i]=0 l[i]=0
((x[i]=RNDSTART==1?RANDOM*w/32768:w/2))
((y[i]=RNDSTART==1?RANDOM*h/32768:h/2))
v[i]=${V[${#V[@]} * RANDOM / M]}
done
stty -echo
tput smcup || FORCE_RESET=1
tput civis
tput clear
# any key press exits the loop and this script
while REPLY=; read -t 0.0$((1000/f)) -n 1; [[ -z $REPLY ]] ; do
for (( i=1; i<=p; i++ )); do
# New position:
((${l[i]}%2)) && ((x[i]+=-${l[i]}+2,1)) || ((y[i]+=${l[i]}-1))
# Loop on edges (change color on loop):
((${x[i]}>w||${x[i]}<0||${y[i]}>h||${y[i]}<0)) && ((c[i]=RANDOM%8, v[i]=V[${#V[@]}*RANDOM/M]))
((x[i]=(x[i]+w)%w))
((y[i]=(y[i]+h)%h))
# New random direction:
((n[i]=RANDOM%s-1))
((n[i]=(${n[i]}>1||${n[i]}==0)?${l[i]}:${l[i]}+${n[i]}))
((n[i]=(${n[i]}<0)?3:${n[i]}%4))
# Print:
tput cup ${y[i]} ${x[i]}
echo -ne "\e[${BOLD}m"
[[ $NOCOLOR == 0 ]] && echo -ne "\e[3${c[i]}m"
echo -n "${sets[v[i]]:l[i]*4+n[i]:1}"
l[i]=${n[i]}
done
((r>0 && t*p>=r)) && tput reset && tput civis && t=0 || ((t++))
done
cleanup

187
scripts/colorscripts/pipes3d Executable file
View File

@ -0,0 +1,187 @@
#!/usr/bin/env bash
# Animated pipes.sh terminal screensaver at an angle.
# Copyright (C) 2013 by Yu-Jie Lin
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# Blog: http://blog.yjl.im/2013/07/pipesxsh-animated-pipessh-terminal.html
# Gist: https://gist.github.com/livibetter/5974905
# Screenshot: https://lh3.googleusercontent.com/-UaCta_DtgrQ/Ud6dqIgcfmI/AAAAAAAAE_8/VXPac0OpULU/s800/pipesX.sh.gif
# Screenshot: https://lh6.googleusercontent.com/-yBety-A8J_c/Ud6dk10sjBI/AAAAAAAAE_0/S98aRRV8t0s/s800/pipesX.sh%25202013-07-11--19%253A51%253A05.png
# Screencast: http://youtu.be/dITTlFPYVPA
W=$(tput cols) H=$(tput lines)
# maximal random value + 1
M=32768
SETS=('╱╲' '/\')
COLORS=(31 32 33 34 35 36 37)
# default values
N=1
T=0
I=0.05
P=25
R=$((W * H / 4))
HELP="Usage: $(basename $0) [OPTIONS]
Animated pipes.sh terminal screensaver at an angle.
Options:
-n [1-] number of pipes. (Default: $N)
-t [0-$((${#SETS[@]} - 1))] type of pipes. (Default: $T)
-i [float] piping interval or maze generation interval. (Default: $I)
-P [0-100] probability of a turning pipe or of \\ in maze generation. (Default: $P)
-r [LIMIT] reset after x characters, 0 if no limit. (Default: $R)
-R random starting point.
-C no color.
-X maze generation.
-h this help message.
"
while getopts "n:t:i:P:r:RCXh" arg; do
case $arg in
n)
((N = OPTARG > 0 ? OPTARG : N))
;;
t)
((T = (OPTARG >= 0 && OPTARG < ${#SETS[@]}) ? OPTARG : T))
;;
i)
I=$OPTARG
;;
P)
((P = (OPTARG >= 0 && OPTARG <= 100) ? OPTARG : P))
;;
r)
((R = OPTARG >= 0 ? OPTARG : R))
;;
R)
RNDSTART=1
;;
C)
NOCOLOR=1
;;
X)
MAZE=1
;;
h)
echo -e "$HELP"
exit 0
;;
esac
done
do_exit() {
# Show cursor and echo stdin
echo -ne "\e[?25h"
stty echo
clear
exit 0
}
trap do_exit INT TERM
# No echo stdin and hide the cursor
stty -echo
echo -ne "\e[?25l"
# maze geneartion
while [[ $MAZE ]] && clear; do
[[ $NOCOLOR ]] || echo -ne "\e[1;${COLORS[${#COLORS[@]} * RANDOM / M]}m"
for ((i = 0; i < W * H; i++ )); do
echo -ne ${SETS[T]:100 * RANDOM / M < P:1}
done
read -t $I -n 1 && [[ $REPLY =~ q|Q ]] && do_exit
done
# initialze values
for ((n = 0; n < N; n++)); do
((X[n] = RNDSTART ? (W + 2) * RANDOM / M : W / 2))
((Y[n] = RNDSTART ? (H + 2) * RANDOM / M : H / 2))
D[n]=$((4 * RANDOM / M))
C[n]=${COLORS[${#COLORS[@]} * RANDOM / M]}
done
clear
while :; do
for ((n = 0; n < N; n++, CC = 0)); do
x=${X[n]} y=${Y[n]}
d=${D[n]} c=${C[n]}
# calculate new direction `d`
# 1 0
# \/ 4 directions 0 to 3
# /\
# 2 3
# valid directions: d: dd', d' is the new direction
# d
# 0: / 00 \ 01 03
# / / /\
# 1: / 10 \ 11 12
# \ \ /\
# 2: \/ 21 / 22 / 23
# / \
# 3: \/ 30 \ 32 \ 33
# / \
((d = (100 * RANDOM / M) < P ? ((d + 1) + 2 * (RANDOM % 2)) % 4 : d))
((e = (d + 1) % 4))
# calculate new position
# d' x' y'
# 0: x+1 y-1
# 1: x-1 y-1
# 2: x-1 y+1
# 3: x+1 y+1
((xn = e < 2 ? x + 1 : x - 1))
((yn = d < 2 ? y - 1 : y + 1))
# adjust position and change color?
((d < 2 && y == 0)) && ((yn--, CC=1))
((e > 1 && x == 0)) && ((xn--, CC=1))
((d > 1 && y == H)) && ((yn++, CC=1))
((e < 2 && x == W)) && ((xn++, CC=1))
((CC)) && c=${COLORS[${#COLORS[@]} * RANDOM / M]}
# warp pipe
((xn = (xn + W + 1) % (W + 1)))
((yn = (yn + H + 1) % (H + 1)))
# calculate position in terminal
# d' xt yt
# 0: x' y'+1
# 1: x'+1 y'+1
# 2: x'+1 y'
# 3: x' y'
((xt = e < 2 ? xn : xn + 1))
((yt = d < 2 ? yn + 1 : yn))
echo -ne "\e[${yt};${xt}H"
[[ $NOCOLOR ]] || echo -ne "\e[1;${c}m"
echo -n "${SETS[T]:d%2:1}"
X[n]=$xn Y[n]=$yn
D[n]=$d C[n]=$c
done
read -t $I -n 1 && [[ $REPLY =~ q|Q ]] && do_exit
((R)) && ((r += N, r >= R)) && r=0 && clear
done
do_exit

18
scripts/colorscripts/railcars Executable file
View File

@ -0,0 +1,18 @@
#!/bin/sh
# File: rails.textart
# Description: {{des}}
# Author: Pfh
# └─ https://crunchbang.org/forums/profile.php?id=9103
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/rails.textart
# Start
echo -e "\n\033[31m╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗ \033[32m╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗ \033[33m╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\033[0m
\033[1;31m╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝ \033[32m╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝ \033[33m╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\033[0m
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
\033[34m╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗ \033[35m╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗ \033[36m╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\033[0m
\033[1;34m╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝ \033[35m╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝ \033[36m╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\033[0m\n"
exit 0

28
scripts/colorscripts/rally-x Executable file
View File

@ -0,0 +1,28 @@
#!/bin/sh
# File: rally-x.textart
# Description: {{des}}
# Author: Pfh
# └─ https://crunchbang.org/forums/profile.php?id=9103
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/rally-x.textart
# Start
echo -e "\n \033[33m▄ \033[31m▄▄ \033[32m▄▄ \033[34m▄▄ \033[35m▄▄ \033[36m▄▄\033[0m
\033[33m███▄▄ \033[31m██▬██▬██ \033[32m██▬██▬██ \033[34m██▬██▬██ \033[35m██▬██▬██ \033[36m██▬██▬██\033[0m
\033[33m█████▀▀ \033[31m████ \033[32m████ \033[34m████ \033[35m████ \033[36m████ \033[0m
\033[33m█▀▀ \033[31m▄██ ██▄ \033[32m▄██ ██▄ \033[34m▄██ ██▄ \033[35m▄██ ██▄ \033[36m▄██ ██▄\033[0m
\033[33m█ \033[31m▄▄▄▀█ █▀▄▄▄ \033[32m▄▄▄▀█ █▀▄▄▄ \033[34m▄▄▄▀█ █▀▄▄▄ \033[35m▄▄▄▀█ █▀▄▄▄ \033[36m▄▄▄▀█ █▀▄▄▄\033[0m
\033[33m▄█▄ \033[31m███▀████▀███ \033[32m███▀████▀███ \033[34m███▀████▀███ \033[35m███▀████▀███ \033[36m███▀████▀███\033[0m
\033[31m▀ ▀ \033[32m▀ ▀ \033[34m▀ ▀ \033[35m▀ ▀ \033[36m▀ ▀\033[0m
\033[93m▄ \033[91m▄▄ \033[92m▄▄ \033[94m▄▄ \033[95m▄▄ \033[96m▄▄\033[0m
\033[93m███▄▄ \033[91m██▬██▬██ \033[92m██▬██▬██ \033[94m██▬██▬██ \033[95m██▬██▬██ \033[96m██▬██▬██\033[0m
\033[93m█████▀▀ \033[91m████ \033[92m████ \033[94m████ \033[95m████ \033[96m████ \033[0m
\033[93m█▀▀ \033[91m▄██ ██▄ \033[92m▄██ ██▄ \033[94m▄██ ██▄ \033[95m▄██ ██▄ \033[96m▄██ ██▄\033[0m
\033[93m█ \033[91m▄▄▄▀█ █▀▄▄▄ \033[92m▄▄▄▀█ █▀▄▄▄ \033[94m▄▄▄▀█ █▀▄▄▄ \033[95m▄▄▄▀█ █▀▄▄▄ \033[96m▄▄▄▀█ █▀▄▄▄\033[0m
\033[93m▄█▄ \033[91m███▀████▀███ \033[92m███▀████▀███ \033[94m███▀████▀███ \033[95m███▀████▀███ \033[96m███▀████▀███\033[0m
\033[91m▀ ▀ \033[92m▀ ▀ \033[94m▀ ▀ \033[95m▀ ▀ \033[96m▀ ▀\033[0m\n"
exit 0

16
scripts/colorscripts/square Executable file
View File

@ -0,0 +1,16 @@
#!/bin/sh
# File: square.textart
# Description: {{des}}
# Author: Muzieca
# └─ https://crunchbang.org/forums/profile.php?id=6838
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/square.textart
# Start
echo -e "\n\033[31m▀ █ \033[91m█ ▀ \033[32m▀ █ \033[92m█ ▀ \033[33m▀ █ \033[93m█ ▀ \033[34m▀ █ \033[94m█ ▀ \033[35m▀ █ \033[95m█ ▀ \033[36m▀ █ \033[96m█ ▀\033[0m
\033[31m██ \033[91m██ \033[32m██ \033[92m██ \033[33m██ \033[93m██ \033[34m██ \033[94m██ \033[35m██ \033[95m██ \033[36m██ \033[96m██\033[0m
\033[31m▄ █ \033[91m█ ▄ \033[32m▄ █ \033[92m█ ▄ \033[33m▄ █ \033[93m█ ▄ \033[34m▄ █ \033[94m█ ▄ \033[35m▄ █ \033[95m█ ▄ \033[36m▄ █ \033[96m█ ▄\033[0m\n"
exit 0

24
scripts/colorscripts/tanks Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
# File: tanks.textart
# Description: {{des}}
# Author: Muzieca
# └─ https://crunchbang.org/forums/profile.php?id=6838
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/tanks.textart
# Start
echo -e "\n \033[31m█ \033[32m█ \033[33m█ \033[34m█ \033[35m█ \033[36m█\033[0m
\033[31m▄▄ █ ▄▄ \033[32m▄▄ █ ▄▄ \033[33m▄▄ █ ▄▄ \033[34m▄▄ █ ▄▄ \033[35m▄▄ █ ▄▄ \033[36m▄▄ █ ▄▄\033[0m
\033[31m███▀▀▀███ \033[32m███▀▀▀███ \033[33m███▀▀▀███ \033[34m███▀▀▀███ \033[35m███▀▀▀███ \033[36m███▀▀▀███\033[0m
\033[31m███ █ ███ \033[32m███ █ ███ \033[33m███ █ ███ \033[34m███ █ ███ \033[35m███ █ ███ \033[36m███ █ ███\033[0m
\033[31m██ ▀▀▀ ██ \033[32m██ ▀▀▀ ██ \033[33m██ ▀▀▀ ██ \033[34m██ ▀▀▀ ██ \033[35m██ ▀▀▀ ██ \033[36m██ ▀▀▀ ██\033[0m
\033[91m█ \033[92m█ \033[93m█ \033[94m█ \033[95m█ \033[96m█\033[0m
\033[91m▄▄ █ ▄▄ \033[92m▄▄ █ ▄▄ \033[93m▄▄ █ ▄▄ \033[94m▄▄ █ ▄▄ \033[95m▄▄ █ ▄▄ \033[96m▄▄ █ ▄▄\033[0m
\033[91m███▀▀▀███ \033[92m███▀▀▀███ \033[93m███▀▀▀███ \033[94m███▀▀▀███ \033[95m███▀▀▀███ \033[96m███▀▀▀███\033[0m
\033[91m███ █ ███ \033[92m███ █ ███ \033[93m███ █ ███ \033[94m███ █ ███ \033[95m███ █ ███ \033[96m███ █ ███\033[0m
\033[91m██ ▀▀▀ ██ \033[92m██ ▀▀▀ ██ \033[93m██ ▀▀▀ ██ \033[94m██ ▀▀▀ ██ \033[95m██ ▀▀▀ ██ \033[96m██ ▀▀▀ ██\033[0m\n"
exit 0

26
scripts/colorscripts/tiefighter Executable file
View File

@ -0,0 +1,26 @@
#!/bin/sh
# File: tiefighter2.textart
# Description: {{des}}
# Author: Pfh
# └─ https://crunchbang.org/forums/profile.php?id=9103
# Converted to textart: NNB
# └─ https://github.com/NNBnh
# URL: https://github.com/NNBnh/nnbs-text-art/blob/main/color/icon/tiefighter2.textart
# Start
echo -e "\n\033[31m█ █ \033[32m█ █ \033[33m█ █ \033[34m█ █ \033[35m█ █ \033[36m█ █\033[0m
\033[31m█ ▄▄▄ █ \033[32m█ ▄▄▄ █ \033[33m█ ▄▄▄ █ \033[34m█ ▄▄▄ █ \033[35m█ ▄▄▄ █ \033[36m█ ▄▄▄ █\033[0m
\033[31m█▄▄██▀██▄▄█ \033[32m█▄▄██▀██▄▄█ \033[33m█▄▄██▀██▄▄█ \033[34m█▄▄██▀██▄▄█ \033[35m█▄▄██▀██▄▄█ \033[36m█▄▄██▀██▄▄█\033[0m
\033[31m█▀▀█████▀▀█ \033[32m█▀▀█████▀▀█ \033[33m█▀▀█████▀▀█ \033[34m█▀▀█████▀▀█ \033[35m█▀▀█████▀▀█ \033[36m█▀▀█████▀▀█\033[0m
\033[31m█ ▀▀▀ █ \033[32m█ ▀▀▀ █ \033[33m█ ▀▀▀ █ \033[34m█ ▀▀▀ █ \033[35m█ ▀▀▀ █ \033[36m█ ▀▀▀ █\033[0m
\033[31m█ █ \033[32m█ █ \033[33m█ █ \033[34m█ █ \033[35m█ █ \033[36m█ █\033[0m
\033[91m█ █ \033[92m█ █ \033[93m█ █ \033[94m█ █ \033[95m█ █ \033[96m█ █\033[0m
\033[91m█ ▄▄▄ █ \033[92m█ ▄▄▄ █ \033[93m█ ▄▄▄ █ \033[94m█ ▄▄▄ █ \033[95m█ ▄▄▄ █ \033[96m█ ▄▄▄ █\033[0m
\033[91m█▄▄██▀██▄▄█ \033[92m█▄▄██▀██▄▄█ \033[93m█▄▄██▀██▄▄█ \033[94m█▄▄██▀██▄▄█ \033[95m█▄▄██▀██▄▄█ \033[96m█▄▄██▀██▄▄█\033[0m
\033[91m█▀▀█████▀▀█ \033[92m█▀▀█████▀▀█ \033[93m█▀▀█████▀▀█ \033[94m█▀▀█████▀▀█ \033[95m█▀▀█████▀▀█ \033[96m█▀▀█████▀▀█\033[0m
\033[91m█ ▀▀▀ █ \033[92m█ ▀▀▀ █ \033[93m█ ▀▀▀ █ \033[94m█ ▀▀▀ █ \033[95m█ ▀▀▀ █ \033[96m█ ▀▀▀ █\033[0m
\033[91m█ █ \033[92m█ █ \033[93m█ █ \033[94m█ █ \033[95m█ █ \033[96m█ █\033[0m\n"
exit 0

Some files were not shown because too many files have changed in this diff Show More