| removing X11 apps and replacing with wayland. - dotfiles - These are my dotfile… | |
| Log | |
| Files | |
| Refs | |
| README | |
| --- | |
| commit 08532b698f617d50addb0201c92a587636be2256 | |
| parent 97a5129e9e960edc4431ae61bd86b9470f4a86b9 | |
| Author: Jay Scott <[email protected]> | |
| Date: Sun, 11 Sep 2022 11:44:59 +0100 | |
| removing X11 apps and replacing with wayland. | |
| Diffstat: | |
| M README | 23 ++++------------------- | |
| D X11/Xresources | 53 ------------------------------ | |
| D X11/xinitrc | 10 ---------- | |
| M bin/game_select.sh | 5 ++++- | |
| M bin/link_handler.sh | 8 ++++---- | |
| R bin/dwmstatus.sh -> bin/old/dwmsta… | 0 | |
| M bootstrap.sh | 15 +-------------- | |
| A dunst/dunstrc | 257 +++++++++++++++++++++++++++++… | |
| D fdm/fdm.conf | 40 -----------------------------… | |
| A foot/foot.ini | 21 +++++++++++++++++++++ | |
| M mutt/muttrc | 2 +- | |
| M newsboat/urls | 11 +++++++---- | |
| M pkg/archlinux | 20 ++++++++++++-------- | |
| M profile | 23 ++++++++++++----------- | |
| D suckless/dmenu/Makefile | 39 -----------------------------… | |
| D suckless/dmenu/config.h | 13 ------------- | |
| D suckless/dmenu/patches/01-dmenu-bo… | 25 ------------------------- | |
| D suckless/dmenu/patches/02-dmenu-ce… | 120 ---------------------------… | |
| D suckless/dwm/Makefile | 35 -----------------------------… | |
| D suckless/dwm/config.h | 195 -----------------------------… | |
| D suckless/herbe/Makefile | 40 -----------------------------… | |
| D suckless/herbe/config.h | 19 ------------------- | |
| D suckless/st/Makefile | 39 -----------------------------… | |
| D suckless/st/config.h | 476 -----------------------------… | |
| D suckless/st/patches/01-st-scrollba… | 351 ---------------------------… | |
| D suckless/st/patches/02-st-w3m-hack… | 12 ------------ | |
| A sway/config | 78 +++++++++++++++++++++++++++++… | |
| A waybar/config | 82 +++++++++++++++++++++++++++++… | |
| A waybar/style.css | 58 ++++++++++++++++++++++++++++++ | |
| A waybar/waybar_mail.sh | 12 ++++++++++++ | |
| A waybar/waybar_newsboat.sh | 11 +++++++++++ | |
| 31 files changed, 564 insertions(+), 1529 deletions(-) | |
| --- | |
| diff --git a/README b/README | |
| @@ -11,10 +11,10 @@ all, the closest I come is using IRC. | |
| operating sys : archlinux / openBSD | |
| - window manager : dwm | |
| - terminal : st | |
| - launcher : dmenu | |
| - notifications : herbe | |
| + window manager : sway | |
| + terminal : foot | |
| + launcher : bemenu | |
| + notifications : dunst | |
| email : mutt | |
| browser : qutebrowser / firefox | |
| video : mpv | |
| @@ -23,18 +23,3 @@ all, the closest I come is using IRC. | |
| password mgt : pass | |
| vpn : mullvad | |
| news : newsboat | |
| - | |
| - | |
| -dwm, dmenu and herbe are all built with my own Makefiles. This makes | |
| -patching really easy and don't really need to worry about maintaining | |
| -multiple branches etc. It also helps that I don't really have any extra | |
| -patches. | |
| - | |
| -usage: | |
| - | |
| - $ make | |
| - | |
| -for suckless related tools, | |
| - | |
| - $ cd suckless/dwm | |
| - $ make && sudo make install | |
| diff --git a/X11/Xresources b/X11/Xresources | |
| @@ -1,53 +0,0 @@ | |
| -! vim:ft=xdefaults | |
| - | |
| -/* COLOURS */ | |
| -#define RED0 #cc0403 | |
| -#define RED1 #f2201f | |
| -#define GREEN0 #19cb00 | |
| -#define GREEN1 #23fd00 | |
| -#define YELLOW0 #cecb00 | |
| -#define YELLOW1 #fffd00 | |
| -#define BLUE0 #0d73cc | |
| -#define BLUE1 #1a8fff | |
| -#define MAGENTA0 #cb1ed1 | |
| -#define MAGENTA1 #fd28ff | |
| -#define CYAN0 #0dcdcd | |
| -#define CYAN1 #14ffff | |
| -#define BLACK #000000 | |
| -#define GREY1 #767676 | |
| -#define GREY2 #dddddd | |
| -#define WHITE #ffffff | |
| - | |
| -#define FONT Hack:size=14 | |
| - | |
| -/* XFT */ | |
| -Xft.dpi: 96 | |
| -Xft.hinting: true | |
| -Xft.rgba: rgb | |
| -Xft.antialias: true | |
| -Xft.autohint: false | |
| -Xft.hintstyle: hintslight | |
| -Xft.lcdfilter: lcddefault | |
| - | |
| -*.foreground: WHITE | |
| -*.background: BLACK | |
| - | |
| -/* NORMAL */ | |
| -*.color0: BLACK | |
| -*.color1: RED0 | |
| -*.color2: GREEN0 | |
| -*.color3: YELLOW0 | |
| -*.color4: BLUE0 | |
| -*.color5: MAGENTA0 | |
| -*.color6: CYAN0 | |
| -*.color7: GREY2 | |
| - | |
| -/* BRIGHT */ | |
| -*.color8: GREY1 | |
| -*.color9: RED1 | |
| -*.color10: GREEN1 | |
| -*.color11: YELLOW1 | |
| -*.color12: BLUE1 | |
| -*.color13: MAGENTA1 | |
| -*.color14: CYAN1 | |
| -*.color15: WHITE | |
| diff --git a/X11/xinitrc b/X11/xinitrc | |
| @@ -1,10 +0,0 @@ | |
| -# x stuff | |
| -setxkbmap gb | |
| -xset s off -dpms | |
| -xrdb -load ~/.config/X11/Xresources | |
| -~/bin/dwmstatus.sh & | |
| - | |
| -# apps | |
| -mpd & | |
| - | |
| -exec dwm | |
| diff --git a/bin/game_select.sh b/bin/game_select.sh | |
| @@ -1,10 +1,13 @@ | |
| #!/bin/sh | |
| -games=$(printf "%s\n" "Beneath A Steel Sky" "Enter The Gungeon" | dmenu -p "ga… | |
| +games=$(printf "%s\n" "Kathy Rain" "Beneath A Steel Sky" "Enter The Gungeon" |… | |
| [ -z "$games" ] && exit 0 | |
| case "$games" in | |
| +"Kathy Rain") | |
| + /data/games/kathy_rain/start.sh | |
| + ;; | |
| "Beneath A Steel Sky") | |
| /data/games/beneath_a_steel_sky/start.sh | |
| ;; | |
| diff --git a/bin/link_handler.sh b/bin/link_handler.sh | |
| @@ -1,12 +1,12 @@ | |
| #!/bin/sh | |
| -launcher="setsid -f st" | |
| +launcher="setsid -f foot" | |
| # apps | |
| -player="setsid -f mpv --really-quiet --no-terminal" | |
| +player="mpv --really-quiet --no-terminal" | |
| gemini="amfora" | |
| -pdf="mupdf" | |
| -images="sxiv" | |
| +pdf="zathura" | |
| +images="feh" | |
| uri="$1" | |
| uri_lower="$(printf "%s" "$uri" | tr '[:upper:]' '[:lower:]')" | |
| diff --git a/bin/dwmstatus.sh b/bin/old/dwmstatus.sh | |
| diff --git a/bootstrap.sh b/bootstrap.sh | |
| @@ -4,7 +4,7 @@ DOTFILES=$(pwd) | |
| FILES='bashrc profile vimrc' | |
| ROOT='bin' | |
| -CONFIG='fdm git mpd mutt ncmpcpp newsboat qutebrowser X11' | |
| +CONFIG='dunst git mpd mutt ncmpcpp newsboat qutebrowser sway foot waybar' | |
| AUR='paru' | |
| link() { | |
| @@ -23,19 +23,6 @@ aur_clean() { | |
| $AUR -Qtdq | $AUR -Rns - | |
| } | |
| -aur_init() { | |
| - if ! [ -f /etc/arch-release ]; then | |
| - echo "You are not running ArchLinux" | |
| - exit 1 | |
| - fi | |
| - | |
| - if ! command -v $AUR >/dev/null; then | |
| - echo "Installing $AUR" | |
| - git clone "https://aur.archlinux.org/$AUR.git" "/tmp/$AUR" | |
| - cd "/tmp/$AUR" && makepkg -si --noconfirm --needed | |
| - fi | |
| -} | |
| - | |
| backup() { | |
| crontab -l >"$DOTFILES"/crontab | |
| $AUR -Qqe >"$DOTFILES"/pkg/archlinux | |
| diff --git a/dunst/dunstrc b/dunst/dunstrc | |
| @@ -0,0 +1,257 @@ | |
| +[global] | |
| +font = Hack 11 | |
| + | |
| +# Allow a small subset of html markup: | |
| +# <b>bold</b> | |
| +# <i>italic</i> | |
| +# <s>strikethrough</s> | |
| +# <u>underline</u> | |
| +# | |
| +# For a complete reference see | |
| +# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>. | |
| +# If markup is not allowed, those tags will be stripped out of the | |
| +# message. | |
| +markup = yes | |
| +plain_text = no | |
| + | |
| +# The format of the message. Possible variables are: | |
| +# %a appname | |
| +# %s summary | |
| +# %b body | |
| +# %i iconname (including its path) | |
| +# %I iconname (without its path) | |
| +# %p progress value if set ([ 0%] to [100%]) or nothing | |
| +# Markup is allowed | |
| +format = "<b>%s</b>\n%b" | |
| + | |
| +# Sort messages by urgency. | |
| +sort = no | |
| + | |
| +# Show how many messages are currently hidden (because of geometry). | |
| +indicate_hidden = yes | |
| + | |
| +# Alignment of message text. | |
| +# Possible values are "left", "center" and "right". | |
| +alignment = center | |
| + | |
| +# The frequency with wich text that is longer than the notification | |
| +# window allows bounces back and forth. | |
| +# This option conflicts with "word_wrap". | |
| +# Set to 0 to disable. | |
| +bounce_freq = 0 | |
| + | |
| +# Show age of message if message is older than show_age_threshold | |
| +# seconds. | |
| +# Set to -1 to disable. | |
| +show_age_threshold = -1 | |
| + | |
| +# Split notifications into multiple lines if they don't fit into | |
| +# geometry. | |
| +word_wrap = yes | |
| + | |
| +# Ignore newlines '\n' in notifications. | |
| +ignore_newline = no | |
| + | |
| +# Hide duplicate's count and stack them | |
| +stack_duplicates = yes | |
| +hide_duplicate_count = yes | |
| + | |
| + | |
| +# The geometry of the window: | |
| +# [{width}]x{height}[+/-{x}+/-{y}] | |
| +# The geometry of the message window. | |
| +# The height is measured in number of notifications everything else | |
| +# in pixels. If the width is omitted but the height is given | |
| +# ("-geometry x2"), the message window expands over the whole screen | |
| +# (dmenu-like). If width is 0, the window expands to the longest | |
| +# message displayed. A positive x is measured from the left, a | |
| +# negative from the right side of the screen. Y is measured from | |
| +# the top and down respectevly. | |
| +# The width can be negative. In this case the actual width is the | |
| +# screen width minus the width defined in within the geometry option. | |
| +#geometry = "250x50-40+40" | |
| +geometry = "300x50-15+49" | |
| + | |
| +# Shrink window if it's smaller than the width. Will be ignored if | |
| +# width is 0. | |
| +shrink = no | |
| + | |
| +# The transparency of the window. Range: [0; 100]. | |
| +# This option will only work if a compositing windowmanager is | |
| +# present (e.g. xcompmgr, compiz, etc.). | |
| +transparency = 5 | |
| + | |
| +# Don't remove messages, if the user is idle (no mouse or keyboard input) | |
| +# for longer than idle_threshold seconds. | |
| +# Set to 0 to disable. | |
| +idle_threshold = 0 | |
| + | |
| +# Which monitor should the notifications be displayed on. | |
| +monitor = 0 | |
| + | |
| +# Display notification on focused monitor. Possible modes are: | |
| +# mouse: follow mouse pointer | |
| +# keyboard: follow window with keyboard focus | |
| +# none: don't follow anything | |
| +# | |
| +# "keyboard" needs a windowmanager that exports the | |
| +# _NET_ACTIVE_WINDOW property. | |
| +# This should be the case for almost all modern windowmanagers. | |
| +# | |
| +# If this option is set to mouse or keyboard, the monitor option | |
| +# will be ignored. | |
| +follow = none | |
| + | |
| +# Should a notification popped up from history be sticky or timeout | |
| +# as if it would normally do. | |
| +sticky_history = yes | |
| + | |
| +# Maximum amount of notifications kept in history | |
| +history_length = 15 | |
| + | |
| +# Display indicators for URLs (U) and actions (A). | |
| +show_indicators = no | |
| + | |
| +# The height of a single line. If the height is smaller than the | |
| +# font height, it will get raised to the font height. | |
| +# This adds empty space above and under the text. | |
| +line_height = 3 | |
| + | |
| +# Draw a line of "separatpr_height" pixel height between two | |
| +# notifications. | |
| +# Set to 0 to disable. | |
| +separator_height = 2 | |
| + | |
| +# Padding between text and separator. | |
| +padding = 6 | |
| + | |
| +# Horizontal padding. | |
| +horizontal_padding = 6 | |
| + | |
| +# Define a color for the separator. | |
| +# possible values are: | |
| +# * auto: dunst tries to find a color fitting to the background; | |
| +# * foreground: use the same color as the foreground; | |
| +# * frame: use the same color as the frame; | |
| +# * anything else will be interpreted as a X color. | |
| +separator_color = frame | |
| + | |
| +# Print a notification on startup. | |
| +# This is mainly for error detection, since dbus (re-)starts dunst | |
| +# automatically after a crash. | |
| +startup_notification = false | |
| + | |
| +# dmenu path. | |
| +dmenu = /usr/bin/dmenu -p dunst: | |
| + | |
| +# Browser for opening urls in context menu. | |
| +browser = /usr/bin/firefox -new-tab | |
| + | |
| +# Align icons left/right/off | |
| +icon_position = off | |
| +max_icon_size = 80 | |
| + | |
| +# Paths to default icons. | |
| +icon_path = /usr/share/icons/Paper/16x16/mimetypes/:/usr/share/icons/Paper/48x… | |
| + | |
| +frame_width = 3 | |
| +frame_color = "#8EC07C" | |
| + | |
| +[shortcuts] | |
| + | |
| +# Shortcuts are specified as [modifier+][modifier+]...key | |
| +# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", | |
| +# "mod3" and "mod4" (windows-key). | |
| +# Xev might be helpful to find names for keys. | |
| + | |
| +# Close notification. | |
| +close = ctrl+space | |
| + | |
| +# Close all notifications. | |
| +close_all = ctrl+shift+space | |
| + | |
| +# Redisplay last message(s). | |
| +# On the US keyboard layout "grave" is normally above TAB and left | |
| +# of "1". | |
| +history = ctrl+grave | |
| + | |
| +# Context menu. | |
| +context = ctrl+shift+period | |
| + | |
| +[urgency_low] | |
| +# IMPORTANT: colors have to be defined in quotation marks. | |
| +# Otherwise the "#" and following would be interpreted as a comment. | |
| +frame_color = "#3B7C87" | |
| +foreground = "#3B7C87" | |
| +background = "#191311" | |
| +#background = "#2B313C" | |
| +timeout = 4 | |
| + | |
| +[urgency_normal] | |
| +frame_color = "#5B8234" | |
| +foreground = "#5B8234" | |
| +background = "#191311" | |
| +#background = "#2B313C" | |
| +timeout = 6 | |
| + | |
| +[urgency_critical] | |
| +frame_color = "#B7472A" | |
| +foreground = "#B7472A" | |
| +background = "#191311" | |
| +#background = "#2B313C" | |
| +timeout = 8 | |
| + | |
| + | |
| +# Every section that isn't one of the above is interpreted as a rules to | |
| +# override settings for certain messages. | |
| +# Messages can be matched by "appname", "summary", "body", "icon", "category", | |
| +# "msg_urgency" and you can override the "timeout", "urgency", "foreground", | |
| +# "background", "new_icon" and "format". | |
| +# Shell-like globbing will get expanded. | |
| +# | |
| +# SCRIPTING | |
| +# You can specify a script that gets run when the rule matches by | |
| +# setting the "script" option. | |
| +# The script will be called as follows: | |
| +# script appname summary body icon urgency | |
| +# where urgency can be "LOW", "NORMAL" or "CRITICAL". | |
| +# | |
| +# NOTE: if you don't want a notification to be displayed, set the format | |
| +# to "". | |
| +# NOTE: It might be helpful to run dunst -print in a terminal in order | |
| +# to find fitting options for rules. | |
| + | |
| +#[espeak] | |
| +# summary = "*" | |
| +# script = dunst_espeak.sh | |
| + | |
| +#[script-test] | |
| +# summary = "*script*" | |
| +# script = dunst_test.sh | |
| + | |
| +#[ignore] | |
| +# # This notification will not be displayed | |
| +# summary = "foobar" | |
| +# format = "" | |
| + | |
| +#[signed_on] | |
| +# appname = Pidgin | |
| +# summary = "*signed on*" | |
| +# urgency = low | |
| +# | |
| +#[signed_off] | |
| +# appname = Pidgin | |
| +# summary = *signed off* | |
| +# urgency = low | |
| +# | |
| +#[says] | |
| +# appname = Pidgin | |
| +# summary = *says* | |
| +# urgency = critical | |
| +# | |
| +#[twitter] | |
| +# appname = Pidgin | |
| +# summary = *twitter.com* | |
| +# urgency = normal | |
| +# | |
| +# vim: ft=cfg | |
| diff --git a/fdm/fdm.conf b/fdm/fdm.conf | |
| @@ -1,40 +0,0 @@ | |
| -# vim:ft=config | |
| - | |
| -# paths | |
| -$path = "%h/mailtest" | |
| -$obsd = "${path}/openbsd" | |
| - | |
| -# macros | |
| -$host = $(pass tech/mailbox.org | awk '$1 == "incoming:" { print $2}') | |
| -$user = $(pass tech/mailbox.org | awk '$1 == "login:" { print $2}') | |
| -$pass = $(pass tech/mailbox.org | head -n1) | |
| - | |
| -# imap account | |
| -account "main" imaps server ${host} user ${user} pass ${pass} | |
| -folders { "Inbox" "Sent" "House" "Trade" "Keep" } | |
| - | |
| -# actions | |
| -action "inbox" maildir "${path}" | |
| -action "sent" maildir "${path}/sent" | |
| -action "spam" maildir "${path}/spam" | |
| -action "house" maildir "${path}/house" | |
| -action "trade" maildir "${path}/trade" | |
| -action "keep" maildir "${path}/keep" | |
| -action "obsd-misc" maildir "${obsd}/misc" | |
| -action "obsd-ports" maildir "${obsd}/ports" | |
| -action "obsd-tech" maildir "${obsd}/tech" | |
| -action "obsd-announce" maildir "${obsd}/announce" | |
| - | |
| - | |
| -# openbsd mailing list | |
| -match "^Sender:[ \t]*owner-([a-z-]*)@openbsd\\.org" in headers action "obsd-%1" | |
| - | |
| -# general filter | |
| -match string "%[folder]" to "Sent" action "sent" | |
| -match string "%[folder]" to "House" action "house" | |
| -match string "%[folder]" to "Trade" action "trade" | |
| -match string "%[folder]" to "Keep" action "keep" | |
| -match string "%[folder]" to "Inbox" action "inbox" | |
| - | |
| -# match everything else | |
| -match all action "inbox" | |
| diff --git a/foot/foot.ini b/foot/foot.ini | |
| @@ -0,0 +1,21 @@ | |
| +font=Hack:size=14 | |
| + | |
| +[colors] | |
| +background=282828 | |
| +foreground=ebdbb2 | |
| +regular0=282828 | |
| +regular1=cc241d | |
| +regular2=98971a | |
| +regular3=d79921 | |
| +regular4=458588 | |
| +regular5=b16286 | |
| +regular6=689d6a | |
| +regular7=a89984 | |
| +bright0=928374 | |
| +bright1=fb4934 | |
| +bright2=b8bb26 | |
| +bright3=fabd2f | |
| +bright4=83a598 | |
| +bright5=d3869b | |
| +bright6=8ec07c | |
| +bright7=ebdbb2 | |
| diff --git a/mutt/muttrc b/mutt/muttrc | |
| @@ -40,7 +40,7 @@ set postponed = "+jay/Drafts" | |
| set record = "+jay/Sent" | |
| # polling/sidebar | |
| -mailboxes =jay/Inbox =jay/Detecting =jay/House | |
| +mailboxes =jay/Inbox =jay/detecting =jay/house | |
| # macros | |
| bind index gg first-entry | |
| diff --git a/newsboat/urls b/newsboat/urls | |
| @@ -6,19 +6,19 @@ | |
| "query:│ ├─ Apps:tags # \"apps\"" | |
| "query:│ ├─ People:tags # \"people\"" | |
| "query:│ ├─ Gemini:tags # \"gemini\"" | |
| +"query:│ ├─ Podcast:tags # \"podcast\"" | |
| "query:│ ├─ Videos:tags # \"youtube\"" | |
| # LINUX | |
| -https://lobste.rs/newest.rss "!" "~Lobter.rs" linux | |
| https://tilde.news/newest.rss "!" "~Tilde News" linux | |
| -https://hnrss.org/frontpage "!" "~Hacker News" linux | |
| # MEDIA | |
| https://showrss.info/other/all.rss "!" "~TV Torrents" media | |
| http://feed.rutracker.cc/atom/f/1992.atom "!" "~Linux Torrents" media | |
| +# PODCASTS | |
| +https://tilde.town/~dozens/podcast/rss.xml "!" "Tilde World Podcast" podcast | |
| # GAMING | |
| -https://boilingsteam.com/feed/ "!" "~Boiling Steam" gaming | |
| https://www.gamingonlinux.com/article_rss.php "!" "~Gaming On Linux" gaming | |
| # APPS | |
| @@ -43,6 +43,7 @@ https://www.uninformativ.de/blog/feeds/en.atom "!" "~Uninform… | |
| "exec:gemget capsule.usebox.net/gemlog/atom.xml --output -" "!" "~Juans Gemlog… | |
| "exec:gemget foobucket.xyz/gemlog/atom.xml --output -" "!" "~Foobucket Gemlog"… | |
| "exec:gemget midnight.pub/feed.xml --output -" "!" "~Midnight Pub" gemini | |
| +"exec:gemget gemini://warmedal.se/~antenna/atom.xml --output -" "!" "~Antenna"… | |
| # ODYSEE | |
| https://odysee.com/$/rss/@AlphaNerd:8 "!" "~Mental Outlaws" youtube | |
| @@ -76,7 +77,6 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCl7mAGnY… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UCpXwMqnXfJzazKS5fJ8nrVw "… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UCWm__g4cPmX-umorqM8VfWw "… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UCO8MMsO_XRjO7X4iGCuKdwg "… | |
| -https://www.youtube.com/feeds/videos.xml?channel_id=UCwMsZgvi4ok7l5hIml1SprA "… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UCmSwBBdhuJ39zaA437NaeXA "… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UCeKshd39k29Ipg9sWVaU3-Q "… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UCqRs-3IcoKCMGXsfLvOgTUg "… | |
| @@ -85,3 +85,6 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCPqdx8N9… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UCI3mQP0kLxdZKhNtcHhExyA "… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UCdVEfdWcNwL5jWmwaNWEf1Q "… | |
| https://www.youtube.com/feeds/videos.xml?channel_id=UC2O6HDtMOZf9FkUAepz9Atg "… | |
| +https://www.youtube.com/feeds/videos.xml?channel_id=UCdQ3VoDGjjl3NsfB3V0mPng "… | |
| +https://www.youtube.com/feeds/videos.xml?channel_id=UCpNBjjE8y8eFPhDU4YzYmKA "… | |
| +https://www.youtube.com/feeds/videos.xml?channel_id=UCs2Kaw3Soa63cJq3H0VA7og "… | |
| diff --git a/pkg/archlinux b/pkg/archlinux | |
| @@ -8,20 +8,22 @@ base | |
| bash-completion | |
| bc | |
| beets | |
| +bemenu | |
| binutils | |
| bison | |
| bluez-utils | |
| borg | |
| -calibre | |
| +brave-bin | |
| +campdown | |
| checkbashisms | |
| chrony | |
| cronie | |
| dhcpcd | |
| -edk2-shell | |
| efibootmgr | |
| fakeroot | |
| firefox | |
| flex | |
| +foot | |
| fzf | |
| gcc | |
| gdb | |
| @@ -41,6 +43,7 @@ isync | |
| iw | |
| iwd | |
| jq | |
| +keepass | |
| lf-bin | |
| lib32-alsa-lib | |
| lib32-alsa-plugins | |
| @@ -77,7 +80,6 @@ make | |
| man-db | |
| mpd | |
| mpv | |
| -mullvad-vpn-bin | |
| mupdf | |
| mutt | |
| ncmpcpp | |
| @@ -85,7 +87,6 @@ newsboat | |
| ntfs-3g | |
| ntp | |
| ocl-icd | |
| -ocrmypdf | |
| openssh | |
| openssl-1.0 | |
| pacman-contrib | |
| @@ -107,11 +108,12 @@ scrot | |
| shellcheck-bin | |
| shfmt | |
| sudo | |
| +sway | |
| sxiv | |
| terminus-font | |
| -tesseract-data-eng | |
| texinfo | |
| tiny-irc-client-bin | |
| +tmux | |
| ttf-hack | |
| ttf-liberation | |
| unrar | |
| @@ -121,18 +123,20 @@ usbutils | |
| vim | |
| vulkan-radeon | |
| w3m | |
| +waybar | |
| webkit2gtk | |
| wget | |
| which | |
| +wlsunset | |
| +wmutils-git | |
| wtwitch | |
| xcb-util-errors | |
| +xdg-ninja-git | |
| xf86-video-amdgpu | |
| -xorg-server | |
| xorg-server-common | |
| -xorg-xinit | |
| xorg-xset | |
| -xorg-xsetroot | |
| yt-dlp | |
| yt-dlp-drop-in | |
| ytfzf | |
| +zathura | |
| zip | |
| diff --git a/profile b/profile | |
| @@ -15,38 +15,39 @@ export XDG_DESKTOP_DIR="$HOME/" | |
| export PASSWORD_STORE_DIR="$XDG_CONFIG_HOME"/pass | |
| export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc | |
| export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority | |
| +export HISTFILE="${XDG_STATE_HOME}"/bash/history | |
| +export CARGO_HOME="$XDG_DATA_HOME"/cargo | |
| +alias wget=wget --hsts-file="$XDG_DATA_HOME/wget-hsts" | |
| -# common exports | |
| -GPG_TTY=$(tty) | |
| -export GPG_TTY | |
| - | |
| +# ps1 setup | |
| BOLD="\[$(tput bold)\]" | |
| RESET="\[$(tput sgr0)\]" | |
| export PS1="${BOLD}\w \$ ${RESET}" | |
| +# common exports | |
| +GPG_TTY=$(tty) | |
| +export GPG_TTY | |
| export EDITOR="vim" | |
| export BROWSER=firefox | |
| export GOPATH="$XDG_DATA_HOME"/go | |
| export GOPROXY=direct | |
| +export BEMENU_OPTS="-p '> ' --tb '#000000' --tf '#ffffff' --hf '#444444'" | |
| + | |
| # enable color support of common commands | |
| if [ -x /usr/bin/dircolors ]; then | |
| - alias ls='ls --color=auto' | |
| - alias grep='grep --color=auto' | |
| + alias ls='ls --color=auto' | |
| + alias grep='grep --color=auto' | |
| fi | |
| # safety first kids! | |
| alias cp='cp -i' | |
| alias mv='mv -i' | |
| alias rm='rm -i' | |
| -alias xclip='xclip -selection c' | |
| -alias x='startx "$XDG_CONFIG_HOME/X11/xinitrc"' | |
| # random alias | |
| -alias vcheck='curl https://am.i.mullvad.net/connected' | |
| +alias xclip='xclip -selection c' | |
| alias yt-mp3='youtube-dl --extract-audio --audio-format mp3' | |
| -alias voff='mullvad always-require-vpn set off; mullvad disconnect' | |
| -alias von='sudo systemctl restart mullvad-daemon.service && mullvad always-req… | |
| alias t='wtwitch' | |
| alias weather='curl wttr.in/?1QF' | |
| diff --git a/suckless/dmenu/Makefile b/suckless/dmenu/Makefile | |
| @@ -1,39 +0,0 @@ | |
| -REPOSITORY = http://git.suckless.org/dmenu | |
| -SRC_DIR = src | |
| -PINNED_REVISION = HEAD | |
| -PATCH_DIR = patches | |
| - | |
| -all: $(SRC_DIR) | |
| - | |
| -clean: reset | |
| - @if test -d $(SRC_DIR); then \ | |
| - $(MAKE) -C "${SRC_DIR}" -s clean; \ | |
| - git -C "${SRC_DIR}" clean -f; \ | |
| - fi | |
| - | |
| -$(SRC_DIR): clone reset | |
| - @cp config.h $@ | |
| - $(MAKE) -C "${SRC_DIR}" -s | |
| - | |
| -patch: $(PATCH_DIR)/* | |
| - @for file in $^ ; do \ | |
| - patch -d "${SRC_DIR}" < $${file}; \ | |
| - done | |
| -reset: | |
| - @if [ -n "$(strip $(PINNED_REVISION))" ]; then \ | |
| - git -C "${SRC_DIR}" reset --hard $(PINNED_REVISION); \ | |
| - fi | |
| - | |
| -clone: | |
| - @if ! test -d $(SRC_DIR); then \ | |
| - git clone $(REPOSITORY) $(SRC_DIR); \ | |
| - fi | |
| - | |
| -update: clean | |
| - @git -C "${SRC_DIR}" pull | |
| - | |
| -install: | |
| - $(MAKE) -C "${SRC_DIR}" -s install | |
| - | |
| - | |
| -.PHONY: all clean update install reset clone | |
| diff --git a/suckless/dmenu/config.h b/suckless/dmenu/config.h | |
| @@ -1,13 +0,0 @@ | |
| -static int topbar = 1; | |
| -static const char *fonts[] = { | |
| - "Hack:pixelsize=14" | |
| -}; | |
| -static const char *prompt = "run »"; | |
| -static const char *colors[SchemeLast][2] = { | |
| - [SchemeNorm] = { "#ffd7af", "#222222" }, | |
| - [SchemeSel] = { "#eeeeee", "#008000" }, | |
| - [SchemeOut] = { "#000000", "#00ffff" }, | |
| -}; | |
| - | |
| -static unsigned int lines = 0; | |
| -static const char worddelimiters[] = " "; | |
| diff --git a/suckless/dmenu/patches/01-dmenu-border-4.9.diff b/suckless/dmenu/p… | |
| @@ -1,25 +0,0 @@ | |
| -diff -up dmenu-4.9-b/config.def.h dmenu-4.9-a/config.def.h | |
| ---- dmenu-4.9-b/config.def.h 2019-02-02 13:55:02.000000000 +0100 | |
| -+++ dmenu-4.9-a/config.def.h 2019-05-19 02:10:12.740040403 +0200 | |
| -@@ -21,3 +21,6 @@ static unsigned int lines = 0; | |
| - * for example: " /?\"&[]" | |
| - */ | |
| - static const char worddelimiters[] = " "; | |
| -+ | |
| -+/* Size of the window border */ | |
| -+static const unsigned int border_width = 5; | |
| -diff -up dmenu-4.9-b/dmenu.c dmenu-4.9-a/dmenu.c | |
| ---- dmenu-4.9-b/dmenu.c 2019-02-02 13:55:02.000000000 +0100 | |
| -+++ dmenu-4.9-a/dmenu.c 2019-05-19 02:11:20.966710117 +0200 | |
| -@@ -654,9 +654,10 @@ setup(void) | |
| - swa.override_redirect = True; | |
| - swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; | |
| - swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; | |
| -- win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0, | |
| -+ win = XCreateWindow(dpy, parentwin, x, y, mw, mh, border_width, | |
| - CopyFromParent, CopyFromParent, CopyFromParent, | |
| - CWOverrideRedirect | CWBackPixel | CWEventMask, &… | |
| -+ XSetWindowBorder(dpy, win, scheme[SchemeSel][ColBg].pixel); | |
| - XSetClassHint(dpy, win, &ch); | |
| - | |
| - /* open input methods */ | |
| diff --git a/suckless/dmenu/patches/02-dmenu-center-20200111-8cd37e1.diff b/suc… | |
| @@ -1,120 +0,0 @@ | |
| -From 8cd37e1ab9e7cb025224aeb3543f1a5be8bceb93 Mon Sep 17 00:00:00 2001 | |
| -From: Nihal Jere <[email protected]> | |
| -Date: Sat, 11 Jan 2020 21:16:08 -0600 | |
| -Subject: [PATCH] center patch now has adjustable minimum width | |
| - | |
| ---- | |
| - config.def.h | 2 ++ | |
| - dmenu.1 | 3 +++ | |
| - dmenu.c | 39 ++++++++++++++++++++++++++++++++------- | |
| - 3 files changed, 37 insertions(+), 7 deletions(-) | |
| - | |
| -diff --git a/config.def.h b/config.def.h | |
| -index 1edb647..88ef264 100644 | |
| ---- a/config.def.h | |
| -+++ b/config.def.h | |
| -@@ -2,6 +2,8 @@ | |
| - /* Default settings; can be overriden by command line. */ | |
| - | |
| - static int topbar = 1; /* -b option; if 0, dmenu appear… | |
| -+static int centered = 0; /* -c option; centers dmenu on sc… | |
| -+static int min_width = 500; /* minimum width when centered… | |
| - /* -fn option overrides fonts[0]; default X11 font or font set */ | |
| - static const char *fonts[] = { | |
| - "monospace:size=10" | |
| -diff --git a/dmenu.1 b/dmenu.1 | |
| -index 323f93c..c036baa 100644 | |
| ---- a/dmenu.1 | |
| -+++ b/dmenu.1 | |
| -@@ -40,6 +40,9 @@ which lists programs in the user's $PATH and runs the result… | |
| - .B \-b | |
| - dmenu appears at the bottom of the screen. | |
| - .TP | |
| -+.B \-c | |
| -+dmenu appears centered on the screen. | |
| -+.TP | |
| - .B \-f | |
| - dmenu grabs the keyboard before reading stdin if not reading from a tty. This | |
| - is faster, but will lock up X until stdin reaches end\-of\-file. | |
| -diff --git a/dmenu.c b/dmenu.c | |
| -index 65f25ce..041c7f8 100644 | |
| ---- a/dmenu.c | |
| -+++ b/dmenu.c | |
| -@@ -89,6 +89,15 @@ calcoffsets(void) | |
| - break; | |
| - } | |
| - | |
| -+static int | |
| -+max_textw(void) | |
| -+{ | |
| -+ int len = 0; | |
| -+ for (struct item *item = items; item && item->text; item++) | |
| -+ len = MAX(TEXTW(item->text), len); | |
| -+ return len; | |
| -+} | |
| -+ | |
| - static void | |
| - cleanup(void) | |
| - { | |
| -@@ -611,6 +620,7 @@ setup(void) | |
| - bh = drw->fonts->h + 2; | |
| - lines = MAX(lines, 0); | |
| - mh = (lines + 1) * bh; | |
| -+ promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0; | |
| - #ifdef XINERAMA | |
| - i = 0; | |
| - if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) { | |
| -@@ -637,9 +647,16 @@ setup(void) | |
| - if (INTERSECT(x, y, 1, 1, info[i])) | |
| - break; | |
| - | |
| -- x = info[i].x_org; | |
| -- y = info[i].y_org + (topbar ? 0 : info[i].height - mh); | |
| -- mw = info[i].width; | |
| -+ if (centered) { | |
| -+ mw = MIN(MAX(max_textw() + promptw, min_width), info[… | |
| -+ x = info[i].x_org + ((info[i].width - mw) / 2); | |
| -+ y = info[i].y_org + ((info[i].height - mh) / 2); | |
| -+ } else { | |
| -+ x = info[i].x_org; | |
| -+ y = info[i].y_org + (topbar ? 0 : info[i].height - mh… | |
| -+ mw = info[i].width; | |
| -+ } | |
| -+ | |
| - XFree(info); | |
| - } else | |
| - #endif | |
| -@@ -647,11 +664,17 @@ setup(void) | |
| - if (!XGetWindowAttributes(dpy, parentwin, &wa)) | |
| - die("could not get embedding window attributes: 0x%lx… | |
| - parentwin); | |
| -- x = 0; | |
| -- y = topbar ? 0 : wa.height - mh; | |
| -- mw = wa.width; | |
| -+ | |
| -+ if (centered) { | |
| -+ mw = MIN(MAX(max_textw() + promptw, min_width), wa.wi… | |
| -+ x = (wa.width - mw) / 2; | |
| -+ y = (wa.height - mh) / 2; | |
| -+ } else { | |
| -+ x = 0; | |
| -+ y = topbar ? 0 : wa.height - mh; | |
| -+ mw = wa.width; | |
| -+ } | |
| - } | |
| -- promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0; | |
| - inputw = MIN(inputw, mw/3); | |
| - match(); | |
| - | |
| -@@ -709,6 +732,8 @@ main(int argc, char *argv[]) | |
| - topbar = 0; | |
| - else if (!strcmp(argv[i], "-f")) /* grabs keyboard before r… | |
| - fast = 1; | |
| -+ else if (!strcmp(argv[i], "-c")) /* centers dmenu on screen… | |
| -+ centered = 1; | |
| - else if (!strcmp(argv[i], "-i")) { /* case-insensitive item m… | |
| - fstrncmp = strncasecmp; | |
| - fstrstr = cistrstr; | |
| --- | |
| -2.24.1 | |
| - | |
| diff --git a/suckless/dwm/Makefile b/suckless/dwm/Makefile | |
| @@ -1,35 +0,0 @@ | |
| -REPOSITORY = http://git.suckless.org/dwm | |
| -SRC_DIR = src | |
| -PINNED_REVISION = HEAD | |
| - | |
| -all: $(SRC_DIR) | |
| - | |
| -clean: reset | |
| - @if test -d $(SRC_DIR); then \ | |
| - cd $(SRC_DIR); \ | |
| - $(MAKE) -s clean; \ | |
| - git clean -f; \ | |
| - fi | |
| - | |
| -$(SRC_DIR): clone reset | |
| - @cp config.h $@ | |
| - @cd $@ && $(MAKE) -s | |
| - | |
| -reset: | |
| - @if [ -n "$(strip $(PINNED_REVISION))" ]; then \ | |
| - cd $(SRC_DIR) && git reset --hard $(PINNED_REVISION); \ | |
| - fi | |
| - | |
| -clone: | |
| - @if ! test -d $(SRC_DIR); then \ | |
| - git clone $(REPOSITORY) $(SRC_DIR); \ | |
| - fi | |
| - | |
| -update: clean | |
| - @cd $(SRC_DIR) && git pull | |
| - | |
| -install: | |
| - $(MAKE) -C "${SRC_DIR}" -s install | |
| - | |
| - | |
| -.PHONY: all clean update install reset clone | |
| diff --git a/suckless/dwm/config.h b/suckless/dwm/config.h | |
| @@ -1,195 +0,0 @@ | |
| -/* See LICENSE file for copyright and license details. */ | |
| - | |
| -/* appearance */ | |
| -static const unsigned int borderpx = 2; | |
| -static const unsigned int snap = 32; | |
| -static const int lockfullscreen = 1; | |
| -static const int showbar = 1; | |
| -static const int topbar = 1; | |
| -static const char *fonts[] = { "Hack:size=10" }; | |
| -static const char dmenufont[] = "Hack:size=10"; | |
| -static const char col_gray1[] = "#222222"; | |
| -static const char col_gray2[] = "#444444"; | |
| -static const char col_gray3[] = "#bbbbbb"; | |
| -static const char col_gray4[] = "#eeeeee"; | |
| -static const char col_cyan[] = "#222222"; | |
| -static const char *colors[][3] = { | |
| - /* fg bg border */ | |
| - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, | |
| - [SchemeSel] = { col_gray4, col_cyan, col_cyan }, | |
| -}; | |
| - | |
| - | |
| -/* custom functions */ | |
| -static void togglefullscreen(const Arg *arg); | |
| -static void bstack(Monitor *m); | |
| -static void centeredfloatingmaster(Monitor *m); | |
| - | |
| -/* custom defines for mouse buttons */ | |
| -/* only 1-5 are defined in X11/X.h */ | |
| -#define Button8 8 | |
| -#define Button9 9 | |
| - | |
| -/* tagging */ | |
| -static const char *tags[] = { "1", "2", "3", "4", "5" }; | |
| - | |
| -static Rule rules[] = { | |
| - /* class instance title tags mask isfloating monit… | |
| - { NULL, NULL, NULL, 0, False, -1 }, | |
| -}; | |
| - | |
| -/* layout(s) */ | |
| -static const float mfact = 0.65; | |
| -static const int nmaster = 1; | |
| -static const int resizehints = 0; | |
| - | |
| -static const Layout layouts[] = { | |
| - { ">M>", centeredfloatingmaster }, | |
| - { "[]=", tile }, | |
| - { "TTT", bstack }, | |
| - { "><>", NULL }, | |
| -}; | |
| - | |
| -#define MODKEY Mod1Mask | |
| -#define TAGKEYS(KEY,TAG) \ | |
| -{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \ | |
| -{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ | |
| -{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ | |
| -{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, | |
| - | |
| -#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } | |
| - | |
| -/* commands */ | |
| -static char dmenumon[2] = "0"; | |
| -static const char *dmenucmd[] = { "dmenu_run", NULL }; | |
| -static const char *termcmd[] = { "st", NULL }; | |
| -static const char *webcmd[] = { "firefox", NULL }; | |
| -static const char *ytcmd[] = { "ytfzf", "-D", NULL }; | |
| -static const char *gamecmd[] = { "/home/jay/bin/game_select.sh", NULL }; | |
| -static const char *volup[] = { "amixer", "set", "Master", "10%+", NULL }; | |
| -static const char *voldown[] = { "amixer", "set", "Master", "10%-", NULL }; | |
| - | |
| - | |
| -static Key keys[] = { | |
| - /* modifier key function argument */ | |
| - { MODKEY, XK_p, spawn, {.v = dmenu… | |
| - { MODKEY, XK_space, spawn, {.v = termc… | |
| - { MODKEY, XK_f, spawn, {.v = webcm… | |
| - { MODKEY, XK_y, spawn, {.v = ytcmd… | |
| - { MODKEY, XK_g, spawn, {.v = gamec… | |
| - { MODKEY, XK_u, spawn, {.v = volup… | |
| - { MODKEY, XK_d, spawn, {.v = voldo… | |
| - { MODKEY, XK_j, focusstack, {.i = +1 } … | |
| - { MODKEY, XK_k, focusstack, {.i = -1 } … | |
| - { MODKEY, XK_h, setmfact, {.f = -0.05… | |
| - { MODKEY, XK_l, setmfact, {.f = +0.05… | |
| - { MODKEY, XK_Return, zoom, {0} }, | |
| - { MODKEY, XK_Tab, view, {0} }, | |
| - { MODKEY, XK_c, killclient, {0} }, | |
| - { MODKEY, XK_m, togglefullscreen, {0} }, | |
| - { MODKEY, XK_period, focusmon, {.i = +1 } … | |
| - { MODKEY, XK_comma, tagmon, {.i = +1 }… | |
| - { MODKEY, XK_b, togglebar, {0} }, | |
| - { MODKEY, XK_x, setlayout, {.v = &layo… | |
| - { MODKEY|ShiftMask, XK_x, setlayout, {.v = &layo… | |
| - TAGKEYS( XK_1, 0) | |
| - TAGKEYS( XK_2, 1) | |
| - TAGKEYS( XK_3, 2) | |
| - TAGKEYS( XK_4, 3) | |
| - TAGKEYS( XK_5, 4) | |
| - { MODKEY|ShiftMask, XK_q, quit, {0} }, | |
| -}; | |
| - | |
| -/* button definitions */ | |
| -static Button buttons[] = { | |
| - { ClkRootWin, 0, Button8, spawn, … | |
| - { ClkRootWin, 0, Button9, spawn, … | |
| - }; | |
| - | |
| -void | |
| -togglefullscreen(const Arg *arg) | |
| -{ | |
| - if (!selmon->sel) | |
| - return; | |
| - setfullscreen(selmon->sel, !selmon->sel->isfullscreen); | |
| -} | |
| - | |
| -static void | |
| -bstack(Monitor *m) { | |
| - int w, h, mh, mx, tx, ty, tw; | |
| - unsigned int i, n; | |
| - Client *c; | |
| - | |
| - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); | |
| - if (n == 0) | |
| - return; | |
| - if (n > m->nmaster) { | |
| - mh = m->nmaster ? m->mfact * m->wh : 0; | |
| - tw = m->ww / (n - m->nmaster); | |
| - ty = m->wy + mh; | |
| - } else { | |
| - mh = m->wh; | |
| - tw = m->ww; | |
| - ty = m->wy; | |
| - } | |
| - for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttil… | |
| - if (i < m->nmaster) { | |
| - w = (m->ww - mx) / (MIN(n, m->nmaster) - i); | |
| - resize(c, m->wx + mx, m->wy, w - (2 * c->bw), mh - (2 … | |
| - mx += WIDTH(c); | |
| - } else { | |
| - h = m->wh - mh; | |
| - resize(c, tx, ty, tw - (2 * c->bw), h - (2 * c->bw), 0… | |
| - if (tw != m->ww) | |
| - tx += WIDTH(c); | |
| - } | |
| - } | |
| -} | |
| - | |
| -void | |
| -centeredfloatingmaster(Monitor *m) | |
| -{ | |
| - unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx; | |
| - Client *c; | |
| - | |
| - /* count number of clients in the selected monitor */ | |
| - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); | |
| - if (n == 0) | |
| - return; | |
| - | |
| - /* initialize nmaster area */ | |
| - if (n > m->nmaster) { | |
| - /* go mfact box in the center if more than nmaster clients */ | |
| - if (m->ww > m->wh) { | |
| - mw = m->nmaster ? m->ww * m->mfact : 0; | |
| - mh = m->nmaster ? m->wh * 0.9 : 0; | |
| - } else { | |
| - mh = m->nmaster ? m->wh * m->mfact : 0; | |
| - mw = m->nmaster ? m->ww * 0.9 : 0; | |
| - } | |
| - mx = mxo = (m->ww - mw) / 2; | |
| - my = myo = (m->wh - mh) / 2; | |
| - } else { | |
| - /* go fullscreen if all clients are in the master area */ | |
| - mh = m->wh; | |
| - mw = m->ww; | |
| - mx = mxo = 0; | |
| - my = myo = 0; | |
| - } | |
| - | |
| - for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), … | |
| - if (i < m->nmaster) { | |
| - /* nmaster clients are stacked horizontally, in the center | |
| - * of the screen */ | |
| - w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i); | |
| - resize(c, m->wx + mx, m->wy + my, w - (2*c->bw), | |
| - mh - (2*c->bw), 0); | |
| - mx += WIDTH(c); | |
| - } else { | |
| - /* stack clients are stacked horizontally */ | |
| - w = (m->ww - tx) / (n - i); | |
| - resize(c, m->wx + tx, m->wy, w - (2*c->bw), | |
| - m->wh - (2*c->bw), 0); | |
| - tx += WIDTH(c); | |
| - } | |
| -} | |
| diff --git a/suckless/herbe/Makefile b/suckless/herbe/Makefile | |
| @@ -1,40 +0,0 @@ | |
| -REPOSITORY = https://github.com/dudik/herbe.git | |
| -SRC_DIR = src | |
| -PINNED_REVISION = HEAD | |
| -PATCH_DIR = patches | |
| - | |
| -all: $(SRC_DIR) | |
| - | |
| -clean: reset | |
| - @if test -d $(SRC_DIR); then \ | |
| - $(MAKE) -C "${SRC_DIR}" -s clean; \ | |
| - git -C "${SRC_DIR}" clean -f; \ | |
| - fi | |
| - | |
| -$(SRC_DIR): clone reset | |
| - @cp config.h $@ | |
| - $(MAKE) -C "${SRC_DIR}" -s | |
| - | |
| -reset: | |
| - @if [ -n "$(strip $(PINNED_REVISION))" ]; then \ | |
| - git -C "${SRC_DIR}" reset --hard $(PINNED_REVISION); \ | |
| - fi | |
| - | |
| -patch: $(PATCH_DIR)/* | |
| - @for file in $^ ; do \ | |
| - patch -d "${SRC_DIR}" < $${file}; \ | |
| - done | |
| - | |
| -clone: | |
| - @if ! test -d $(SRC_DIR); then \ | |
| - git clone $(REPOSITORY) $(SRC_DIR); \ | |
| - fi | |
| - | |
| -update: clean | |
| - @git -C "${SRC_DIR}" pull | |
| - | |
| -install: | |
| - $(MAKE) -C "${SRC_DIR}" -s install | |
| - | |
| - | |
| -.PHONY: all clean update install reset clone | |
| diff --git a/suckless/herbe/config.h b/suckless/herbe/config.h | |
| @@ -1,19 +0,0 @@ | |
| -static const char *background_color = "#222222"; | |
| -static const char *border_color = "#008000"; | |
| -static const char *font_color = "#ffd7af"; | |
| -static const char *font_pattern = "Hack:pixelsize=12"; | |
| -static unsigned line_spacing = 5; | |
| -static unsigned int padding = 12; | |
| - | |
| -static unsigned int width = 300; | |
| -static unsigned int border_size = 3; | |
| -static unsigned int pos_x = 30; | |
| -static unsigned int pos_y = 60; | |
| - | |
| -enum corners { TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT }; | |
| -enum corners corner = TOP_RIGHT; | |
| - | |
| -static unsigned int duration = 5; /* in seconds */ | |
| - | |
| -#define DISMISS_BUTTON Button1 | |
| -#define ACTION_BUTTON Button3 | |
| diff --git a/suckless/st/Makefile b/suckless/st/Makefile | |
| @@ -1,39 +0,0 @@ | |
| -REPOSITORY = http://git.suckless.org/st | |
| -SRC_DIR = src | |
| -PINNED_REVISION = HEAD | |
| -PATCH_DIR = patches | |
| - | |
| -all: $(SRC_DIR) | |
| - | |
| -clean: reset | |
| - @if test -d $(SRC_DIR); then \ | |
| - $(MAKE) -C "${SRC_DIR}" -s clean; \ | |
| - git -C "${SRC_DIR}" clean -f; \ | |
| - fi | |
| - | |
| -$(SRC_DIR): clone reset patch | |
| - @cp config.h $@ | |
| - $(MAKE) -C "${SRC_DIR}" -s | |
| - | |
| -patch: $(PATCH_DIR)/* | |
| - @for file in $^ ; do \ | |
| - patch -d "${SRC_DIR}" < $${file}; \ | |
| - done | |
| -reset: | |
| - @if [ -n "$(strip $(PINNED_REVISION))" ]; then \ | |
| - git -C "${SRC_DIR}" reset --hard $(PINNED_REVISION); \ | |
| - fi | |
| - | |
| -clone: | |
| - @if ! test -d $(SRC_DIR); then \ | |
| - git clone $(REPOSITORY) $(SRC_DIR); \ | |
| - fi | |
| - | |
| -update: clean | |
| - @git -C "${SRC_DIR}" pull | |
| - | |
| -install: | |
| - $(MAKE) -C "${SRC_DIR}" -s install | |
| - | |
| - | |
| -.PHONY: all clean update install reset clone | |
| diff --git a/suckless/st/config.h b/suckless/st/config.h | |
| @@ -1,476 +0,0 @@ | |
| -/* See LICENSE file for copyright and license details. */ | |
| - | |
| -/* | |
| - * appearance | |
| - * | |
| - * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html | |
| - */ | |
| -static char *font = "Liberation Mono:pixelsize=18:antialias=true:autohint=true… | |
| -static int borderpx = 2; | |
| - | |
| -/* | |
| - * What program is execed by st depends of these precedence rules: | |
| - * 1: program passed with -e | |
| - * 2: scroll and/or utmp | |
| - * 3: SHELL environment variable | |
| - * 4: value of shell in /etc/passwd | |
| - * 5: value of shell in config.h | |
| - */ | |
| -static char *shell = "/bin/sh"; | |
| -char *utmp = NULL; | |
| -/* scroll program: to enable use a string like "scroll" */ | |
| -char *scroll = NULL; | |
| -char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; | |
| - | |
| -/* identification sequence returned in DA and DECID */ | |
| -char *vtiden = "\033[?6c"; | |
| - | |
| -/* Kerning / character bounding-box multipliers */ | |
| -static float cwscale = 1.0; | |
| -static float chscale = 1.0; | |
| - | |
| -/* | |
| - * word delimiter string | |
| - * | |
| - * More advanced example: L" `'\"()[]{}" | |
| - */ | |
| -wchar_t *worddelimiters = L" "; | |
| - | |
| -/* selection timeouts (in milliseconds) */ | |
| -static unsigned int doubleclicktimeout = 300; | |
| -static unsigned int tripleclicktimeout = 600; | |
| - | |
| -/* alt screens */ | |
| -int allowaltscreen = 1; | |
| - | |
| -/* allow certain non-interactive (insecure) window operations such as: | |
| - setting the clipboard text */ | |
| -int allowwindowops = 0; | |
| - | |
| -/* | |
| - * draw latency range in ms - from new content/keypress/etc until drawing. | |
| - * within this range, st draws when content stops arriving (idle). mostly it's | |
| - * near minlatency, but it waits longer for slow updates to avoid partial draw. | |
| - * low minlatency will tear/flicker more, as it can "detect" idle too early. | |
| - */ | |
| -static double minlatency = 8; | |
| -static double maxlatency = 33; | |
| - | |
| -/* | |
| - * blinking timeout (set to 0 to disable blinking) for the terminal blinking | |
| - * attribute. | |
| - */ | |
| -static unsigned int blinktimeout = 800; | |
| - | |
| -/* | |
| - * thickness of underline and bar cursors | |
| - */ | |
| -static unsigned int cursorthickness = 2; | |
| - | |
| -/* | |
| - * bell volume. It must be a value between -100 and 100. Use 0 for disabling | |
| - * it | |
| - */ | |
| -static int bellvolume = 0; | |
| - | |
| -/* default TERM value */ | |
| -char *termname = "st-256color"; | |
| - | |
| -/* | |
| - * spaces per tab | |
| - * | |
| - * When you are changing this value, don't forget to adapt the »it« value in | |
| - * the st.info and appropriately install the st.info in the environment where | |
| - * you use this st version. | |
| - * | |
| - * it#$tabspaces, | |
| - * | |
| - * Secondly make sure your kernel is not expanding tabs. When running `stty | |
| - * -a` »tab0« should appear. You can tell the terminal to not expand tabs by | |
| - * running following command: | |
| - * | |
| - * stty tabs | |
| - */ | |
| -unsigned int tabspaces = 8; | |
| - | |
| -/* Terminal colors (16 first used in escape sequence) */ | |
| -static const char *colorname[] = { | |
| - /* 8 normal colors */ | |
| - "black", | |
| - "red3", | |
| - "green3", | |
| - "yellow3", | |
| - "blue2", | |
| - "magenta3", | |
| - "cyan3", | |
| - "gray90", | |
| - | |
| - /* 8 bright colors */ | |
| - "gray50", | |
| - "red", | |
| - "green", | |
| - "yellow", | |
| - "#5c5cff", | |
| - "magenta", | |
| - "cyan", | |
| - "white", | |
| - | |
| - [255] = 0, | |
| - | |
| - /* more colors can be added after 255 to use with DefaultXX */ | |
| - "#cccccc", | |
| - "#555555", | |
| - "gray90", /* default foreground colour */ | |
| - "black", /* default background colour */ | |
| -}; | |
| - | |
| - | |
| -/* | |
| - * Default colors (colorname index) | |
| - * foreground, background, cursor, reverse cursor | |
| - */ | |
| -unsigned int defaultfg = 258; | |
| -unsigned int defaultbg = 259; | |
| -unsigned int defaultcs = 256; | |
| -static unsigned int defaultrcs = 257; | |
| - | |
| -/* | |
| - * Default shape of cursor | |
| - * 2: Block ("█") | |
| - * 4: Underline ("_") | |
| - * 6: Bar ("|") | |
| - * 7: Snowman ("☃") | |
| - */ | |
| -static unsigned int cursorshape = 2; | |
| - | |
| -/* | |
| - * Default columns and rows numbers | |
| - */ | |
| - | |
| -static unsigned int cols = 80; | |
| -static unsigned int rows = 24; | |
| - | |
| -/* | |
| - * Default colour and shape of the mouse cursor | |
| - */ | |
| -static unsigned int mouseshape = XC_xterm; | |
| -static unsigned int mousefg = 7; | |
| -static unsigned int mousebg = 0; | |
| - | |
| -/* | |
| - * Color used to display font attributes when fontconfig selected a font which | |
| - * doesn't match the ones requested. | |
| - */ | |
| -static unsigned int defaultattr = 11; | |
| - | |
| -/* | |
| - * Force mouse select/shortcuts while mask is active (when MODE_MOUSE is set). | |
| - * Note that if you want to use ShiftMask with selmasks, set this to an other | |
| - * modifier, set to 0 to not use it. | |
| - */ | |
| -static uint forcemousemod = ShiftMask; | |
| - | |
| -/* | |
| - * Internal mouse shortcuts. | |
| - * Beware that overloading Button1 will disable the selection. | |
| - */ | |
| -static MouseShortcut mshortcuts[] = { | |
| - /* mask button function argument releas… | |
| - { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, | |
| - { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, | |
| - { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, | |
| - { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, | |
| - { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, | |
| -}; | |
| - | |
| -/* Internal keyboard shortcuts. */ | |
| -#define MODKEY Mod1Mask | |
| -#define TERMMOD (ControlMask|ShiftMask) | |
| - | |
| -static Shortcut shortcuts[] = { | |
| - /* mask keysym function argument */ | |
| - { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, | |
| - { ControlMask, XK_Print, toggleprinter, {.i = 0} }, | |
| - { ShiftMask, XK_Print, printscreen, {.i = 0} }, | |
| - { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, | |
| - { TERMMOD, XK_Prior, zoom, {.f = +1} }, | |
| - { TERMMOD, XK_Next, zoom, {.f = -1} }, | |
| - { TERMMOD, XK_Home, zoomreset, {.f = 0} }, | |
| - { TERMMOD, XK_C, clipcopy, {.i = 0} }, | |
| - { TERMMOD, XK_V, clippaste, {.i = 0} }, | |
| - { TERMMOD, XK_Y, selpaste, {.i = 0} }, | |
| - { ShiftMask, XK_Insert, selpaste, {.i = 0} }, | |
| - { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, | |
| - { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, | |
| - { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, | |
| -}; | |
| - | |
| -/* | |
| - * Special keys (change & recompile st.info accordingly) | |
| - * | |
| - * Mask value: | |
| - * * Use XK_ANY_MOD to match the key no matter modifiers state | |
| - * * Use XK_NO_MOD to match the key alone (no modifiers) | |
| - * appkey value: | |
| - * * 0: no value | |
| - * * > 0: keypad application mode enabled | |
| - * * = 2: term.numlock = 1 | |
| - * * < 0: keypad application mode disabled | |
| - * appcursor value: | |
| - * * 0: no value | |
| - * * > 0: cursor application mode enabled | |
| - * * < 0: cursor application mode disabled | |
| - * | |
| - * Be careful with the order of the definitions because st searches in | |
| - * this table sequentially, so any XK_ANY_MOD must be in the last | |
| - * position for a key. | |
| - */ | |
| - | |
| -/* | |
| - * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF) | |
| - * to be mapped below, add them to this array. | |
| - */ | |
| -static KeySym mappedkeys[] = { -1 }; | |
| - | |
| -/* | |
| - * State bits to ignore when matching key or button events. By default, | |
| - * numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored. | |
| - */ | |
| -static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; | |
| - | |
| -/* | |
| - * This is the huge key array which defines all compatibility to the Linux | |
| - * world. Please decide about changes wisely. | |
| - */ | |
| -static Key key[] = { | |
| - /* keysym mask string appkey appcursor */ | |
| - { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, | |
| - { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, | |
| - { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, | |
| - { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, | |
| - { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, | |
| - { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, | |
| - { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, | |
| - { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, | |
| - { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, | |
| - { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, | |
| - { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, | |
| - { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, | |
| - { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, | |
| - { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, | |
| - { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, | |
| - { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, | |
| - { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, | |
| - { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, | |
| - { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, | |
| - { XK_KP_End, ControlMask, "\033[J", -1, 0}, | |
| - { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, | |
| - { XK_KP_End, ShiftMask, "\033[K", -1, 0}, | |
| - { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, | |
| - { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, | |
| - { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, | |
| - { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, | |
| - { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, | |
| - { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, | |
| - { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, | |
| - { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, | |
| - { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, | |
| - { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, | |
| - { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, | |
| - { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, | |
| - { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, | |
| - { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, | |
| - { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, | |
| - { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, | |
| - { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, | |
| - { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, | |
| - { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, | |
| - { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, | |
| - { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, | |
| - { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, | |
| - { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, | |
| - { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, | |
| - { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, | |
| - { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, | |
| - { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, | |
| - { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, | |
| - { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, | |
| - { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, | |
| - { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, | |
| - { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, | |
| - { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, | |
| - { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, | |
| - { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, | |
| - { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0}, | |
| - { XK_Up, ControlMask, "\033[1;5A", 0, 0}, | |
| - { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0}, | |
| - { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0}, | |
| - { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0}, | |
| - { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, | |
| - { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, | |
| - { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, | |
| - { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, | |
| - { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0}, | |
| - { XK_Down, ControlMask, "\033[1;5B", 0, 0}, | |
| - { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0}, | |
| - { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0}, | |
| - { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0}, | |
| - { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, | |
| - { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, | |
| - { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, | |
| - { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, | |
| - { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0}, | |
| - { XK_Left, ControlMask, "\033[1;5D", 0, 0}, | |
| - { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0}, | |
| - { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0}, | |
| - { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0}, | |
| - { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, | |
| - { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, | |
| - { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, | |
| - { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, | |
| - { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0}, | |
| - { XK_Right, ControlMask, "\033[1;5C", 0, 0}, | |
| - { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0}, | |
| - { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0}, | |
| - { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0}, | |
| - { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, | |
| - { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, | |
| - { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, | |
| - { XK_Return, Mod1Mask, "\033\r", 0, 0}, | |
| - { XK_Return, XK_ANY_MOD, "\r", 0, 0}, | |
| - { XK_Insert, ShiftMask, "\033[4l", -1, 0}, | |
| - { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, | |
| - { XK_Insert, ControlMask, "\033[L", -1, 0}, | |
| - { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, | |
| - { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, | |
| - { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, | |
| - { XK_Delete, ControlMask, "\033[M", -1, 0}, | |
| - { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, | |
| - { XK_Delete, ShiftMask, "\033[2K", -1, 0}, | |
| - { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, | |
| - { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, | |
| - { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, | |
| - { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, | |
| - { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, | |
| - { XK_Home, ShiftMask, "\033[2J", 0, -1}, | |
| - { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, | |
| - { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, | |
| - { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, | |
| - { XK_End, ControlMask, "\033[J", -1, 0}, | |
| - { XK_End, ControlMask, "\033[1;5F", +1, 0}, | |
| - { XK_End, ShiftMask, "\033[K", -1, 0}, | |
| - { XK_End, ShiftMask, "\033[1;2F", +1, 0}, | |
| - { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, | |
| - { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, | |
| - { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, | |
| - { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, | |
| - { XK_Next, ControlMask, "\033[6;5~", 0, 0}, | |
| - { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, | |
| - { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, | |
| - { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, | |
| - { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, | |
| - { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, | |
| - { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, | |
| - { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, | |
| - { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, | |
| - { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, | |
| - { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, | |
| - { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, | |
| - { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, | |
| - { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, | |
| - { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, | |
| - { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, | |
| - { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, | |
| - { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, | |
| - { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, | |
| - { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, | |
| - { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, | |
| - { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, | |
| - { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, | |
| - { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, | |
| - { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, | |
| - { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, | |
| - { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, | |
| - { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, | |
| - { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, | |
| - { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, | |
| - { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, | |
| - { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, | |
| - { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, | |
| - { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, | |
| - { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, | |
| - { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, | |
| - { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, | |
| - { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, | |
| - { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, | |
| - { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, | |
| - { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, | |
| - { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, | |
| - { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, | |
| - { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, | |
| - { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, | |
| - { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, | |
| - { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, | |
| - { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, | |
| - { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, | |
| - { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, | |
| - { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, | |
| - { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, | |
| - { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, | |
| - { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, | |
| - { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, | |
| - { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, | |
| - { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, | |
| - { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, | |
| - { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, | |
| - { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, | |
| - { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, | |
| - { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, | |
| - { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, | |
| - { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, | |
| - { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, | |
| - { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, | |
| - { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, | |
| - { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, | |
| - { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, | |
| - { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, | |
| - { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, | |
| - { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, | |
| - { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, | |
| - { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, | |
| - { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, | |
| - { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, | |
| - { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, | |
| - { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, | |
| - { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, | |
| - { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, | |
| - { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, | |
| - { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, | |
| - { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, | |
| - { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, | |
| - { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, | |
| - { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, | |
| - { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, | |
| - { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, | |
| - { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, | |
| -}; | |
| - | |
| -/* | |
| - * Selection types' masks. | |
| - * Use the same masks as usual. | |
| - * Button1Mask is always unset, to make masks match between ButtonPress. | |
| - * ButtonRelease and MotionNotify. | |
| - * If no match is found, regular selection is used. | |
| - */ | |
| -static uint selmasks[] = { | |
| - [SEL_RECTANGULAR] = Mod1Mask, | |
| -}; | |
| - | |
| -/* | |
| - * Printable characters in ASCII, used to estimate the advance width | |
| - * of single wide characters. | |
| - */ | |
| -static char ascii_printable[] = | |
| - " !\"#$%&'()*+,-./0123456789:;<=>?" | |
| - "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" | |
| - "`abcdefghijklmnopqrstuvwxyz{|}~"; | |
| diff --git a/suckless/st/patches/01-st-scrollback-20210507-4536f46.diff b/suckl… | |
| @@ -1,351 +0,0 @@ | |
| -diff --git a/config.def.h b/config.def.h | |
| -index 6f05dce..93cbcc0 100644 | |
| ---- a/config.def.h | |
| -+++ b/config.def.h | |
| -@@ -199,6 +199,8 @@ static Shortcut shortcuts[] = { | |
| - { TERMMOD, XK_Y, selpaste, {.i = 0} }, | |
| - { ShiftMask, XK_Insert, selpaste, {.i = 0} }, | |
| - { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, | |
| -+ { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, | |
| -+ { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, | |
| - }; | |
| - | |
| - /* | |
| -diff --git a/st.c b/st.c | |
| -index ebdf360..817cc47 100644 | |
| ---- a/st.c | |
| -+++ b/st.c | |
| -@@ -35,6 +35,7 @@ | |
| - #define ESC_ARG_SIZ 16 | |
| - #define STR_BUF_SIZ ESC_BUF_SIZ | |
| - #define STR_ARG_SIZ ESC_ARG_SIZ | |
| -+#define HISTSIZE 2000 | |
| - | |
| - /* macros */ | |
| - #define IS_SET(flag) ((term.mode & (flag)) != 0) | |
| -@@ -42,6 +43,9 @@ | |
| - #define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f)) | |
| - #define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c)) | |
| - #define ISDELIM(u) (u && wcschr(worddelimiters, u)) | |
| -+#define TLINE(y) ((y) < term.scr ? term.hist[((y) + term.histi… | |
| -+ term.scr + HISTSIZE + 1) % HISTSIZE] : \ | |
| -+ term.line[(y) - term.scr]) | |
| - | |
| - enum term_mode { | |
| - MODE_WRAP = 1 << 0, | |
| -@@ -115,6 +119,9 @@ typedef struct { | |
| - int col; /* nb col */ | |
| - Line *line; /* screen */ | |
| - Line *alt; /* alternate screen */ | |
| -+ Line hist[HISTSIZE]; /* history buffer */ | |
| -+ int histi; /* history index */ | |
| -+ int scr; /* scroll back */ | |
| - int *dirty; /* dirtyness of lines */ | |
| - TCursor c; /* cursor */ | |
| - int ocx; /* old cursor col */ | |
| -@@ -184,8 +191,8 @@ static void tnewline(int); | |
| - static void tputtab(int); | |
| - static void tputc(Rune); | |
| - static void treset(void); | |
| --static void tscrollup(int, int); | |
| --static void tscrolldown(int, int); | |
| -+static void tscrollup(int, int, int); | |
| -+static void tscrolldown(int, int, int); | |
| - static void tsetattr(const int *, int); | |
| - static void tsetchar(Rune, const Glyph *, int, int); | |
| - static void tsetdirt(int, int); | |
| -@@ -416,10 +423,10 @@ tlinelen(int y) | |
| - { | |
| - int i = term.col; | |
| - | |
| -- if (term.line[y][i - 1].mode & ATTR_WRAP) | |
| -+ if (TLINE(y)[i - 1].mode & ATTR_WRAP) | |
| - return i; | |
| - | |
| -- while (i > 0 && term.line[y][i - 1].u == ' ') | |
| -+ while (i > 0 && TLINE(y)[i - 1].u == ' ') | |
| - --i; | |
| - | |
| - return i; | |
| -@@ -528,7 +535,7 @@ selsnap(int *x, int *y, int direction) | |
| - * Snap around if the word wraps around at the end or | |
| - * beginning of a line. | |
| - */ | |
| -- prevgp = &term.line[*y][*x]; | |
| -+ prevgp = &TLINE(*y)[*x]; | |
| - prevdelim = ISDELIM(prevgp->u); | |
| - for (;;) { | |
| - newx = *x + direction; | |
| -@@ -543,14 +550,14 @@ selsnap(int *x, int *y, int direction) | |
| - yt = *y, xt = *x; | |
| - else | |
| - yt = newy, xt = newx; | |
| -- if (!(term.line[yt][xt].mode & ATTR_WRAP)) | |
| -+ if (!(TLINE(yt)[xt].mode & ATTR_WRAP)) | |
| - break; | |
| - } | |
| - | |
| - if (newx >= tlinelen(newy)) | |
| - break; | |
| - | |
| -- gp = &term.line[newy][newx]; | |
| -+ gp = &TLINE(newy)[newx]; | |
| - delim = ISDELIM(gp->u); | |
| - if (!(gp->mode & ATTR_WDUMMY) && (delim != prevdelim | |
| - || (delim && gp->u != prevgp->u))) | |
| -@@ -571,14 +578,14 @@ selsnap(int *x, int *y, int direction) | |
| - *x = (direction < 0) ? 0 : term.col - 1; | |
| - if (direction < 0) { | |
| - for (; *y > 0; *y += direction) { | |
| -- if (!(term.line[*y-1][term.col-1].mode | |
| -+ if (!(TLINE(*y-1)[term.col-1].mode | |
| - & ATTR_WRAP)) { | |
| - break; | |
| - } | |
| - } | |
| - } else if (direction > 0) { | |
| - for (; *y < term.row-1; *y += direction) { | |
| -- if (!(term.line[*y][term.col-1].mode | |
| -+ if (!(TLINE(*y)[term.col-1].mode | |
| - & ATTR_WRAP)) { | |
| - break; | |
| - } | |
| -@@ -609,13 +616,13 @@ getsel(void) | |
| - } | |
| - | |
| - if (sel.type == SEL_RECTANGULAR) { | |
| -- gp = &term.line[y][sel.nb.x]; | |
| -+ gp = &TLINE(y)[sel.nb.x]; | |
| - lastx = sel.ne.x; | |
| - } else { | |
| -- gp = &term.line[y][sel.nb.y == y ? sel.nb.x : 0]; | |
| -+ gp = &TLINE(y)[sel.nb.y == y ? sel.nb.x : 0]; | |
| - lastx = (sel.ne.y == y) ? sel.ne.x : term.col-1; | |
| - } | |
| -- last = &term.line[y][MIN(lastx, linelen-1)]; | |
| -+ last = &TLINE(y)[MIN(lastx, linelen-1)]; | |
| - while (last >= gp && last->u == ' ') | |
| - --last; | |
| - | |
| -@@ -850,6 +857,9 @@ void | |
| - ttywrite(const char *s, size_t n, int may_echo) | |
| - { | |
| - const char *next; | |
| -+ Arg arg = (Arg) { .i = term.scr }; | |
| -+ | |
| -+ kscrolldown(&arg); | |
| - | |
| - if (may_echo && IS_SET(MODE_ECHO)) | |
| - twrite(s, n, 1); | |
| -@@ -1061,13 +1071,53 @@ tswapscreen(void) | |
| - } | |
| - | |
| - void | |
| --tscrolldown(int orig, int n) | |
| -+kscrolldown(const Arg* a) | |
| -+{ | |
| -+ int n = a->i; | |
| -+ | |
| -+ if (n < 0) | |
| -+ n = term.row + n; | |
| -+ | |
| -+ if (n > term.scr) | |
| -+ n = term.scr; | |
| -+ | |
| -+ if (term.scr > 0) { | |
| -+ term.scr -= n; | |
| -+ selscroll(0, -n); | |
| -+ tfulldirt(); | |
| -+ } | |
| -+} | |
| -+ | |
| -+void | |
| -+kscrollup(const Arg* a) | |
| -+{ | |
| -+ int n = a->i; | |
| -+ | |
| -+ if (n < 0) | |
| -+ n = term.row + n; | |
| -+ | |
| -+ if (term.scr <= HISTSIZE-n) { | |
| -+ term.scr += n; | |
| -+ selscroll(0, n); | |
| -+ tfulldirt(); | |
| -+ } | |
| -+} | |
| -+ | |
| -+void | |
| -+tscrolldown(int orig, int n, int copyhist) | |
| - { | |
| - int i; | |
| - Line temp; | |
| - | |
| - LIMIT(n, 0, term.bot-orig+1); | |
| - | |
| -+ if (copyhist) { | |
| -+ term.histi = (term.histi - 1 + HISTSIZE) % HISTSIZE; | |
| -+ temp = term.hist[term.histi]; | |
| -+ term.hist[term.histi] = term.line[term.bot]; | |
| -+ term.line[term.bot] = temp; | |
| -+ } | |
| -+ | |
| - tsetdirt(orig, term.bot-n); | |
| - tclearregion(0, term.bot-n+1, term.col-1, term.bot); | |
| - | |
| -@@ -1077,17 +1127,28 @@ tscrolldown(int orig, int n) | |
| - term.line[i-n] = temp; | |
| - } | |
| - | |
| -- selscroll(orig, n); | |
| -+ if (term.scr == 0) | |
| -+ selscroll(orig, n); | |
| - } | |
| - | |
| - void | |
| --tscrollup(int orig, int n) | |
| -+tscrollup(int orig, int n, int copyhist) | |
| - { | |
| - int i; | |
| - Line temp; | |
| - | |
| - LIMIT(n, 0, term.bot-orig+1); | |
| - | |
| -+ if (copyhist) { | |
| -+ term.histi = (term.histi + 1) % HISTSIZE; | |
| -+ temp = term.hist[term.histi]; | |
| -+ term.hist[term.histi] = term.line[orig]; | |
| -+ term.line[orig] = temp; | |
| -+ } | |
| -+ | |
| -+ if (term.scr > 0 && term.scr < HISTSIZE) | |
| -+ term.scr = MIN(term.scr + n, HISTSIZE-1); | |
| -+ | |
| - tclearregion(0, orig, term.col-1, orig+n-1); | |
| - tsetdirt(orig+n, term.bot); | |
| - | |
| -@@ -1097,7 +1158,8 @@ tscrollup(int orig, int n) | |
| - term.line[i+n] = temp; | |
| - } | |
| - | |
| -- selscroll(orig, -n); | |
| -+ if (term.scr == 0) | |
| -+ selscroll(orig, -n); | |
| - } | |
| - | |
| - void | |
| -@@ -1126,7 +1188,7 @@ tnewline(int first_col) | |
| - int y = term.c.y; | |
| - | |
| - if (y == term.bot) { | |
| -- tscrollup(term.top, 1); | |
| -+ tscrollup(term.top, 1, 1); | |
| - } else { | |
| - y++; | |
| - } | |
| -@@ -1291,14 +1353,14 @@ void | |
| - tinsertblankline(int n) | |
| - { | |
| - if (BETWEEN(term.c.y, term.top, term.bot)) | |
| -- tscrolldown(term.c.y, n); | |
| -+ tscrolldown(term.c.y, n, 0); | |
| - } | |
| - | |
| - void | |
| - tdeleteline(int n) | |
| - { | |
| - if (BETWEEN(term.c.y, term.top, term.bot)) | |
| -- tscrollup(term.c.y, n); | |
| -+ tscrollup(term.c.y, n, 0); | |
| - } | |
| - | |
| - int32_t | |
| -@@ -1735,11 +1797,11 @@ csihandle(void) | |
| - break; | |
| - case 'S': /* SU -- Scroll <n> line up */ | |
| - DEFAULT(csiescseq.arg[0], 1); | |
| -- tscrollup(term.top, csiescseq.arg[0]); | |
| -+ tscrollup(term.top, csiescseq.arg[0], 0); | |
| - break; | |
| - case 'T': /* SD -- Scroll <n> line down */ | |
| - DEFAULT(csiescseq.arg[0], 1); | |
| -- tscrolldown(term.top, csiescseq.arg[0]); | |
| -+ tscrolldown(term.top, csiescseq.arg[0], 0); | |
| - break; | |
| - case 'L': /* IL -- Insert <n> blank lines */ | |
| - DEFAULT(csiescseq.arg[0], 1); | |
| -@@ -2251,7 +2313,7 @@ eschandle(uchar ascii) | |
| - return 0; | |
| - case 'D': /* IND -- Linefeed */ | |
| - if (term.c.y == term.bot) { | |
| -- tscrollup(term.top, 1); | |
| -+ tscrollup(term.top, 1, 1); | |
| - } else { | |
| - tmoveto(term.c.x, term.c.y+1); | |
| - } | |
| -@@ -2264,7 +2326,7 @@ eschandle(uchar ascii) | |
| - break; | |
| - case 'M': /* RI -- Reverse index */ | |
| - if (term.c.y == term.top) { | |
| -- tscrolldown(term.top, 1); | |
| -+ tscrolldown(term.top, 1, 1); | |
| - } else { | |
| - tmoveto(term.c.x, term.c.y-1); | |
| - } | |
| -@@ -2474,7 +2536,7 @@ twrite(const char *buf, int buflen, int show_ctrl) | |
| - void | |
| - tresize(int col, int row) | |
| - { | |
| -- int i; | |
| -+ int i, j; | |
| - int minrow = MIN(row, term.row); | |
| - int mincol = MIN(col, term.col); | |
| - int *bp; | |
| -@@ -2511,6 +2573,14 @@ tresize(int col, int row) | |
| - term.dirty = xrealloc(term.dirty, row * sizeof(*term.dirty)); | |
| - term.tabs = xrealloc(term.tabs, col * sizeof(*term.tabs)); | |
| - | |
| -+ for (i = 0; i < HISTSIZE; i++) { | |
| -+ term.hist[i] = xrealloc(term.hist[i], col * sizeof(Glyph)); | |
| -+ for (j = mincol; j < col; j++) { | |
| -+ term.hist[i][j] = term.c.attr; | |
| -+ term.hist[i][j].u = ' '; | |
| -+ } | |
| -+ } | |
| -+ | |
| - /* resize each row to new width, zero-pad if needed */ | |
| - for (i = 0; i < minrow; i++) { | |
| - term.line[i] = xrealloc(term.line[i], col * sizeof(Glyph)); | |
| -@@ -2569,7 +2639,7 @@ drawregion(int x1, int y1, int x2, int y2) | |
| - continue; | |
| - | |
| - term.dirty[y] = 0; | |
| -- xdrawline(term.line[y], x1, y, x2); | |
| -+ xdrawline(TLINE(y), x1, y, x2); | |
| - } | |
| - } | |
| - | |
| -@@ -2590,8 +2660,9 @@ draw(void) | |
| - cx--; | |
| - | |
| - drawregion(0, 0, term.col, term.row); | |
| -- xdrawcursor(cx, term.c.y, term.line[term.c.y][cx], | |
| -- term.ocx, term.ocy, term.line[term.ocy][term.ocx]); | |
| -+ if (term.scr == 0) | |
| -+ xdrawcursor(cx, term.c.y, term.line[term.c.y][cx], | |
| -+ term.ocx, term.ocy, term.line[term.ocy][term.… | |
| - term.ocx = cx; | |
| - term.ocy = term.c.y; | |
| - xfinishdraw(); | |
| -diff --git a/st.h b/st.h | |
| -index fa2eddf..adda2db 100644 | |
| ---- a/st.h | |
| -+++ b/st.h | |
| -@@ -81,6 +81,8 @@ void die(const char *, ...); | |
| - void redraw(void); | |
| - void draw(void); | |
| - | |
| -+void kscrolldown(const Arg *); | |
| -+void kscrollup(const Arg *); | |
| - void printscreen(const Arg *); | |
| - void printsel(const Arg *); | |
| - void sendbreak(const Arg *); | |
| diff --git a/suckless/st/patches/02-st-w3m-hack.diff b/suckless/st/patches/02-s… | |
| @@ -1,12 +0,0 @@ | |
| -diff --git a/x.c b/x.c | |
| -index e5f1737..b6ae162 100644 | |
| ---- a/x.c | |
| -+++ b/x.c | |
| -@@ -1594,6 +1594,8 @@ xsettitle(char *p) | |
| - int | |
| - xstartdraw(void) | |
| - { | |
| -+ if (IS_SET(MODE_VISIBLE)) | |
| -+ XCopyArea(xw.dpy, xw.win, xw.buf, dc.gc, 0, 0, win.w, win.h, … | |
| - return IS_SET(MODE_VISIBLE); | |
| - } | |
| diff --git a/sway/config b/sway/config | |
| @@ -0,0 +1,78 @@ | |
| +set $mod Mod1 | |
| + | |
| +set $left h | |
| +set $down j | |
| +set $up k | |
| +set $right l | |
| + | |
| + | |
| +# Apps | |
| +set $term foot | |
| +set $browser firefox | |
| +set $menu bemenu-run -p '> ' -b --tb '#000000' --tf '#ffffff' --hf '#444444' | |
| +set $vol amixer set Master | |
| + | |
| + | |
| +# Autostart | |
| +exec wlsunset -l 57.6495 -L 3.318 | |
| +exec mpd | |
| +exec dunst | |
| + | |
| + | |
| +# Misc | |
| +default_border none | |
| +xwayland enable | |
| +font pango: Hack:style=Regular 10 | |
| +gaps outer 2 | |
| +gaps inner 5 | |
| + | |
| + | |
| +# Keyboard layout | |
| +input * { | |
| + xkb_layout "gb" | |
| + xkb_variant "extd" | |
| +} | |
| + | |
| +# bar | |
| +bar { | |
| + swaybar_command waybar | |
| +} | |
| + | |
| +# Keybinds | |
| +bindsym $mod+Space exec $term | |
| +bindsym $mod+p exec $menu | |
| +bindsym $mod+f exec $browser | |
| +bindsym $mod+u exec $vol 10%+ | |
| +bindsym $mod+d exec $vol 10%- | |
| + | |
| +bindsym $mod+c kill | |
| +bindsym $mod+Shift+c reload | |
| +bindsym $mod+Shift+q exec swaymsg exit | |
| + | |
| +# Move your focus around | |
| + bindsym $mod+$left focus left | |
| + bindsym $mod+$down focus down | |
| + bindsym $mod+$up focus up | |
| + bindsym $mod+$right focus right | |
| + | |
| + # Or use $mod+[up|down|left|right] | |
| + bindsym $mod+Left focus left | |
| + bindsym $mod+Down focus down | |
| + bindsym $mod+Up focus up | |
| + bindsym $mod+Right focus right | |
| + | |
| + # Switch to workspace | |
| + bindsym $mod+1 workspace number 1 | |
| + bindsym $mod+2 workspace number 2 | |
| + bindsym $mod+3 workspace number 3 | |
| + bindsym $mod+4 workspace number 4 | |
| + | |
| + bindsym $mod+Shift+1 move container to workspace number 1 | |
| + bindsym $mod+Shift+2 move container to workspace number 2 | |
| + bindsym $mod+Shift+3 move container to workspace number 3 | |
| + bindsym $mod+Shift+4 move container to workspace number 4 | |
| + | |
| + bindsym $mod+e layout toggle split | |
| + bindsym $mod+m fullscreen | |
| + | |
| +include /etc/sway/config.d/* | |
| diff --git a/waybar/config b/waybar/config | |
| @@ -0,0 +1,82 @@ | |
| +{ | |
| + "layer": "top", | |
| + "position": "top", | |
| + | |
| + "modules-left": [ | |
| + "sway/workspaces", | |
| + "custom/right-arrow-dark" | |
| + ], | |
| + | |
| + "modules-right": [ | |
| + "custom/left-arrow-dark", | |
| + "custom/mail", | |
| + "custom/newsboat", | |
| + "custom/vpn", | |
| + "pulseaudio", | |
| + "tray", | |
| + "clock" | |
| + ], | |
| + | |
| + "custom/right-arrow-dark": { | |
| + "format": "", | |
| + "tooltip": false | |
| + }, | |
| + | |
| + "custom/left-arrow-dark": { | |
| + "format": "", | |
| + "tooltip": false | |
| + }, | |
| + | |
| + "sway/workspaces": { | |
| + "disable-scroll": true, | |
| + "format": "{name}" | |
| + }, | |
| + | |
| + "clock": { | |
| + "format": "{:%H:%M}", | |
| + "tooltip": false | |
| + }, | |
| + | |
| + "pulseaudio": { | |
| + "format": "{icon} {volume:2}%", | |
| + "format-bluetooth": " {volume}%", | |
| + "format-muted": "MUTE", | |
| + "format-icons": { | |
| + "default": [ | |
| + "", | |
| + "" | |
| + ] | |
| + }, | |
| + "scroll-step": 5, | |
| + "on-click": "pamixer -t", | |
| + "on-click-right": "foot ncmpcpp" | |
| + }, | |
| + | |
| + "custom/mail": { | |
| + "format": "", | |
| + "return-type": "json", | |
| + "interval": 60, | |
| + "exec": "$HOME/.config/waybar/waybar_mail.sh", | |
| + "on-click": "foot mutt", | |
| + }, | |
| + | |
| + "custom/newsboat": { | |
| + "format": "", | |
| + "return-type": "json", | |
| + "interval": 60, | |
| + "exec": "$HOME/.config/waybar/waybar_newsboat.sh", | |
| + "on-click": "foot newsboat", | |
| + }, | |
| + | |
| + "custom/vpn": { | |
| + "format": "", | |
| + "exec": "echo '{\"class\": \"connected\"}'", | |
| + "exec-if": "test -d /proc/sys/net/ipv4/conf/wg-mullvad", | |
| + "return-type": "json", | |
| + "interval": 5 | |
| + }, | |
| + | |
| + "tray": { | |
| + "icon-size": 15 | |
| + } | |
| +} | |
| diff --git a/waybar/style.css b/waybar/style.css | |
| @@ -0,0 +1,58 @@ | |
| +* { | |
| + font-size: 12px; | |
| + font-family: monospace; | |
| +} | |
| + | |
| +window#waybar { | |
| + background: #292b2e; | |
| + color: #fdf6e3; | |
| +} | |
| + | |
| +#workspaces, | |
| +#clock, | |
| +#custom-mail, | |
| +#custom-newsboat, | |
| +#custom-vpn, | |
| +#pulseaudio, | |
| +#tray { | |
| + background: #1a1a1a; | |
| +} | |
| + | |
| +#custom-right-arrow-dark, | |
| +#custom-left-arrow-dark { | |
| + color: #1a1a1a; | |
| +} | |
| + | |
| +#workspaces button { | |
| + padding: 0 0px; | |
| + color: #fdf6e3; | |
| +} | |
| +#workspaces button.focused { | |
| + color: #268bd2; | |
| +} | |
| +#workspaces button:hover { | |
| + box-shadow: inherit; | |
| + text-shadow: inherit; | |
| +} | |
| +#workspaces button:hover { | |
| + background: #1a1a1a; | |
| + border: #1a1a1a; | |
| + padding: 0 3px; | |
| +} | |
| + | |
| +#custom-mail.new, | |
| +#custom-newsboat.new { | |
| + color: #268bd2; | |
| +} | |
| + | |
| +#custom-vpn.connected { | |
| + color: #d22635; | |
| +} | |
| + | |
| +#clock, | |
| +#custom-mail, | |
| +#custom-newsboat, | |
| +#custom-vpn, | |
| +#pulseaudio { | |
| + padding: 0 5px; | |
| +} | |
| diff --git a/waybar/waybar_mail.sh b/waybar/waybar_mail.sh | |
| @@ -0,0 +1,12 @@ | |
| +#!/usr/bin/bash | |
| + | |
| +maildirnew="$HOME/.mail/jay/Inbox/new/" | |
| +new="$(find $maildirnew -type f | wc -l)" | |
| + | |
| +if [ $new -gt 0 ] | |
| +then | |
| + echo "{\"text\":\"$new\",\"tooltip\":\"$new Mail\",\"class\":\"new\"}" | |
| +else | |
| + echo '{"text":"No new mail","tooltip":"","class":""}' | |
| +fi | |
| + | |
| diff --git a/waybar/waybar_newsboat.sh b/waybar/waybar_newsboat.sh | |
| @@ -0,0 +1,11 @@ | |
| +#!/usr/bin/bash | |
| + | |
| +new="$(newsboat -x print-unread | awk '{ print $1}')" | |
| + | |
| +if [ $new -gt 0 ] | |
| +then | |
| + echo "{\"text\":\"$new\",\"tooltip\":\"$new Feeds\",\"class\":\"new\"}" | |
| +else | |
| + echo '{"text":"No new feeds","tooltip":"","class":""}' | |
| +fi | |
| + |