mirror of
https://github.com/artizirk/dotfiles.git
synced 2025-06-22 22:04:14 +03:00
Compare commits
17 Commits
ee48d1a87a
...
master
Author | SHA1 | Date | |
---|---|---|---|
639e7cc444 | |||
bef9896118 | |||
84ed0b01b8 | |||
44cb9c112e | |||
a607346209 | |||
16c9af02ff | |||
e26a30d88e | |||
0bb59ae237 | |||
9a19debb44 | |||
45a31ffdd0 | |||
4f2775b4e4 | |||
09883c3d40 | |||
9515ff6317 | |||
d12e19aeb6 | |||
d1cdea99af | |||
3761124be7 | |||
e50989e39a |
136
.bin/create_container
Executable file
136
.bin/create_container
Executable 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
3
.bin/no-sleep
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
systemd-inhibit --what=sleep:idle --mode=block bash -c 'while true; do sleep 1; done'
|
@ -1,2 +1,2 @@
|
||||
#!/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
|
||||
|
@ -1,4 +1,18 @@
|
||||
#!/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
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk, GLib
|
||||
@ -28,16 +42,7 @@ else:
|
||||
sys.exit(0)
|
||||
|
||||
elif sys.argv[1] == '--region':
|
||||
outputs = run(['swaymsg', '-t', 'get_outputs'], check=True, capture_output=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)
|
||||
run(["dulcepan", "-o", file_name], check=True)
|
||||
|
||||
elif sys.argv[1] == '--window':
|
||||
tree = run(['swaymsg', '-t', 'get_tree'], check=True, capture_output=True)
|
||||
|
47
.config/dulcepan.cfg
Normal file
47
.config/dulcepan.cfg
Normal 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
|
1
.config/environment.d/99-xcursor_size.conf
Normal file
1
.config/environment.d/99-xcursor_size.conf
Normal file
@ -0,0 +1 @@
|
||||
XCURSOR_SIZE=24
|
@ -10,6 +10,7 @@ for_window [app_id="quasselclient"] move to workspace $chat_workspace
|
||||
exec systemd-run --user --unit=quasselclient /usr/bin/quasselclient
|
||||
|
||||
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
|
||||
|
||||
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="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_window [app_id="drata-agent"] move absolute position 2160 px 0 px
|
||||
exec systemd-run --user --unit=drata-agent /usr/bin/drata-agent
|
||||
# for earlyoom notifications
|
||||
exec systemd-run --user --unit=systembus-notify /usr/bin/systembus-notify
|
||||
|
@ -366,4 +366,7 @@ input 1133:16534:Logitech_ERGO_M575 {
|
||||
|
||||
include /etc/sway/config.d/*
|
||||
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
|
||||
|
@ -1,9 +1,14 @@
|
||||
# Work computer
|
||||
exec /usr/bin/swaynag-battery --threshold 5
|
||||
|
||||
set $left_disp "Dell Inc. DELL U2724DE C9YPBP3"
|
||||
set $right_disp "Dell Inc. DELL U2724D J3XFCP3"
|
||||
|
||||
#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"
|
||||
output "Dell Inc. DELL U2715H GH85D66Q08QS" pos 2560 0
|
||||
|
||||
set $chat_workspace 10
|
||||
|
||||
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 mode 2560x1440@120.000Hz
|
||||
|
||||
set $laptop "LG Display 0x06ED Unknown"
|
||||
set $laptop eDP-1
|
||||
bindswitch lid:on output $laptop disable
|
||||
bindswitch lid:off output $laptop enable
|
||||
|
||||
|
@ -5,5 +5,10 @@ exec /usr/bin/swaynag-battery --threshold 5
|
||||
#set $right_disp "Unknown 0x0791 0x00000000"
|
||||
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 $right_disp pos 370 1440
|
||||
|
11
.zshrc
11
.zshrc
@ -5,11 +5,8 @@ zmodload zsh/pcre
|
||||
|
||||
# Virtualenv support
|
||||
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
|
||||
if [[ -z "${REPLY}" && -f "$VIRTUAL_ENV/pyvenv.cfg" ]]; then
|
||||
if [[ -f "$VIRTUAL_ENV/pyvenv.cfg" ]]; then
|
||||
# Matches lines with following syntax
|
||||
# prompt = 'cool prompt'
|
||||
# prompt = "cool prompt"
|
||||
@ -32,7 +29,7 @@ function _virtual_env_prompt () {
|
||||
fi
|
||||
fi
|
||||
|
||||
# support old-school virtualenv
|
||||
# fall back to using venv folder name as prompt name
|
||||
if [[ -z "${REPLY}" ]]; then
|
||||
REPLY=${VIRTUAL_ENV+(${VIRTUAL_ENV:t}) }
|
||||
fi
|
||||
@ -322,6 +319,8 @@ function ssh {
|
||||
|
||||
# i don't like that systemd by default uses a pager
|
||||
export SYSTEMD_PAGER=''
|
||||
# Minio CLI is also stupid
|
||||
export MC_DISABLE_PAGER=1
|
||||
|
||||
# set man max width
|
||||
export MANWIDTH=80
|
||||
@ -336,7 +335,7 @@ fi
|
||||
|
||||
# https://neovim.io/doc/user/various.html#less
|
||||
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
|
||||
|
Reference in New Issue
Block a user