Introduction
Introduction Statistics Contact Development Disclaimer Help
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
+
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.