Introduction
Introduction Statistics Contact Development Disclaimer Help
Huge update, sway mostly. - dotfiles - These are my dotfiles. There are many li…
Log
Files
Refs
README
---
commit f416bf57b40d2678b1d9a32d2e6f72c6d75a38dc
parent 07475f784ba3846094d1545852eac46dd79db095
Author: Jay Scott <[email protected]>
Date: Wed, 7 Feb 2024 21:39:23 +0000
Huge update, sway mostly.
Diffstat:
M README | 11 +++++------
D X11/Xresources | 98 -----------------------------…
D X11/xinitrc | 15 ---------------
D alacritty/alacritty.toml | 33 -----------------------------…
A ashrc | 54 +++++++++++++++++++++++++++++…
D bashrc | 58 ------------------------------
M bin/game_select.sh | 1 -
M bin/link_handler.sh | 8 ++++----
A bin/sway-run.sh | 22 ++++++++++++++++++++++
M bootstrap.sh | 4 ++--
A foot/foot.ini | 27 +++++++++++++++++++++++++++
D mpd/mpd.conf | 20 --------------------
D ncmpcpp/config | 31 -----------------------------…
M newsraft/config | 4 ++--
M newsraft/feeds | 15 ---------------
D pkg/pkglist-aur.txt | 7 -------
D pkg/pkglist-repo.txt | 62 -----------------------------…
M profile | 2 +-
D suckless/dmenu/Makefile | 39 -----------------------------…
D suckless/dmenu/config.h | 16 ----------------
D suckless/dmenu/patches/01-dmenu-bo… | 36 ---------------------------…
D suckless/dmenu/patches/02-dmenu-ce… | 120 ---------------------------…
D suckless/dwm/Makefile | 41 -----------------------------…
D suckless/dwm/config.h | 199 -----------------------------…
D suckless/dwm/patches/01-dwm-systra… | 746 ---------------------------…
D suckless/herbe/Makefile | 40 -----------------------------…
D suckless/herbe/config.h | 19 -------------------
D suckless/slstatus/Makefile | 35 -----------------------------…
D suckless/slstatus/config.h | 71 -----------------------------…
A sway/config | 87 +++++++++++++++++++++++++++++…
A waybar/config | 65 +++++++++++++++++++++++++++++…
A waybar/style.css | 58 ++++++++++++++++++++++++++++++
A waybar/waybar_mail.sh | 12 ++++++++++++
A waybar/waybar_newsboat.sh | 11 +++++++++++
34 files changed, 350 insertions(+), 1717 deletions(-)
---
diff --git a/README b/README
@@ -7,14 +7,13 @@ Privacy is at the forefront of my mind as such some of my bro…
settings maybe too restrictive for some. I also don't use social media
at all, the closest I come is using IRC.
- operating sys : archlinux / alpine linux
- window manager : dwm
- terminal : alacritty
- launcher : dmenu
+ operating sys : alpine linux
+ window manager : sway
+ terminal : foot
+ launcher : bemenu
email : mutt / isync
browser : qutebrowser / librewolf
- video : mpv
- music : mpd / ncmcpp
+ video / music : mpv
password mgt : pass
vpn : mullvad
news : newsraft
diff --git a/X11/Xresources b/X11/Xresources
@@ -1,98 +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
-
-!
-! Generated with :
-! XRDB2Xreources.py
-!
-*.foreground: #e6d4a3
-*.background: #1e1e1e
-*.cursorColor: #bbbbbb
-!
-! Black
-*.color0: #161819
-*.color8: #7f7061
-!
-! Red
-*.color1: #f73028
-*.color9: #be0f17
-!
-! Green
-*.color2: #aab01e
-*.color10: #868715
-!
-! Yellow
-*.color3: #f7b125
-*.color11: #cc881a
-!
-! Blue
-*.color4: #719586
-*.color12: #377375
-!
-! Magenta
-*.color5: #c77089
-*.color13: #a04b73
-!
-! Cyan
-*.color6: #7db669
-*.color14: #578e57
-!
-! White
-*.color7: #faefbb
-*.color15: #e6d4a3
-!
-! Bold, Italic, Underline
-*.colorBD: #978771
-!*.colorIT:
-!*.colorUL:
diff --git a/X11/xinitrc b/X11/xinitrc
@@ -1,15 +0,0 @@
-# x stuff
-setxkbmap gb
-xset s off -dpms
-xrdb -load ~/.config/X11/Xresources
-
-if [ -z "$XDG_RUNTIME_DIR" ]; then
- mkdir -p /tmp/runtime/jay
- chmod 700 /tmp/runtime/jay
- export XDG_RUNTIME_DIR=/tmp/runtime/jay
-fi
-
-slstatus &
-xrandr --output HDMI-A-0 --auto --output DisplayPort-0 --auto --right-of HDMI-…
-mpd &
-exec dwm
diff --git a/alacritty/alacritty.toml b/alacritty/alacritty.toml
@@ -1,33 +0,0 @@
-[colors.bright]
-black = "0x928374"
-blue = "0x83a598"
-cyan = "0x8ec07c"
-green = "0xb8bb26"
-magenta = "0xd3869b"
-red = "0xfb4934"
-white = "0xebdbb2"
-yellow = "0xfabd2f"
-
-[colors.normal]
-black = "0x282828"
-blue = "0x458588"
-cyan = "0x689d6a"
-green = "0x98971a"
-magenta = "0xb16286"
-red = "0xcc241d"
-white = "0xa89984"
-yellow = "0xd79921"
-
-[colors.primary]
-background = "0x282828"
-foreground = "0xebdbb2"
-
-[env]
-TERM = "xterm-256color"
-
-[font]
-size = 15
-
-[font.normal]
-family = "Hack"
-style = "Regular"
diff --git a/ashrc b/ashrc
@@ -0,0 +1,54 @@
+export XDG_CONFIG_HOME="$HOME/.config"
+export XDG_CACHE_HOME="$HOME/.cache"
+export XDG_DATA_HOME="$HOME/.local/share"
+export XDG_STATE_HOME="$HOME/.local/state"
+
+# cleanup ~/
+export PASSWORD_STORE_DIR="$XDG_CONFIG_HOME"/pass
+export CARGO_HOME="$XDG_DATA_HOME"/cargo
+alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
+
+# common exports
+GPG_TTY=$(tty)
+export GPG_TTY
+export EDITOR="vim"
+export BROWSER="qutebrowser"
+export PATH=$PATH:$HOME/bin:$HOME/.local/bin
+
+export BEMENU_OPTS="-p '> ' --tb '#013220' --tf '#ffffff' --hf '#444444'"
+
+# terraform config
+export TF_CLOUD_ORGANIZATION="jay-scot"
+export TF_WORKSPACE="hetzner"
+
+# lynx
+export LYNX_CFG=$HOME/.config/lynx/config
+export LYNX_LSS=$HOME/.config/lynx/theme.lss
+
+# safety first kids!
+alias cp='cp -i'
+alias mv='mv -i'
+alias rm='rm -i'
+
+# random alias
+alias weather='curl wttr.in/?1QF'
+
+# git alias
+alias ga='git add -A'
+alias gs='git status -s'
+alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset…
+alias gd='git diff'
+alias gma='git commit -am'
+
+# neo
+alias vim='nvim'
+alias mutt='neomutt'
+
+# ash
+export MAILPATH='~/.mail/jay/Inbox/cur/'
+export LANG=en_US.UTF-8
+export LC_CTYPE="en_US.UTF-8"
+export LC_ALL=en_US.UTF-8
+export PS1="\[\e[00;34m\]▶▶▶ \W \[\e[0m\]"
+
+source ~/.secret
diff --git a/bashrc b/bashrc
@@ -1,58 +0,0 @@
-if [[ -r /usr/share/bash-completion/bash_completion ]]; then
- . /usr/share/bash-completion/bash_completion
-fi
-
-export XDG_CONFIG_HOME="$HOME/.config"
-export XDG_CACHE_HOME="$HOME/.cache"
-export XDG_DATA_HOME="$HOME/.local/share"
-export XDG_STATE_HOME="$HOME/.local/state"
-
-# cleanup ~/
-export PASSWORD_STORE_DIR="$XDG_CONFIG_HOME"/pass
-export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc
-export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority
-export CARGO_HOME="$XDG_DATA_HOME"/cargo
-alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
-
-# common exports
-GPG_TTY=$(tty)
-export GPG_TTY
-export EDITOR="vim"
-export BROWSER="librewolf"
-export GOPATH="$XDG_DATA_HOME"/go
-export GOPROXY=direct
-export PATH=$PATH:$GOPATH/bin:$HOME/bin:$HOME/.local/bin
-export PS1="[\[$(tput sgr0)\]\[\033[38;5;7m\]\W\[$(tput sgr0)\]] \\$ \[$(tput …
-
-# terraform config
-export TF_CLOUD_ORGANIZATION="jay-scot"
-export TF_WORKSPACE="hetzner"
-
-# lynx
-export LYNX_CFG=$HOME/.config/lynx/config
-export LYNX_LSS=$HOME/.config/lynx/theme.lss
-
-# safety first kids!
-alias cp='cp -i'
-alias mv='mv -i'
-alias rm='rm -i'
-
-# random alias
-alias weather='curl wttr.in/57.66,-2.52?3QF'
-alias ls='ls --color=auto'
-alias voff='mullvad lockdown-mode set off; mullvad disconnect'
-alias von='mullvad lockdown-mode set on; mullvad connect'
-alias vcheck='curl https://am.i.mullvad.net/connected'
-
-# neo
-alias vim='nvim'
-alias mutt='neomutt'
-
-# git alias
-alias ga='git add -A'
-alias gs='git status -s'
-alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset…
-alias gd='git diff --color=always --word-diff=color | less -RFX'
-alias gma='git commit -am'
-
-source ~/.secret
diff --git a/bin/game_select.sh b/bin/game_select.sh
@@ -7,7 +7,6 @@ stellaris_path=$MEDIA_GAMES_DIR/stellaris/start.sh
gibbous_path=$MEDIA_GAMES_DIR/gibbous/start.sh
rimworld_path=$MEDIA_GAMES_DIR/rimworld/start.sh
atomrpg_path=$MEDIA_GAMES_DIR/atomrpg/start.sh
-primordia_path=$MEDIA_GAMES_DIR/primordia/start.sh
steam_command=steam
# Define game list
diff --git a/bin/link_handler.sh b/bin/link_handler.sh
@@ -4,10 +4,10 @@ launcher="setsid"
# apps
player="mpv --really-quiet --no-terminal"
-gemini="alacritty -e amfora"
-gopher="alacritty -e lynx"
+gemini="foot -e amfora"
+gopher="foot -e lynx"
pdf="zathura"
-images="feh"
+images="swayimg"
uri="$1"
uri_lower="$(printf "%s" "$uri" | tr '[:upper:]' '[:lower:]')"
@@ -30,6 +30,6 @@ case "$uri_lower" in
$launcher $images "$uri"
;;
*)
- $launcher librewolf "$uri"
+ $launcher firefox "$uri"
;;
esac
diff --git a/bin/sway-run.sh b/bin/sway-run.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+export TERM=foot
+export _JAVA_AWT_WM_NONREPARENTING=1
+export XKB_DEFAULT_OPTIONS=caps:escape
+export GDK_BACKEND=wayland
+export XDG_SESSION_TYPE=wayland
+#export XCURSOR_THEME=Adwaita
+export XDG_DESKTOP_DIR="$HOME"
+export XDG_DOWNLOAD_DIR="$HOME/tmp"
+export XDG_DOCUMENTS_DIR="$HOME/tmp"
+export XDG_MUSIC_DIR="$HOME/tmp"
+export XDG_PICTURES_DIR="$HOME/tmp"
+export XDG_VIDEOS_DIR="$HOME/tmp"
+export XDG_CURRENT_DESKTOP=sway
+
+if [ -z "$XDG_RUNTIME_DIR" ]; then
+ mkdir -p /tmp/runtime/jay
+ chmod 700 /tmp/runtime/jay
+ export XDG_RUNTIME_DIR=/tmp/runtime/jay
+fi
+
+exec dbus-run-session sway
diff --git a/bootstrap.sh b/bootstrap.sh
@@ -2,9 +2,9 @@
DOTFILES=$(pwd)
-FILES='bashrc profile'
+FILES='ashrc profile'
ROOT='bin'
-CONFIG='alacritty git isync lynx mutt newsraft mpd ncmpcpp nvim qutebrowser X1…
+CONFIG='foot git isync lynx mutt newsraft nvim qutebrowser sway waybar'
link() {
for f in $FILES; do ln -sfn "$DOTFILES/$f" "$HOME/.$f"; done
diff --git a/foot/foot.ini b/foot/foot.ini
@@ -0,0 +1,27 @@
+font=Hack:size=14
+
+[url]
+launch=link_handler.sh ${url}
+
+[key-bindings]
+show-urls-launch=Control+Shift+p
+
+[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/mpd/mpd.conf b/mpd/mpd.conf
@@ -1,20 +0,0 @@
-music_directory "/home/jay/media/music"
-playlist_directory "/home/jay/.config/mpd/playlists"
-db_file "/home/jay/.config/mpd/mpd.db"
-log_file "syslog"
-pid_file "/home/jay/.config/mpd/mpd.pid"
-state_file "/home/jay/.config/mpd/mpdstate"
-
-audio_output {
- type "pulse"
- name "pulse audio"
-}
-audio_output {
- type "fifo"
- name "my_fifo"
- path "/tmp/mpd.fifo"
- format "44100:16:2"
-}
-
-bind_to_address "127.0.0.1"
-port "6600"
diff --git a/ncmpcpp/config b/ncmpcpp/config
@@ -1,31 +0,0 @@
-# visual stuff for 8
-visualizer_data_source = /tmp/mpd.fifo
-visualizer_output_name = my_fifo
-visualizer_in_stereo = no
-visualizer_type = spectrum
-visualizer_look = ∙▋
-visualizer_color = 7,5,8,3
-song_columns_list_format = "(50)[green]{a} (50)[white]{t|f}"
-
-playlist_display_mode = columns
-browser_display_mode = columns
-
-ncmpcpp_directory = ~/.config/ncmpcpp
-lyrics_directory = /tmp
-store_lyrics_in_song_dir = yes
-autocenter_mode = "yes"
-centered_cursor = "yes"
-cyclic_scrolling = "no"
-
-titles_visibility = "no"
-header_visibility = "no"
-statusbar_visibility = "no"
-progressbar_look = "❙❙❙"
-progressbar_color = "white"
-
-user_interface = "classic"
-
-startup_screen = playlist
-startup_slave_screen = visualizer
-startup_slave_screen_focus = no
-locked_screen_width_part = 35
diff --git a/newsraft/config b/newsraft/config
@@ -3,8 +3,8 @@ set open-in-browser-command ~/bin/link_handler.sh "%l"
set send-user-agent-header true
set clean-database-on-startup true
-set menu-feed-sorting unread-desc
-set menu-item-sorting unread-desc
+#set menu-feed-sorting unread-desc
+#set menu-item-sorting unread-desc
# key bindings
bind f exec "~/bin/link_handler.sh %l"
diff --git a/newsraft/feeds b/newsraft/feeds
@@ -10,17 +10,6 @@ https://goarmy.co.uk/collections/all.atom "GoArmy Disressed"
@ MEDIA
https://showrss.info/other/all.rss "TV Torrents"
-http://feed.rutracker.cc/atom/f/1992.atom "RU Tracker"
-
-@ GAMING
-https://www.gamingonlinux.com/article_rss.php "Gaming On Linux"
-
-@ GEMINI
-$(gemget tilde.team/~tomasino/atom.xml --output -) "[email protected]"
-$(gemget capsule.usebox.net/gemlog/atom.xml --output -) "Juans Gemlog"
-$(gemget foobucket.xyz/gemlog/atom.xml --output -) "Foobucket Gemlog"
-$(gemget midnight.pub/feed.xml --output -) "Midnight Pub"
-$(gemget gemini://warmedal.se/~antenna/atom.xml --output -) "Antenna"
@ PEOPLE
https://codemadness.org/atom.xml "CodeMadness"
@@ -28,8 +17,6 @@ https://drewdevault.com/blog/index.xml "Drew DeVault"
http://joeyh.name/blog/index.rss "Joey H"
https://unixsheikh.com/feed.rss "Unix Sheikh"
https://www.uninformativ.de/blog/feeds/en.atom "Uninformativ"
-$(curl -s gopher://box.matto.nl/0/gopherindex.rss) "Matto"
-$(curl -s gopher://1436.ninja/0phlog.atom) "RPod"
@ ODYSEE
https://odysee.com/$/rss/@AlphaNerd:8 "Mental Outlaws"
@@ -61,7 +48,6 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCpXwMqnX…
https://www.youtube.com/feeds/videos.xml?channel_id=UCO8MMsO_XRjO7X4iGCuKdwg "…
https://www.youtube.com/feeds/videos.xml?channel_id=UCpiWxsm9Gt_HK7d-jqkU4MA "…
https://www.youtube.com/feeds/videos.xml?channel_id=UCPqdx8N99fs4IDoK_XA1aew "…
-https://www.youtube.com/feeds/videos.xml?channel_id=UCAN5q-zNsG3zfk0pHI2rXWQ "…
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 "…
@@ -76,7 +62,6 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UC7McxlM5…
https://www.youtube.com/feeds/videos.xml?channel_id=UCb31gOY6OD8ES0zP8M0GhAw "…
https://www.youtube.com/feeds/videos.xml?channel_id=UCqWFLuBLPiaeNzYAek6BOmA "…
https://www.youtube.com/feeds/videos.xml?channel_id=UCSnqXeK94-iNmwqGO__eJ5g "…
-https://www.youtube.com/feeds/videos.xml?channel_id=UCQkKf5qwYKyJlyhZPbdAVmw "…
https://www.youtube.com/feeds/videos.xml?channel_id=UC2SMpy2oZV6BoyJEYShw9bw "…
https://www.youtube.com/feeds/videos.xml?channel_id=UCDQ9L4eFHxSh0BM6z-SkZMw "…
https://www.youtube.com/feeds/videos.xml?channel_id=UC3Vuq4Q1bKFtAiKYlwRv3oA "…
diff --git a/pkg/pkglist-aur.txt b/pkg/pkglist-aur.txt
@@ -1,7 +0,0 @@
-gemget
-lib32-gperftools
-librewolf-bin
-mullvad-vpn-bin
-newsraft
-paru
-shellcheck-bin
diff --git a/pkg/pkglist-repo.txt b/pkg/pkglist-repo.txt
@@ -1,62 +0,0 @@
-alacritty
-amfora
-base
-base-devel
-bash-completion
-chrony
-dhcpcd
-docker
-docker-compose
-efibootmgr
-fzf
-gamemode
-git
-gnu-netcat
-isync
-less
-lf
-lib32-libpng12
-lib32-pipewire
-linux
-linux-firmware
-lynx
-mpd
-mpv
-ncmpcpp
-neomutt
-neovim
-noto-fonts-emoji
-ntfs-3g
-pamixer
-pass
-pipewire-alsa
-pipewire-pulse
-profanity
-pulsemixer
-python-adblock
-qutebrowser
-rsync
-scrot
-shfmt
-steam
-sudo
-terraform
-ttf-dejavu
-ttf-hack
-ttf-jetbrains-mono-nerd
-ttf-liberation
-unrar
-unzip
-vulkan-radeon
-wayland
-wine-staging
-xclip
-xdg-utils
-xf86-video-amdgpu
-xorg-server
-xorg-xinit
-xorg-xset
-xorg-xsetroot
-yt-dlp
-zathura
-zathura-pdf-mupdf
diff --git a/profile b/profile
@@ -1,2 +1,2 @@
-export ENV=$HOME/.bashrc
+export ENV=$HOME/.ashrc
. $ENV
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 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/dmenu/config.h b/suckless/dmenu/config.h
@@ -1,16 +0,0 @@
-static int topbar = 1;
-static const char *fonts[] = {
- "Hack:pixelsize=14"
-};
-static int centered = 1;
-static const char *prompt = "run »";
-static const char *colors[SchemeLast][2] = {
- [SchemeNorm] = { "#ebdbb2", "#282828" },
- [SchemeSel] = { "#ebdbb2", "#98971a" },
- [SchemeOut] = { "#ebdbb2", "#8ec07c" },
-};
-
-static unsigned int lines = 0;
-static const char worddelimiters[] = " ";
-static int min_width = 800;
-static unsigned int border_width = 3;
diff --git a/suckless/dmenu/patches/01-dmenu-border-4.9.diff b/suckless/dmenu/p…
@@ -1,36 +0,0 @@
-diff --git a/config.def.h b/config.def.h
-index 1edb647..dd3eb31 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -21,3 +21,6 @@ static unsigned int lines = 0;
- * for example: " /?\"&[]"
- */
- static const char worddelimiters[] = " ";
-+
-+/* Size of the window border */
-+static unsigned int border_width = 0;
-diff --git a/dmenu.c b/dmenu.c
-index 27b7a30..7c130fc 100644
---- a/dmenu.c
-+++ b/dmenu.c
-@@ -684,9 +684,11 @@ setup(void)
- swa.override_redirect = True;
- swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
- swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
-- win = XCreateWindow(dpy, root, x, y, mw, mh, 0,
-+ win = XCreateWindow(dpy, root, x, y, mw, mh, border_width,
- CopyFromParent, CopyFromParent, CopyFromParent,
- CWOverrideRedirect | CWBackPixel | CWEventMask, &…
-+ if (border_width)
-+ XSetWindowBorder(dpy, win, scheme[SchemeSel][ColBg].pixel);
- XSetClassHint(dpy, win, &ch);
-
-
-@@ -757,6 +759,8 @@ main(int argc, char *argv[])
- colors[SchemeSel][ColFg] = argv[++i];
- else if (!strcmp(argv[i], "-w")) /* embedding window id */
- embed = argv[++i];
-+ else if (!strcmp(argv[i], "-bw"))
-+ border_width = atoi(argv[++i]); /* border width */
- else
- usage();
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,41 +0,0 @@
-REPOSITORY = http://git.suckless.org/dwm
-SRC_DIR = src
-PINNED_REVISION = HEAD
-PATCH_DIR = patches
-
-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 patch
- @cp config.h $@
- @cd $@ && $(MAKE) -s
-
-reset:
- @if [ -n "$(strip $(PINNED_REVISION))" ]; then \
- cd $(SRC_DIR) && git 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
- @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,199 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-
-/* appearance */
-static const unsigned int borderpx = 3;
-static const unsigned int snap = 32;
-static const int lockfullscreen = 1;
-static const int showbar = 1;
-static const int topbar = 1;
-static const unsigned int systraypinning = 0;
-static const unsigned int systrayonleft = 0;
-static const unsigned int systrayspacing = 2;
-static const int systraypinningfailfirst = 1;
-static const int showsystray = 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[] = "#98971A";
-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_cyan },
- [SchemeSel] = { col_gray4, col_cyan, col_gray2 },
-};
-
-
-/* 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[] = {
- { "TTT", bstack },
- { "[]=", tile },
- { ">M>", centeredfloatingmaster },
- { "><>", 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[] = { "alacritty", NULL };
-static const char *webcmd[] = { "librewolf", NULL };
-static const char *gamecmd[] = { "/home/jay/bin/game_select.sh", NULL };
-static const char *volup[] = { "pamixer", "-i", "5", NULL };
-static const char *voldown[] = { "pamixer", "-d", "5", 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_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/dwm/patches/01-dwm-systray-6.4.diff b/suckless/dwm/patche…
@@ -1,746 +0,0 @@
-diff --git a/config.def.h b/config.def.h
-index 9efa774..750529d 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -3,6 +3,11 @@
- /* appearance */
- static const unsigned int borderpx = 1; /* border pixel of windows */
- static const unsigned int snap = 32; /* snap pixel */
-+static const unsigned int systraypinning = 0; /* 0: sloppy systray follows …
-+static const unsigned int systrayonleft = 0; /* 0: systray in the right co…
-+static const unsigned int systrayspacing = 2; /* systray spacing */
-+static const int systraypinningfailfirst = 1; /* 1: if pinning fails, displ…
-+static const int showsystray = 1; /* 0 means no systray */
- static const int showbar = 1; /* 0 means no bar */
- static const int topbar = 1; /* 0 means bottom bar */
- static const char *fonts[] = { "monospace:size=10" };
-@@ -101,8 +106,8 @@ static const Key keys[] = {
- /* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClient…
- static const Button buttons[] = {
- /* click event mask button function …
-- { ClkLtSymbol, 0, Button1, setlayout, …
-- { ClkLtSymbol, 0, Button3, setlayout, …
-+ { ClkTagBar, MODKEY, Button1, tag, …
-+ { ClkTagBar, MODKEY, Button3, toggletag, …
- { ClkWinTitle, 0, Button2, zoom, …
- { ClkStatusText, 0, Button2, spawn, …
- { ClkClientWin, MODKEY, Button1, movemouse, …
-diff --git a/dwm.c b/dwm.c
-index 03baf42..4611a03 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -57,12 +57,27 @@
- #define TAGMASK ((1 << LENGTH(tags)) - 1)
- #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
-
-+#define SYSTEM_TRAY_REQUEST_DOCK 0
-+/* XEMBED messages */
-+#define XEMBED_EMBEDDED_NOTIFY 0
-+#define XEMBED_WINDOW_ACTIVATE 1
-+#define XEMBED_FOCUS_IN 4
-+#define XEMBED_MODALITY_ON 10
-+#define XEMBED_MAPPED (1 << 0)
-+#define XEMBED_WINDOW_ACTIVATE 1
-+#define XEMBED_WINDOW_DEACTIVATE 2
-+#define VERSION_MAJOR 0
-+#define VERSION_MINOR 0
-+#define XEMBED_EMBEDDED_VERSION (VERSION_MAJOR << 16) | VERSION_MINOR
-+
- /* enums */
- enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
- enum { SchemeNorm, SchemeSel }; /* color schemes */
- enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
-+ NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTra…
- NetWMFullscreen, NetActiveWindow, NetWMWindowType,
- NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
-+enum { Manager, Xembed, XembedInfo, XLast }; /* Xembed atoms */
- enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atom…
- enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
- ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
-@@ -141,6 +156,12 @@ typedef struct {
- int monitor;
- } Rule;
-
-+typedef struct Systray Systray;
-+struct Systray {
-+ Window win;
-+ Client *icons;
-+};
-+
- /* function declarations */
- static void applyrules(Client *c);
- static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int inte…
-@@ -172,6 +193,7 @@ static void focusstack(const Arg *arg);
- static Atom getatomprop(Client *c, Atom prop);
- static int getrootptr(int *x, int *y);
- static long getstate(Window w);
-+static unsigned int getsystraywidth();
- static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
- static void grabbuttons(Client *c, int focused);
- static void grabkeys(void);
-@@ -189,13 +211,16 @@ static void pop(Client *c);
- static void propertynotify(XEvent *e);
- static void quit(const Arg *arg);
- static Monitor *recttomon(int x, int y, int w, int h);
-+static void removesystrayicon(Client *i);
- static void resize(Client *c, int x, int y, int w, int h, int interact);
-+static void resizebarwin(Monitor *m);
- static void resizeclient(Client *c, int x, int y, int w, int h);
- static void resizemouse(const Arg *arg);
-+static void resizerequest(XEvent *e);
- static void restack(Monitor *m);
- static void run(void);
- static void scan(void);
--static int sendevent(Client *c, Atom proto);
-+static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, …
- static void sendmon(Client *c, Monitor *m);
- static void setclientstate(Client *c, long state);
- static void setfocus(Client *c);
-@@ -207,6 +232,7 @@ static void seturgent(Client *c, int urg);
- static void showhide(Client *c);
- static void sigchld(int unused);
- static void spawn(const Arg *arg);
-+static Monitor *systraytomon(Monitor *m);
- static void tag(const Arg *arg);
- static void tagmon(const Arg *arg);
- static void tile(Monitor *m);
-@@ -224,18 +250,23 @@ static int updategeom(void);
- static void updatenumlockmask(void);
- static void updatesizehints(Client *c);
- static void updatestatus(void);
-+static void updatesystray(void);
-+static void updatesystrayicongeom(Client *i, int w, int h);
-+static void updatesystrayiconstate(Client *i, XPropertyEvent *ev);
- static void updatetitle(Client *c);
- static void updatewindowtype(Client *c);
- static void updatewmhints(Client *c);
- static void view(const Arg *arg);
- static Client *wintoclient(Window w);
- static Monitor *wintomon(Window w);
-+static Client *wintosystrayicon(Window w);
- static int xerror(Display *dpy, XErrorEvent *ee);
- static int xerrordummy(Display *dpy, XErrorEvent *ee);
- static int xerrorstart(Display *dpy, XErrorEvent *ee);
- static void zoom(const Arg *arg);
-
- /* variables */
-+static Systray *systray = NULL;
- static const char broken[] = "broken";
- static char stext[256];
- static int screen;
-@@ -258,9 +289,10 @@ static void (*handler[LASTEvent]) (XEvent *) = {
- [MapRequest] = maprequest,
- [MotionNotify] = motionnotify,
- [PropertyNotify] = propertynotify,
-+ [ResizeRequest] = resizerequest,
- [UnmapNotify] = unmapnotify
- };
--static Atom wmatom[WMLast], netatom[NetLast];
-+static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast];
- static int running = 1;
- static Cur *cursor[CurLast];
- static Clr **scheme;
-@@ -442,7 +474,7 @@ buttonpress(XEvent *e)
- arg.ui = 1 << i;
- } else if (ev->x < x + TEXTW(selmon->ltsymbol))
- click = ClkLtSymbol;
-- else if (ev->x > selmon->ww - (int)TEXTW(stext))
-+ else if (ev->x > selmon->ww - (int)TEXTW(stext) - getsystrayw…
- click = ClkStatusText;
- else
- click = ClkWinTitle;
-@@ -485,6 +517,13 @@ cleanup(void)
- XUngrabKey(dpy, AnyKey, AnyModifier, root);
- while (mons)
- cleanupmon(mons);
-+
-+ if (showsystray) {
-+ XUnmapWindow(dpy, systray->win);
-+ XDestroyWindow(dpy, systray->win);
-+ free(systray);
-+ }
-+
- for (i = 0; i < CurLast; i++)
- drw_cur_free(drw, cursor[i]);
- for (i = 0; i < LENGTH(colors); i++)
-@@ -516,9 +555,58 @@ cleanupmon(Monitor *mon)
- void
- clientmessage(XEvent *e)
- {
-+ XWindowAttributes wa;
-+ XSetWindowAttributes swa;
- XClientMessageEvent *cme = &e->xclient;
- Client *c = wintoclient(cme->window);
-
-+ if (showsystray && cme->window == systray->win && cme->message_type =…
-+ /* add systray icons */
-+ if (cme->data.l[1] == SYSTEM_TRAY_REQUEST_DOCK) {
-+ if (!(c = (Client *)calloc(1, sizeof(Client))))
-+ die("fatal: could not malloc() %u bytes\n", s…
-+ if (!(c->win = cme->data.l[2])) {
-+ free(c);
-+ return;
-+ }
-+ c->mon = selmon;
-+ c->next = systray->icons;
-+ systray->icons = c;
-+ if (!XGetWindowAttributes(dpy, c->win, &wa)) {
-+ /* use sane defaults */
-+ wa.width = bh;
-+ wa.height = bh;
-+ wa.border_width = 0;
-+ }
-+ c->x = c->oldx = c->y = c->oldy = 0;
-+ c->w = c->oldw = wa.width;
-+ c->h = c->oldh = wa.height;
-+ c->oldbw = wa.border_width;
-+ c->bw = 0;
-+ c->isfloating = True;
-+ /* reuse tags field as mapped status */
-+ c->tags = 1;
-+ updatesizehints(c);
-+ updatesystrayicongeom(c, wa.width, wa.height);
-+ XAddToSaveSet(dpy, c->win);
-+ XSelectInput(dpy, c->win, StructureNotifyMask | Prope…
-+ XReparentWindow(dpy, c->win, systray->win, 0, 0);
-+ /* use parents background color */
-+ swa.background_pixel = scheme[SchemeNorm][ColBg].pix…
-+ XChangeWindowAttributes(dpy, c->win, CWBackPixel, &sw…
-+ sendevent(c->win, netatom[Xembed], StructureNotifyMas…
-+ /* FIXME not sure if I have to send these events, too…
-+ sendevent(c->win, netatom[Xembed], StructureNotifyMas…
-+ sendevent(c->win, netatom[Xembed], StructureNotifyMas…
-+ sendevent(c->win, netatom[Xembed], StructureNotifyMas…
-+ XSync(dpy, False);
-+ resizebarwin(selmon);
-+ updatesystray();
-+ setclientstate(c, NormalState);
-+ }
-+ return;
-+ }
-+
- if (!c)
- return;
- if (cme->message_type == netatom[NetWMState]) {
-@@ -571,7 +659,7 @@ configurenotify(XEvent *e)
- for (c = m->clients; c; c = c->next)
- if (c->isfullscreen)
- resizeclient(c, m->mx, m->my,…
-- XMoveResizeWindow(dpy, m->barwin, m->wx, m->b…
-+ resizebarwin(m);
- }
- focus(NULL);
- arrange(NULL);
-@@ -656,6 +744,11 @@ destroynotify(XEvent *e)
-
- if ((c = wintoclient(ev->window)))
- unmanage(c, 1);
-+ else if ((c = wintosystrayicon(ev->window))) {
-+ removesystrayicon(c);
-+ resizebarwin(selmon);
-+ updatesystray();
-+ }
- }
-
- void
-@@ -699,7 +792,7 @@ dirtomon(int dir)
- void
- drawbar(Monitor *m)
- {
-- int x, w, tw = 0;
-+ int x, w, tw = 0, stw = 0;
- int boxs = drw->fonts->h / 9;
- int boxw = drw->fonts->h / 6 + 2;
- unsigned int i, occ = 0, urg = 0;
-@@ -708,13 +801,17 @@ drawbar(Monitor *m)
- if (!m->showbar)
- return;
-
-+ if(showsystray && m == systraytomon(m) && !systrayonleft)
-+ stw = getsystraywidth();
-+
- /* draw status first so it can be overdrawn by tags later */
- if (m == selmon) { /* status is only drawn on selected monitor */
- drw_setscheme(drw, scheme[SchemeNorm]);
-- tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
-- drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
-+ tw = TEXTW(stext) - lrpad / 2 + 2; /* 2px extra right padding…
-+ drw_text(drw, m->ww - tw - stw, 0, tw, bh, lrpad / 2 - 2, ste…
- }
-
-+ resizebarwin(m);
- for (c = m->clients; c; c = c->next) {
- occ |= c->tags;
- if (c->isurgent)
-@@ -735,7 +832,7 @@ drawbar(Monitor *m)
- drw_setscheme(drw, scheme[SchemeNorm]);
- x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
-
-- if ((w = m->ww - tw - x) > bh) {
-+ if ((w = m->ww - tw - stw - x) > bh) {
- if (m->sel) {
- drw_setscheme(drw, scheme[m == selmon ? SchemeSel : S…
- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0…
-@@ -746,7 +843,7 @@ drawbar(Monitor *m)
- drw_rect(drw, x, 0, w, bh, 1, 1);
- }
- }
-- drw_map(drw, m->barwin, 0, 0, m->ww, bh);
-+ drw_map(drw, m->barwin, 0, 0, m->ww - stw, bh);
- }
-
- void
-@@ -783,8 +880,11 @@ expose(XEvent *e)
- Monitor *m;
- XExposeEvent *ev = &e->xexpose;
-
-- if (ev->count == 0 && (m = wintomon(ev->window)))
-+ if (ev->count == 0 && (m = wintomon(ev->window))) {
- drawbar(m);
-+ if (m == selmon)
-+ updatesystray();
-+ }
- }
-
- void
-@@ -870,14 +970,32 @@ getatomprop(Client *c, Atom prop)
- unsigned char *p = NULL;
- Atom da, atom = None;
-
-- if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_…
-+ /* FIXME getatomprop should return the number of items and a pointer …
-+ * the stored data instead of this workaround */
-+ Atom req = XA_ATOM;
-+ if (prop == xatom[XembedInfo])
-+ req = xatom[XembedInfo];
-+
-+ if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, req,
- &da, &di, &dl, &dl, &p) == Success && p) {
- atom = *(Atom *)p;
-+ if (da == xatom[XembedInfo] && dl == 2)
-+ atom = ((Atom *)p)[1];
- XFree(p);
- }
- return atom;
- }
-
-+unsigned int
-+getsystraywidth()
-+{
-+ unsigned int w = 0;
-+ Client *i;
-+ if(showsystray)
-+ for(i = systray->icons; i; w += i->w + systrayspacing, i = i-…
-+ return w ? w + systrayspacing : 1;
-+}
-+
- int
- getrootptr(int *x, int *y)
- {
-@@ -1018,7 +1136,8 @@ killclient(const Arg *arg)
- {
- if (!selmon->sel)
- return;
-- if (!sendevent(selmon->sel, wmatom[WMDelete])) {
-+
-+ if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmato…
- XGrabServer(dpy);
- XSetErrorHandler(xerrordummy);
- XSetCloseDownMode(dpy, DestroyAll);
-@@ -1105,6 +1224,13 @@ maprequest(XEvent *e)
- static XWindowAttributes wa;
- XMapRequestEvent *ev = &e->xmaprequest;
-
-+ Client *i;
-+ if ((i = wintosystrayicon(ev->window))) {
-+ sendevent(i->win, netatom[Xembed], StructureNotifyMask, Curre…
-+ resizebarwin(selmon);
-+ updatesystray();
-+ }
-+
- if (!XGetWindowAttributes(dpy, ev->window, &wa) || wa.override_redire…
- return;
- if (!wintoclient(ev->window))
-@@ -1226,6 +1352,17 @@ propertynotify(XEvent *e)
- Window trans;
- XPropertyEvent *ev = &e->xproperty;
-
-+ if ((c = wintosystrayicon(ev->window))) {
-+ if (ev->atom == XA_WM_NORMAL_HINTS) {
-+ updatesizehints(c);
-+ updatesystrayicongeom(c, c->w, c->h);
-+ }
-+ else
-+ updatesystrayiconstate(c, ev);
-+ resizebarwin(selmon);
-+ updatesystray();
-+ }
-+
- if ((ev->window == root) && (ev->atom == XA_WM_NAME))
- updatestatus();
- else if (ev->state == PropertyDelete)
-@@ -1276,6 +1413,19 @@ recttomon(int x, int y, int w, int h)
- return r;
- }
-
-+void
-+removesystrayicon(Client *i)
-+{
-+ Client **ii;
-+
-+ if (!showsystray || !i)
-+ return;
-+ for (ii = &systray->icons; *ii && *ii != i; ii = &(*ii)->next);
-+ if (ii)
-+ *ii = i->next;
-+ free(i);
-+}
-+
- void
- resize(Client *c, int x, int y, int w, int h, int interact)
- {
-@@ -1283,6 +1433,14 @@ resize(Client *c, int x, int y, int w, int h, int inter…
- resizeclient(c, x, y, w, h);
- }
-
-+void
-+resizebarwin(Monitor *m) {
-+ unsigned int w = m->ww;
-+ if (showsystray && m == systraytomon(m) && !systrayonleft)
-+ w -= getsystraywidth();
-+ XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, w, bh);
-+}
-+
- void
- resizeclient(Client *c, int x, int y, int w, int h)
- {
-@@ -1298,6 +1456,19 @@ resizeclient(Client *c, int x, int y, int w, int h)
- XSync(dpy, False);
- }
-
-+void
-+resizerequest(XEvent *e)
-+{
-+ XResizeRequestEvent *ev = &e->xresizerequest;
-+ Client *i;
-+
-+ if ((i = wintosystrayicon(ev->window))) {
-+ updatesystrayicongeom(i, ev->width, ev->height);
-+ resizebarwin(selmon);
-+ updatesystray();
-+ }
-+}
-+
- void
- resizemouse(const Arg *arg)
- {
-@@ -1444,26 +1615,37 @@ setclientstate(Client *c, long state)
- }
-
- int
--sendevent(Client *c, Atom proto)
-+sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3,…
- {
- int n;
-- Atom *protocols;
-+ Atom *protocols, mt;
- int exists = 0;
- XEvent ev;
-
-- if (XGetWMProtocols(dpy, c->win, &protocols, &n)) {
-- while (!exists && n--)
-- exists = protocols[n] == proto;
-- XFree(protocols);
-+ if (proto == wmatom[WMTakeFocus] || proto == wmatom[WMDelete]) {
-+ mt = wmatom[WMProtocols];
-+ if (XGetWMProtocols(dpy, w, &protocols, &n)) {
-+ while (!exists && n--)
-+ exists = protocols[n] == proto;
-+ XFree(protocols);
-+ }
-+ }
-+ else {
-+ exists = True;
-+ mt = proto;
- }
-+
- if (exists) {
- ev.type = ClientMessage;
-- ev.xclient.window = c->win;
-- ev.xclient.message_type = wmatom[WMProtocols];
-+ ev.xclient.window = w;
-+ ev.xclient.message_type = mt;
- ev.xclient.format = 32;
-- ev.xclient.data.l[0] = proto;
-- ev.xclient.data.l[1] = CurrentTime;
-- XSendEvent(dpy, c->win, False, NoEventMask, &ev);
-+ ev.xclient.data.l[0] = d0;
-+ ev.xclient.data.l[1] = d1;
-+ ev.xclient.data.l[2] = d2;
-+ ev.xclient.data.l[3] = d3;
-+ ev.xclient.data.l[4] = d4;
-+ XSendEvent(dpy, w, False, mask, &ev);
- }
- return exists;
- }
-@@ -1477,7 +1659,7 @@ setfocus(Client *c)
- XA_WINDOW, 32, PropModeReplace,
- (unsigned char *) &(c->win), 1);
- }
-- sendevent(c, wmatom[WMTakeFocus]);
-+ sendevent(c->win, wmatom[WMTakeFocus], NoEventMask, wmatom[WMTakeFocu…
- }
-
- void
-@@ -1566,6 +1748,10 @@ setup(void)
- wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
- netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", Fal…
- netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
-+ netatom[NetSystemTray] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_S0", Fals…
-+ netatom[NetSystemTrayOP] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_OPCODE"…
-+ netatom[NetSystemTrayOrientation] = XInternAtom(dpy, "_NET_SYSTEM_TRA…
-+ netatom[NetSystemTrayOrientationHorz] = XInternAtom(dpy, "_NET_SYSTEM…
- netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
- netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
- netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", Fa…
-@@ -1573,6 +1759,9 @@ setup(void)
- netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", Fa…
- netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYP…
- netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
-+ xatom[Manager] = XInternAtom(dpy, "MANAGER", False);
-+ xatom[Xembed] = XInternAtom(dpy, "_XEMBED", False);
-+ xatom[XembedInfo] = XInternAtom(dpy, "_XEMBED_INFO", False);
- /* init cursors */
- cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
- cursor[CurResize] = drw_cur_create(drw, XC_sizing);
-@@ -1581,6 +1770,8 @@ setup(void)
- scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
- for (i = 0; i < LENGTH(colors); i++)
- scheme[i] = drw_scm_create(drw, colors[i], 3);
-+ /* init system tray */
-+ updatesystray();
- /* init bars */
- updatebars();
- updatestatus();
-@@ -1711,7 +1902,18 @@ togglebar(const Arg *arg)
- {
- selmon->showbar = !selmon->showbar;
- updatebarpos(selmon);
-- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon…
-+ resizebarwin(selmon);
-+ if (showsystray) {
-+ XWindowChanges wc;
-+ if (!selmon->showbar)
-+ wc.y = -bh;
-+ else if (selmon->showbar) {
-+ wc.y = 0;
-+ if (!selmon->topbar)
-+ wc.y = selmon->mh - bh;
-+ }
-+ XConfigureWindow(dpy, systray->win, CWY, &wc);
-+ }
- arrange(selmon);
- }
-
-@@ -1807,11 +2009,18 @@ unmapnotify(XEvent *e)
- else
- unmanage(c, 0);
- }
-+ else if ((c = wintosystrayicon(ev->window))) {
-+ /* KLUDGE! sometimes icons occasionally unmap their windows, …
-+ * _not_ destroy them. We map those windows back */
-+ XMapRaised(dpy, c->win);
-+ updatesystray();
-+ }
- }
-
- void
- updatebars(void)
- {
-+ unsigned int w;
- Monitor *m;
- XSetWindowAttributes wa = {
- .override_redirect = True,
-@@ -1822,10 +2031,15 @@ updatebars(void)
- for (m = mons; m; m = m->next) {
- if (m->barwin)
- continue;
-- m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh,…
-+ w = m->ww;
-+ if (showsystray && m == systraytomon(m))
-+ w -= getsystraywidth();
-+ m->barwin = XCreateWindow(dpy, root, m->wx, m->by, w, bh, 0, …
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect|CWBackPixmap|CWEventMask, …
- XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
-+ if (showsystray && m == systraytomon(m))
-+ XMapRaised(dpy, systray->win);
- XMapRaised(dpy, m->barwin);
- XSetClassHint(dpy, m->barwin, &ch);
- }
-@@ -2002,6 +2216,125 @@ updatestatus(void)
- if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
- strcpy(stext, "dwm-"VERSION);
- drawbar(selmon);
-+ updatesystray();
-+}
-+
-+
-+void
-+updatesystrayicongeom(Client *i, int w, int h)
-+{
-+ if (i) {
-+ i->h = bh;
-+ if (w == h)
-+ i->w = bh;
-+ else if (h == bh)
-+ i->w = w;
-+ else
-+ i->w = (int) ((float)bh * ((float)w / (float)h));
-+ applysizehints(i, &(i->x), &(i->y), &(i->w), &(i->h), False);
-+ /* force icons into the systray dimensions if they don't want…
-+ if (i->h > bh) {
-+ if (i->w == i->h)
-+ i->w = bh;
-+ else
-+ i->w = (int) ((float)bh * ((float)i->w / (flo…
-+ i->h = bh;
-+ }
-+ }
-+}
-+
-+void
-+updatesystrayiconstate(Client *i, XPropertyEvent *ev)
-+{
-+ long flags;
-+ int code = 0;
-+
-+ if (!showsystray || !i || ev->atom != xatom[XembedInfo] ||
-+ !(flags = getatomprop(i, xatom[XembedInfo])))
-+ return;
-+
-+ if (flags & XEMBED_MAPPED && !i->tags) {
-+ i->tags = 1;
-+ code = XEMBED_WINDOW_ACTIVATE;
-+ XMapRaised(dpy, i->win);
-+ setclientstate(i, NormalState);
-+ }
-+ else if (!(flags & XEMBED_MAPPED) && i->tags) {
-+ i->tags = 0;
-+ code = XEMBED_WINDOW_DEACTIVATE;
-+ XUnmapWindow(dpy, i->win);
-+ setclientstate(i, WithdrawnState);
-+ }
-+ else
-+ return;
-+ sendevent(i->win, xatom[Xembed], StructureNotifyMask, CurrentTime, co…
-+ systray->win, XEMBED_EMBEDDED_VERSION);
-+}
-+
-+void
-+updatesystray(void)
-+{
-+ XSetWindowAttributes wa;
-+ XWindowChanges wc;
-+ Client *i;
-+ Monitor *m = systraytomon(NULL);
-+ unsigned int x = m->mx + m->mw;
-+ unsigned int sw = TEXTW(stext) - lrpad + systrayspacing;
-+ unsigned int w = 1;
-+
-+ if (!showsystray)
-+ return;
-+ if (systrayonleft)
-+ x -= sw + lrpad / 2;
-+ if (!systray) {
-+ /* init systray */
-+ if (!(systray = (Systray *)calloc(1, sizeof(Systray))))
-+ die("fatal: could not malloc() %u bytes\n", sizeof(Sy…
-+ systray->win = XCreateSimpleWindow(dpy, root, x, m->by, w, bh…
-+ wa.event_mask = ButtonPressMask | ExposureMask;
-+ wa.override_redirect = True;
-+ wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
-+ XSelectInput(dpy, systray->win, SubstructureNotifyMask);
-+ XChangeProperty(dpy, systray->win, netatom[NetSystemTrayOrien…
-+ PropModeReplace, (unsigned char *)&netatom[Ne…
-+ XChangeWindowAttributes(dpy, systray->win, CWEventMask|CWOver…
-+ XMapRaised(dpy, systray->win);
-+ XSetSelectionOwner(dpy, netatom[NetSystemTray], systray->win,…
-+ if (XGetSelectionOwner(dpy, netatom[NetSystemTray]) == systra…
-+ sendevent(root, xatom[Manager], StructureNotifyMask, …
-+ XSync(dpy, False);
-+ }
-+ else {
-+ fprintf(stderr, "dwm: unable to obtain system tray.\n…
-+ free(systray);
-+ systray = NULL;
-+ return;
-+ }
-+ }
-+ for (w = 0, i = systray->icons; i; i = i->next) {
-+ /* make sure the background color stays the same */
-+ wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
-+ XChangeWindowAttributes(dpy, i->win, CWBackPixel, &wa);
-+ XMapRaised(dpy, i->win);
-+ w += systrayspacing;
-+ i->x = w;
-+ XMoveResizeWindow(dpy, i->win, i->x, 0, i->w, i->h);
-+ w += i->w;
-+ if (i->mon != m)
-+ i->mon = m;
-+ }
-+ w = w ? w + systrayspacing : 1;
-+ x -= w;
-+ XMoveResizeWindow(dpy, systray->win, x, m->by, w, bh);
-+ wc.x = x; wc.y = m->by; wc.width = w; wc.height = bh;
-+ wc.stack_mode = Above; wc.sibling = m->barwin;
-+ XConfigureWindow(dpy, systray->win, CWX|CWY|CWWidth|CWHeight|CWSiblin…
-+ XMapWindow(dpy, systray->win);
-+ XMapSubwindows(dpy, systray->win);
-+ /* redraw background */
-+ XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
-+ XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh);
-+ XSync(dpy, False);
- }
-
- void
-@@ -2069,6 +2402,16 @@ wintoclient(Window w)
- return NULL;
- }
-
-+Client *
-+wintosystrayicon(Window w) {
-+ Client *i = NULL;
-+
-+ if (!showsystray || !w)
-+ return i;
-+ for (i = systray->icons; i && i->win != w; i = i->next) ;
-+ return i;
-+}
-+
- Monitor *
- wintomon(Window w)
- {
-@@ -2122,6 +2465,22 @@ xerrorstart(Display *dpy, XErrorEvent *ee)
- return -1;
- }
-
-+Monitor *
-+systraytomon(Monitor *m) {
-+ Monitor *t;
-+ int i, n;
-+ if(!systraypinning) {
-+ if(!m)
-+ return selmon;
-+ return m == selmon ? m : NULL;
-+ }
-+ for(n = 1, t = mons; t && t->next; n++, t = t->next) ;
-+ for(i = 1, t = mons; t && t->next && i < systraypinning; i++, t = t->…
-+ if(systraypinningfailfirst && n < systraypinning)
-+ return mons;
-+ return t;
-+}
-+
- void
- zoom(const Arg *arg)
- {
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/slstatus/Makefile b/suckless/slstatus/Makefile
@@ -1,35 +0,0 @@
-REPOSITORY = git://git.suckless.org/slstatus
-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/slstatus/config.h b/suckless/slstatus/config.h
@@ -1,71 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-
-/* interval between updates (in ms) */
-const unsigned int interval = 1000;
-
-/* text to show if no value can be retrieved */
-static const char unknown_str[] = "n/a";
-
-/* maximum output string length */
-#define MAXLEN 2048
-
-/*
- * function description argument (example)
- *
- * battery_perc battery percentage battery name (BAT0)
- * NULL on OpenBSD/FreeBSD
- * battery_remaining battery remaining HH:MM battery name (BAT0)
- * NULL on OpenBSD/FreeBSD
- * battery_state battery charging state battery name (BAT0)
- * NULL on OpenBSD/FreeBSD
- * cat read arbitrary file path
- * cpu_freq cpu frequency in MHz NULL
- * cpu_perc cpu usage in percent NULL
- * datetime date and time format string (%F %T)
- * disk_free free disk space in GB mountpoint path (/)
- * disk_perc disk usage in percent mountpoint path (/)
- * disk_total total disk space in GB mountpoint path (/)
- * disk_used used disk space in GB mountpoint path (/)
- * entropy available entropy NULL
- * gid GID of current user NULL
- * hostname hostname NULL
- * ipv4 IPv4 address interface name (eth0)
- * ipv6 IPv6 address interface name (eth0)
- * kernel_release `uname -r` NULL
- * keyboard_indicators caps/num lock indicators format string (c?n?)
- * see keyboard_indicators…
- * keymap layout (variant) of current NULL
- * keymap
- * load_avg load average NULL
- * netspeed_rx receive network speed interface name (wlan0)
- * netspeed_tx transfer network speed interface name (wlan0)
- * num_files number of files in a directory path
- * (/home/foo/Inbox/cur)
- * ram_free free memory in GB NULL
- * ram_perc memory usage in percent NULL
- * ram_total total memory size in GB NULL
- * ram_used used memory in GB NULL
- * run_command custom shell command command (echo foo)
- * swap_free free swap in GB NULL
- * swap_perc swap usage in percent NULL
- * swap_total total swap size in GB NULL
- * swap_used used swap in GB NULL
- * temp temperature in degree celsius sensor file
- * (/sys/class/thermal/...)
- * NULL on OpenBSD
- * thermal zone on FreeBSD
- * (tz0, tz1, etc.)
- * uid UID of current user NULL
- * uptime system uptime NULL
- * username username of current user NULL
- * vol_perc OSS/ALSA volume in percent mixer file (/dev/mixer)
- * NULL on OpenBSD/FreeBSD
- * wifi_essid WiFi ESSID interface name (wlan0)
- * wifi_perc WiFi signal in percent interface name (wlan0)
- */
-static const struct arg args[] = {
- /* function format argument */
- { run_command, "VPN:%4s | ", "if [ `mullvad status|grep Disconnected` …
- { run_command, "VOL:%4s | ", "pactl list sinks | tr ' ' '\n' | grep -m…
- { datetime, "%s", "%T" },
-};
diff --git a/sway/config b/sway/config
@@ -0,0 +1,87 @@
+set $mod Mod1
+
+# colour theme
+set $colour #013220
+
+set $left h
+set $down j
+set $up k
+set $right l
+
+# apps
+set $term footclient -d none
+set $browser qutebrowser
+set $menu bemenu-run -n -p '> ' --tb '$colour' --tf '#ffffff' --hf '#444444'
+set $vol pamixer
+
+# autostart
+exec foot --server
+exec wl-paste -t text --watch clipman store --no-persist
+exec /usr/libexec/pipewire-launcher
+
+# appearance
+default_border none
+default_floating_border none
+workspace_layout tabbed
+font pango: Hack:style=Regular 2
+
+# misc
+xwayland enable
+bar swaybar_command waybar
+
+# Keyboard layout
+input * {
+ xkb_layout "gb"
+ xkb_variant "extd"
+}
+
+# monitors
+output HDMI-A-1 pos 0 0 res 1920x1080
+output DP-1 pos 1920 0 res 1920x1080
+#focus output DP-1
+
+# workspaces
+workspace 1 HDMI-A-1
+workspace 2 HDMI-A-1
+workspace 3 DP-1
+workspace 4 DP-1
+
+# Keybinds
+bindsym $mod+Space exec $term
+bindsym $mod+p exec $menu
+bindsym $mod+f exec $browser
+bindsym $mod+u exec $vol -i 5
+bindsym $mod+d exec $vol -d 5
+
+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
+bindsym $mod+w layout tabbed
+
+client.focused $colour $colour $colour
diff --git a/waybar/config b/waybar/config
@@ -0,0 +1,65 @@
+{
+ "layer": "top",
+ "position": "top",
+
+ "modules-left": [
+ "sway/workspaces",
+ "custom/right-arrow-dark"
+ ],
+
+ "modules-right": [
+ "custom/left-arrow-dark",
+ "custom/mail",
+ "custom/newsboat",
+ "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": 120,
+ "exec": "$HOME/.config/waybar/waybar_mail.sh",
+ "on-click": "foot mutt",
+ },
+
+ "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 @@
+#!/bin/sh
+
+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.