summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bashrc49
-rw-r--r--.config/foot/foot.ini214
-rw-r--r--.config/kak/kakrc19
-rw-r--r--.config/sway/config255
-rwxr-xr-x.local/bin/rupload65
-rwxr-xr-x.local/bin/rws95
-rwxr-xr-x.local/bin/status.sh52
-rwxr-xr-x.local/bin/ud49
8 files changed, 798 insertions, 0 deletions
diff --git a/.bashrc b/.bashrc
new file mode 100644
index 0000000..d2d50e0
--- /dev/null
+++ b/.bashrc
@@ -0,0 +1,49 @@
+# .bashrc
+
+# If not running interactively, don't do anything
+[[ $- != *i* ]] && return
+
+alias ls='ls --color=auto'
+PS1='[\u@\h \W]\$ '
+
+poezio () { ~/soft/poezio/launch.sh; }
+
+alias xqr='xbps-query -R'
+alias xqrs='xbps-query -Rs'
+
+bind -s 'set completion-ignore-case on'
+
+runtimeify() {
+ sudo mkdir /run/user/1000
+ sudo chown rebecca:rebecca /run/user/1000
+ sudo chmod 700 /run/user/1000
+ export XDG_RUNTIME_DIR=/run/user/1000
+}
+
+alias vz='kak ~/.bashrc'
+alias sz='source ~/.bashrc'
+
+alias l='ls -lah'
+
+export SSH_AUTH_SOCK=/run/user/1000/ssh-agent.sock
+( pgrep -u $USER ssh-agent || ssh-agent -a $SSH_AUTH_SOCK ; ) >/dev/null
+
+export XDG_CONFIG_HOME=$HOME/.config
+
+apwd () {
+ pwd | sed -e 's!'"$HOME"'!~!'
+}
+
+set_title () { printf "\e]2;%s\e\\" "$1"; }
+_lastcmd () { history 1 | sed -e 's/^ *[0-9]* *//g' ; }
+trap 'set_title "$(_lastcmd)"' DEBUG
+PROMPT_COMMAND='set_title "$(apwd)"'
+
+add_path () {
+ export PATH="$1:$PATH"
+}
+
+add_path ~/.local/bin
+
+. ~/.local/bin/rws
+gowork
diff --git a/.config/foot/foot.ini b/.config/foot/foot.ini
new file mode 100644
index 0000000..4965b4b
--- /dev/null
+++ b/.config/foot/foot.ini
@@ -0,0 +1,214 @@
+# -*- conf -*-
+
+# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
+# term=foot (or xterm-256color if built with -Dterminfo=disabled)
+# login-shell=no
+
+# app-id=foot
+# title=foot
+# locked-title=no
+
+font=Iosevka Fixed:size=8
+# font=monospace:size=8
+# font-bold=<bold variant of regular font>
+# font-italic=<italic variant of regular font>
+# font-bold-italic=<bold+italic variant of regular font>
+# line-height=<font metrics>
+# letter-spacing=0
+# horizontal-letter-offset=0
+# vertical-letter-offset=0
+# underline-offset=<font metrics>
+# box-drawings-uses-font-glyphs=no
+# dpi-aware=auto
+
+# initial-window-size-pixels=700x500 # Or,
+# initial-window-size-chars=<COLSxROWS>
+# initial-window-mode=windowed
+# pad=2x2 # optionally append 'center'
+# resize-delay-ms=100
+
+# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
+
+# bold-text-in-bright=no
+# word-delimiters=,│`|:"'()[]{}<>
+# selection-target=primary
+# workers=<number of logical CPUs>
+
+[environment]
+# name=value
+
+[bell]
+# urgent=no
+# notify=no
+# command=
+# command-focused=no
+
+[scrollback]
+# lines=1000
+# multiplier=3.0
+# indicator-position=relative
+# indicator-format=
+
+[url]
+launch=firefox-wayland ${url}
+# launch=xdg-open ${url}
+# label-letters=sadfjklewcmpgh
+# osc8-underline=url-mode
+# protocols=http, https, ftp, ftps, file, gemini, gopher
+# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
+
+[cursor]
+# style=block
+# color=<inverse foreground/background>
+# blink=no
+# beam-thickness=1.5
+# underline-thickness=<font underline thickness>
+
+[mouse]
+# hide-when-typing=no
+# alternate-scroll-mode=yes
+
+[colors]
+# alpha=1.0
+foreground=dcdccc
+background=000000
+
+regular0=000000
+regular1=cd0000
+regular2=00cd00
+regular3=ffa500
+regular4=1e90ff
+regular5=cd00cd
+regular6=00cdcd
+regular7=e5e5e5
+
+bright0=7f7f7f
+bright1=ff0000
+bright2=00ff00
+bright3=ffff00
+bright4=5c5cff
+bright5=ff00ff
+bright6=00ffff
+bright7=ffffff
+## Normal/regular colors (color palette 0-7)
+# regular0=222222 # black
+# regular1=cc9393 # red
+# regular2=7f9f7f # green
+# regular3=d0bf8f # yellow
+# regular4=6ca0a3 # blue
+# regular5=dc8cc3 # magenta
+# regular6=93e0e3 # cyan
+# regular7=dcdccc # white
+
+## Bright colors (color palette 8-15)
+# bright0=666666 # bright black
+# bright1=dca3a3 # bright red
+# bright2=bfebbf # bright green
+# bright3=f0dfaf # bright yellow
+# bright4=8cd0d3 # bright blue
+# bright5=fcace3 # bright magenta
+# bright6=b3ffff # bright cyan
+# bright7=ffffff # bright white
+
+## dimmed colors (see foot.ini(5) man page)
+# dim0=<not set>
+# ...
+# dim7=<not-set>
+
+## The remaining 256-color palette
+# 16 = <256-color palette #16>
+# ...
+# 255 = <256-color palette #255>
+
+## Misc colors
+# selection-foreground=<inverse foreground/background>
+# selection-background=<inverse foreground/background>
+# jump-labels=<regular0> <regular3> # black-on-yellow
+# scrollback-indicator=<regular0> <bright4> # black-on-bright-blue
+# search-box-no-match=<regular0> <regular1> # black-on-red
+# search-box-match=<regular0> <regular3> # black-on-yellow
+# urls=<regular3>
+
+[csd]
+# preferred=server
+# size=26
+# font=<primary font>
+# color=<foreground color>
+# hide-when-typing=no
+# border-width=0
+# border-color=<csd.color>
+# button-width=26
+# button-color=<background color>
+# button-minimize-color=<regular4>
+# button-maximize-color=<regular2>
+# button-close-color=<regular1>
+
+[key-bindings]
+# scrollback-up-page=Shift+Page_Up
+# scrollback-up-half-page=none
+# scrollback-up-line=none
+# scrollback-down-page=Shift+Page_Down
+# scrollback-down-half-page=none
+# scrollback-down-line=none
+# clipboard-copy=Control+Shift+c XF86Copy
+# clipboard-paste=Control+Shift+v XF86Paste
+# primary-paste=Shift+Insert
+# search-start=Control+Shift+r
+# font-increase=Control+plus Control+equal Control+KP_Add
+# font-decrease=Control+minus Control+KP_Subtract
+# font-reset=Control+0 Control+KP_0
+# spawn-terminal=Control+Shift+n
+# minimize=none
+# maximize=none
+# fullscreen=none
+# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
+# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
+# pipe-selected=[xargs -r firefox] none
+# show-urls-launch=Control+Shift+u
+# show-urls-copy=none
+# show-urls-persistent=none
+# prompt-prev=Control+Shift+z
+# prompt-next=Control+Shift+x
+# unicode-input=none
+# noop=none
+
+[search-bindings]
+# cancel=Control+g Control+c Escape
+# commit=Return
+# find-prev=Control+r
+# find-next=Control+s
+# cursor-left=Left Control+b
+# cursor-left-word=Control+Left Mod1+b
+# cursor-right=Right Control+f
+# cursor-right-word=Control+Right Mod1+f
+# cursor-home=Home Control+a
+# cursor-end=End Control+e
+# delete-prev=BackSpace
+# delete-prev-word=Mod1+BackSpace Control+BackSpace
+# delete-next=Delete
+# delete-next-word=Mod1+d Control+Delete
+# extend-to-word-boundary=Control+w
+# extend-to-next-whitespace=Control+Shift+w
+# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
+# primary-paste=Shift+Insert
+# unicode-input=none
+
+[url-bindings]
+# cancel=Control+g Control+c Control+d Escape
+# toggle-url-visible=t
+
+[text-bindings]
+# \x03=Mod4+c # Map Super+c -> Ctrl+c
+
+[mouse-bindings]
+# selection-override-modifiers=Shift
+# primary-paste=BTN_MIDDLE
+# select-begin=BTN_LEFT
+# select-begin-block=Control+BTN_LEFT
+# select-extend=BTN_RIGHT
+# select-extend-character-wise=Control+BTN_RIGHT
+# select-word=BTN_LEFT-2
+# select-word-whitespace=Control+BTN_LEFT-2
+# select-row=BTN_LEFT-3
+
+# vim: ft=dosini
diff --git a/.config/kak/kakrc b/.config/kak/kakrc
new file mode 100644
index 0000000..52a8a45
--- /dev/null
+++ b/.config/kak/kakrc
@@ -0,0 +1,19 @@
+add-highlighter global/ number-lines -relative
+addhl global/ wrap -word
+set -add global ui_options terminal_assistant=none
+set -add global ui_options terminal_status_on_top=true
+
+set global indentwidth 0
+set global tabstop 4
+
+hook global WinSetOption filetype=python %{
+ set window indentwidth 4
+ hook -once -always window WinSetOption filetype=.* %{
+ set window indentwidth 0
+ }
+}
+
+
+map global user <c> ':comment-line<ret>' -docstring 'comment line'
+map global user <x> '<a-|>wl-copy<ret>' -docstring 'wl-copy'
+
diff --git a/.config/sway/config b/.config/sway/config
new file mode 100644
index 0000000..77dad32
--- /dev/null
+++ b/.config/sway/config
@@ -0,0 +1,255 @@
+# Default config for sway
+#
+# Copy this to ~/.config/sway/config and edit it to your liking.
+#
+# Read `man 5 sway` for a complete reference.
+
+### Variables
+#
+# Logo key. Use Mod1 for Alt.
+set $mod Mod4
+# Home row direction keys, like vim
+set $left h
+set $down j
+set $up k
+set $right l
+# Your preferred terminal emulator
+set $term foot
+# Your preferred application launcher
+# Note: pass the final command to swaymsg so that the resulting window can be opened
+# on the original workspace that the command was run on.
+set $menu bemenu-run | xargs swaymsg exec --
+
+### Output configuration
+#
+# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
+output * bg /home/rebecca/Pictures/lagana.png stretch
+#
+# Example configuration:
+#
+# output HDMI-A-1 resolution 1920x1080 position 1920,0
+#
+# You can get the names of your outputs by running: swaymsg -t get_outputs
+
+### Idle configuration
+#
+# Example configuration:
+#
+# exec swayidle -w \
+# timeout 300 'swaylock -f -c 000000' \
+# timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
+# before-sleep 'swaylock -f -c 000000'
+#
+# This will lock your screen after 300 seconds of inactivity, then turn off
+# your displays after another 300 seconds, and turn your screens back on when
+# resumed. It will also lock your screen before your computer goes to sleep.
+
+### Input configuration
+#
+# Example configuration:
+#
+# input "2:14:SynPS/2_Synaptics_TouchPad" {
+# dwt enabled
+# tap enabled
+# natural_scroll enabled
+# middle_emulation enabled
+# }
+#
+# You can get the names of your inputs by running: swaymsg -t get_inputs
+# Read `man 5 sway-input` for more information about this section.
+
+input * {
+ xkb_layout "gb,gb"
+ xkb_variant "dvorak,"
+ xkb_options "grp:shifts_toggle,caps:swapescape"
+}
+
+### Key bindings
+#
+# Basics:
+#
+ # Start a terminal
+ bindsym $mod+Return exec $term
+
+ # Kill focused window
+ bindsym $mod+Shift+q kill
+
+ # Start your launcher
+ bindsym $mod+d exec $menu
+
+ # Drag floating windows by holding down $mod and left mouse button.
+ # Resize them with right mouse button + $mod.
+ # Despite the name, also works for non-floating windows.
+ # Change normal to inverse to use left mouse button for resizing and right
+ # mouse button for dragging.
+ floating_modifier $mod normal
+
+ # Reload the configuration file
+ bindsym $mod+Shift+c reload
+
+ # Exit sway (logs you out of your Wayland session)
+ bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
+#
+# Moving around:
+#
+ # 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
+
+ # Move the focused window with the same, but add Shift
+ bindsym $mod+Shift+$left move left
+ bindsym $mod+Shift+$down move down
+ bindsym $mod+Shift+$up move up
+ bindsym $mod+Shift+$right move right
+ # Ditto, with arrow keys
+ bindsym $mod+Shift+Left move left
+ bindsym $mod+Shift+Down move down
+ bindsym $mod+Shift+Up move up
+ bindsym $mod+Shift+Right move right
+#
+# Workspaces:
+#
+ # 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+5 workspace number 5
+ bindsym $mod+6 workspace number 6
+ bindsym $mod+7 workspace number 7
+ bindsym $mod+8 workspace number 8
+ bindsym $mod+9 workspace number 9
+ bindsym $mod+0 workspace 0
+ # Move focused container to workspace
+ 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+Shift+5 move container to workspace number 5
+ bindsym $mod+Shift+6 move container to workspace number 6
+ bindsym $mod+Shift+7 move container to workspace number 7
+ bindsym $mod+Shift+8 move container to workspace number 8
+ bindsym $mod+Shift+9 move container to workspace number 9
+ bindsym $mod+Shift+0 move container to workspace 0
+ # Note: workspaces can have any name you want, not just numbers.
+ # We just use 1-10 as the default.
+#
+# Layout stuff:
+#
+ # You can "split" the current object of your focus with
+ # $mod+b or $mod+v, for horizontal and vertical splits
+ # respectively.
+ bindsym $mod+Shift+v splith
+ bindsym $mod+v splitv
+
+ # Switch the current container between different layout styles
+ bindsym $mod+s layout stacking
+ bindsym $mod+w layout tabbed
+ bindsym $mod+e layout toggle split
+
+ # Make the current focus fullscreen
+ bindsym $mod+f fullscreen
+
+ # Toggle the current focus between tiling and floating mode
+ bindsym $mod+Shift+space floating toggle
+
+ # Swap focus between the tiling area and the floating area
+ bindsym $mod+space focus mode_toggle
+
+ # Move focus to the parent container
+ bindsym $mod+a focus parent
+#
+# Scratchpad:
+#
+ # Sway has a "scratchpad", which is a bag of holding for windows.
+ # You can send windows there and get them back later.
+
+ # Move the currently focused window to the scratchpad
+ bindsym $mod+Shift+minus move scratchpad
+
+ # Show the next scratchpad window or hide the focused scratchpad window.
+ # If there are multiple scratchpad windows, this command cycles through them.
+ bindsym $mod+minus scratchpad show
+#
+# Resizing containers:
+#
+mode "resize" {
+ # left will shrink the containers width
+ # right will grow the containers width
+ # up will shrink the containers height
+ # down will grow the containers height
+ bindsym $left resize shrink width 40px
+ bindsym $down resize grow height 40px
+ bindsym $up resize shrink height 40px
+ bindsym $right resize grow width 40px
+
+ # Ditto, with arrow keys
+ bindsym Left resize shrink width 40px
+ bindsym Down resize grow height 40px
+ bindsym Up resize shrink height 40px
+ bindsym Right resize grow width 40px
+
+ # Return to default mode
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+bindsym $mod+r mode "resize"
+
+#
+# Status Bar:
+#
+# Read `man 5 sway-bar` for more information about this section.
+bar {
+ position bottom
+
+ separator_symbol ' :: '
+
+ # When the status_command prints a new line to stdout, swaybar updates.
+ # The default just shows the current date and time.
+ status_command ~/.local/bin/status.sh
+
+ colors {
+ statusline #ffffff
+ background #323232
+ inactive_workspace #434343 #323232 #5c5c5c
+ focused_workspace #df73ff #663399 #ffffff
+ }
+}
+
+# things from old i3 conf
+font pango:Iosevka Fixed 12
+
+bindsym $mod+Shift+f exec "firefox-wayland"
+bindsym $mod+b workspace back_and_forth
+bindsym $mod+Shift+b move container to workspace back_and_forth
+
+bindsym $mod+apostrophe exec rws -queryws
+bindsym $mod+Shift+apostrophe exec rws -queryws -m
+exec rws -listen
+
+bindsym $mod+bracketleft workspace prev
+bindsym $mod+bracketright workspace next
+bindsym $mod+Shift+bracketleft move container to workspace prev
+bindsym $mod+Shift+bracketright move container to workspace next
+
+set $lock swaylock -f --indicator-radius 400 --indicator-thickness 20 --ring-color df73ff --key-hl-color 663399 -K -c 000000
+bindsym $mod+o exec $lock
+bindsym $mod+Shift+o exec $lock && zzz
+
+bindsym XF86AudioRaiseVolume exec 'amixer set Master 5%+'
+bindsym XF86AudioLowerVolume exec 'amixer set Master 5%-'
+bindsym XF86AudioMute exec 'amixer set Master toggle'
+
+client.focused #663399 #663399 #ffffff
+
+bindsym Print exec slurp|grim -g- -|feh - -.wG -A'[upload]rupload -x png %F'
+
+include /etc/sway/config.d/*
+
diff --git a/.local/bin/rupload b/.local/bin/rupload
new file mode 100755
index 0000000..925fc0e
--- /dev/null
+++ b/.local/bin/rupload
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+if [ $# -eq 0 ]; then
+ printf '%s\n' "usage: $0 [-n] [-x override_ext] <filename>" >&2
+ printf '\t%s\n' "-n: dry run (don't actually upload anything)" >&2
+ printf '\t%s\n' "-x override_ext: set extension to override_ext on uploaded filename" >&2
+ exit 1
+fi
+
+dry_run=0
+while [ $# -gt 1 ]; do
+ if [ "$1" = "-x" ]; then
+ override_ext=".$2"
+ shift 2
+ elif [ "$1" = "-n" ]; then
+ dry_run=1
+ shift
+ fi
+done
+
+if [ ! -f "$1" ]; then
+ printf %s "$1: file does not exist" >&2
+ exit 1
+fi
+
+REMOTE="do"
+URLBASE="https://ubq323.website/files/"
+REMOTEDIR="/srv/web/ubq/files/"
+
+ext="${1#*.}"
+if [ "$ext" = "$1" ]; then
+ ext='.file'
+ bname="$(basename "$1")"
+else
+ ext=".$ext"
+ bname="$(basename "$1" "$ext")"
+fi
+ext=${override_ext:-$ext}
+
+rbname="$(md5sum "$1"|cut -d' ' -f1|tr 'a-z' 'A-Z'|basenc -d --base16|basenc --base64|head -c8)"
+rname="$rbname$ext"
+
+exists_already() {
+ ssh "$REMOTE" stat "$REMOTEDIR$1" 2>/dev/null >/dev/null
+ return $?
+}
+
+while exists_already "$rname"; do
+ printf "%s exists already\n" "$rname"
+ rbname="${rbname}_"
+ rname="$rbname$ext"
+done
+
+printf 'uploading to %s\n' "$rname"
+if [ "$dry_run" -eq 1 ]; then
+ echo dryrun, not uploading anything
+ exit 0
+fi
+
+scp "$1" "${REMOTE}:$REMOTEDIR$rname"
+ssh "$REMOTE" chmod a+r "$REMOTEDIR$rname"
+
+url="$URLBASE$rname"
+printf %s "$url" | wl-copy
+notify-send 'copied url to clipboard' "$url"
diff --git a/.local/bin/rws b/.local/bin/rws
new file mode 100755
index 0000000..ebee83c
--- /dev/null
+++ b/.local/bin/rws
@@ -0,0 +1,95 @@
+#!/bin/sh
+
+# rebecca workspace
+#
+# source this from your shell rc file
+# and also start rws -listen when you start sway
+
+
+WSD=$XDG_RUNTIME_DIR/ws
+mkdir -p $WSD
+
+
+
+wslist () {
+ # list workspaces, most-recently-used first
+ swaymsg -t get_workspaces | jq -rc '.[] | .name' | while read wsn; do
+ wsp=$WSD/"$(printf %s "$wsn" | base64)"
+ dt="$(stat -c '%Y' $wsp 2>/dev/null)"
+ if [ $? -eq 1 ]; then
+ dt=1
+ fi
+ printf "%s\t%s\n" "$dt" "$wsn"
+ done | sort -nr | cut -f2-
+}
+
+_escape() {
+ printf %s "$1" | sed -e 's*\\*\\\\*g' -e 's*"*\\"*g'
+}
+
+workin () {
+ # cds to the given directory, then moves focused window to workspace
+ # with that name
+ if [ ! -d "$1" ]; then
+ printf "not a directory\n" >&2
+ return 1
+ else
+ cd "$1"
+ dirname="$(_escape "$(apwd)")"
+ swaymsg "move container to workspace \"$dirname\""
+ swaymsg "workspace \"$dirname\""
+ fi
+}
+
+
+curws () {
+ # prints name of current workspace
+ swaymsg -t get_workspaces \
+ | jq -rc '.[] | select(.focused==true) | .name'
+}
+gowork() {
+ # cds to working directory for current workspace
+ d="$(curws|sed -e "s*^~*$HOME*")"
+ if [ -d "$d" ]; then
+ cd "$d" || return 1
+ fi
+}
+
+queryws () {
+ # uses bmenu to prompt for a workspace name, then switches to that workspace
+ # or if -m given, moves focused window to that workspace instead
+ wsn="$(wslist | bemenu -p workspace -l100 --fn 'Iosevka Fixed 16' --tf '#df73ff' --hf '#df73ff' --hb '#333333')"
+ [ -z "$wsn" ] && return
+
+ if [ "$1" = "-m" ]; then
+ swaymsg "move container to workspace \"$(_escape "$wsn")\""
+ else
+ swaymsg "workspace \"$(_escape "$wsn")\""
+ fi
+}
+
+
+_onswitch () {
+ wsb=$(printf %s "$1" | base64)
+ touch ${WSD}/$wsb
+}
+# run rws -listen to listen for workspace changes,
+# and keep track of that
+if [ "$1" = "-listen" ]; then
+ swaymsg -rmt subscribe '[ "workspace" ]' | while read line; do
+ wsn="$(printf %s "$line" | jq -rc '.current.name')"
+ printf "%s\n" "$wsn"
+ _onswitch "$wsn"
+ done
+fi
+
+# rws -queryws does the same thing as queryws
+# because it needs to be runnable from sway cfg in order to keybind something for it
+if [ "$1" = "-queryws" ]; then
+ shift
+ queryws $@
+fi
+
+
+
+
diff --git a/.local/bin/status.sh b/.local/bin/status.sh
new file mode 100755
index 0000000..5bd9e4c
--- /dev/null
+++ b/.local/bin/status.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+puts () {
+ printf %s "$1"
+}
+
+escape () {
+ printf %s "$1" | sed -e 's*\\*\\\\*g' -e 's!"!\\"!g'
+}
+
+block_basic () {
+ printf '{"full_text":"%s"},' "$1"
+}
+block_color () {
+ printf '{"full_text":"%s","color":"%s"},' "$1" "$2"
+}
+
+BDIR=/sys/class/power_supply/BAT0
+
+# header
+printf '%s\n' '{"version":1}'
+puts '['
+
+while true; do
+ puts '['
+
+ volinfo="$(amixer get Master | grep 'Mono:')"
+ vol_level="$(printf %s "$volinfo" | awk -F'[][]' '{print $2}')"
+ vol_enabled="$(printf %s "$volinfo" | awk -F'[][]' '{print $6}')"
+ color="#ffffff"; bl=""; br=""
+ [ "$vol_enabled" = "off" ] && { color="#ffff00"; bl="("; br=")"; }
+ block_color "vol $bl$vol_level$br" "$color"
+
+ bat_status="$(cat $BDIR/status | tr 'a-z' 'A-Z' | head -c 3)"
+ bat_level="$(cat $BDIR/capacity)"
+ color="#ffffff"
+ if [ "$bat_level" -le 10 ]; then
+ color="#ff0000"
+ elif [ "$bat_level" -le 25 ]; then
+ color="#ffff00"
+ fi
+ block_color "$bat_status $bat_level%" "$color"
+
+ date="$(date +'%a %Y-%m-%d %H:%M:%S')"
+ block_basic "$date"
+
+
+ puts '],'
+ sleep 1
+
+done
+
diff --git a/.local/bin/ud b/.local/bin/ud
new file mode 100755
index 0000000..a1a50ac
--- /dev/null
+++ b/.local/bin/ud
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+# unidump version 0.1.1
+# made by ubq323 in the year 2021
+# please use this software for GOOD, not for EVIL
+
+import unicodedata
+import sys
+
+uniquify = True
+arg=""
+args = sys.argv[1:]
+while len(args) > 0:
+ arg = args.pop(0)
+ if arg[0] != '-' or arg == "--":
+ break
+ if arg == "-a":
+ uniquify = False
+ arg = ""
+
+
+s = arg+" ".join(args)
+
+if len(s) == 0:
+ s = sys.stdin.read()
+
+def row(c):
+ try:
+ name = unicodedata.name(c).rjust(50)
+ except ValueError:
+ name = "?"*50
+
+ number = ("U+"+hex(ord(c))[2:].zfill(4)).rjust(7).upper()
+
+ to_c = c
+ if c == '\n':
+ to_c = ' '
+
+
+
+ return f"{to_c} | {unicodedata.category(c)} | {name} | {number}"
+
+seen = set()
+for c in s:
+ if uniquify:
+ if c in seen:
+ continue
+ seen.add(c)
+ print(row(c))