1
0
mirror of https://github.com/artizirk/dotfiles.git synced 2025-06-22 13:54:15 +03:00

Compare commits

...

17 Commits

Author SHA1 Message Date
639e7cc444 Telegram changed names and earlyoom notify 2025-06-17 17:14:06 +03:00
bef9896118 fix sid laptop lid on/off 2025-05-30 00:21:12 +03:00
84ed0b01b8 Enable battery empty nag 2025-05-29 13:41:04 +03:00
44cb9c112e Move systemd-resolved configuration to the end 2025-05-29 13:39:43 +03:00
a607346209 NeoVim changed vless script location 2025-04-24 15:31:30 +03:00
16c9af02ff Snapshots to create_container 2025-04-14 15:09:09 +03:00
e26a30d88e Disable Minio CLI pager 2025-04-14 15:08:25 +03:00
0bb59ae237 Add sleep blocker script 2025-04-02 10:15:47 +03:00
9a19debb44 Don't record cursor when taking a screenshot 2025-02-17 15:33:54 +02:00
45a31ffdd0 We no longer use Drata 2025-02-17 15:33:32 +02:00
4f2775b4e4 Sway changed display naming 2025-02-17 15:32:59 +02:00
09883c3d40 Switch to dulcepan sway screenshot tool 2025-01-20 14:56:00 +02:00
9515ff6317 Fixup slack wayland patch script 2024-12-18 12:16:28 +02:00
d12e19aeb6 Add create_contaier script 2024-12-03 18:40:41 +02:00
d1cdea99af Force home-office monitor layout 2024-11-04 14:39:22 +02:00
3761124be7 Fix Wayland support for apps running under systemd 2024-11-04 14:38:36 +02:00
e50989e39a Always read custom venv prompt from config file
And ignore VIRTUAL_ENV_PROMPT variable for now as it is different
between venv and virtualenv implementations:

* https://github.com/python/cpython/pull/106726
* https://github.com/pypa/virtualenv/pull/2606
2024-10-29 16:21:14 +02:00
11 changed files with 226 additions and 22 deletions

136
.bin/create_container Executable file
View File

@ -0,0 +1,136 @@
#!/bin/bash
set -euo pipefail
DEFAULT_SUITE="bookworm"
BASE="/var/lib/machines"
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
function show_help {
cat <<-EOF
Usage: $0 -h | -n NAME [-s SUITE] [-t [SNAPSHOT_NAME] -r] [-d]
Create a nspanw container called NAME
-h help
-n container name
-s debian suite (default: ${DEFAULT_SUITE})
-t snapshot container
-r rollback to snapshot
-d delete container
EOF
}
while getopts 'hn:s:t:rd' flag; do
case "${flag}" in
h) show_help; exit 0;;
n) name="${OPTARG}" ;;
s) suite="${OPTARG}" ;;
t) snapshot="${OPTARG}" ;;
r) rollback=1 ;;
d) delete=1 ;;
*) echo "Unexpected option ${flag}" ;;
esac
done
SUITE=${suite:-$DEFAULT_SUITE}
if [[ -z ${name:-} ]]; then
echo "Container name is unset"
echo
show_help
exit;
else
echo "Container name is $name and suite is ${SUITE}"
fi
if [[ -n ${snapshot:-} ]]; then
dest_snapshot_name="${BASE}/.${name}_${snapshot}"
if [[ -n ${rollback:-} ]]; then
if [[ -d ${dest_snapshot_name} ]]; then
btrfs subvolume delete "${BASE}/${name}"
btrfs subvolume snapshot "${dest_snapshot_name}" "${BASE}/${name}"
exit 0
else
echo "Can't rollback as '${snapshot}' does not exist"
exit 1
fi
else
btrfs subvolume snapshot -r "${BASE}/${name}" "${dest_snapshot_name}"
exit 0
fi
fi
if [[ -n ${delete:-} ]]; then
btrfs subvolume delete "${BASE}/${name}" "${BASE}/.${name}_"*
exit 0
fi
btrfs subvolume create "${BASE}/${name}"
APT_CACHE_DIR="/var/cache/apt/archives"
if [[ -d ${APT_CACHE_DIR} ]]; then
CACHE_ARGS="--cache-dir=${APT_CACHE_DIR}"
else
CACHE_ARGS=""
fi
debootstrap ${CACHE_ARGS} "${SUITE}" "${BASE}/${name}"
mkdir -p "$BASE/$name/root/.ssh"
chmod 700 "$BASE/$name/root/.ssh"
if [ -f "/root/.ssh/authorized_keys" ]; then
cp -v /root/.ssh/authorized_keys "$BASE/$name/root/.ssh/authorized_keys"
chmod 600 "$BASE/$name/root/.ssh/authorized_keys"
echo "added ssh keys to root"
fi
if [[ -e "$BASE/$name/etc/resolv.conf" ]]; then
rm "$BASE/$name/etc/resolv.conf"
fi
if [[ -e "$BASE/$name/etc/hostname" ]]; then
rm "$BASE/$name/etc/hostname"
fi
systemd-nspawn --console=pipe -D "$BASE/$name" /bin/bash <<'EOF'
echo "Now running inside nspawn $(pwd)"
source /etc/os-release
if [[ "$ID" == "ubuntu" ]]; then
sed -i '1 s/$/ restricted universe multiverse/' /etc/apt/sources.list
elif [[ "$ID" == "debian" ]]; then
if [[ $VERSION_ID -le 11 ]]; then
sed -i '1 s/$/ contrib non-free/' /etc/apt/sources.list
else
sed -i '1 s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list
fi
fi
apt-get update
apt-get install --yes --no-install-recommends locales dbus ssh python3
echo "locales locales/default_environment_locale select en_US.UTF-8" | debconf-set-selections
echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8, et_EE.UTF-8 UTF-8" | debconf-set-selections
rm /etc/locale.gen
dpkg-reconfigure --frontend noninteractive locales
ln -fs /usr/share/zoneinfo/Europe/Tallinn /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
apt install --yes --no-install-recommends neovim
update-alternatives --set editor /usr/bin/nvim
ln -sf /usr/share/nvim/runtime/macros/less.sh /usr/local/bin/vless
systemctl enable systemd-networkd
# systemd-resolved package also replaces /etc/resolv.conf with a symlink that breaks DNS in our current pre setup environment
apt install --yes --no-install-recommends libnss-resolve
# Needed by libnss-resolve config in /etc/nsswitch.conf
systemctl enable systemd-resolved
EOF

3
.bin/no-sleep Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
systemd-inhibit --what=sleep:idle --mode=block bash -c 'while true; do sleep 1; done'

View File

@ -1,2 +1,2 @@
#!/usr/bin/env bash #!/usr/bin/env bash
udo sed -i -e 's#Exec=/usr/bin/slack %U#Exec=/usr/bin/slack\ %U\ --enable-features=WebRTCPipeWireCapturer#' /usr/share/applications/slack.desktop sudo sed -i -e 's#^Exec=/usr/bin/slack -s %U$#Exec=/usr/bin/slack\ -s\ %U --enable-features=WebRTCPipeWireCapturer,UseOzonePlatform --ozone-platform=wayland#' /usr/share/applications/slack.desktop

View File

@ -1,4 +1,18 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
"""
Sway screenshot tool. Saved screenshots are also added to GTK recents list for easy access.
Uses following tools
* grim
* slurp
* https://codeberg.org/vyivel/dulcepan
* jq
Region selection uses dulcepan. It works by first freezing the screen so that popups sway visible.
Then it allows selection of the region you want to screenshot.
"""
import gi import gi
gi.require_version('Gtk', '3.0') gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib from gi.repository import Gtk, GLib
@ -28,16 +42,7 @@ else:
sys.exit(0) sys.exit(0)
elif sys.argv[1] == '--region': elif sys.argv[1] == '--region':
outputs = run(['swaymsg', '-t', 'get_outputs'], check=True, capture_output=True) run(["dulcepan", "-o", file_name], check=True)
for output in json.loads(outputs.stdout):
if not output.get("focused"):
continue
image = Popen(["grim", "-o", f"{output.get('name')}", '-'], stdout=PIPE)
viewer = Popen(['swayimg', '-f', '-o', f'{output.get("name")}','-'], stdin=image.stdout)
image_viewers.append(viewer)
region = run('slurp', check=True, capture_output=True)
run(["grim", '-g', '-', file_name], check=True, input=region.stdout)
elif sys.argv[1] == '--window': elif sys.argv[1] == '--window':
tree = run(['swaymsg', '-t', 'get_tree'], check=True, capture_output=True) tree = run(['swaymsg', '-t', 'get_tree'], check=True, capture_output=True)

47
.config/dulcepan.cfg Normal file
View File

@ -0,0 +1,47 @@
# An example configuration.
# RRGGBB or RRGGBBAA
unselected-color = ffffff40
selected-color = 00000000
#border-color = ffffff
border-color = 000000
#border-secondary-color = 000000
border-secondary-color = ffffff
# 0 to disable borders
border-size = 2
# Border gradient type:
# - none: only the primary border color is used
# - linear: uses a linear gradient relative to the selection
# - loop: uses a repeated linear gradient
border-gradient = none
# For "linear" gradient mode
# Counterclockwise, in degrees
gradient-angle = 45
# For "loop" gradient mode
# The distance between gradient stops
loop-step = 100
# For "linear" and "loop" gradient modes
# In milliseconds, 0 to disable animation
# With "linear" mode: the time it takes for the pattern to make one full turn
# With "loop" mode: the time it takes for the pattern to move by double the loop step
animation-duration = 1000
# If true, dulcepan will save immediately when interactive selection is stopped
# or when a whole output is selected with a mouse button.
quick-select = true
# If true, dulcepan will remember selection between runs.
# The state is stored at $XDG_CACHE_HOME/dulcepan.
persistence = false
# PNG (zlib) compression level, 0-9
png-compression = 6
# Key bindings
quit-key = Escape
save-key = Space

View File

@ -0,0 +1 @@
XCURSOR_SIZE=24

View File

@ -10,6 +10,7 @@ for_window [app_id="quasselclient"] move to workspace $chat_workspace
exec systemd-run --user --unit=quasselclient /usr/bin/quasselclient exec systemd-run --user --unit=quasselclient /usr/bin/quasselclient
for_window [class="Element"] move to workspace $chat_workspace for_window [class="Element"] move to workspace $chat_workspace
for_window [app_id="Element"] move to workspace $chat_workspace
exec systemd-run --user --unit=element-desktop /usr/bin/element-desktop exec systemd-run --user --unit=element-desktop /usr/bin/element-desktop
for_window [class="Slack"] move to workspace $chat_workspace for_window [class="Slack"] move to workspace $chat_workspace
@ -19,8 +20,7 @@ exec systemd-run --user --unit=slack-flatpak /usr/bin/flatpak run com.slack.Slac
for_window [app_id="telegramdesktop"] move to workspace $chat_workspace for_window [app_id="telegramdesktop"] move to workspace $chat_workspace
for_window [app_id="org.telegram.desktop"] move to workspace $chat_workspace for_window [app_id="org.telegram.desktop"] move to workspace $chat_workspace
exec systemd-run --user --unit=telegram /usr/bin/env XDG_CURRENT_DESKTOP=GNOME telegram-desktop exec systemd-run --user --unit=telegram /usr/bin/env XDG_CURRENT_DESKTOP=GNOME Telegram
for_window [class="drata-agent"] move absolute position 2160 px 0 px # for earlyoom notifications
for_window [app_id="drata-agent"] move absolute position 2160 px 0 px exec systemd-run --user --unit=systembus-notify /usr/bin/systembus-notify
exec systemd-run --user --unit=drata-agent /usr/bin/drata-agent

View File

@ -366,4 +366,7 @@ input 1133:16534:Logitech_ERGO_M575 {
include /etc/sway/config.d/* include /etc/sway/config.d/*
exec systemctl --user set-environment XDG_CURRENT_DESKTOP=sway exec systemctl --user set-environment XDG_CURRENT_DESKTOP=sway
exec systemctl --user set-environment DESKTOP_SESSION=sway
exec systemctl --user set-environment XDG_SESSION_DESKTOP=sway
exec systemctl --user set-environment XDG_SESSION_TYPE=wayland
include autostart include autostart

View File

@ -1,9 +1,14 @@
# Work computer # Work computer
exec /usr/bin/swaynag-battery --threshold 5
set $left_disp "Dell Inc. DELL U2724DE C9YPBP3" set $left_disp "Dell Inc. DELL U2724DE C9YPBP3"
set $right_disp "Dell Inc. DELL U2724D J3XFCP3" set $right_disp "Dell Inc. DELL U2724D J3XFCP3"
#set $left_disp "Dell Inc. DELL S2721DGF 8SVBP83" #set $left_disp "Dell Inc. DELL S2721DGF 8SVBP83"
output "Dell Inc. DELL S2721DGF 8SVBP83" pos 0 0
#set $right_disp "Dell Inc. DELL U2715H GH85D66Q08QS" #set $right_disp "Dell Inc. DELL U2715H GH85D66Q08QS"
output "Dell Inc. DELL U2715H GH85D66Q08QS" pos 2560 0
set $chat_workspace 10 set $chat_workspace 10
output $left_disp pos 0 0 output $left_disp pos 0 0
@ -11,7 +16,7 @@ output $left_disp mode 2560x1440@120.000Hz
output $right_disp pos 2560 0 output $right_disp pos 2560 0
output $right_disp mode 2560x1440@120.000Hz output $right_disp mode 2560x1440@120.000Hz
set $laptop "LG Display 0x06ED Unknown" set $laptop eDP-1
bindswitch lid:on output $laptop disable bindswitch lid:on output $laptop disable
bindswitch lid:off output $laptop enable bindswitch lid:off output $laptop enable

View File

@ -5,5 +5,10 @@ exec /usr/bin/swaynag-battery --threshold 5
#set $right_disp "Unknown 0x0791 0x00000000" #set $right_disp "Unknown 0x0791 0x00000000"
set $chat_workspace 10 set $chat_workspace 10
set $laptop eDP-1
bindswitch lid:on output $laptop disable
bindswitch lid:off output $laptop enable
output $left_disp pos 0 0 output $left_disp pos 0 0
output $right_disp pos 370 1440 output $right_disp pos 370 1440

11
.zshrc
View File

@ -5,11 +5,8 @@ zmodload zsh/pcre
# Virtualenv support # Virtualenv support
function _virtual_env_prompt () { function _virtual_env_prompt () {
# new pyvenv has a seperate variable for custom prompt value
REPLY=${VIRTUAL_ENV_PROMPT+${VIRTUAL_ENV_PROMPT}}
# Try to read the prompt name form pyvenv.cfg # Try to read the prompt name form pyvenv.cfg
if [[ -z "${REPLY}" && -f "$VIRTUAL_ENV/pyvenv.cfg" ]]; then if [[ -f "$VIRTUAL_ENV/pyvenv.cfg" ]]; then
# Matches lines with following syntax # Matches lines with following syntax
# prompt = 'cool prompt' # prompt = 'cool prompt'
# prompt = "cool prompt" # prompt = "cool prompt"
@ -32,7 +29,7 @@ function _virtual_env_prompt () {
fi fi
fi fi
# support old-school virtualenv # fall back to using venv folder name as prompt name
if [[ -z "${REPLY}" ]]; then if [[ -z "${REPLY}" ]]; then
REPLY=${VIRTUAL_ENV+(${VIRTUAL_ENV:t}) } REPLY=${VIRTUAL_ENV+(${VIRTUAL_ENV:t}) }
fi fi
@ -322,6 +319,8 @@ function ssh {
# i don't like that systemd by default uses a pager # i don't like that systemd by default uses a pager
export SYSTEMD_PAGER='' export SYSTEMD_PAGER=''
# Minio CLI is also stupid
export MC_DISABLE_PAGER=1
# set man max width # set man max width
export MANWIDTH=80 export MANWIDTH=80
@ -336,7 +335,7 @@ fi
# https://neovim.io/doc/user/various.html#less # https://neovim.io/doc/user/various.html#less
function vless { function vless {
/usr/share/nvim/runtime/macros/less.sh $@ /usr/share/nvim/runtime/scripts/less.sh $@
} }
# If running under windows with pageagent then use it # If running under windows with pageagent then use it