#+PROPERTY: header-args :mkdirp yes #+title:General-Use Scripts * Purpose This repo contains scripts that I like to have available from my $PATH #+TOC: headlines 2 * GUI-ish - Glue scripts for sxhkd / bspwm / polybar ** Dmenu_run_top - Dmenu configured how I like it *** TODO - test monospace instead of bitstream - remove flavours placeholder (once flavours is ready) - consider moving this to an alias #+begin_src sh :tangle ~/bin/dmenu_run_top #!/bin/sh # start flavours norm_fg="#C0C5CE" norm_bg="#1B2B34" sel_fg="#1B2B34" sel_bg="#99C794" # end flavours dmenu_run \ -i \ -fn BitstreamVeraSansMono:size=11 \ -l 15 \ -nf "$norm_fg" \ -nb "$norm_bg" \ -sf "$sel_fg" \ -sb "$sel_bg" #+end_src ** Dmenuunicode - Get emojis from dmenu *** TODO - make work on mac - recreate the emojis file and test #+begin_src sh :tangle ~/bin/dmenuunicode #!/bin/sh # Get user selection via dmenu from emoji file. chosen=$(cut -d ';' -f1 ~/.local/share/emoji | dmenu -i -l 30 | sed "s/ .*//") # Exit if none chosen. [ -z "$chosen" ] && exit # If you run this command with an argument, it will automatically insert the # character. Otherwise, show a message that the emoji has been copied. if [ -n "$1" ]; then xdotool type "$chosen" else printf "$chosen" | xclip -selection clipboard notify-send "'$chosen' copied to clipboard." & fi #+end_src ** Languagecycle - Cycle between a couple languages - Better handled through polybar probably *** TODO - Add support for 3+ languages #+begin_src fish :tangle ~/bin/languagecycle #!/usr/bin/fish if [ (xkblayout-state print "%n") = "Russian" ] setxkbmap -layout us else setxkbmap -layout ru end #+end_src ** Layoutcycle - Cycle windows between different layouts *** TODO - Currently this adds layouts to an endless list of layouts which can cause lag - This should be fixed but I'm not sure if I even like using alternate layouts #+begin_src fish :tangle ~/bin/layoutcycle #!/usr/bin/fish bsp-layout next --layouts tall,grid,rgrid,tiled set layout (bsp-layout get) if ps -aux | grep layoutcycle | grep -v grep exit else if [ $layout = "tall" ] notify-send -t 1000 "Layout: Tall" (echo \ " ______________ \n" \ " | |____| \n" \ " | |____| \n" \ " | |____| \n" \ " |________|____| " ) else if [ $layout = "grid" ] notify-send -t 1000 "Layout: hGrid" (echo \ " ____________ \n" \ " | | | | \n" \ " |___|___|___| \n" \ " | | | | \n" \ " |___|___|___| " ) else if [ $layout = "rgrid" ] vgrid notify-send -t 1000 "Layout: vGrid" (echo \ " ____________ \n" \ " |_____|_____| \n" \ " |_____|_____| \n" \ " |_____|_____| " ) else if [ $layout = "tiled" ] notify-send -t 1000 "Layout: Tiled" (echo \ " ______________ \n" \ " | | | \n" \ " | |____| \n" \ " | | | | \n" \ " |________|__|_| " ) end #+end_src * Appearance ** Colors > Taken from https://stackoverflow.com/questions/69138165/how-to-get-the-rgb-values-of-a-256-color-palette-terminal-color - Returns a representation of your currently set color scheme #+begin_src sh :tangle ~/bin/colors #!/bin/sh xdef="$HOME/.Xresources" colors=( $( sed -re '/^!/d; /^$/d; /^#/d; s/(\*color)([0-9]):/\10\2:/g;' $xdef | grep 'color[01][0-9]:' | sort | sed 's/^.*: *//g' ) ) echo for i in {0..7}; do echo -en "\e[$((30+$i))m ${colors[i]} \u2588\u2588 \e[0m\n"; done echo for i in {8..15}; do echo -en "\e[1;$((22+$i))m ${colors[i]} \u2588\u2588 \e[0m\n"; done echo -e "\n" #+end_src ** Gapcycle - Cycle between 3 window gap sizes I find aesthetic *** TODO - This is broken #+begin_src fish :tangle ~/bin/gapcycle #!/usr/bin/fish set gap (bspc config window_gap) if [ $gap = 40 ] set new_gap 18 else if [ $gap = 18 ] set new_gap 12 else if [ $gap = 12 ] set new_gap 0 else if [ $gap = 0 ] set new_gap 40 end bspc config window_gap $new_gap #+end_src ** Themepick - Broken in nix until I find an equivalent base16 theme setter and / or setup flavours #+begin_src fish :tangle ~/bin/themepick #!/usr/bin/fish set theme (flavours list | tr ' ' '\n' | dmenu) flavours apply $theme && eval ~/.config/base16-shell/scripts/base16-$theme.sh #+end_src ** Opaque-windows *** TODO - Handle this through lemonbar instead #+begin_src fish :tangle ~/bin/opaque-windows #!/usr/bin/fish if ps -aux | grep picom | grep -v grep pkill picom end #+end_src ** Transparent-windows #+begin_src fish :tangle ~/bin/transparent-windows #!/usr/bin/fish if ps -aux | grep picom | grep -v grep pkill picom end sleep 0.2 picom \ --conf /dev/null \ -i 0.8 \ --active-opacity 1.0 \ --focus-exclude "x = 0 && y = 0 && override_redirect = true" & #+end_src * Password Management - Some basic scripts to help gnu password-store suit my preferences ** Generate-passphrase - Generates a pseudo-random CorrectHorseBatteryStaple-style password - I prefer this for passwords I might have to type manually occasionally *** TODO - This may be better as an alias #+begin_src bash :tangle ~/bin/generate-passphrase #!/bin/bash shuf -n3 /usr/share/dict/words | tr -d '\n' #+end_src ** Passphrase - This more specifically inserts the generated passphrase into gnu pass #+begin_src fish :tangle ~/bin/passphrase #!/usr/bin/fish generate-passphrase | pass insert -e $argv #+end_src * Git ** Prune_local_branches *** TODO - Don't do this. Use a git alias. #+begin_src bash :tangle ~/bin/passphrase #!/bin/bash git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -r -n 1 git branch -D #+end_src * APIs ** Sugar - Get blood sugar from nightscout - Useful for gui integrations *** TODO - Remove lemobar, test with polybar - Handle API endpoint as a secret #+begin_src python :tangle ~/bin/sugar #!/usr/bin/python3 import sys import requests import json from termcolor import colored tmux = '--tmux' in sys.argv lemonbar = '--lb' in sys.argv down = '\u2193' # ↓ falling = '\u2798' # ➘ flat = '\u2192' # → rising = '\u279a' # ➚ up = '\u2191' # ↑ url = # TODO interpolate or parameterize options = '/api/v1/entries.json?count=1&token=phone-7631d7eebc79825b' try: res = requests.get(url + options) except: sys.exit() sugar = res.json()[0] delta = sugar['delta'] sgv = sugar['sgv'] direction = sugar['direction'] if delta < -10: arrow = down if delta >= -10 and delta < -1: arrow = falling if delta >= -1 and delta <= 1: arrow = flat if delta > 1 and delta <= 10: arrow = rising if delta > 10: arrow = up if (sgv >= 225 or sgv <= 80): color = 'red' elif ((sgv >= 180 and sgv <= 225) or (sgv <= 100 and sgv >= 80)): color = 'yellow' else: color = 'green' if tmux: print(f'#[bg={color}] ' + str(round(sugar['sgv'], 1)) + ' ' + arrow + ' ' + '(' + str(delta) + ')' ) elif lemonbar: print(str(round(sugar['sgv'], 1)) + ' ' + arrow + ' ' + '(' + str(delta) + ')' ) else: print(colored(str(sugar['sgv']) + ' ' + arrow + ' ' + '(' + str(delta) + ')', color)) #+end_src * Mac-specific ** Jbrowse *** TODO - Probably handle these as aliases #+begin_src sh :tangle ~/bin /Applications/Brave\ Browser.app/Contents/MacOS/Brave\ Browser "https://everblue.atlassian.net/browse/"$1 & #+end_src ** NotifyMe #+begin_src sh :tangle ~/bin osascript -e 'display notification "done!" with title "Notification"' #+end_src