Compare commits

..

No commits in common. "ng" and "main" have entirely different histories.
ng ... main

47 changed files with 757 additions and 257 deletions

12
README.md Normal file
View file

@ -0,0 +1,12 @@
# Raine's Dotfiles
## Crates
Everything is a crate.
If something is distro specific you should follow the following naming scheme:
`crate.<DISTRO>.sh`
## Using it
Just use the script tbh
```sh
curl -L https://via.ixvd.net/sh | sh
```

View file

@ -0,0 +1,12 @@
super_apply() {
pacman -Syyu --noconfirm
pacman -S --needed --noconfirm sudo reflector
if ! grep -q "Reflector" /etc/pacman.d/mirrorlist; then
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
reflector -c NL -f 10 --threads 4 --save /etc/pacman.d/mirrorlist
else
echo "err: reflector already executed -- skipping..."
fi
cp files/pacman.conf /etc/pacman.conf
}

View file

@ -0,0 +1,5 @@
super_apply() {
apt update -y
apt install -y netselect-apt sudo
netselect-apt
}

11
crates/00-system/crate.sh Normal file
View file

@ -0,0 +1,11 @@
#!/bin/sh
describe="Install stuff on the system!"
scripts="@distro @self"
super_apply() {
if [ -f /usr/lib/security/pam_wheel.so ] && ! grep -q "# pam_wheel.so added" /etc/pam.d/su; then
echo "auth sufficient pam_wheel.so trust use_uid" > /etc/pam.d/su
echo "# pam_wheel.so added" > /etc/pam.d/su
fi
}

View file

@ -0,0 +1,31 @@
[options]
HoldPkg = pacman glibc yay
Architecture = auto
Color
CheckSpace
ParallelDownloads = 5
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#[testing]
#Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
#[community-testing]
#Include = /etc/pacman.d/mirrorlist
[community]
Include = /etc/pacman.d/mirrorlist
#[multilib-testing]
#Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist

17
crates/01-ssh/crate.sh Normal file
View file

@ -0,0 +1,17 @@
#!/bin/sh
describe="setup ssh"
apply() {
[ -e "$HOME/.ssh/authorized_keys" ] || ln files/authorized_keys $HOME/.ssh/authorized_keys
if ! [ -f "$HOME/.ssh/id_rsa" ]; then
echo "Creating new ssh key for this device..."
ssh-keygen -f $HOME/.ssh/id_rsa -p "" -q
echo "Adding key to authorized_keys..."
cat $HOME/.ssh/id_rsa.pub > $HOME/.ssh/authorized_keys
fi
}
undo() {
echo "Undoing ssh keys is not supported, please do this manually."
}

View file

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCeNQfnbyyF3sht43vH5BcXDPca8nWu6bKPVGvAlWBOq4Av8ME2IQgwVe9nJ05r73ZY02/Vdqc01a8wyK5Hmw0XlPL0Cn6wc9QoiscOvq5lMUK87S2tr3EVLGkgl8o7nmVuWgLewyojiORjM02P1PZEiFhKPXVEQFxU0dFz9QtpAdm0u78Xn2HTukHpXSv44R3XDDMFZ3Ek/XRuS6J9dZVxGkgCLQhK8kpfbxuiYxaRC7MHgGlYuxjLuZ6P4i+V+SSSShfCGdm6U9bgeIAwftN6a8Pc9+OsBeZGSUrGjZjRlD35q0a7fbpoS8pKTfbwgf/ijYeu3JmAQUlY+H959mIpg4H9XOgRrKVJSYwx5/BGuhmWgVy6HIYpXCQfEbLE7QDmwC2C430KzAH6jCcrRNyurIUCuO4iq9dwoQTzboMccOK79S2Z+1B5fYgS3BZgaiTUBSME2G2FriM6utgleiBnvFu/p7oH2I8ZHL/aVcSWAw0gbzsr7ADywAuiDNZk18c= strix@ryuk

View file

@ -0,0 +1,11 @@
#!/bin/sh
pkgs="i3 i3lock i3status libpulse brightnessctl xss-lock dex maim dmenu gnome-keyring feh picom"
super_apply() {
pacman -S --needed --noconfirm $pkgs
}
super_undo() {
pacman -R --noconfirm $pkgs
}

26
crates/05-i3/crate.sh Normal file
View file

@ -0,0 +1,26 @@
#!/bin/sh
describe="Installs i3"
scripts="@distro @self"
apply() {
[ -d "$HOME/.config/i3" ] || mkdir -p $HOME/.config/i3
[ -d "$HOME/.config/i3status" ] || mkdir -p $HOME/.config/i3status
[ -e "$HOME/.config/i3/config" ] || ln files/config $HOME/.config/i3/config
[ -e "$HOME/.config/i3status/config" ] || ln files/status_config $HOME/.config/i3status/config
[ -e "$HOME/.config/picom.conf" ] || ln files/picom.conf $HOME/.config/picom.conf
}
undo() {
rm $HOME/.config/i3/config
rm $HOME/.config/i3status/config
}
super_apply() {
[ -d "/etc/X11/xorg.conf.d" ] || mkdir -p /etc/X11/xorg.conf.d/
cp files/40-proper-touchpad.conf /etc/X11/xorg.conf.d/40-proper-touchpad.conf
}
super_undo() {
rm /etc/X11/xorg.conf.d/40-proper-touchpad.conf
}

View file

@ -0,0 +1,12 @@
#!/bin/sh
pkgs="i3 i3lock i3status pulseaudio-devel brightnessctl xss-lock dex maim dmenu gnome-keyring feh picom"
super_apply() {
xbps-install -y $pkgs
}
super_undo() {
xbps-remove -y $pkgs
}

View file

@ -0,0 +1,8 @@
Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "NaturalScrolling" "True"
Option "Tapping" "on"
EndSection

206
crates/05-i3/files/config Normal file
View file

@ -0,0 +1,206 @@
#######################
## Raine's i3 config ##
## Mar 22, 2023 ##
## mutation: 1m ##
#######################
## Mostly similar to i3's config yet differs
# Useful variables:
# This section probably gets changed a lot
# ---
set $terminal alacritty
set $screen_lock i3lock -c "#111111" --nofork
set $appmenu i3-dmenu-desktop
set $screenshot maim -s | xclip -selection clipboard -t image/png
set $font pango:monospace 8
# Startup Applications:
# Things that will startup when starting i3.
# ---
exec_always --no-startup-id dex --autostart --environment i3
exec_always --no-startup-id nm-applet
exec_always --no-startup-id xss-lock --transfer-sleep-lock -- $screen_lock
exec_always --no-startup-id gnome-keyring-daemon --start --components=ssh,secrets,pkcs11
exec_always --no-startup-id feh --bg-fill ~/Pictures/wallpaper.jpg
exec_always --no-startup-id picom
# Gaps & Borders:
# ---
gaps inner 10
smart_gaps on
default_border pixel 1
hide_edge_borders smart_no_gaps
# Extra variables:
# Only need changing for very specific installations.
# ---
set $audio_volume_up XF86AudioRaiseVolume
set $audio_volume_down XF86AudioLowerVolume
set $audio_mute XF86AudioMute
set $audio_mute_mic XF86AudioMicMute
set $brightness_up XF86MonBrightnessUp
set $brightness_down XF86MonBrightnessDown
set $ws_1 "1:main"
set $ws_2 "2:term"
set $ws_3 "3:docs"
set $ws_4 "4:mail"
set $ws_5 "5"
set $ws_6 "6"
set $ws_7 "7"
set $ws_8 "8"
set $ws_9 "9:bg"
set $ws_10 "10:misc"
set $meta_refresh_statusbar killall -SIGUSR1 i3status
bar {
strip_workspace_numbers yes
status_command i3status
}
# END OF CONFIG
set $mod Mod4
set $alt Mod1
# Customization
# class border backgr. text indic. child_border
client.focused #81A1C1 #81A1C1 #ffffff #D8DEE9
client.focused_inactive #2E3440 #2E3440 #88C0D0 #454948
client.unfocused #2E3440 #2E3440 #88C0D0 #454948
client.urgent #D08770 #3B4252 #ffffff #268BD2
client.placeholder #000000 #0c0c0c #ffffff #000000
client.background #3B4252
# Generic
floating_modifier $mod
tiling_drag modifier titlebar
font $font
# Open a terminal
bindsym $mod+Return exec $terminal
# Kill current window
bindsym $mod+$alt+q kill
# Open app menu
bindsym $mod+d exec --no-startup-id $appmenu
# Lock screen
bindsym $mod+l exec --no-startup-id $screen_lock
# Screenshots
bindsym Print exec --no-startup-id $screenshot
# Audio
bindsym $audio_volume_up exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $meta_refresh_statusbar
bindsym $audio_volume_down exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $meta_refresh_statusbar
bindsym $audio_mute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $meta_refresh_statusbar
bindsym $audio_mute_mic exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $meta_refresh_statusbar
# Brightness
bindsym $brightness_up exec --no-startup-id brightnessctl set +5% && $meta_refresh_statusbar
bindsym $brightness_down exec --no-startup-id brightnessctl set 5%- && $meta_refresh_statusbar
# Change focused window
bindsym $mod+Up focus up
bindsym $mod+Down focus down
bindsym $mod+Left focus left
bindsym $mod+Right focus right
# Move focused window
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Right move right
# Splits
bindsym $mod+Shift+h split h
bindsym $mod+Shift+v split v
# Change container layout
bindsym $mod+Shift+s layout stacking
bindsym $mod+Shift+t layout tabbed
bindsym $mod+Shift+d layout toggle split
# Make current window fullscreen
bindsym $mod+Shift+f fullscreen toggle
# Floating stuff
bindsym $mod+space focus mode_toggle
bindsym $mod+Shift+space floating toggle
# Scratchpad
bindsym $mod+Shift+minus move scratchpad
bindsym $mod+minus scratchpad show
# Switch to workspace
bindsym $mod+1 workspace $ws_1
bindsym $mod+2 workspace $ws_2
bindsym $mod+3 workspace $ws_3
bindsym $mod+4 workspace $ws_4
bindsym $mod+5 workspace $ws_5
bindsym $mod+6 workspace $ws_6
bindsym $mod+7 workspace $ws_7
bindsym $mod+8 workspace $ws_8
bindsym $mod+9 workspace $ws_9
bindsym $mod+0 workspace $ws_10
# Move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $ws_1
bindsym $mod+Shift+2 move container to workspace $ws_2
bindsym $mod+Shift+3 move container to workspace $ws_3
bindsym $mod+Shift+4 move container to workspace $ws_4
bindsym $mod+Shift+5 move container to workspace $ws_5
bindsym $mod+Shift+6 move container to workspace $ws_6
bindsym $mod+Shift+7 move container to workspace $ws_7
bindsym $mod+Shift+8 move container to workspace $ws_8
bindsym $mod+Shift+9 move container to workspace $ws_9
bindsym $mod+Shift+0 move container to workspace $ws_10
# Move through workspaces
bindsym $mod+$alt+Left workspace prev
bindsym $mod+$alt+Right workspace next
# WM stuff
# reload i3 config
bindsym $mod+$alt+c reload
# restart i3
bindsym $mod+$alt+r restart
# exit i3
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'Exit i3?' -B 'Yes, exit i3' 'i3-msg exit'"
# Modes
bindsym $mod+r mode resize
mode "resize" {
bindsym $nav_left resize shrink width 10 px or 10 ppt
bindsym $nav_down resize grow height 10 px or 10 ppt
bindsym $nav_up resize shrink height 10 px or 10 ppt
bindsym $nav_right resize grow width 10 px or 10 ppt
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+s mode "session"
mode "session" {
bindsym l exec --no-startup-id $lock, mode "default"
bindsym e exec --no-startup-id i3-msg exit, mode "default"
bindsym Shift+r exec --no-startup-id systemctl reboot, mode "default"
bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+s mode "default"
}

View file

@ -0,0 +1,9 @@
inactive-opacity = 0.75;
blur: {
method = "box";
size = 10;
background = false;
background-frame = false;
background-fixed = false;
}

View file

@ -0,0 +1,57 @@
general {
output_format = "i3bar"
colors = true
interval = 5
}
order += "ipv6"
order += "wireless wlp58s0"
order += "battery 0"
order += "disk /"
order += "memory"
order += "load"
order += "tztime local"
wireless wlp58s0 {
format_up = "W: (%quality at %essid, %bitrate) %ip"
format_down = "W: down"
}
battery 0 {
format = "%status %percentage %remaining %emptytime"
format_down = "No battery"
status_chr = "⚡ CHR"
status_bat = "🔋 BAT"
status_unk = "? UNK"
status_full = "☻ FULL"
path = "/sys/class/power_supply/BAT%d/uevent"
low_threshold = 10
}
tztime local {
format = "%Y-%m-%d %H:%M:%S"
hide_if_equals_localtime = false
}
tztime berlin {
format = "%Y-%m-%d %H:%M:%S %Z"
timezone = "Europe/Berlin"
}
load {
format = "%5min"
}
memory {
format = "%used"
threshold_degraded = "10%"
format_degraded = "MEMORY: %free"
}
disk "/" {
format = "%free"
}
read_file uptime {
path = "/proc/uptime"
}

View file

@ -0,0 +1,7 @@
super_apply() {
pacman -S --needed --noconfirm zsh
}
super_undo() {
pacman -R --noconfirm zsh
}

View file

@ -0,0 +1,7 @@
super_apply() {
apt install -y zsh
}
super_undo() {
pacman -R --noconfirm zsh
}

31
crates/10-zsh/crate.sh Normal file
View file

@ -0,0 +1,31 @@
#!/bin/sh
describe="Install zsh and oh-my-zsh!"
scripts="@distro @self"
super_apply() {
usermod $USER --shell /bin/zsh
}
super_undo() {
usermod $USER --shell /bin/bash
}
apply() {
if [ ! -d "$HOME/.oh-my-zsh" ]; then
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended
PL_DIR=${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
[ -d "$PL_DIR" ] || git clone https://github.com/zsh-users/zsh-autosuggestions $PL_DIR
PL_DIR=${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
[ -d "$PL_DIR" ] || git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $PL_DIR
fi
[ -f "$HOME/.zshrc" ] && unlink $HOME/.zshrc
[ -e "$HOME/.zshrc" ] || ln files/.zshrc $HOME/.zshrc
}
undo() {
unlink $HOME/.zshrc
rm -rf $HOME/.oh-my-zsh
}

View file

@ -0,0 +1,10 @@
#!/bin/sh
super_apply() {
xbps-install -y zsh
}
super_undo() {
xbps-remove -y zsh
}

View file

@ -0,0 +1,53 @@
#!/bin/zsh
# Raine's .zshrc
if [ "$PROFILEINC" = "1" ]; then
. ~/.profile
fi
export EDITOR=vim
export GPG_TTY=$(tty)
export PATH="$PATH:$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$HOME/.local/bin"
# oh-my-zsh init
if [ -f "$HOME/.oh-my-zsh/oh-my-zsh.sh" ]; then
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="afowler"
plugins=(git docker docker-compose node zsh-autosuggestions zsh-syntax-highlighting zsh-cargo-completion)
source $ZSH/oh-my-zsh.sh
else
echo "oh-my-zsh not detected :("
PS1="$(whoami)@${HOSTNAME:-$(hostname)} $ "
fi
update_dotfiles() {
cd $HOME/.dotfiles
git pull
cd - &> /dev/null
}
share_cdn() {
if ! [ -f "$1" ]; then
echo "file needs to exist"
return 1
fi
scp $1 keymaker:/usr/share/cdn/random/$2 > /dev/null
echo "https://cdn.ixvd.net/random/${2:-$(basename $1)}"
}
container() {
docker run \
-ti \
--rm \
--name tmp-$(id -u)-$(openssl rand -hex 8) \
--network ${CONTAINER_NETWORK:-internal} \
alpine \
ash
}
[ -f "$HOME/.config/i3/shortcuts-i3.sh" ] && . ~/.config/i3/shortcuts-i3.sh
alias q="exit"
alias vim="nvim"
alias vi="nvim"

View file

@ -0,0 +1,7 @@
super_apply() {
pacman -S --needed --noconfirm neovim
}
super_undo() {
echo "we never uninstall vim -_-"
}

View file

@ -0,0 +1,7 @@
super_apply() {
apt install -y neovim
}
super_undo() {
echo "we never uninstall vim -_-"
}

15
crates/20-vim/crate.sh Normal file
View file

@ -0,0 +1,15 @@
#!/bin/sh
describe="Install vim and it's stuff"
scripts="@distro @self"
apply() {
[ -d "$HOME/.config/nvim" ] || mkdir -p "$HOME/.config/nvim"
[ -e "$HOME/.config/nvim/init.vim" ] || ln files/init.vim $HOME/.config/nvim/init.vim
[ -e "$HOME/.ideavimrc" ] || ln files/.ideavimrc $HOME/.ideavimrc
}
undo() {
unlink $HOME/.config/nvim/init.vim
unlink $HOME/.ideavimrc
}

View file

@ -0,0 +1,7 @@
super_apply() {
xbps-install -y neovim
}
super_undo() {
echo "we never uninstall vim -_-"
}

View file

@ -0,0 +1,10 @@
source ~/.vimrc
set scrolloff=5
set incsearch
map Q gq
Plug 'machakann/vim-highlightedyank'
Plug 'tpope/vim-commentary'
Plug 'wellle/targets.vim'

View file

@ -0,0 +1,27 @@
" vim preferences
set number
set relativenumber
syntax on
" No arrow keys
noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>
" ensure vim-plug
let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
if empty(glob(data_dir . '/autoload/plug.vim'))
silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
call plug#begin()
Plug 'ThePrimeagen/vim-be-good'
Plug 'machakann/vim-highlightedyank'
Plug 'tpope/vim-commentary'
Plug 'wellle/targets.vim'
Plug 'vim-scripts/loremipsum'
call plug#end()

View file

@ -0,0 +1,7 @@
super_apply() {
pacman -S --needed --noconfirm alacritty
}
super_undo() {
pacman -R --noconfirm alacritty
}

View file

@ -0,0 +1,13 @@
#!/bin/sh
describe="Installs alacritty and configs"
scripts="@distro @self"
apply() {
[ -d "$HOME/.config/alacritty" ] || mkdir -p $HOME/.config/alacritty
[ -e "$HOME/.config/alacritty/alacritty.yml" ] || ln files/alacritty.yml $HOME/.config/alacritty/alacritty.yml
}
undo() {
unlink $HOME/.config/alacritty/alacritty.yml
}

View file

@ -0,0 +1,7 @@
super_apply() {
xbps-install -y alacritty
}
super_undo() {
xbps-remove -y alacritty
}

View file

@ -0,0 +1,6 @@
cursor:
style:
shape: 'Block'
blinking: 'On'
blink_interval: 500

9
crates/40-git/crate.sh Normal file
View file

@ -0,0 +1,9 @@
#!/bin/sh
describe="Setup git"
scripts="@distro @self"
apply() {
git config --global user.name Strix
git config --global user.email strix@saluco.nl
}

View file

@ -1,6 +0,0 @@
name="alacritty"
description="Set up alacritty"
files() {
descfile -l files/alacritty.yml {{home}}/.config/alacritty/alacritty.yml
}

View file

@ -1 +0,0 @@
alacritty

View file

@ -1,11 +0,0 @@
name="arch custom"
description="install's custom arch things"
suscript ./
conditionfn is_arch
is_arch() {
grep -q "arch" /etc/os-release
}

View file

@ -1,8 +0,0 @@
#!/bin/sh
name="i3"
description="Installs i3 with config"
files() {
descfile -l ./files/i3config {{home}}/.config/i3/config
}

View file

@ -1,2 +0,0 @@
i3
i3blocks

89
dot Executable file
View file

@ -0,0 +1,89 @@
#!/bin/sh
ask=0
is_function() {
type "$1" 2>/dev/null | sed "s/$1//" | grep -qwi function
}
curr_distro() {
cat /etc/os-release | grep -G "^ID=" | sed 's/ID=//'
}
include() {
[ -f "$1" ] || return 1
. $1
return 0
}
func() {
if is_function $(echo "super_$2"); then
[ "${DO_SUDO:-yes}" = "yes" ] || return 0
ecmd=". $1 && super_$2"
[ "$(id -u)" = "0" ] && sh -c "$ecmd" || sudo sh -c "$ecmd"
unset ecmd
fi
is_function $2 && $2
}
# only run this *in crate dir*
run_crate() {
enabled=1
include ./crate.sh || exit 1
if [ -n "$describe" ]; then
echo "desc($(basename $PWD)): $describe"
fi
if [ $enabled -ne 1 ]; then
return
fi
cmd=$1
scripts=${scripts:-"@self @distro"}
for s in $scripts; do
echo "exec($(basename $PWD)): $s/$cmd"
case $s in
@self)
func ./crate.sh $cmd
;;
@distro)
unset -f super_$cmd
unset -f $cmd
include ./crate.$(curr_distro).sh
func ./crate.$(curr_distro).sh $cmd
unset -f super_$cmd
unset -f $cmd
include ./crate.sh
;;
*)
sh $s
;;
esac
done
}
echo "# details:"
echo "# user: $USER (${UID:-$(id -u)})"
echo "# groups: $(groups)"
echo "# distro: $(curr_distro)"
cmd=$1
if [ -z "$cmd" ]; then
echo "usage: $0 <command> [...args]"
exit 1
else
shift
fi
for c in ${@:-$(ls crates)}; do
[ -d crates/*$c ] || exit 1
cd crates/*$c
case $cmd in
a | apply)
run_crate apply
;;
u | undo)
run_crate undo
;;
*) exit 1 ;;
esac
cd ../..
done

13
dot.sh
View file

@ -1,13 +0,0 @@
#!/bin/sh
for lib in $(find ./lib -type f -name *.lib.sh); do
. $lib
done
__log_lvl=0
for crate in $(crates); do
debug "loading $crate..."
done
echo "OK"

View file

@ -1,88 +0,0 @@
#!/bin/sh
. ${LIB_DIR:-./lib}/crate.common.sh
. ${LIB_DIR:-./lib}/log.lib.sh
. ${LIB_DIR:-./lib}/vars.lib.sh
file=$1
action=$2
run_crate_config_hooks() {
debug "running conditional functions..."
for condfn in $conditionfns; do
debug "running \"$condfn\"..."
$condfn || return 1
done
files
}
prompt_pending_actions() {
echo "This crate (${crate:-${1:-unknown}}) wants to make the following changes:"
if [ -n "$packages_marked_for_install" ]; then
echo "Install these packages:"
for pkg in $packages_marked_for_install; do
echo " $pkg"
done
fi
if [ -n "$packages_marked_for_removal" ]; then
echo "Remove these packages:"
for pkg in $packages_marked_for_removal; do
echo " $pkg"
done
fi
if [ -n "$files_to_link" ]; then
echo "Link these files:"
for link in $files_to_link; do
echo " $(echo $link | sed 's/:/ \-\> /')"
done
fi
if [ -n "$files_to_copy" ]; then
echo "Copy these files:"
for file in $files_to_copy; do
echo " $(echo $file | sed 's/:/ \-\> /')"
done
fi
printf "Is this okay? [press enter to continue] "
read
}
case $action in
config_check)
if ! run_crate_config_hooks; then
warn "crate config failed"
exit 1
fi
skip=0
trap 'skip=1' INT
prompt_pending_actions
[ $skip -eq 1 ] && exit 1
trap - INT
;;
run)
if [ "$UID" = "0" ]; then
.
for script in $scripts_to_run_as_su; do
debug "script $script"
$script
done
pm -i $packages_marked_for_install
pm -r $packages_marked_for_removal
else
for file in $files_to_copy; do
debug "link $(echo "$file" | sed 's/:/ \-\> /g')"
cp $(echo "$file" | sed s'/:.*//g') $(echo "$file" | sed s'/.*://g')
done
for file in $files_to_link; do
debug "link $(echo "$file" | sed 's/:/ \-\> /g')"
ln $(echo "$file" | sed s'/:.*//g') $(echo "$file" | sed s'/.*://g')
done
for script in $scripts_to_run; do
debug "script $script"
$script
done
fi
;;
esac

View file

@ -1,44 +0,0 @@
#!/bin/sh
script() {
scripts_to_run="$scripts_to_run $1"
}
suscript() {
scripts_to_run_as_su="$scripts_to_run_as_su $1"
}
pkgs() {
for pkg in $@; do
pkgname="$(echo $pkg | cut -c 2-)"
case $(echo $pkg | cut -c 1) in
+)
packages_marked_for_install="$packages_marked_for_install $pkgname"
;;
-)
packages_marked_for_removal="$packages_marked_for_removal $pkgname"
;;
esac
done
}
conditionfn() {
conditionfns="$conditionfns $1"
}
descfile() {
islink=${ALWAYS_LINK:-0}
while getopts "l" opt; do
case $opt in
l)
islink=1
;;
esac
done
shift $((OPTIND-1))
if [ $islink -eq 1 ]; then
files_to_link="$files_to_link $(subvars $1):$(subvars $2)"
else
files_to_copy="$files_to_copy $(subvars $1):$(subvars $2)"
fi
}

View file

@ -1,13 +0,0 @@
#!/bin/sh
crates() {
for c in $(find ./crates -mindepth 1 -maxdepth 1 -type d); do
[ -f "$c/crate.sh" ] && echo $(basename $c)
done
}
crate_runner() {
[ -d "$1" ] || return 1
sh ./lib/crate-runner.sh $1 $2
}

View file

@ -1,60 +0,0 @@
#!/bin/sh
__log_lvl=1
__log_get_lvl() {
case ${1:-$__log_lvl} in
0)
echo debug
;;
1)
echo info
;;
2)
echo warn
;;
3)
echo err
;;
4)
echo fatal
;;
esac
}
__log() {
[ $1 -ge $__log_lvl ] || return
level=$(__log_get_lvl $1)
shift
printf "[%s] %s\n" "$level" "$@"
}
debug() {
__log 0 "$@"
}
info() {
__log 1 "$@"
}
warn() {
__log 2 "$@"
}
err() {
__log 3 "$@"
}
fatal() {
while getopts "e:" opt; do
case $opt in
e)
exitnum=$OPTARG
;;
esac
done
shift $((OPTIND-1))
__log 4 "$@"
exit ${exitnum:-1}
}

View file

@ -1,11 +0,0 @@
#!/bin/sh
safevar() {
echo "$@" | sed 's_/_\\/_g'
}
subvars() {
echo "$@" \
| sed "s/{{home}}/$(safevar $HOME)/g" \
| sed "s/{{user}}/$USER/g"
}

14
remote_script.sh Normal file
View file

@ -0,0 +1,14 @@
#!/bin/sh
# this script is meant to be ran when .dotfiles is not present.
#
# example:
# curl https://git.saluco.nl/strix/dotfiles/raw/branch/main/remote_script.sh | sh
set -e
HOME=${HOME:-/home/${USER:-$(whomai)}}
[ -d "$HOME/.dotfiles" ] || git clone https://git.saluco.nl/strix/dotfiles $HOME/.dotfiles
cd $HOME/.dotfiles
./dot a

View file

@ -0,0 +1,13 @@
#!/bin/sh
set -e
echo "Downloading newest package..."
curl -Lo /tmp/discord.deb "https://discord.com/api/download?platform=linux&format=deb"
cd /tmp
echo "Extracting package..."
xdeb discord.deb
echo "Installing package..."
sudo xbps-install -R /tmp/binpkgs discord
rm -rf /tmp/binpkgs
cd -