removing X11 apps and replacing with wayland. - dotfiles - These are my dotfiles. There are many like it, but these are mine.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 08532b698f617d50addb0201c92a587636be2256
(DIR) parent 97a5129e9e960edc4431ae61bd86b9470f4a86b9
(HTM) Author: Jay Scott <me@jay.scot>
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(-)
---
(DIR) 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
(DIR) 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
(DIR) 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
(DIR) 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 "games »")
+games=$(printf "%s\n" "Kathy Rain" "Beneath A Steel Sky" "Enter The Gungeon" | dmenu -p "games »")
[ -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
;;
(DIR) 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:]')"
(DIR) diff --git a/bin/dwmstatus.sh b/bin/old/dwmstatus.sh
(DIR) 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
(DIR) 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/48x48/status/:/usr/share/icons/Paper/16x16/devices/:/usr/share/icons/Paper/48x48/notifications/:/usr/share/icons/Paper/48x48/emblems/
+
+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
(DIR) 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"
(DIR) 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
(DIR) 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
(DIR) 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 "!" "~Uninformativ" people
"exec:gemget capsule.usebox.net/gemlog/atom.xml --output -" "!" "~Juans Gemlog" gemini
"exec:gemget foobucket.xyz/gemlog/atom.xml --output -" "!" "~Foobucket Gemlog" gemini
"exec:gemget midnight.pub/feed.xml --output -" "!" "~Midnight Pub" gemini
+"exec:gemget gemini://warmedal.se/~antenna/atom.xml --output -" "!" "~Antenna" gemini
# ODYSEE
https://odysee.com/$/rss/@AlphaNerd:8 "!" "~Mental Outlaws" youtube
@@ -76,7 +77,6 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCl7mAGnY4jh4Ps8rhhh8XZg "!"
https://www.youtube.com/feeds/videos.xml?channel_id=UCpXwMqnXfJzazKS5fJ8nrVw "!" youtube # Shiey
https://www.youtube.com/feeds/videos.xml?channel_id=UCWm__g4cPmX-umorqM8VfWw "!" youtube # LukeDamant
https://www.youtube.com/feeds/videos.xml?channel_id=UCO8MMsO_XRjO7X4iGCuKdwg "!" youtube # Vagabond
-https://www.youtube.com/feeds/videos.xml?channel_id=UCwMsZgvi4ok7l5hIml1SprA "!" youtube # Bluddshed
https://www.youtube.com/feeds/videos.xml?channel_id=UCmSwBBdhuJ39zaA437NaeXA "!" youtube # Scotland History Tours
https://www.youtube.com/feeds/videos.xml?channel_id=UCeKshd39k29Ipg9sWVaU3-Q "!" youtube # thesalukie
https://www.youtube.com/feeds/videos.xml?channel_id=UCqRs-3IcoKCMGXsfLvOgTUg "!" youtube # ThoseHappyDays
@@ -85,3 +85,6 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCPqdx8N99fs4IDoK_XA1aew "!"
https://www.youtube.com/feeds/videos.xml?channel_id=UCI3mQP0kLxdZKhNtcHhExyA "!" youtube # Paul Messer
https://www.youtube.com/feeds/videos.xml?channel_id=UCdVEfdWcNwL5jWmwaNWEf1Q "!" youtube # Bushman & Blue
https://www.youtube.com/feeds/videos.xml?channel_id=UC2O6HDtMOZf9FkUAepz9Atg "!" youtube # Noel Phillips
+https://www.youtube.com/feeds/videos.xml?channel_id=UCdQ3VoDGjjl3NsfB3V0mPng "!" youtube # clawd00d
+https://www.youtube.com/feeds/videos.xml?channel_id=UCpNBjjE8y8eFPhDU4YzYmKA "!" youtube # Quin69
+https://www.youtube.com/feeds/videos.xml?channel_id=UCs2Kaw3Soa63cJq3H0VA7og "!" youtube # rwxrob
(DIR) 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
(DIR) 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-require-vpn set on; mullvad connect'
alias t='wtwitch'
alias weather='curl wttr.in/?1QF'
(DIR) 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
(DIR) 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[] = " ";
(DIR) diff --git a/suckless/dmenu/patches/01-dmenu-border-4.9.diff b/suckless/dmenu/patches/01-dmenu-border-4.9.diff
@@ -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, &swa);
-+ XSetWindowBorder(dpy, win, scheme[SchemeSel][ColBg].pixel);
- XSetClassHint(dpy, win, &ch);
-
- /* open input methods */
(DIR) diff --git a/suckless/dmenu/patches/02-dmenu-center-20200111-8cd37e1.diff b/suckless/dmenu/patches/02-dmenu-center-20200111-8cd37e1.diff
@@ -1,120 +0,0 @@
-From 8cd37e1ab9e7cb025224aeb3543f1a5be8bceb93 Mon Sep 17 00:00:00 2001
-From: Nihal Jere <nihal@nihaljere.xyz>
-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 appears at bottom */
-+static int centered = 0; /* -c option; centers dmenu on screen */
-+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 in their $SHELL.
- .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[i].width);
-+ 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.width);
-+ 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 reading stdin */
- fast = 1;
-+ else if (!strcmp(argv[i], "-c")) /* centers dmenu on screen */
-+ centered = 1;
- else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
- fstrncmp = strncasecmp;
- fstrstr = cistrstr;
---
-2.24.1
-
(DIR) 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
(DIR) 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 monitor */
- { 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 = dmenucmd } },
- { MODKEY, XK_space, spawn, {.v = termcmd } },
- { MODKEY, XK_f, spawn, {.v = webcmd } },
- { MODKEY, XK_y, spawn, {.v = ytcmd } },
- { MODKEY, XK_g, spawn, {.v = gamecmd } },
- { MODKEY, XK_u, spawn, {.v = volup } },
- { MODKEY, XK_d, spawn, {.v = voldown } },
- { 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 = &layouts[0]} },
- { MODKEY|ShiftMask, XK_x, setlayout, {.v = &layouts[1]} },
- 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, {.v = voldown } },
- { ClkRootWin, 0, Button9, spawn, {.v = volup } },
- };
-
-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 = nexttiled(c->next), i++) {
- 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 * c->bw), 0);
- 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), i++)
- 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);
- }
-}
(DIR) 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
(DIR) 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
(DIR) 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
(DIR) 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 release */
- { 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{|}~";
(DIR) diff --git a/suckless/st/patches/01-st-scrollback-20210507-4536f46.diff b/suckless/st/patches/01-st-scrollback-20210507-4536f46.diff
@@ -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.ocx]);
- 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 *);
(DIR) diff --git a/suckless/st/patches/02-st-w3m-hack.diff b/suckless/st/patches/02-st-w3m-hack.diff
@@ -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, 0, 0);
- return IS_SET(MODE_VISIBLE);
- }
(DIR) 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/*
(DIR) 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
+ }
+}
(DIR) 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;
+}
(DIR) 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
+
(DIR) 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
+