This commit is contained in:
Lian Drake 2024-08-13 09:07:56 -04:00
parent f50de2c3f3
commit 0be8c55a79
37 changed files with 763 additions and 479 deletions

View file

@ -1,2 +0,0 @@
# ~/.bash_logout
clear

View file

@ -20,18 +20,15 @@ export INPUTRC="$HOME/.config/X11/inputrc"
export GNUPGHOME="$HOME/.local/share/gnupg" export GNUPGHOME="$HOME/.local/share/gnupg"
export LESSHISTFILE="-" export LESSHISTFILE="-"
export BASHRC="$HOME/.bashrc" export BASHRC="$HOME/.bashrc"
export GOPATH="$HOME/.go"
# Default apps # Default apps
export TERMINAL="st" export TERMINAL="st"
export EDITOR="$HOME/.local/bin/lvim" export EDITOR="$HOME/.local/bin/lvim"
export VISUAL="st -n editor -c editor -e $EDITOR" export VISUAL="st -n editor -c editor -e $EDITOR"
export BROWSER="flatpak run com.brave.Browser" export BROWSER="brave"
export VIEWER="zathura" export VIEWER="zathura"
# Dev Tools Envs
export GOPATH="$HOME/.go"
export DOTNET_ROOT="$HOME/.dotnet"
# Set path # Set path
if [ -d "$HOME/.bin" ]; then if [ -d "$HOME/.bin" ]; then
PATH="$HOME/.bin:$PATH" PATH="$HOME/.bin:$PATH"
@ -42,35 +39,37 @@ fi
if [ -d "$HOME/.cargo/bin" ]; then if [ -d "$HOME/.cargo/bin" ]; then
PATH="$HOME/.cargo/bin:$PATH" PATH="$HOME/.cargo/bin:$PATH"
fi fi
if [ -d "$GOPATH/bin" ]; then
PATH="$GOPATH/bin:$PATH"
fi
if [ -d "$HOME/.local/lib/flutter/bin" ]; then
PATH="$HOME/.local/lib/flutter/bin:$PATH"
fi
if [ -d $HOME/.dotnet/tools ]; then
PATH="$HOME/.dotnet/tools:$PATH"
fi
if [ -d "$HOME/Applications" ]; then if [ -d "$HOME/Applications" ]; then
PATH="$HOME/Applications:$PATH" PATH="$HOME/Applications:$PATH"
fi fi
if [ -d "$HOME/.go/bin" ]; then if [ -d "$XDG_DATA_HOME/JetBrains/Toolbox/scripts" ]; then
PATH="$HOME/.go/bin:$PATH"
fi
if [ -d $XDG_DATA_HOME/JetBrains/Toolbox/scripts ]; then
PATH="$XDG_DATA_HOME/JetBrains/Toolbox/scripts:$PATH" PATH="$XDG_DATA_HOME/JetBrains/Toolbox/scripts:$PATH"
fi fi
if [ -d $HOME/.dotnet/ ]; then if [ -d "$HOME/.config/vifm/scripts" ]; then
PATH="$HOME/.dotnet/:$PATH" PATH="$HOME/.config/vifm/scripts:$PATH"
fi
if [ -d $HOME/.dotnet/tools/ ]; then
PATH="$HOME/.dotnet/tools/:$PATH"
fi
if [ -d "$HOME/.flutter/bin" ]; then
PATH="$HOME/.flutter/bin/:$PATH"
fi fi
# Bashrc # export SSH_AUTH_SOCK
source "$BASHRC" if [[ -z "${SSH_CONNECTION}" ]]; then
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"
fi
# Create config directories if they don't exist # Create config directories if they don't exist
if [ ! -d "$WGETDIR" ] || [ ! -d "$GNUPGHOME" ]; then if [ ! -d "$WGETDIR" ] || [ ! -d "$GNUPGHOME" ]; then
mkdir -p "$WGETDIR" "$GNUPGHOME" mkdir -p "$WGETDIR" "$GNUPGHOME"
fi fi
if [ ! -f "$WGETRC" ]; then
touch "$WGETRC" # Bashrc
fi source "$BASHRC"
# Starting xsession # Starting xsession
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then

View file

@ -3,7 +3,7 @@ export TERM="xterm-256color" # getting proper colors
export HISTCONTROL=ignoredups:erasedups # no duplicate entries export HISTCONTROL=ignoredups:erasedups # no duplicate entries
### "bat" as manpager ### "bat" as manpager
export MANPAGER="bat -p" export MANPAGER="sh -c 'sed -u -e \"s/\\x1B\[[0-9;]*m//g; s/.\\x08//g\" | bat -p -lman'"
# use bash-completion, if available # use bash-completion, if available
[[ $PS1 && -f /usr/share/bash-completion/bash_completion ]] && \ [[ $PS1 && -f /usr/share/bash-completion/bash_completion ]] && \
@ -128,11 +128,12 @@ fi
# function to detect os and assign aliases to package managers # function to detect os and assign aliases to package managers
alias \ alias \
pkg-update="sudo xbps-install -Su" \ pkg-update="paru -Syyu" \
pkg-install="sudo xbps-install -S" \ pkg-install="paru -S" \
pkg-remove="sudo xbps-remove -R" \ pkg-remove="paru -Rcns" \
pkg-autoremove="sudo xbps-remove -Oo" \ pkg-remove-sec="paru -R" \
pkg-search="sudo xbps-query -s" \ pkg-autoremove="paru -Scc && paru -Rns (pacman -Qtdq)" \
pkg-search="paru -Ss"
# colorize grep output (good for log files) # colorize grep output (good for log files)
alias \ alias \
@ -210,10 +211,6 @@ alias \
yt="ytfzf -ftsl" \ yt="ytfzf -ftsl" \
ytm="ytfzf -mtsl" ytm="ytfzf -mtsl"
# distrobox
alias \
dv="distrobox enter devbox"
# network and bluetooth # network and bluetooth
alias \ alias \
netstats="nmcli dev" \ netstats="nmcli dev" \
@ -224,6 +221,76 @@ alias \
wfi-off="nmcli radio wifi off" \ wfi-off="nmcli radio wifi off" \
blt="bluetoothctl" blt="bluetoothctl"
# Automatically add completion for all aliases to commands having completion functions
# this currently slows startup a bit, but it isn't terrible
function alias_completion {
local namespace="alias_completion"
# parse function based completion definitions, where capture group 2 => function and 3 => trigger
local compl_regex='complete( +[^ ]+)* -F ([^ ]+) ("[^"]+"|[^ ]+)'
# parse alias definitions, where capture group 1 => trigger, 2 => command, 3 => command arguments
local alias_regex="alias ([^=]+)='(\"[^\"]+\"|[^ ]+)(( +[^ ]+)*)'"
# create array of function completion triggers, keeping multi-word triggers together
eval "local completions=($(complete -p | sed -Ene "/$compl_regex/s//'\3'/p"))"
(( ${#completions[@]} == 0 )) && return 0
# create temporary file for wrapper functions and completions
command rm -f "/tmp/${namespace}-*.tmp" &> /dev/null # preliminary cleanup
local tmp_file; tmp_file="$(mktemp "/tmp/${namespace}-${RANDOM}XXX.tmp")" || return 1
local completion_loader; completion_loader="$(complete -p -D 2>/dev/null | sed -Ene 's/.* -F ([^ ]*).*/\1/p')"
# read in "<alias> '<aliased command>' '<command args>'" lines from defined aliases
local line; while read line; do
eval "local alias_tokens; alias_tokens=($line)" 2>/dev/null || continue # some alias arg patterns cause an eval parse error
local alias_name="${alias_tokens[0]}" alias_cmd="${alias_tokens[1]}" alias_args="${alias_tokens[2]# }"
# skip aliases to pipes, boolean control structures and other command lists
# (leveraging that eval errs out if $alias_args contains unquoted shell metacharacters)
eval "local alias_arg_words; alias_arg_words=($alias_args)" 2>/dev/null || continue
# avoid expanding wildcards
read -a alias_arg_words <<< "$alias_args"
# skip alias if there is no completion function triggered by the aliased command
if [[ ! " ${completions[*]} " =~ " $alias_cmd " ]]; then
if [[ -n "$completion_loader" ]]; then
# force loading of completions for the aliased command
eval "$completion_loader $alias_cmd"
# 124 means completion loader was successful
[[ $? -eq 124 ]] || continue
completions+=($alias_cmd)
else
continue
fi
fi
local new_completion="$(complete -p "$alias_cmd")"
# create a wrapper inserting the alias arguments if any
if [[ -n $alias_args ]]; then
local compl_func="${new_completion/#* -F /}"; compl_func="${compl_func%% *}"
# avoid recursive call loops by ignoring our own functions
if [[ "${compl_func#_$namespace::}" == $compl_func ]]; then
local compl_wrapper="_${namespace}::${alias_name}"
echo "function $compl_wrapper {
(( COMP_CWORD += ${#alias_arg_words[@]} ))
COMP_WORDS=($alias_cmd $alias_args \${COMP_WORDS[@]:1})
(( COMP_POINT -= \${#COMP_LINE} ))
COMP_LINE=\${COMP_LINE/$alias_name/$alias_cmd $alias_args}
(( COMP_POINT += \${#COMP_LINE} ))
$compl_func
}" >> "$tmp_file"
new_completion="${new_completion/ -F $compl_func / -F $compl_wrapper }"
fi
fi
# replace completion trigger by alias
new_completion="${new_completion% *} $alias_name"
echo "$new_completion" >> "$tmp_file"
done < <(alias -p | sed -Ene "s/$alias_regex/\1 '\2' '\3'/p")
source "$tmp_file" && command rm -f "$tmp_file" &> /dev/null
}; alias_completion
### PROMPT ### PROMPT
# get current branch in git repo # get current branch in git repo
function parse_git_branch() { function parse_git_branch() {
@ -231,7 +298,7 @@ function parse_git_branch() {
if [ ! "${BRANCH}" == "" ]; then if [ ! "${BRANCH}" == "" ]; then
STAT=$(parse_git_dirty) STAT=$(parse_git_dirty)
echo "[${BRANCH}${STAT}]" echo "[${BRANCH}${STAT}]"
else else
echo "" echo ""
fi fi
} }
@ -257,37 +324,29 @@ function parse_git_dirty {
renamed=$(echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?") renamed=$(echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?")
deleted=$(echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?") deleted=$(echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?")
bits='' bits=''
if [ "${renamed}" == "0" ]; then if [ "${renamed}" == "0" ]; then
bits=">${bits}" bits=">${bits}"
fi fi
if [ "${ahead}" == "0" ]; then if [ "${ahead}" == "0" ]; then
bits="*${bits}" bits="*${bits}"
fi fi
if [ "${newfile}" == "0" ]; then if [ "${newfile}" == "0" ]; then
bits="+${bits}" bits="+${bits}"
fi fi
if [ "${untracked}" == "0" ]; then if [ "${untracked}" == "0" ]; then
bits="?${bits}" bits="?${bits}"
fi fi
if [ "${deleted}" == "0" ]; then if [ "${deleted}" == "0" ]; then
bits="x${bits}" bits="x${bits}"
fi fi
if [ "${dirty}" == "0" ]; then if [ "${dirty}" == "0" ]; then
bits="!${bits}" bits="!${bits}"
fi fi
if [ ! "${bits}" == "" ]; then if [ ! "${bits}" == "" ]; then
echo " ${bits}" echo " ${bits}"
else else
echo "" echo ""
fi fi
} }
export PS1="[\[\e[31m\]\u\[\e[m\]\[\e[35m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]] [\[\e[33m\]\W\[\e[m\]\[\e[34m\]\`parse_git_branch\`\[\e[m\]] 󱞪 " export PS1="[\[\e[31m\]\u\[\e[m\]\[\e[35m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]] [\[\e[33m\]\W\[\e[m\]\[\e[34m\]\`parse_git_branch\`\[\e[m\]] 󱞪 "
export SSH_AUTH_SOCK=${HOME}/.ssh/agent
if ! pgrep -u ${USER} ssh-agent > /dev/null; then
rm -f ${SSH_AUTH_SOCK}
fi
if [ ! -S ${SSH_AUTH_SOCK} ]; then
eval $(ssh-agent -a ${SSH_AUTH_SOCK} 2> /dev/null)
fi

View file

@ -37,9 +37,7 @@ export XDG_SESSION_TYPE=X11
export XCURSOR_PATH="$XDG_DATA_HOME/icons/" export XCURSOR_PATH="$XDG_DATA_HOME/icons/"
export XCURSOR_THEME="Simp1e-Gruvbox-Dark" export XCURSOR_THEME="Simp1e-Gruvbox-Dark"
export GTK_THEME="Gruvbox-Dark" export GTK_THEME="Gruvbox-Dark"
export GTK_ICON_THEME="Papirus-Dark" export GTK_ICON_THEME="Gruvbox-Plus-Dark"
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gcr/ssh"
# initialize dwm # initialize dwm
dbus-launch dwm exec dwm

View file

@ -53,7 +53,7 @@ graph_symbol_proc = "default"
shown_boxes = "cpu mem net proc" shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. #* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 500 update_ms = 1000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.

View file

@ -335,7 +335,7 @@
:desc "Zap to char" "z" #'zap-to-char :desc "Zap to char" "z" #'zap-to-char
:desc "Zap up to char" "Z" #'zap-up-to-char) :desc "Zap up to char" "Z" #'zap-up-to-char)
(set-frame-parameter nil 'alpha-background 98) ; For current frame (set-frame-parameter nil 'alpha-background 95) ; For current frame
(add-to-list 'default-frame-alist '(alpha-background . 98)) ; For all new frames henceforth (add-to-list 'default-frame-alist '(alpha-background . 95)) ; For all new frames henceforth
(when (daemonp) (when (daemonp)
(exec-path-from-shell-initialize)) (exec-path-from-shell-initialize))

View file

@ -752,8 +752,8 @@ the second occurrence of 'e'.
Transparent window Transparent window
#+BEGIN_SRC emacs-lisp #+BEGIN_SRC emacs-lisp
(set-frame-parameter nil 'alpha-background 98) ; For current frame (set-frame-parameter nil 'alpha-background 95) ; For current frame
(add-to-list 'default-frame-alist '(alpha-background . 98)) ; For all new frames henceforth (add-to-list 'default-frame-alist '(alpha-background . 95)) ; For all new frames henceforth
(when (daemonp) (when (daemonp)
(exec-path-from-shell-initialize)) (exec-path-from-shell-initialize))
#+END_SRC #+END_SRC

View file

@ -1,5 +1,5 @@
gtk-theme-name="Gruvbox-Dark" gtk-theme-name="Gruvbox-Dark"
gtk-icon-theme-name="Papirus-Dark" gtk-icon-theme-name="Gruvbox-Plus-Dark"
gtk-font-name="Inter 10" gtk-font-name="Inter 10"
gtk-cursor-theme-name="Simp1e-Gruvbox-Dark" gtk-cursor-theme-name="Simp1e-Gruvbox-Dark"
gtk-cursor-theme-size=0 gtk-cursor-theme-size=0

View file

@ -1,6 +1,6 @@
[Settings] [Settings]
gtk-theme-name=Gruvbox-Dark gtk-theme-name=Gruvbox-Dark
gtk-icon-theme-name=Papirus-Dark gtk-icon-theme-name=Gruvbox-Plus-Dark
gtk-font-name=Inter 10 gtk-font-name=Inter 10
gtk-cursor-theme-name=Simp1e-Gruvbox-Dark gtk-cursor-theme-name=Simp1e-Gruvbox-Dark
gtk-cursor-theme-size=0 gtk-cursor-theme-size=0

View file

@ -1,6 +0,0 @@
#!/usr/bin/env bash
# ~/.bash_logout: executed by bash(1) when login shell exits.
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear ] && /usr/bin/clear -q
fi

View file

@ -1,14 +0,0 @@
# crypttab: mappings for encrypted partitions
#
# Each mapped device will be created in /dev/mapper, so your /etc/fstab
# should use the /dev/mapper/<name> paths for encrypted devices.
#
# NOTE: Do not list your root (/) partition here.
# <name> <device> <password> <options>
# home /dev/hda4 /etc/mypassword1
# data1 /dev/hda3 /etc/mypassword2
# data2 /dev/hda5 /etc/cryptfs.key
# swap /dev/hdx4 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
# vol /dev/hdb7 none
thklvm /dev/nvme0n1p2 /boot/volume.key luks

View file

@ -1,22 +0,0 @@
#
# Configuration file for GRUB.
#
GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=1
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR="Void"
GRUB_CMDLINE_LINUX_DEFAULT="rd.lvm.vg=thkvg rd.luks.uuid=a2d27caa-9675-4e07-ad78-51d796c879de loglevel=3 quiet"
# Uncomment to use basic console
#GRUB_TERMINAL_INPUT="console"
# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console
#GRUB_BACKGROUND=/usr/share/void-artwork/splash.png
#GRUB_GFXMODE=1920x1080x32
#GRUB_DISABLE_LINUX_UUID=true
#GRUB_DISABLE_RECOVERY=true
# Uncomment and set to the desired menu colors. Used by normal and wallpaper
# modes only. Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
GRUB_ENABLE_CRYPTODISK=y

View file

@ -1,4 +0,0 @@
# PUT YOUR CONFIG IN separate files
# in /etc/dracut.conf.d named "<name>.conf"
# SEE man dracut.conf(5) for options
add_drivers+=" i915 "

View file

@ -1,13 +0,0 @@

\e[H\e[2J
\e[0;32m
_______
\\_____ `- ____ ____ .__ .___ .____ .__
/\\ ___ `- \\ \\ \\ / /___ |__| __| _/ | | |__| ____ __ _____ ___
| | / \\ | | \\ Y / _ \\| |/ __ | | | | |/ \\| | \\ \\/ /
| | \\___/ | | \\ ( <_> ) / /_/ | | |___| | | \\ | /> <
\\ `-_____ \\/ \\___/ \\____/|__\\____ | |_______ \\__|___| /____//__/\\_ \\
`-______\\ \\/ \\/ \\/ \\/
\e[0m
Welcome Back! Linux Version: \r (\n) (\l)

13
etc/crypttab Normal file
View file

@ -0,0 +1,13 @@
# Configuration for encrypted block devices.
# See crypttab(5) for details.
# NOTE: Do not list your root (/) partition here, it must be set up
# beforehand by the initramfs (/etc/mkinitcpio.conf).
# <name> <device> <password> <options>
# home UUID=b8ad5c18-f445-495d-9095-c9ec4f9d2f37 /etc/mypassword1
# data1 /dev/sda3 /etc/mypassword2
# data2 /dev/sda5 /etc/cryptfs.key
# swap /dev/sdx4 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
# vol /dev/sdb7 none
#<vgname> <cryptdrive> <keypath> luks

63
etc/default/grub Normal file
View file

@ -0,0 +1,63 @@
# GRUB boot loader configuration
GRUB_DEFAULT=0
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="rd.luks.name=<UUID>=<LVMNAME> rd.luks.key=<UUID>=<KEYPATH> loglevel=3 quiet systemd.show_status=auto rd.udev.log_level=3 splash"
GRUB_CMDLINE_LINUX=""
# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
# Uncomment to enable booting from LUKS encrypted devices
GRUB_ENABLE_CRYPTODISK=y
# Set to 'countdown' or 'hidden' to change timeout behavior,
# press ESC key to display menu.
GRUB_TIMEOUT_STYLE=hidden
# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console
# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `videoinfo'
GRUB_GFXMODE=auto
# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep
# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true
# Uncomment and set to the desired menu colors. Used by normal and wallpaper
# modes only. Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/path/to/wallpaper"
#GRUB_THEME="/path/to/gfxtheme"
# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"
# Uncomment to make GRUB remember the last selection. This requires
# setting 'GRUB_DEFAULT=saved' above.
#GRUB_SAVEDEFAULT=true
# Uncomment to disable submenus in boot menu
#GRUB_DISABLE_SUBMENU=y
# Probing for other operating systems is disabled for security reasons. Read
# documentation on GRUB_DISABLE_OS_PROBER, if still want to enable this
# functionality install os-prober and uncomment to detect and include other
# operating systems.
GRUB_DISABLE_OS_PROBER=true

13
etc/issue Normal file
View file

@ -0,0 +1,13 @@

      ### ### ##
    ## ##
┌ #### ### ###   ####   ## ### ## ### ### ### ### ###  ### ###
│  ##  ### ##  ##   ###  ## ## ## ### ## ## ##   ## ##
│ #####  ##   ##   ## ## ## ## ## ## ## ##   ###
│ ## ##  ##   ##   ## ## ## ## ## ## ##  ##   ## ## 
│ ######  ##   ####  ### ### #### #### ### ### ######  ###   ###
└─────────────────────────────────────────── A simple, lightweight distribution.

OS: Arch\s Kernel: \r Processor: \m TTY: \l


81
etc/mkinitcpio.conf Normal file
View file

@ -0,0 +1,81 @@
# vim:set ft=sh
# MODULES
# The following modules are loaded before any boot hooks are
# run. Advanced users may wish to specify all system modules
# in this array. For instance:
# MODULES=(usbhid xhci_hcd)
MODULES=(i915)
# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image. This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=()
# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way. This is useful for config files.
FILES=(/boot/volume.key)
# HOOKS
# This is the most important setting in this file. The HOOKS control the
# modules and scripts added to the image, and what happens at boot time.
# Order is important, and it is recommended that you do not change the
# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
# help on a given hook.
# 'base' is _required_ unless you know precisely what you are doing.
# 'udev' is _required_ in order to automatically load modules
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
# Examples:
## This setup specifies all modules in the MODULES setting above.
## No RAID, lvm2, or encrypted root is needed.
# HOOKS=(base)
#
## This setup will autodetect all modules for your system and should
## work as a sane default
# HOOKS=(base udev autodetect modconf block filesystems fsck)
#
## This setup will generate a 'full' image which supports most systems.
## No autodetection is done.
# HOOKS=(base udev modconf block filesystems fsck)
#
## This setup assembles a mdadm array with an encrypted root file system.
## Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices.
# HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck)
#
## This setup loads an lvm2 volume group.
# HOOKS=(base udev modconf block lvm2 filesystems fsck)
#
## This will create a systemd based initramfs which loads an encrypted root filesystem.
# HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole sd-encrypt block filesystems fsck)
#
## NOTE: If you have /usr on a separate partition, you MUST include the
# usr and fsck hooks.
HOOKS=(base systemd plymouth autodetect microcode modconf kms keyboard keymap sd-vconsole block sd-encrypt lvm2 filesystems fsck)
# COMPRESSION
# Use this to compress the initramfs image. By default, zstd compression
# is used for Linux ≥ 5.9 and gzip compression is used for Linux < 5.9.
# Use 'cat' to create an uncompressed image.
#COMPRESSION="zstd"
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"
# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=()
# MODULES_DECOMPRESS
# Decompress loadable kernel modules and their firmware during initramfs
# creation. Switch (yes/no).
# Enable to allow further decreasing image size when using high compression
# (e.g. xz -9e or zstd --long --ultra -22) at the expense of increased RAM usage
# at early boot.
# Note that any compressed files will be placed in the uncompressed early CPIO
# to avoid double compression.
#MODULES_DECOMPRESS="no"

100
etc/pacman.conf Normal file
View file

@ -0,0 +1,100 @@
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
Color
#NoProgressBar
CheckSpace
#VerbosePkgLists
ParallelDownloads = 5
ILoveCandy
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux`.
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
#[core-testing]
#Include = /etc/pacman.d/mirrorlist
[core]
Include = /etc/pacman.d/mirrorlist
#[extra-testing]
#Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
#[multilib-testing]
#Include = /etc/pacman.d/mirrorlist
#[multilib]
#Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
[chaotic-aur]
Include = /etc/pacman.d/chaotic-mirrorlist

1
etc/vconsole.conf Normal file
View file

@ -0,0 +1 @@
FONT=ter-122n

View file

@ -4,10 +4,9 @@
# - Description: A simple script for file editing in dmenu # - Description: A simple script for file editing in dmenu
# - Dependencies: dmenu, fd # - Dependencies: dmenu, fd
########## # start from home directory
## main ##
##########
cd "$HOME" || exit 0 cd "$HOME" || exit 0
file=1 file=1
while [ "$file" ]; do while [ "$file" ]; do
file=$(fd -LHpd 1 | dmenu -i -l 10 -p "󰈙 Open file in text editor $(basename "$(pwd)")") file=$(fd -LHpd 1 | dmenu -i -l 10 -p "󰈙 Open file in text editor $(basename "$(pwd)")")

View file

@ -1,12 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)*** # *** Script by Clay Gomera (Drake) ***
# - Description: A simple power menu dmenu script # Description: A dmenu script for managing power options
# - Dependencies: dmenu, power-profiles-daemon, slock # Dependencies: dmenu, powerprofilesctl, slock, systemctl, notify-send
####################### # Main menu options
## Main manu options ##
#######################
option1=" Logout" option1=" Logout"
option2=" Reboot" option2=" Reboot"
option3=" Power off" option3=" Power off"
@ -16,121 +14,99 @@ option6=" Change power profile"
option7="󱎘 Exit" option7="󱎘 Exit"
options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6\n$option7" options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6\n$option7"
#################################### # Power profiles submenu options
## Power profiles submenu options ##
####################################
pwr1="󰓅 Performance" pwr1="󰓅 Performance"
pwr2="󰾅 Balanced" pwr2="󰾅 Balanced"
pwr3="󰾆 Power Saver" pwr3="󰾆 Power Saver"
pwr4=" Cancel" pwr4=" Cancel"
pwrs="$pwr1\n$pwr2\n$pwr3\n$pwr4" pwrs="$pwr1\n$pwr2\n$pwr3\n$pwr4"
## This variable will store the current power profile # Store the current power profile
currentpwr=$(powerprofilesctl get) currentpwr=$(powerprofilesctl get)
## This variable will store the current wallpaper set by feh # Store the current wallpaper set by feh
currentwall=$(tail --lines=1 "$HOME/.fehbg" | awk '{print $4}' | sed "s/'//g") currentwall=$(tail --lines=1 "$HOME/.fehbg" | awk '{print $4}' | sed "s/'//g")
# Check for missing dependencies # Ask user for confirmation with yes/no options
check_dependencies() {
if ! [ -x "$(command -v dmenu)" ]; then
echo "Missing dependency: dmenu is required."
exit 1
fi
local missing_deps=()
for dep in loginctl powerprofilesctl notify-send; do
if ! command -v "$dep" &> /dev/null; then
missing_deps+=("$dep")
fi
done
if [ ${#missing_deps[@]} -ne 0 ]; then
echo "Missing dependencies: ${missing_deps[*]}"
exit 1
fi
}
## Ask yes/no for action confirmation
confirm_action() { confirm_action() {
local prompt="$1" local prompt="$1"
echo -e " Yes\n No" | dmenu -l 2 -i -p "$prompt" | grep -q " Yes" echo -e " Yes\n No" | dmenu -l 2 -i -p "$prompt" | grep -q " Yes"
} }
#################### # Show main menu and get user action
# Main Script Flow # action=$(echo -e "$options" | dmenu -i -p " Power Options")
####################
# Check for dependencies
check_dependencies
action=$(echo -e "$options" | dmenu -i -p " Power Options"); # main menu prompt
if [ -z "$action" ]; then if [ -z "$action" ]; then
exit 0 exit 0
fi fi
case "$action" in case "$action" in
"$option1") "$option1")
if confirm_action " Are you sure you want to logout?"; then if confirm_action " Are you sure you want to logout?"; then
pkill X pkill X
fi fi
;; ;;
"$option2") "$option2")
if confirm_action " Are you sure you want to reboot?"; then if confirm_action " Are you sure you want to reboot?"; then
loginctl reboot systemctl reboot
fi fi
;; ;;
"$option3") "$option3")
if confirm_action " Are you sure you want to power off?"; then if confirm_action " Are you sure you want to power off?"; then
loginctl poweroff systemctl poweroff
fi fi
;; ;;
"$option4") "$option4")
slock -b "$currentwall" loginctl suspend systemctl suspend
;; ;;
"$option5") "$option5")
slock -b "$currentwall" slock -b "$currentwall"
;; ;;
"$option6") "$option6")
##### # Determine current power profile for submenu
## These conditions will be used for the prompt case "$currentpwr" in
##### "performance")
if [ "$currentpwr" = "performance" ]; then currentpwr="$pwr1"
currentpwr="$pwr1" ;;
elif [ "$currentpwr" = "balanced" ]; then "balanced")
currentpwr="$pwr2" currentpwr="$pwr2"
elif [ "$currentpwr" = "power-saver" ]; then ;;
currentpwr="$pwr3" "power-saver")
fi currentpwr="$pwr3"
pwraction=$(echo -e "$pwrs" | dmenu -i -p " Power Profile Menu - Currently set to: $currentpwr") # power profiles submenu prompt ;;
*)
currentpwr="Unknown"
;;
esac
# Show power profile submenu and get user action
pwraction=$(echo -e "$pwrs" | dmenu -i -p " Power Profile Menu - Currently set to: $currentpwr")
case "$pwraction" in case "$pwraction" in
"$pwr1") "$pwr1")
if [ "$currentpwr" = "$pwr1" ]; then # if the power profile is already set to performance if [ "$currentpwr" = "$pwr1" ]; then
notify-send "The power profile is already set to performance" notify-send "The power profile is already set to performance"
exit 1
else else
powerprofilesctl set performance && notify-send "Power profile switched to performance" # if not, set the powerprofile to performance powerprofilesctl set performance && notify-send "Power profile switched to performance"
fi fi
;; ;;
"$pwr2") "$pwr2")
if [ "$currentpwr" = "$pwr2" ]; then # if the power profile is already set to balanced if [ "$currentpwr" = "$pwr2" ]; then
notify-send "The power profile is already set to balanced" notify-send "The power profile is already set to balanced"
exit 1
else else
powerprofilesctl set balanced && notify-send "Power profile switched to balanced" # if not, set the powerprofile to balanced powerprofilesctl set balanced && notify-send "Power profile switched to balanced"
fi fi
;; ;;
"$pwr3") "$pwr3")
if [ "$currentpwr" = "$pwr3" ]; then # if the power profile is already set to power saver if [ "$currentpwr" = "$pwr3" ]; then
notify-send "The power profile is already set to power saver" notify-send "The power profile is already set to power saver"
exit 1
else else
powerprofilesctl set power-saver && notify-send "Power profile switched to power saver" # if not, set the powerprofile to power saver powerprofilesctl set power-saver && notify-send "Power profile switched to power saver"
fi fi
;; ;;
"$pwr4") "$pwr4")
exit 0 exit 0
esac;; ;;
esac
;;
"$option7") "$option7")
exit 0 exit 0
;; ;;

View file

@ -1,26 +1,26 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)*** # *** Script by Clay Gomera (Drake) ***
# - Description: A simple screenshot/screencast dmenu script # Description: A simple screenshot/screencast dmenu script
# - Dependencies: maim, slop, ffmpeg, dmenu, libnotify # Dependencies: maim, slop, ffmpeg, dmenu, libnotify
## Screenshot & Screencast Directory ## Define directories for saving screenshots and screencasts
SHOTDIR="$XDG_PICTURES_DIR/Screenshots" SHOTDIR="$XDG_PICTURES_DIR/Screenshots"
CASTDIR="$XDG_VIDEOS_DIR/Screencasts" CASTDIR="$XDG_VIDEOS_DIR/Screencasts"
mkdir -p "$SHOTDIR" "$CASTDIR" mkdir -p "$SHOTDIR" "$CASTDIR"
## Format Variables ## Define available formats for images and videos
image_formats="jpg\npng" image_formats="jpg\npng"
video_formats="mp4\nmkv" video_formats="mp4\nmkv"
## Main menu choices ## Define choices for the main menu
mcho1="󰹑 Take a screenshot" mcho1="󰹑 Take a screenshot"
mcho2="󰐍 Record the screen" mcho2="󰐍 Record the screen"
mcho3="󰙧 Stop recording" mcho3="󰙧 Stop recording"
mcho4="󱎘 Exit" mcho4="󱎘 Exit"
mchos="$mcho1\n$mcho2\n$mcho3\n$mcho4" mchos="$mcho1\n$mcho2\n$mcho3\n$mcho4"
## Main submenu choices ## Define choices for the screenshot submenu
mscho1="󱣴 Capture the entire screen" mscho1="󱣴 Capture the entire screen"
mscho2="󱎫 Capture the entire screen (With delay)" mscho2="󱎫 Capture the entire screen (With delay)"
mscho3="󱕻 Capture area" mscho3="󱕻 Capture area"
@ -28,20 +28,18 @@ mscho4="󰖯 Capture active window"
mscho5="󱎘 Exit" mscho5="󱎘 Exit"
mschos="$mscho1\n$mscho2\n$mscho3\n$mscho4\n$mscho5" mschos="$mscho1\n$mscho2\n$mscho3\n$mscho4\n$mscho5"
## Save/clip submenu choices ## Define choices for saving screenshots
svcho1="󰆏 Copy to clipboard" svcho1="󰆏 Copy to clipboard"
svcho2="󰠘 Save to $SHOTDIR" svcho2="󰠘 Save to $SHOTDIR"
svchos="$svcho1\n$svcho2" svchos="$svcho1\n$svcho2"
## Delay subsubmenu ## Define delay options for screenshots
del1="󱑀 3 sec delay" del1="󱑀 3 sec delay"
del2="󱑂 5 sec delay" del2="󱑂 5 sec delay"
del3="󱑇 10 sec delay" del3="󱑇 10 sec delay"
dels="$del1\n$del2\n$del3" dels="$del1\n$del2\n$del3"
##### # Check if required dependencies are installed
## This function will check for dependencies
#####
check_dependencies() { check_dependencies() {
local dependencies=("maim" "ffmpeg" "dmenu" "notify-send" "xclip" "xdotool" "xdpyinfo") local dependencies=("maim" "ffmpeg" "dmenu" "notify-send" "xclip" "xdotool" "xdpyinfo")
for dep in "${dependencies[@]}"; do for dep in "${dependencies[@]}"; do
@ -52,46 +50,32 @@ check_dependencies() {
done done
} }
##### # Prompt the user to choose an action for saving the screenshot
## This function uses the svchos variable to ask the user what to do with the
## screenshot
#####
fsvchos() { fsvchos() {
svchoice=$(echo -e "$svchos" | dmenu -i -l 2 -p " What do you want to do with this screenshot?") svchoice=$(echo -e "$svchos" | dmenu -i -l 2 -p " What do you want to do with this screenshot?")
} }
##### # Prompt the user to choose a delay option for screenshots
## This function uses the dels variable to ask the user which delay option to
## choose
#####
fdel() { fdel() {
del=$(echo -e "$dels" | dmenu -i -p " Select Delay") del=$(echo -e "$dels" | dmenu -i -p " Select Delay")
} }
##### # Prompt the user to choose the image format for screenshots
## This function allows the user to choose the screenshot format
#####
fimage_format() { fimage_format() {
image_format=$(echo -e "$image_formats" | dmenu -i -p " Choose screenshot format") image_format=$(echo -e "$image_formats" | dmenu -i -p " Choose screenshot format")
} }
##### # Prompt the user to choose the video format for recordings
## This function allows the user to choose the recording format
#####
fvideo_format() { fvideo_format() {
video_format=$(echo -e "$video_formats" | dmenu -i -p " Choose video format") video_format=$(echo -e "$video_formats" | dmenu -i -p " Choose video format")
} }
##### # Capture a full-screen screenshot without delay
## This function does a full screen screenshot without delay, depending on what
## the user chooses on the fsvchos function, the screenshot will be saved to the
## clipboard or to $SHOTDIR
#####
shot_screen() { shot_screen() {
fimage_format fimage_format
fsvchos fsvchos
if [ "$svchoice" = "$svcho1" ]; then if [ "$svchoice" = "$svcho1" ]; then
maim | xclip -selection clipboard -t image/"$image_format" && notify-send "Screenshot saved to clipboard" maim -f "$image_format" | xclip -selection clipboard -t image/"$image_format" && notify-send "Screenshot saved to clipboard"
elif [ "$svchoice" = "$svcho2" ]; then elif [ "$svchoice" = "$svcho2" ]; then
maim -f "$image_format" "$SHOTDIR/$(date +%s).$image_format" && notify-send "Screenshot saved" maim -f "$image_format" "$SHOTDIR/$(date +%s).$image_format" && notify-send "Screenshot saved"
else else
@ -99,12 +83,7 @@ shot_screen() {
fi fi
} }
##### # Capture a full-screen screenshot with a user-defined delay
## This function does a full screen screenshot with delay, depending on what the
## user chooses on the fsvchos function, the screenshot will be saved to the
## clipboard or to $SHOTDIR. And depending on what the user chooses on the fdel
## function, the delay will be between 3 and 10 seconds
#####
shot_screen_delay() { shot_screen_delay() {
fimage_format fimage_format
fsvchos fsvchos
@ -132,54 +111,41 @@ shot_screen_delay() {
sleep 1 sleep 1
if [ "$svchoice" = "$svcho1" ]; then if [ "$svchoice" = "$svcho1" ]; then
maim | xclip -selection clipboard -t image/"$image_format" && notify-send "Screenshot saved to clipboard"; maim -f "$image_format" | xclip -selection clipboard -t image/"$image_format" && notify-send "Screenshot saved to clipboard"
elif [ "$svchoice" = "$svcho2" ]; then elif [ "$svchoice" = "$svcho2" ]; then
maim -f "$image_format" "$SHOTDIR/$(date +%s).$image_format" && notify-send "Screenshot saved to $SHOTDIR"; maim -f "$image_format" "$SHOTDIR/$(date +%s).$image_format" && notify-send "Screenshot saved to $SHOTDIR"
else else
exit 0 exit 0
fi fi
} }
##### # Capture a user-defined area of the screen
## This function allows the user to select the area on the screen to screenshot
## depending on what the user chooses on the fsvchos function, the screenshot will
## be saved to the clipboard or to $SHOTDIR
#####
shot_area() { shot_area() {
fimage_format fimage_format
fsvchos fsvchos
if [ "$svchoice" = "$svcho1" ]; then if [ "$svchoice" = "$svcho1" ]; then
maim -s | xclip -selection clipboard -t image/"$image_format" && notify-send "Screenshot saved to clipboard"; maim -f "$image_format" -s | xclip -selection clipboard -t image/"$image_format" && notify-send "Screenshot saved to clipboard"
elif [ "$svchoice" = "$svcho2" ]; then elif [ "$svchoice" = "$svcho2" ]; then
maim -s -f "$image_format" "$SHOTDIR/$(date +%s).$image_format" && notify-send "Screenshot saved to $SHOTDIR"; maim -s -f "$image_format" "$SHOTDIR/$(date +%s).$image_format" && notify-send "Screenshot saved to $SHOTDIR"
else else
exit 0 exit 0
fi fi
} }
##### # Capture a screenshot of the currently active window
## This function does a screenshot of the currently active window, depending
## on what the user chooses on the fsvchos function, the screenshot will be
## saved to the clipboard or to $SHOTDIR
#####
shot_window() { shot_window() {
fimage_format fimage_format
fsvchos fsvchos
if [ "$svchoice" = "$svcho1" ]; then if [ "$svchoice" = "$svcho1" ]; then
maim -i "$(xdotool getactivewindow)" | xclip -selection clipboard -t image/"$image_format" && notify-send "Screenshot saved to clipboard"; maim -f "$image_format" -i "$(xdotool getactivewindow)" | xclip -selection clipboard -t image/"$image_format" && notify-send "Screenshot saved to clipboard"
elif [ "$svchoice" = "$svcho2" ]; then elif [ "$svchoice" = "$svcho2" ]; then
maim -i "$(xdotool getactivewindow)" -f "$image_format" "$SHOTDIR/$(date +%s).$image_format" && notify-send "Screenshot saved to $SHOTDIR"; maim -i "$(xdotool getactivewindow)" -f "$image_format" "$SHOTDIR/$(date +%s).$image_format" && notify-send "Screenshot saved to $SHOTDIR"
else else
exit 0 exit 0
fi fi
} }
##### # Start recording the entire screen using ffmpeg
## This function uses ffmpeg to record the screen, It will check if ffmpeg is
## already running (already recording), to prevent the user from executing
## another ffmpeg instance, if it's not running, it will grab the screen
## resolution with xdpyinfo and use it to record the screen with ffmpeg.
#####
rec_screen() { rec_screen() {
fvideo_format fvideo_format
if pgrep -x "ffmpeg" > /dev/null; then if pgrep -x "ffmpeg" > /dev/null; then
@ -192,9 +158,7 @@ rec_screen() {
fi fi
} }
##### # Start recording the entire screen with a user-defined delay
## This function will record the screen with a given delay
#####
rec_screen_delay() { rec_screen_delay() {
fvideo_format fvideo_format
fdel fdel
@ -230,7 +194,7 @@ rec_screen_delay() {
fi fi
} }
## This function allows the user to record a selected area of the screen # Start recording a user-defined area of the screen
rec_area() { rec_area() {
fvideo_format fvideo_format
if pgrep -x "ffmpeg" > /dev/null; then if pgrep -x "ffmpeg" > /dev/null; then
@ -248,7 +212,7 @@ rec_area() {
fi fi
} }
## This function allows the user to record the currently active window # Start recording the currently active window
rec_window() { rec_window() {
fvideo_format fvideo_format
if pgrep -x "ffmpeg" > /dev/null; then if pgrep -x "ffmpeg" > /dev/null; then
@ -266,66 +230,44 @@ rec_window() {
fi fi
} }
##### # Stop the ongoing screen recording
## This function stops screen recording, it first checks if ffmpeg is already
## running (already recording), to only stop a recording if there's an ffmpeg
## instance running
#####
stop_recording() { stop_recording() {
if pgrep -x "ffmpeg" > /dev/null; then if pgrep -x "ffmpeg" > /dev/null; then
pkill -f "ffmpeg -f x11grab" pkill -f "ffmpeg -f x11grab"
notify-send "Screen recording stopped. Video saved to $CASTDIR" notify-send "Screen recording stopped. Video saved to $CASTDIR"
else else
notify-send "You aren't recording anything at the moment" notify-send "No recording in progress."
fi fi
} }
## main # Main script execution
check_dependencies; check_dependencies
mchoice=$(echo -e "$mchos" | dmenu -i -l 4 -p " Screen Capture Menu") # main menu prompt
# Display the main menu and handle user choice
mchoice=$(echo -e "$mchos" | dmenu -i -l 4 -p " Screen Capture Menu")
case $mchoice in case $mchoice in
"$mcho1") "$mcho1")
mschoice=$(echo -e "$mschos" | dmenu -i -l 9 -p " Screenshot Menu") # screenshot menu prompt # Display the screenshot submenu and handle user choice
mschoice=$(echo -e "$mschos" | dmenu -i -l 9 -p " Screenshot Menu")
case $mschoice in case $mschoice in
"$mscho1") "$mscho1") shot_screen ;;
shot_screen; "$mscho2") shot_screen_delay ;;
;; "$mscho3") shot_area ;;
"$mscho2") "$mscho4") shot_window ;;
shot_screen_delay; "$mscho5") exit 0 ;;
;;
"$mscho3")
shot_area;
;;
"$mscho4")
shot_window;
;;
"$mscho5")
exit 0
esac esac
;; ;;
"$mcho2") "$mcho2")
mschoice=$(echo -e "$mschos" | dmenu -i -l 9 -p " Screencast Menu") # screenshot menu prompt # Display the screencast submenu and handle user choice
mschoice=$(echo -e "$mschos" | dmenu -i -l 9 -p " Screencast Menu")
case $mschoice in case $mschoice in
"$mscho1") "$mscho1") rec_screen ;;
rec_screen; "$mscho2") rec_screen_delay ;;
;; "$mscho3") rec_area ;;
"$mscho2") "$mscho4") rec_window ;;
rec_screen_delay; "$mscho5") exit 0 ;;
;;
"$mscho3")
rec_area;
;;
"$mscho4")
rec_window;
;;
"$mscho5")
exit 0
esac esac
;; ;;
"$mcho3") "$mcho3") stop_recording ;;
stop_recording; "$mcho4") exit 0 ;;
;;
"$mcho4")
exit 0;
;;
esac esac

View file

@ -1,18 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)*** # *** Script by Clay Gomera (Drake) ***
# - Description: A simple dmenu script to set the wallpaper on X # Description: A dmenu script to set the wallpaper on X using feh
# - Dependencies: dmenu, fd, feh # Dependencies: dmenu, fd, feh
########################## # Directory containing wallpapers
## Wallpapers Directory ##
##########################
walldir="$XDG_PICTURES_DIR/Wallpapers" walldir="$XDG_PICTURES_DIR/Wallpapers"
cd "$walldir" || exit # we cd into $walldir in order to get only the file name on the main prompt
####################### # Change to wallpaper directory or exit if it fails
## Wallpaper options ## cd "$walldir" || exit
#######################
# Define wallpaper options for feh
option1="Fill" option1="Fill"
option2="Center" option2="Center"
option3="Tile" option3="Tile"
@ -20,30 +18,31 @@ option4="Max"
option5="Scale" option5="Scale"
options="$option1\n$option2\n$option3\n$option4\n$option5" options="$option1\n$option2\n$option3\n$option4\n$option5"
########## # Prompt user to select a wallpaper
## main ## wallpaper=$(fd -p ./ | dmenu -i -p "󰋩 Select a wallpaper")
########## if [ -z "$wallpaper" ]; then
wallpaper=$(fd -p ./ | dmenu -i -p " 󰋩 Select a wallpaper ") # main prompt exit 0
if [ "$wallpaper" ]; then # if the user made a choice
chosenwall=$wallpaper # reassign $wallpaper to $chosenwall
else
exit 0
fi fi
action=$(echo -e "$options" | dmenu -i -p "  Chose the format ") # options prompt
# Store the selected wallpaper
chosenwall="$wallpaper"
# Prompt user to select a wallpaper format
action=$(echo -e "$options" | dmenu -i -p " Choose the format")
case "$action" in case "$action" in
$option1*) "$option1")
feh --bg-fill "$chosenwall"; feh --bg-fill "$chosenwall"
;; ;;
$option2*) "$option2")
feh --bg-center "$chosenwall"; feh --bg-center "$chosenwall"
;; ;;
$option3*) "$option3")
feh --bg-tile "$chosenwall"; feh --bg-tile "$chosenwall"
;; ;;
$option4*) "$option4")
feh --bg-max "$chosenwall"; feh --bg-max "$chosenwall"
;; ;;
$option5*) "$option5")
feh --bg-scale "$chosenwall"; feh --bg-scale "$chosenwall"
;; ;;
esac esac

View file

@ -1,10 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ***This script was made by Clay Gomera (Drake)*** # *** Script by Clay Gomera (Drake) ***
# - Description: A simple wifi dmenu script # Description: A simple WiFi management script using dmenu and NetworkManager
# - Dependencies: dmenu, NetworkManager # Dependencies: dmenu, NetworkManager, notify-send
## Main menu options # Main menu options
option1=" Turn on WiFi" option1=" Turn on WiFi"
option2=" Turn off WiFi" option2=" Turn off WiFi"
option3="󱛅 Disconnect WiFi" option3="󱛅 Disconnect WiFi"
@ -13,15 +13,11 @@ option5="󱛆 Setup captive portal"
option6="󱎘 Exit" option6="󱎘 Exit"
options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6" options="$option1\n$option2\n$option3\n$option4\n$option5\n$option6"
##### # Retrieve wireless interface information
## These variables will store specific information about the wireless interface
#####
wifi_info=$(nmcli dev | awk '/wifi/ {print $1,$3; exit}') wifi_info=$(nmcli dev | awk '/wifi/ {print $1,$3; exit}')
read -r wlan constate <<< "$wifi_info" read -r wlan state <<< "$wifi_info"
##### # Function to turn off WiFi
## This function uses nmcli to turn off wifi and then sends a notification
#####
turnoff() { turnoff() {
nmcli radio wifi off nmcli radio wifi off
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@ -31,9 +27,7 @@ turnoff() {
fi fi
} }
##### # Function to turn on WiFi
## This function uses nmcli to turn on wifi and then sends a notification
#####
turnon() { turnon() {
nmcli radio wifi on nmcli radio wifi on
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@ -43,14 +37,11 @@ turnon() {
fi fi
} }
##### # Function to disconnect WiFi
## This function uses nmcli and the $wlan and $constate variables to disconnect
## from the wifi network and then sends a notification
#####
disconnect() { disconnect() {
if [ "$constate" = "disconnected" ]; then if [ "$state" = "disconnected" ]; then
notify-send "WiFi is already disconnected" notify-send "WiFi is already disconnected"
elif [ "$constate" = "connected" ]; then elif [ "$state" = "connected" ]; then
nmcli device disconnect "$wlan" nmcli device disconnect "$wlan"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
notify-send "WiFi has been disconnected" notify-send "WiFi has been disconnected"
@ -62,14 +53,11 @@ disconnect() {
fi fi
} }
##### # Function to select and connect to a WiFi network
## This function uses nmcli to first scan for available networks and then the
## $bssid variable will store the SSID of the network that the user chooses
#####
connect() { connect() {
notify-send -t 5000 "Scanning networks..." notify-send -t 5000 "Scanning networks..."
nmcli dev wifi rescan nmcli dev wifi rescan
wifinet=$(nmcli -f BSSID,SSID,BARS,SECURITY dev wifi list | sed -n '1!p' | dmenu -i -l 10 -p " Select a Wifi Network") local wifinet=$(nmcli -f BSSID,SSID,BARS,SECURITY dev wifi list | sed -n '1!p' | dmenu -i -l 10 -p " Select a Wifi Network")
if [ -z "$wifinet" ]; then if [ -z "$wifinet" ]; then
exit 0 exit 0
fi fi
@ -77,9 +65,7 @@ connect() {
ssid=$(echo "$wifinet" | awk '{print $2}') ssid=$(echo "$wifinet" | awk '{print $2}')
} }
##### # Function to prompt for WiFi password
## This function will store the WiFi password in the $pass variable
#####
password() { password() {
if nmcli connection show | awk -v ssid="$ssid" '$1 == ssid {found=1} END {exit !found}'; then if nmcli connection show | awk -v ssid="$ssid" '$1 == ssid {found=1} END {exit !found}'; then
pass="" pass=""
@ -93,10 +79,7 @@ password() {
fi fi
} }
##### # Function to connect to the selected WiFi network
## This function will actually connect to the chosen WiFi network using the
## $bssid and $pass variables
#####
action() { action() {
if [ -n "$pass" ]; then if [ -n "$pass" ]; then
nmcli dev wifi connect "$bssid" password "$pass" nmcli dev wifi connect "$bssid" password "$pass"
@ -110,15 +93,13 @@ action() {
fi fi
} }
########## # Show menu and handle user choice
## main ## case=$(echo -e "$options" | dmenu -l 6 -i -p " WiFi Settings")
########## if [ -z "$case" ]; then
cases=$(echo -e "$options" | dmenu -l 6 -i -p " Wifi Settings")
if [ -z "$cases" ]; then
exit 0 exit 0
fi fi
case "$cases" in case "$case" in
"$option1") "$option1")
turnon turnon
;; ;;

View file

@ -1,6 +1,7 @@
/* Appearance */ /* Appearance */
static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int borderpx = 1; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */ static const unsigned int snap = 32; /* snap pixel */
static const unsigned int gappx = 6; /* gaps between windows */
static const int showbar = 1; /* 0 means no bar */ static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */ static const int topbar = 1; /* 0 means bottom bar */
static const int vertpad = 0; /* vertical padding of bar */ static const int vertpad = 0; /* vertical padding of bar */
@ -153,7 +154,7 @@ static const Rule rules[] = {
{"Xournalpp", NULL, NULL, 1 << 6, 0, -1}, {"Xournalpp", NULL, NULL, 1 << 6, 0, -1},
{"Com.github.xournalpp.xournalpp", NULL, NULL, 1 << 6, 0, -1}, {"Com.github.xournalpp.xournalpp", NULL, NULL, 1 << 6, 0, -1},
/* 8 - Office Tag */ /* 8 - Office Tag */
{"DesktopEditors", NULL, NULL, 1 << 7, 0, -1}, {"ONLYOFFICE Desktop Editors", NULL, NULL, 1 << 7, 0, -1},
{"Soffice", "soffice", NULL, 1 << 7, 0, -1}, {"Soffice", "soffice", NULL, 1 << 7, 0, -1},
{"libreoffice-startcenter", NULL, NULL, 1 << 7, 0, -1}, {"libreoffice-startcenter", NULL, NULL, 1 << 7, 0, -1},
{"libreoffice-calc", NULL, NULL, 1 << 7, 0, -1}, {"libreoffice-calc", NULL, NULL, 1 << 7, 0, -1},
@ -205,7 +206,7 @@ static const Rule rules[] = {
/* Layout(s) */ /* Layout(s) */
static const float mfact = 0.5; /* factor of master area size [0.05..0.95] */ static const float mfact = 0.5; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */ static const int nmaster = 1; /* number of clients in master area */
static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
static const Layout layouts[] = { static const Layout layouts[] = {
/* symbol arrange function */ /* symbol arrange function */
@ -235,13 +236,14 @@ static const Layout layouts[] = {
static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *termcmd[] = { "st", NULL }; static const char *termcmd[] = { "st", NULL };
static const char *editor[] = { "emacsclient", "-c", "-a", "'emacs'", NULL }; static const char *editor[] = { "emacsclient", "-c", "-a", "'emacs'", NULL };
static const char *browser[] = { "flatpak", "run", "com.brave.Browser", NULL }; static const char *browser[] = { "brave", NULL };
static const char *chat[] = { "flatpak", "run", "org.signal.Signal", NULL }; static const char *chat[] = { "flatpak", "run", "org.signal.Signal", NULL };
static const char *vm[] = { "virt-manager", NULL }; static const char *vm[] = { "virt-manager", NULL };
static const char *office[] = { "flatpak", "run", "org.libreoffice.LibreOffice", NULL }; static const char *office[] = { "flatpak", "run", "org.onlyoffice.desktopeditors", NULL };
static const char *videoeditor[] = { "flatpak", "run", "org.kde.kdenlive", NULL }; static const char *videoeditor[] = { "flatpak", "run", "org.kde.kdenlive", NULL };
static const char *imageeditor[] = { "flatpak", "run", "org.gimp.GIMP", NULL }; static const char *imageeditor[] = { "flatpak", "run", "org.gimp.GIMP", NULL };
static const char *audioeditor[] = { "flatpak", "run", "org.audacityteam.Audacity", NULL }; static const char *audioeditor[] = { "flatpak", "run", "org.audacityteam.Audacity", NULL };
static const char *game[] = { "flatpak", "run", "com.valvesoftware.Steam", NULL };
/* Keybindings */ /* Keybindings */
static Keychord *keychords[] = { static Keychord *keychords[] = {
@ -260,14 +262,15 @@ static Keychord *keychords[] = {
&((Keychord){2, {{MODKEY, XK_p}, {0, XK_q}}, spawn, SHCMD("$HOME/.config/suckless/dmenu/scripts/dmenu_power") }), /* Launch power menu */ &((Keychord){2, {{MODKEY, XK_p}, {0, XK_q}}, spawn, SHCMD("$HOME/.config/suckless/dmenu/scripts/dmenu_power") }), /* Launch power menu */
/* Apps */ /* Apps */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_e}}, spawn, {.v = editor } }), /* Launch text editor (tag 1) */ &((Keychord){2, {{MODKEY, XK_a}, {0, XK_e}}, spawn, {.v = editor } }), /* Launch text editor (tag 1) */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_v}}, spawn, {.v = vm } }), /* Launch vm manager (tag 2) */ &((Keychord){2, {{MODKEY, XK_a}, {0, XK_v}}, spawn, {.v = vm } }), /* Launch vm manager (tag 2) */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_w}}, spawn, {.v = browser } }), /* Launch web browser (tag 3) */ &((Keychord){2, {{MODKEY, XK_a}, {0, XK_w}}, spawn, {.v = browser } }), /* Launch web browser (tag 3) */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_c}}, spawn, {.v = chat } }), /* Launch chat app (tag 4) */ &((Keychord){2, {{MODKEY, XK_a}, {0, XK_c}}, spawn, {.v = chat } }), /* Launch chat app (tag 4) */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_a}}, spawn, {.v = audioeditor } }), /* Launch audio editor (tag 5) */ &((Keychord){2, {{MODKEY, XK_a}, {0, XK_a}}, spawn, {.v = audioeditor } }), /* Launch audio editor (tag 5) */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_k}}, spawn, {.v = videoeditor } }), /* Launch video editor (tag 6) */ &((Keychord){2, {{MODKEY, XK_a}, {0, XK_k}}, spawn, {.v = videoeditor } }), /* Launch video editor (tag 6) */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_i}}, spawn, {.v = imageeditor } }), /* Launch image editor (tag 7) */ &((Keychord){2, {{MODKEY, XK_a}, {0, XK_i}}, spawn, {.v = imageeditor } }), /* Launch image editor (tag 7) */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_o}}, spawn, {.v = office } }), /* Launch office suite (tag 8) */ &((Keychord){2, {{MODKEY, XK_a}, {0, XK_o}}, spawn, {.v = office } }), /* Launch office suite (tag 8) */
&((Keychord){2, {{MODKEY, XK_a}, {0, XK_g}}, spawn, {.v = game } }), /* Launch office suite (tag 9) */
/* Keyboard Layouts */ /* Keyboard Layouts */
&((Keychord){2, {{MODKEY, XK_x}, {0, XK_e}}, spawn, SHCMD("setxkbmap -layout es && pkill -RTMIN+10 dwmblocks") }), /* Switch to Spanish keyboard layout */ &((Keychord){2, {{MODKEY, XK_x}, {0, XK_e}}, spawn, SHCMD("setxkbmap -layout es && pkill -RTMIN+10 dwmblocks") }), /* Switch to Spanish keyboard layout */
@ -323,10 +326,10 @@ static Keychord *keychords[] = {
&((Keychord){1, {{MODKEY|Mod1Mask, XK_space}}, togglefloating, {0} }), /* Toggle floating mode on active window */ &((Keychord){1, {{MODKEY|Mod1Mask, XK_space}}, togglefloating, {0} }), /* Toggle floating mode on active window */
&((Keychord){1, {{MODKEY, XK_0}}, view, {.ui = ~0 } }), /* View all windows from all tags */ &((Keychord){1, {{MODKEY, XK_0}}, view, {.ui = ~0 } }), /* View all windows from all tags */
&((Keychord){1, {{MODKEY|ShiftMask, XK_0}}, tag, {.ui = ~0 } }), /* View active window on all tags (similar to sticky, more nuclear) */ &((Keychord){1, {{MODKEY|ShiftMask, XK_0}}, tag, {.ui = ~0 } }), /* View active window on all tags (similar to sticky, more nuclear) */
&((Keychord){1, {{MODKEY, XK_comma}}, focusmon, {.i = +1 } }), /* Focus next screen */ &((Keychord){1, {{MODKEY, XK_comma}}, focusmon, {.i = -1 } }), /* Focus next screen */
&((Keychord){1, {{MODKEY, XK_period}}, focusmon, {.i = -1 } }), /* Focus previous screen */ &((Keychord){1, {{MODKEY, XK_period}}, focusmon, {.i = +1 } }), /* Focus previous screen */
&((Keychord){1, {{MODKEY|ShiftMask, XK_comma}}, tagmon, {.i = +1 } }), /* Move active window to next screen */ &((Keychord){1, {{MODKEY|ShiftMask, XK_comma}}, tagmon, {.i = -1 } }), /* Move active window to next screen */
&((Keychord){1, {{MODKEY|ShiftMask, XK_period}}, tagmon, {.i = -1 } }), /* Move active window to previous screen */ &((Keychord){1, {{MODKEY|ShiftMask, XK_period}}, tagmon, {.i = +1 } }), /* Move active window to previous screen */
&((Keychord){1, {{MODKEY, XK_b}}, togglebar, {0} }), /* Toggle bar */ &((Keychord){1, {{MODKEY, XK_b}}, togglebar, {0} }), /* Toggle bar */
/* Scratchpads */ /* Scratchpads */

View file

@ -56,8 +56,8 @@
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]) || C->issticky) #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]) || C->issticky)
#define LENGTH(X) (sizeof X / sizeof X[0]) #define LENGTH(X) (sizeof X / sizeof X[0])
#define MOUSEMASK (BUTTONMASK|PointerMotionMask) #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
#define WIDTH(X) ((X)->w + 2 * (X)->bw) #define WIDTH(X) ((X)->w + 2 * (X)->bw + gappx)
#define HEIGHT(X) ((X)->h + 2 * (X)->bw) #define HEIGHT(X) ((X)->h + 2 * (X)->bw + gappx)
#define NUMTAGS (LENGTH(tags) + LENGTH(scratchpads)) #define NUMTAGS (LENGTH(tags) + LENGTH(scratchpads))
#define TAGMASK ((1 << NUMTAGS) - 1) #define TAGMASK ((1 << NUMTAGS) - 1)
#define SPTAG(i) ((1 << LENGTH(tags)) << (i)) #define SPTAG(i) ((1 << LENGTH(tags)) << (i))
@ -619,6 +619,9 @@ void combotag(const Arg *arg) {
combo = 1; combo = 1;
selmon->sel->tags = arg->ui & TAGMASK; selmon->sel->tags = arg->ui & TAGMASK;
} }
// Set the monitor's selected tag to the new tag
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
focus(NULL); focus(NULL);
arrange(selmon); arrange(selmon);
} }
@ -1906,17 +1909,39 @@ void resize(Client *c, int x, int y, int w, int h, int interact) {
void resizeclient(Client *c, int x, int y, int w, int h) { void resizeclient(Client *c, int x, int y, int w, int h) {
XWindowChanges wc; XWindowChanges wc;
unsigned int n;
unsigned int gapoffset;
unsigned int gapincr;
Client *nbc;
wc.border_width = c->bw;
c->oldx = c->x; c->x = wc.x = x; /* Get number of clients for the client's monitor */
c->oldy = c->y; c->y = wc.y = y; for (n = 0, nbc = nexttiled(c->mon->clients); nbc; nbc = nexttiled(nbc->next), n++);
c->oldw = c->w; c->w = wc.width = w;
c->oldh = c->h; c->h = wc.height = h; /* Do nothing if layout is floating */
if (c->isfloating || c->mon->lt[c->mon->sellt]->arrange == NULL) {
gapincr = gapoffset = 0;
} else {
/* Remove border and gap if layout is monocle or only one client */
if (c->mon->lt[c->mon->sellt]->arrange == monocle || n == 1) {
gapoffset = 0;
gapincr = -2 * borderpx;
wc.border_width = 0;
} else {
gapoffset = gappx;
gapincr = 2 * gappx;
}
}
c->oldx = c->x; c->x = wc.x = x + gapoffset;
c->oldy = c->y; c->y = wc.y = y + gapoffset;
c->oldw = c->w; c->w = wc.width = w - gapincr;
c->oldh = c->h; c->h = wc.height = h - gapincr;
if (c->beingmoved) if (c->beingmoved)
return; return;
wc.border_width = c->bw;
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
configure(c); configure(c);
XSync(dpy, False); XSync(dpy, False);
@ -2080,15 +2105,21 @@ void scan(void) {
void sendmon(Client *c, Monitor *m) { void sendmon(Client *c, Monitor *m) {
if (c->mon == m) if (c->mon == m)
return; return;
int hadfocus = (c == selmon->sel);
unfocus(c, 1); unfocus(c, 1);
detach(c); detach(c);
detachstack(c); detachstack(c);
arrange(c->mon);
c->mon = m; c->mon = m;
c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
attachbottom(c); attachbottom(c);
attachstack(c); attachstack(c);
focus(NULL); arrange(m);
arrange(NULL); if (hadfocus) {
focus(c);
restack(m);
} else
focus(NULL);
} }
void setclientstate(Client *c, long state) { void setclientstate(Client *c, long state) {
@ -2396,7 +2427,7 @@ void tile(Monitor *m) {
if (i < m->nmaster) { if (i < m->nmaster) {
h = (m->wh - my) / (MIN(n, m->nmaster) - i); h = (m->wh - my) / (MIN(n, m->nmaster) - i);
resize(c, m->rmaster ? m->wx + m->ww - mw : m->wx, resize(c, m->rmaster ? m->wx + m->ww - mw : m->wx,
m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0); m->wy + my, mw - (2*c->bw) + (n > 1 ? gappx : 0), h - (2*c->bw), 0);
if (my + HEIGHT(c) < m->wh) if (my + HEIGHT(c) < m->wh)
my += HEIGHT(c); my += HEIGHT(c);
} else { } else {

View file

@ -0,0 +1,40 @@
From 812695104701acaaa5b31afad08fdb576486ae72 Mon Sep 17 00:00:00 2001
From: Bakkeby <bakkeby@gmail.com>
Date: Thu, 27 Jun 2024 17:55:57 +0200
Subject: [PATCH] sendmon_keepfocus patch
---
dwm.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/dwm.c b/dwm.c
index 4465af1..2def4a1 100644
--- a/dwm.c
+++ b/dwm.c
@@ -1412,15 +1412,21 @@ sendmon(Client *c, Monitor *m)
{
if (c->mon == m)
return;
+ int hadfocus = (c == selmon->sel);
unfocus(c, 1);
detach(c);
detachstack(c);
+ arrange(c->mon);
c->mon = m;
c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
attach(c);
attachstack(c);
- focus(NULL);
- arrange(NULL);
+ arrange(m);
+ if (hadfocus) {
+ focus(c);
+ restack(m);
+ } else
+ focus(NULL);
}
void
--
2.45.2

View file

@ -0,0 +1,101 @@
From 58414bee958f2e7ed91d6fe31f503ec4a406981b Mon Sep 17 00:00:00 2001
From: cirala <thim@cederlund.de>
Date: Fri, 19 Nov 2021 18:14:07 +0100
Subject: [PATCH] Fix for dwm-uselessgap
Previous versions of the patch doubles the
gap between the master and slave stacks.
---
config.def.h | 3 ++-
dwm.c | 38 +++++++++++++++++++++++++++++++-------
2 files changed, 33 insertions(+), 8 deletions(-)
diff --git a/config.def.h b/config.def.h
index a2ac963..17a205f 100644
--- a/config.def.h
+++ b/config.def.h
@@ -2,6 +2,7 @@
/* appearance */
static const unsigned int borderpx = 1; /* border pixel of windows */
+static const unsigned int gappx = 6; /* gaps between windows */
static const unsigned int snap = 32; /* snap pixel */
static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */
@@ -34,7 +35,7 @@ static const Rule rules[] = {
/* layout(s) */
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */
-static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
+static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
static const Layout layouts[] = {
diff --git a/dwm.c b/dwm.c
index 5e4d494..b626e89 100644
--- a/dwm.c
+++ b/dwm.c
@@ -52,8 +52,8 @@
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
#define LENGTH(X) (sizeof X / sizeof X[0])
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
-#define WIDTH(X) ((X)->w + 2 * (X)->bw)
-#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+#define WIDTH(X) ((X)->w + 2 * (X)->bw + gappx)
+#define HEIGHT(X) ((X)->h + 2 * (X)->bw + gappx)
#define TAGMASK ((1 << LENGTH(tags)) - 1)
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
@@ -1277,12 +1277,36 @@ void
resizeclient(Client *c, int x, int y, int w, int h)
{
XWindowChanges wc;
+ unsigned int n;
+ unsigned int gapoffset;
+ unsigned int gapincr;
+ Client *nbc;
- c->oldx = c->x; c->x = wc.x = x;
- c->oldy = c->y; c->y = wc.y = y;
- c->oldw = c->w; c->w = wc.width = w;
- c->oldh = c->h; c->h = wc.height = h;
wc.border_width = c->bw;
+
+ /* Get number of clients for the client's monitor */
+ for (n = 0, nbc = nexttiled(c->mon->clients); nbc; nbc = nexttiled(nbc->next), n++);
+
+ /* Do nothing if layout is floating */
+ if (c->isfloating || c->mon->lt[c->mon->sellt]->arrange == NULL) {
+ gapincr = gapoffset = 0;
+ } else {
+ /* Remove border and gap if layout is monocle or only one client */
+ if (c->mon->lt[c->mon->sellt]->arrange == monocle || n == 1) {
+ gapoffset = 0;
+ gapincr = -2 * borderpx;
+ wc.border_width = 0;
+ } else {
+ gapoffset = gappx;
+ gapincr = 2 * gappx;
+ }
+ }
+
+ c->oldx = c->x; c->x = wc.x = x + gapoffset;
+ c->oldy = c->y; c->y = wc.y = y + gapoffset;
+ c->oldw = c->w; c->w = wc.width = w - gapincr;
+ c->oldh = c->h; c->h = wc.height = h - gapincr;
+
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
configure(c);
XSync(dpy, False);
@@ -1688,7 +1712,7 @@ tile(Monitor *m)
for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
if (i < m->nmaster) {
h = (m->wh - my) / (MIN(n, m->nmaster) - i);
- resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
+ resize(c, m->wx, m->wy + my, mw - (2*c->bw) + (n > 1 ? gappx : 0), h - (2*c->bw), 0);
if (my + HEIGHT(c) < m->wh)
my += HEIGHT(c);
} else {
--
2.33.1

View file

@ -8,9 +8,11 @@
# activate neccesary env variables for ssh-agent and other stuff # activate neccesary env variables for ssh-agent and other stuff
dbus-update-activation-environment DISPLAY XAUTHORITY & dbus-update-activation-environment DISPLAY XAUTHORITY &
# bind gnome secrets component to currently running gnome-keyring instance launched with PAM on login (this unlocks the keyring)
gnome-keyring-daemon --start --components=secrets &
# autostart programs, use pidof <program> || program, to prevent relaunching stuff if dwm is restarted # autostart programs, use pidof <program> || program, to prevent relaunching stuff if dwm is restarted
pidof pipewire || pipewire & pidof polkit-gnome-authentication-agent-1 || /usr/lib/polkit-gnome-authentication-agent-1 &
pidof polkit-gnome-authentication-agent-1 || /usr/libexec/polkit-gnome-authentication-agent-1 &
pidof dwmblocks || dwmblocks & pidof dwmblocks || dwmblocks &
pidof unclutter || unclutter --hide-on-touch & pidof unclutter || unclutter --hide-on-touch &
pidof dunst || dunst --config $HOME/.config/dunst/dunstrc & pidof dunst || dunst --config $HOME/.config/dunst/dunstrc &
@ -21,7 +23,7 @@ pidof emacs || /usr/bin/emacs --daemon &
# set theming and font thingy # set theming and font thingy
gsettings set org.gnome.desktop.interface cursor-theme 'Simp1e-Gruvbox-Dark' & gsettings set org.gnome.desktop.interface cursor-theme 'Simp1e-Gruvbox-Dark' &
gsettings set org.gnome.desktop.interface cursor-size 16 & gsettings set org.gnome.desktop.interface cursor-size 16 &
gsettings set org.gnome.desktop.interface icon-theme 'Papirus-Dark' & gsettings set org.gnome.desktop.interface icon-theme 'Gruvbox-Plus-Dark' &
gsettings set org.gnome.desktop.interface gtk-theme 'Gruvbox-Dark' & gsettings set org.gnome.desktop.interface gtk-theme 'Gruvbox-Dark' &
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' & gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' &
gsettings set org.gnome.desktop.interface font-name 'Inter 10' & gsettings set org.gnome.desktop.interface font-name 'Inter 10' &
@ -32,29 +34,25 @@ gsettings set org.gnome.desktop.interface font-hinting 'full' &
# grab monitor status (varies with the machine) # grab monitor status (varies with the machine)
### T480 monitors ### T480 monitors
monitor1=$(cat /sys/class/drm/card0-DP-1/status) monitor1=$(cat /sys/class/drm/card1-HDMI-A-2/status)
monitor2=$(cat /sys/class/drm/card0-HDMI-A-2/status) monitor2=$(cat /sys/class/drm/card1-DP-1/status)
# if monitors are connected, then use xrandr to set desired settings # if monitors are connected, then use xrandr to set desired settings
if [ "$monitor1" = "connected" ] && [ "$monitor2" = "connected" ]; then if [ "$monitor1" = "connected" ] && [ "$monitor2" = "connected" ]; then
xrandr --output eDP1 --mode 1920x1080 --pos 0x0 --rotate normal \ xrandr --output eDP1 --mode 1920x1080 --pos 3200x0 --rotate normal \
--output DP1 --primary --mode 1920x1080 --rate 100.00 --pos 1924x0 --rotate normal \ --output HDMI2 --primary --mode 1920x1080 --rate 100.00 --pos 1280x0 --rotate normal \
--output HDMI2 --mode 1280x1024 --rate 75.00 --pos 3844x0 --rotate normal & --output DP1 --mode 1280x1024 --rate 75.00 --pos 0x0 --rotate normal &
elif [ "$monitor1" = "connected" ]; then elif [ "$monitor1" = "connected" ]; then
xrandr --output eDP1 --primary --auto \ xrandr --output eDP1 --primary --auto \
--output DP1 --auto --scale-from 1920x1080 --same-as eDP1 & --output HDMI2 --auto --scale-from 1920x1080 --same-as eDP1 &
elif [ "$monitor2" = "connected" ]; then elif [ "$monitor2" = "connected" ]; then
xrandr --output eDP1 --primary --auto \ xrandr --output eDP1 --primary --auto \
--output HDMI2 --auto --scale-from 1920x1080 --same-as eDP1 & --output DP1 --auto --scale-from 1920x1080 --same-as eDP1 &
else else
xrandr --output eDP1 --primary --auto \ xrandr --output eDP1 --primary --auto \
--output DP1 --off \ --output HDMI2 --off \
--output HDMI2 --off & --output DP1 --off &
fi fi
# set wallpaper # set wallpaper
sh "$HOME"/.fehbg & sh "$HOME"/.fehbg &
# bind gnome secrets component to currently running gnome-keyring instance launched with PAM on login (this unlocks the keyring)
gnome-keyring-daemon --start --components=secrets &

View file

@ -117,7 +117,7 @@ char *termname = "st-256color";
unsigned int tabspaces = 4; unsigned int tabspaces = 4;
/* bg opacity */ /* bg opacity */
float alpha = 0.98; float alpha = 0.95;
/* Terminal colors (16 first used in escape sequence) */ /* Terminal colors (16 first used in escape sequence) */
static const char *colorname[] = { static const char *colorname[] = {

Binary file not shown.

View file

@ -1,2 +0,0 @@
# Void Linux templates for xbps-src
Put them in void-packages/srcpkgs/ and use xbps-src to build and package them.

View file

@ -1,16 +0,0 @@
# Template file for 'ani-cli'
pkgname=ani-cli
version=4.8
revision=1
depends="curl openssl mpv aria2 ffmpeg"
short_desc="CLI tool to browse and play anime"
maintainer="chtc <notnotcha0t1c@protonmail.com>"
license="GPL-3.0-or-later"
homepage="https://github.com/pystardust/ani-cli"
distfiles="${homepage}/archive/refs/tags/v${version}.tar.gz>${pkgname}-${version}.tar.gz"
checksum=9857bf88a1cbef4580dea52da349d3b23d2288b67a03fdd7b6c5c1b35d08351d
do_install() {
vbin ani-cli
vinstall README.md 644 usr/share/doc/$pkgname
}

View file

@ -1,5 +0,0 @@
Distrobox uses podman or docker to create containers of the Linux distribution of your choice.
Either one of these packages need to be installed:
- docker: enable docker usage
- podman: enable podman usage

View file

@ -1,16 +0,0 @@
# Template file for 'distrobox'
pkgname=distrobox
version=1.7.2.1
revision=1
short_desc="Use any linux distribution inside your terminal"
maintainer="Libera <libera@disroot.org>"
license="GPL-3.0-or-later"
homepage="https://distrobox.it/"
distfiles="https://github.com/89luca89/distrobox/archive/${version}.tar.gz"
checksum=ff2cca0c6334fff6ed577d23f68a6746ad4009f42d8a45eef5ca3850c895a4bb
do_install() {
./install --prefix "${DESTDIR}/usr"
find docs -name "*.md" -exec \
install -Dm 644 -t "${DESTDIR}/usr/share/doc/distrobox" {} +
}

View file

@ -1,13 +0,0 @@
# Template file for 'ytfzf'
pkgname=ytfzf
version=2.6.2
revision=1
build_style=gnu-makefile
make_install_args="PREFIX=/usr doc"
depends="jq curl"
short_desc="POSIX shell script to find and watch YouTube videos from the terminal"
maintainer="Bryce Vandegrift <bryce@brycevandegrift.xyz>"
license="GPL-3.0-or-later"
homepage="https://github.com/pystardust/ytfzf"
distfiles="https://github.com/pystardust/${pkgname}/archive/refs/tags/v${version}.tar.gz"
checksum=73280e4ef4f490400a42bf582b713803c523587b0b30269859eaa6f2693ec9b1