├── .bashrc ├── KEYS.md ├── config ├── X11 │ └── xinitrc ├── alacritty │ └── alacritty.toml ├── cmus │ └── autosave ├── dunst │ └── dunstrc ├── git │ └── config └── tmux │ └── tmux.conf ├── dwm ├── config.h ├── patch_nosquares.diff └── patch_notitles.diff ├── enterthevoid ├── enterthezoid ├── font ├── BlockZone.ttf ├── ohsnap6x11r.psfu ├── ohsnap7x12r.psfu └── ohsnap7x14r.psfu ├── local ├── bin │ └── scripts │ │ ├── art │ │ ├── cowboy.txt │ │ ├── htp.txt │ │ └── pussybones.txt │ │ ├── bomber │ │ ├── cmus-now │ │ ├── gitremote │ │ ├── gotimon │ │ ├── irc-post-commit-hook │ │ ├── mutag │ │ ├── pmf │ │ ├── shotz │ │ ├── statusbar │ │ ├── todo │ │ └── torwall └── share │ ├── bash │ ├── bash_aliases │ ├── bash_fun │ ├── bash_functions │ └── bash_recon │ └── gnupg │ └── gpg.conf └── setup /.bashrc: -------------------------------------------------------------------------------- 1 | [[ $- != *i* ]] && return 2 | 3 | export LC_CTYPE=en_US.UTF-8 4 | export LC_ALL=en_US.UTF-8 5 | 6 | export GNUPGHOME="$HOME/.local/share/gnupg" 7 | export GPG_TTY=$(tty) 8 | 9 | export GOPATH=$HOME/dev/go 10 | export CARGO_HOME=$HOME/dev/cargo 11 | export PATH=$PATH:/opt:$HOME/.local/bin:$HOME/dev/go/bin:$HOME/dev/cargo/bin:$GOPATH/bin 12 | 13 | export XINITRC="$HOME/.config/X11/xinitrc" 14 | 15 | for item in $(ls $HOME/.local/share/bash); do 16 | source $HOME/.local/share/bash/$item 17 | done 18 | 19 | if [ "$(id -u)" -eq 0 ]; then 20 | export PS1="\e[38;5;237m\T\e[0m \e[38;5;196m\u@\h\e[0m \e[38;5;226m\w \e[0m: " 21 | else 22 | export PS1="\e[38;5;237m\T\e[0m \e[38;5;41m\u@\h\e[0m \e[38;5;69m\w \e[0m: " 23 | fi 24 | -------------------------------------------------------------------------------- /KEYS.md: -------------------------------------------------------------------------------- 1 | # DWM 2 | | Key | Description | 3 | | ---------------------- | ----------------------------- | 4 | | `W + h` | Toggle statusbar | 5 | | `W + k` | Kill window | 6 | | `W + q` | Quit | 7 | | `W + r` | Dmenu | 8 | | `W + #` | Switch to nth workspace | 9 | | `W + Shift + #` | Move program to nth workspace | 10 | | `W + Enter` | Spawn a terminal | 11 | | `W + Print` | Take a scrot | 12 | | `W + Down/Up` | Inc/Dec vertical layout | 13 | | `W + Left/Right` | Inc/Dec horizonal layout | 14 | | `W + Click Drag` | Move window | 15 | | `W + Right Click Drag` | Resize window | 16 | 17 | # TMUX 18 | | Key | Description | 19 | | -------------------- | ----------------------------- | 20 | | `C + k` | Kill tab | 21 | | `C + n` | New tab | 22 | | `C + t` | Name tab | 23 | | `C + A + t` | Name session | 24 | | `C + A + Left/Right` | Previous/Next session | 25 | | `C + Left/Right` | Previous/Next tab | 26 | | `C + S + Left/Right` | Move tab forwards/backwards | 27 | | `C + Down/Up` | Horizontal/Veritcal pane | 28 | | `C + S + Up/Down` | Previous/Next pane | 29 | -------------------------------------------------------------------------------- /config/X11/xinitrc: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # .xinitrc - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | xset +fp /usr/share/fonts/local 5 | xset fp rehash 6 | 7 | dunst & 8 | unclutter & 9 | $HOME/.scripts/statusbar & 10 | 11 | # Example of dual monitor setup 12 | #{ sleep 2; xrandr --output HDMI1 --mode 1920x1080 --output DP1 --mode 1920x1080 --above HDMI1; } & 13 | 14 | # Example rotation 15 | #{ sleep 2; xrandr --output DSI-1 --rotate right; } & 16 | 17 | redshift -P -O 4000 & # How do we get this working on DSI-1 with the uConsole ? 18 | 19 | exec dwm 20 | -------------------------------------------------------------------------------- /config/alacritty/alacritty.toml: -------------------------------------------------------------------------------- 1 | [colors.bright] 2 | black = "0x696969" 3 | blue = "0x007FFF" 4 | cyan = "0x00CCCC" 5 | green = "0x03C03C" 6 | magenta = "0xFF1493" 7 | red = "0xFF2400" 8 | white = "0xFFFAFA" 9 | yellow = "0xFDFF00" 10 | 11 | [colors.normal] 12 | black = "0x10100E" 13 | blue = "0x0087BD" 14 | cyan = "0x20B2AA" 15 | green = "0x009F6B" 16 | magenta = "0x9A4EAE" 17 | red = "0xC40233" 18 | white = "0xC6C6C4" 19 | yellow = "0xFFD700" 20 | 21 | [colors.primary] 22 | background = "0x000000" 23 | foreground = "0xC6C6C4" 24 | 25 | [font] 26 | size = 8 27 | 28 | [font.bold] 29 | family = "BlockZone" 30 | style = "Regular" 31 | 32 | [font.bold_italic] 33 | family = "BlockZone" 34 | style = "Regular" 35 | 36 | [font.italic] 37 | family = "BlockZone" 38 | style = "Regular" 39 | 40 | [font.normal] 41 | family = "BlockZone" 42 | style = "Regular" 43 | 44 | [[keyboard.bindings]] 45 | action = "IncreaseFontSize" 46 | key = "Equals" 47 | mods = "Control" 48 | 49 | [[keyboard.bindings]] 50 | action = "DecreaseFontSize" 51 | key = "Minus" 52 | mods = "Control" 53 | 54 | [[keyboard.bindings]] 55 | action = "ResetFontSize" 56 | key = "Key0" 57 | mods = "Control" 58 | 59 | [[keyboard.bindings]] 60 | action = "ScrollPageUp" 61 | key = "PageUp" 62 | mods = "Control" 63 | 64 | [[keyboard.bindings]] 65 | action = "ScrollPageDown" 66 | key = "PageDown" 67 | mods = "Control" 68 | 69 | [[keyboard.bindings]] 70 | action = "ScrollToBottom" 71 | key = "End" 72 | mods = "Control" 73 | 74 | [selection] 75 | save_to_clipboard = true 76 | 77 | [terminal.shell] 78 | args = ["new-session"] 79 | program = "/usr/bin/tmux" 80 | -------------------------------------------------------------------------------- /config/cmus/autosave: -------------------------------------------------------------------------------- 1 | set aaa_mode=artist 2 | set altformat_current= %f 3 | set altformat_title=cmus: %f 4 | set altformat_trackwin= %f 5 | set auto_expand_albums_follow=false 6 | set auto_expand_albums_search=false 7 | set auto_expand_albums_selcur=false 8 | set color_separator=gray 9 | set color_statusline_bg=black 10 | set color_statusline_fg=white 11 | set color_titleline_bg=black 12 | set color_trackwin_album_attr=default 13 | set color_trackwin_album_fg=black 14 | set color_win_bg=black 15 | set color_win_cur=lightyellow 16 | set color_win_cur_sel_bg=red 17 | set color_win_cur_sel_fg=black 18 | set color_win_fg=default 19 | set color_win_inactive_cur_sel_fg=black 20 | set color_win_sel_bg=gray 21 | set color_win_sel_fg=black 22 | set color_win_title_bg=default 23 | set dsp.alsa.device=default 24 | set dsp.jack.resampling_quality=2 25 | set format_current= %t 26 | set format_statusline= %{status} %{?show_playback_position?%{position} %{?duration?/ %{duration} }?%{?duration?%{duration} }}%=%{?volume>=0?vol: %{volume}}%% 27 | set format_title=cmus: %a - %t 28 | set format_trackwin= %t 29 | set format_trackwin_album= 30 | set format_treewin= 31 | set format_treewin_artist=%a 32 | set lib_sort=artist title filename 33 | set mixer.alsa.channel=PCM 34 | set mixer.alsa.device=hw:1 35 | set mixer.oss.channel=PCM 36 | set mixer.pulse.restore_volume=1 37 | set output_plugin=alsa 38 | set repeat=true 39 | set set_term_title=true 40 | set smart_artist_sort=false 41 | set softvol=true 42 | set softvol_state=0 0 43 | set start_view=tree 44 | set status_display_program=$HOME/.scripts/cmus-now 45 | bind common , vol -10% 46 | bind common . vol +10% 47 | bind common down win-down 48 | bind common enter win-activate 49 | bind common left seek -5 50 | bind common p player-pause 51 | bind common page_down win-page-down 52 | bind common page_up win-page-up 53 | bind common q quit -i 54 | bind common right seek +5 55 | bind common s view settings 56 | bind common tab win-next 57 | bind common u shell cmus-remote -C clear && cmus-remote -C "add ~/music" && cmus-remote -C "update-cache -f" 58 | bind common up win-up 59 | fset mp3=filename="*.mp3" -------------------------------------------------------------------------------- /config/dunst/dunstrc: -------------------------------------------------------------------------------- 1 | [global] 2 | geometry = "1350x1+210+0" 3 | separator_height = 0 4 | padding = 1 5 | font = Ohsnap 8 6 | format = "%s" 7 | alignment = center 8 | ignore_newline = true 9 | show_indicators = false 10 | history_length = 10 11 | always_run_script = false 12 | mouse_left_click = close_current 13 | mouse_middle_click = none 14 | mouse_right_click = close_all 15 | 16 | [urgency_low] 17 | background = "#000000" 18 | foreground = "#ffffff" 19 | timeout = 10 20 | 21 | [urgency_normal] 22 | background = "#000000" 23 | foreground = "#ffffff" 24 | timeout = 10 25 | 26 | [urgency_critical] 27 | background = "#000000" 28 | foreground = "#ffffff" 29 | timeout = 0 -------------------------------------------------------------------------------- /config/git/config: -------------------------------------------------------------------------------- 1 | [alias] 2 | commits = log --color --graph --pretty=format:'%Cred%h%Creset - %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit 3 | mclone = clone --depth=1 4 | stats = diff --stat 5 | [color] 6 | diff = auto 7 | status = auto 8 | branch = auto 9 | interactive = auto 10 | ui = true 11 | pager = true 12 | [commit] 13 | gpgSign = true 14 | [core] 15 | editor = nano 16 | pager = delta 17 | [diff] 18 | colorMoved = default 19 | [interactive] 20 | diffFilter = delta --color-only 21 | [merge] 22 | conflictstyle = diff3 23 | [user] 24 | signingkey = 441EB0F297E0DCF0AEF2F711EF4B922DB85DC9DE 25 | name = acidvegas 26 | email = acid.vegas@acid.vegas 27 | [pull] 28 | ff = only 29 | [delta] 30 | navigate = true 31 | light = false 32 | 33 | -------------------------------------------------------------------------------- /config/tmux/tmux.conf: -------------------------------------------------------------------------------- 1 | # Sessions 2 | bind -n C-M-k kill-session 3 | bind -n C-M-t command-prompt -p "New session name:" "rename-session '%%'" 4 | bind -n C-M-n new-session 5 | bind -n C-M-s choose-tree -Z 6 | bind -n C-M-Left switch-client -n 7 | bind -n C-M-Right switch-client -p 8 | 9 | # Tabs 10 | bind -n C-k kill-window 11 | bind -n C-n new-window 12 | bind -n C-t command-prompt -p "New title:" "rename-window '%%'" 13 | bind -n C-Left previous-window 14 | bind -n C-Right next-window 15 | bind -n C-S-Left swap-window -t -1 \; previous-window 16 | bind -n C-S-Right swap-window -t +1 \; next-window 17 | 18 | # Panes 19 | bind -n C-Up split-window -h 20 | bind -n C-Down split-window -v 21 | bind -n C-S-Up select-pane -t :.+ 22 | bind -n C-S-Down select-pane -t :.- 23 | 24 | set -g mouse on 25 | 26 | set -g status-interval 3 27 | set -g status-style bg=black 28 | set -g status-right-length 100 29 | set -g status-right "#[fg=yellow]#H#[default] | #[fg=cyan]Disk:#[default] #(df -h | grep '/dev/sda2' | awk '{printf \"%3.0f%\", $5}') | #[fg=cyan]CPU: #[default]#(top -bn1 | grep 'Cpu(s)' | awk '{printf \"%3.0f%\", $2 + $4}') | #[fg=cyan]MEM: #[default]#(free | awk '/^Mem/ {printf \"%3.0f%\", $3/$2 * 100.0}') | %I:%M" 30 | 31 | setw -g window-status-current-style fg=cyan,bg=default 32 | setw -g window-status-activity-style fg=yellow,bg=default 33 | setw -g window-status-format "#I: #W" 34 | setw -g window-status-current-format "#[bold]#I: #W" 35 | 36 | set-option -g detach-on-destroy off 37 | -------------------------------------------------------------------------------- /dwm/config.h: -------------------------------------------------------------------------------- 1 | #define XF86AudioMute 0x1008ff12 2 | #define XF86AudioLowerVolume 0x1008ff11 3 | #define XF86AudioRaiseVolume 0x1008ff13 4 | #define XF86AudioPlay 0x1008ff14 5 | #define XF86MonBrightnessDown 0x1008ff03 6 | #define XF86MonBrightnessUp 0x1008ff02 7 | 8 | static const unsigned int borderpx = 0; 9 | static const unsigned int snap = 32; 10 | static const int showbar = 0; 11 | static const int topbar = 1; 12 | static const float mfact = 0.55; 13 | static const int nmaster = 1; 14 | static const int resizehints = 0; 15 | static const int lockfullscreen = 1; 16 | static const Layout layouts[] = { { "", tile } }; 17 | static const Rule rules[] = { { NULL, NULL, NULL, 0, False, -1 } }; 18 | static const char *tags[] = { "chat", "dev", "irc", "recon", "supernets", "work", "www", "media", "other" }; 19 | static const char *fonts[] = { "Misc Ohsnap.Icons:style=Regular:size=11" }; 20 | static const char dmenufont[] = "Misc Ohsnap.Icons:style=Regular:size=11"; 21 | static const char *colors[][3] = { 22 | [SchemeNorm] = { "#FFFFFF", "#000000", "#444444" }, 23 | [SchemeSel] = { "#00D787", "#000000", "#00D787" }, 24 | }; 25 | 26 | #define MODKEY Mod4Mask 27 | #define TAGKEYS(KEY,TAG) \ 28 | { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ 29 | { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ 30 | { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ 31 | { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, 32 | 33 | #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } 34 | 35 | static char dmenumon[2] = "0"; // TODO: Do we really need this? 36 | static const char *dmenucmd[] = { "dmenu_run", "-m", "0", "-fn", dmenufont, "-nb", "#000000", "-nf", "#FFFFFF", "-sb", "#000000", "-sf", "#00D787", NULL }; 37 | static const char *termcmd[] = { "alacritty", NULL }; 38 | static const char *volume_toggle[] = { "pactl", "set-sink-mute", "0", "toggle", NULL }; 39 | static const char *volume_down[] = { "amixer", "-q", "set", "Master", "10-", NULL }; 40 | static const char *volume_up[] = { "amixer", "-q", "set", "Master", "10+", NULL }; 41 | static const char *music_toggle[] = { "cmus-remote", "-u", NULL }; 42 | static const char *backlight_down[] = { "brightnessctl", "s", "10%-", NULL }; 43 | static const char *backlight_up[] = { "brightnessctl", "s", "+10%", NULL }; 44 | 45 | static Key keys[] = { 46 | { MODKEY, XK_Return, spawn, {.v = termcmd } }, 47 | { MODKEY, XK_Down, incnmaster, {.i = +1 } }, 48 | { MODKEY, XK_Up, incnmaster, {.i = -1 } }, 49 | { MODKEY, XK_Left, setmfact, {.f = -0.05} }, 50 | { MODKEY, XK_Right, setmfact, {.f = +0.05} }, 51 | { MODKEY, XK_h, togglebar, {0} }, 52 | { MODKEY, XK_k, killclient, {0} }, 53 | { MODKEY, XK_q, quit, {0} }, 54 | { MODKEY, XK_f, setlayout, {.v = &layouts[0] } }, 55 | { MODKEY, XK_r, spawn, {.v = dmenucmd } }, 56 | { 0, XF86AudioMute, spawn, {.v = volume_toggle } }, 57 | { 0, XF86AudioLowerVolume, spawn, {.v = volume_down } }, 58 | { 0, XF86AudioRaiseVolume, spawn, {.v = volume_up } }, 59 | { 0, XF86AudioPlay, spawn, {.v = music_toggle } }, 60 | { 0, XF86MonBrightnessDown, spawn, {.v = backlight_down } }, 61 | { 0, XF86MonBrightnessUp, spawn, {.v = backlight_up } }, 62 | { 0, XK_Print, spawn, SHCMD("~/.local/bin/scripts/shotz -u") }, 63 | TAGKEYS( XK_1, 0) 64 | TAGKEYS( XK_2, 1) 65 | TAGKEYS( XK_3, 2) 66 | TAGKEYS( XK_4, 3) 67 | TAGKEYS( XK_5, 4) 68 | TAGKEYS( XK_6, 5) 69 | TAGKEYS( XK_7, 6) 70 | TAGKEYS( XK_8, 7) 71 | TAGKEYS( XK_9, 8) 72 | TAGKEYS( XK_0, 9) 73 | }; 74 | 75 | static Button buttons[] = { 76 | { ClkWinTitle, 0, Button2, zoom, {0} }, 77 | { ClkClientWin, MODKEY, Button1, movemouse, {0} }, 78 | { ClkClientWin, MODKEY, Button3, resizemouse, {0} }, 79 | { ClkTagBar, 0, Button1, view, {0} }, 80 | { ClkTagBar, MODKEY, Button1, tag, {0} }, 81 | }; 82 | -------------------------------------------------------------------------------- /dwm/patch_nosquares.diff: -------------------------------------------------------------------------------- 1 | --- a/drw.c 2019-03-09 23:41:26.989923828 -0500 2 | +++ b/drw.c 2019-03-09 23:41:35.459923639 -0500 3 | @@ -241,10 +241,6 @@ 4 | if (!drw || !drw->scheme) 5 | return; 6 | XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel); 7 | - if (filled) 8 | - XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); 9 | - else 10 | - XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1); 11 | } 12 | 13 | int 14 | -------------------------------------------------------------------------------- /dwm/patch_notitles.diff: -------------------------------------------------------------------------------- 1 | --- a/dwm.c 2019-03-09 23:32:26.479935899 -0500 2 | +++ b/dwm.c 2019-03-09 23:32:36.269935680 -0500 3 | @@ -731,7 +731,6 @@ 4 | if ((w = m->ww - sw - x) > bh) { 5 | if (m->sel) { 6 | drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); 7 | - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); 8 | if (m->sel->isfloating) 9 | drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); 10 | } else { 11 | -------------------------------------------------------------------------------- /enterthevoid: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # enter the void - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | set -xev 5 | 6 | # Configuration 7 | DRIVE=/dev/sdb # can be /dev/sda, /dev/nvme0n1, etc 8 | HOSTNAME=blackhole 9 | SWAP_SIZE=4 # In GB (set to 0 to disable) 10 | TIMEZONE=America/New_York 11 | USERNAME=acidvegas 12 | WIFI_SSID= # Leave blank if you don't want to use wifi 13 | WIFI_PASS= 14 | WIFI_DEV=wlp3s0 15 | 16 | # Helper function to handle drive partitions 17 | get_partition() { 18 | local drive=$1 19 | local part_num=$2 20 | 21 | if [[ $drive == *"nvme"* ]]; then 22 | echo "${drive}p${part_num}" 23 | else 24 | echo "${drive}${part_num}" 25 | fi 26 | } 27 | 28 | setup_network() { 29 | if [ ! -z "$WIFI_SSID" ]; then 30 | if rfkill list wifi | grep -q 'Soft blocked: yes\|Hard blocked: yes'; then 31 | printf "Wifi is blocked, attempting to unblock... (make sure to handle this after reboot)\n" 32 | rfkill unblock wifi 33 | fi 34 | wpa_passphrase "$WIFI_SSID" "$WIFI_PASS" | wpa_supplicant -i $WIFI_DEV -c /dev/stdin 35 | fi 36 | } 37 | 38 | setup_partition() { 39 | xbps-install -u xbps 40 | xbps-install -Su 41 | xbps-install parted 42 | 43 | PART1=$(get_partition $DRIVE 1) 44 | PART2=$(get_partition $DRIVE 2) 45 | 46 | wipefs -a $DRIVE 47 | parted $DRIVE --script mklabel gpt 48 | parted $DRIVE --script mkpart primary fat32 1MiB 513MiB 49 | parted $DRIVE --script set 1 esp on 50 | parted $DRIVE --script mkpart primary ext4 513MiB 100% 51 | partprobe $DRIVE 52 | mkfs.vfat $PART1 53 | mkfs.ext4 $PART2 54 | mount $PART2 /mnt 55 | mkdir -p /mnt/boot/efi 56 | mount $PART1 /mnt/boot/efi 57 | } 58 | 59 | setup_install() { 60 | REPO=https://repo-default.voidlinux.org/current 61 | mkdir -p /mnt/var/db/xbps/keys 62 | cp /var/db/xbps/keys/* /mnt/var/db/xbps/keys/ 63 | 64 | xbps-install -S -r /mnt -R "$REPO" base-system linux 65 | 66 | printf "entering chroot...remember to run setup_chroot() inside the chroot!\n" 67 | xchroot /mnt /bin/bash 68 | } 69 | 70 | setup_chroot() { 71 | passwd 72 | xbps-install -u xbps 73 | xbps-install -Su 74 | 75 | xbps-install void-repo-nonfree 76 | xbps-install -Su 77 | xbps-install intel-ucode 78 | ln -sf /etc/sv/intel-ucode /etc/runit/runsvdir/default/ 79 | 80 | useradd -m -s /bin/bash $USERNAME && passwd $USERNAME && gpasswd -a $USERNAME wheel 81 | ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime 82 | hwclock --systohc 83 | printf "$HOSTNAME\n" > /etc/hostname 84 | printf "HOSTNAME=\"$HOSTNAME\"\nHARDWARECLOCK=\"UTC\"\nTIMEZONE=\"$TIMEZONE\"\nKEYMAP=us\nCGROUP_MODE=\"unified\"\n" > /etc/rc.conf 85 | 86 | printf "en_US.UTF-8 UTF-8\n" > /etc/default/libc-locales 87 | printf "LANG=en_US.UTF-8\n" > /etc/locale.conf 88 | xbps-reconfigure -f glibc-locales 89 | 90 | PART1=$(get_partition $DRIVE 1) 91 | PART2=$(get_partition $DRIVE 2) 92 | printf "UUID=$(blkid -s UUID -o value $PART2) / ext4 defaults,noatime 0 1\n" > /etc/fstab 93 | printf "UUID=$(blkid -s UUID -o value $PART1) /boot/efi vfat defaults,noatime 0 1\n" >> /etc/fstab 94 | printf "tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0\n" >> /etc/fstab 95 | 96 | if [ $SWAP_SIZE -gt 0 ]; then 97 | touch /swapfile 98 | dd if=/dev/zero of=/swapfile bs=1M count=${SWAP_SIZE}k status=progress 99 | chmod 0600 /swapfile 100 | mkswap /swapfile 101 | swapon /swapfile 102 | printf "/swapfile none swap sw 0 0\n" >> /etc/fstab 103 | fi 104 | 105 | xbps-install grub-x86_64-efi 106 | grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=void_grub --recheck 107 | xbps-reconfigure -fa linux 108 | grub-mkconfig -o /boot/grub/grub.cfg 109 | 110 | exit 111 | } 112 | 113 | if [ "$#" -ne 1 ]; then 114 | printf "usage: $0 [network|partition|install|chroot|final]\n" 115 | exit 1 116 | fi 117 | 118 | case "$1" in 119 | network) setup_network ;; 120 | partition) setup_partition ;; 121 | install) setup_install ;; 122 | chroot) setup_chroot ;; 123 | final) umount -R /mnt; reboot ;; 124 | *) printf "usage: $0 [network|partition|install|chroot|final]\n"; exit 1 ;; 125 | esac 126 | -------------------------------------------------------------------------------- /enterthezoid: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # enter the zoid (zfs on root with zraid) - developed by acidvegas (https://git.acid.vegas/void) 3 | # boot: https://github.com/leahneukirchen/hrmpf 4 | # reference: https://docs.zfsbootmenu.org/en/v2.3.x/guides/void-linux/uefi.html (do we need to make any updates?) 5 | 6 | set -xev 7 | 8 | # Configuration 9 | export HOSTNAME=blackhole 10 | export BOOT_DRIVE=/dev/sde # Use the internal USB drive for the boot partition 11 | export BOOT_METHOD=direct # Use direct or refind 12 | export POOL_DRIVES="/dev/sda /dev/sdb /dev/sdc /dev/sdd" # Verify these with lsblk before running 13 | export RAIDZ_PARITY="1" # Number of drives to use for the RAID-Z parity (must be 1 or greater otherwise why are you using ZFS?) 14 | 15 | 16 | checks() { 17 | # Check if the system is using UEFI or BIOS 18 | if [ ! -d /sys/firmware/efi ]; then 19 | echo "System must be using UEFI" 20 | exit 1 21 | fi 22 | 23 | # Check if all drives exist and are valid 24 | for d in $BOOT_DRIVE $POOL_DRIVES; do 25 | if [ ! -b $d ]; then 26 | echo "Drive $d does not exist" 27 | exit 1 28 | fi 29 | done 30 | 31 | # Check if the boot method is valid 32 | if [ $BOOT_METHOD != "direct" ] && [ $BOOT_METHOD != "refind" ]; then 33 | echo "Boot method must be direct or refind" 34 | exit 1 35 | fi 36 | 37 | # Check if the RAID-Z parity is valid 38 | if [ $RAIDZ_PARITY -lt 1 ]; then 39 | echo "RAID-Z parity must be 1 or greater" 40 | exit 1 41 | fi 42 | } 43 | 44 | 45 | setup_zfs() { 46 | # Validation 47 | check 48 | 49 | # Generate the hostid 50 | source /etc/os-release 51 | export ID 52 | zgenhostid -f 0x00bab10c 53 | 54 | # Prepare the boot drive 55 | wipefs -a $BOOT_DRIVE 56 | sgdisk --zap-all $BOOT_DRIVE 57 | sgdisk -n "1:1m:+1g" -t "1:ef00" $BOOT_DRIVE 58 | 59 | # Prepare the ZFS pool drives 60 | for d in $POOL_DRIVES; do 61 | wipefs -a $d 62 | sgdisk --zap-all $d 63 | sgdisk -n "1:0:-10m" -t "1:bf00" "$d" 64 | if zdb -l "$d" &> /dev/null; then 65 | zpool labelclear -f "$d" 66 | fi 67 | done 68 | 69 | # Create the ZFS pool (should we use noatime=on instead of relatime=on?) 70 | ZFS_POOL_DRIVES=$(echo $(for dev in $POOL_DRIVES; do find /dev/disk/by-id/ -samefile $(readlink -f "$dev") ! -name "*-part*" -print -quit; done)) 71 | zpool create -f -o ashift=12 -O compression=lz4 -O acltype=posixacl -O xattr=sa -O relatime=on -o autotrim=on -o compatibility=openzfs-2.1-linux -m none zroot raidz${RAIDZ_PARITY} $ZFS_POOL_DRIVES 72 | 73 | # Create the ZFS datasets 74 | zfs create -o mountpoint=none zroot/ROOT 75 | zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/$ID 76 | zfs create -o mountpoint=/home zroot/home 77 | zpool set bootfs=zroot/ROOT/$ID zroot 78 | 79 | # Export and import the ZFS pool 80 | zpool export zroot 81 | zpool import -N -R /mnt zroot 82 | zfs mount zroot/ROOT/$ID 83 | zfs mount zroot/home 84 | 85 | # Trigger udev 86 | udevadm trigger 87 | 88 | # Install base system 89 | XBPS_ARCH=x86_64 xbps-install -S -R https://mirrors.servercentral.com/voidlinux/current -r /mnt base-system 90 | 91 | # Copy the hostid into the new system 92 | cp /etc/hostid /mnt/etc 93 | 94 | # Chroot into the new system 95 | echo "entering the void..." 96 | xchroot /mnt 97 | } 98 | 99 | 100 | setup_chroot() { 101 | # Set the root password 102 | echo "root:root" | chpasswd 103 | 104 | # Update the package manager and install some basic packages 105 | xbps-install -Suy nano wget 106 | 107 | # Install the non-free repository 108 | xbps-install -y void-repo-nonfree 109 | xbps-install -Suy 110 | 111 | # Install & enable the intel microcode service 112 | xbps-install -y intel-ucode 113 | ln -sf /etc/sv/intel-ucode /etc/runit/runsvdir/default/ 114 | 115 | # Set the timezone & hardware clock 116 | ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime 117 | hwclock --systohc 118 | 119 | # Set the hostname 120 | echo "$HOSTNAME" > /etc/hostname 121 | 122 | # Set the rc.conf variables 123 | printf "HOSTNAME=\"$HOSTNAME\"\nHARDWARECLOCK=\"UTC\"\nTIMEZONE=\"America/New_York\"\nKEYMAP=us\n" > /etc/rc.conf 124 | 125 | # Set nameservers 126 | printf "nameserver 9.9.9.9" > /etc/resolv.conf 127 | 128 | # Set the locales 129 | printf "en_US.UTF-8 UTF-8\nen_US ISO-8859-1\n" > /etc/default/libc-locales 130 | xbps-reconfigure -f glibc-locales 131 | 132 | # Set the dracut configuration 133 | printf "nofsck=\"yes\"\nadd_dracutmodules+=\" zfs \"\nomit_dracutmodules+=\" btrfs \"\n" > /etc/dracut.conf.d/zol.conf 134 | 135 | # Install the zfs package 136 | xbps-install -y zfs 137 | 138 | # Set the zfsbootmenu command line options 139 | zfs set org.zfsbootmenu:commandline="quiet loglevel=4" zroot/ROOT 140 | 141 | # Setup & mount the boot partition 142 | mkfs.vfat -F32 ${BOOT_DRIVE}1 143 | BOOT_UUID=$(blkid -s UUID -o value ${BOOT_DRIVE}1) 144 | echo "UUID=$BOOT_UUID /boot/efi vfat defaults 0 0" > /etc/fstab 145 | mkdir -p /boot/efi 146 | mount /boot/efi 147 | 148 | # Install and setup zfsbootmenu 149 | xbps-install -S zfsbootmenu gummiboot-efistub yq 150 | yq -iy '.Global.ManageImages=true | .Global.BootMountPoint="/boot/efi" | .Components.Enabled=false | .EFI.ImageDir="/boot/efi/EFI/zbm" | .EFI.Versions=false | .EFI.Enabled=true | .Kernel.CommandLine="quiet loglevel=0"' /etc/zfsbootmenu/config.yaml 151 | generate-zbm 152 | 153 | # Apply boot method 154 | # Note : Some systems can have issues with EFI boot entries, you might need to use a well-known EFI file name. 155 | # Reference : https://docs.zfsbootmenu.org/en/v2.3.x/general/portable.html 156 | if [ $BOOT_METHOD == "direct" ]; then 157 | xbps-install efibootmgr 158 | efibootmgr -c -d "$BOOT_DRIVE" -p "1" -L "ZFSBootMenu (Backup)" -l '\EFI\ZBM\VMLINUZ-BACKUP.EFI' 159 | efibootmgr -c -d "$BOOT_DRIVE" -p "1" -L "ZFSBootMenu" -l '\EFI\ZBM\VMLINUZ.EFI' 160 | elif [ $BOOT_METHOD == "refind" ]; then 161 | xbps-install -y refind 162 | refind-install 163 | rm /boot/refind_linux.conf 164 | printf "\"Boot default\" \"quiet loglevel=0 zbm.skip\"\n\"Boot to menu\" \"quiet loglevel=0 zbm.show\"\n" > /boot/efi/EFI/ZBM/refind_linux.conf 165 | # Note : Everything below this line is a "hacky" solution to a problem I was having with the zfsbootmenu package 166 | # Reference: https://github.com/zbm-dev/zfsbootmenu/issues/293 167 | mkdir -p /boot/efi/EFI/BOOT 168 | mvrefind /boot/efi/EFI/refind /boot/efi/EFI/BOOT 169 | temp=$(mktemp -d) 170 | wget -O $temp/latest.tar.gz https://get.zfsbootmenu.org/latest.tar.gz 171 | tar xvf $temp/latest.tar.gz -C $temp/ 172 | rm $temp/latest.tar.gz 173 | mv $temp/zfs*/* /boot/efi/EFI/ZBM/ 174 | rm /boot/efi/EFI/ZBM/vmlinuz.efi 175 | xbps-remove zfsbootmenu 176 | fi 177 | 178 | # Reconfigure the system 179 | xbps-reconfigure -fa 180 | 181 | # Exit the chroot environment 182 | echo "exiting the void..." 183 | exit 184 | } 185 | 186 | 187 | 188 | # Check the command 189 | if [ "$#" -ne 1 ]; then 190 | echo "usage: $0 [zfs|chroot|final]" 191 | exit 1 192 | fi 193 | 194 | # Execute the command 195 | case "$1" in 196 | zfs) setup_zfs ;; 197 | chroot) setup_chroot ;; 198 | final) umount -n -R /mnt; zpool export zroot; reboot ;; 199 | *) echo "usage: $0 [zfs|chroot|final]" && exit 1 ;; 200 | esac 201 | -------------------------------------------------------------------------------- /font/BlockZone.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acidvegas/void/296927a71deb46ddeb7135a21c573c5e3bb3d09c/font/BlockZone.ttf -------------------------------------------------------------------------------- /font/ohsnap6x11r.psfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acidvegas/void/296927a71deb46ddeb7135a21c573c5e3bb3d09c/font/ohsnap6x11r.psfu -------------------------------------------------------------------------------- /font/ohsnap7x12r.psfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acidvegas/void/296927a71deb46ddeb7135a21c573c5e3bb3d09c/font/ohsnap7x12r.psfu -------------------------------------------------------------------------------- /font/ohsnap7x14r.psfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acidvegas/void/296927a71deb46ddeb7135a21c573c5e3bb3d09c/font/ohsnap7x14r.psfu -------------------------------------------------------------------------------- /local/bin/scripts/art/cowboy.txt: -------------------------------------------------------------------------------- 1 | 8▓█▀▀▀▀▀▀▀▀▀▀█7▓░8 7██8,7 ▄▄▄▓▓▒░░7,1██15,7░8░▓8,1█0▓8 ▐█████████0██8████0███8,15▀8,1██████████8,15▓▓8,1███8,15▌0░▓0,1█████ 2 | 8▀1███████████7░1█ 7▐8▀▀15 7▄▄▄▄▓▓15,7░░8░▓0,1█1█ 8▐████████0██8██0████8█0███8█████8,15██▀▀▀0,1███8,15▀ 0▄0,1███0,15▓▓▓ 3 | 1████████████████7▓██15,7░░░░░7,1██15,7 ▄▄▒8░▓0,1█▌8 █████████0█8██0██████8██0█8█████8,15▀0▄0,1██████████0,15█▓░8▄▄ 4 | 0 1███████████████14▀▀14,7▄▄▄7,1█8,7░░░8,1▀▀▀▀8,7░░▓▓██0,1▌1█8█████████████0████8██0█8,15▓8,1███▀▀0,15▐0,1████0,15█▓▓▓0,1██0,15██▒8,1██8,15▓ 5 | 0 1██████7■▀8 1██7░░1███████7▀▀14,7▄▄7,1████8,7░8,1▄▄ ▀0█1█8▐██████████8,15▓▓8,1████8,15▀0,1█8,15▓8,1███ 14,15▀14,1██0,15▀0,1█0,15▀▒▒8 ▄▄0▀▀░8▄8,1█8,15▓▓ 6 | 8█0▄▄1██ 8░ 1██7▓▓0,7░░7,1▓▓▄▄▄ 1███7▀▀▀▀▀8,7░░▓8,1 1█8████████████8,15▄▄▄▄8,1█████ 15██14,15▓8,1 14░8 0,15░8 ▐8,1█████8,15▓▓▓▓8,1█ 7 | 8█████▄▄▌1███7▐█8,7░8,1░7▄▄8 ▀▀█8,7▄░░7,1▄▄▄ 1██████8░░░1██8███████████████████ 15█14,15░▓8,1 14▓ 8▄8,15▄▄8,1███████████ 8 | 8████████1██7▐█8,7░▓▓░7,1▀▀14 8 8,7░8,1▓██▓7██▄▄░1████ ████8▀▀1███████8▀█████ 15█14,15░▓8,1 14▓ 8▓██████████████ 9 | 8███████8,15▓8,1▓░░8,7░▒▓█▀7,1█14▄ 8 8,7 ▒8,1██0▌8▀▀▀▀7█0,7░7,1░15 ░14▓▄▄▄▄▄14,7▀▀▀7,1█14,7▀8░1,1█8████ 0█15█14,15░8,1 14▐8 ▐███████████████ 10 | 8,15▓▓8,1███8,15▓░15,1█1██7█8 8,7▒0,1█8,7█8,1██8,7▄▄▄░░▓8,1█0▌8 7░14 8 7▀▄░1█ 15░14▓█15▒▒14,7██7,1█████8,7▓1,1█8████ 0█15█14,15▒8,1 14▓8 ▐████████████████ 11 | 8,15▀ 15,1██▓1█7█7,6▓7,1▓░8,7▓8,1███8,7▀▀▓▓▓8,1█0█ 8░▒8,7▄▄░0░1,1██ 15░░14▓▓14,7███7,1████8,7░░8,1▀▀1█8████ 0█15█14,15▓8,1 14█8 ▐████8,6▌13░░░8 ▀▀█8,1██ 12 | 8,15 15,1▓░1 7░█6▐7,6▓7,1▓8▐8,7▓█░14,1▄8 ▀▀0███8▓▓8,15██▓0,1█7▌8 ▒▓▄▄▄▄▄▄▄▄▄▄▄▄▄▄██8,15▓▓▓8,1 0█15█14,15▓8,1 14,15▓8,1 ▐██8,15▓▓▓8,6▌13▄▄▄▄▀4▀▀▓█8█8,15▓▓ 13 | 8 15░▀8 6░1█7░▓8,7░1,1█7,6░▓7,1█8,7▓▒8,15█8,7▓░15,1 8,7▒█8,15█▓0▓0,1▌1█8▒▓█8,15▀▀▄▄▓▓▓▓▓8,1██8,15▀▀▄▄▄▄░8,1 0█14,15░▓8,1 14,15▓8,1 ▐██8,15 ▄░░8,6 6 ██4░░░▒13░8,15▓░░ 14 | 1█6▄▄8▄ 6█8 7█8,7░1,1█7░7,6▓7,1█8,7▒7,1▌8▀▀8,7░7,1░8 8,7░▐8,15█▓0▓0,1▌8 ░▓█████8,15▀ ░▓▓8,1██8,15▓▒░15,1▀ 14██0▄15▄14▀8 14█8 ▐█8,15▄▄8,1█8,15▓▓▓8,1█0,6░▄13▄▄█4▀▀▄8 8,15 15 | 8 4,6 6,1█8,6▓8,1▌ 6█8 7▐█1█ 13▐7▓8,7░8,1▄▄7▄▄▄8 ░7▀8,7▐8,15█0▒0,1▀8 ▄8,15 ▀▀▀ ▄▄8,1███8,15▓▀15,1██ █14██0█0,15▌14░0░15,1░8 ▐██8,15▀▀▀░░15,1█15,6▌8 0▄13▄▄▄▓▓4░░15▐8,15 ░ 16 | 4▐4,6 ░8░▓8,1 8,6░6,1█8 7▐▌1██7░▓8,7▒▒8,1▀▀▀▀▀7█▄8▓▀1█8▄████8,15▄▄▄8,1█████8,15▓▓▒░15,1███ █14█0▄█14,15▓15,1█0,15▓14█8,1 15██████████0,6░13░░░▒▒▓▓4▀▀░6,1▓15,6▀ 17 | 8 4▓4,6 ░8░▓4,1▐8,6░6,1▌8 7▐░1███7▀8,7░░░7,1█8,7░7,1██▀8 1█8▒8,15▄▄▄▀▀▀8,1██0,6░8 4▀▀▀15▀▀15,1███ █14█0██14,15█15,1█0,15█14█15,1░14░▄▄15▀█8,15░░15,1██15,6▀▀0▄▄13▄▄▄▄6█13▀4▀▀░░6,1░ 18 | 8 4░4,6░4,1█4,6░8░4,1█8,6▓8,1▄ 7░░1███████████5░8░15█8,15 ▀▀▀8,6▀▀0░13░8 4▀▀▀▓▓░8░ 15,1 █14█0█0,15█14█15,1█0,15█14▓15,1░8 7▄▄8 14▌15▐▓▓8,6░15▀■8 ▀▀■ 4░░░▒▒▓▓▄▄ 19 | 14░░8 4░4,6░4,1██4,6▒4,1██8,6▀8,1█▄▄ 1███7░░1█4▄█8█1██15,6▀▀▀▀6,1▓▓▓▓8,6▀13▀▀▀6,1▓▓▓▓▓▓░14▐0█0,15█14▌15,1█0,15█14▒14,1▌8 7█8,7░7,1█8 14░6▓▓▓0,6░░8 4 ░░░░6,1▓ 20 | 6▄▄14▄8 4,6▒4,1█▓▓▓██8,6▀▀▓8,1█▓▓▄4▄▄▄8█▀1████6▀8,6 6,1▓▓▓▒▒▒▒▒░8 15▄░8 15▀▓0,15█14▓14,1▌8 7▐8,7░8,5▓8,1▌ 7▄▄8 6▀▓▓▓▓▓▓▓8,6 21 | 14,6▓14,1▓14,15█▓8,1 4,6▓4,1█4,6▓░8,1 4▀▀▀▀▀█4,6▓▒8░▒▓▓8,1███0▄1█8▐█8,6▄▄▄▄8,1█8,6▀▀6,1▓▓▓░15▄▄0,15░15,1▀█0▄15▄8 14▀7■▀8 ▀ 7▐█8,7░8,1 7▄6░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓ 22 | █14,15░░▒▓8,1 4,6▓▓▓▒░8▀8,1▄▄▄▄ 4▀████4,6▄▄░8▀8,1█0▌1██8▀█8,6 8,1▄▄15 ▐0,15▓0,1█15█7░▄8▄8,5▓▓8,1█0█▄7█8,5▒8,1▌7█8,5░7,1 ▄8 ████8,6▀▀▀▀▀▀▀ 23 | 14▄▄8 15▀▀14,15░▓8,1 4▀█4,6▓▒░░░6,1█8,6░▓8,1▄4,6▀▀4,1▄8 4▀4,6▓8░8,1 14,6▓8,1█1██8▀████████8,6▀▀8,1▓15 0,15▀▀15,1░7▐8,7░░7,1█▀░█8,5▓8,1▌█7█8,5░8,1▓7█8,5░7,1▌8█8,6▄▄▄▄▄▄▄▄ 6,1▓▓ 24 | 0,15▀▀14▀▀▀▀15,1▄▄▀▓8 4▀█4,6▓▒░░░6,1██8,6░▒▓8,1 14█14,6░8,15░▓8,1▄1██8▓███8,6▄▄▄8,1███▓ 15▐8 ░7██▄▀8 7█8,5░8,1▌ 7▀8▀7▐8,5░▓8,1 ▀▀▀█8,6▀▀▀▀▀ ░░░ 25 | 0,15▀▀▀▓▓▒▒░░15,1██▓▓8 4▀▀6▀▀4,6░░6,1█8▌ 14▐▄8 6,15▓░8░▓8,1█0▄1█8▀▀█████████▓░ 7▓▓██▄▄░▀8 ░░7▀8▀ 7█4,7░▓4,1▄8 ▐██████8,6▓▓▓ 26 | 0,15▄▄▄▀▀▀▀ ▀▀8░░░▒▓8,1▄▄ 6▀■8 6▀8,6░6,1░14▐14,6▓14,1▌6,15░15,1███8,15░▓0,1█1█15░8 ▀███▓▓▓▓▓▒ 15,7░8,1 7▓15,7░░7,1█████8▄▄0▄8 7▐8,5░░7,1▄▐4▌8▐8,6████▄▄8,1█8,6▄░ 27 | 6,15 8▓▓▓▓▄▄▀▀░8,1 6▀█▄8 14,6▒░6,15▓░15,1█6,15░░15,1██8,15░0,1█1█15▓8█ ░▓▓▓▒▒░ 15,7░7,1█▌ ▀░░░░8▀▀▀0▀8 7▄▀▀▓▓░8▓▓▓▓▓▓▓▓██ 28 | 1███████████ 29 | -------------------------------------------------------------------------------- /local/bin/scripts/art/htp.txt: -------------------------------------------------------------------------------- 1 | 14The15 FBI 14is closed until further notice.. 2 | 5▄4▒ 3 | 5░15 5▀█▒ 4 | 5■15 5▐▌15 14░░ 5 | 5▀15 4░15 5 15 5▀15 5 14 5▄▒ 14 5▄4░5▀4 15 4░░ 6 | 14 4 ░15 5▄4▒15 5■15 5▄▄▀▀ ▐█▌ ▄4▒▒5▒ 7 | 14 4░▒5█▀4░ 5▐█▒15 5 4▒▒5▀15 4░░5▄▄█▄▄▄15 5▀▒ ▐4,5░░5,1█ 15 14░░ 8 | 14 4▒▒14 5▄█▀15 4░5▄██▌15 5░░ ▄4▒5▀ 14 4░5▀ ▄█▌ ▐███ 15 4 14 4░5▄▀▀■ 9 | 5 ▐█▌ ▀ 4▒▒15 4▒5█4,5░░15,1 5▓▓4,5░5,1█▌15 4,5░░░5,1█▄▄▄█8,5░░5,1█▄ 15 5▐4▒ 10 | 14 5▐4,5░5,1▌▒▒14 5▄██▀▀ ▐██4,5░5,1▌15 5░█4,5░░░15,1 5▄▄▄███4,5░░5,1█8,5▒▒▒5,1█▀15 5▐█ 11 | 14 5▐4,5░5,1▌▐▄4,5▒▒░5,1█▀ ▄ █8,5░░5,1█▌15 5▓██4,5░5,1█15 5▄▄8,5▒▒▒▒▒▒▒5,1█8,5▒▒5,1█8,5 ███5,1█▀ ▄▀▀▀▄ 4,5░5,1█▒▒▒▒▀ 12 | 14 5 ███4,5░░5,1██▌ ▐█▄8,5▓▓░5,1▌ 14░░░░ 5░8,5░░5,1███▌ ▄8,5▄████▓5,1▀▀▀▀█8,5██▄8,1█▓8,5▀5,1▀ 14░ 5 14 5▐██4,5░░8▒▒▒5,1▓ 13 | 14 5▐█8,5░░░░5,1█15 4▒8████5█ ░░░14░ 5▓8,5▒▒5,1█8,5░░5,1▌ █8,5███8,1▓5▀15 5▐8,5██▀8,1▀5▀ 14░░░15 5█8,5▒ ▐███5,1 8,5▒15,1 14 | 5 4▒8,5▒▒▒▒5,1█15 5▐8█████▄▄▓▓5░14░ 5▐█8,5▓▓5,1▓8,5▓▓5,1█▐8,5▐█8,1██5▌15 5▀▀15 14░5░░░15 5█8,5▒ ██▌5,1 8,5▄█5,1▌ 15 | 5 4▒8,5█8,1██8,5▒5,1█15 8 ▀5▄8,5▄8,1█████▓5░14░ 5█8██8,5▌5,1░8,5▐8,1█8,5▒ 8,1███▒15 5░░▓▓▓15 14░5█8,5▒▐█▌5,1 8,5▄██5,1░ 16 | 5 8▐███8,5█5,1█▌ 8 5▄8▄8,5▄8,1████████8,7▀8,1 5▐8,5▓8,1██8,5▌8,1 8,5▐8,1██8,5 8,1███▌15 5▓8,5▒▒▒5,1█15 5░██8█8,5█▌5,1 ▄8,5▄██▒15,1 17 | 5 8▐██8,5▀▀8,1▄▄▄8,5▄8,1██████████7▀ 8▓███5▌ ▐8,5█8,1█8,5 8,1███▌15 5▐8,5▒▒▒4░5,1▄▌ ▓█8█8,5█▌5,1░▄8,5▄███▀5,1▌ 18 | 5 8▐█8,15▓▓▓8,1██████████████ 7▐8█8,15▓8,1██ 7▐8██8,5▓8,15▓▓8,1██15 5▐8,5███▌5,1▌ 14░5▓8,5 8,1█8,5█▌5,1▓8,5▄8,1███8,5▀5,1▀ 19 | 8 ░▓▓█0█████8█▓▓▀7▀8▐███8,15▓▓8,1█ █0██8█▌ █8,15▓▓0,1███8██▄15 8▄▄▄ ░░███8,5▌5,1▌ █8,5▄▓8,1████8,15▓▓▓5,1▀ 20 | 8 0░█████████8░░ ██0███8█ 0░▓███8█ ░7▄8█0███▓▓▓██8▓█▄▄▄▄7 8████▒▒████5▌8░8,5▄█8,1████0██████5▄ 21 | 0▀▀▀ ▀▓15 8█0█████15▌0░▓█████▄█████▀15 0▀███8█8,15▓▓▓▓▓▓8,1███████5▌8▓███0███▓▓▀████▌ 22 | 4 15 14░░░░ 4 0█▀ ▀▌▓▀ ▀▀██▓▓ 12░░░░░ 0███████████8███████0████▀▀ ▓███▓ 23 | 4 15 14▓█▓▓▓░░ 4 15 12░░░░ ░░░ 0▀▀ 2▀▀12▓▓▓▓▓░░2▄0▀▀▓▓▓▀ ▀▀▓▓8,15██0,1████▀ 4 15 0▐▀ ▀▌ 24 | 4 15 14▌▀▀▀7▐▄▄8▄ 4 15 12▒▓▓▓▓░░░▓▓▓░ 15 12░░▀12,2▓12,1█▓▓12,2▓2,1░ 4 15 12░░░░ 0█████▀ 15 12░░░ 25 | 4 15 14▄14,15▀▀▀14,1▄ 8▀7▀14▄ 4 2▐12▓████▓▓▓███ 15 2░█12,2░░░2,1▓ 4 15 2▀▀▀12▒▒▒ 0▓▀ ▀ 15 12░▓▓▓░ 26 | 14▀14,15▒15,1▀ 4 15 14▌▀▄ 2█12,2░▓▓▀12,1█▀██▓▓ 4 7▄▄▓▓▓░░ 2▀▀▀▀▀ 7░░░░ 12,2░12,1 ░░░░ 4 12▓████░ 27 | 14▄ 4 15 14█▄▀4 15 2██12,2░░2,1█12,2░12,1 4 15 7▄▄█7,3▓▀9▄▄▄▄▄▄3,1██9,3▄▄▄▄▄▄░7,1▒▒▒░░░ 12░▒▒▒▒░ 4 15 12██12,2▓▓12,1█▒ 28 | 4 15 14▄14,15▓14,1▀4 14▄▀▀4 15 2▓▓█▀▀▀ 7▄▄7,3▓▓▀3,1█9,3▓▓▓▓▀▀▀3,1███▓▀▀▀█9,3▀▀▓▓9,1█9,3▄▄▄9,1▒▒▒3▄2▀▀12▒▒2█▌ 4 12▐12,2▓░░▓12,1▓ 29 | 4 15 14░▄▀4 14▄▀15 2░░░█12,2░░2,1█▄14▀3▄7,3░9▓▓░░3,1▀▀▀7▀▀2▄14▀3▓ 2▓12,2▄2,1█▄▄▄3▀▀▀▀9,3▓▓9,1█9,3▓▓▄▄9,1▒3▄▄15 4 12,2░2,1██12,2░░░2,1▓░░ 30 | 4 15 14▓▀ ▄▀15 2▄▄█12,2▄12,10▓▓12,2▓▓░2,1▌3▓▓9,3░3,1▀▀2▄▄▄▓11,2░░░2,1█▄▄█12,2▀▓▓░░░2,1█▀3▄█9,3▄9,1██9,7▓▓9,1██9,3█▄░7▀7,1▄░░ 4 2░▓███████ 31 | 4 15 14▓ ▄█ 4 15 2░░█12,2▄▓▀▀2,1▀▀▀▄██▄3▀2▄▓▓12,2░░░▓▓▓12,1██12,2░░2,1█▀▀▀12,2░▓▓2,1▀7▄9,3▄▓9,1█9,7▓▓▒▒▓9,1███9,3▓3,1█7,3▓▓7,1▀2░░ ░12▒▒2████▓░ 32 | 4 15 14,15▓14,1█▀ 4 15 2▓▓▀█▀3▄▄14▀2▄█▀7▄ 2██0,2░░12,1█12,2▓▓▓12,1█████12,2▓▓2,1▄▄3▀▀2▄12,2░░2,1▄7▀▀9,3░▀9,7██▓▓9,1█9,3▓▓▓9,1██7,3░3,1▀2▄▓▓░░ 12░░12,2░░2,1█▓▓░ 33 | 4 15 14▀█▄ 2░░█12,2░░2,1█ 3▄9▒9,3▓▓░3,1▄▄7,3▓7,1 2██12,2░▓▓12,1████12,10▓▓▓12,1█12,15▓▓12,2▓▓▓2,1█▀▀3▄▄2▀▀█▄14▀3▓9,3░░9,1██▒▒3█9,3▀▓▓3,1█▄14▄2▀▀▀ 4 15 2░░░░ 34 | 4 15 14░░▀8▄▓7▀ 14▄2▀12,2▄2,1█▄3▀█9,3▓█9,1█7,3▒7,1 2█0,2░12▄▓12,1███11,10░░12▓▒▒▒▓11░░12,2█2,1▀▀12,2▀▄2,1█▄ 3▀█ 12,2░░12,1 3▓█9█9,3░3,1█▄▀▀▀▀▓▓█9▒▒3▓▓14▄ 35 | 4 15 7▀8▀14▄▄▀2▄█▀▀7▄9,3░3,1▄▄9,3░9,1▒ 12▒▒████11,10▒▒12,1███12,10▓▓▓12,1██12,2█2,1▄3▀█▄2▀12,2▀▓░2,1█▄▄▀3▄9,3░░█9,1█9,3▓░3,1█ 12▀▓▄2▄▄3▀█9,3▄▓▓3,1█▓ 36 | 14▀▀2▄▄2,2 2,1▓ 7▄9,3░░▓9,1█9,3▓ 3,1▌2▐█12,2▐12,1██11,10░░12,1███12,2▓▀▀▀░░▀▄2,1▄▄ 3▀2▄12,2▄12,10▓12,2▓2,1▓▀7░3▓█9,3▓▓9,1███9,3▓3,1█7,3▒▒7,1▄12▀▀2▀3▄█9,3▓▓9,1█9,3▓3,1█▓14▄ 37 | 4 15 2▓█12,2░░ 2,1█ 7█3█9,3▓▓9,1█9,7▓▓9,3▓3,1█7▄2▀▓12,2▐12,1██11,10░12,1██11,2░░2,1▀▀14▄3▄▄2▀▀12,2▀▓▄2,1▄12,2▒▓12,1█12,2░2,1░3░▓█9,3██9,1█9,7▓▓9,1██9,3▌3,1█7,3░7,1▌ 3▓▓7,3▄▄▓▓░9,1██9,3▄3,1█░ 38 | 4 15 2░██12,2▓▓ 2,1█ 7,3▓3,1█9███9,7▓▒▒9,1█9,3▓▓7,1▓ 2█12█12,2▓▓▓2,1█▀ 14▀3▀▀9,3▒▒▒7▀7,1▄2█12,2░▀▀▓▓2,1█ 3▓9,3░▓█▓9,1███9,3▓▓░3,1█7,3▓7,1 14▀3▀2▄▄▄▄3▀▀9▒9,3▀▓▓3,1▓ 39 | 4 15 2░▓█12█12,2░░ 9,1░7,3░3,1█9,3▀▀▓▓9,1███9,3▓▓3,1▀▄2▀12▒▒12,2░2,1▓▓▀▀▀▀▀ 3▀▀9,3░9,1 2▀▀▀▀ 7▀3▀▀▀9,3▒▓▓▓░░3,1▓▀7▀▄ 2█12,2▄11,10▒▒░12,2▄2,1█▄ 3█9,3░░3,1█░ 40 | 3 2▓█12,2▓2,1▀▀▀▀ 3▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 2▀▓ 4░▒████████ 2▓▄ 4▒███0█████ 9,3▒3,1▀▀▀▀▀ 7▀ 2▀12▀▀▀▀▀▀2▀ 3▀▀▀▀█▓14▄ 41 | 14 2▓█12,2▒12,1 4░▒4,5▓4,1█████████████0████ 2▓ 4░▒4,5▓▓▓▓4,1████ 12,2░░12,1 4░██████0██ 9,3▒9,1 4░▒4,5▓4,1█████████████0████ 9░3▀█ 42 | 3 2█12,2░2,1█ 4░▒4,5▓▓4,1██████████████0██ 4░▒4,5▒▒▒▒▒▒▒4,1█ 2▀█ 4░████████ 9,3░9,1 4░▒4,5▓▓▓▓4,1████████████0██ 2▀12▒▄ 43 | 2░██▒ 4░▒4,5▒▒▒▒▒▒4,1███████████▓ 3▓ 5░▒4,5▒4,1▓▓▓▓▓▓█▄▄▄▄▄█▓▓▓▓▓▓4,5▒4,1 9,3░9,1 5░▒4,5▒▒▒▒▒▒▒4,1▀▀▀▀▀▀▀▀▀▀▀ 3█▄12▀2█ 44 | 2▓12▒2█░ 5░░▒▒▒▒▓4,5░4,1▓▓▓▓▓▓4,5▒5,1▒▒▒▒░ 5,3▒5,1 ░▒4,5░4,1▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓4,5▒4,1 3█ 5░▒█4▓▓▓▓▓4,5░4,1 3█████9,3▒▒▒▒▒▄▄░3,1█▄ 45 | 12▒▒ 3▓▄ 5░░░░░▒4,5░4,1▓▓▓▓▓▓4,5▒4,1 7▄▄▄3▄▄5,3░5,1 ░▒█4▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓4,5░4,1 3█ 5░▒█4▓▓▓▓▓5█▄▄▄▄▄▄ 9,3▐9,1█9,3▓▓9,1██9,3▓░3,1█ 46 | 2█▓ 3█7▀ ▄14▄ 5░▒4,5░4,1▒▒▒▒▒▒4,5░4,1 7▀ 2▄▄▄5,3▒5,1 ░▒█4▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒4,5░4,1 3▓ 5░▒█4▒▒▒▒▒▒▒▒▒▒▒5█ 9,3▐█9,1█████9,3▌3,1█ 47 | 2█░3▓ 2██ 7,3▀▓7,1 5░▒5,5 4,1▒▒▒▒▒▒4,5░4,1 7,3▀3,1▄▄2▀▀▀ 5░▒█4▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒4,5░4,1 3▓ 5░▒█4▒▒▒▒▒▒▒▒▒▒▒5█ 3█9██████9,3▌3,1█ 48 | 2█ 3░2█12,2░2,1█ 3▓7,3░7,1 5░▒11,5▒4,1░░░░░░4,5░4,1 9,3░▓▓░3,1█5,3▒5,1 ░▒█4░░░░░░5█▀▀▀▀▀█4░░░░░░5█ ░▒█4░░░░░5█ 2▄ 3▄▄▄▄█3,3 9▀▓▓▓9,1█3█▓ 49 | 3 2██12,2░▓2,1█░3▒█ 5░▒11,5█4,1░░░░░░▒ 3█9██9,3▓5░3,1▌ 5░▒█4░░░░░░5█ 2░ 5░▒█4░░░░░░5█ 2░ 5░▒█4░░░░░5█ 2▀▀ 3▀▀▀▀▀▀▀9,3░▓3,1█▓ 50 | 3 2█12,2░▓12,1█2█▓ 3█ 5░▒11,5█15,1 4,5░4,1 3▓█9██3█ 5░▒█15 5█ 2▓ 5░▒█15 4,5░4,1 2░ 5░▒█15 5▀▀▀▀▀▀▀▀▀▀▀4,5░4,1 3█9,3▒3,1█░ 51 | 3 2█12██2██3░█ 5░▓11,10▀11,1▄▄▄▄▄5▄4,5░4,1 15░3▀▀9,3░░3,1█ 5░▒█▄▄▄▄▄▄█ 2█ 5░▒█▄▄▄▄▄▄4,5░4,1 2▒ 5░▒█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄4,5░4,1 3█9,3░3,1█ 52 | 3 2██12,2▓2,1█ 3▓█ 5░░▒▒▒▒▒▒▒▓ 2▄██▄3▀█ 5░░▒▒▒▒▒▒▒▓ 2█ 5░░▒▒▒▒▒▒▒▓ 2▒ 5░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓ 3██ 53 | 3 2█12,2░ 2,1░14,7▌3,1█▓▄▄▄▄▄▄ 2▄▄▄▄█12,2▒▒2,1█▄3▀▓▄ 2▄▄▄▄▄▄▄▄▄12,2░2,1▄▄▄▄▄▄▄▄▄▄▄▄▓▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 3▄▄▄ 54 | 3 14░3 2█12,2░2,1▓ 7,3▌9▓9,1██9,3▓3,1█ 2▄█12,2▄▓▓12,1██12,2▓▓░░12,1 3░ 2████12,2░░▄▄▄▄▓▓▓███████████▓▓▓▓▓▄▄▄▄▄▄▄░░2,1███▀3▄9,3░░3,1█░ 14▒ 55 | 3 14░3 2██ 7,3█9░9,1██9,3░9,1 2█12,2▓▓▀2,1██12,2▀12,1███2█▌ ▄██12,2░▄▄12,1██████████████████████████████████2██ 3█9,3▓▓3,1█ 14▓ 56 | 3 14░3 14▒3 2██ 7,3█9,1██3█░2▓12,2░░2,1▀░▀▀█12,2▀▓▓░░2,1█12,2▄▄▓12,1█████11,10░░12,1████████12,10▓▓▓▓▓▓▓▓▓12,1██████████12,2▓▓2,1█ 3█9,3▓9,1█3█ 14░▀▀14,15▒15,1 57 | 3 14▒3 14▓3 14░3 2██ 7,3█9,1██3▓ 2▀3▄█▓▀2▄12,2░2,1█▀▀▀███12█████11,10░░▒▒░░░12,1███12,10▓▓▓▒▒▒▒▒▒▒▒▒▓▓12,1███████12,2░░12,1 3▄9,3░░3,1▓ 14▒3 14░ 58 | 3 14▓▀14,15▓3,1 14▒3 2▓▓ 9,3▓▓9,1██3█7,3▄7,1▀2▄█12,2░▓2,1█▄3▀▄▄2▀▀█12,2▀▀▓▓12,1██11,10░░░░░░░12▓▓▓▓▓▒░░░░░░░▒▒▓▓12,1███12,2▓2,1██ 3▄██▓░ 14▓15▀▄▄ 59 | 3 14,15▓3,1 14,15▒3,1 14▓▓3 2▀▄ 9,3░▓9,1█ 2▄██12,2▓▓12,1██12,2▄2,1▄▄3▀▀█▄▄2▀▀12,2░▀▀12,1█████████12,10▓▓▒▒▒▒▒▒▒▒▒▓▓12,1███12,2▓▓░2,1█▀ 7,3░▒7,1▀ 14▄▄14,15▒7,1 0 █15▌ 60 | 14,15▒14,1▀14,15░0,1▄ 14▀▓14,15▓7,1 3▓▓██ 2▀▀█12,2░▓▓▀2,1▀▀12,2▀▄2,1▄▄3▀▀2▄█████12,2▓▓12,1██████12,10▓▓▓▓▓▓▓▓▓▓12,1███12,2▓▓▓ 2,1██ 7,3▒7,1▀ 14░7 14,15░0,1▄0,15▄15,1▀ 61 | 1 14,15░0,1 15▐0,15░0,1 14,15▒7,1 3░░▓▓█7,3▀▀7,1▄2▀▀▀██▄▄█12,2▓▀2,1▀▀▀3▄▄▄2▀▀12,2░░▓▓▓▓12,1██████████████12,2▒▒░░2,1█▓▀15 14▓2 15▄0██15▌ 62 | 0 14▀0 15▄0,15▐0,1█15▌0 14,15░0,1▄15▄0 2 3░▀█9,3▓▓▓3,1█▄▄▄2▀▀██▄▄▄3▀▀▀2▄▄██████12,2▓12,1███████████12,2▓▓2,1█████▀ 15 14,15▒0,1 15▐0███0,15▄15,1 63 | 0 15▄0,15▄0,1█0,15▌15,1▀0 15▐0██15▌0 15▄0 3▀7,3▄9▀▀9,1█9,3▓░░3,1▄▄2▀▀███12,2░░2,1███████12,2▒12,1██████████12,2 ░2,1███▓▀ 15 14,15░0,1▄▄▄15▀0██0,15▄15,1▄ 64 | ▐0,15▓0,1██0,15▓▓0,1█0,15▄0,1▄0,15▀0,1█▄15▄0 15█ 7▀3▀▓▓▓▓▓█9,3▓3,1▄▄2▀█████████12,2▒▓▓▒2,1███████▓██▀▀ 15░2 15 0 12░0,15▐0,1███████████15▌ 65 | 0 15▀0,15▀▓0,1███11,10███11,15▓▓0,1██0,15▄▄12,1░0▄15▄▓ 3▒▒▒▓▓▓░2▀▀▀█████12,2░░░░2,1▓▓▓▓▀▀▀▀15 ▓2 0 15▄0████████████0,15▀15,1 66 | 11 0 0,15░0,1█11,10████▀▀███0,1██15▐0███▄▄15▄ ░ 1 15 █▄0▄0,15▄0,1██████0,2▓0,1█11,10██3░10,1▀ 67 | 11 0▐11,10▐███11,1█10▌ ▀11,10▓█▓▌0,15▐0,1███0,15▓░14,1▓0 12░░0,15▄0,1▄▄15▄ 0 15▓ 10 0 15▐0,15▄▄15,1▌0 14▄15▄▄10 0 0,15▄▄0,1█████████14▓12░░0,2▓0,1█11,10██3▒15,1 68 | 3 10▐11,10▐█11,1█11,10█11,1█10▌3▄10▄11,10░█▌3░0,1█████15▓14░10 15▐0████████15█0███15▄12░15▄0▄▄████ 14▐15█0█████████0,2▓0,1█0,15▀0,1▀▀15▀14▀2H712,10░0,1█11,10██░15,1 69 | 11 10▐10,3▓11,10█▓▓3░10,1██11,10░░▀░11,1 0,2▓11,10░11,1██0█▌15 14▓15▀0▀████0,15██0,1███▀0,15░0,1██████12░0 █████11█0████0,2▓10,1 15 2 0 2,10░11▓▓▓3░10,1▌ 70 | 10 3▐10,3▓11,10▓░░14░12░3,1▀▀10▀▀ 2,10░11░11,1██0█10▌15 14░0▐██11██▀███0███0,15▓0,2▓0,1█11,10██0,1███15▄10 0███11█10█11,10▓▓▓▓█12░11,1▄▄10▄ 0 11,10░▒▒▒▌10,1▌ 71 | 10 3░░▓█11,10░ 14░▒12░15,1 12,10░10,1█11,10▓▓█ 15,1 0█11██11,10▌11,1 ▐11,10▓11,1██0,2▓0,1▀10▐2,10░11█████0,1██15▄11█11,10█11,1█11,10░10,1▌█11,10▒▓▓11,1█▀▀10▀▀11 3░░3,10░11░░░▓10,1▌ 72 | 10 3░░▓▓█14,10░▒▓2░15,1 14,10▌10,1█11,10▒▒░10,1█▄▄14▄10 █11██10█▄▄11,10▄░█11,1█0,2▓14,1▌15 12,10░11▓▓▓▓▒▓█▄██11,1█11,10░10,1▌▐11,10░░▒█10,1▌11 14▄▄10▄▄▄3░░▓10█14,10░░▄14,1█ 73 | 10 3░░░░10 14▀▀▀15 14▐14,10▌10,1█11,10░░░10,1█10,10 11▀▒▒▒▒▀10,1█11,10▒▓▒▀▀▀░▓▓12░10,1▌ 3,10░11▒▒▒10,1█▀11,10▒▒▓██11,1█3,10░14▐14,1▐3,10░11░▒▓██10,1████14,10░3,1░░░14▀▀ 74 | 14▀▀10▀▀14,10▄▄▄10,1██████14,10░11░▒▒░10,1█14▀10▐11,10░▒▒12░3░3,1░10▐11,10░░░░10,1▌11 10▀█11,10▒▓░3░14▐10,1 3,10█░10,1██14,10░░▄14,1█▀▀▀▀ 75 | 14▀▀▀▀▐14,10▄▄░░░10,1 █11,10░░3░▓3,1░14▐3,10░░10,1█14,10░▓11,1 14▐14,10░3░░█3,1▓░14▀▀▀▀ 76 | 14▀▀▀15 14▀▀10▀▀▀15 14▀▀▀▀▀15 14 ▀▀15 3░░░ 77 | 1 4▄▄5▄▄4▄▄▄5▄▄▄4░5▄▄▄▄▄▄▄▄▄4▄▄15 5▄4▄4,5▒5,1▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀4▀4,5░▒5,1▄ 78 | 4,5░15,1 0▄▄░▄▄▄▄▄▄▄▄ 14▄5▄4,5▓15,1 ░ 4,5▓5,1▄▄▄▄ 0▀███0,5▓0,1█▀ 5▄▄░▀▀ 79 | 5▀▀▀▀▄ 0█0,5▓0,1███0,5█▒0,1██▓15 5▀4,5░4,1 0▓▓▓█ 5▄▓▓▀ 80 | 5▀▄ 0▀▓▓█0,5█▓0,1███▓▒15 5█▌0░▓▀ 5▓▀ 81 | 5░▄ 0░░▀▀ 8▄▄▄▄▄▄██████8,7▓8,1▄▄▄▄▄5░ 0░ 5░▓ 82 | 5▓ 8▄▄▄▄8,7▓▓8,1▀▀░▀▀▀▀░ ▀8,7▓8,1█ 15░8▐█▀▀▀▄▄▄ 83 | 7▄░8▄8,7▓▒8,1 ▄▄▄▄█ 15░ 8███ 15░ 8▌ ▐██ 15░8▄▄ ▀8,7▓8,1▄░ 84 | 8,7░░░▒▒▓8,1 15░ 8▄▄8,7▓8,1█▀ 15▒ 8▀███ 15▒ 8░8,7▓8,1█8,7▓8,1 15▒ 8▄█8,7▓▓▒░░7,1▓ 85 | 7░14,7░7,1█8,7░ ░▒▓8,1 8,7▓8,1███▄▄▄▄▄8,7▓8,1███▄▄███8,7▓8,1░ ▀▀15░8,7▒▒░7,1█14,7░▒15,1 86 | 14,7▒▒░7,1█8,7░ ░8,1▄▄8,7▒8,1░▀▀▀15 0▄ ▄ 8▀▀▀▀8,7▓8,1▄▄8,7▒░ 14░▒▒▓15,1 87 | 14▐14,7▒▒░7,1▀▀▀ 5█ 14░░░░░░░░░░ ▄0▓ 14░ 5█ 7▀▀14,7░▒▒▓7,1░ 88 | 14,7▒▓14,1▀ ▄▓░3▄▄▄▄▄ ▄▄ ▄▄ ▄▄▄▄▄ 5▀3▄▄▄▄▄▄ 14░14,7▓14,1▌ 89 | 14,7▓▓▓▓14,1█▀3█8,3▓3,1 3,3 8░3,1█ ▀8,3▒▒3,1 8,3▓▓3,1▀ 8,3▓▓3,1 █8,3▒3,1█ 8,3▒▒14,1░ ░▒▓▄14,7▓▓15,1 90 | 14,7▓▓14,1░ 8,3▒▒3,1 3,3 3,1 8,3▒▒5,1░ 8,3▒3 8▒3,1 14▓ 8,3▒▒3,1 █ 8,3░▒3,1 8,3░░3,1▄▄▄▄ 14▀█14,7▓15,1 91 | 8,3░░3 3,1 8,3░░3,1 4▀3▄█▀8,3░░14,1▀ 8,3░░3,1█ 8,3░░3,1 ▄▄ ▀8,3░░15,1 92 | 3▀3,3 3,1▄▄▄█▀ 8,3░░3,1▀ ▀██ ▀█▄▄▄█▀ ▀8,3░3,1▄▄▄8,3░3,1▀ 93 | 5▓ 14▄▄▓▓ 5▄ 94 | 5█ 14▀▀ 14,5░14,1sd 95 | 14,5▒5,1▄▄▄14,5░15,1 96 | 5▀▀░ 97 | 14 8 3 ansi by the textmo9de exorcist w8ith help from sudden de0ath and H7 98 | 0SAUCE00live.acid.org:14400 ansichrist + friendsACiD 99 | 0 20130420 J 100 | -------------------------------------------------------------------------------- /local/bin/scripts/art/pussybones.txt: -------------------------------------------------------------------------------- 1 | 7 0,7▒▒7,1▄ 0,7█0,15▓0,7▓▓0,1████████0,15▓0,1███0,7▓7,1▌▐█0,7░7,1 █▒ ▄0▒7░░▄▄▒█▄ █0▒█▒▒██████0,7▓0,1███0,7▓▓0,1▌███0,7▄▄▀▀0,1█ 0,7▓▓▒▒▓▓0,1█▌ 2 | 7░ 0,5▒▒0,7▒▒▒7,1█0█████████0,15 ▐0,1███7▌ ▒0,7▒7,1█▀ █ 0░7▌ ▓▓ ▐█▌ ▐█0█▌ ▐████████████ ▀0,7▄▄ ▀▀█0,1▌ 0,7▓▓▓11,1░0 ▀▀█░ 3 | 7▒▒▄0░7▀0,5░░7,1█0,7▄▄0,1█0,7▄0,1█▀▄11,7██0,1▀7 0,15▓0,1███7▌ 0,7 7,1▒ ▐0,7░7,1 ▄ ░░ █ ██▄ 0,7░0,1█ ░██ ▀11,7███0,1▀████▌ ██0,7▀▀▄█0,1▒0,7▓0,5▀0,7▓0,5▓0,1▌ █▄▒ 4 | 0,7░░░0,1▒7 █0,7▀▄▄11█0,1▀15 0,15▒0,1███7 ▒░░█ █ ▐▒ ▐██░0,7░░7,1▒0▐▌▒██15 0▀██▄ ██0,7▓▓0,1██▓0,7▓0,5▄▄0,1█ ▀▓ 5 | 7▄0,7░7,1▀0 7 0,7▀7,1█▀▄0▄█▄11▒▒▒▄▄▀0▒▄11█0██7▓▓0,7░░7,1 ▄█▌ ██▄▀██▒0,7░░▒0,1███▄█████████▄██ 7 0 ▐███0,7▓▓0,1█0,7▓0,5▓▒0,7▒0,1▌ ▒█ 6 | 0,7░░0,1░ 7 ▐0,7░░▒▓▓▓0,1██▀▀▀▀████11█0,7▌7,1███▄███▄██████▓▓█0,7░0,1█████▀▀▀▀▀▀█████ 7▄▓▄0░█████0,7▓▓▒▒▒0,1█ ▓ 7 | 0,7░░░7,1▄0 ░7 █0,7░░0,1▐0,7▒0,1▀7 10 7▄7,3▀▒0▄10,1▄7 0▀██0,7█▄7,1████7,10▓7,1▄███████15,7░░7,1█0,7▐0,1███▀7 ▄7,3▀▒0▄3,1▄10 7 0▀ 7█0,7░░▒▒▒0,1▀▀█0,7▓▓▒▒▒▒11,1▒0▌ ▐ 8 | 0 0,7░░░0,1▒▐7 ░▄▀▀0 7 ▐3█10▌ ▐0,3░10,1▌7 0██0,7█▌7,1█10,7░7,10▓7,1█████10,7░7,1█████15,7░░0,1██ 7▐3█10▌ ▐0,3░7,1▌ 0▀▄▄░7 ▐0,7░▒▒▒▒0,1▄ ▀0,7▒▒▒▒▒▒0,1▌ 9 | 0 0,7░░▒▒0,1▌7 ▒█14,7░░░7,1 0▒▄7░▀8,3▄▄▄15,1▀10 7░0▐██0,7▌10░░7,1███████10,7░░7,1█7,10▓7,1█▓▓0,7▀7,1 ░▀8,3▄▄▄15,1▀7 0▄██▀7▒▓ 0▓0,7▒▒▒▒▒0,1▌ 0,7▒▒▒▒▒▓15,1 10 | 0 ▐0,7▒▒▒0,1▌7▐███14,7░░7,1▒ 0██▄10 7 ▐ 0██10,7░░7,1█████▓▓███10,7░░7,10▓7,1▒▒ ░15 0▄▒█▀7▄███0▒▌0,7▓▒▒▒▒0,1█ ▐0,7▒▒▒0,5▒▒0,1█ 11 | 0 ▐0,7▒▒▓▓7,1 ▀▀██0,7░░7,1▄ 0▀▀█11▓▓▓0▄7 ▐░░10,7░7,1█10,7░7,1████10,7░░7,1▓████10,7░░7,1▌ ▒░ 11▄▓▒▒▒▀0▀7░█▀▀▒█ 0▌0,7▓▓▒▒0,1▓█▌ █0,5▒▒0,7▓▓0,1█15▌ 12 | 0 0,7▒▓▓▓0,1▓▄ 7▀█▒▒█▄ 0▀0,7▒▒7,1░▐▒▒▓10,7░7,1██10,7░░7,1█████▓███10,7░░7,1 ░░░0,7░7,1▄ 11 7▄█15,7░7,1▄██▀ 0 0,7▓▓▓▓0,1▒██▄ ▐0,7▓▓▓▓0,1█15▌ 13 | 0 0,7▓▓▓▓▒▒░7,1▄0 7▀███▐14,7░░7,1 0▐0,7░░7,1▒▒▒████████████████10,7░░7,1 ░▒▒▒▓█0,7░░15░░7,1▀▀██ 0▄█0,7▓▓▓▓0,1 ██▌ █0,7▓▓0,1███ 14 | 1,15▌0,1 ▀0,7▓▓▓▓▒▒░0,1▄▄▄7▄██▒█0,7░7,1█▒▒▒▓▓▓████10,7░░7,1██████████15,7░░7,1 ▐▒▒▒▓▄ ▀ ▄█ 0████0,7▓▓0,1█ ██ █0,7▓▓0,1██▌ 15 | 1,15▌0,1▌ ▀▀█▓▓▓▄ 7 ▀0,7░7,1▄█▀▄0,7░7,1▓▓▓▒███10,7░░░7,1██████████▓15,7 ░░7,1 ▐▓▀▀██0,7░░15░░0,1 █████0,7▓▓0,1▌ ██░ ▐0,7▓▓0,1██▌ 16 | 0 █░ ░▄ 0,15▀▀0,1███7▄ ▀ 0,7░7,1██▒██ █10,7░░7,1█0,7░7,1███████████▓▓█15,7░░7,1▒███▄▀▀▀▀ 0▄0,7▓▓▓0,1▒██0,7▓0,1█ ██▒ █████▓ 17 | 0 ▐█▓ ▒█████0,15▓▓0,1▄▄7▄▒ 0░0,7░░7,1▌ ██▄█████████████0,7░░░ 7,1▓ ▐█15,7░7,1▄▀█▀▀▄▄▄0,7▒▒▒0,1▒▀▀███▌ ▄██▌ ▐0,7▓0,1███15▒ 18 | 0 ░▀██ ██ ███0,15▀▓▓0,7█7,1░0▒0,7▒░7,1██▄█0,7░7,1▒▒0,7░░7,1▒▒▒███████▓▓▓0,7░░7,1▒▒15,7░7,1█▒▒█0,7░░7,1▄▀0,7░▒▒0,1▒ ███ ▐██▀ ██0,7▓0,1██15▄▀ 19 | ░1,15▓0,1▄▄ ▀ ▐0,15▀15,1▀7 ▀0,7▓▓0,1▀7█▄██0,7░7,1█0,7▒0,1▌7 ░░4▄▄▄7▀0,7▒11▄▄15▄4▄4,15▄▄▄4,7▄4,1▄7▌ 0,7▐15▓7,1███▄█▀▀0,7▒0,1▄▀▀▄▄▄███▌░█▀▄▒ ▐██0,15▀▀0,1█15▄▄■ 20 | 7 0▀▀▒▒█▄▄▄▄ 7 0▄0,7▒▒0,1▄7▄0,7░░░ ░░7,1█0,7▐0,15▓7,1 4▐▓▓███4,7███4,1██████▀7 ▐0,7▒7,1█15,7░░░7,1████0▄█▀███████▒▒ ░ ▄0,7▓▓0,1███ 21 | 0 15▀0▀▀████0,7▓▓7,1 0▀0,7▒▒▒7,1▀ 0,7░7,1 ░0,7░7,1█0,7█0,1▌7 4 7 4▀▀4,7████4,1▀7 0 15▄0,7▓▌7,1█15,7░░░░7,1█0,7░░▒▒0,1██▌▀▓▓█▒█▓▌ ▄████0,7▓0,1█ 22 | 0 15▀0▀▓▓████0,7▒▒7,1░░0▀7 ▄▄▒█0,7░░7,1██0,7▐0,15▓15,1▄7 4 ▐██▌7 15▄0,15▄▓▓▓7,1▌▀▀15,7░░░░7,1███0▀0,7▓▓▓0,1 ▒██▀ 0,15▀0,1██0,7▓▓0,1██ 23 | 0░░ ▄▄▒█▓▓█0,7▒▒0,1▒▒0,7░0,1 7█▀▀█▀▀0,7░▀0,15▓▒15,1▄▄7 4▒7▀▀4▀15▄0▄0,15▄0,1████0,7▌7,1█▄▄█15,7░░░░7,1██▌0 ██▄ ░▀ 0,15▀▀█▄0,1██▌15▀░ 24 | 0██0,15▓0,1▀▀ 15 0 ▀▀█▓▓██0,7▓▓▒▒7,1▄▄0,7░7,1▄▄0,7▒7,1 0░0,15▓▓▒░15,1▄4 15▄0,15▄0,1█████0,7▓▀7,1█0,7░░░░░░7,1▒0,7░7,1▒▒0,7░7,1 0░▐▓▀ ▀▀▄▄▀▀0,15▄15,1▓▀0▐▌15░ 0█ 25 | 0▀▄▄▓▓░▄▄▀▀▀ ▀▀▀▀█0,7▓▓▒▒▒▒▒▒▓▓0,1█▒▓▀0,15▒15,1▒7 0█▀0,15▓▓▓0,7▓▓0,1▒█▀▀░7 ░▀ 0█ 0,7▒0,1 ▀ ▄█▄▄▀▀▄▄15░0▐▌ ▄██ 26 | 0,15▓▓0,1▒▀▀▀ ▄▄ 1,15▄0,1▀▄▀▄░▀ ▀ ▀▀▀▒ ░▄▒0,15▓0,1▀▒7 0▒0,15▒▒15,1▄0,15▓15,1▄0,15▓0,1▄0,7▓0,1▄▄0,7▒0,1▄▄0,7▒0,1 ▓▄▄▄▀▀▄▄█0,7▓▓0,15▓▓0,1▄▄▄ ▀▀▄▄▄ ▀█ 27 | 0▄▄▄▀▀▄██0,15▓0,1█▄▀▀▄1,15▄0,1▀▓▓▄▄█▄▄█ ▄ 0,15▓▓0,1▀▒█15▌7 0 15▀0▀0,15▒15,1▄0,15▓15,1▀0,15▓▓15,1▀▀0,7▓▓▓▓0,1█0,7▓▓▓▓▓0,1 0,7▓▓0,15▓▓▓▓0,1▀ ▀▄▄ ▄▄▀▀▀▄▄ 28 | 0,15▓▓0,1▌0,15▓0,1██0,15▓▓▀0,1█ ▄█ ▀ ▒▒15▀14 ░0▓14▀0▀0,15▀0,1▀0,15▀0,1▄0,15▄▀0,1█15▀14░░░░░10 15▀0,15░░░15,1▀0,15▒▒▒0,1▄█ 0,15▓0,1▀ ▀ ▀▀15 0▄███ ▄▀▀▄▄▄▄▄▄▄ 29 | 0,15▓▓ 0,1█0,15▓▓▀▄0,1█ 0,15▒0,1█░▒█ ▀ 1,15▒15,1▄▄0▒15▄▄0▓█▀█▒15▀0 15 14░░15▀0▀▀0,15▒▒15,1▄▄0,15▓▓▓▓0,1█15▀0▀▄ ▄▄ ▄██0,15▓▓0,1 █0,15▓▓▓0,1▄▄▄▄▄▄▄ 30 | 0,15▓ ▓▓▒▌▐0,1█ 0,15░0,1█░0,15░░0,1▒ ░ ▄ ▄15░1,15▓0,1▄▒▀15▀▀10 15 7▄10 0 15██▄0 ▄▄▄▀▄ ▀▄ ██0,15▓▓0,1▀15▄0,15 15,1▓▓0,15▀▀▀▓▓▓0,1██ 31 | 0,15 ▒▒▒▀░0,1█ 0,15░0,1█░15▓▓0,15░░0,1▒▌█░░▐▌▐▌░7▐▄ 5░15 5░7▐7,5▓7,1▌5 10 7 0 ▀▄█████ ▀▄ ▀▄▀▀15▄▒0,15▄▄▄▄▀▀0,1██0,15▄▄▀▀▓ 32 | 0,15░░░░░0,1▐▌15▓0█15▓0,15░░░░░0,1▒█ ▒ █ ▐▌7 ▐7,5▓▓10,1 5░15 5░░7,5▓▓5,1▌10 7 0 ▀▐▌██████▄▀▄ ▀▄▀0,15▒▒▒0,1████0,15▄▄▀▀0,1██0,15▄ 33 | 0,15░░░░15,1▓0█15▓0██15▓▓0▀0,15░░0,1▓█ ▓▌▐ ▒ ▒7 5,7▓8,1░5▌15▄0▄5▀▄▄15 5 ▄▄ 0▄15▄7,5▒8,1▒5 10 14░7 0▐█ █ ███0,15▓▓▓▀0,1▄▀▄ ▀▀▄▄15░▒▒0,15▒0,1███0,15▄ ▀0,1█ 34 | 0,15░░15,1▒▒0▐▌10█0█15▒0░░░15▄▄0█ 0,15░0,1▀ ░░▄ ░7 5▀7 15▀0░ ▒▒▀▒▀5 0▀5 0░15▀5 10 7 0 ▒▒▐ █0,15▓0,1█0,15▒▒▒░▀0,1▄▀▄▀▄▄▀▄▀█▓▓▓██0,15▄ 35 | 0░░█ ██▐▌██████ ░░▒▒▀7 0 14░15 0 7 10 14 ▄▄▄10 7 14▄7 14░░7 0▐ █ █0,15▒0,1█0,15░░░ 0,1█▄▀▄▀0,15▒0,1▄▀▄▀██▓▓██ 36 | 0███▐▌███████▐▌ ░ ▒▒██▌ 7 0░░15 7 0 ███ █0,15░ 0,1█0,15▒0,1▄▀▄▀█▄▀▄▀████ 37 | 0█████▐▌████ █ ██▒ ███ 15▐ ▄▄0░░▒▒15▀▀█▀0 15▄▄▄▄▄▄0░░ 15▄▄0 ▐██▓▓█ █▓0,15 ▐0,1█0,15▒0,1█ █ ▄▀▄▀7██ 38 | 0██▐▌█▐▌████▐▌████▓ ██▒15███0▒▒15█▄0▒ 15▄▒▄▄▒▄▄█▄0 15█▀▀0▒▒15█0 █░░0,7░0,1█0,7▓▓0,1 █▒0,15▄ 0,1██0,15░0,1██ █ 7▒█0▄▀▄ 39 | 0██████████ █ ████▀▄ ▒██▓▓0,15░░░░░0,1▄▄▄ ▌▄▒ 15████▄▄██▄0 ░░█0,7▌0,1█0,7▒0,1██0,7▓0,1 █░█████0,15▓0,1▀ ▐▌7█▒▒██0▄▀ 40 | 0█ ████████▐▌░█████▀ ▓█▒█0,15▒▒0,1▄0,15▒▒0,1▄0,15▒▒▒▒0,1▀0,15░░░░░░░░░0,1░█ ▒▒▄▀█▄0,7 0,1█0,7▓0,1██0,7▓0,1 █ ███▀ ▄ █7█▒█▒███ 41 | 7█0▐▌7█0▐▌███ █ ▒▒████▄▄█ ▒ ▒▄ █0,15▓▓0,1█0,15▓▓▓▓0,1█0,15▓▓▓0,1▄0,15▒▒▒0,1 0,15▒▒0,1 ▒ ▀0,7▓0,1███0,7 0,1█0,7▓0,1███ █ ▀█ ▄7█0 ▐▌7▒█▒▒██ 42 | 7█0▐▌7█0▐ ▐▌██▒▒██████▄▄██░▒▒▒██████▓▓█0,15▓▓▓0,1▌▒▒ ██▄▀ ▄▄0,7▓0,1███0,7 0,1████▀ █ █7█████0▐▌7▒▒█▒█0,7░ 43 | -------------------------------------------------------------------------------- /local/bin/scripts/bomber: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | #by necro 3 | e="\e[0m" 4 | bk="\e[38;2;1;1;1m" 5 | bl="\e[48;2;101;166;232m" 6 | wh="\e[48;2;251;253;252m" 7 | pi="\e[48;2;229;139;121m" 8 | while true; do 9 | clear 10 | echo -e " 11 | $bk██████████ $bk████$e 12 | $bk████$wh ████$e$bk ██$bl ██$e 13 | $bk██$wh ██████$bl $bk██$e 14 | $bk██$pi $wh ██$e$bk ████$e 15 | $bk██$pi ██ $wh ██$e 16 | $bk██$pi ██ $wh ██$e 17 | $bk██$pi ██ $wh ██$e 18 | $bk██$pi $wh ██$e 19 | $bk████$wh ██ ██$e 20 | $bk████████$wh ████████$e 21 | $bk██$bl ██$wh ██$bl ██$e 22 | $bk██$bl ██$wh ██$bl ██$e 23 | $bk██$wh ██$bl ██████$e 24 | $bk██$bl ██$bl ██$bl ██$e 25 | $bk████████████████$e 26 | $bk██$wh ██$e 27 | $bk██████████████$e 28 | $bk██$bl ██$e 29 | $bk████████████████$e" 30 | sleep 0.1 31 | clear 32 | echo -e " 33 | $bk██████████ ████$e 34 | $bk████$wh ██████$bl ██$e 35 | $bk██$wh ██$bl ██$e 36 | $bk██$pi $wh ████$e 37 | $bk████$pi ██ $wh ██$e 38 | $bk████$pi ██ $wh ██$e 39 | $bk████$pi ██ $wh ██$e 40 | $bk██$pi $wh ██$e 41 | $bk████$wh ████ ██$e 42 | $bk██$bl ████$wh ██████████$e 43 | $bk██$bl ██$wh ██$bl ██$wh ██$e 44 | $bk████$wh ██$bl ██$wh ██$e 45 | $bk████$wh ████████████████$e 46 | $bk██$bl ██████ ████$bl ██$e 47 | $bk████$wh $bl $wh ██████$e 48 | $bk██$bl ██$wh ████ ██$e 49 | $bk██$bl ████████$e$bk ██$wh ██$bl ██$e 50 | $bk████ ████$bl ██$e 51 | $bk██$bl ██$e 52 | $bk████$e" 53 | sleep 0.3 54 | clear 55 | echo -e " 56 | $bk██████████ $bk████$e 57 | $bk████$wh ████$e$bk ██$bl ██$e 58 | $bk██$wh ██████$bl $bk██$e 59 | $bk██$pi $wh ██$e$bk ████$e 60 | $bk██$pi ██ $wh ██$e 61 | $bk██$pi ██ $wh ██$e 62 | $bk██$pi ██ $wh ██$e 63 | $bk██$pi $wh ██$e 64 | $bk████$wh ██ ██$e 65 | $bk████████$wh ████████$e 66 | $bk██$bl ██$wh ██$bl ██$e 67 | $bk██$bl ██$wh ██$bl ██$e 68 | $bk██$wh ██$bl ██████$e 69 | $bk██$bl ██$bl ██$bl ██$e 70 | $bk████████████████$e 71 | $bk██$wh ██$e 72 | $bk██████████████$e 73 | $bk██$bl ██$e 74 | $bk████████████████$e" 75 | sleep 0.1 76 | clear 77 | echo -e " 78 | $bk██████████ ████ 79 | $bk████$wh ████$e $bk██$bl ██$e 80 | $bk██$wh ████$bl ██$e 81 | $bk██$pi $wh ██████████$e 82 | $bk██$pi ██ $wh ██$e 83 | $bk██$pi ██ $wh ██$e 84 | $bk██$pi ██ $wh ██$e 85 | $bk██$pi $wh ██$e 86 | $bk████████$wh ██████ ██$e 87 | $bk██$bl ██████████$wh ████$e 88 | $bk██$bl ████ ██$wh ██$e 89 | $bk██$wh ██$bl ██$wh ████$e 90 | $bk██$wh ██ ███████ ██$bl ██$e 91 | $bk████$bl ██ ██$e 92 | $bk████$bl ████$e 93 | $bk██████$wh $bl ██████$wh ████$e 94 | $bk██$bl ██$wh ██$e$bk ██$wh ██$bl ██$e 95 | $bk██$bl ██$e$bk ████$bl ██$e 96 | $bk████$e$bk ██$bl ██$e 97 | $bk████" 98 | sleep 0.3 99 | done 100 | -------------------------------------------------------------------------------- /local/bin/scripts/cmus-now: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # cmus 'now playing' notifications in dunst - developed by acidvegas (https://git.acid.vegas/void) 3 | artist=`cmus-remote -Q | grep --text '^tag artist' | sed '/^tag artistsort/d' | awk '{gsub("tag artist ", "");print}'` 4 | title=`cmus-remote -Q | grep --text '^tag title' | sed -e 's/tag title //' | awk '{gsub("tag title ", "");print}'` 5 | notify-send "♫ $artist - $title" -------------------------------------------------------------------------------- /local/bin/scripts/gitremote: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # git remote setup script - developed by acidvegas (https://git.acid.vegas) 3 | # 4 | # note: This assumes the directory structure of $HOME/dev/git/$USER/$REPO for each repository. 5 | # 6 | # usage: 7 | # gitremote | Update current working directory repository 8 | # gitremote -a | Update every repository 9 | 10 | SIGNING_KEY='441EB0F297E0DCF0AEF2F711EF4B922DB85DC9DE' 11 | 12 | update_repo() { 13 | DIR=$1 14 | USER=$(basename $(dirname $(dirname $DIR))) 15 | REPO=$(basename $(dirname $DIR)) 16 | echo "updating $USER/$REPO..." 17 | git -C $DIR remote remove origin 18 | if [ $USER = 'internetrelaychat' ]; then 19 | git -C $DIR remote add origin git@github.com:internet-relay-chat/$REPO.git 20 | git -C $DIR remote set-url --add --push origin git@github.com:internet-relay-chat/$REPO.git 21 | git -C $DIR remote set-url --add --push origin git@gitlab.com:$USER/$REPO.git 22 | git -C $DIR remote set-url --add --push origin git@codeberg.org:$USER/$REPO.git 23 | git -C $DIR remote set-url --add --push origin supergit:$USER/$REPO.git 24 | git -C $DIR remote set-url --add --push origin acidgit:$REPO.git 25 | else 26 | git -C $DIR remote add origin git@github.com:$USER/$REPO.git 27 | git -C $DIR remote set-url --add --push origin git@github.com:$USER/$REPO.git 28 | git -C $DIR remote set-url --add --push origin git@gitlab.com:$USER/$REPO.git 29 | git -C $DIR remote set-url --add --push origin git@codeberg.org:$USER/$REPO.git 30 | git -C $DIR remote set-url --add --push origin supergit:$USER/$REPO.git 31 | git -C $DIR remote set-url --add --push origin acidgit:$REPO.git 32 | fi 33 | git -C $DIR config user.signingkey $SIGNING_KEY 34 | if [ -f $DIR/description ]; then 35 | if [ "$(cat $1/description)" = "Unnamed repository; edit this file 'description' to name the repository." ]; then 36 | echo "Enter a description for $REPO:" 37 | read DESC 38 | echo "$DESC" > $DIR/description 39 | fi 40 | else 41 | echo "Enter a description for $REPO:" 42 | read DESC 43 | echo "$DESC" > $DIR/description 44 | fi 45 | cp $HOME/.scripts/irc-post-commit-hook $DIR/hooks/post-commit 46 | echo $USER > $DIR/owner 47 | echo "https://git.acid.vegas/$REPO.git" > $DIR/url 48 | } 49 | 50 | if [ "$#" = '1' ]; then 51 | if [ $1 = '-a' ]; then 52 | for d in $(find $HOME/dev/git -type d -name mirror -prune -o -type d -name .git -print | sort); do 53 | update_repo $d 54 | done 55 | fi 56 | else 57 | if [ -d $PWD/.git ]; then 58 | update_repo $PWD/.git 59 | else 60 | echo "invalid repository: missing .git directory" 61 | fi 62 | fi 63 | -------------------------------------------------------------------------------- /local/bin/scripts/gotimon: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Gotify Monitor - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | GOTIFY_SERVER="push.example.com:3000" 5 | GOTIFY_APP_ID="2" 6 | GOTIFY_CLIENT_TOKEN="changeme" 7 | 8 | while true; do 9 | websocat "wss://$GOTIFY_SERVER/stream?token=$GOTIFY_CLIENT_TOKEN" | while read event; do 10 | appid=$(echo "$event" | jq '.appid') 11 | 12 | [ ! $appid -eq $GOTIFY_APP_ID ] && continue # messages for other apps are ignored 13 | 14 | date=$(echo "$event" | jq -r '.date') 15 | id=$(echo "$event" | jq '.id') 16 | message=$(echo "$event" | jq -r '.message') 17 | priority=$(echo "$event" | jq '.priority') # sets the port to scan 18 | title=$(echo "$event" | jq -r '.title') 19 | formatted_date=$(date -d "$date" +"%m-%d %I:%M") 20 | 21 | printf "%-11s | %-5s | %-10s | %s\n" "$formatted_date" "$id" "$title" "$message" 22 | 23 | notify-send "Gotify - $title" "$message" 24 | done 25 | echo "Connection to gotify server lost, attempting to reconnect in 30 seconds..." 26 | sleep 30 27 | done -------------------------------------------------------------------------------- /local/bin/scripts/irc-post-commit-hook: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # irc post-commit hook - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | # Place this file in .git/hooks/post-commit and chmod +x 5 | 6 | # Configuration 7 | WEECHAT_NETWORK="supernets" 8 | WEECHAT_CHANNEL="#dev" 9 | WEECHAT_FIFO="/home/acidvegas/.local/share/weechat/weechat_fifo" 10 | SSH_SERVER="war" 11 | 12 | # Get commit data for the message 13 | _data=$(git log -1 --graph --pretty=format:"%h|%s|%cn") 14 | _hash=$(echo "$_data" | cut -d'|' -f1 | cut -c 3-) 15 | _msg=$(echo "$_data" | cut -d'|' -f2) 16 | _name=$(echo "$_data" | cut -d'|' -f3) 17 | #_name=$(basename $(dirname $(git rev-parse --show-toplevel))) # For locally parsing organization names 18 | _repo=$(basename -s .git $(git config --get remote.origin.url)) 19 | _summary=$(git show $_hash --stat | grep -E "fil(e|es) changed" | awk '{files+=$1; inserted+=$4; deleted+=$6} END {printf "%s|+%s|-%s", files, inserted, deleted }') 20 | _files=$(echo $_summary | cut -d'|' -f1) 21 | _inserts=$(echo $_summary | cut -d'|' -f2) 22 | _deletes=$(echo $_summary | cut -d'|' -f3) 23 | _ircmsg="irc.$WEECHAT_NETWORK.$WEECHAT_CHANNEL *14[11GitHub14] Commit pushed to 08$_name/$_repo (06$_hash) 14[$_files14|03$_inserts14|04$_deletes14] : $_msg" 24 | 25 | # Send the message to weechat 26 | echo "$_ircmsg" | ssh $SSH_SERVER tee $WEECHAT_FIFO > /dev/null 27 | -------------------------------------------------------------------------------- /local/bin/scripts/mutag: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # mutag - developed by acidvegas (https://git.acid.vegas/void) 3 | # removes all metadata & album art from mp3 files and sets the artist and title based on the directory and filename 4 | # requires: id3v2 python-eyed3 5 | find $HOME/music -type f | while read SONG; do 6 | DIR=$(dirname "$SONG") 7 | ARTIST=$(basename "$DIR") 8 | TITLE=$(basename "$SONG" .mp3) 9 | echo "$DIR | $ARTIST | $TITLE" 10 | eyeD3 --remove-all-images "$SONG" 11 | id3v2 --delete-all "$SONG" 12 | id3v2 --artist "$ARTIST" --song "$TITLE" -2 "$SONG" 13 | done -------------------------------------------------------------------------------- /local/bin/scripts/pmf: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # poor mans firewall - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | set -xev 5 | 6 | # Configuration 7 | PORT_SSH='22' 8 | 9 | # Kernel hardening settings 10 | mkdir -p /etc/sysctl.d 11 | { 12 | printf "net.ipv4.conf.all.accept_source_route = 0\n" 13 | printf "net.ipv6.conf.all.accept_source_route = 0\n" 14 | printf "net.ipv4.conf.all.rp_filter = 1\n" 15 | printf "net.ipv4.conf.default.rp_filter = 1\n" 16 | printf "net.ipv4.conf.all.accept_redirects = 0\n" 17 | printf "net.ipv6.conf.all.accept_redirects = 0\n" 18 | printf "net.ipv4.conf.default.accept_redirects = 0\n" 19 | printf "net.ipv6.conf.default.accept_redirects = 0\n" 20 | printf "net.ipv4.conf.all.log_martians = 1\n" 21 | printf "kernel.randomize_va_space = 2\n" 22 | printf "fs.suid_dumpable = 0\n" 23 | } > /etc/sysctl.d/99-custom-hardening.conf 24 | 25 | # Apply hardening settings 26 | sysctl -p /etc/sysctl.d/99-custom-hardening.conf 27 | 28 | # Flush existing rules 29 | iptables -F 30 | iptables -X 31 | iptables -t nat -F 32 | iptables -t nat -X 33 | iptables -t mangle -F 34 | iptables -t mangle -X 35 | 36 | # Default chain policies 37 | iptables -P INPUT DROP 38 | iptables -P FORWARD DROP 39 | iptables -P OUTPUT ACCEPT 40 | 41 | # Common Firewall rules 42 | iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 43 | iptables -A INPUT -p icmp --icmp-type echo-request -j DROP # Disable response to ping requests 44 | iptables -A INPUT -p icmp --icmp-type port-unreachable -j DROP 45 | iptables -A INPUT -i lo -j ACCEPT 46 | 47 | # Allow SSH access from the Pi server 48 | iptables -A INPUT -p tcp --dport $PORT_SSH -j ACCEPT 49 | 50 | # Save rules 51 | iptables-save > /etc/iptables/iptables.rules 52 | 53 | # Create and configure the iptables service 54 | printf '#!/bin/sh\nexec 2>&1\niptables-restore < /etc/iptables/iptables.rules\nexec chpst -b iptables pause\n' > /etc/sv/iptables/run 55 | chmod +x /etc/sv/iptables/run 56 | ln -sf /etc/sv/iptables /var/service/ && sv restart iptables 57 | 58 | # Show rules 59 | iptables -L -v -n -------------------------------------------------------------------------------- /local/bin/scripts/shotz: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # shotz - developed by acidvegas (https://acid.vegas/void) 3 | # take a screenshot with selection and optionally upload it to hardfiles.org 4 | 5 | output_dir="$HOME/media/i/scrots" 6 | output_file=$(date "+scrot_%y-%m_%d_%T.png") 7 | 8 | mkdir -p "$output_dir" 9 | scrot -s "$output_dir/$output_file" 10 | 11 | if [ "$1" = "-u" ]; then 12 | curl -F file=@"$output_dir/$output_file" https://hardfiles.org/ | xclip -selection clipboard 13 | fi 14 | -------------------------------------------------------------------------------- /local/bin/scripts/statusbar: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | while true; do 3 | xsetroot -name "$(date '+%I:%M @ %m/%d')" 4 | sleep 60 5 | done -------------------------------------------------------------------------------- /local/bin/scripts/todo: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # dmenu todo script - developed by acidvegas (https://git.acid.vegas/void) 3 | db=$HOME/.todo 4 | touch $db 5 | while : 6 | do 7 | cmd=$(dmenu -l 10 -m 0 -fn "Misc Ohsnap.Icons:style=Regular:size=11" -nb "#000000" -nf "#FFFFFF" -sb "#000000" -sf "#00D787" "$@" < "$db") 8 | if [ -z "$cmd" ]; then 9 | break 10 | elif grep -q "^$cmd\$" "$db"; then 11 | grep -v "^$cmd\$" "$db" > "$db.$$" 12 | mv "$db.$$" "$db" 13 | else 14 | echo "$cmd" >> "$db" 15 | fi 16 | done 17 | exit 0 -------------------------------------------------------------------------------- /local/bin/scripts/torwall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # tor firewall script - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | # All traffic is routed through Tor. 5 | # printf "DNSPort 53\nTransPort 9040\nSocksPort 9050\nControlPort 9051\n" > /etc/tor/torrc 6 | 7 | 8 | start_tor() { 9 | iptables -t nat -A OUTPUT -o lo -j RETURN 10 | iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports 9040 11 | iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 9053 12 | iptables -t nat -A OUTPUT -p tcp --dport 53 -j REDIRECT --to-ports 9053 13 | iptables -A OUTPUT ! -o lo ! -d 127.0.0.1/8 ! -p tcp -j DROP 14 | echo "repository=http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/pub/voidlinux/current/musl" > /etc/xbps.d/00-repository-main.conf 15 | echo "nameserver 127.0.0.1" > /etc/resolv.conf && chattr +i /etc/resolv.conf 16 | export SOCKS_PROXY="socks5://127.0.0.1:9050" 17 | echo "All traffic is now routed through Tor." 18 | } 19 | 20 | new_tor() { 21 | iptables -F 22 | iptables -t nat -F 23 | 24 | # Allow local-only connections 25 | iptables -A OUTPUT -o lo -j ACCEPT 26 | 27 | # Allow the tor process to establish connections 28 | iptables -A OUTPUT -m owner --uid-owner $(id -u debian-tor) -j ACCEPT 29 | 30 | # Redirect all non-local TCP connections to Tor's TransPort 31 | iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports 9040 32 | 33 | # Redirect DNS queries to Tor's DNSPort 34 | iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 9053 35 | iptables -t nat -A OUTPUT -p tcp --dport 53 -j REDIRECT --to-ports 9053 36 | 37 | # Reject any other outbound traffic 38 | iptables -A OUTPUT -j REJECT 39 | } 40 | 41 | stop_tor() { 42 | iptables -F 43 | iptables -t nat -F 44 | echo "repository=https://repo-default.voidlinux.org/current/musl" > /etc/xbps.d/00-repository-main.conf 45 | echo "nameserver 1.1.1.1" > /etc/resolv.conf && chattr +i /etc/resolv.conf 46 | unset SOCKS_PROXY 47 | echo "Tor-only mode is now off." 48 | } 49 | 50 | if [[ $1 == "start" ]]; then 51 | start_tor 52 | elif [[ $1 == "stop" ]]; then 53 | stop_tor 54 | else 55 | echo "Usage: $0 [start|stop]" 56 | fi 57 | -------------------------------------------------------------------------------- /local/share/bash/bash_aliases: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # .bash_aliases - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | # colors 5 | alias diff='diff --color=auto' 6 | alias dmesg='dmesg --color=auto' 7 | alias dir='dir --color=auto' 8 | alias egrep='egrep --color=auto' 9 | alias grep='grep --color=auto' 10 | alias fgrep='fgrep --color=auto' 11 | alias ip='ip -color=auto' 12 | alias ls='ls --color=auto' 13 | alias ncdu='ncdu --color dark -rr' 14 | alias tree='tree -C' 15 | alias vdir='vdir --color=auto' 16 | 17 | # rewrites 18 | alias cp='cp -i' 19 | alias exa='exa -aghl --git' 20 | alias mv='mv -i' 21 | alias pip='pip3' 22 | alias progress='progress -m' 23 | alias python='python3' 24 | alias vlock='vlock -a' 25 | alias wget='wget -q --show-progress' 26 | 27 | # git 28 | alias gitfix='git push -u origin HEAD' 29 | alias rmcommits="git checkout --orphan latest_branch && git add -A && git commit -S -am \"Initial commit\" && git branch -D master && git branch -m master && git push -f origin master" 30 | alias nrmcommits="git checkout --orphan latest_branch && git add -A && git commit -S -am \"Initial commit\" && git branch -D main && git branch -m main && git push -f origin main" 31 | 32 | # random 33 | alias ..="cd ../" 34 | alias dropkey="dropbearkey -y -f .dropbear/key | head -n 2 | tail -n 1" 35 | alias dump='setterm -dump 1 -file screen.dump' 36 | alias fzfind='grep --line-buffered --color=never -r "" * | fzf' 37 | alias newnym='echo -e "AUTHENTICATE \"CHANGEME\"\r\nSIGNAL NEWNYM\r\nQUIT" | nc 127.0.0.1 9051' 38 | alias mdcat='glow' 39 | alias mkgz='tar -cvzf' 40 | alias myip='curl 4.icanhazip.com && curl 6.icanhazip.com' 41 | alias pubkey='ssh-keygen -y -f ~/.ssh/key' 42 | alias pydebug='python -m trace -t' 43 | alias torch='curl -s https://check.torproject.org | grep "Congratulations"' 44 | alias y2m='youtube-dl --extract-audio --audio-format mp3 --audio-quality 0 -o "%(title)s.%(ext)s" --no-cache-dir --no-call-home' 45 | alias up='sudo mount -o remount,rw /boot && sudo xbps-install -Su && sudo mount -o remount,ro /boot' 46 | 47 | # scripts 48 | alias dbc='~/.local/bin/scripts/dbc' 49 | alias gitremote='~/.local/bin/scripts/gitremote' 50 | alias irc2ansi='python3 ~/.local/bin/scripts/irc2ansi.py' 51 | alias mutag='~/.local/bin/scripts/mutag' 52 | alias pass='~/.local/bin/scripts/pass' 53 | alias shotz='~/.local/bin/scripts/shotz' 54 | alias todo='~/.local/bin/scripts/todo' 55 | -------------------------------------------------------------------------------- /local/share/bash/bash_fun: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # .bash_fun - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | alias ansi='python3 ~/.scripts/irc2ansi.py ~/dev/git/ircart/ircart/ircart/ansi' 5 | alias ascii='python3 ~/.scripts/irc2ansi.py ~/dev/git/ircart/ircart/ircart' 6 | alias bomber='sh $HOME/.scripts/bomber' 7 | alias busy="cat /dev/urandom | hexdump -C | grep 'ca fe'" 8 | alias chess='chess-tui' 9 | alias cmatrix='cmatrix -ab -u 1 -C magenta -s' 10 | alias crypto="curl rate.sx" 11 | alias donut="curl ascii.live/donut" 12 | alias emoji"curl -sSL 'https://git.io/JXXO7' | fzf" 13 | alias fireworks='confetty fireworks' 14 | alias lavat='lavat -c magenta -s 10 -r 1 -R 1 -k cyan -b 20' 15 | alias mapscii='telnet mapscii.me' 16 | alias minesweeper='go-sweep' 17 | alias rmatrix='cmatrix -ab -u 1 -C red' 18 | alias pipes='sh $HOME/.scripts/pipes' 19 | alias pokemon='curl pkmn.li' 20 | alias starwars='telnet towel.blinkenlights.nl' 21 | alias wh='curl wttr.in' 22 | 23 | scene() { 24 | for x in $(curl -L -k -s http://www.textfiles.com/artscene/ansi/bbs/ | tr ' ' '\n' | grep HREF | tr '"' ' ' | awk '{print $2}' | grep -P "(ans|vt)" | grep -v ".png" | grep "." | shuf); do 25 | curl -L -k -s http://www.textfiles.com/artscene/ansi/bbs/$x | iconv -f 437 -t utf-8 | pv -q -L 600 26 | done 27 | } 28 | 29 | # Some of the commands below are from package installs or custom builds 30 | fun() { 31 | echo "COMMAND | DESCRIPTION" 32 | echo "------------- | -----------" 33 | echo "asciiquarium | Terminal-based aquarium" 34 | echo "ansi | Play ANSI art in your terminal" 35 | echo "ascii | Play ASCII art in your terminal" 36 | echo "bomber | Bomberman in your terminal" 37 | echo "busy | Make your terminal busy" 38 | echo "chess | Play chess in your terminal" 39 | echo "confetty | Confetti in your terminal" 40 | echo "cmatrix | Matrix-style animation" 41 | echo "crypto | Show cryptocurrency rates" 42 | echo "donut | Spinning donut" 43 | echo "dvd | Bouncing DVD logo" 44 | echo "fire | Fire animation" 45 | echo "fireworks | Fireworks in your terminal" 46 | echo "lavat | Lava lamp style animation" 47 | echo "mapscii | Maps in your terminal" 48 | echo "minesweeper | Play minesweeper in your terminal" 49 | echo "pipes | Pipes in your terminal" 50 | echo "pokemon | Random Pokémon" 51 | echo "scene | Play ANSI scene art in your terminal" 52 | echo "starwars | Watch Star Wars in your terminal" 53 | echo "tty-solitaire | Play solitaire in your terminal" 54 | echo "wh | Weather in your terminal" 55 | echo "wipe | Clear your terminal in style" 56 | } 57 | -------------------------------------------------------------------------------- /local/share/bash/bash_functions: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # .bash_functions - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | cheat() { 5 | curl cht.sh/$1 6 | } 7 | 8 | color() { 9 | for color in {0..255}; do 10 | printf "\e[48;5;%sm %3s \e[0m" $color $color 11 | if [ $((($color + 1) % 6)) == 4 ]; then 12 | echo 13 | fi 14 | done 15 | } 16 | 17 | cctain() { 18 | NAME=$1 19 | incus storage create $NAME-pool dir 20 | incus launch images:debian/12 $NAME-container -s $NAME-pool 21 | incus config set $NAME-container boot.autostart true 22 | sleep 10 # Delay to allow the container to start and get an IP address from the DHCP server 23 | incus exec $NAME-container -- apt update -y 24 | incus exec $NAME-container -- apt upgrade -y 25 | incus exec $NAME-container -- apt install -y git nano unattended-upgrades wget 26 | incus exec $NAME-container -- useradd -m -s /bin/bash agent 27 | incus exec $NAME-container -- journalctl --vacuum-time=1d 28 | incus exec $NAME-container -- sh -c 'printf "[Journal]\nStorage=volatile\nSplitMode=none\nRuntimeMaxUse=500K" > /etc/systemd/journald.conf' 29 | incus exec $NAME-container -- systemctl restart systemd-journald 30 | } 31 | 32 | fkill() { 33 | local pid 34 | if [ "$UID" != "0" ]; then 35 | pid=$(ps -f -u $UID | sed 1d | fzf -m | awk '{print $2}') 36 | else 37 | pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}') 38 | fi 39 | if [ "x$pid" != "x" ]; then 40 | echo $pid | xargs kill -${1:-9} 41 | fi 42 | } 43 | 44 | extract() { 45 | if [ ! -z "$1" ]; then 46 | if [ -f $1 ]; then 47 | case $1 in 48 | *.tar.bz2) tar xvjf $1 ;; 49 | *.tar.gz) tar xvzf $1 ;; 50 | *.tar.xz) tar xvJf $1 ;; 51 | *.lzma) unlzma $1 ;; 52 | *.bz2) bunzip2 $1 ;; 53 | *.rar) unrar x -ad $1 ;; 54 | *.gz) gunzip $1 ;; 55 | *.tar) tar xvf $1 ;; 56 | *.tbz2) tar xvjf $1 ;; 57 | *.tgz) tar xvzf $1 ;; 58 | *.zip) unzip $1 ;; 59 | *.Z) uncompress $1 ;; 60 | *.7z) 7z x $1 ;; 61 | *.xz) unxz $1 ;; 62 | *) echo "$1 - unknown archive format" ;; 63 | esac 64 | else 65 | echo "$1 - file does not exist" 66 | fi 67 | fi 68 | } 69 | 70 | flash() { 71 | sudo dd bs=4M if=$1 of=$2 status=progress 72 | sudo /bin/sync 73 | } 74 | 75 | gcp() { 76 | git add . && git commit -S -m "$*" && git push 77 | } 78 | 79 | hf() { 80 | curl -F file=@$1 https://hardfiles.org/ # yeah thats right motherfucker, real bay shit, for real bay motherfuckers. 81 | } 82 | 83 | mntusb() { 84 | sudo mount $1 /mnt -o uid=$(id -u),gid=$(id -g) 85 | } 86 | 87 | repo() { 88 | if [ ! -z "$1" ]; then 89 | for d in $(find $HOME/dev/git -type d -name mirrors -prune -o -type d -name .git -print); do 90 | r=$(basename $(dirname $d)) 91 | if [ $1 = $r ]; then 92 | cd $d 93 | fi 94 | done 95 | fi 96 | } 97 | 98 | qr() { 99 | curl qrenco.de/$1 100 | } 101 | 102 | rnd() { 103 | cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $1 | head -n 1 104 | } 105 | 106 | backup() { 107 | DATA="dev dl doc media .gnupg .ssh .bogoya" 108 | DEST=backup/main 109 | for d in $DATA; do 110 | rsync -avzh --progress --delete $HOME/$d blackbox:$DEST 111 | done 112 | } 113 | 114 | # Legacy comand for setting terminal titles in tabbed, might play with this ANSI escape later... 115 | #title() { 116 | # echo -ne "\033]0;$1\007" 117 | #} 118 | -------------------------------------------------------------------------------- /local/share/bash/bash_recon: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # .bash_recon - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | asn2ranges() { 5 | local cache_file="/tmp/.bgp_tools_table_cache" 6 | local current_time=$(date +%s) 7 | local update_interval=$((2 * 60 * 60)) # 2 hours in seconds 8 | if [ -f "$cache_file" ]; then 9 | local last_update=$(date -r "$cache_file" +%s) 10 | local time_diff=$(($current_time - $last_update)) 11 | if [ $time_diff -gt $update_interval ]; then 12 | curl -A 'acmeco bgp.tools - acid.vegas@acid.vegas' -s https://bgp.tools/table.txt -o "$cache_file" 13 | fi 14 | else 15 | curl -A 'acmeco bgp.tools - acid.vegas@acid.vegas' -s https://bgp.tools/table.txt -o "$cache_file" 16 | fi 17 | awk -v asn="$1" '$NF == asn {print $1}' "$cache_file" 18 | } 19 | 20 | asn2search() { 21 | local search_string="$1" 22 | local cache_file="/tmp/.bgp_tools_asn_cache" 23 | local current_time=$(date +%s) 24 | local update_interval=$((24 * 60 * 60)) # 24 hours in seconds 25 | if [ -f "$cache_file" ]; then 26 | local last_update=$(date -r "$cache_file" +%s) 27 | local time_diff=$(($current_time - $last_update)) 28 | if [ $time_diff -gt $update_interval ]; then 29 | curl -A 'acmeco bgp.tools - acid.vegas@acid.vegas' -s https://bgp.tools/asns.csv -o "$cache_file" 30 | fi 31 | else 32 | curl -A 'acmeco bgp.tools - acid.vegas@acid.vegas' -s https://bgp.tools/asns.csv -o "$cache_file" 33 | fi 34 | grep -i "$search_string" "$cache_file" 35 | } 36 | 37 | atlastream() { 38 | curl -s "https://atlas-stream.ripe.net/stream/?streamType=result&msm=1001" # FOR COWBOYS ONLY 39 | } 40 | 41 | bgplookup() { 42 | if [ -f "$1" ]; then 43 | { echo "begin"; echo "verbose"; echo "count"; cat "$1"; echo "end"; } | nc bgp.tools 43 44 | else 45 | whois -h bgp.tools " -v $1" 46 | fi 47 | } 48 | 49 | bgpstream() { 50 | curl -s "https://ris-live.ripe.net/v1/stream/?format=json&client=hacktheplnet" # FOR COWBOYS ONLY 51 | } 52 | 53 | crtsh() { 54 | curl -s "https://crt.sh/?q=$1&output=json" | jq -r '.[].name_value' | sort | uniq 55 | } 56 | 57 | shardz() { 58 | # Usage: shardz INDEX/TOTAL 59 | # curl https://example.com/large_file.txt | shardz 1/3 | httpx -title -ip -tech-detect -json -o shard-1.json 60 | awk -v n="$1" -v t="$2" 'NR % t == n' 61 | } 62 | 63 | shodan() { 64 | curl https://internetdb.shodan.io/$1 65 | } 66 | -------------------------------------------------------------------------------- /local/share/gnupg/gpg.conf: -------------------------------------------------------------------------------- 1 | default-key 441EB0F297E0DCF0AEF2F711EF4B922DB85DC9DE 2 | keyid-format 0xlong 3 | keyserver-options include-revoked no-honor-keyserver-url 4 | list-options show-uid-validity 5 | no-comments 6 | no-emit-version 7 | no-greeting 8 | utf8-strings 9 | verify-options show-uid-validity 10 | with-fingerprint 11 | 12 | personal-cipher-preferences AES256 AES192 AES CAST5 13 | personal-digest-preferences SHA512 SHA384 SHA256 SHA224 14 | cert-digest-algo SHA512 15 | default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed -------------------------------------------------------------------------------- /setup: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # void setup script - developed by acidvegas (https://git.acid.vegas/void) 3 | 4 | # note: After importing keys: printf "FINGERPRINTHERE:6:" | gpg --import-ownertrust 5 | 6 | set -xev 7 | 8 | # Configuration 9 | ARCH=x86_64 # x86_64 or x86_64-musl 10 | CPU=intel # amd or intel (blank for none) 11 | DISPLAY_SERVER=xorg # xorg or blank for none 12 | GFX_DRIVER=intel # amd, intel, or nvidia (blank for none) 13 | PI=0 # 0 for desktop, 1 for Raspberry Pi 14 | REMOTE=dropbear # dropbear or ssh (blank for none) 15 | USERNAME=acidvegas 16 | WIFI_DEV=wlan0 17 | 18 | 19 | GIT_URL="https://raw.githubusercontent.com/acidvegas/void/master" 20 | 21 | setup_root() { 22 | setup_packages 23 | 24 | useradd -m -s /bin/bash $USERNAME && gpasswd -a $USERNAME wheel && passwd $USERNAME 25 | gpasswd -a $USERNAME _incus && gpasswd -a $USERNAME _incus-admin # Typically incus & incus-admin but void uses the underscore prefix 26 | 27 | for item in 6x11 7x12 7x14; do 28 | wget -O /usr/share/kbd/consolefonts/ohsnap${item}r.psfu $GIT_URL/font/ohsnap${item}r.psfu 29 | done 30 | #printf "\nnohook resolv.conf\n" >> /etc/dhcpcd.conf 31 | echo "CGROUP_MODE=\"unified\"" >> /etc/rc.conf 32 | echo "proc /proc proc defaults,hidepid=2 0 0" >> /etc/fstab && mount -o remount /proc 33 | printf "set boldtext\nset minibar\nset nohelp\nset nowrap\nset quickblank\nset tabsize 4\nunbind ^J main\nset selectedcolor black,red\ninclude \"/usr/share/nano/*.nanorc\"\n" > /etc/nanorc 34 | printf "\nexport HISTFILE=/dev/null\nexport LESSHISTFILE=/dev/null\nexport PYTHONHISTFILE=/dev/null\n" >> /etc/profile 35 | printf "#\!/bin/sh\nclear && (echo && printf \" E N T E R T H E V O I D\n" && echo) | nms -af red\n" > /etc/profile.d/motd.sh 36 | printf "\nFONT=\"ohsnap6x11r\"\n" >> /etc/rc.conf 37 | printf "Defaults lecture = always\nDefaults lecture_file = /etc/sudoers.d/sudoers.lecture\nroot ALL=(ALL) ALL\n%%wheel ALL=(ALL) ALL\n" > /etc/sudoers 38 | printf "\n\033[1m \033[32m\"Bee\" careful \033[34m__\n \033[32mwith sudo! \033[34m// \ \n \\\\\\_/ \033[33m//\n \033[35m''-.._.-''-.._.. \033[33m-(||)(')\n '''\033[0m\n" > /etc/sudoers.d/sudoers.lecture 39 | printf "\nhsts=0\n" >> /etc/wgetrc 40 | 41 | # For Drevo Calibur V2 FN key fix 42 | #echo 0 | sudo pkexec tee /sys/module/hid_apple/parameters/fnmode 43 | 44 | if [ $REMOTE = "dropbear" ]; then 45 | LOCAL_IP=$(ip addr show $WIFI_DEV | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1) 46 | RND_PORT=$(shuf -i 10000-65535 -n 1) 47 | xbps-install -y dropbear 48 | printf '#!/bin/sh\nexec 2>&1\n[ -r conf ] && . ./conf\nexec dropbear -p $LOCAL_IP:$RND_PORT -w -s -R -F' > /etc/sv/dropbear/run 49 | fi 50 | 51 | # Need to optionally enable dhcp and wpa_supplicant incase we are using ethernet 52 | for item in dhcpcd incus incus-user socklog-unix nanoklogd wpa_supplicant; do 53 | ln -sfv /etc/sv/$item /var/service # Use /etc/runit/runsvdir/default/ instead of /var/service if in a chroot environemnt 54 | done 55 | } 56 | 57 | 58 | setup_nonfree() { 59 | xbps-install -Suy void-repo-nonfree 60 | 61 | if [ $CPU = "intel" ]; then 62 | xbps-install -y intel-ucode linux-firmware-intel 63 | elif [ $CPU = "amd" ]; then 64 | xbps-install -y linux-firmware-amd 65 | fi 66 | 67 | if [ $DISPLAY_SERVER = "xorg" ]; then 68 | if [ $GFX_DRIVER = "intel" ]; then 69 | xbps-install -y mesa-dri vulkan-loader mesa-vulkan-intel intel-video-accel 70 | elif [ $GFX_DRIVER = "amd" ]; then 71 | xbps-install -y mesa-dri vulkan-loader mesa-vulkan-radeon radeon-video-accel # Un-tested 72 | elif [ $GFX_DRIVER = "nvidia" ]; then 73 | xbps-install -y nvidia nvidia-libs 74 | fi 75 | fi 76 | 77 | xbps-reconfigure -f linux 78 | } 79 | 80 | 81 | setup_packages() { 82 | setup_nonfree 83 | 84 | if [ $DISPLAY_SERVER = "xorg" ]; then 85 | #xbps-install -y mesa-dri # Raspberry Pi 86 | xbps-install -y xorg libX11 libX11-devel libXft libXft-devel libXinerama libXinerama-devel libXrandr libXrandr-devel arandr xrandr brightnessctl 87 | xbps-install -y alacritty dmenu dunst firefox pinentry-dmenu redshift scrot unclutter xclip 88 | xbps-install -y ohsnap-font font-unifont-bdf freefont-ttf noto-fonts-ttf noto-fonts-ttf-extra noto-fonts-cjk noto-fonts-emoji # These fonts give you the most unicode support coverage (noto) 89 | fi 90 | 91 | # Development 92 | if [ $ARCH = 'x86_64' ]; then 93 | xbps-install -y gcc 94 | fi 95 | xbps-install -y cargo checkbashisms go make patch pkg-config python3 python3-pip 96 | xbps-install -y ansible aws-cli python3-aiodns python3-aiofiles python3-aiohttp python3-boto3 python3-Flask terraform 97 | xbps-install -y bluetuith 98 | 99 | # Essentials 100 | xbps-install -y curl dropbear git jq openssh progress rsync socklog-void tmux tor tree unzip whois zip 101 | xbps-install -y tailscale wireguard wireguard-tools wireproxy 102 | 103 | xbps-install -y python3-zulip zulip-desktop zulip-term 104 | 105 | # Raspberry Pi specific 106 | #xbps-install -y rng-tools && ln -sfv /etc/sv/rngd /var/service/ && sv up rngd 107 | 108 | xbps-install -y fzf glow gotify-cli gnupg2-scdaemon lxc incus incus-client incus-tools lazygit oath-toolkit websocat 109 | #xbps-install -y earlyoom && ln -sfv /etc/sv/earlyoom /var/service/ 110 | 111 | # Alternatives 112 | xbps-install -y bat btop delta duf exa procs xsv 113 | 114 | # Fun 115 | xbps-install -y asciiquarium chess-tui cmatrix no-more-secrets tuimoji tty-solitaire 116 | 117 | # Audio 118 | #xbps-install -y alsa-utils cmus ffmpeg id3v2 eyeD3 spotify-tui youtube-dl # Revamp audio setup at some point 119 | 120 | # Hardware 121 | xbps-install -y bluetuith gpsd 122 | 123 | # Recon 124 | xbps-install -y aircrack-ng bettercap bandwhich bpfmon ettercap ghidra kismet masscan mitmproxy strace tcpdump termshark wireshark wuzz 125 | 126 | # Radio 127 | #xbps-install -y airspy chirp CubicSDR gnuradio gqrx inspectrum librtlsdr rtl-sdr rx_tools SoapyRTLSDR SDRPlusPlus 128 | } 129 | 130 | 131 | setup_configs() { 132 | mkdir -p $HOME/.config/alacritty && wget -O $HOME/.config/alacritty/alacritty.toml $GIT_URL/config/alacritty/alacritty.toml 133 | mkdir -p $HOME/.config/cmus && wget -O $HOME/.config/cmus/autosave $GIT_URL/config/cmus/autosave 134 | mkdir -p $HOME/.config/dunst && wget -O $HOME/.config/dunst/dunstrc $GIT_URL/config/dunst/dunstrc 135 | mkdir -p $HOME/.config/git && wget -O $HOME/.config/git/config $GIT_URL/config/git/config 136 | mkdir -p $HOME/.config/tmux && wget -O $HOME/.config/tmux/tmux.conf $GIT_URL/config/tmux/tmux.conf 137 | mkdir -p $HOME/.config/X11 && wget -O $HOME/.config/X11/xinitrc $GIT_URL/config/X11/xinitrc 138 | 139 | sed -i "s|/dev/sda2|$(df $HOME | awk 'NR==2 {print $1}')|" $HOME/.config/tmux/tmux.conf 140 | 141 | mkdir -p $HOME/.local/share/bash 142 | for item in bash_aliases bash_functions bash_fun bash_recon; do 143 | wget -O $HOME/.local/share/bash/$item $GIT_URL/local/share/bash/$item 144 | done 145 | wget -O $HOME/.bashrc $GIT_URL/.bashrc 146 | echo "history -c && clear && reset" > $HOME/.bash_logout 147 | 148 | mkdir -p $HOME/.local/share/gnupg && wget -O $HOME/.local/share/gnupg/gpg.conf $GIT_URL/local/share/gnupg/gpg.conf 149 | printf "pinentry-program /usr/bin/pinentry-curses\ndefault-cache-ttl 3600" > $HOME/.local/share/gnupg/gpg-agent.conf 150 | chmod 700 $HOME/.local/share/gnupg && chmod 600 $HOME/.local/share/gnupg/* 151 | 152 | mkdir -p $HOME/.local/bin/scripts 153 | for SCRIPT in cmus-now gitremote irc-post-commit-hook mutag pmf shotz statusbar todo; do 154 | wget -O $HOME/.local/bin/scripts/$SCRIPT $GIT_URL/scripts/$SCRIPT 155 | done 156 | wget -O $HOME/.local/bin/scripts/dbc https://raw.githubusercontent.com/acidvegas/dbc/main/dbc 157 | wget -O $HOME/.local/bin/scripts/pass https://raw.githubusercontent.com/acidvegas/pass/main/pass 158 | chmod +x $HOME/.local/bin/scripts/* 159 | 160 | mkdir -p $HOME/.local/share/fonts && wget -O $HOME/.local/share/fonts/BlockZone.ttf $GIT_URL/font/BlockZone.ttf && fc-cache -f -v 161 | 162 | mkdir -p $HOME/.config/pip && printf "[global]\nbreak-system-packages = true" > ~/.config/pip/pip.conf 163 | } 164 | 165 | 166 | setup_fun() { 167 | BUILD=$HOME/dev/build 168 | mkdir -p $BUILD 169 | 170 | wget -O $HOME/.local/bin/scripts/irc2ansi.py https://raw.githubusercontent.com/internet-relay-chat/archive/master/art/irc2ansi.py 171 | wget -O $HOME/.local/bin/scripts/bomber $GIT_URL/scripts/bomber && chmod +x $HOME/.local/bin/scripts/bomber 172 | wget -O $HOME/.local/bin/scripts/pipes https://raw.githubusercontent.com/pipeseroni/pipes.sh/master/pipes.sh && chmod +x $HOME/.local/bin/scripts/pipes 173 | 174 | git clone https://github.com/AngelJumbo/lavat.git $BUILD/lavat 175 | sudo make -C $BUILD/lavat clean install 176 | 177 | git clone https://github.com/lptstr/fire --recurse $BUILD/fire 178 | sudo make -C $BUILD/fire clean install 179 | 180 | git clone https://github.com/ricoriedel/wipe $BUILD/wipe 181 | cargo build --release --manifest-path $BUILD/wipe/Cargo.toml # Need to install 182 | 183 | git clone https://github.com/pythops/bouncinamation $BUILD/bouncinamation 184 | cargo build --release --manifest-path $BUILD/bouncinamation/Cargo.toml # Need to install 185 | 186 | go install github.com/maaslalani/confetty@latest # Animations 187 | go install github.com/maxpaulus43/go-sweep@latest # Minesweeper 188 | } 189 | 190 | 191 | setup_builds() { 192 | BUILD=$HOME/dev/build 193 | mkdir -p $BUILD 194 | 195 | git clone --depth 1 http://git.suckless.org/dwm $BUILD/dwm 196 | wget -O $BUILD/dwm/config.h $GIT_URL/dwm/config.h 197 | wget -O $BUILD/dwm/patch_nosquares.diff $GIT_URL/dwm/patch_nosquares.diff 198 | wget -O $BUILD/dwm/patch_notitles.diff $GIT_URL/dwm/patch_notitles.diff 199 | patch $BUILD/dwm/drw.c $BUILD/dwm/patch_nosquares.diff 200 | patch $BUILD/dwm/dwm.c $BUILD/dwm/patch_notitles.diff 201 | sudo make -C $BUILD/dwm clean install 202 | } 203 | 204 | 205 | setup_user_packages() { 206 | VERSION=$(curl -s https://api.github.com/repos/boxdot/gurk-rs/releases/latest | jq -r .tag_name | cut -c2-) 207 | wget -O $HOME/.local/bin/gurk https://github.com/boxdot/gurk-rs/releases/download/v${VERSION}/gurk-x86_64-unknown-linux-gnu.tar.gz 208 | 209 | wget -O $HOME/.local/bin/cursor https://downloader.cursor.sh/linux/appImage/x64 210 | chmod u+x $HOME/.local/bin/cursor 211 | 212 | VERSION=$(curl -s https://api.github.com/repos/obsidianmd/obsidian-releases/releases/latest | jq -r .tag_name | cut -c2-) 213 | wget -O $HOME/.local/bin/obsidian https://github.com/obsidianmd/obsidian-releases/releases/download/v${VERSION}/Obsidian-${VERSION}.AppImage 214 | chmod u+x $HOME/.local/bin/obsidian 215 | 216 | TEMP=$(mktemp -d) 217 | wget -O $TEMP/zed.tar.gz https://zed.dev/api/releases/stable/latest/zed-linux-x86_64.tar.gz 218 | tar -xzf $TEMP/zed.tar.gz -C $HOME/.local 219 | ln -s $HOME/.local/zed.app/zed $HOME/.local/bin/zed 220 | rm -rf $TEMP 221 | 222 | mkdir -p $HOME/.config/pip 223 | printf "[global]\nbreak-system-packages = true" > $HOME/.config/pip/pip.conf 224 | pip install --user asyncwhois ecs elasticsearch meshtastic scalene 225 | 226 | cargo install binsider csvlens git-dumper netscanner 227 | 228 | go install -v github.com/nxtrace/NTrace-core@latest 229 | go install -v github.com/projectdiscovery/asnmap/cmd/asnmap@latest 230 | go install -v github.com/projectdiscovery/chaos-client/cmd/chaos@latest 231 | go install -v github.com/projectdiscovery/cvemap/cmd/cvemap@latest 232 | go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest 233 | go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest 234 | go install -v github.com/projectdiscovery/katana/cmd/katana@latest 235 | go install -v github.com/projectdiscovery/mapcidr/cmd/mapcidr@latest 236 | go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest 237 | go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest 238 | go install -v github.com/projectdiscovery/tlsx/cmd/tlsx@latest 239 | 240 | git clone https://github.com/blechschmidt/massdns.git $HOME/dev/git/mirror/massdns 241 | make -C $HOME/dev/git/mirror/massdns && sudo make -C $HOME/dev/git/mirror/massdns install 242 | } 243 | 244 | 245 | 246 | [ "$#" -ne 1 ] && echo "usage: $0 [root|config|build|fun]" && exit 1 247 | 248 | case "$1" in 249 | root) setup_root ;; 250 | config) setup_configs ;; 251 | build) setup_builds ;; 252 | fun) setup_fun ;; 253 | *) echo "usage: $0 [root|config|build|fun]\n"; exit 1 ;; 254 | esac 255 | 256 | 257 | 258 | xbps-install -Syu && vkpurge rm all && xbps-install -y openssh 259 | >/etc/ssh/sshd_config 260 | printf "Port XXX\nAddressFamily inet\nListenAddress 0.0.0.0\nPasswordAuthentication no\nPrintMotd yes\nPrintLastLog no\nBanner none" > /etc/ssh/sshd_config 261 | ln -s /etc/sv/sshd /var/service 262 | nano /etc/ssh/sshd_config 263 | sv restart sshd 264 | printf "\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKoWLkmkbkwgivwqbzXBsIa8EbTGAEibGkX6CC/tiKZe admin@supernets.org" >> /home/acidvegas/.ssh/authorized_keys 265 | chown acidvegas:acidvegas /home/acidvegas/.ssh/authorized_keys 266 | chmod 400 /home/acidvegas/.ssh/authorized_keys 267 | --------------------------------------------------------------------------------