first commit

This commit is contained in:
gpkvt 2023-07-14 22:39:37 +02:00
commit 66f1491f4e
56 changed files with 3144 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/private
.task/*.data

5
Makefile Normal file
View File

@ -0,0 +1,5 @@
install:
./install.zsh
update:
./install.zsh update

43
README.md Normal file
View File

@ -0,0 +1,43 @@
# Remarks
## Symlinks
`.config/*` should be copied or linked **into** `~/.config`
`.ssh/config` should be linked to `~/.ssh/config`
`.p10k.zsh` must be linked or copied to `~/.p10k.zsh`
`.tmux.conf` must be linked or copied to `~/.tmux.conf`
`.zshrc` must be linked or copied to `~/.zshrc`
`neofetch.conf` must be linked or copied to `/etc/neofetch.conf`
`.taskrc` should be linked or copied to `~/.taskrc` to work properly `.task` must be copied or linked to `~/.task`
## Fonts for p10k
`fonts` needs to be installed manually
## tmux
### Plugin and Theme Installation
Start `tmux` and press `<prefix>` (`ctrl+y`) followed by `I` (capital i) to install plugins and theme.
### Sessions
Sessionscripts in `tmux` might only work properly with `.ssh/config`
## Fixes
### Docker-Autocompletion
`docker-autocompletion` might report `compinit:501: no such file or directory: /usr/share/zsh/vendor-completions/_docker`. The file is a symlink to `/mnt/wsl/docker-desktop/cli-tools/usr/share/zsh/vendor-completions/_docker` which doesn't exist if Docker-Desktop isn't running. A workaround is to replace the symlink with an copy of the real file:
```
sudo rm -rf /usr/share/zsh/vendor-completions/_docker
sudo cp /mnt/wsl/docker-desktop/cli-tools/usr/share/zsh/vendor-completions/_docker /usr/share/zsh/vendor-completions/
sudo chattr +i /usr/share/zsh/vendor-completions/_docker
```

87
conky/conkyrc Normal file
View File

@ -0,0 +1,87 @@
-- Conky, a system monitor https://github.com/brndnmtthws/conky
--
-- This configuration file is Lua code. You can write code in here, and it will
-- execute when Conky loads. You can use it to generate your own advanced
-- configurations.
--
-- Try this (remove the `--`):
--
-- print("Loading Conky config")
--
-- For more on Lua, see:
-- https://www.lua.org/pil/contents.html
conky.config = {
alignment = 'top_left',
background = false,
border_width = 1,
cpu_avg_samples = 2,
default_color = 'white',
default_outline_color = 'white',
default_shade_color = 'white',
double_buffer = true,
draw_borders = false,
draw_graph_borders = true,
draw_outline = false,
draw_shades = false,
extra_newline = false,
font = 'DejaVu Sans Mono:size=12',
gap_x = 30,
gap_y = 60,
minimum_height = 5,
minimum_width = 5,
net_avg_samples = 2,
no_buffers = true,
out_to_console = false,
out_to_ncurses = false,
out_to_stderr = false,
out_to_x = true,
own_window = true,
own_window_class = 'Conky',
own_window_type = 'desktop',
show_graph_range = false,
show_graph_scale = false,
stippled_borders = 0,
update_interval = 1.0,
uppercase = false,
use_spacer = 'none',
use_xft = true,
own_window_transparent = true,
own_window_argb_visual = true
}
conky.text = [[
${color grey}Info:$color ${scroll 32 $sysname $nodename $machine}
$hr
${color grey}Uptime:$color $uptime
${color grey}Frequency (in GHz):$color $freq_g
${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 4}$color
$memgraph
${color grey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}CPU Usage:$color $cpu% ${cpubar 4}
$color${cpugraph}
${color grey}Processes:$color $processes ${color grey}Running:$color $running_processes
${color grey}Load:$color $loadavg $color
$loadgraph
$hr
${color grey}Battery:$color ${acpiacadapter ACAD} ${battery_percent BAT1}% ${battery_bar BAT1}
$hr
${color grey}File systems:
/ $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color grey}Disk IO:
${color grey} Read:$color $diskio_read ${color grey}${goto 230}Write:$color $diskio_write
$diskiograph
$hr
${color grey}Networking:
WLAN Up:$color ${upspeed wlp57s0} ${color grey}${goto 230}Down:$color ${downspeed wlp57s0}
${color grey}VPN Up:$color ${upspeed proton0} ${color grey}${goto 230}Down:$color ${downspeed proton0}
${color grey}LAN Up:$color ${upspeed enx00e04cf03bf0} ${color grey}${goto 230}Down:$color ${downspeed enx00e04cf03bf0}
$hr
${color grey}Name PID CPU% MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
${color lightgrey} ${top name 5} ${top pid 5} ${top cpu 5} ${top mem 5}
$hr
]]

6
conky/deploy.zsh Executable file
View File

@ -0,0 +1,6 @@
#! /bin/zsh
GIT_ROOT=$(git rev-parse --show-toplevel)
rm ~/.conkyrc
ln -s ${GIT_ROOT}/conky/conkyrc ~/.conkyrc

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

0
fonts/deploy.zsh Executable file
View File

6
git/deploy.zsh Executable file
View File

@ -0,0 +1,6 @@
#! /bin/zsh
GIT_ROOT=$(git rev-parse --show-toplevel)
rm ~/.gitconfig
ln -s ${GIT_ROOT}/git/gitconfig ~/.gitconfig

9
git/gitconfig Normal file
View File

@ -0,0 +1,9 @@
# This is Git's per-user configuration file.
[user]
name = gpkvt
email = git@21x9.org
[pull]
ff = only
[credential]
helper = store

84
install.zsh Executable file
View File

@ -0,0 +1,84 @@
#! /bin/zsh
tools=(
netcat-openbsd
aria2
bat
btop
bind9-dnsutils
debian-goodies
gron
htop
hub
icdiff
ioping
iotop
keychain
lsof
mlocate
mtr
ncdu
net-tools
nload
nmon
oping
powerline
progress
pv
ranger
reptyr
taskwarrior
tig
tmux
tmux-plugin-manager
unp
jq
nethogs
duf
)
GIT_ROOT=$(git rev-parse --show-toplevel)
cd ${GIT_ROOT}
for file in $(ls -1 ./**/deploy.zsh); do
chmod +x ${file}
echo "Executing ${file}"
${file}
done
echo "Checking zplug installation"
if [ $(dpkg-query -W -f='${Status}' zplug 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
echo "Installing zplug"
sudo DEBIAN_FRONTEND=noninteractive apt install zplug -yq
fi
echo "Executing zplug init script"
# zplug - manage plugins
source /usr/share/zplug/init.zsh
zplug "zsh-users/zsh-syntax-highlighting"
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-completions"
zplug "plugins/per-directory-history", from:oh-my-zsh
zplug "plugins/history-substring-search", from:oh-my-zsh
zplug "plugins/common-aliases", from:oh-my-zsh
zplug "plugins/nmap", from:oh-my-zsh
zplug "plugins/taskwarrior", from:oh-my-zsh
zplug "romkatv/powerlevel10k", use:powerlevel10k.zsh-theme
echo "Installing zplug plugins"
# zplug - install/load new plugins when zsh is started or reloaded
if ! zplug check --verbose; then
printf "Install? [y/N]: "
if read -q; then
echo; zplug install
fi
fi
echo "Installing tools"
# Install "standard" tools
for i in "${tools[@]}"; do
if [ $(dpkg-query -W -f='${Status}' ${i} 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
echo "Installing ${i}"
sudo DEBIAN_FRONTEND=noninteractive apt install ${i} -yq
fi
done

8
mc/deploy.zsh Executable file
View File

@ -0,0 +1,8 @@
#! /bin/zsh
GIT_ROOT=$(git rev-parse --show-toplevel)
# cp instead of ln -s because the files may get changed by mc when using it
cp ${GIT_ROOT}/mc/ini ~/.config/mc/
cp ${GIT_ROOT}/mc/panels.ini ~/.config/mc/
cp ${GIT_ROOT}/mc/solarized.ini ~/.config/mc/

152
mc/ini Normal file
View File

@ -0,0 +1,152 @@
[Midnight-Commander]
verbose=true
shell_patterns=true
auto_save_setup=true
preallocate_space=false
auto_menu=false
use_internal_view=true
use_internal_edit=true
clear_before_exec=true
confirm_delete=true
confirm_overwrite=true
confirm_execute=false
confirm_history_cleanup=true
confirm_exit=false
confirm_directory_hotlist_delete=false
confirm_view_dir=false
safe_delete=false
safe_overwrite=false
use_8th_bit_as_meta=false
mouse_move_pages_viewer=true
mouse_close_dialog=false
fast_refresh=false
drop_menus=false
wrap_mode=true
old_esc_mode=true
cd_symlinks=true
show_all_if_ambiguous=false
use_file_to_guess_type=true
alternate_plus_minus=false
only_leading_plus_minus=true
show_output_starts_shell=false
xtree_mode=false
file_op_compute_totals=true
classic_progressbar=true
use_netrc=true
ftpfs_always_use_proxy=false
ftpfs_use_passive_connections=true
ftpfs_use_passive_connections_over_proxy=false
ftpfs_use_unix_list_options=true
ftpfs_first_cd_then_ls=true
ignore_ftp_chattr_errors=true
editor_fill_tabs_with_spaces=false
editor_return_does_auto_indent=false
editor_backspace_through_tabs=false
editor_fake_half_tabs=true
editor_option_save_position=true
editor_option_auto_para_formatting=false
editor_option_typewriter_wrap=false
editor_edit_confirm_save=true
editor_syntax_highlighting=true
editor_persistent_selections=true
editor_drop_selection_on_copy=true
editor_cursor_beyond_eol=false
editor_cursor_after_inserted_block=false
editor_visible_tabs=true
editor_visible_spaces=true
editor_line_state=false
editor_simple_statusbar=false
editor_check_new_line=false
editor_show_right_margin=false
editor_group_undo=true
editor_state_full_filename=true
editor_ask_filename_before_edit=false
nice_rotating_dash=true
shadows=true
mcview_remember_file_position=false
auto_fill_mkdir_name=true
copymove_persistent_attr=true
pause_after_run=1
mouse_repeat_rate=100
double_click_speed=250
old_esc_mode_timeout=1000000
max_dirt_limit=10
num_history_items_recorded=60
vfs_timeout=60
ftpfs_directory_timeout=900
ftpfs_retry_seconds=30
fish_directory_timeout=900
editor_tab_spacing=8
editor_word_wrap_line_length=72
editor_option_save_mode=0
editor_backup_extension=~
editor_filesize_threshold=64M
editor_stop_format_chars=-+*\\,.;:&>
mcview_eof=
skin=/home/gpkvt/.config/mc/solarized.ini
filepos_max_saved_entries=1024
[Layout]
output_lines=0
left_panel_size=140
top_panel_size=0
message_visible=true
keybar_visible=true
xterm_title=true
command_prompt=true
menubar_visible=true
free_space=true
horizontal_split=false
vertical_equal=true
horizontal_equal=false
[Misc]
timeformat_recent=%b %e %H:%M
timeformat_old=%b %e %Y
ftp_proxy_host=gate
ftpfs_password=anonymous@
display_codepage=UTF-8
source_codepage=Other_8_bit
autodetect_codeset=
spell_language=en
clipboard_store=
clipboard_paste=
[Colors]
base_color=
screen=
color_terminals=
xterm-256color=
linux=
tmux-256color=
[Panels]
show_mini_info=true
kilobyte_si=false
mix_all_files=false
show_backups=true
show_dot_files=true
fast_reload=false
fast_reload_msg_shown=false
mark_moves_down=true
reverse_files_only=true
auto_save_setup_panels=false
navigate_with_arrows=false
panel_scroll_pages=true
panel_scroll_center=false
mouse_move_pages=true
filetype_mode=true
permission_mode=false
torben_fj_mode=false
quick_search_mode=2
select_flags=6
[Panelize]
Find *.orig after patching=find . -name \\*.orig -print
Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print
Find rejects after patching=find . -name \\*.rej -print
Modified git files=git ls-files --modified

0
mc/panels.ini Normal file
View File

152
mc/solarized.ini Normal file
View File

@ -0,0 +1,152 @@
[skin]
description = Solarized (mostly) dark skin for Midnight Commander.
[Lines]
# TODO: Description.
horiz =
vert =
lefttop =
righttop =
leftbottom =
rightbottom =
topmiddle =
bottommiddle =
leftmiddle =
rightmiddle =
cross =
dhoriz =
dvert =
dlefttop =
drighttop =
dleftbottom =
drightbottom =
dtopmiddle =
dbottommiddle =
dleftmiddle =
drightmiddle =
[core]
# Panes.
_default_ = lightgray;black ;; Default file colors/background.
selected = white;cyan ;; Color while hovering above a file/directory.
marked = white;brightmagenta ;; Marked line (using select - insert, ctrl-t, etc...)
markselect = red;cyan ;; Marked and selected.
header = white ;; Pane header (name,size,date titles).
reverse = white;brightmagenta ;; The direcotry PWD above the header, in focused pane.
# Input fields.
inputunchanged = lightgray;black ;; Input fields colors.
input = white;black ;; Input fields, modified.
inputhistory = red;lightgray ;; Input history controller.
inputmark = black;brightred ;; Input field marked text, if any.
disabled = brightcyan;lightgray ;; Disabled input fields in dialog boxes.
gauge = magenta;blue ;; Progress bars (while copying etc). TODO: What the text stands for?!
# Command line.
# TODO: Command prompt line colors. What are they?!
commandlinemark = black;brightred ;; Commandline marked text, if any.
commandhistory = red;brightblack ;; Command prompt history controller.
# TODO: What these stand for?
errors = black;green
statusbar = black;green
[popup]
# TODO: Probably user menu, screenlist, encoding, etc...
pmenunormal = black;green
pmenusel = black;green
pmenutitle = black;green
[dialog]
_default_ = black;lightgray ;; Default colors of dialogs (e.g. copy dialog).
dfocus = black;green ;; Controller colors (checkboxes, actions) in focus.
dhotnormal = red ;; Controllers hotkey color.
dhotfocus = red;green ;; Controllers hotkey color in focus.
dtitle = white;brightmagenta ;; Dialog title.
[error]
_default_ = black;lightgray ;; Default colors of error dialogs (e.g. overwrite permission).
errdfocus = black;green ;; Controller colors (checkboxes, actions) in focus.
errdhotnormal = red ;; Controllers hotkey color.
errdhotfocus = red;green ;; Controllers hotkey color in focus.
errdtitle = white;red ;; Error dialog title.
[filehighlight]
# View filehighlight.ini as reference.
directory = cyan;black ;; Directories.
executable = brightred;black ;; Executable files.
symlink = magenta;black ;; Symbolic links.
stalelink = lightgray;black ;; Broken links.
device = red;blueblack ;; An interface for a device driver.
special = black;blueblack ;; Pipes (FIFOs), sockets, block files, character files etc...
core = brightcyan;black ;; Core dump files, etc?...
temp = brightgreen;black ;; Bak, Temp, ~, etc...
archive = brightmagenta;black ;; Archives.
source = green;black ;; Source files.
media = brown;black ;; Interactive media.
graph = blue;black ;; Images, in other words.
database = brightgreen;black ;; DataBases, duh.
doc = red;black ;; Documents, duh.
[menu]
_default_ = black;lightgray ;; Default colors for menu while active.
menuinactive = black;lightgray ;; Colors for menu while inactive.
menuhot = red ;; Menu item hotkey.
menusel = black;green ;; Selected menu item.
menuhotsel = red;green ;; Selected menu item hotkey.
[help]
_default_ = black;lightgray ;; Default help tooltip text color/background.
helpitalic = brightmagenta ;; Help when italic.
helpbold = red ;; Help when bold.
helplink = cyan ;; Links insde help tooltip.
helpslink = green ;; Links insde help tooltip focused.
helptitle = white;brightmagenta ;; Help title.
[buttonbar]
#Bottom button bar (copy,move, etc...)
hotkey = red;brightblack ;; Hotkey colors (1-10).
button = white;brightblack ;; Button colors (text itself).
[editor]
# TODO: These.
_default_ = lightgray;black
editbold = green;blue
editmarked = lightgray;green
editwhitespace = brightblue;blue
editlinestate = brightmagenta
bookmark = white;red
bookmarkfound = black;green
editbg = lightgray;black
editframe = lightgray;black
editframeactive = lightgray;black
editframedrag = lightgray;black
[viewer]
# TODO: These.
viewunderline = brighmagenta;black
viewbold = brighmagenta;black
viewselected = brighmagenta;black
[widget-common]
# TODO: These.
sort-sign-up =
sort-sign-down =
[widget-panel]
# TODO: These.
hiddenfiles-sign-show =
hiddenfiles-sign-hide =
history-prev-item-sign = «
history-next-item-sign = »
history-show-list-sign = ^
[widget-scollbar]
# TODO: These.
first-vert-char =
last-vert-char =
first-horiz-char = «
last-horiz-char = »
current-char =
background-char =

6
neofetch/deploy.zsh Executable file
View File

@ -0,0 +1,6 @@
#! /bin/zsh
GIT_ROOT=$(git rev-parse --show-toplevel)
sudo rm /etc/neofetch.conf
sudo ln -s ${GIT_ROOT}/neofetch/neofetch.conf /etc/neofetch.conf

52
neofetch/neofetch.conf Normal file
View File

@ -0,0 +1,52 @@
print_info () {
prin
prin "------------------------------------------------------------"
info title
#info underline
prin "------------------------------------------------------------"
#info "Host" model
info "OS" distro
info "Kernel" kernel
info "Uptime" uptime
#info "Packages" packages
#prin "Updates" $(apt-get -q -y --ignore-hold --allow-change-held-packages --allow-unauthenticated -s dist-upgrade | /bin/grep ^Inst | wc -l)
info "Shell" shell
#info "Resolution" resolution
#info "DE" de
#info "WM" wm
#info "WM Theme" wm_theme
#info "Theme" theme
#info "Icons" icons
#info "Terminal" term
#info "Terminal Font" term_font
prin "------------------------------------------------------------"
#prin
info "CPU" cpu
#info "GPU" gpu
#info "CPUsage" cpu_usage
info "Memory" memory
info "Disk" disk
info "Battery" battery
# The lines below with a '#' in front are additional info functions
# that are disabled by default. Removing the '#' enables them and adding
# a '#' to the start disables them again. You can add a '#' to any of the
# lines in this function to disable their output.
#info "Font" font
#info "Song" song
info "LAN IP" local_ip
info "WAN IP" public_ip
#info "Users" users
#info "Birthday" birthday
#prin
prin "------------------------------------------------------------"
#prin "Weather" "$(curl wttr.in/?0?q?T | awk '/°(C|F)/ {printf $(NF-1) $(NF) " ("a")"} /,/ {a=$0}')"
#info cols
}

9
powerline/deploy.zsh Executable file
View File

@ -0,0 +1,9 @@
#! /bin/zsh
GIT_ROOT=$(git rev-parse --show-toplevel)
rm ~/.p10k.zsh
ln -s ${GIT_ROOT}/powerline/p10k.zsh ~/.p10k.zsh
rm -rf ~/.config/powerline/themes/tmux
ln -s ${GIT_ROOT}/powerline/themes/tmux ~/.config/powerline/themes/tmux

1750
powerline/p10k.zsh Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
{
"segments": {
"right": [
{
"function": "powerline.segments.common.net.external_ip"
},
{
"function": "powerline.segments.common.net.network_load"
},
{
"function": "powerline.segments.common.time.date"
},
{
"function": "powerline.segments.common.time.date",
"name": "time",
"args": {
"format": "%H:%M",
"istime": true
}
},
{
"function": "powerline.segments.common.net.hostname"
},
{
"function": "powerline.segments.tmux.attached_clients"
}
]
}
}

23
scripts/startup.sh Executable file
View File

@ -0,0 +1,23 @@
#!/bin/bash
# set scrolling speed
/usr/bin/xinput set-prop 13 "libinput Scrolling Pixel Distance" 25
# connect vpn
vpn=$(nmcli c | grep "Proton VPN" | awk -F" " '{print $1}')
echo ${vpn}
if [ ! -z "${vpn}" ]; then
/usr/bin/nmcli c down "${vpn}"
fi
/usr/bin/protonvpn-cli config --dns custom --ip 9.9.9.11 149.112.112.10
/usr/bin/protonvpn-cli c -f
if [ ! -z "${vpn}" ]; then
/usr/bin/nmcli c up "${vpn}"
fi
#sudo wg-quick up wg0
/usr/bin/protonvpn

6
task/deploy.zsh Executable file
View File

@ -0,0 +1,6 @@
#! /bin/zsh
GIT_ROOT=$(git rev-parse --show-toplevel)
rm ~/.taskrc
ln -s ${GIT_ROOT}/task/taskrc ~/.taskrc

35
task/taskrc Normal file
View File

@ -0,0 +1,35 @@
# [Created by task 2.5.3 6/4/2022 22:30:58]
# Taskwarrior program configuration file.
# For more documentation, see http://taskwarrior.org or try 'man task', 'man task-color',
# 'man task-sync' or 'man taskrc'
# Here is an example of entries that use the default, override and blank values
# variable=foo -- By specifying a value, this overrides the default
# variable= -- By specifying no value, this means no default
# #variable=foo -- By commenting out the line, or deleting it, this uses the default
# Use the command 'task show' to see all defaults and overrides
# Files
data.location=~/.task
# Color theme (uncomment one to use)
#include /usr/share/taskwarrior/light-16.theme
#include /usr/share/taskwarrior/light-256.theme
#include /usr/share/taskwarrior/dark-16.theme
#include /usr/share/taskwarrior/dark-256.theme
#include /usr/share/taskwarrior/dark-red-256.theme
#include /usr/share/taskwarrior/dark-green-256.theme
#include /usr/share/taskwarrior/dark-blue-256.theme
#include /usr/share/taskwarrior/dark-violets-256.theme
#include /usr/share/taskwarrior/dark-yellow-green.theme
include /usr/share/taskwarrior/dark-gray-256.theme
#include /usr/share/taskwarrior/dark-gray-blue-256.theme
#include /usr/share/taskwarrior/solarized-dark-256.theme
#include /usr/share/taskwarrior/solarized-light-256.theme
#include /usr/share/taskwarrior/no-color.theme
taskd.trust=ignore hostname
news.version=2.6.0
include ~/.taskrc-credentials

36
tmux/checkmail.sh Executable file
View File

@ -0,0 +1,36 @@
#!/bin/bash
session="checkmail"
tmux new-session -d -s ${session}
window=1
tmux rename-window -t ${session}:${window} 'maillog'
tmux select-window -t ${session}:${window}
tmux send-keys 'clear;ssh proxy1 "clear;tail /var/log/mail.log -f"' C-m
tmux select-pane -T 'mail.log 1'
tmux split-window -v
tmux select-pane -T 'mail.log 2'
tmux send-keys 'clear;ssh proxy2 "clear;tail /var/log/mail.log -f"' C-m
window=2
tmux new-window -t ${session}:${window}
tmux select-window -t ${session}:${window}
tmux rename-window -t ${session}:${window} 'mailq'
tmux send-keys 'clear;ssh proxy1' C-m 'clear;mailq' C-m
tmux select-pane -T 'proxy1'
tmux split-window -v
tmux select-pane -T 'proxy2'
tmux send-keys 'clear;ssh proxy2' C-m 'clear;mailq' C-m
window=3
tmux new-window -t ${session}:${window}
tmux select-window -t ${session}:${window}
tmux rename-window -t ${session}:${window} 'salt'
tmux send-keys 'clear;ssh salt' C-m
tmux select-pane -T 'salt'
tmux select-window -t ${session}:2
tmux attach-session -t ${session}

6
tmux/deploy.zsh Executable file
View File

@ -0,0 +1,6 @@
#! /bin/zsh
GIT_ROOT=$(git rev-parse --show-toplevel)
rm ~/.tmux.conf
ln -s ${GIT_ROOT}/tmux/tmux.conf ~/.tmux.conf

5
tmux/shared.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
echo "Use 'tmux -S /tmp/tmux_shared new-session -s shared' to start a new shared session."
echo "Change group ownership: 'chgrp tmuxshared /tmp/tmux_shared'"
echo "Execute 'tmux -S /tmp/shared attach -t shared' to join in, use '-r' for read-only mode."

43
tmux/tmux.conf Normal file
View File

@ -0,0 +1,43 @@
# Install plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# set -g @plugin 'tmux-plugins/tmux-resurrect'
# set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-mighty-scroll'
set -g @plugin 'tmux-plugins/tmux-logging'
set -g @plugin 'jaclu/tmux-menus'
# Activate continuum restore
# set -g @continuum-restore 'on'
# Activate menu plugin
set -g @menus_trigger 'F9'
set -g @menus_without_prefix 1
# Defaults
set -s default-terminal 'tmux-256color'
set -g mouse on
# Show pane status
set -g pane-border-status top
# Start index from 1 not 0
set -g base-index 1
setw -g pane-base-index 1
# remap prefix from 'C-b' to 'C-y'
unbind C-b
set-option -g prefix C-y
bind-key C-y send-prefix
# switch panes using Alt-arrow without prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# exit session on C-x (use 'bind -n' to use it without prefix)
bind C-x confirm-before -p "kill-session #S? (y/n)" "kill-session"
run '/usr/share/tmux-plugin-manager/tpm'
run-shell "powerline-config tmux setup"

9
zsh/aliases.zsh Normal file
View File

@ -0,0 +1,9 @@
# Aliases
alias ls='ls --color=never'
alias ll='ls -lah --color=never'
alias grep='grep --color=auto'
alias a='tmux attach'
alias bat='batcat'
alias rep='reptyr'
alias tools="echo \"${tools}\""
unalias duf 2> /dev/null

6
zsh/completions.zsh Normal file
View File

@ -0,0 +1,6 @@
# Use modern completion system
autoload -Uz compinit
compinit
zstyle ':completion:*' menu select
fpath=(~/dotfiles/zsh/zsh-completions $fpath)

6
zsh/deploy.zsh Executable file
View File

@ -0,0 +1,6 @@
#! /bin/zsh
GIT_ROOT=$(git rev-parse --show-toplevel)
rm ~/.zshrc
ln -s ${GIT_ROOT}/zsh/zshrc ~/.zshrc

6
zsh/exports.zsh Normal file
View File

@ -0,0 +1,6 @@
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export PATH=$PATH:/usr/local/sbin:~/dotfiles/tmux:~/dotfiles/bin
export EDITOR=mcedit
export TPM2_PKCS11_LOG_LEVEL=0

5
zsh/history.zsh Normal file
View File

@ -0,0 +1,5 @@
# Keep 5000 lines of history within the shell and save it to ~/.zsh_history:
setopt histignorealldups sharehistory
HISTSIZE=5000
SAVEHIST=5000
HISTFILE=~/.zsh_history

63
zsh/keybindings.zsh Normal file
View File

@ -0,0 +1,63 @@
# Use vi keybindings
bindkey -e
function detect-clipboard() {
emulate -L zsh
if [[ "${OSTYPE}" == darwin* ]] && (( ${+commands[pbcopy]} )) && (( ${+commands[pbpaste]} )); then
function clipcopy() { cat "${1:-/dev/stdin}" | pbcopy; }
function clippaste() { pbpaste; }
elif [[ "${OSTYPE}" == (cygwin|msys)* ]]; then
function clipcopy() { cat "${1:-/dev/stdin}" > /dev/clipboard; }
function clippaste() { cat /dev/clipboard; }
elif (( $+commands[clip.exe] )) && (( $+commands[powershell.exe] )); then
function clipcopy() { cat "${1:-/dev/stdin}" | clip.exe; }
function clippaste() { powershell.exe -noprofile -command Get-Clipboard; }
elif [ -n "${WAYLAND_DISPLAY:-}" ] && (( ${+commands[wl-copy]} )) && (( ${+commands[wl-paste]} )); then
function clipcopy() { cat "${1:-/dev/stdin}" | wl-copy &>/dev/null &|; }
function clippaste() { wl-paste; }
elif [ -n "${DISPLAY:-}" ] && (( ${+commands[xsel]} )); then
function clipcopy() { cat "${1:-/dev/stdin}" | xsel --clipboard --input; }
function clippaste() { xsel --clipboard --output; }
elif [ -n "${DISPLAY:-}" ] && (( ${+commands[xclip]} )); then
function clipcopy() { cat "${1:-/dev/stdin}" | xclip -selection clipboard -in &>/dev/null &|; }
function clippaste() { xclip -out -selection clipboard; }
elif (( ${+commands[lemonade]} )); then
function clipcopy() { cat "${1:-/dev/stdin}" | lemonade copy; }
function clippaste() { lemonade paste; }
elif (( ${+commands[doitclient]} )); then
function clipcopy() { cat "${1:-/dev/stdin}" | doitclient wclip; }
function clippaste() { doitclient wclip -r; }
elif (( ${+commands[win32yank]} )); then
function clipcopy() { cat "${1:-/dev/stdin}" | win32yank -i; }
function clippaste() { win32yank -o; }
elif [[ $OSTYPE == linux-android* ]] && (( $+commands[termux-clipboard-set] )); then
function clipcopy() { cat "${1:-/dev/stdin}" | termux-clipboard-set; }
function clippaste() { termux-clipboard-get; }
elif [ -n "${TMUX:-}" ] && (( ${+commands[tmux]} )); then
function clipcopy() { tmux load-buffer "${1:--}"; }
function clippaste() { tmux save-buffer -; }
else
function _retry_clipboard_detection_or_fail() {
local clipcmd="${1}"; shift
if detect-clipboard; then
"${clipcmd}" "$@"
else
print "${clipcmd}: Platform $OSTYPE not supported or xclip/xsel not installed" >&2
return 1
fi
}
function clipcopy() { _retry_clipboard_detection_or_fail clipcopy "$@"; }
function clippaste() { _retry_clipboard_detection_or_fail clippaste "$@"; }
return 1
fi
}
detect-clipboard || true
copybuffer () {
echo $BUFFER | clipcopy
}
zle -N copybuffer
bindkey "^O" copybuffer

1
zsh/neofetch.zsh Normal file
View File

@ -0,0 +1 @@
neofetch --config /etc/neofetch.conf

10
zsh/powerlevel.zsh Normal file
View File

@ -0,0 +1,10 @@
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
typeset -g POWERLEVEL9K_INSTANT_PROMPT=on

5
zsh/ssh.zsh Normal file
View File

@ -0,0 +1,5 @@
if [ -z ${TMUX} ]; then
# Add SSH keys to keychain
find ~/.ssh -type f -regextype egrep -regex '.*/id_[^.]+$' | xargs /usr/bin/keychain --nogui
source ~/.keychain/$(hostname)-sh
fi

5
zsh/tasks.zsh Normal file
View File

@ -0,0 +1,5 @@
# Show tasks
if nc -zw1 192.168.42.100 53589; then
/usr/bin/task sync
fi
/usr/bin/task list

2
zsh/tmux.zsh Normal file
View File

@ -0,0 +1,2 @@
# Start tmux
# if [ -z ${TMUX} ]; then tmux; fi

2
zsh/variables.zsh Normal file
View File

@ -0,0 +1,2 @@
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#555555"
HISTORY_START_WITH_GLOBAL=true

23
zsh/zplug.zsh Executable file
View File

@ -0,0 +1,23 @@
# zplug - manage plugins
source /usr/share/zplug/init.zsh
zplug "zsh-users/zsh-syntax-highlighting"
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-completions"
zplug "plugins/per-directory-history", from:oh-my-zsh
zplug "plugins/history-substring-search", from:oh-my-zsh
zplug "plugins/common-aliases", from:oh-my-zsh
zplug "plugins/nmap", from:oh-my-zsh
zplug "plugins/taskwarrior", from:oh-my-zsh
HISTORY_START_WITH_GLOBAL=true
zplug "romkatv/powerlevel10k", use:powerlevel10k.zsh-theme
# zplug - install/load new plugins when zsh is started or reloaded
if ! zplug check --verbose; then
printf "Install? [y/N]: "
if read -q; then
echo; zplug install
fi
fi
zplug load

429
zsh/zsh-completions/_bw Normal file
View File

@ -0,0 +1,429 @@
#compdef _bw bw
function _bw {
local -a commands
_arguments -C \
'--pretty[Format output. JSON is tabbed with two spaces.]' \
'--raw[Return raw output instead of a descriptive message.]' \
'--response[Return a JSON formatted version of response output.]' \
'--cleanexit[Exit with a success exit code (0) unless an error is thrown.]' \
'--quiet[Don'"'"'t return anything to stdout.]' \
'--nointeraction[Do not prompt for interactive user input.]' \
'--session[Pass session key instead of reading from env.]' \
'(-v --version)'{-v,--version}'[output the version number]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"1: :->cmnds" \
"*::arg:->args"
case $state in
cmnds)
commands=(
"login:Log into a user account."
"logout:Log out of the current user account."
"lock:Lock the vault and destroy active session keys."
"unlock:Unlock the vault and return a new session key."
"sync:Pull the latest vault data from server."
"generate:Generate a password/passphrase."
"encode:Base 64 encode stdin."
"config:Configure CLI settings."
"update:Check for updates."
"completion:Generate shell completions."
"status:Show server, last sync, user information, and vault status."
"serve:Start a RESTful API webserver."
"list:List an array of objects from the vault."
"get:Get an object from the vault."
"create:Create an object in the vault."
"edit:Edit an object from the vault."
"delete:Delete an object from the vault."
"restore:Restores an object from the trash."
"move:Move an item to an organization."
"confirm:Confirm an object to the organization."
"import:Import vault data from a file."
"export:Export vault data to a CSV or JSON file."
"share:--DEPRECATED-- Move an item to an organization."
"send:Work with Bitwarden sends. A Send can be quickly created using this command or subcommands can be used to fine-tune the Send"
"receive:Access a Bitwarden Send from a url"
)
_describe "command" commands
;;
esac
case "$words[1]" in
login)
_bw_login
;;
logout)
_bw_logout
;;
lock)
_bw_lock
;;
unlock)
_bw_unlock
;;
sync)
_bw_sync
;;
generate)
_bw_generate
;;
encode)
_bw_encode
;;
config)
_bw_config
;;
update)
_bw_update
;;
completion)
_bw_completion
;;
status)
_bw_status
;;
serve)
_bw_serve
;;
list)
_bw_list
;;
get)
_bw_get
;;
create)
_bw_create
;;
edit)
_bw_edit
;;
delete)
_bw_delete
;;
restore)
_bw_restore
;;
move)
_bw_move
;;
confirm)
_bw_confirm
;;
import)
_bw_import
;;
export)
_bw_export
;;
share)
_bw_share
;;
send)
_bw_send
;;
receive)
_bw_receive
;;
esac
}
function _bw_login {
_arguments -C \
'--method[Two-step login method.]' \
'--code[Two-step login code.]' \
'--sso[Log in with Single-Sign On.]' \
'--apikey[Log in with an Api Key.]' \
'--passwordenv[Environment variable storing your password]' \
'--passwordfile[Path to a file containing your password as its first line]' \
'--check[Check login status.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_logout {
}
function _bw_lock {
}
function _bw_unlock {
_arguments -C \
'--check[Check lock status.]' \
'--passwordenv[Environment variable storing your password]' \
'--passwordfile[Path to a file containing your password as its first line]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_sync {
_arguments -C \
'(-f --force)'{-f,--force}'[Force a full sync.]' \
'--last[Get the last sync date.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_generate {
_arguments -C \
'(-u --uppercase)'{-u,--uppercase}'[Include uppercase characters.]' \
'(-l --lowercase)'{-l,--lowercase}'[Include lowercase characters.]' \
'(-n --number)'{-n,--number}'[Include numeric characters.]' \
'(-s --special)'{-s,--special}'[Include special characters.]' \
'(-p --passphrase)'{-p,--passphrase}'[Generate a passphrase.]' \
'--length[Length of the password.]' \
'--words[Number of words.]' \
'--separator[Word separator.]' \
'(-c --capitalize)'{-c,--capitalize}'[Title case passphrase.]' \
'--includeNumber[Passphrase includes number.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_encode {
}
function _bw_config {
_arguments -C \
'--web-vault[Provides a custom web vault URL that differs from the base URL.]' \
'--api[Provides a custom API URL that differs from the base URL.]' \
'--identity[Provides a custom identity URL that differs from the base URL.]' \
'--icons[Provides a custom icons service URL that differs from the base URL.]' \
'--notifications[Provides a custom notifications URL that differs from the base URL.]' \
'--events[Provides a custom events URL that differs from the base URL.]' \
'--key-connector[Provides the URL for your Key Connector server.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_update {
}
function _bw_completion {
_arguments -C \
'--shell[Shell to generate completions for.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_status {
}
function _bw_serve {
_arguments -C \
'--hostname[The hostname to bind your API webserver to.]' \
'--port[The port to run your API webserver on.]' \
'--disable-origin-protection[If set, allows requests with origin header. Warning, this option exists for backwards compatibility reasons and exposes your environment to known CSRF attacks.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_list {
_arguments -C \
'--search[Perform a search on the listed objects.]' \
'--url[Filter items of type login with a url-match search.]' \
'--folderid[Filter items by folder id.]' \
'--collectionid[Filter items by collection id.]' \
'--organizationid[Filter items or collections by organization id.]' \
'--trash[Filter items that are deleted and in the trash.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_get {
_arguments -C \
'--itemid[Attachment'"'"'s item id.]' \
'--output[Output directory or filename for attachment.]' \
'--organizationid[Organization id for an organization object.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_create {
_arguments -C \
'--file[Path to file for attachment.]' \
'--itemid[Attachment'"'"'s item id.]' \
'--organizationid[Organization id for an organization object.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_edit {
_arguments -C \
'--organizationid[Organization id for an organization object.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_delete {
_arguments -C \
'--itemid[Attachment'"'"'s item id.]' \
'--organizationid[Organization id for an organization object.]' \
'(-p --permanent)'{-p,--permanent}'[Permanently deletes the item instead of soft-deleting it (item only).]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_restore {
}
function _bw_move {
}
function _bw_confirm {
_arguments -C \
'--organizationid[Organization id for an organization object.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_import {
_arguments -C \
'--formats[List formats]' \
'--organizationid[ID of the organization to import to.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_export {
_arguments -C \
'--output[Output directory or filename.]' \
'--format[Export file format.]' \
'--password[Use password to encrypt instead of your Bitwarden account encryption key. Only applies to the encrypted_json format.]' \
'--organizationid[Organization id for an organization.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_share {
}
function _bw_send {
local -a commands
_arguments -C \
'(-f --file)'{-f,--file}'[Specifies that <data> is a filepath]' \
'(-d --deleteInDays)'{-d,--deleteInDays}'[The number of days in the future to set deletion date, defaults to 7]' \
'(-a --maxAccessCount)'{-a,--maxAccessCount}'[The amount of max possible accesses.]' \
'--hidden[Hide <data> in web by default. Valid only if --file is not set.]' \
'(-n --name)'{-n,--name}'[The name of the Send. Defaults to a guid for text Sends and the filename for files.]' \
'--notes[Notes to add to the Send.]' \
'--fullObject[Specifies that the full Send object should be returned rather than just the access url.]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"1: :->cmnds" \
"*::arg:->args"
case $state in
cmnds)
commands=(
"list:List all the Sends owned by you"
"template:Get json templates for send objects"
"get:Get Sends owned by you."
"receive:Access a Bitwarden Send from a url"
"create:create a Send"
"edit:edit a Send"
"remove-password:removes the saved password from a Send."
"delete:delete a Send"
)
_describe "command" commands
;;
esac
case "$words[1]" in
list)
_bw_send_list
;;
template)
_bw_send_template
;;
get)
_bw_send_get
;;
receive)
_bw_send_receive
;;
create)
_bw_send_create
;;
edit)
_bw_send_edit
;;
remove-password)
_bw_send_remove-password
;;
delete)
_bw_send_delete
;;
esac
}
function _bw_send_list {
}
function _bw_send_template {
}
function _bw_send_get {
_arguments -C \
'--output[Output directory or filename for attachment.]' \
'--text[Specifies to return the text content of a Send]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_send_receive {
_arguments -C \
'--password[Password needed to access the Send.]' \
'--passwordenv[Environment variable storing the Send'"'"'s password]' \
'--passwordfile[Path to a file containing the Sends password as its first line]' \
'--obj[Return the Send'"'"'s json object rather than the Send's content]' \
'--output[Specify a file path to save a File-type Send to]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_send_create {
_arguments -C \
'--file[file to Send. Can also be specified in parent'"'"'s JSON.]' \
'--text[text to Send. Can also be specified in parent'"'"'s JSON.]' \
'--hidden[text hidden flag. Valid only with the --text option.]' \
'--password[optional password to access this Send. Can also be specified in JSON]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_send_edit {
_arguments -C \
'--itemid[Overrides the itemId provided in [encodedJson]]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}
function _bw_send_remove-password {
}
function _bw_send_delete {
}
function _bw_receive {
_arguments -C \
'--password[Password needed to access the Send.]' \
'--passwordenv[Environment variable storing the Send'"'"'s password]' \
'--passwordfile[Path to a file containing the Sends password as its first line]' \
'--obj[Return the Send'"'"'s json object rather than the Send's content]' \
'--output[Specify a file path to save a File-type Send to]' \
'(-h --help)'{-h,--help}'[output usage information]' \
"*::arg:->args"
}

18
zsh/zshrc Normal file
View File

@ -0,0 +1,18 @@
# Exit if mc is active
[[ -v MC_SID ]] && return
# source settings
source ~/dotfiles/zsh/exports.zsh
source ~/dotfiles/zsh/variables.zsh
source ~/dotfiles/zsh/keybindings.zsh
source ~/dotfiles/zsh/history.zsh
source ~/dotfiles/zsh/aliases.zsh
source ~/dotfiles/zsh/completions.zsh
source ~/dotfiles/zsh/zplug.zsh
source ~/dotfiles/zsh/neofetch.zsh
source ~/dotfiles/zsh/ssh.zsh
source ~/dotfiles/zsh/tasks.zsh
source ~/dotfiles/zsh/tmux.zsh
# always execute powerlevel last to avoid problems with instant prompt
source ~/dotfiles/zsh/powerlevel.zsh