Major rewrite: switching back to Arch from NixOS

This commit is contained in:
ItsDrike 2024-10-02 14:37:28 +02:00
parent df585b737b
commit 254181c0fc
Signed by: ItsDrike
GPG key ID: FA2745890B7048C0
121 changed files with 5433 additions and 2371 deletions

View file

@ -0,0 +1,3 @@
[General]
theme=catppuccin-mocha-blue

View file

@ -5,16 +5,17 @@
# Which monitor should the notifications be shown on
monitor = 0
# Display notifications on focused monitor. Possible modes:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# keyboard needs a window manager that exports
# _NET_ACTIVE_WINDOW propery! This should be the case for almost
# all modern window managers.
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option isn't none, monitor option will be ignored.
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
### Geometry ###
@ -38,7 +39,7 @@
scale = 0
# Maximum number of notifications (0 means no limit)
notification_limit = 0
notification_limit = 10
### Progress bar ###
@ -59,6 +60,20 @@
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Corner radius for the progress bar. 0 disables rounded corners.
progress_bar_corner_radius = 0
# Define which corners to round when drawing the progress bar. If progress_bar_corner_radius
# is set to 0 this option will be ignored.
progress_bar_corners = all
# Corner radius for the icon image.
icon_corner_radius = 0
# Define which corners to round when drawing the icon image. If icon_corner_radius
# is set to 0 this option will be ignored.
icon_corners = all
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
@ -68,8 +83,10 @@
# present (e.g. xcompmgr, compiz, picom, etc.). (X11 only)
transparency = 20
# Draw a line of "separator_height" pixel height between two
# notifications. Set to 0 to disable.
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
@ -86,7 +103,13 @@
frame_width = 3
# Defines color of the frame around the notification window
frame_color = "#aaaaaa"
frame_color = "#27292c";
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 0
# Define a color for the separator.
# possible values are:
@ -96,19 +119,26 @@
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
# Sort type.
# possible values are:
# * id: sort by id
# * urgency_ascending: sort by urgency (low then normal then critical)
# * urgency_descending: sort by urgency (critical then normal then low)
# * update: sort by update (most recent always at the top)
sort = yes
# Don't remove messages if the user is idle (no mouse/keyboard input)
# for longer than idle_threshold seconds (0 to disable)
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
idle_threshold = 120
### Text ###
font = JetBrains Mono 11
# The spacing between the lines. If the height is smaller than the
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
@ -120,7 +150,7 @@
# <u>underline</u>
#
# For a complete reference see
# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
@ -160,17 +190,18 @@
# of the noticication. If set to no, longer sententences will be truncated
word_wrap = yes
# Specify where to make an ellipsis in the long lines.
# Possible values are "start", "middle", "end".
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Show age of message if message is older than show_age_threshold seconds
# Set to -1 to disable, 0 to always show.
show_age_threshold = 60
# Merge multiple notifications with the same content
stack_duplicates = true
@ -182,6 +213,15 @@
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
# Set icon theme (only used for recursive icon lookup)
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
icon_theme = Papirus-Dark, Adwaita
# Align icons left/right/off
icon_position = left
@ -193,8 +233,8 @@
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 32
# Paths to default icons
icon_path = /usr/share/icons/hicolor/16x16/status/:/usr/share/icons/hicolor/16x16/devices/:/usr/share/icons/hicolor/16x16/apps/
# Paths to default icons (only necessary when not using recursive icon lookup)
#icon_path = /usr/share/icons/hicolor/16x16/status/:/usr/share/icons/hicolor/16x16/devices/:/usr/share/icons/hicolor/16x16/apps/
### History ###
@ -229,6 +269,13 @@
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Define which corners to round when drawing the window. If the corner radius
# is set to 0 this option will be ignored.
#
# Comma-separated list of the corners. The accepted corner values are bottom-right,
# bottom-left, top-right, top-left, top, bottom, left, right or all.
corners = all
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
@ -293,8 +340,9 @@
foreground = "#ffffff"
timeout = 5
# Icon for notifications with low urgency, uncomment to enable
#icon = /path/to/icon
#default_icon = /path/to/icon
[urgency_normal]
highlight = "#fe6c5a"
@ -303,8 +351,9 @@
foreground = "#ffffffff"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#icon = /path/to/icon
#default_icon = /path/to/icon
[urgency_critical]
highlight = "#fe6c5a"
@ -313,7 +362,10 @@
foreground = "#ffffffff"
timeout = 0
override_pause_level = 60
icon = arbt
# Icon for notifications with critical urgency, uncomment to enable
#icon = /path/to/icon
@ -352,6 +404,7 @@
# ellipsize
# alignment
# hide_text
# override_pause_level
#
# Shell-like globbing will get expanded.
#
@ -359,6 +412,10 @@
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# You can also allow a notification to appear even when paused. Notification will appear whenever notification's override_pause_level >= dunst's paused level.
# This can be used to set partial pause modes, where more urgent notifications get through, but less urgent stay paused. To do that, you can override the following in the rules:
# override_pause_level = X
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.

View file

@ -1,4 +1,4 @@
.window_name {
font-family: "JetBrains Mono", "Font Awesome 6 Free", sans-serif;
font-family: "Monaspace Krypton";
font-size: 1.4rem;
}

View file

@ -2,13 +2,14 @@
background-color: $bg1-a;
border-radius: 25px;
.icon, .icon label {
font-family: "Material Symbols Outlined";
font-size: 1.15rem;
.icon,
.icon label {
font-family: "JetBrainsMono Nerd Font", "Material Symbols Outlined";
font-size: 1.2rem;
}
.value {
margin: 0 9px;
margin: 0 10px;
}
.focused {

View file

@ -34,13 +34,13 @@
background-color: $bg-a;
color: $fg;
font-family: "JetBrains Mono", "Jost *", sans-serif;
font-family: "JetBrains Mono";
label {
font-size: 14px;
}
// TODO: Use ercentages (for some reason it fails now)
// TODO: Use percentages (for some reason it fails now)
min-width: 1900px;
}

View file

@ -1,4 +1,4 @@
(defvar terminal "alacritty -e")
(defvar terminal "kitty -e")
(include "./modules/variables.yuck")

View file

@ -1,6 +1,6 @@
(defwidget bitcoin_module []
(eventbox
:onclick "~/.local/bin/scripts/cli/bitcoin | xargs -I_ ${EWW_CMD} update bitcoin=_"
:onclick "bitcoin | xargs -I{} ${EWW_CMD} update bitcoin={}"
:class "module bitcoin"
(box

View file

@ -1,9 +1,9 @@
(defwidget clock_module []
(eventbox
:onclick "${EWW_CMD} open --toggle calendar"
:tooltip {time.day}
:class "module clock"
:onclick "${EWW_CMD} open --toggle calendar"
(box
:space-evenly false
@ -13,5 +13,6 @@
:text "")
(label
:class "value"
:text "${time.date} ${time.hour}:${time.minute}"))
))
:text "${time.date} ${time.hour}:${time.minute}")
)))

View file

@ -37,7 +37,7 @@
(defpoll bitcoin
:interval "5m"
:initial "$N/A"
`~/.local/bin/scripts/cli/bitcoin`)
`bitcoin`)
; TODO: Figure out how to store this one-time
(defpoll kernel

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"

View file

@ -1,83 +1,82 @@
#!/bin/bash
#!/usr/bin/env bash
if [ "$1" = "temperature" ]; then
watch_cmd="{t}"
update_cmd="UpdateTemperature"
update_signature="n"
set_cmd="Temperature"
set_signature="q"
default_val=6500
click_val=4500
scroll_change=100
cmp_op="<"
watch_cmd="{t}"
update_cmd="UpdateTemperature"
update_signature="n"
set_cmd="Temperature"
set_signature="q"
default_val=6500
click_val=4500
scroll_change=100
cmp_op="<"
elif [ "$1" = "brightness" ]; then
watch_cmd="{bp}"
update_cmd="UpdateBrightness"
update_signature="d"
set_cmd="Brightness"
set_signature="d"
default_val=1
click_val=0.8
scroll_change=0.02
cmp_op="<"
watch_cmd="{bp}"
update_cmd="UpdateBrightness"
update_signature="d"
set_cmd="Brightness"
set_signature="d"
default_val=1
click_val=0.8
scroll_change=0.02
cmp_op="<"
elif [ "$1" = "gamma" ]; then
watch_cmd="{g}"
update_cmd="UpdateGamma"
update_signature="d"
set_cmd="Gamma"
set_signature="d"
default_val=1
click_val=1.1
scroll_change=0.02
cmp_op=">"
watch_cmd="{g}"
update_cmd="UpdateGamma"
update_signature="d"
set_cmd="Gamma"
set_signature="d"
default_val=1
click_val=1.1
scroll_change=0.02
cmp_op=">"
else
>&2 echo "Invalid option, first argument must be one of: temperature, brightness, gamma"
exit 1
>&2 echo "Invalid option, first argument must be one of: temperature, brightness, gamma"
exit 1
fi
if [ "$2" = "watch" ]; then
exec wl-gammarelay-rs watch "$watch_cmd"
exec wl-gammarelay-rs watch "$watch_cmd"
elif [ "$2" = "get" ]; then
exec busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" | cut -d' ' -f2
exec busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" | cut -d' ' -f2
elif [ "$2" = "scroll" ]; then
if [ "$3" = "up" ]; then
sign="+"
elif [ "$3" = "down" ]; then
sign="-"
else
>&2 echo "Invalid sign, second argument must be one of: up, down"
exit 1
fi
if [ "$3" = "up" ]; then
sign="+"
elif [ "$3" = "down" ]; then
sign="-"
else
>&2 echo "Invalid sign, second argument must be one of: up, down"
exit 1
fi
exec busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay "$update_cmd" "$update_signature" ${sign}${scroll_change}
exec busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay "$update_cmd" "$update_signature" ${sign}${scroll_change}
elif [ "$2" = "set" ]; then
mode="$3"
if [ "$mode" = "toggle" ]; then
cur_val="$(busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" | cut -d' ' -f2)"
if [ "$(echo "$cur_val $cmp_op $default_val" | bc -l)" = "1" ]; then
mode="off"
else
mode="on"
fi
fi
mode="$3"
if [ "$mode" = "toggle" ]; then
cur_val="$(busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" | cut -d' ' -f2)"
if [ "$(echo "$cur_val $cmp_op $default_val" | bc -l)" = "1" ]; then
mode="off"
else
mode="on"
fi
fi
if [ "$mode" = "on" ]; then
exec busctl --user -- set-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" "$set_signature" "$click_val"
elif [ "$mode" = "off" ]; then
exec busctl --user -- set-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" "$set_signature" "$default_val"
else
>&2 echo "Invalid mode, third argument, must be one of: toggle, on, off"
exit 1
fi
if [ "$mode" = "on" ]; then
exec busctl --user -- set-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" "$set_signature" "$click_val"
elif [ "$mode" = "off" ]; then
exec busctl --user -- set-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" "$set_signature" "$default_val"
else
>&2 echo "Invalid mode, third argument, must be one of: toggle, on, off"
exit 1
fi
else
>&2 echo "Invalid operation, second argument must be one of: watch, scroll, set"
exit 1
>&2 echo "Invalid operation, second argument must be one of: watch, scroll, set"
exit 1
fi

View file

@ -1,26 +1,26 @@
#!/bin/bash
#!/usr/bin/env bash
# $1: Current number
# $2: Range minimum
# $3: Range maximum
# $4-: Icons as individual arguments
pick_icon() {
cur="$1"
min="$2"
max="$3"
shift 3
icons=( "$@" )
cur="$1"
min="$2"
max="$3"
shift 3
icons=("$@")
index="$(echo "($cur-$min)/(($max-$min)/${#icons[@]})" | bc)"
index="$(echo "($cur-$min)/(($max-$min)/${#icons[@]})" | bc)"
# Print the picked icon, handling overflows/underflows, i.e. if our index is <0 or >len(icons)
if [ "$index" -ge "${#icons[@]}" ]; then
index=-1
elif [ "$index" -lt 0 ]; then
index=0
fi
# Print the picked icon, handling overflows/underflows, i.e. if our index is <0 or >len(icons)
if [ "$index" -ge "${#icons[@]}" ]; then
index=-1
elif [ "$index" -lt 0 ]; then
index=0
fi
echo "${icons[index]}"
echo "${icons[index]}"
}
# Will block and listen to the hyprland socket messages and output them
@ -29,21 +29,22 @@ pick_icon() {
# Note: requires openbsd version of netcat.
# $1 - Optional event to listen for (no event filtering will be done if not provided)
hyprland_ipc() {
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
>&2 echo "Hyprland is not running, IPC not available"
exit 1
fi
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
>&2 echo "Hyprland is not running, IPC not available"
exit 1
fi
SOCKET_PATH="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
SOCKET_PATH="${XDG_RUNTIME_DIR:-/run/user/$UID}/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
#SOCKET_PATH="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
if [ -z "$1" ]; then
nc -U "$SOCKET_PATH" | while read -r test; do
echo "$test"
done
else
nc -U "$SOCKET_PATH" | while read -r test; do
# shellcheck disable=SC2016
echo "$test" | grep --line-buffered -E "^$1>>" | stdbuf -oL awk -F '>>' '{print $2}'
done
fi
if [ -z "$1" ]; then
nc -U "$SOCKET_PATH" | while read -r test; do
echo "$test"
done
else
nc -U "$SOCKET_PATH" | while read -r test; do
# shellcheck disable=SC2016
echo "$test" | grep --line-buffered -E "^$1>>" | stdbuf -oL awk -F '>>' '{print $2}'
done
fi
}

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"
@ -7,7 +7,6 @@ source "./scripts/include"
# as we might be in transition state and just killing the program might
# not be enough.
if [ "$1" = "toggle" ]; then
gammastep -x
gammastep -x
fi

View file

@ -1,35 +1,35 @@
#!/bin/bash
#!/usr/bin/env bash
MOUNTPOINTS=("/" "/mnt/ext")
data="$(df -H)"
as_json() {
mountpoint="$1"
res="$2"
arr_res=($res)
mountpoint="$1"
res="$2"
arr_res=($res)
jq -n -c --monochrome-output \
--arg mountpoint "$mountpoint" \
--arg size "${arr_res[0]}" \
--arg used "${arr_res[1]}" \
--arg avail "${arr_res[2]}" \
--arg percent "${arr_res[3]}" \
'$ARGS.named'
jq -n -c --monochrome-output \
--arg mountpoint "$mountpoint" \
--arg size "${arr_res[0]}" \
--arg used "${arr_res[1]}" \
--arg avail "${arr_res[2]}" \
--arg percent "${arr_res[3]}" \
'$ARGS.named'
}
output_json="[]"
for mountpoint in "${MOUNTPOINTS[@]}"; do
res="$(echo "$data" | awk -v m="$mountpoint" '$6 == m {print $2 " " $3 " " $4 " " $5}')"
out="$(as_json "$mountpoint" "$res")"
res="$(echo "$data" | awk -v m="$mountpoint" '$6 == m {print $2 " " $3 " " $4 " " $5}')"
out="$(as_json "$mountpoint" "$res")"
# echo "$output_json $out" | jq -c -s
# echo "$output_json $out" | jq -c -s
jq --argjson arr1 "$output_json" --argjson arr2 "[$out]" -n \
'$arr1 + $arr2'
jq --argjson arr1 "$output_json" --argjson arr2 "[$out]" -n \
'$arr1 + $arr2'
# mount_data+=("$mountpoint" $res)
# echo "${mount_data[@]}"
# mount_data+=("$mountpoint" $res)
# echo "${mount_data[@]}"
done
# echo "${mount_data[@]}"

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# Define some icons
SPEAKER_ICONS=("" "" "")
@ -10,100 +10,103 @@ MIC_MUTED_ICON=""
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
get_vol() {
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | awk '{print int($2*100)}'
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | awk '{print int($2*100)}'
}
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
# #2 is the voulme (as percentage) to set the volume to
# $3 is optional, if set, it can be '+' or '-', which then adds/decreases volume, instead of setting
set_vol() {
wpctl set-volume "@DEFAULT_AUDIO_${1}@" "$(awk -v n="$2" 'BEGIN{print (n / 100)}')$3"
wpctl set-volume "@DEFAULT_AUDIO_${1}@" "$(awk -v n="$2" 'BEGIN{print (n / 100)}')$3"
}
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
check_mute() {
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | grep -i muted >/dev/null
echo $?
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | grep -i muted >/dev/null
echo $?
}
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
toggle_mute() {
wpctl set-mute "@DEFAULT_AUDIO_${1}@" toggle
wpctl set-mute "@DEFAULT_AUDIO_${1}@" toggle
}
get_report() {
spkr_vol="$(get_vol "SINK")"
mic_vol="$(get_vol "SOURCE")"
spkr_vol="$(get_vol "SINK")"
mic_vol="$(get_vol "SOURCE")"
if [ "$(check_mute "SINK")" == "0" ]; then
spkr_mute="true"
spkr_icon="$SPEAKER_MUTED_ICON"
else
spkr_mute="false"
index="$(awk -v n="$spkr_vol" -v m="${#SPEAKER_ICONS[@]}" 'BEGIN{print int(n/(100/m))}')"
if [ "$(check_mute "SINK")" == "0" ]; then
spkr_mute="true"
spkr_icon="$SPEAKER_MUTED_ICON"
else
spkr_mute="false"
index="$(awk -v n="$spkr_vol" -v m="${#SPEAKER_ICONS[@]}" 'BEGIN{print int(n/(100/m))}')"
# We might end up with an higher than the length of icons, if the volume is over 100%
# in this case, set the index to last icon
if [ "$index" -ge "${#SPEAKER_ICONS[@]}" ]; then
spkr_icon="${SPEAKER_ICONS[-1]}"
else
spkr_icon="${SPEAKER_ICONS[$index]}"
fi
fi
# We might end up with an higher than the length of icons, if the volume is over 100%
# in this case, set the index to last icon
if [ "$index" -ge "${#SPEAKER_ICONS[@]}" ]; then
spkr_icon="${SPEAKER_ICONS[-1]}"
else
spkr_icon="${SPEAKER_ICONS[$index]}"
fi
fi
if [ "$(check_mute "SOURCE")" = "0" ]; then
mic_mute="true"
mic_icon="$MIC_MUTED_ICON"
else
mic_mute="false"
mic_icon="$MIC_ICON"
fi
if [ "$(check_mute "SOURCE")" = "0" ]; then
mic_mute="true"
mic_icon="$MIC_MUTED_ICON"
else
mic_mute="false"
mic_icon="$MIC_ICON"
fi
echo "{ \"speaker_vol\": \"$spkr_vol\", \"speaker_mute\": $spkr_mute, \"speaker_icon\": \"$spkr_icon\", \"microphone_mute\": $mic_mute, \"microphone_vol\": \"$mic_vol\", \"microphone_icon\": \"$mic_icon\" }"
echo "{ \"speaker_vol\": \"$spkr_vol\", \"speaker_mute\": $spkr_mute, \"speaker_icon\": \"$spkr_icon\", \"microphone_mute\": $mic_mute, \"microphone_vol\": \"$mic_vol\", \"microphone_icon\": \"$mic_icon\" }"
}
# Continually run and report every volume change (into stdout)
loop() {
get_report
pactl subscribe | grep --line-buffered "change" | while read -r _; do
get_report
done
get_report
pactl subscribe | grep --line-buffered "change" | while read -r _; do
get_report
done
}
case "$1" in
"loop") loop ;;
"loop") loop ;;
"once") get_report ;;
"once") get_report ;;
"togglemute")
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
exit 1
fi
toggle_mute "$2"
;;
"togglemute")
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
exit 1
fi
toggle_mute "$2"
;;
"setvol")
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
exit 1
fi
"setvol")
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
exit 1
fi
if [[ "$3" =~ ^[+-]?[0-9]*\.?[0-9]+$ ]]; then
case "$4" in
"") set_vol "$2" "$3" ;;
up|+) set_vol "$2" "$3" "+" ;;
down|-) set_vol "$2" "$3" "-" ;;
*)
>&2 echo "Invalid usage, expected fourth argument to be up/down or +/-, got '$4'"
exit 1
;;
esac
else
>&2 echo "Invalid usage, exepcted third argument to be a number, got '$3'"
exit 1
fi
;;
if [[ "$3" =~ ^[+-]?[0-9]*\.?[0-9]+$ ]]; then
case "$4" in
"") set_vol "$2" "$3" ;;
up | +) set_vol "$2" "$3" "+" ;;
down | -) set_vol "$2" "$3" "-" ;;
*)
>&2 echo "Invalid usage, expected fourth argument to be up/down or +/-, got '$4'"
exit 1
;;
esac
else
>&2 echo "Invalid usage, exepcted third argument to be a number, got '$3'"
exit 1
fi
;;
*) >&2 echo "Invalid usage, argument '$1' not recognized."; exit 1 ;;
*)
>&2 echo "Invalid usage, argument '$1' not recognized."
exit 1
;;
esac

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"

View file

@ -7,6 +7,7 @@ the window names. Window name and class are obtained from piped stdin, to preven
needlessly keep restarting this program, which takes a while due to the interpreter starting
overhead.
"""
import json
import re
import sys
@ -50,9 +51,9 @@ class RemapRule:
# Rules will be applied in specified order
REMAP_RULES: list[RemapRule] = [
RemapRule(r"", "", ""),
RemapRule(r"(.*) — Mozilla Firefox", " {}", "firefox"),
RemapRule(r"Mozilla Firefox", " Mozilla Firefox", "firefox"),
RemapRule(r"Alacritty", " Alacritty", "Alacritty"),
RemapRule(r"(.*) — Mozilla Firefox", " {}", "firefox"),
RemapRule(r"Mozilla Firefox", " Mozilla Firefox", "firefox"),
RemapRule(r"Alacritty", " Alacritty", "Alacritty"),
RemapRule(
r"zsh;#toggleterm#1 - \(term:\/\/(.+)\/\/(\d+):(.+)\) - N?VIM",
" Terminal: {0}",
@ -63,13 +64,13 @@ REMAP_RULES: list[RemapRule] = [
RemapRule(r"(.+) - Discord", "{}", "discord"),
RemapRule(r"(?:\(\d+\) )?Discord \| (.+)", "{}", "vesktop"),
RemapRule(r"(.+) - mpv", "{}", "mpv"),
RemapRule(r"Stremio - (.+)", " Stremio - {}", r"(Stremio)|(com.stremio.stremio)"),
RemapRule(r"Spotify", " Spotify", "Spotify"),
RemapRule(r"pulsemixer", " Pulsemixer"),
RemapRule(r"Stremio - (.+)", " Stremio - {}", r"(Stremio)|(com.stremio.stremio)"),
RemapRule(r"Spotify((?: Premium)?)", " Spotify{}", "[Ss]potify"),
RemapRule(r"pulsemixer", " Pulsemixer"),
RemapRule(r"(.*)", "{}", "Pcmanfm"),
RemapRule(r"(.*)", "{}", "pcmanfm-qt"),
# Needs to be last
RemapRule(r"(.*)", " {}", "kitty"),
RemapRule(r"(.*)", " {}", "kitty"),
]
MAX_LENGTH = 65
@ -81,7 +82,9 @@ def iter_window() -> Iterator[tuple[str, str]]:
line = line.removesuffix("\n")
els = line.split(",", maxsplit=1)
if len(els) != 2:
raise ValueError(f"Expected 2 arguments from stdin line (name, class), but got {len(els)}")
raise ValueError(
f"Expected 2 arguments from stdin line (name, class), but got {len(els)}"
)
yield els[1], els[0]
@ -94,6 +97,7 @@ def main() -> None:
formatted_name = new_name
break
formatted_name = formatted_name.split("\n")[0]
if len(formatted_name) > MAX_LENGTH:
formatted_name = formatted_name[: MAX_LENGTH - 3] + "..."

View file

@ -1,13 +1,12 @@
#!/bin/bash
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"
if [ "$1" = "--switch" ]; then
$HOME/.local/bin/scripts/gui/hyprland/swap-workspace "$2" >/dev/null
# hyprctl dispatch workspace "$2" >/dev/null
hyprctl dispatch focusworkspaceoncurrentmonitor "$2" >/dev/null
elif [ "$1" = "--loop" ]; then
hyprland_ipc "workspace|createworkspace|destroyworkspace" | ./scripts/workspaces.py "$@"
hyprland_ipc "workspace|createworkspace|destroyworkspace" | ./scripts/workspaces.py "$@"
else
./scripts/workspaces.py "$@"
./scripts/workspaces.py "$@"
fi

View file

@ -1,12 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<description>Disable Caskaydia Cove Nerd Font</description>
<selectfont>
<rejectfont>
<glob>/usr/share/fonts/nerd-fonts-git/TTF/Caskaydia*</glob>
</rejectfont>
</selectfont>
</fontconfig>

View file

@ -50,6 +50,7 @@
bD = "branch --delete --force"
bm = "branch --move"
bM = "branch --move --force"
bb = "!better-git-branch"
r = "rebase"
ri = "rebase -i"
@ -65,8 +66,13 @@
set-upstream = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
fixup-picker = "!git log -n 50 --pretty=format:'%h %s' --no-merges | fzf | cut -c -7 | xargs -o git commit --fixup";
staash = "stash --all";
stash-staged = "!sh -c 'git stash --keep-index; git stash push -m \"staged\" --keep-index; git stash pop stash@{1}'"
reauthor-all = "rebase --root -r --exec 'git commit --amend --no-edit --reset-author --no-verify'";
find-merge = "!sh -c 'commit=$0 && branch=${1:-HEAD} && (git rev-list $commit..$branch --ancestry-path | cat -n; git rev-list $commit..$branch --first-parent | cat -n) | sort -k2 -s | uniq -f1 -d | sort -n | tail -1 | cut -f2'"
show-merge = "!sh -c 'merge=$(git find-merge $0 $1) && [ -n \"$merge\" ] && git show $merge'"
@ -75,7 +81,7 @@
total-lines = "!git tracked-text-files | xargs cat | wc -l"
total-files = "!git tracked-files | wc -l"
total-commits = "!git log --oneline | wc -l"
comitter-lines = "!git log --author=\"$1\" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s, removed lines: %s, total lines: %s\\n\", add, subs, loc }' #"
comitter-lines = "!git log --author=\"$1\" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"added lines: %s, removed lines: %s, total lines: %s\\n\", add, subs, loc }' #"
[credential]
helper = store --file ~/.config/git/git-credentials
[core]

View file

@ -1,11 +0,0 @@
[Filechooser Settings]
LocationMode=path-bar
ShowHidden=false
ShowSizeColumn=true
GeometryX=510
GeometryY=260
GeometryWidth=900
GeometryHeight=584
SortColumn=name
SortOrder=ascending
StartupMode=recent

View file

@ -1,19 +1,15 @@
# DO NOT EDIT! This file will be overwritten by LXAppearance.
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
include "/home/itsdrike/.gtkrc-2.0.mine"
gtk-theme-name="Adwaita-dark"
gtk-icon-theme-name="Papirus-Dark"
gtk-font-name="Noto Sans, 10"
gtk-cursor-theme-name="BreezeX-Light"
gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-theme-name = "Tokyonight-Dark"
gtk-icon-theme-name = "Papirus-Dark"
gtk-cursor-theme-name = "BreezeX-RosePine-Linux"
gtk-cursor-theme-size = 24
gtk-font-name = "Noto Sans 10"
gtk-button-images=1
gtk-menu-images=1
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=1
gtk-enable-event-sounds=0
gtk-enable-input-feedback-sounds=0
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle="hintfull"
gtk-modules="colorreload-gtk-module:window-decorations-gtk-module:appmenu-gtk-module"
gtk-xft-hintstyle="hintslight"
gtk-xft-rgba="rgb"

View file

@ -1,21 +1,19 @@
[Settings]
gtk-application-prefer-dark-theme=true
gtk-button-images=1
gtk-cursor-theme-name=BreezeX-Light
gtk-cursor-theme-size=24
gtk-decoration-layout=icon:minimize,maximize,close
gtk-enable-animations=true
gtk-font-name=Noto Sans, 10
gtk-theme-name=Tokyonight-Dark
gtk-icon-theme-name=Papirus-Dark
gtk-cursor-theme-name=BreezeX-RosePine-Linux
gtk-cursor-theme-size=24
gtk-font-name=Noto Sans 10
gtk-enable-animations=true
gtk-button-images=1
gtk-menu-images=1
gtk-modules=colorreload-gtk-module:window-decorations-gtk-module:appmenu-gtk-module
gtk-primary-button-warps-slider=false
gtk-shell-shows-menubar=1
gtk-theme-name=Adwaita-dark
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
gtk-enable-event-sounds=0
gtk-enable-input-feedback-sounds=0
gtk-error-bell=0
gtk-decoration-layout=appmenu:none
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=1
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintfull
gtk-xft-hintstyle=hintslight

View file

@ -0,0 +1,5 @@
/**
* GTK 4 reads the theme configured by gtk-theme-name, but ignores it.
* It does however respect user CSS, so import the theme from here.
**/
@import url("file:///usr/share/themes/Tokyonight-Dark/gtk-4.0/gtk.css");

View file

@ -0,0 +1,14 @@
[Settings]
gtk-application-prefer-dark-theme=true
gtk-theme-name=Tokyonight-Dark
gtk-icon-theme-name=Papirus-Dark
gtk-cursor-theme-name=BreezeX-RosePine-Linux
gtk-cursor-theme-size=24
gtk-font-name=Noto Sans 10
gtk-enable-event-sounds=0
gtk-enable-input-feedback-sounds=0
gtk-error-bell=0
gtk-decoration-layout=appmenu:none
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight

View file

@ -1,19 +1,19 @@
{
"preset": "rainbow",
"mode": "rgb",
"light_dark": "dark",
"lightness": 0.65,
"color_align": {
"mode": "custom",
"custom_colors": {
"1": 1,
"2": 4
},
"fore_back": []
"preset": "rainbow",
"mode": "rgb",
"light_dark": "dark",
"lightness": 0.65,
"color_align": {
"mode": "custom",
"custom_colors": {
"1": 1,
"2": 4
},
"backend": "neofetch",
"args": null,
"distro": null,
"pride_month_shown": [],
"pride_month_disable": false
}
"fore_back": []
},
"backend": "neofetch",
"args": null,
"distro": null,
"pride_month_shown": [],
"pride_month_disable": false
}

View file

@ -4,6 +4,7 @@ general {
unlock-cmd = killall -s SIGUSR1 hyprlock && dunstctl set-paused false
before_sleep_cmd = loginctl lock-session && dunstctl set-paused true && sleep 2
ignore_dbus_inhibit = false
ignore_systemd_inhibit = false;
}
# Warn about going idle (5 mins)

View file

@ -1,55 +1,6 @@
# #################
# ### AUTOSTART ###
# #################
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE
exec-once = sleep 1 && systemctl --user start wayland-session.target # Hyprland socket sometimes isn't yet loaded, sleep for sec
# exec-once = aa-notify -p
# exec-once = udiskie -A -T
# exec-once = nm-applet --indicator
exec-once = vesktop
# exec-once = discord
# exec-once = webcord --start-minimized
# #############################
# ### ENVIRONMENT VARIABLES ###
# #############################
env = HYPRCURSOR_THEME,Adwaita
env = HYPRCURSOR_SIZE,24
# #########################
# ### CATEGORY SETTINGS ###
# #########################
general {
# cursor_inactive_timeout = 10
# no_cursor_warps = true
layout = dwindle
}
gestures {
workspace_swipe = true
workspace_swipe_fingers = 3
workspace_swipe_distance = 300
workspace_swipe_invert = false
workspace_swipe_min_speed_to_force = 20
workspace_swipe_cancel_ratio = 0.650000
}
group {
insert_after_current = true
focus_removed_window = true
}
misc {
# follow requests from windows to be focused
focus_on_activate = true
}
debug {
@ -58,21 +9,14 @@ debug {
enable_stdout_logs = true
}
dwindle {
pseudotile = false
preserve_split = true
no_gaps_when_only = false
#smart_split = true
}
# #######################
# ### EXTERNAL CONFIG ###
# #######################
source = ~/.config/hypr/input.conf
source = ~/.config/hypr/style.conf
source = ~/.config/hypr/keybinds.conf
source = ~/.config/hypr/window_rules.conf
source = ~/.config/hypr/plugins.conf
source = ~/.config/hypr/hyprland.d/exec.conf
source = ~/.config/hypr/hyprland.d/layout.conf
source = ~/.config/hypr/hyprland.d/input.conf
source = ~/.config/hypr/hyprland.d/style.conf
source = ~/.config/hypr/hyprland.d/keybinds.conf
source = ~/.config/hypr/hyprland.d/window_rules.conf
source = ~/.config/hypr/hyprland.d/gestures.conf
source = ~/.config/hypr/hyprland.d/misc.conf
source = ~/.config/hypr/hyprland.d/plugins.conf
# vi: ft=hyprlang

View file

@ -0,0 +1,11 @@
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE GTK_THEME QT_QPA_PLATFORMTHEME QT_STYLE_OVERRIDE
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP GTK_THEME QT_QPA_PLATFORMTHEME QT_STYLE_OVERRIDE
# Hyprland socket sometimes isn't yet loaded, sleep for sec
exec-once = sleep 1 && systemctl --user start wayland-session.target
exec-once = vesktop
# exec-once = discord
# exec-once = webcord --start-minimized
# vi: ft=hyprlang

View file

@ -0,0 +1,11 @@
gestures {
workspace_swipe = true
workspace_swipe_fingers = 3
workspace_swipe_distance = 300
workspace_swipe_invert = false
workspace_swipe_min_speed_to_force = 20
workspace_swipe_cancel_ratio = 0.650000
}
# vi: ft=hyprlang

View file

@ -24,7 +24,10 @@ input {
follow_mouse = 1
touchpad {
middle_button_emulation = true
# Sending LMB + RMB = MMB
middle_button_emulation = true
# I'm not natural
natural_scroll = false;
}
}

View file

@ -4,14 +4,20 @@ $MOUSE_MMB = mouse:274
$MOUSE_EX1 = mouse:275
$MOUSE_EX2 = mouse:276
$XF86Favorites = 164
# #####################
# ### DE/WM CONTROL ###
# ### ACTIVE WINDOW ###
# #####################
bind = SUPER_SHIFT, Q, exec, menuquit
bind = SUPER_CTRL, L, exec, loginctl lock-session
bind = SUPER_SHIFT, L, exec, wlogout -p layer-shell
bind = SUPER_SHIFT, T, exec, toggle-idle
bind = SUPER, W, killactive,
bind = SUPER, F, togglefloating,
bind = SUPER, Space, fullscreen, 0 # regular fullscreen
bind = SUPER_SHIFT, Space, fullscreen, 1 # maximize without client fullscreen
bind = SUPER_CTRL, Space, fullscreenstate, 2, 0 # fullscreen without client knowing
bind = SUPER_CTRL_SHIFT, Space, fullscreenstate, 1, 2 # maximize with client being full-screen
bind = CTRL_SHIFT, Space, exec, toggle-fake-fullscreen # fake fullscreen + custom border
bind = SUPER_SHIFT, S, layoutmsg, togglesplit
# ################
# ### PROGRAMS ###
@ -24,11 +30,41 @@ bind = SUPER_SHIFT, V, exec, clipman pick -t wofi
bind = SUPER, Return, exec, kitty
bind = SUPER, X, exec, pcmanfm-qt
bind = SUPER, B, exec, firefox
bind = SUPER, S, exec, spotify
bind = SUPER, D, exec, vesktop
bind = SUPER, C, exec, qalculate-gtk
bind = , XF86Calculator, exec, qalculate-gtk
# #####################
# ### DE/WM CONTROL ###
# #####################
bind = SUPER_SHIFT, Q, exec, menuquit
bind = SUPER_CTRL, L, exec, loginctl lock-session
bind = SUPER_SHIFT, L, exec, wlogout -p layer-shell
bind = SUPER_SHIFT, T, exec, toggle-idle
# ###################
# ### SCREENSHOTS ###
# ###################
# Screenshots (with custom screenshot script)
$SCREENSHOT_FORMAT = "${XDG_SCREENSHOTS_DIR:-$HOME/Media/Pictures/Screenshots}/Screenshot_$(date +%Y-%m-%d_%H-%M-%S).png"
$SCREENSHOT_DELAY = 2000
bind = ALT, Print, exec, wl-copy --type image/png "$(hyprpicker)" && notify-send 'Picked color' "$(wl-paste) (saved to clipboard)"
bind = , Print, exec, hyprland-screenshot --notify --copy --target area
#bindl = , Print, exec, hyprland-screenshot --notify --copy --target all # lockscreen screenshot (only enable when needed)
bind = SUPER, Print, exec, hyprland-screenshot --notify --copy --target area --edit
bind = SHIFT, Print, exec, hyprland-screenshot --notify --save $SCREENSHOT_FORMAT --target area
bind = CTRL, Print, exec, hyprland-screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY
bind = SUPER_SHIFT, Print, exec, hyprland-screenshot --notify --save $SCREENSHOT_FORMAT --target area --edit
bind = SUPER_CTRL, Print, exec, hyprland-screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY --edit
bind = SUPER_SHIFT_CTRL, Print, exec, hyprland-screenshot --notify --save $SCREENSHOT_FORMAT --target area --delay $SCREENSHOT_DELAY --edit
# bind = , Print, exec, hyprland-screenshot --save $SCREENSHOT_FORMAT --target all
# XF86Favorites key for recording
# (don't question me, I had it free)
bind = , 164, exec, quick-record --notify toggle
bind = SUPER, 164, exec, quick-record toggle
# #####################
# ### NOTIFICATIONS ###
# #####################
@ -39,9 +75,9 @@ bind = CTRL, period, exec, dunstctl history-pop
bind = CTRL_SHIFT, period, exec, dunstctl context
bind = SUPER_SHIFT, D, exec, toggle-notifications
# ######################
# ### VOLUME CONTROL ###
# ######################
# ############################
# ### AUDIO/VOLUME CONTROL ###
# ############################
binde = SUPER, Down, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-
binde = SUPER, Up, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+
@ -59,48 +95,12 @@ binde = SUPER, Left, exec, brightness -d 5% -n
binde = , XF86MonBrightnessUp, exec, brightness -i 5% -n
binde = , XF86MonBrightnessDown, exec, brightness -d 5% -n
# ###################
# ### SCREENSHOTS ###
# ###################
# Screenshots (with custom screenshot script)
$SCREENSHOT_FORMAT = "${XDG_SCREENSHOTS_DIR:-$HOME/Pictures/Screenshots}/Screenshot_$(date +%Y-%m-%d_%H-%M-%S).png"
$SCREENSHOT_DELAY = 2000
bind = ALT, Print, exec, wl-copy --type image/png "$(hyprpicker)" && notify-send 'Picked color' "$(wl-paste) (saved to clipboard)"
bind = , Print, exec, screenshot --notify --copy --target area
#bindl = , Print, exec, screenshot --notify --copy --target all # lockscreen screenshot (only enable when needed)
bind = SUPER, Print, exec, screenshot --notify --copy --target area --edit
bind = SHIFT, Print, exec, screenshot --notify --save $SCREENSHOT_FORMAT --target area
bind = CTRL, Print, exec, screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY
bind = SUPER_SHIFT, Print, exec, screenshot --notify --save $SCREENSHOT_FORMAT --target area --edit
bind = SUPER_CTRL, Print, exec, screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY --edit
bind = SUPER_SHIFT_CTRL, Print, exec, screenshot --notify --save $SCREENSHOT_FORMAT --target area --delay $SCREENSHOT_DELAY --edit
# bind = , Print, exec, screenshot --save $SCREENSHOT_FORMAT --target all
# XF86Favorites key for recording
# (don't question me, I had it free)
bind = , 164, exec, quick-record --notify toggle
bind = SUPER, 164, exec, quick-record toggle
# #####################
# ### ACTIVE WINDOW ###
# #####################
bind = SUPER, W, killactive,
bind = SUPER, F, togglefloating,
bind = SUPER, Space, fullscreen, 0
bind = SUPER_SHIFT, Space, fullscreen, 1
bind = CTRL_SHIFT, Space, exec, toggle-fakefullscreen
bind = SUPER, P, exec, bash -c "if hyprctl activewindow | grep 'floating: 0'; then hyprctl dispatch togglefloating active; fi; hyprctl dispatch pin active"
bind = SUPER_SHIFT, P, pseudo,
bind = SUPER_SHIFT, S, layoutmsg, togglesplit
# #####################
# ### WINDOW GROUPS ###
# #####################
bind = SUPER, G, togglegroup,
bind = SUPER_SHIFT, G, lockactivegroup, toggle
bind = ALT, tab, changegroupactive, f
bind = ALT, grave, changegroupactive, b
@ -111,15 +111,6 @@ bind = ALT, grave, changegroupactive, b
bind = ALT, grave, movetoworkspace, special
bind = SUPER, grave, togglespecialworkspace,
# ################################################################
# ### OVERRIDE SPLIT DIRECTION FOR NEXT WINDOW (MANUAL TILING) ###
# ################################################################
bind = SUPER_ALT, left, layoutmsg, preselect l
bind = SUPER_ALT, right, layoutmsg, preselect r
bind = SUPER_ALT, up, layoutmsg, preselect u
bind = SUPER_ALT, down, layoutmsg, preselect d
# #########################
# ### MOVE WINDOW FOCUS ###
# #########################
@ -143,25 +134,34 @@ bind = SUPER_ALT, j, movewindow, d
# #######################################
$myMoveSize = 100
$myMove = sh .config/hypr/scripts/move-window.sh $myMoveSize
bind = SUPER_ALT, left, exec, $myMove l
bind = SUPER_ALT, right, exec, $myMove r
bind = SUPER_ALT, up, exec, $myMove u
bind = SUPER_ALT, down, exec, $myMove d
bind = SUPER_ALT, left, exec, hyprland-move-window $myMoveSiez l
bind = SUPER_ALT, right, exec, hyprland-move-window $myMoveSize r
bind = SUPER_ALT, up, exec, hyprland-move-window $myMoveSize u
bind = SUPER_ALT, down, exec, hyprland-move-window $myMoveSize d
# ################################################################
# ### OVERRIDE SPLIT DIRECTION FOR NEXT WINDOW (MANUAL TILING) ###
# ################################################################
bind = SUPER_ALT, left, layoutmsg, preselect l
bind = SUPER_ALT, right, layoutmsg, preselect r
bind = SUPER_ALT, up, layoutmsg, preselect u
bind = SUPER_ALT, down, layoutmsg, preselect d
# ######################################################
# ### SWITCH WORKSPACE (SWAPPING TO CURRENT MONITOR) ###
# ######################################################
bind = SUPER, 1, exec, swap-workspace 1
bind = SUPER, 2, exec, swap-workspace 2
bind = SUPER, 3, exec, swap-workspace 3
bind = SUPER, 4, exec, swap-workspace 4
bind = SUPER, 5, exec, swap-workspace 5
bind = SUPER, 6, exec, swap-workspace 6
bind = SUPER, 7, exec, swap-workspace 7
bind = SUPER, 8, exec, swap-workspace 8
bind = SUPER, 9, exec, swap-workspace 9
bind = SUPER, 1, focusworkspaceoncurrentmonitor, 1
bind = SUPER, 2, focusworkspaceoncurrentmonitor, 2
bind = SUPER, 3, focusworkspaceoncurrentmonitor, 3
bind = SUPER, 4, focusworkspaceoncurrentmonitor, 4
bind = SUPER, 5, focusworkspaceoncurrentmonitor, 5
bind = SUPER, 6, focusworkspaceoncurrentmonitor, 6
bind = SUPER, 7, focusworkspaceoncurrentmonitor, 7
bind = SUPER, 8, focusworkspaceoncurrentmonitor, 8
bind = SUPER, 9, focusworkspaceoncurrentmonitor, 9
# ################################
# ### MOVE WINDOW TO WORKSPACE ###
@ -274,7 +274,6 @@ submap = reset
# ### GLOBAL KEYBINDS (PASSING KEYS TO OTHER PROGRAMS) ###
# ########################################################
bind = CTRL, F10, pass, ^(com\.obsproject\.Studio)$
bind = CTRL, F10, pass, ^(com\.obsproject\.Studio)$
# #######################
@ -282,10 +281,10 @@ bind = CTRL, F10, pass, ^(com\.obsproject\.Studio)$
# #######################
# Isolating group to prevent keybind capturing (for games etc)
# SUPER + Fn + F12 (Favorites)
bind = SUPER, XF86Favorites, exec, hyprctl dispatch submap isolate && notify-send "Keybind isolation" "Keybind isolation on"
# SUPER + End
bind = SUPER, End, exec, hyprctl dispatch submap isolate && notify-send "Keybind isolation" "Keybind isolation on"
submap = isolate
bind = SUPER, XF86Favorites, exec, hyprctl dispatch submap reset && notify-send "Keybind isolation" "Keybind isolation off"
bind = SUPER, End, exec, hyprctl dispatch submap reset && notify-send "Keybind isolation" "Keybind isolation off"
submap = reset
# vi: ft=hyprlang

View file

@ -0,0 +1,26 @@
general {
layout = dwindle
}
dwindle {
# Don't change the split (side/top) regardless
# of what happens to the container
preserve_split = true
# Show gaps even when there's only 1 window opened
no_gaps_when_only = false
# Scale down special workspaces (bigger borders)
special_scale_factor = 0.9
}
group {
# Add new windows in the group after the current window
# rather than after the group tail window
insert_after_current = true
# Focus the window that was just moved out of the group
focus_removed_window = true
}
# vi: ft=hyprlang

View file

@ -0,0 +1,14 @@
misc {
# Disable redundant renders (covered by wallpaper)
disable_hyprland_logo = true
disable_splash_rendering = true
# follow requests from windows to be focused
focus_on_activate = true
# Enable DPMS on these actions
mouse_move_enables_dpms = true
key_press_enables_dpms = true
}
# vi: ft=hyprlang

View file

@ -44,18 +44,24 @@ group {
group {
groupbar {
render_titles = true
font_size = 8
text_color = rgba(FFFFFFFF) # white
# Title box above window
render_titles = false # disable, looks kinda bad
font_family = Monaspace Krypton
font_size = 11
text_color = rgba(FFFFFFFF) # white
gradients = true
scrolling = false
# Gradients should be enabled only if title rendering is also enabled
# on their own, they look really bad
gradients = false
col.active = rgba(FFA500FF) # light orange
col.inactive = rgba(00A500AA) # transparent green
col.locked_active = rgba(FF8000FF) # dark orange
col.locked_inactive = rgba(A0A500AA) # transparent yello
col.locked_inactive = rgba(A0A500AA) # transparent yellow
# Scrolling in the groupbar shouldn't change the active window
scrolling = false
}
}
@ -102,6 +108,7 @@ decoration {
animations {
enabled = true
first_launch_animation = true # fade in on first launch
animation = windows, 1, 3, default, popin 50%
animation = border, 1, 4, default
@ -118,9 +125,4 @@ misc {
# ### WALLPAPER ###
# #################
misc {
disable_hyprland_logo = true
disable_splash_rendering = false
}
# vi: ft=hyprlang

View file

@ -27,22 +27,6 @@ windowrulev2 = idleinhibit focus, class:^(firefox)$,title:^(Picture-in-Picture)$
windowrulev2 = size 800 550, class:^(qalculate-gtk)$
windowrulev2 = tile, class:^(Spotify)$
# #############
# ### FIXES ###
# #############
# jetbrains
windowrulev2 = windowdance, class:^(jetbrains-.*)$,floating:1
windowrulev2 = center, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = nofocus, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = noborder, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = center, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = stayfocused, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = noborder, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = nofocus, class:^(jetbrains-.*)$,title:^(win.*)$,floating:1
windowrulev2 = noinitialfocus, class:^(jetbrains-.*)$,title:^(win.*)$
# ##################
# ### AUTO FLOAT ###
# ##################
@ -58,10 +42,16 @@ windowrulev2 = float, class:^(com.github.wwmm.easyeffects)
windowrulev2 = float, class:^(opensnitch_ui)$
windowrulev2 = float, class:^(Brave-browser)$,title:^(_crx_.+)$
## Float hyprland-share-picker & some extra actions
windowrulev2 = float, class:^(hyprland-share-picker)$
windowrulev2 = center, class:^(hyprland-share-picker)$
windowrulev2 = animation slide, class:^(hyprland-share-picker)$
## Float firefox windows (like bookmark menus, or some extension windows)
windowrulev2 = float, class:^(firefox)$,title:^(Revert Bookmarks)$
windowrulev2 = float, class:^(firefox)$,title:^(Library)$
windowrulev2 = float, class:^(firefox)$,title:^(Extension: \(uBlock Origin\))
windowrulev2 = float, class:^(firefox)$,title:^(Extension: \(Bitwarden Password Manager\) - Bitwarden — Mozilla Firefox)$
windowrulev2 = float, class:^(firefox)$,title:^(Firefox — Sharing Indicator)$
windowrulev2 = float, class:^(firefox)$,title:^(Opening .+)$
windowrulev2 = float, class:^(firefox)$,title:^$
@ -73,6 +63,11 @@ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Move files)$
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Search Files)$
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Copy Files)$
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Confirm to replace files)$
windowrulev2 = float, class:^(pcmanfm-qt|)$,title:^(Choose an Application)$
## Float some qimgv windows
windowrulev2 = float, class:^(qimgv)$,title:^(Add shortcut)$
windowrulev2 = float, class:^(qimgv)$,title:^(Preferences — qimgv)$
## Float some windows from other apps
windowrulev2 = float, class:^(Spotify)$,title:^(Ozone X11)$
@ -88,5 +83,27 @@ windowrulev2 = float, class:^(notification)$
windowrulev2 = float, class:^(error)$
windowrulev2 = float, class:^(splash)$
windowrulev2 = float, class:^(confirmreset)$
windowrulev2 = float, class:^(floating)$
## Float all windows that don't have a title nor a class
windowrulev2 = float, class:^$,title:^$
# #############
# ### FIXES ###
# #############
# jetbrains
windowrulev2 = center, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = nofocus, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = noborder, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = center, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = stayfocused, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = noborder, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = nofocus, class:^(jetbrains-.*)$,title:^(win.*)$,floating:1
windowrulev2 = noinitialfocus, class:^(jetbrains-.*)$,title:^(win.*)$
# Don't add borders to grim selections when taking screenshots
layerrule = noanim, ^(selection)$
# vi: ft=hyprlang

View file

@ -9,11 +9,11 @@ general {
}
background {
path = ~/Pictures/Wallpapers/Categories/Extra/origami.png
path = ~/Media/Pictures/Wallpapers/Categories/Extra/origami.png
blur_passes = 3
blur_size = 6
contrast = 0.7
brightness = 0.7
#contrast = 0.7
#brightness = 0.7
noise = 0.01
contrast = 0.9
brightness = 0.6
@ -53,7 +53,7 @@ label {
font_size = 35
font_family = Noto Sans
position = 0, 0
position = 0, 30
halign = center
valign = center
}
@ -65,7 +65,7 @@ label {
font_size = 20
font_family = Noto Sans
position = 0, -50
position = 0, -20
halign = center
valign = center
}
@ -102,7 +102,7 @@ label {
valign = center
}
# Failed attempts count
# Fail reason
label {
text = <i>$FAIL</i>
color = rgba(255, 34, 34, 1.0) # red
@ -123,7 +123,7 @@ label {
text = Session Locked
color = rgba(255, 255, 255, 1.0)
font_size = 40
font_family = GohuFont uni11 Nerd Font
font_family = Monaspace Krypton
shadow_passes = 1
shadow_size = 5

View file

@ -0,0 +1,5 @@
$bg = $HOME/Media/Pictures/Wallpapers/active
preload=$bg
wallpaper=,$bg # same wallpaper on all monitors
ipc=off

View file

@ -1,29 +1,88 @@
# Fonts
font_family JetBrains Mono
# Fonts & Text style
font_family Monaspace Krypton
bold_font auto
italic_font auto
bold_italic_font auto
font_size 11
disable_ligatures never
#font_size 13
disable_ligatures always
# Colors / Style
# Dark Theme
foreground #d8dee9
background #191919
cursor #D0D0D0
# Light Theme (for screenshots in papers)
#foreground = "#191919";
#background = "#FFFFFF";
# URLs
url_color #0087bd
url_style curly
background_opacity 0.85
# Cursor
cursor #D0D0D0
cursor_shape underline
cursor_blink_interval 0.5
cursor_stop_blinking_after 15.0
# Background
background_opacity 0.9
dynamic_background_opacity yes
background_blur 2
# Misc
scrollback_lines 10000
# Window size
remember_window_size no
initial_window_width 640
initial_window_height 400
# Bell
## flash the screen for this duration when bell occurs
visual_bell_duration 0.0
## disable audio bells
enable_audio_bell no
# Misc
## don't check for updates, we have a package manager...
update_check_interval 0
## don't ask for confirmation if window gets closed
confirm_os_window_close 0
## Capture up to 10k lines for scrolling
scrollback_lines 10000
## chars considered part of word when double clicking
select_by_word_characters :@-./_~?&=%+#
# Keybindings
map ctrl+alt+c copy_to_clipboard
map ctrl+alt+v paste_from_clipboard
map ctrl+c copy_or_interrupt
map ctrl+shift+, move_tab_backward
map ctrl+shift+. move_tab_forward
map ctrl+shift+0 tenth_window
map ctrl+shift+1 first_window
map ctrl+shift+2 second_window
map ctrl+shift+3 third_window
map ctrl+shift+4 fourth_window
map ctrl+shift+5 fifth_window
map ctrl+shift+6 sixth_window
map ctrl+shift+7 seventh_window
map ctrl+shift+8 eighth_window
map ctrl+shift+9 ninth_window
map ctrl+shift+[ previous_window
map ctrl+shift+] next_window
map ctrl+shift+` move_window_to_top
map ctrl+shift+alt+t set_tab_title
map ctrl+shift+b move_window_backward
map ctrl+shift+backspace restore_font_size
map ctrl+shift+down decrease_font_size
map ctrl+shift+enter new_window
map ctrl+shift+f move_window_forward
map ctrl+shift+l next_layout
map ctrl+shift+left previous_tab
map ctrl+shift+n new_os_window
map ctrl+shift+q close_tab
map ctrl+shift+right next_tab
map ctrl+shift+t new_tab
map ctrl+shift+up increase_font_size
map ctrl+shift+v paste_from_clipboard
map ctrl+shift+w close_window
# vi: ft=conf

View file

@ -1,20 +1,185 @@
[Default Applications]
inode/directory=pcmanfm-qt.desktop
image/jpeg=org.nomacs.ImageLounge.desktop
image/png=org.nomacs.ImageLounge.desktop
image/gif=org.nomacs.ImageLounge.desktop
application/pdf=firefox.desktop
# Browser
text/html=firefox.desktop
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop
x-scheme-handler/about=firefox.desktop
x-scheme-handler-unknown=firefox.desktop
application/json=nvim.desktop
application/x-extension-htm=firefox.desktop
application/x-extension-html=firefox.desktop
application/x-extension-shtml=firefox.desktop
application/x-extension-xhtml=firefox.desktop
application/x-extension-xht=firefox.desktop
application/xhtml+xml=firefox.desktop
application/xhtml_xml=firefox.desktop
# Image viewer
# (wildcard associations don't work everywhere)
# or org.nomacs.ImageLounge.desktop?
image/*=qimgv.desktop
image/bmp=qimgv.desktop
image/gif=qimgv.desktop
image/jpeg=qimgv.desktop
image/jpg=qimgv.desktop
image/png=qimgv.desktop
image/webp=qimgv.desktop
image/tiff=qimgv.desktop
image/x-bmp=qimgv.desktop
image/x-pcx=qimgv.desktop
image/x-tga=qimgv.desktop
image/x-portable-pixmap=qimgv.desktop
image/x-portable-bitmap=qimgv.desktop
image/x-portable-greymap=qimgv.desktop
image/x-targa=qimgv.desktop
image/svg+xml=qimgv.desktop
image/svg_xml=qimgv.desktop
# Media player
# Media Player (video + audio)
# (wildcard associations don't work everywhere)
video/*=mpv.desktop
video/mpeg=mpv.desktop
video/x-mpeg2=mpv.desktop
video/x-mpeg3=mpv.desktop
video/mp4v-es=mpv.desktop
video/x-m4v=mpv.desktop
video/mp4=mpv.desktop
video/divx=mpv.desktop
video/vnd.divx=mpv.desktop
video/msvideo=mpv.desktop
video/x-msvideo=mpv.desktop
video/ogg=mpv.desktop
video/quicktime=mpv.desktop
video/vnd.rn-realvideo=mpv.desktop
video/x-avi=mpv.desktop
video/avi=mpv.desktop
video/x-flic=mpv.desktop
video/fli=mpv.desktop
video/x-flc=mpv.desktop
video/flv=mpv.desktop
video/x-flv=mpv.desktop
video/x-theora=mpv.desktop
video/x-theora+ogg=mpv.desktop
video/x-matroska=mpv.desktop
video/mkv=mpv.desktop
video/webm=mpv.desktop
video/x-ogm=mpv.desktop
video/x-ogm+ogg=mpv.desktop
video/dv=mpv.desktop
video/mp2t=mpv.desktop
video/vnd.mpegurl=mpv.desktop
video/3gp=mpv.desktop
video/3gpp=mpv.desktop
video/3gpp2=mpv.desktop
audio/*=mpv.desktop
audio/x-matroska=mpv.desktop
audio/webm=mpv.desktop
audio/vorbis=mpv.desktop
audio/x-vorbis=mpv.desktop
audio/x-vorbis+ogg=mpv.desktop
audio/x-shorten=mpv.desktop
audio/x-ape=mpv.desktop
audio/x-wavpack=mpv.desktop
audio/x-tta=mpv.desktop
audio/AMR=mpv.desktop
audio/ac3=mpv.desktop
audio/eac3=mpv.desktop
audio/amr-wb=mpv.desktop
audio/flac=mpv.desktop
audio/mp4=mpv.desktop
audio/x-pn-au=mpv.desktop
audio/3gpp=mpv.desktop
audio/3gpp2=mpv.desktop
audio/dv=mpv.desktop
audio/opus=mpv.desktop
audio/x-ms-asf=mpv.desktop
audio/vnd.dts=mpv.desktop
audio/vnd.dts.hd=mpv.desktop
audio/x-adpcm=mpv.desktop
audio/m3u=mpv.desktop
audio/aac=mpv.desktop
audio/x-aac=mpv.desktop
audio/vnd.dolby.heaac.1=mpv.desktop
audio/vnd.dolby.heaac.2=mpv.desktop
audio/aiff=mpv.desktop
audio/x-aiff=mpv.desktop
audio/m4a=mpv.desktop
audio/x-m4a=mpv.desktop
audio/mp1=mpv.desktop
audio/x-mp1=mpv.desktop
audio/mp2=mpv.desktop
audio/x-mp2=mpv.desktop
audio/mp3=mpv.desktop
audio/x-mp3=mpv.desktop
audio/mpeg=mpv.desktop
audio/mpeg2=mpv.desktop
audio/mpeg3=mpv.desktop
audio/mpegurl=mpv.desktop
audio/x-mpegurl=mpv.desktop
audio/mpg=mpv.desktop
audio/x-mpg=mpv.desktop
audio/rn-mpeg=mpv.desktop
audio/musepack=mpv.desktop
audio/x-musepack=mpv.desktop
audio/ogg=mpv.desktop
audio/scpls=mpv.desktop
audio/x-scpls=mpv.desktop
audio/vnd.rn-realaudio=mpv.desktop
audio/wav=mpv.desktop
audio/x-pn-wav=mpv.desktop
audio/x-pn-windows-pcm=mpv.desktop
audio/x-realaudio=mpv.desktop
audio/x-pn-realaudio=mpv.desktop
audio/x-ms-wma=mpv.desktop
audio/x-pls=mpv.desktop
audio/x-wav=mpv.desktop
application/x-cue=mpv.desktop
application/vnd.ms-asf=mpv.desktop
application/x-matroska=mpv.desktop
application/x-ogm=mpv.desktop
application/x-ogm-audio=mpv.desktop
application/x-ogm-video=mpv.desktop
application/x-shorten=mpv.desktop
application/x-mpegurl=mpv.desktop
application/vnd.apple.mpegurl=mpv.desktop
application/ogg=mpv.desktop
application/x-ogg=mpv.desktop
application/mxf=mpv.desktop
application/sdp=mpv.desktop
application/smil=mpv.desktop
application/x-smil=mpv.desktop
application/streamingmedia=mpv.desktop
application/x-streamingmedia=mpv.desktop
application/vnd.rn-realmedia=mpv.desktop
application/vnd.rn-realmedia-vbr=mpv.desktop
application/x-extension-m4a=mpv.desktop
# Document Viewer
application/pdf=firefox.desktop
application/epub=firefox.desktop
application/djvu=firefox.desktop
application/mobi=firefox.desktop
# File & archive manager(s)
inode/directory=pcmanfm-qt.desktop
application/zip=org.gnome.FileRoller.desktop
application/x-xz-compressed-tar=org.gnome.FileRoller.desktop
# Plain-text
text/plain=nvim.desktop
application/json=nvim.desktop
application/x-desktop=nvim.desktop;
# Application specific schemes
x-scheme-handler/spotify=spotify.desktop
x-scheme-handler/tg=telegramdesktop.desktop
x-scheme-handler/discord=vesktop.desktop
x-scheme-handler/msteams=teams.desktop
# Misc
x-scheme-handler/mailto=firefox.desktop
[Added Associations]
application/x-desktop=nvim.desktop;
image/png=org.nomacs.ImageLounge.desktop;
text/plain=nvim.desktop;
image/svg+xml=org.nomacs.ImageLounge.desktop;

View file

@ -1,10 +1,8 @@
[General]
DkEditDock=2
DkExplorer=1
DkMetaDataDock=2
firstTime=false
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x3\xc7\0\0\x2\x38\0\0\au\0\0\x4\x32\0\0\x3\xc7\0\0\x2\x38\0\0\au\0\0\x4-\0\0\0\0\x2\0\0\0\a\x80\0\0\x3\xc7\0\0\x2\x38\0\0\au\0\0\x4\x32)
geometryNomacs=@Rect(967 568 943 507)
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x3\0\0\0\0\0\0\x1\0\0\0\x4\x4\xfc\x2\0\0\0\x1\xfb\0\0\0\x14\0\x44\0k\0\x45\0x\0p\0l\0o\0r\0\x65\0r\0\0\0\0\x34\0\0\x4\x4\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\xdd\0\0\x3\xc4\xfc\x2\0\0\0\x1\xfb\0\0\0\x14\0\x44\0k\0\x45\0\x64\0i\0t\0\x44\0o\0\x63\0k\0\0\0\0\x1e\0\0\x3\xc4\0\0\0\0\0\0\0\0\0\0\0\x3\0\0\a\x80\0\0\0>\xfc\x1\0\0\0\x1\xfb\0\0\0\x10\0\x63\0r\0o\0p\0\x44\0o\0\x63\0k\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x3\xaf\0\0\x1\xe4\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0\x45\0\x64\0i\0t\0T\0o\0o\0l\0\x42\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
[AppSettings]
appMode=0
@ -12,29 +10,27 @@ currentAppMode=0
defaultJpgQuality=97
firstTime.nomacs.3=false
hideAllPanels=true
showPlayer=@Variant(\0\0\0\r\0\0\0\x6\0)
showMenuBar=false
showRecentFiles=false
useLogFile=true
[CustomPluginShortcuts]
Composite%20Image=Composite Image
Crop%20to%20Metadata=Crop to Metadata
Crop%20to%20Page=Crop to Page
Draw%20to%20Page=Draw to Page
Fake%20Miniatures=Fake Miniatures
Image%20Transform=Image Transform
Paint%20on%20Image=Paint on Image
[Crop]
AspectRatioHorizontal=0
AspectRatioVertical=0
cropToMetadata=false
guides=1
info=true
inverted=false
[DisplaySettings]
bgColorNoMacsRGBA=4281545523
bgColorWidgetRGBA=2852126720
fadeSec=@Variant(\0\0\0\x87\0\0\0\0)
fadeSec=0
fontColorRGBA=4292730333
highlightColorRGBA=4278233855
iconColorRGBA=4292730333
iconSize=18
showCrop=true
themeName312=Dark-Theme.css
transition=0
zoomToFit=true
[DkAppManager]
Apps\size=0
@ -51,14 +47,14 @@ overwriteDialog-answer=16384
saveEditDialog=false
saveEditDialog-answer=16384
saveTabsDialog=false
saveTabsDialog-answer=65536
saveTabsDialog-answer=16384
[DkExplorer]
Date%20ModifiedHidden=true
Date%20ModifiedSize=0
LoadSelected=false
NameHidden=false
NameSize=254
NameSize=243
ReadOnly=true
RootPath=/home/itsdrike
SizeHidden=true
@ -69,20 +65,23 @@ TypeSize=0
[DkFilePreview]
windowPosition=1
[DkMetaDataDock]
KeySize=100
ValueSize=113
expandedNames=@Invalid()
[DkMetaDataHUD]
keyValues=File.Filename, File.Path, File.Size, Exif.Image.Make, Exif.Image.Model, Exif.Image.DateTime, Exif.Image.ImageDescription, Exif.Photo.ISO, Exif.Photo.FocalLength, Exif.Photo.ExposureTime, Exif.Photo.Flash, Exif.Photo.FNumber
numColumns=-1
windowPosition=3
[GlobalSettings]
logRecentFiles=false
[MetaDataSettings]
ignoreExifOrientation=false
saveExifOrientation=false
[Page%20Extraction%20Plugin]
Method=0
[SlideShowSettings]
time=@Variant(\0\0\0\x87@\xa0\0\0)
[SynchronizeSettings]
checkForUpdates=true
disableUpdateInteraction=false

View file

@ -1,3 +1,4 @@
prefix=${XDG_DATA_HOME}/npm
cache=${XDG_CACHE_HOME}/npm
tmp=${XDG_RUNTIME_DIR}/npm
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js

View file

@ -1,25 +1,30 @@
import atexit
import os
import readline
from functools import partial
from pathlib import Path
from types import ModuleType
def is_vanilla() -> bool:
import sys
cache_xdg_dir = Path(os.environ.get("XDG_CACHE_HOME", str(Path("~/.cache"))))
cache_xdg_dir.mkdir(exist_ok=True, parents=True)
history_file = cache_xdg_dir.joinpath("python_history")
readline.read_history_file(history_file)
return not hasattr(__builtins__, "__IPYTHON__") and "bpython" not in sys.argv[0]
def write_history(readline: ModuleType, history_file: Path) -> None:
"""
We need to get ``readline`` and ``history_file`` as arguments, as it
seems they get garbage collected when the function is registered and
the program ends, even though we refer to them here.
"""
readline.write_history_file(history_file)
def setup_history():
import os
import atexit
import readline
from pathlib import Path
if state_home := os.environ.get("XDG_STATE_HOME"):
state_home = Path(state_home)
else:
state_home = Path.home() / ".local" / "state"
history: Path = state_home / "python_history"
# https://github.com/python/cpython/issues/105694
if not history.is_file():
# breaks on macos + python3 without this.
readline.write_history_file(str(history))
readline.read_history_file(str(history))
atexit.register(readline.write_history_file, str(history))
atexit.register(partial(write_history, readline, history_file))
if is_vanilla():
setup_history()

View file

@ -1,28 +0,0 @@
import atexit
import os
import readline
from functools import partial
from pathlib import Path
from types import ModuleType
cache_xdg_dir = Path(
os.environ.get("XDG_CACHE_HOME", str(Path("~/.cache").expanduser()))
)
cache_xdg_dir.mkdir(exist_ok=True, parents=True)
history_file = cache_xdg_dir.joinpath("python_history")
history_file.touch()
readline.read_history_file(history_file)
def write_history(readline: ModuleType, history_file: Path) -> None:
"""
We need to get ``readline`` and ``history_file`` as arguments, as it
seems they get garbage collected when the function is registered and
the program ends, even though we refer to them here.
"""
readline.write_history_file(history_file)
atexit.register(partial(write_history, readline, history_file))

View file

@ -0,0 +1,844 @@
[General]
version=5.0.1
allow_multiple_instances=-1
width=800
always_on_top=0
enable_tooltips=1
keep_function_dialog_open=0
error_info_shown=1
save_mode_on_exit=1
save_definitions_on_exit=1
clear_history_on_exit=0
save_history_separately=0
history_expression_type=2
ignore_locale=0
load_global_definitions=1
auto_update_exchange_rates=-1
local_currency_conversion=1
use_binary_prefixes=0
check_version=0
show_keypad=1
show_history=0
history_height=318
minimal_width=500
show_stack=1
show_convert=0
persistent_keypad=0
minimal_mode=0
show_bases_keypad=1
continuous_conversion=1
set_missing_prefixes=0
rpn_keys=1
display_expression_status=1
parsed_expression_in_resultview=0
enable_completion=1
enable_completion2=1
completion_min=1
completion_min2=1
completion_delay=0
calculate_as_you_type_history_delay=2000
use_unicode_signs=1
lower_case_numbers=0
duodecimal_symbols=0
exp_display=3
imaginary_j=0
base_display=1
twos_complement=1
hexadecimal_twos_complement=0
twos_complement_input=0
hexadecimal_twos_complement_input=0
programming_outbase=10
programming_inbase=10
spell_out_logical_operators=1
caret_as_xor=0
close_with_esc=-1
digit_grouping=1
copy_ascii=0
copy_ascii_without_units=0
decimal_comma=-1
dot_as_separator=-1
comma_as_separator=0
gtk_theme=1
vertical_button_padding=-1
horizontal_button_padding=-1
use_custom_result_font=0
use_custom_expression_font=0
use_custom_status_font=0
use_custom_keypad_font=0
use_custom_history_font=0
use_custom_application_font=0
multiplication_sign=2
division_sign=1
automatic_number_fraction_format=1
expression_history=95czk
expression_history=135czk
expression_history=127czk
expression_history=127
expression_history=comb(30,2)×comb(25,2)×comb(20,1)
expression_history=8!/(5!×3!)×8
expression_history=comb(8, 3)×8
expression_history=comb(8, 3)
expression_history=4!×2
expression_history=9×9×8×7×6×5
expression_history=6!
expression_history=2520/7!
expression_history=7!
expression_history=comb(45, 2)
expression_history=(comb(64, 3))comb(8,3)×8
expression_history=(comb(64, 3))comb(8,3)
expression_history=(comb(64, 3))
expression_history=(comb(56, 2)×comb(8, 1))×(comb(56, 1)×comb(8, 2))
expression_history=(comb(56, 2)×comb(8, 1))+(comb(56, 1)×comb(8, 2))
expression_history=comb(32, 2)×comb(32, 1)×2
expression_history=4!×3!×2!×3!
expression_history=8!
expression_history=5×4
expression_history=5×4×3
expression_history=3!×3×2×2
expression_history=5!×2
expression_history=4!
expression_history=4!×2×2
expression_history=(5!)×2
expression_history=5!
expression_history=6×5×4×3×2×1
expression_history=6×5×4×6×2×1
expression_history=10!/(8!)
expression_history=comb(8, 2)×comb(10, 4)+comb(8, 1)×comb(10, 5)+comb(10, 6)
expression_history=comb(10,2)×comb(8,4)
expression_history=comb(10,2)+comb(8,4)
expression_history=comb(10,2)+comb(16,4)
expression_history=10×9×16×15×14×13
expression_history=4×4×3×2
expression_history=3×4×3×2
expression_history=3×4×3
expression_history=2×4×3×2
expression_history=2×4×3×2×1
expression_history=comb(8, 2)
expression_history=8C2
expression_history=8×7
expression_history=10!/(5!×5!)
expression_history=10!/5!
expression_history=7!/((75)!×5!)
expression_history=8!/((85)!×5!)
expression_history=8!/((85)!)
expression_history=8!/(85)!
expression_history=8×7×6
expression_history=4!×3!
expression_history=172669722332860×15×1000
expression_history=172669722344860×2
expression_history=500/280
expression_history=498/280
expression_history=480×2
expression_history=1280480
expression_history=((86400000/1000)/60)/60
expression_history=(86400000/1000)/60
expression_history=86400000/1000
expression_history=34.8usd
expression_history=5015
expression_history=22usd
expression_history=180/20
expression_history=log2(652618)
expression_history=652618
expression_history=bin(652618)
expression_history=14500/4
expression_history=80/8
expression_history=324×25
expression_history=300×25
expression_history=638/7
expression_history=2××7
expression_history=(15000×300)/3.6
expression_history=15000×300
expression_history=250czk
expression_history=5000czk
expression_history=5czk
expression_history=5k
expression_history=1504.32/60
expression_history=1504.32czk/60eur
expression_history=30eur/1504.32czk
expression_history=183.75czk
expression_history=735/4
expression_history=(3688czk)3625czk
expression_history=(3688czk)3625
expression_history=3688czk
expression_history=14500czk/4
expression_history=14500czk
expression_history=184czk
expression_history=735czk/4
expression_history=735czk
expression_history=35000czk
expression_history=20000czk
expression_history=29×3
expression_history=(60×20)/60
expression_history=60×20
history_time=1727342283
history_expression=95czk
history_parse=95CZK to EUR
history_result_approximate=€3.781395534
history_time=1727342267
history_expression=135czk
history_parse=135CZK to EUR
history_result_approximate=€5.373562075
history_time=1727342265
history_expression=127czk
history_parse=127CZK to EUR
history_result_approximate=€5.055128766
history_time=1727342263
history_expression=127
history_parse=127
history_result=127
history_time=1727342256
history_expression=135czk
history_parse=135CZK
history_result_approximate=$6.015165386
history_time=1727342258
history_result_approximate=CVE 592.5426900
history_result_approximate=537.3562075eurocents
history_time=1727342259
history_result_approximate=€5.373562075
history_time=1727292570
history_expression=comb(30,2)×comb(25,2)×comb(20,1)
history_parse=comb(30, 2) × comb(25, 2) × comb(20, 1)
history_result=2610000
history_time=1727292525
history_expression=8!/(5!×3!)×8
history_parse=(factorial(8) (factorial(5) × factorial(3))) × 8
history_result=448
history_time=1727292493
history_expression=comb(8, 3)×8
history_parse=comb(8, 3) × 8
history_result=448
history_time=1727292489
history_expression=comb(8, 3)
history_parse=comb(8, 3)
history_result=56
history_time=1727292470
history_expression=4!×2
history_parse=factorial(4) × 2
history_result=48
history_time=1727292259
history_expression=9×9×8×7×6×5
history_parse=9 × 9 × 8 × 7 × 6 × 5
history_result=136080
history_time=1727292219
history_expression=6!
history_parse=factorial(6)
history_result=720
history_time=1727281361
history_expression=2520/7!
history_parse=2520 factorial(7)
history_result=0.5
history_time=1727281337
history_expression=7!
history_parse=factorial(7)
history_result=5040
history_time=1727280771
history_expression=comb(45, 2)
history_parse=comb(45, 2)
history_result=990
history_time=1727280717
history_expression=(comb(64, 3))comb(8,3)×8
history_parse=comb(64, 3) (comb(8, 3) × 8)
history_result=41216
history_time=1727280688
history_expression=(comb(64, 3))comb(8,3)
history_parse=comb(64, 3) comb(8, 3)
history_result=41608
history_time=1727280639
history_expression=(comb(64, 3))
history_parse=comb(64, 3)
history_result=41664
history_time=1727280572
history_expression=(comb(56, 2)×comb(8, 1))×(comb(56, 1)×comb(8, 2))
history_parse=(comb(56, 2) × comb(8, 1)) × (comb(56, 1) × comb(8, 2))
history_result=19317760
history_time=1727280500
history_expression=(comb(56, 2)×comb(8, 1))+(comb(56, 1)×comb(8, 2))
history_parse=(comb(56, 2) × comb(8, 1)) + (comb(56, 1) × comb(8, 2))
history_result=13888
history_time=1727280492
history_expression=(comb(56, 2)×comb(8, 1))×(comb(56, 1)×comb(8, 2))
history_parse=(comb(56, 2) × comb(8, 1)) × (comb(56, 1) × comb(8, 2))
history_result=19317760
history_time=1727280408
history_expression=comb(32, 2)×comb(32, 1)×2
history_parse=comb(32, 2) × comb(32, 1) × 2
history_result=31744
history_time=1727280364
history_expression=4!×3!×2!×3!
history_parse=factorial(4) × factorial(3) × factorial(2) × factorial(3)
history_result=1728
history_time=1727280317
history_expression=8!
history_parse=factorial(8)
history_result=40320
history_time=1727280292
history_expression=5×4
history_parse=5 × 4
history_result=20
history_time=1727280285
history_expression=5×4×3
history_parse=5 × 4 × 3
history_result=60
history_time=1727280190
history_expression=3!×3×2×2
history_parse=factorial(3) × 3 × 2 × 2
history_result=72
history_time=1727279907
history_expression=5!×2
history_parse=factorial(5) × 2
history_result=240
history_time=1727279831
history_expression=4!
history_parse=factorial(4)
history_result=24
history_time=1727279830
history_expression=4!×2
history_parse=factorial(4) × 2
history_result=48
history_time=1727279778
history_expression=4!×2×2
history_parse=factorial(4) × 2 × 2
history_result=96
history_time=1727279719
history_expression=(5!)×2
history_parse=factorial(5) × 2
history_result=240
history_time=1727279715
history_expression=5!
history_parse=factorial(5)
history_result=120
history_time=1727279713
history_expression=6!
history_parse=factorial(6)
history_result=720
history_time=1727279701
history_expression=5!
history_parse=factorial(5)
history_result=120
history_time=1727279632
history_expression=6×5×4×3×2×1
history_parse=6 × 5 × 4 × 3 × 2 × 1
history_result=720
history_time=1727279622
history_expression=6×5×4×6×2×1
history_parse=6 × 5 × 4 × 6 × 2 × 1
history_result=1440
history_time=1727279485
history_expression=6×5×4×6×2×1
history_parse=6 × 5 × 4 × 6 × 2 × 1
history_result=1440
history_time=1727279609
history_result=(8 × 10<sup>29</sup> 89009813) × √(α) × q<sub>P</sub>
history_time=1727279432
history_expression=10!/(8!)
history_parse=factorial(10) factorial(8)
history_result=90
history_time=1727279388
history_expression=comb(8, 2)×comb(10, 4)+comb(8, 1)×comb(10, 5)+comb(10, 6)
history_parse=(comb(8, 2) × comb(10, 4)) + (comb(8, 1) × comb(10, 5)) + comb(10, 6)
history_result=8106
history_time=1727279314
history_expression=comb(10,2)×comb(8,4)
history_parse=comb(10, 2) × comb(8, 4)
history_result=3150
history_time=1727279296
history_expression=comb(10,2)+comb(8,4)
history_parse=comb(10, 2) + comb(8, 4)
history_result=115
history_time=1727279276
history_expression=comb(10,2)+comb(16,4)
history_parse=comb(10, 2) + comb(16, 4)
history_result=1865
history_time=1727279232
history_expression=10×9×16×15×14×13
history_parse=10 × 9 × 16 × 15 × 14 × 13
history_result=3931200
history_time=1727279148
history_expression=4×4×3×2
history_parse=4 × 4 × 3 × 2
history_result=96
history_time=1727279136
history_expression=3×4×3×2
history_parse=3 × 4 × 3 × 2
history_result=72
history_time=1727279114
history_expression=3×4×3
history_parse=3 × 4 × 3
history_result=36
history_time=1727278893
history_expression=2×4×3×2
history_parse=2 × 4 × 3 × 2
history_result=48
history_time=1727278843
history_expression=2×4×3×2×1
history_parse=2 × 4 × 3 × 2 × 1
history_result=48
history_time=1727278684
history_expression=comb(8, 2)
history_parse=comb(8, 2)
history_result=28
history_time=1727278667
history_expression=8C2
history_parse=8coulomb<sup>2</sup>
history_result=8C<sup>2</sup>
history_time=1727278616
history_expression=8×7
history_parse=8 × 7
history_result=56
history_time=1727278554
history_expression=10!/(5!×5!)
history_parse=factorial(10) (factorial(5) × factorial(5))
history_result=252
history_time=1727278540
history_expression=10!/5!
history_parse=factorial(10) factorial(5)
history_result=30240
history_time=1727278512
history_expression=7!/((75)!×5!)
history_parse=factorial(7) (factorial(7 5) × factorial(5))
history_result=21
history_time=1727278486
history_expression=8!/((85)!×5!)
history_parse=factorial(8) (factorial(8 5) × factorial(5))
history_result=56
history_time=1727278425
history_expression=8!/(85)!
history_parse=factorial(8) factorial(8 5)
history_result=6720
history_time=1727278231
history_expression=8×7×6
history_parse=8 × 7 × 6
history_result=336
history_time=1727276103
history_expression=4!×3!
history_parse=factorial(4) × factorial(3)
history_result=144
history_time=1726696097
history_expression=172669722332860×15×1000
history_parse=1726697223328 (60 × 15 × 1000)
history_result=1726696323328
history_time=1726696068
history_expression=172669722344860×2
history_parse=1726697223448 (60 × 2)
history_result=1726697223328
history_time=1726619113
history_expression=500/280
history_parse=500 280
history_result=25 14
history_time=1726619106
history_expression=498/280
history_parse=498 280
history_result=249 140
history_time=1726593466
history_expression=480×2
history_parse=480 × 2
history_result=960
history_time=1726592811
history_expression=1280480
history_parse=1280 480
history_result=800
history_time=1726523587
history_expression=((86400000/1000)/60)/60
history_parse=((86400000 1000) 60) 60
history_result=24
history_time=1726523579
history_expression=(86400000/1000)/60
history_parse=(86400000 1000) 60
history_result=1440
history_time=1726523576
history_expression=86400000/1000
history_parse=86400000 1000
history_result=86400
history_time=1726496554
history_expression=34.8usd
history_parse=34.8USD
history_result=$34.8
history_time=1726496555
history_result_approximate=CVE 3449.034694
history_result_approximate=3127.808736eurocents
history_time=1726496556
history_result_approximate=€31.27808736
history_time=1726234180
history_expression=5015
history_parse=50 15
history_result=35
history_time=1726162266
history_expression=22usd
history_parse=22USD
history_result=$22
history_time=1726162273
history_result_approximate=CVE 2202.196805
history_result_approximate=1997.095134eurocents
history_time=1726162274
history_result_approximate=€19.97095134
history_time=1726060907
history_expression=180/20
history_parse=180 20
history_result=9
history_time=1726046557
history_expression=log2(652618)
history_parse=log<sub>2</sub>(652618)
history_result_approximate=19.31587925
history_time=1726046521
history_expression=652618
history_parse=652618
history_result=652618
history_time=1726046530
history_result=0000 0000 0000 1001 1111 0101 0100 1010<sub><small>2</small></sub>
history_time=1726046551
history_result=652618
history_time=1726046517
history_expression=bin(652618)
history_parse=bin(<i>"652618"</i>)
history_error=Character '6' was ignored in the number "652618" with base 2.
history_error=Character '5' was ignored in the number "652618" with base 2.
history_error=Character '2' was ignored in the number "652618" with base 2.
history_error=Character '8' was ignored in the number "652618" with base 2.
history_result=1
history_time=1726046512
history_expression=652618
history_parse=652618
history_result=652618
history_time=1725978858
history_expression=14500/4
history_parse=14500 4
history_result=3625
history_time=1725574098
history_expression=80/8
history_parse=80 8
history_result=10
history_time=1725463240
history_expression=324×25
history_parse=324 × 25
history_result=8100
history_time=1725463233
history_expression=300×25
history_parse=300 × 25
history_result=7500
history_time=1725105187
history_expression=638/7
history_parse=638 7
history_result_approximate=91.14285714
history_time=1725104792
history_expression=2××7
history_parse=2<sup>7</sup>
history_result=128
history_time=1724192718
history_expression=(15000×300)/3.6
history_parse=(15000 × 300) 3.6
history_result=1250000
history_time=1724192715
history_expression=15000×300
history_parse=15000 × 300
history_result=4500000
history_time=1724173179
history_expression=250czk
history_parse=250CZK
history_result_approximate=$11.01438906
history_time=1724173180
history_result_approximate=CVE 1095.774704
history_result_approximate=993.7196915eurocents
history_time=1724173181
history_result_approximate=€9.937196915
history_time=1724172274
history_expression=5000czk
history_parse=5000CZK
history_result_approximate=$220.2877812
history_time=1724172276
history_result_approximate=CDF 630288.4268
history_time=1724172277
history_result_approximate=CVE 21915.49408
history_result_approximate=19874.39383eurocents
history_time=1724172278
history_result_approximate=€198.7439383
history_time=1724172270
history_expression=5czk
history_parse=5CZK
history_result_approximate=$0.2202877812
history_time=1724172207
history_expression=5k
history_parse=5 × 1000
history_result=5000
history_time=1724171979
history_expression=1504.32/60
history_parse=1504.32 60
history_result=25.072
history_time=1724171974
history_expression=1504.32czk/60eur
history_parse=(1504.32CZK) (60EUR)
history_result_approximate=0.9965816043
history_time=1724171966
history_expression=30eur/1504.32czk
history_parse=(30EUR) (1504.32CZK)
history_result_approximate=0.5017150606
history_time=1724171791
history_expression=5000czk
history_parse=5000CZK
history_result_approximate=$220.2877812
history_time=1724167931
history_expression=183.75czk
history_parse=183.75CZK
history_result_approximate=$8.095575960
history_time=1724167933
history_result_approximate=CVE 805.3944073
history_result_approximate=730.3839733eurocents
history_time=1724167935
history_result_approximate=€7.303839733
history_time=1724167917
history_expression=735/4
history_parse=735 4
history_result=183.75
history_time=1724167611
history_expression=(3688czk)3625czk
history_parse=(3688CZK) (3625CZK) to EUR
history_result_approximate=€2.504173623
history_time=1724167609
history_expression=(3688czk)3625
history_parse=(3688CZK) 3625 to EUR
history_result_approximate=€146.5935289 3625.000000
history_time=1724167603
history_expression=3688czk
history_parse=3688CZK to EUR
history_result_approximate=€146.5935289
history_time=1724167540
history_expression=14500czk/4
history_parse=(14500CZK) 4 to EUR
history_result_approximate=€144.0893553
history_time=1724167532
history_expression=14500czk
history_parse=14500CZK
history_result_approximate=$638.8345655
history_time=1724167534
history_result_approximate=CVE 63554.93282
history_result_approximate=57635.74211eurocents
history_time=1724167535
history_result_approximate=€576.3574211
history_time=1724167230
history_expression=183.75czk
history_parse=183.75CZK
history_result_approximate=$8.095575960
history_time=1724167237
history_result_approximate=CVE 805.3944073
history_result_approximate=730.3839733eurocents
history_time=1724167238
history_result_approximate=€7.303839733
history_time=1724167225
history_expression=735/4
history_parse=735 4
history_result=183.75
history_time=1724167222
history_expression=184czk
history_parse=184CZK
history_result_approximate=$8.106590349
history_time=1724167207
history_expression=735/4
history_parse=735 4
history_result=183.75
history_time=1724167172
history_expression=735czk/4
history_parse=(735CZK) 4
history_result_approximate=$8.095575960
history_time=1724167168
history_expression=735czk
history_parse=735CZK
history_result_approximate=$32.38230384
history_time=1724166888
history_expression=14500/4
history_parse=14500 4
history_result=3625
history_time=1724080135
history_expression=35000czk
history_parse=35000CZK
history_result_approximate=$1534.629284
history_time=1724080106
history_expression=20000czk
history_parse=20000CZK
history_result_approximate=$876.9310194
history_time=1724013854
history_expression=29×3
history_parse=29 × 3
history_result=87
history_time=1724013476
history_expression=(60×20)/60
history_parse=(60 × 20) 60
history_result=20
history_time=1724013473
history_expression=60×20
history_parse=60 × 20
history_result=1200
history_time=1724013442
history_expression=24+24+12
history_parse=24 + 24 + 12
history_result=60
history_time=1723541887
history_expression=38+15
history_parse=38 + 15
history_result=53
history_time=1723541880
history_expression=(4333)+5
history_parse=(43 33) + 5
history_result=15
history_time=1723541879
history_expression=4333
history_parse=43 33
history_result=10
history_time=1723319641
history_expression=11mA×1kohm
history_parse=(11milliamperes) × (1kiloohm)
history_result=11V
history_time=1723319554
history_expression=220ohm×54mA
history_parse=(220ohms) × (54milliamperes)
history_result=11.88V
history_time=1723317250
history_expression=1.5k×7mA
history_parse=(1.5 × 1000) × (7milliamperes)
history_result=10.5A
history_time=1723317195
history_expression=12.5V/5mA
history_parse=(12.5volts) (5milliamperes)
history_result=2.5
history_time=1723317115
history_expression=11k×7×10^3
history_parse=(11 × 1000) × 7 × 10<sup>3</sup>
history_result=77
history_time=1723317084
history_expression=11k×7m
history_parse=(11 × 1000) × (7meters)
history_result=77km
history_time=1723317016
history_expression=12/(1×10^3)
history_parse=12 (1 × 10<sup>3</sup>)
history_result=12000
history_time=1723316369
history_expression=12V/200ohm
history_parse=(12volts) (200ohms)
history_result=60mA
history_time=1723316359
history_expression=12v/200ohm
history_parse=12 (200ohms)
history_error=Trailing characters "v" (not a valid variable/function/unit) in number "12v" were ignored.
history_result=60mS
history_time=1723232596
history_expression=190ml/8.3s
history_parse=(190milliliters) (8.3seconds)
history_result_approximate=22.89156627mL s
history_time=1723059809
history_expression=(10800/60)/60
history_parse=(10800 60) 60
history_result=3
history_time=1723059807
history_expression=10800/60
history_parse=10800 60
history_result=180
history_time=1722970501
history_expression=0.98××30
history_parse=0.98<sup>30</sup>
history_result_approximate=0.5454843194
history_time=1722855354
history_expression=10cad
history_parse=10CAD to EUR
history_result_approximate=€6.651147323
history_time=1722855343
history_expression=10×52
history_parse=10 × 52
history_result=520
history_time=1722855320
history_expression=43×52
history_parse=43 × 52
history_result=2236
history_time=1722855280
history_expression=65.7cad
history_parse=65.7CAD
history_result_approximate=$47.34682408
history_time=1722855292
history_result_approximate=CVE 4818.582640
history_time=1722855293
history_result_approximate=4369.803791eurocents
history_time=1722855294
history_result_approximate=€43.69803791
history_time=1722855269
history_expression=42.85+22.85
history_parse=42.85 + 22.85
history_result=65.7
recent_functions=
recent_variables=
recent_units=
latest_button_currency=USD
[Mode]
min_deci=0
use_min_deci=0
max_deci=2
use_max_deci=0
precision=10
interval_arithmetic=1
interval_display=0
min_exp=-1
negative_exponents=0
sort_minus_last=1
number_fraction_format=1
complex_number_form=0
use_prefixes=1
use_prefixes_for_all_units=0
use_prefixes_for_currencies=0
abbreviate_names=1
all_prefixes_enabled=0
denominator_prefix_enabled=1
place_units_separately=1
auto_post_conversion=3
mixed_units_conversion=3
number_base=10
number_base_expression=10
read_precision=0
assume_denominators_nonzero=1
warn_about_denominators_assumed_nonzero=1
structuring=1
angle_unit=1
functions_enabled=1
variables_enabled=1
calculate_functions=1
calculate_variables=1
variable_units_enabled=1
sync_units=1
unknownvariables_enabled=0
units_enabled=1
allow_complex=1
allow_infinite=1
indicate_infinite_series=0
show_ending_zeroes=1
rounding_mode=0
approximation=0
interval_calculation=1
concise_uncertainty_input=0
calculate_as_you_type=0
in_rpn_mode=0
chain_mode=0
limit_implicit_multiplication=0
parsing_mode=0
simplified_percentage=1
implicit_question_asked=1
spacious=1
excessive_parenthesis=0
visible_keypad=0
short_multiplication=1
default_assumption_type=4
default_assumption_sign=0
[Plotting]
plot_legend_placement=2
plot_style=0
plot_smoothing=0
plot_display_grid=1
plot_full_border=0
plot_min=0
plot_max=10
plot_step=1
plot_sampling_rate=1001
plot_use_sampling_rate=1
plot_variable=x
plot_rows=0
plot_type=0
plot_color=1
plot_linewidth=2

View file

@ -0,0 +1,62 @@
[General]
JPEGSaveQuality=95
absoluteZoomStep=false
autoResizeLimit=90
autoResizeWindow=false
backgroundOpacity=1
blurBackground=false
confirmDelete=true
confirmTrash=false
cursorAutohiding=true
defaultCropAction=0
defaultFitMode=0
defaultViewMode=0
drawTransparencyGrid=false
enableSmoothScroll=true
expandImage=false
expandLimit=2
firstRun=false
focusPointIn1to1Mode=1
folderEndAction=0
imageScrolling=1
infoBarFullscreen=true
infoBarWindowed=false
jxlAnimation=false
keepFitMode=false
lastVerMajor=1
lastVerMicro=2
lastVerMinor=0
loopSlideshow=false
mpvBinary=/nix/store/sz3h6s8p2r22v76m0yr6fn3m663sms7r-mpv-with-scripts-0.37.0/bin/mpv
openInFullscreen=false
panelEnabled=true
panelFullscreenOnly=true
panelPosition=top
panelPreviewsSize=140
playVideoSounds=false
scalingFilter=1
showSaveOverlay=true
slideshowInterval=3000
smoothAnimatedImages=true
smoothUpscaling=true
sortingMode=0
squareThumbnails=false
thumbPanelStyle=1
thumbnailCache=true
thumbnailerThreads=4
unloadThumbs=true
useOpenGL=false
usePreloader=true
useSystemColorScheme=false
videoPlayback=true
windowTitleExtendedInfo=true
zoomIndicatorMode=0
zoomStep=0.20000000298023224
[Controls]
shortcuts="zoomIn=+", "frameStepBack=,", "zoomOut=-", "frameStep=.", "fitWindow=1", "scrollDown=2", "fitNormal=3", "scrollLeft=4", "scrollRight=6", "scrollUp=8", "exit=Alt+X", "folderView=Backspace", "crop=C", "copyFileClipboard=Ctrl+C", "showInDirectory=Ctrl+D", "zoomOut=Ctrl+Down", "rotateLeft=Ctrl+L", "seekVideoBackward=Ctrl+Left", "open=Ctrl+O", "print=Ctrl+P", "exit=Ctrl+Q", "rotateRight=Ctrl+R", "seekVideoForward=Ctrl+Right", "save=Ctrl+S", "copyPathClipboard=Ctrl+Shift+C", "saveAs=Ctrl+Shift+S", "zoomIn=Ctrl+Up", "pasteFile=Ctrl+V", "zoomOutCursor=Ctrl+WheelDown", "zoomInCursor=Ctrl+WheelUp", "discardEdits=Ctrl+Z", "s:trash with trash-cli=Del", "scrollDown=Down", "jumpToLast=End", "folderView=Enter", "closeFullScreenOrExit=Esc", "toggleFullscreen=F", "toggleFullscreen=F11", "renameFile=F2", "reloadImage=F5", "flipH=H", "jumpToFirst=Home", "toggleImageInfo=I", "toggleFullscreen=LMB_DoubleClick", "prevImage=Left", "moveFile=M", "contextMenu=Menu", "openSettings=P", "resize=R", "contextMenu=RMB", "nextImage=Right", "removeFile=Shift+Del", "toggleFullscreenInfoBar=Shift+F", "prevDirectory=Shift+Left", "nextDirectory=Shift+Right", "toggleFitMode=Space", "scrollUp=Up", "flipV=V", "nextImage=WheelDown", "prevImage=WheelUp", "prevImage=XButton1", "nextImage=XButton2", "toggleSlideshow=`", "toggleShuffle=~"
[Scripts]
script\1\name=trash with trash-cli
script\1\value=@Variant(\0\0\0\x7f\0\0\0\aScript\0\0\0\0 \0t\0r\0\x61\0s\0h\0-\0p\0u\0t\0 \0%\0\x66\0i\0l\0\x65\0%\x1)
script\size=1

View file

@ -0,0 +1,13 @@
[Colors]
accent=#8c9b81
background=#1a1a1a
background_fullscreen=#1a1a1a
folderview=#242424
folderview_topbar=#383838
icons=#a4a4a4
overlay=#1a1a1a
overlay_text=#d2d2d2
scrollbar=#5a5a5a
text=#b6b6b6
widget=#252525
widget_border=#2c2c2c

View file

@ -1,32 +1,2 @@
[Appearance]
color_scheme_path=/usr/share/qt5ct/colors/simple.conf
custom_palette=false
icon_theme=Papirus-Dark
standard_dialogs=gtk3
style=Adwaita-Dark
[Fonts]
fixed=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s@(\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10)
general=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s@(\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10)
[Interface]
activate_item_on_single_click=1
buttonbox_layout=0
cursor_flash_time=1000
dialog_buttons_have_icons=1
double_click_interval=400
gui_effects=@Invalid()
keyboard_scheme=2
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
[SettingsWindow]
geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5$\0\0\x3\x30\0\0\0\0\0\0\0\0\0\0\x5;\0\0\x4\x92\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x5$\0\0\x3\x30)"
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()

View file

@ -0,0 +1,2 @@
[Appearance]
icon_theme=Papirus-Dark

View file

@ -0,0 +1,2 @@
[default]
license = "GPL-3.0-or-later"

View file

@ -59,15 +59,12 @@ fi
# Config access shortcuts
alias cfzsh='vim ~/.config/zsh/.zshrc'
alias cfprofile='vim ~/.config/zsh/.zprofile'
alias cfprompt='vim ~/.config/zsh/rc/prompt.zsh'
alias cfalias='vim ~/.config/shell/aliases'
alias cffunctions='vim ~/.config/shell/functions'
alias cfprofile='vim ~/.config/shell/profile'
alias cfenvironment='vim ~/.config/shell/environment'
alias cfenv='cfenvironment'
alias cfhandlers='vim ~/.config/shell/handlers'
alias cfprompt='vim ~/.config/shell/prompt'
alias cfkeybinds='vim ~/.config/shell/keybinds'
alias cftodo='vim ~/Personal/vimwiki/todo.md'
alias cfnvim='vim ~/.config/nvim'
alias cfvim='cfnvim'
alias cfgit='vim ~/.config/git/config'
@ -75,8 +72,6 @@ alias cfhypr='vim ~/.config/hypr'
alias cfsway='vim ~/.config/sway/config'
# zoxide shortcuts
alias cd='z' # use zoxide as the default cd command
alias cdi='zi' # interactive mode (fzf)
alias j='z' # for the sake of old habits from autojump
alias ji='zi' # interactive mode (fzf)
@ -142,11 +137,6 @@ alias iptlistout='iptables -L OUTPUT -n -v --line-numbers' # OUT rules
alias iptlistfw='iptables -L FORWARD -n -v --line-numbers' # FORWARD rules
alias ufw-log='journalctl -f -n 100 -g ufw' # Show UFW log entries in system journal
# Kernel actions
alias kernel-recompile='cd /usr/src/linux && make -j7 && make -j7 modules_install && make install'
alias kernel-oldconfig='cd /usr/src/linux && make oldconfig'
alias kernel-configure='cd /usr/src/linux && make menuconfig'
# System actions
alias sv='systemctl'
alias pacnew="find / -name '*.pacnew' 2>/dev/null" # Search for all new configurations after pacman update
@ -281,9 +271,11 @@ if [ -x /usr/bin/dircolors ]; then
alias egrep='egrep --color=auto'
alias diff='diff --color=auto'
# shellcheck disable=SC2032
alias ip='ip --color=auto'
# Take advantage of $LS_COLORS for completion as well
# shellcheck disable=SC2296
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
fi
@ -298,12 +290,6 @@ if [ ! "$(uname -s)" = 'Darwin' ]; then
fi
fi
# Autogenerate python aliases
if [ -f ~/.config/shell/py-alias ]; then
# shellcheck source=/home/itsdrike/.config/shell/py-alias
. "$HOME/.config/shell/py-alias"
fi
# Functions
if [ -f ~/.config/shell/functions ]; then
# shellcheck source=/home/itsdrike/.config/shell/functions

View file

@ -8,6 +8,23 @@
# which means the XDG definitions will be ignored anyway, and
# defining them may break programs when root is actually logged in.
# Add all folders in ~/.local/bin into PATH
# Some window managers require this line to be in profile not in .zshenv
if [ -d "$HOME/.local/bin" ]; then
PATH+=":${$(find -L ~/.local/bin -type d | tr '\n' ':')%%:}"
fi
if [ -d "$HOME/.local/share/npm/bin" ]; then
PATH+=":$HOME/.local/share/npm/bin"
fi
# Prepend rye shims to PATH, to have rye python executables
# take priority over the system-wide python.
if [ -d "${RYE_HOME:-$HOME/.rye}/shims" ]; then
PATH="${RYE_HOME:-$HOME/.rye}/shims:$PATH"
fi
# Define some variables for POSIX compatibility
uid="$(id -u)"
@ -16,14 +33,26 @@ export EDITOR="nvim"
export BROWSER="firefox"
export TERMINAL="alacritty"
export DIFFPROG="nvim -d"
export FILEMANAGER="pcmanfm"
export FILEMANAGER="pcmanfm-qt"
# XDG Standard paths
# XDG Base Directory standard paths
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_RUNTIME_DIR="/run/user/$uid"
export XDG_STATE_HOME="$HOME/.local/state"
export XDG_BIN_HOME="$HOME/.local/bin"
# XDG User directories (should match ~/.config/user-dirs.dirs)
#export XDG_DESKTOP_DIR="$HOME/Desktop"
export XDG_DOWNLOAD_DIR="$HOME/Downloads"
export XDG_TEMPLATES_DIR="$XDG_DATA_HOME/templates"
export XDG_PUBLICSHARE_DIR="$XDG_DATA_HOME/public"
#export XDG_DOCUMENTS_DIR="$HOME/Documents"
export XDG_MUSIC_DIR="$HOME/Media/Music"
export XDG_PICTURES_DIR="$HOME/Media/Pictures"
export XDG_VIDEOS_DIR="$HOME/Media/Videos"
export XDG_SCREENSHOTS_DIR="$HOME/Media/Pictures/Screenshots"
# Per-Application XDG settings
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
@ -33,7 +62,7 @@ export ZSH_COMPDUMP="$ZSH_CACHE/zcompdump-$ZSH_VERSION"
export XINITRC="$XDG_CONFIG_HOME/x11/xinitrc"
#export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # This line will break some DMs.
export LESSHISTFILE="-"
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc":"$XDG_CONFIG_HOME/gtk-2.0/gtkrc.mine"
export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
export GOPATH="$XDG_DATA_HOME/go"
@ -44,22 +73,46 @@ export _JAVA_OPTIONS="-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
export NPM_CONFIG_CACHE="$XDG_CACHE_HOME/npm"
export NPM_CONFIG_PREFIX="$XDG_DATA_HOME/npm"
export NPM_CONFIG_TMP="$XDG_RUNTIME_DIR/npm"
export NUGET_PACKAGES="$XDG_CACHE_HOME/NuGetPackages"
export PARALLEL_HOME="$XDG_CONFIG_HOME/parallel"
export RANDFILE="$XDG_CACHE_HOME/rnd"
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc.py"
export PYTHONPYCACHEPREFIX="$XDG_CACHE_HOME/python"
export PYTHONUSERBASE="$XDG_DATA_HOME/python"
# Less commonly used applications
export _ZL_DATA="$XDG_DATA_HOME/zlua"
export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history"
export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime"
export IPYTHONDIR="$XDG_CONFIG_HOME/ipython"
export PYENV_ROOT="$XDG_DATA_HOME/pyenv"
export MYPY_CACHE_DIR="$XDG_CACHE_HOME/mypy"
#export PYLINTHOME="$XDG_CACHE_HOME/pylint"
#export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
#export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv"
export PYLINTHOME="$XDG_CACHE_HOME/pylint"
export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv"
export WINEPREFIX="$XDG_DATA_HOME/wine"
export MPLAYERHOME="$XDG_CONFIG_HOME/mplayer"
export ANDROID_HOME="$XDG_DATA_HOME/android"
export M2_HOME="$XDG_DATA_HOME/m2"
export NODE_REPL_HISTORY="$XDG_DATA_HOME/node_repl_history"
export DOTNET_CLI_HOME="$XDG_DATA_HOME/dotnet"
export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME/jupyter"
export RYE_HOME="$XDG_CONFIG_HOME/rye"
# Theming
export GTK_THEME="Tokyonight-Dark"
export GTK_USE_PORTAL=1
export QT_STYLE_OVERRIDE=kvantum
export QT_QPA_PLATFORMTHEME="qt5ct"
export QT_AUTO_SCREEN_SCALE_FACTOR="1"
export QT_QPA_PLATFORM="wayland;xcb"
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
export XCURSOR_THEME="BreezeX-RosePine-Linux"
export XCURSOR_SIZE="24"
export HYPRCURSOR_THEME="rose-pine-hyprcursor"
export HYPRCURSOR_SIZE="24"
# Colorful man pages!
# Use neovim to open man pages
@ -84,12 +137,9 @@ fi
# Other program settings
export HISTTIMEFORMAT="%Y-%m-%d %T "
export SUDO_ASKPASS="$HOME/.local/bin/scripts/gui/prompt/menupass"
export PIPENV_VENV_IN_PROJECT=1 # Force pipenv to create new environments within projects ./.venv
export XSECURELOCK_SHOW_HOSTNAME=0 # Don't show hostname in xsecurelock
export XSECURELOCK_SHOW_DATETIME=1 # Show current date and time in xsecurelock
export QT_QPA_PLATFORMTHEME="qt5ct" # Have QT use theme from qt5ct.
#export QT_STYLE_OVERRIDE="gtk2" # Have QT use the gtk2 theme (needs aur/qt5-styleplugins)
#export QSG_RENDER_LOOP=basic # Fix Stremio freezing
export PIPENV_VENV_IN_PROJECT=1 # Force pipenv to create new environments within projects ./.venv
export XSECURELOCK_SHOW_HOSTNAME=0 # Don't show hostname in xsecurelock
export XSECURELOCK_SHOW_DATETIME=1 # Show current date and time in xsecurelock
# Remove irrelevant variables added for posix compatibility
unset posix

View file

@ -202,8 +202,8 @@ anonymize() {
# Reset the prompt on initial run to allow this script
# to be ran multiple times without user having to reload
# PS1 manually
# shellcheck source=/home/itsdrike/.config/shell/prompt
. "${XDG_CONFIG_DIR:-$HOME/.config}/shell/prompt"
# shellcheck source=/home/itsdrike/.config/zsh/rc/prompt.zsh
. "${ZDOTDIR}/rc/prompt.zsh"
# Regular expression to match 0-255 numbers (color)
color_int_re='^(0+)?([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'

View file

@ -1,30 +0,0 @@
#!/bin/zsh
# User .profile definition.
# This file is only sourced once, after login, Unlike
# .zshrc/.bashrc, which will run whenever a new terminal
# is opened.
# Add all folders in ~/.local/bin into PATH
# Some window managers require this line to be in profile
# not in .zshenv
if [ -d "$HOME/.local/bin" ]; then
PATH+=":${$(find -L ~/.local/bin -type d | tr '\n' ':')%%:}"
fi
if [ -d "$HOME/.local/share/pyenv/shims" ]; then
PATH+=":$HOME/.local/share/pyenv/shims"
fi
if [ -d "$HOME/.local/share/npm/bin" ]; then
PATH+=":$HOME/.local/share/npm/bin"
fi
# Start graphical session automatically on tty1 if Hyprland or startx is available
if [ "$(tty)" = "/dev/tty1" ] && [ "$UID" != 0 ]; then
if command -v Hyprland >/dev/null; then
! pidof -s Hyprland >/dev/null 2>&1 && launch-hypr
elif command -v startx >/dev/null; then
! pidof -s Xorg >/dev/null 2>&1 && exec startx "$XINITRC"
fi
fi

View file

@ -1,196 +0,0 @@
#!/usr/bin/env zsh
# Simple script which automatically defines certain aliases for python,
# which will automatically use certain python version
# Versions are automatically obtained from $PYENV_ROOT/versions directories
# NOTE: This assumes that all folders in this directory are valid python versions
#
# Assume we have these installed pyenv python versions 3.6.5, 3.6.12 and 3.10.1:
# - Set full-version aliases: py3.6.5, py3.6.12 and py3.10.1
# - Set py3 to 3.10.1 (latest with major version 3)
# - Set py3.6 to 3.6.12 (latest with major version 3 and minor version 6)
# - Set py3.10 to 3.10.1 (latest, and only python with major version 3 and minor version 10)
# Define all wanted aliases for a given python version
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
# $2 - version used in the alias (for example '3.6', '3', or even '', but also `pypy3.7`, ...)
define_aliases() {
version="$1"
alias_version="$2"
cmd_prefix="PYENV_VERSION=$version"
alias "py$alias_version=$cmd_prefix python"
alias "ipy$alias_version=$cmd_prefix ipython"
alias "bpy$alias_version=$cmd_prefix bpython"
alias "pydoc$alias_version=$cmd_prefix pydoc"
alias "pytest$alias_version=$cmd_prefix pytest"
alias -g "PY$alias_version=$cmd_prefix"
}
# Handle splitting full version into prefix, version number and suffix
# Because of the huge variaty of python implemenations and their different namings,
# this function will only be able to handle the default CPython version names,
# which follow the regex pattern of: '\d+\.\d+\.\d+', the rest will print 'full_version;;'
# In the future, this may also include support for some other naming schemes.
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
parse_python_version() {
full_version="$1"
if echo "$full_version" | grep -E "[0-9]+\.[0-9]+\.[0-9]+" >/dev/null; then
echo ";$full_version;"
else
echo ';;'
fi
}
# Prints version number extracted from alias for given version
# $1 - version used in the alias (for example '3.6', '3', or even '', but also 'pypy3.6', ...)
get_alias_version() {
alias_version="$1"
definition="$(alias "py$alias_version")"
full_version="$(echo "$definition" | cut -d= -f3 | cut -d' ' -f1)"
version_info="$(parse_python_version "$full_version")"
version="$(echo "$version_info" | cut -d';' -f2)"
echo "$version"
}
# Compares 2 python versions in major, minor and micro parts
# $1 - version #1
# $2 - version #2
# Returns:
# 0 - version #1 is newer
# 1 - version #2 is newer
# 2 - versions are equal
version_compare() {
version_1="$1"
version_2="$2"
# ZSH Only:
version_1=("${(@s:.:)version_1}")
version_2=("${(@s:.:)version_2}")
major_1=$version_1[1]
major_2=$version_2[1]
minor_1=$version_1[2]
minor_2=$version_2[2]
micro_1=$version_1[3]
micro_2=$version_2[3]
# POSIX, but slow:
# major_1="$(echo "$version_1" | cut -d. -f1)"
# major_2="$(echo "$version_2" | cut -d. -f1)"
# minor_1="$(echo "$version_1" | cut -d. -f2)"
# minor_2="$(echo "$version_2" | cut -d. -f2)"
# micro_1="$(echo "$version_1" | cut -d. -f3)"
# micro_2="$(echo "$version_2" | cut -d. -f3)"
# Compare majors
if [ $major_1 -gt $major_2 ]; then
# version 1's major is bigger, version 1 is newer
return 0
elif [ $major_1 -lt $major_2 ]; then
# version 1's major is smaller, version 2 is newer
return 1
fi
# Majors equal, compare minors
if [ $minor_1 -gt $minor_2 ]; then
# version 1's minor is bigger, version 1 is newer
return 0
elif [ $minor_1 -lt $minor_2 ]; then
# version 1's major is smaller, version 2 is newer
return 1
fi
# Minors equal, compare micros
if [ $micro_1 -gt $micro_2 ]; then
# version 1's micro is bigger, version 1 is newer
return 0
elif [ $micro_1 -lt $micro_2 ]; then
# version 1's micro is smaller, version 2 is newer
return 1
fi
# Micros equal, versions equal
return 2
}
# Define new aliases if they don't already exsist, in which case override
# if the current version is newer than the version in the alias
# $1 - full valid pyenv python version (for example '3.6.12', `3.11-dev`, or `pypy3.6-7.2.0-src`)
# $2 - version used in the alias (for example '3.6', '3', or even '', but also `pypy3.7`, ...)
try_define_aliases() {
version="$1"
alias_version="$2"
# Check if alias already exists
if alias "py$alias_version" >/dev/null; then
# Compare version from the existing alias with current version,
# if current is newer, override the existing alias(es)
defined_version="$(get_alias_version "$alias_version")"
if version_compare "$version" "$defined_version"; then
define_aliases "$version" "$alias_version"
# echo "Overwrote '$alias_version' aliases to point to '$version'"
return 0
else
return 1
fi
fi
# The aliases aren't already defined, it's safe to create them
define_aliases "$version" "$alias_version"
# echo "Made '$alias_version' aliases pointing to '$version'"
return 0
}
define_version_aliases() {
prefix="$1"
version="$2"
suffix="$3"
# ZSH only:
version_data=("${(@s:.:)version}")
major_version=$version_data[1]
minor_version=$version_data[2]
# POSIX, but slow:
# major_version="$(echo "$version" | cut -d. -f1)"
# minor_version="$(echo "$version" | cut -d. -f2)"
# Define the major.minor.micro (full) alias
try_define_aliases "$version" "$prefix$version$suffix"
# Define the major.minor alias
try_define_aliases "$version" "$prefix$major_version.$minor_version$suffix"
# Define the major alias
try_define_aliases "$version" "$prefix$major_version$suffix"
# Define top level alias
try_define_aliases "$version" "$prefix$suffix"
}
for python_dir in "$PYENV_ROOT"/versions/*/ ; do
full_version="$(basename $python_dir)"
version_info="$(parse_python_version "$full_version")"
if [ $version_info = ';;' ]; then
# Version info wasn't obtained successfully, skip this version
echo "Skipped $full_version"
continue
fi
# ZSH only:
version_data=("${(@s:;:)version_info}")
prefix=$version_data[1]
version=$version_data[2]
suffix=$version_data[3]
# POSIX, but slow:
# prefix="$(echo "$version_info" | cut -d';' -f1)"
# version="$(echo "$version_info" | cut -d';' -f2)"
# suffix="$(echo "$version_info" | cut -d';' -f3)"
# startTime=$(date +%N)
define_version_aliases "$prefix" "$version" "$suffix"
# endTime=$(date +%N)
# nanos="$(expr $endTime - $startTime)"
# echo "took $(expr $nanos / 1000000) miliseconds"
done
if command -v poetry >/dev/null 2>&1; then
alias poetry-pyenv='poetry env use "$(pyenv which python)" && poetry install'
fi

View file

@ -1,9 +1,9 @@
[Default]
save_dir=$HOME/Pictures/Screenshots
early_exit=true
line_size=5
paint_mode=rectangle
save_dir=/home/itsdrike/Media/Pictures/Screenshots
save_filename_format=Screenshot_%Y-%M-%d_%H-%M-%S.png
show_panel=false
line_size=5
text_size=20
text_font=JetBrains Mono
early_exit=true
paint_mode=rectangle
text_size=20

View file

@ -5,9 +5,9 @@ After=eww.service
PartOf=eww.service
[Service]
ExecStartPre=/usr/local/bin/eww ping
ExecStart=/usr/local/bin/eww open %i
ExecStop=/usr/local/bin/eww close %i
ExecStartPre=/usr/bin/eww ping
ExecStart=/usr/bin/eww open %i
ExecStop=/usr/bin/eww close %i
Type=oneshot
RemainAfterExit=true
Restart=on-failure

View file

@ -3,7 +3,7 @@ Description="Eww daemon"
PartOf=graphical-session.target
[Service]
ExecStart=/usr/local/bin/eww daemon --no-daemonize
ExecStart=/usr/bin/eww daemon --no-daemonize
Restart=always
RestartSec=3s

View file

@ -0,0 +1,12 @@
[Unit]
Description="Hyprpaper (Hyprland wallpaper daemon"
PartOf=graphical-session.target
After=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/hyprpaper
Restart=on-failure
[Install]
WantedBy=wayland-session.target

View file

@ -1,12 +0,0 @@
[Unit]
Description="Wallpaper setter"
PartOf=graphical-session.target
[Service]
Environment=WALLPAPER_IMAGE=%h/.local/share/background
ExecStart=/usr/bin/swaybg --image $WALLPAPER_IMAGE
Restart=always
RestartSec=3s
[Install]
WantedBy=wayland-session.target

View file

@ -0,0 +1 @@
/home/itsdrike/.config/systemd/user/hyprpaper.service

View file

@ -1 +0,0 @@
/home/itsdrike/.config/systemd/user/wallpaper.service

View file

@ -0,0 +1,7 @@
[display]
compact = false
use_pager = true
[updates]
auto_update = true
auto_update_interval_hours = 720

View file

@ -7,12 +7,10 @@
#
#XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
#XDG_TEMPLATES_DIR="$HOME/Templates"
#XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_TEMPLATES_DIR="$XDG_DATA_HOME/templates"
XDG_PUBLICSHARE_DIR="$XDG_DATA_HOME/public"
#XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_DOCUMENTS_DIR="$HOME/Personal"
#XDG_MUSIC_DIR="$HOME/Music"
XDG_MUSIC_DIR="$HOME/Audio"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_SCREENSHOTS_DIR="$HOME/Pictures/Screenshots"
XDG_VIDEOS_DIR="$HOME/Videos"
XDG_MUSIC_DIR="$HOME/Media/Music"
XDG_PICTURES_DIR="$HOME/Media/Pictures"
XDG_VIDEOS_DIR="$HOME/Media/Videos"
XDG_SCREENSHOTS_DIR="$HOME/Media/Pictures/Screenshots"

View file

@ -0,0 +1,5 @@
[preferred]
default=gtk
org.freedesktop.impl.portal.Screencast=hyprland
org.freedesktop.impl.portal.Screenshot=hyprland
org.freedesktop.impl.portal.Secret=gnome-keyring

View file

@ -0,0 +1,9 @@
Net/ThemeName "Tokyonight-Dark"
Net/IconThemeName "Papirus-Dark"
Gtk/CursorThemeName "BreezeX-RosePine-Linux"
Net/EnableEventSounds 1
EnableInputFeedbackSounds 0
Xft/Antialias 1
Xft/Hinting 1
Xft/HintStyle "hintslight"
Xft/RGBA "rgb"

View file

@ -1 +0,0 @@
../shell/profile

16
home/.config/zsh/.zprofile Executable file
View file

@ -0,0 +1,16 @@
#!/bin/zsh
# User .profile definition.
# This file is only sourced once, after login, Unlike
# .zshrc/.bashrc, which will run whenever a new terminal
# is opened.
# Start graphical session automatically on tty1 if Hyprland or startx is available
#if [ "$(tty)" = "/dev/tty1" ] && [ "$UID" != 0 ]; then
# if command -v Hyprland >/dev/null; then
# ! pidof -s Hyprland >/dev/null 2>&1 && launch-hypr
# elif command -v startx >/dev/null; then
# ! pidof -s Xorg >/dev/null 2>&1 && exec startx "$XINITRC"
# fi
#fi

View file

@ -1,138 +1,22 @@
#!/usr/bin/zsh
#########################
# History Configuration #
#########################
export HISTSIZE=12000
export SAVEHIST=10000
# If the internal history needs to be trimmed to add the current command line, setting this
# option will cause the oldest history event that has a duplicate to be lost before losing a
# unique event from the list. You should be sure to set the value of HISTSIZE to a larger
# number than SAVEHIST in order to give you some room for the duplicated events, otherwise
# this option will behave just like HIST_IGNORE_ALL_DUPS once the history fills up with unique
# events.
setopt hist_expire_dups_first
# When searching for history entries in the line editor, do not display duplicates of a line
# previously found, even if the duplicates are not contiguous.
setopt hist_find_no_dups
# If a new command line being added to the history list duplicates an older one, the older
# command is removed from the list (even if it is not the previous event).
setopt hist_ignore_all_dups
# Remove command lines from the history list when the first character on the line is a space,
# or when one of the expanded aliases contains a leading space. Only normal aliases (not
# global or suffix aliases) have this behaviour. Note that the command lingers in the internal
# history until the next command is entered before it vanishes, allowing you to briefly reuse
# or edit the line. If you want to make it vanish right away without entering another command,
# type a space and press return.
setopt hist_ignore_space
# When writing out the history file, older commands that duplicate newer ones are omitted.
setopt hist_save_no_dups
# This option works like APPEND_HISTORY except that new history lines are added to the $HISTFILE
# incrementally (as soon as they are entered), rather than waiting until the shell exits.
setopt inc_append_history
# When using history expansion (such as with sudo !!), on enter, first show the expanded command
# and only run it after confirmation (another enter press)
setopt hist_verify
###############
# ZSH Options #
###############
setopt auto_cd # cd by typing directory name if it's not a command
setopt auto_list # automatically list choices on ambiguous completion
setopt auto_menu # automatically use menu completion
setopt always_to_end # move cursor to end if word had one match
setopt interactivecomments # allow comments in interactive mode
setopt magicequalsubst # enable filename expansion for arguments of form `x=expression`
setopt notify # report the status of background jobs immediately
setopt numericglobsort # sort filenames numerically when it makes sense
setopt auto_pushd # Make cd act as pushd
setopt globdots # Match files starting with . without specifying it (cd <TAB>)
#setopt correct_all # autocorrect commands
##################
# Autocompletion #
##################
autoload -Uz compinit
zmodload -i zsh/complist # load completion list
compinit -d $ZSH_COMPDUMP # Specify compdump file
zstyle ':completion:*' menu select # select completions with arrow keys
zstyle ':completion:*' group-name '' # group results by category
zstyle ':completion:::::' completer _expand _complete _ignored _approximate #enable approximate matches for completion
#################
# Custom config #
#################
source ~/.config/zsh/rc/fallback_term.zsh
source ~/.config/zsh/rc/history.zsh
source ~/.config/zsh/rc/opts.zsh
source ~/.config/zsh/rc/completion.zsh
source ~/.config/zsh/rc/keybinds.zsh
source ~/.config/zsh/rc/prompt.zsh
source ~/.config/zsh/rc/cmd_not_found.zsh
source ~/.config/zsh/rc/auto_cleanup.zsh
# Setup aliases
[ -f ~/.config/shell/aliases ] && source ~/.config/shell/aliases
# Load handlers
[ -f ~/.config/shell/handlers ] && source ~/.config/shell/handlers
# Load key bindings
[ -f ~/.config/shell/keybinds ] && source ~/.config/shell/keybinds
# Load prompt
[ -f ~/.config/shell/prompt ] && source ~/.config/shell/prompt
#####################
# Automatic Cleanup #
#####################
[ -f ~/.zsh-update ] && mv ~/.zsh-update $ZSH_CACHE/.zsh-update
[ -f ~/.sudo_as_admin_sucessful ] && rm ~/.sudo_as_admin_successful
[ -f ~/.bash_history ] && rm ~/.bash_history
# Make sure ZSH_CACHE dir exists, avoiding zsh to create it's cache files
# in $HOME
mkdir -p "$ZSH_CACHE"
########
# Misc #
########
# Color support
#autoload -U colors && colors
# Define TMOUT timeout for TTY and root
# [ -z "$DISPLAY" ] && export TMOUT=800
# [ $UID -eq 0 ] && export TMOUT=600
if command -v pyenv >/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
if command -v zoxide >/dev/null 2>&1; then
eval "$(zoxide init --cmd z zsh)"
fi
#########################
# Zgenom Plugin Manager #
#########################
# Load zgenom (plugin manager for ZSH)
source "${ZDOTDIR}/.zgenom/zgenom.zsh"
# Check for zgenom updates
# This does not increase startup time
zgenom autoupdate
# If the init script doesn't exist yet
if ! zgenom saved; then
zgenom load akash329d/zsh-alias-finder
zgenom load clarketm/zsh-completions
zgenom load zsh-users/zsh-autosuggestions
zgenom load zdharma-continuum/fast-syntax-highlighting
# Generate the init script from plugins above
zgenom save
fi
source ~/.config/zsh/rc/misc.zsh
source ~/.config/zsh/rc/plugins.zsh
source ~/.config/zsh/rc/zgenom.zsh
# Override the comment color to make comments visible on black bg
# (this needs to be after zgenom, as it requires the zsh-fast-highlighting plugin
# to be loaded)
FAST_HIGHLIGHT_STYLES[comment]='fg=#696C76'

View file

@ -0,0 +1,8 @@
# This will simply remove some clutter files from the home directory
[ -f ~/.zsh-update ] && mv ~/.zsh-update $ZSH_CACHE/.zsh-update
[ -f ~/.sudo_as_admin_sucessful ] && rm ~/.sudo_as_admin_successful
[ -f ~/.bash_history ] && rm ~/.bash_history
# Make sure ZSH_CACHE dir exists, avoiding zsh to create it's cache files in $HOME
mkdir -p "$ZSH_CACHE"

View file

@ -1,5 +1,3 @@
#!/bin/sh
if command -v pkgfile > /dev/null; then
# Command not found hook that uses `pkgfile` package
# to search through the package index in order to find
@ -38,3 +36,4 @@ elif [ -x /usr/lib/command-not-found ] || [ -x /usr/share/command-not-found/comm
fi
}
fi

View file

@ -0,0 +1,19 @@
# Autocompletion behavior of ZSH
autoload -Uz compinit
zmodload -i zsh/complist # load completion list
if [[ -n "$(print ${ZDOTDIR:-$HOME}/.zcompdump(Nmh+5))" ]]; then
# Re-check for new completions, re-creating .zcompdump if necessary.
# This check can be quite slow and it's rare that we actually have new completions to load.
# For that reason, we only do this if the compdump file is older than 5 hours.
compinit
else
# This will omit the check for new completions,
# only re-creating .zcompdump if it doesn't yet exist.
compinit -C
fi
zstyle ':completion:*' menu select # select completions with arrow keys
zstyle ':completion:*' group-name '' # group results by category
zstyle ':completion:::::' completer _expand _complete _ignored _approximate # enable approximate matches for completion

View file

@ -0,0 +1,8 @@
# If the set $TERM variable doesn't match any configured terminfo entries
# fall back to xterm. This fixes SSH connections from unknown terminals
if ! infocmp "$TERM" &>/dev/null; then
echo "Setting \$TERM to xterm-256color due to missing terminfo entry for $TERM."
export TERM=xterm-256color
fi

View file

@ -0,0 +1,59 @@
export HISTSIZE=12000
export SAVEHIST=10000
# Append history list to history file once the session exits, rather than replacing
# the history file, erasing any past entries
setopt APPEND_HISTORY
# If the internal history needs to be trimmed to add the current command line, setting this
# option will cause the oldest history event that has a duplicate to be lost before losing a
# unique event from the list. You should be sure to set the value of HISTSIZE to a larger
# number than SAVEHIST in order to give you some room for the duplicated events, otherwise
# this option will behave just like HIST_IGNORE_ALL_DUPS once the history fills up with unique
# events.
setopt HIST_EXPIRE_DUPS_FIRST
# When searching for history entries in the line editor, do not display duplicates of a line
# previously found, even if the duplicates are not contiguous.
setopt HIST_FIND_NO_DUPS
# If a new command line being added to the history list duplicates an older one, the older
# command is removed from the list (even if it is not the previous event).
setopt HIST_IGNORE_ALL_DUPS
# Remove command lines from the history list when the first character on the line is a space,
# or when one of the expanded aliases contains a leading space. Only normal aliases (not
# global or suffix aliases) have this behaviour. Note that the command lingers in the internal
# history until the next command is entered before it vanishes, allowing you to briefly reuse
# or edit the line. If you want to make it vanish right away without entering another command,
# type a space and press return.
setopt HIST_IGNORE_SPACE
# When writing out the history file, older commands that duplicate newer ones are omitted.
setopt HIST_SAVE_NO_DUPS
# This option works like APPEND_HISTORY except that new history lines are added to the $HISTFILE
# incrementally (as soon as they are entered), rather than waiting until the shell exits.
setopt INC_APPEND_HISTORY
# When using history expansion (such as with sudo !!), on enter, first show the expanded command
# and only run it after confirmation (another enter press)
setopt HIST_VERIFY
# Remove superfluous blanks from each command line being added to the history list
setopt HIST_REDUCE_BLANKS
# When writing out the history file, by default zsh uses ad-hoc file locking to avoid known
# problems with locking on some operating systems. With this option, locking is done by means
# of the `fcntl` system call, where this method is available. This can improve performance on
# recent operating systems, and is better at avoiding history corruption when files are stored
# on NFS.
setopt HIST_FCNTL_LOCK
# Save each command's beginning time (unix timestamp) and the duration (in seconds) to the
# history file.
setopt EXTENDED_HISTORY
# beep in ZLE when a widget attempts to access a history entry which isnt there
unsetopt HIST_BEEP

View file

@ -1,4 +1,3 @@
#!/usr/bin/env zsh
# shellcheck disable=SC2030,SC2031,SC2015
# Set default keybindings (mostly from oh-my-zsh)
@ -63,3 +62,4 @@ bindkey ' ' magic-space
# [ctrl+space] Accept suggestion from zsh-autosuggestions plugin
bindkey '^ ' autosuggest-accept

View file

@ -0,0 +1,15 @@
# This file contains miscellaneous configurations,
# usually required by external applications that isn't suited for plugins.zsh
# or just general ZSH/shell settings that don't fit anywhere else
# Foot terminal uses this sequence to identify a command execution
# that way it's possible to use ctrl+shift+z/x to jump between commands
if [ "$TERM" = "foot" ]; then
precmd() {
print -Pn "\e]133;A\e\\"
}
fi
# Define TMOUT timeout for TTY and root
# [ -z "$DISPLAY" ] && export TMOUT=800
# [ $UID -eq 0 ] && export TMOUT=600

View file

@ -0,0 +1,31 @@
# Set or unset various zsh options.
# You can read more about what options are available and what these do in
# the ZSH manual: <https://zsh.sourceforge.io/Doc/Release/Options.html>
#
# Note that history-related options are set from history.zsh, not from here.
#########################
# General/Other options #
#########################
setopt AUTO_CD # cd by typing directory name if it's not a command
setopt AUTO_LIST # automatically list choices on ambiguous completion
setopt AUTO_MENU # automatically use menu completion
setopt MENU_COMPLETE # insert first match immediately on ambiguous completion
setopt AUTO_PARAM_SLASH # if a parameter is completed with a directory, add trailing slash instead of space
setopt ALWAYS_TO_END # move cursor to end if word had one match
setopt INTERACTIVE_COMMENTS # allow comments in interactive mode
setopt MAGIC_EQUAL_SUBST # enable filename expansion for arguments of form `x=expression`
setopt NOTIFY # report the status of background jobs immediately
setopt NUMERIC_GLOB_SORT # sort filenames numerically when it makes sense
setopt GLOB_DOTS # Match files starting with . without specifying it (cd <TAB>)
######################
# Auto pushd options #
######################
setopt AUTO_PUSHD # Make cd push the old directory onto the directory stack
setopt PUSHD_IGNORE_DUPS # don't push multiple copies of the same directory
setopt PUSHD_TO_HOME # have pushd with no arguments act like `pushd $HOME`
setopt PUSHD_SILENT # do not print the directory stack

View file

@ -0,0 +1,15 @@
# This file loads custom ZSH plugins or runs shell configurations
# exposed by various plugins. This often includes custom autocompletions,
# but also whatever other functionalities that these may contain.
if command -v pyenv >/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
if command -v zoxide >/dev/null 2>&1; then
eval "$(zoxide init zsh --cmd z)"
fi
if command -v eww >/dev/null 2>&1; then
eval "$(eww shell-completions --shell zsh)"
fi

View file

@ -185,3 +185,4 @@ else
RPS1="%(?..${RED}%? ↵$RESET)"
fi

View file

@ -0,0 +1,18 @@
# Load zgenom (plugin manager for ZSH)
source "${ZDOTDIR}/.zgenom/zgenom.zsh"
# Check for zgenom updates
# This does not increase startup time
zgenom autoupdate
# If the init script doesn't exist yet
if ! zgenom saved; then
zgenom load akash329d/zsh-alias-finder
zgenom load clarketm/zsh-completions
zgenom load zsh-users/zsh-autosuggestions
zgenom load zdharma-continuum/fast-syntax-highlighting
# Generate the init script from plugins above
zgenom save
fi