Compare commits
10 Commits
bed6b665ef
...
0232a1def2
Author | SHA1 | Date |
---|---|---|
Frieder Schlesier | 0232a1def2 | |
Frieder Schlesier | 05c6dc5cd7 | |
Frieder Schlesier | 2d9fcee0dc | |
Frieder Schlesier | 46b6522a1d | |
Frieder Schlesier | 039a897afa | |
Frieder Schlesier | 6037bcbf6f | |
Frieder Schlesier | 0022753800 | |
fschl | 3831dc151e | |
Frieder Schlesier | fbd3688b28 | |
Frieder Schlesier | 0aa12c59af |
5
.aliases
5
.aliases
|
@ -6,7 +6,7 @@ alias rs='rsync --progress -vur '
|
|||
alias up='sudo apt update && sudo apt upgrade'
|
||||
alias upnodock='sudo apt-mark hold docker-ce docker-ce-cli && sudo apt update && sudo apt upgrade && sudo apt-mark unhold docker-ce docker-ce-cli'
|
||||
|
||||
alias cat='batcat'
|
||||
alias cat='bat'
|
||||
alias rg='ripgrep'
|
||||
alias ll='ls -ahlF'
|
||||
alias la='ls -Ah'
|
||||
|
@ -41,7 +41,10 @@ alias dih="docker container inspect -f '{{ .Config.Hostname }}'" # call with <co
|
|||
alias dstats="docker stats "'$(sudo docker ps -aq)' # shows stats thingy for all containers
|
||||
|
||||
alias drmsc="docker container prune"
|
||||
#alias drmsc="docker container ls -a | grep Exited | awk '{print $1}' | xargs docker container rm" # removes stopped containers
|
||||
|
||||
alias drmdi="docker image prune"
|
||||
#alias drmdi="docker image remove "'$(docker image ls -q -f dangling=true)' # removes non-tagged images
|
||||
|
||||
# docker swarm
|
||||
alias dss='docker stack services '
|
||||
|
|
1
.bashrc
1
.bashrc
|
@ -118,7 +118,6 @@ if [ -z "$SSH_AUTH_SOCK" ] ; then
|
|||
# ssh-add
|
||||
fi
|
||||
|
||||
|
||||
# BEGIN_KITTY_SHELL_INTEGRATION
|
||||
if test -n "$KITTY_INSTALLATION_DIR" -a -e "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; then source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; fi
|
||||
# END_KITTY_SHELL_INTEGRATION
|
||||
|
|
|
@ -0,0 +1,381 @@
|
|||
# vim:fileencoding=utf-8:ft=conf
|
||||
|
||||
# Font family. You can also specify different fonts for the
|
||||
# bold/italic/bold-italic variants. By default they are derived automatically,
|
||||
# by the OSes font system. Setting them manually is useful for font families
|
||||
# that have many weight variants like Book, Medium, Thick, etc. For example:
|
||||
# font_family Operator Mono Book
|
||||
# bold_font Operator Mono Medium
|
||||
# italic_font Operator Mono Book Italic
|
||||
# bold_italic_font Operator Mono Medium Italic
|
||||
#
|
||||
# You can get a list of full family names available on your computer by running
|
||||
# kitty list-fonts
|
||||
font_family Meslo LG M Regular
|
||||
italic_font auto
|
||||
bold_font auto
|
||||
bold_italic_font auto
|
||||
|
||||
# Font size (in pts)
|
||||
font_size 10.0
|
||||
|
||||
# The amount the font size is changed by (in pts) when increasing/decreasing
|
||||
# the font size in a running terminal.
|
||||
font_size_delta 2
|
||||
|
||||
|
||||
# Adjust the line height.
|
||||
# You can use either numbers, which are interpreted as pixels or percentages
|
||||
# (number followed by %), which are interpreted as percentages of the
|
||||
# unmodified line height. You can use negative pixels or percentages less than
|
||||
# 100% to reduce line height (but this might cause rendering artifacts).
|
||||
adjust_line_height 0
|
||||
|
||||
# Change the sizes of the lines used for the box drawing unicode characters
|
||||
# These values are in pts. They will be scaled by the monitor DPI to arrive at
|
||||
# a pixel value. There must be four values corresponding to thin, normal, thick,
|
||||
# and very thick lines;
|
||||
box_drawing_scale 0.001, 1, 1.5, 2
|
||||
|
||||
# The opacity of the background. A number between 0 and 1, where 1 is opaque and 0 is fully transparent.
|
||||
# This will only work if supported by the OS (for instance, when using a compositor under X11). Note
|
||||
# that it only sets the default background color's opacity. This is so that
|
||||
# things like the status bar in vim, powerline prompts, etc. still look good.
|
||||
# But it means that if you use a color theme with a background color in your
|
||||
# editor, it will not be rendered as transparent. Instead you should change the
|
||||
# default background color in your kitty config and not use a background color
|
||||
# in the editor color scheme. Or use the escape codes to set the terminals
|
||||
# default colors in a shell script to launch your editor.
|
||||
# Be aware that using a value less than 1.0 is a (possibly significant) performance hit.
|
||||
background_opacity 1.0
|
||||
|
||||
|
||||
# The cursor shape can be one of (block, beam, underline)
|
||||
cursor_shape block
|
||||
|
||||
# The interval (in seconds) at which to blink the cursor. Set to zero to
|
||||
# disable blinking. Note that numbers smaller than repaint_delay will be
|
||||
# limited to repaint_delay.
|
||||
cursor_blink_interval 0.0
|
||||
|
||||
# Stop blinking cursor after the specified number of seconds of keyboard inactivity. Set to
|
||||
# zero to never stop blinking.
|
||||
cursor_stop_blinking_after 15.0
|
||||
|
||||
# Number of lines of history to keep in memory for scrolling back
|
||||
scrollback_lines 10000
|
||||
|
||||
# Program with which to view scrollback in a new window. The scrollback buffer is passed as
|
||||
# STDIN to this program. If you change it, make sure the program you use can
|
||||
# handle ANSI escape sequences for colors and text formatting.
|
||||
scrollback_pager less +G -R
|
||||
|
||||
# When viewing scrollback in a new window, put it in a new tab as well
|
||||
scrollback_in_new_tab no
|
||||
|
||||
# Wheel scroll multiplier (modify the amount scrolled by the mouse wheel). Use negative
|
||||
# numbers to change scroll direction.
|
||||
wheel_scroll_multiplier 5.0
|
||||
|
||||
# The interval between successive clicks to detect double/triple clicks (in seconds)
|
||||
click_interval 0.5
|
||||
|
||||
# Characters considered part of a word when double clicking. In addition to these characters
|
||||
# any character that is marked as an alpha-numeric character in the unicode
|
||||
# database will be matched.
|
||||
select_by_word_characters :@-./_~?&=%+#
|
||||
|
||||
# Hide mouse cursor after the specified number of seconds of the mouse not being used. Set to
|
||||
# zero to disable mouse cursor hiding.
|
||||
mouse_hide_wait 3.0
|
||||
|
||||
# Set the active window to the window under the mouse when moving the mouse around
|
||||
focus_follows_mouse no
|
||||
|
||||
# The enabled window layouts. A comma separated list of layout names. The special value * means
|
||||
# all layouts. The first listed layout will be used as the startup layout.
|
||||
# For a list of available layouts, see the file layouts.py
|
||||
enabled_layouts *
|
||||
|
||||
# If enabled, the window size will be remembered so that new instances of kitty will have the same
|
||||
# size as the previous instance. If disabled, the window will initially have size configured
|
||||
# by initial_window_width/height, in pixels.
|
||||
remember_window_size no
|
||||
initial_window_width 640
|
||||
initial_window_height 400
|
||||
|
||||
# Delay (in milliseconds) between screen updates. Decreasing it, increases
|
||||
# frames-per-second (FPS) at the cost of more CPU usage. The default value
|
||||
# yields ~100 FPS which is more than sufficient for most uses.
|
||||
repaint_delay 10
|
||||
|
||||
# Delay (in milliseconds) before input from the program running in the terminal
|
||||
# is processed. Note that decreasing it will increase responsiveness, but also
|
||||
# increase CPU usage and might cause flicker in full screen programs that
|
||||
# redraw the entire screen on each loop, because kitty is so fast that partial
|
||||
# screen updates will be drawn.
|
||||
input_delay 3
|
||||
|
||||
# Visual bell duration. Flash the screen when a bell occurs for the specified number of
|
||||
# seconds. Set to zero to disable.
|
||||
visual_bell_duration 0.0
|
||||
|
||||
# Enable/disable the audio bell. Useful in environments that require silence.
|
||||
enable_audio_bell yes
|
||||
|
||||
# The modifier keys to press when clicking with the mouse on URLs to open the URL
|
||||
open_url_modifiers ctrl+shift
|
||||
|
||||
# The program with which to open URLs that are clicked on. The special value "default" means to
|
||||
# use the operating system's default URL handler.
|
||||
open_url_with default
|
||||
|
||||
# The modifiers to use rectangular selection (i.e. to select text in a
|
||||
# rectangular block with the mouse)
|
||||
rectangle_select_modifiers ctrl+alt
|
||||
|
||||
# Choose whether to use the system implementation of wcwidth() (used to
|
||||
# control how many cells a character is rendered in). If you use the system
|
||||
# implementation, then kitty and any programs running in it will agree. The
|
||||
# problem is that system implementations often are based on outdated unicode
|
||||
# standards and get the width of many characters, such as emoji, wrong. So if
|
||||
# you are using kitty with programs that have their own up-to-date wcwidth()
|
||||
# implementation, set this option to no, otherwise set it to yes.
|
||||
use_system_wcwidth no
|
||||
|
||||
# The value of the TERM environment variable to set
|
||||
term xterm-kitty
|
||||
|
||||
# The width (in pts) of window borders. Will be rounded to the nearest number of pixels based on screen resolution.
|
||||
# Note that borders are displayed only when more than one window is visible. They are meant to separate multiple windows.
|
||||
window_border_width 1
|
||||
|
||||
# The window margin (in pts) (blank area outside the border)
|
||||
window_margin_width 0
|
||||
|
||||
# The window padding (in pts) (blank area between the text and the window border)
|
||||
window_padding_width 0
|
||||
|
||||
# The color for the border of the active window
|
||||
active_border_color #00ff00
|
||||
|
||||
# The color for the border of inactive windows
|
||||
inactive_border_color #cccccc
|
||||
|
||||
# Fade the text in inactive windows by the specified amount (a number between
|
||||
# zero and one, with 0 being fully faded).
|
||||
inactive_text_alpha 1.0
|
||||
|
||||
# Tab-bar customization
|
||||
active_tab_foreground #d3d4c4
|
||||
active_tab_background #404552
|
||||
active_tab_font_style normal
|
||||
inactive_tab_foreground #7c838f
|
||||
inactive_tab_background #383c4a
|
||||
inactive_tab_font_style normal
|
||||
tab_separator " ┇ "
|
||||
|
||||
# The color and style for highlighting URLs on mouse-over. url_style can be one of:
|
||||
# none, single, double, curly
|
||||
url_color #0087BD
|
||||
url_style curly
|
||||
cursor #93a1a1
|
||||
|
||||
# The 16 terminal colors. There are 8 basic colors, each color has a dull and
|
||||
# bright version.
|
||||
# solarized dark higher contrast
|
||||
# https://github.com/dexpota/kitty-themes/blob/master/themes/Solarized_Dark_Higher_Contrast.conf
|
||||
# background #001e26
|
||||
# foreground #9bc1c2
|
||||
# cursor #f34a00
|
||||
# selection_background #003747
|
||||
# color0 #002731
|
||||
# color8 #006388
|
||||
# color1 #d01b24
|
||||
# color9 #f4153b
|
||||
# color2 #6bbe6c
|
||||
# color10 #50ee84
|
||||
# color3 #a57705
|
||||
# color11 #b17e28
|
||||
# color4 #2075c7
|
||||
# color12 #178dc7
|
||||
# color5 #c61b6e
|
||||
# color13 #e14d8e
|
||||
# color6 #259185
|
||||
# color14 #00b29e
|
||||
# color7 #e9e2cb
|
||||
# color15 #fcf4dc
|
||||
# selection_foreground #001e26
|
||||
|
||||
# https://github.com/dexpota/kitty-themes/blob/master/themes/Relaxed_Afterglow.conf
|
||||
# Relaxed Afterglow by Michael Kühnel <mail@michael-kuehnel.de>, https://github.com/Relaxed-Theme/relaxed-terminal-themes
|
||||
# This work is licensed under the terms of the MIT license.
|
||||
# For a copy, see https://opensource.org/licenses/MIT.
|
||||
|
||||
background #353a44
|
||||
foreground #d9d9d9
|
||||
cursor #d9d9d9
|
||||
selection_foreground #d8d8d8
|
||||
selection_background #6a7984
|
||||
color0 #151515
|
||||
color1 #bc5653
|
||||
color2 #909d63
|
||||
color3 #ebc17a
|
||||
color4 #6a8799
|
||||
color5 #b06698
|
||||
color6 #c9dfff
|
||||
color7 #d9d9d9
|
||||
color8 #636363
|
||||
color9 #bc5653
|
||||
color10 #a0ac77
|
||||
color11 #ebc17a
|
||||
color12 #7eaac7
|
||||
color13 #b06698
|
||||
color14 #acbbd0
|
||||
color15 #f7f7f7
|
||||
|
||||
|
||||
|
||||
# Key mapping
|
||||
# For a list of key names, see: http://www.glfw.org/docs/latest/group__keys.html
|
||||
# For a list of modifier names, see: http://www.glfw.org/docs/latest/group__mods.html
|
||||
#
|
||||
# You can use the special action no_op to unmap a keyboard shortcut that is
|
||||
# assigned in the default configuration.
|
||||
#
|
||||
# You can combine multiple actions to be triggered by a single shortcut, using the
|
||||
# syntax below:
|
||||
# map key combine <separator> action1 <separator> action2 <separator> action3 ...
|
||||
# For example:
|
||||
# map ctrl+shift+e combine : new_window : next_layout
|
||||
# this will create a new window and switch to the next available layout
|
||||
|
||||
# Clipboard
|
||||
map ctrl+shift+v paste_from_clipboard
|
||||
map ctrl+shift+s no_op
|
||||
map ctrl+shift+c copy_to_clipboard
|
||||
map shift+insert no_op
|
||||
# You can also pass the contents of the current selection to any program using
|
||||
# pass_selection_to_program. By default, the system's open program is used, but
|
||||
# you can specify your own, for example:
|
||||
# map ctrl+shift+o pass_selection_to_program firefox
|
||||
map ctrl+shift+o no_op
|
||||
|
||||
# Scrolling
|
||||
map ctrl+shift+up no_op
|
||||
map ctrl+shift+down no_op
|
||||
map ctrl+shift+k no_op
|
||||
map ctrl+shift+j no_op
|
||||
map ctrl+shift+page_up no_op
|
||||
map ctrl+shift+page_down no_op
|
||||
map ctrl+shift+home no_op
|
||||
map ctrl+shift+end no_op
|
||||
map ctrl+shift+h no_op
|
||||
|
||||
# Window management
|
||||
map ctrl+shift+enter no_op
|
||||
# map ctrl+n new_os_window
|
||||
# map ctrl+w close_window
|
||||
map ctrl+shift+] no_op
|
||||
map ctrl+shift+[ no_op
|
||||
map ctrl+shift+f no_op
|
||||
map ctrl+shift+1 no_op
|
||||
map ctrl+shift+2 no_op
|
||||
map ctrl+shift+3 no_op
|
||||
map ctrl+shift+4 no_op
|
||||
map ctrl+shift+5 no_op
|
||||
map ctrl+shift+6 no_op
|
||||
map ctrl+shift+7 no_op
|
||||
map ctrl+shift+8 no_op
|
||||
map ctrl+shift+9 no_op
|
||||
map ctrl+shift+0 no_op
|
||||
# You can open a new window running an arbitrary program, for example:
|
||||
# map ctrl+shift+y new_window mutt
|
||||
#
|
||||
# You can pass the current selection to the new program by using the @selection placeholder
|
||||
# map ctrl+shift+y new_window less @selection
|
||||
#
|
||||
# You can even send the contents of the current screen + history buffer as stdin using
|
||||
# the placeholders @text (which is the plain text) and @ansi (which includes text styling escape codes)
|
||||
# For example, the following command opens the scrollback buffer in less in a new window.
|
||||
# map ctrl+shift+y new_window @ansi less +G -R
|
||||
#
|
||||
# You can open a new window with the current working directory set to the
|
||||
# working directory of the current window using
|
||||
# map ctrl+alt+enter new_window_with_cwd
|
||||
|
||||
|
||||
# Tab management
|
||||
map ctrl+shift+] next_tab
|
||||
map ctrl+shift+[ previous_tab
|
||||
# map ctrl+t new_tab
|
||||
# map ctrl+q close_tab
|
||||
map ctrl+shift+l no_op
|
||||
map ctrl+shift+. move_tab_forward
|
||||
map ctrl+shift+, move_tab_backward
|
||||
# You can also create shortcuts to go to specific tabs, with 1 being the first tab
|
||||
# map ctrl+alt+1 goto_tab 1
|
||||
# map ctrl+alt+2 goto_tab 2
|
||||
|
||||
# Just as with new_window above, you can also pass the name of arbitrary
|
||||
# commands to run when using new_tab and use new_tab_with_cwd.
|
||||
|
||||
|
||||
# Miscellaneous
|
||||
# map ctrl+equal increase_font_size
|
||||
# map ctrl+minus decrease_font_size
|
||||
# map ctrl+0 restore_font_size
|
||||
# map ctrl+shift+f11 no_op
|
||||
|
||||
# Sending arbitrary text on shortcut key presses
|
||||
# You can tell kitty to send arbitrary (UTF-8) encoded text to
|
||||
# the client program when pressing specified shortcut keys. For example:
|
||||
# map ctrl+alt+a send_text all Special text
|
||||
# This will send "Special text" when you press the Ctrl+Alt+a key combination.
|
||||
# The text to be sent is a python string literal so you can use escapes like
|
||||
# \x1b to send control codes or \u21fb to send unicode characters (or you can
|
||||
# just input the unicode characters directly as UTF-8 text). The first argument
|
||||
# to send_text is the keyboard modes in which to activate the shortcut. The possible
|
||||
# values are normal or application or kitty or a comma separated combination of them.
|
||||
# The special keyword all means all modes. The modes normal and application refer to
|
||||
# the DECCKM cursor key mode for terminals, and kitty refers to the special kitty
|
||||
# extended keyboard protocol. Another example, that outputs a word and then moves the cursor
|
||||
# to the start of the line (same as pressing the Home key):
|
||||
# map ctrl+alt+a send_text normal Word\x1b[H
|
||||
# map ctrl+alt+a send_text application Word\x1bOH
|
||||
|
||||
# Symbol mapping (special font for specified unicode code points). Map the
|
||||
# specified unicode codepoints to a particular font. Useful if you need special
|
||||
# rendering for some symbols, such as for Powerline. Avoids the need for
|
||||
# patched fonts. Each unicode code point is specified in the form U+<code point
|
||||
# in hexadecimal>. You can specify multiple code points, separated by commas
|
||||
# and ranges separated by hyphens. symbol_map itself can be specified multiple times.
|
||||
# Syntax is:
|
||||
#
|
||||
# symbol_map codepoints Font Family Name
|
||||
#
|
||||
# For example:
|
||||
#
|
||||
# symbol_map U+E0A0-U+E0A2,U+E0B0-U+E0B3 PowerlineSymbols
|
||||
|
||||
|
||||
# OS specific tweaks
|
||||
|
||||
# Hide the kitty window's title bar on macOS.
|
||||
macos_hide_titlebar no
|
||||
|
||||
# Use the option key as an alt key. With this set to no, kitty will use
|
||||
# the macOS native Option+Key = unicode character behavior. This will
|
||||
# break any Alt+key keyboard shortcuts in your terminal programs, but you
|
||||
# can use the macOS unicode input technique.
|
||||
macos_option_as_alt yes
|
||||
|
||||
# The number is a percentage of maximum volume.
|
||||
# See man XBell for details.
|
||||
x11_bell_volume 80
|
||||
|
||||
# Prefer color emoji fonts when available. Note that this only works
|
||||
# on systems such as Linux that use fontconfig. On other OSes, the emoji
|
||||
# font used is system dependent. It can be overriden using symbol_map in the kitty
|
||||
# configuration.
|
||||
prefer_color_emoji yes
|
16
.dockerfunc
16
.dockerfunc
|
@ -544,3 +544,19 @@ wireshark() {
|
|||
jess/wireshark
|
||||
|
||||
}
|
||||
|
||||
woeusb() {
|
||||
del_stopped woeusb
|
||||
|
||||
docker run -it \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
-v /tmp/.X11-unix:/tmp/.X11-unix \
|
||||
-v $(pwd):/home/woe \
|
||||
-v /dev/:/shared_devs \
|
||||
-v /mnt/:/mnted_devs \
|
||||
-e DISPLAY=unix$DISPLAY \
|
||||
--privileged \
|
||||
--name woeusb \
|
||||
${DOCKER_REPO_PREFIX}/woeusb
|
||||
|
||||
}
|
||||
|
|
|
@ -29,3 +29,5 @@
|
|||
ui = true
|
||||
[pull]
|
||||
rebase = true
|
||||
[init]
|
||||
defaultBranch = main
|
||||
|
|
82
.i3/config
82
.i3/config
|
@ -42,8 +42,7 @@ bindsym $mod+d exec dmenu_run
|
|||
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
|
||||
|
||||
bindsym Ctrl+Shift+l exec i3lock-fancy
|
||||
bindsym $mod+o exec gnome-calculator
|
||||
# bindsym $mod+b exec ~/clickit.sh
|
||||
bindsym $mod+o exec speedcrunch
|
||||
|
||||
# change focus
|
||||
bindsym $mod+j focus left
|
||||
|
@ -86,6 +85,7 @@ bindsym $mod+Shift+space floating toggle
|
|||
bindsym $mod+space focus mode_toggle
|
||||
# float some applications
|
||||
for_window [class="Tor Browser"] floating enable
|
||||
for_window [title="SpeedCrunch"] floating enable
|
||||
|
||||
bindsym $mod+a focus parent # focus the parent container
|
||||
|
||||
|
@ -107,26 +107,28 @@ set $WS8 "8 "
|
|||
set $WS9 "9 "
|
||||
|
||||
assign [class="^Firefox$"] $WS1
|
||||
assign [class="^DebugScreen"] $WS3
|
||||
assign [class="^Eclipse$"] $WS5
|
||||
assign [class="^Thunderbird$"] $WS4
|
||||
assign [class=".*ee.*ass.*"] $WS8
|
||||
|
||||
# https://faq.i3wm.org/question/3726/workspace-output-multiple-values/index.html%3Fanswer=3731.html#post-id-3731
|
||||
set $LAPTOP LVDS-1
|
||||
set $CENTER HDMI-1
|
||||
set $RIGHT VGA-1
|
||||
# set $LAPTOP LVDS-1
|
||||
set $CENTER DP-0
|
||||
set $RIGHT DP-3
|
||||
set $LEFT DVI-D-0
|
||||
|
||||
# monitor settings
|
||||
bindsym $mod+m mode "monitor"
|
||||
mode "monitor" {
|
||||
# only laptop
|
||||
bindsym 1 exec xrandr --output $LAPTOP --auto --primary --output $CENTER --off $RIGHT --off
|
||||
# HDMI main, laptop secondary
|
||||
# CENTER main, RIGHT secondary
|
||||
bindsym 2 exec xrandr --output $CENTER --primary --auto --output $LAPTOP --auto --left-of $CENTER --output $RIGHT --off
|
||||
# HDMI main, laptop left, VGA right, *not* supported on X230
|
||||
bindsym 3 exec xrandr --output $CENTER --primary --auto --output $LAPTOP --auto --left-of $CENTER --output $RIGHT --auto --right-of $CENTER
|
||||
# HDMI main, VGA right, laptop off
|
||||
bindsym 4 exec xrandr --output $CENTER --primary --auto --output $RIGHT --right-of $CENTER --rotate left --auto --output $LAPTOP --off
|
||||
bindsym 3 exec xrandr --output $CENTER --primary --auto --output $LEFT --auto --left-of $CENTER --output $RIGHT --auto --right-of $CENTER
|
||||
# CENTER main, RIGHT right, rotated
|
||||
bindsym 4 exec xrandr --output $CENTER --primary --auto --output $RIGHT --auto --right-of $CENTER --rotate left --output $LAPTOP --off --output $LEFT --auto --left-of $CENTER --rotate right
|
||||
# VGA main, laptop left, HDMI off
|
||||
bindsym 8 exec xrandr --output $RIGHT --primary --auto --output $LAPTOP --auto --left-of $RIGHT --output $CENTER --off
|
||||
# HDMI main, VGA right, laptop off
|
||||
|
@ -138,15 +140,12 @@ mode "monitor" {
|
|||
bindsym $mod+m mode "default"
|
||||
}
|
||||
|
||||
bindsym $mod+p exec xrandr-toggle
|
||||
|
||||
workspace $WS1 output $CENTER
|
||||
workspace $WS2 output $CENTER
|
||||
workspace $WS3 output $LAPTOP
|
||||
workspace $WS4 output $LAPTOP
|
||||
workspace $WS5 output $CENTER
|
||||
workspace $WS8 output $LAPTOP
|
||||
workspace $WS9 output $LAPTOP
|
||||
workspace $WS3 output $RIGHT
|
||||
workspace $WS4 output $RIGHT
|
||||
workspace $WS8 output $RIGHT
|
||||
workspace $WS9 output $RIGHT
|
||||
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace $WS1
|
||||
|
@ -211,56 +210,35 @@ mode "resize" {
|
|||
|
||||
bindsym $mod+r mode "resize"
|
||||
|
||||
# Start i3bar to display a workspace bar (plus the system information i3status
|
||||
# finds out, if available)
|
||||
bar {
|
||||
|
||||
# i3blocks: http://kumarcode.com/Colorful-i3/
|
||||
# status_command i3blocks -c ~/.i3/i3blocks.conf
|
||||
colors {
|
||||
# separator #268bd2
|
||||
background #111b16
|
||||
statusline #b3c4c6
|
||||
focused_workspace #7d9683 #6c71c4 #fdf6e3
|
||||
active_workspace #fdf6e3 #6c71c4 #fdf6e3
|
||||
inactive_workspace #002b36 #586e75 #002b36
|
||||
urgent_workspace #d33682 #d33682 #fdf6e3
|
||||
}
|
||||
output $LAPTOP
|
||||
font pango:DejaVu Sans, FontAwesome 9
|
||||
# position top
|
||||
output $CENTER
|
||||
font pango:DejaVu Sans Mono, FontAwesome 7
|
||||
status_command i3status --config ~/.i3/status.conf
|
||||
status_command /usr/bin/i3status-rs /home/fschl/dotfiles/.i3/status-rust.toml
|
||||
colors {
|
||||
separator #166616
|
||||
background #222222
|
||||
statusline #166616
|
||||
focused_workspace #0088CC #0088CC #ffffff
|
||||
active_workspace #333333 #333333 #ffffff
|
||||
inactive_workspace #333333 #333333 #888888
|
||||
urgent_workspace #2f343a #900000 #ffffff
|
||||
}
|
||||
}
|
||||
|
||||
bar {
|
||||
# output $CENTER
|
||||
output $RIGHT
|
||||
output $LEFT
|
||||
status_command i3status --config ~/.i3/status_small.conf
|
||||
tray_output $LAPTOP
|
||||
tray_output $CENTER
|
||||
}
|
||||
|
||||
# auto run commands
|
||||
# set background
|
||||
# use the same background as slim (login manager)
|
||||
# this file is an alias to something in /home/jessie/Pictures
|
||||
#exec --no-startup-id feh --bg-fill /usr/share/slim/themes/default/background.jpg
|
||||
|
||||
# run the merge for good colors
|
||||
#exec xrdb -merge /home/jessie/.Xresources
|
||||
#exec xrdb -merge /home/jessie/.Xdefaults
|
||||
|
||||
|
||||
# startup programs
|
||||
exec amixer set Master 1+ off
|
||||
exec amixer set Master 54
|
||||
exec --no-startup-id nm-applet
|
||||
exec --no-startup-id xrandr --output LVDS1 --left-of VGA1 --auto
|
||||
exec --no-startup-id xrandr --output VGA1 --auto
|
||||
#exec --no-startup-id clipit
|
||||
exec --no-startup-id xrandr --output $CENTER --primary --auto --output $RIGHT --auto --right-of $CENTER --rotate left --output $LAPTOP --off --output $LEFT --auto --left-of $CENTER --rotate right
|
||||
exec --no-startup-id i3-msg 'workspace $WS1; exec firefox;'
|
||||
exec --no-startup-id i3-msg 'workspace $WS2; exec emacs'
|
||||
exec --no-startup-id i3-msg 'exec thunderbird'
|
||||
exec --no-startup-id i3-msg 'exec keepassxc'
|
||||
# exec --no-startup-id i3-msg 'exec nextcloud'
|
||||
exec --no-startup-id i3-msg 'workspace $WS3; exec kitty;'
|
||||
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
[theme]
|
||||
name = "semi-native"
|
||||
# theme = "solarized-dark"
|
||||
[theme.overrides]
|
||||
separator = "<span font='5'>|</span>"
|
||||
[icons]
|
||||
name = "awesome"
|
||||
|
||||
|
||||
[[block]]
|
||||
block = "pomodoro"
|
||||
length = 25
|
||||
break_length = 5
|
||||
message = " Take a break!"
|
||||
break_message = "Back to work!"
|
||||
notifier = "i3nag"
|
||||
[icons.overrides]
|
||||
pomodoro = ""
|
||||
pomodoro_started = ""
|
||||
pomodoro_stopped = "⏹"
|
||||
pomodoro_paused = "⏸"
|
||||
pomodoro_break = ""
|
||||
|
||||
|
||||
# [[block]]
|
||||
# block = "disk_space"
|
||||
# path = "/"
|
||||
# info_type = "available"
|
||||
# unit = "GB"
|
||||
# interval = 20
|
||||
# warning = 1.5
|
||||
# alert = 0.8
|
||||
# alert_absolute = true
|
||||
# format = "{icon}/{available}"
|
||||
|
||||
[[block]]
|
||||
block = "disk_space"
|
||||
path = "/home"
|
||||
info_type = "available"
|
||||
unit = "GB"
|
||||
interval = 20
|
||||
warning = 20.0
|
||||
alert = 10.0
|
||||
alert_absolute = true
|
||||
format = "{icon}/home {available}"
|
||||
|
||||
# [[block]]
|
||||
# block = "docker"
|
||||
# interval = 2
|
||||
# format = "{running}/{total} | {images}"
|
||||
|
||||
[[block]]
|
||||
block = "memory"
|
||||
display_type = "memory"
|
||||
format_mem = "{mem_used_percents}"
|
||||
format_swap = "{swap_used_percents}"
|
||||
|
||||
[[block]]
|
||||
block = "cpu"
|
||||
interval = 5
|
||||
|
||||
[[block]]
|
||||
block = "load"
|
||||
interval = 5
|
||||
format = "{1m}"
|
||||
|
||||
[[block]]
|
||||
block = "net"
|
||||
device = "enp31s0"
|
||||
format = "eth {ip} {speed_down;K*b} {graph_down;K*b}"
|
||||
interval = 5
|
||||
|
||||
# [[block]]
|
||||
# block = "net"
|
||||
# device = "wlp3s0"
|
||||
# on_click = "alacritty -e nmtui"
|
||||
# format = "{ssid} {signal_strength} {ip} {speed_down;K*b}"
|
||||
# # format = "{ssid} {signal_strength} {ip} {speed_down;K*b} {graph_down;K*b}"
|
||||
# interval = 5
|
||||
|
||||
[[block]]
|
||||
block = "sound"
|
||||
format = "{volume}"
|
||||
show_volume_when_muted = true
|
||||
|
||||
# [[block]]
|
||||
# block = "sound"
|
||||
# name = "Mic"
|
||||
# format = "{output_name} {volume}"
|
||||
# show_volume_when_muted = true
|
||||
|
||||
# [[block]]
|
||||
# block = "battery"
|
||||
# # driver = "upower"
|
||||
# driver = "sysfs"
|
||||
# format = "{percentage} {time}"
|
||||
# allow_missing = true
|
||||
|
||||
# [[block]]
|
||||
# block = "networkmanager"
|
||||
# on_click = "alacritty -e nmtui"
|
||||
# interface_name_exclude = ["br\\-[0-9a-f]{12}", "docker\\d+"]
|
||||
# interface_name_include = []
|
||||
# ap_format = "{ssid^10}"
|
||||
|
||||
|
||||
[[block]]
|
||||
block = "time"
|
||||
timezone = "Europe/Berlin"
|
||||
interval = 5
|
||||
format = "%a %Y-%m-%d %R:%S"
|
|
@ -25,30 +25,24 @@ order += "run_watch DHCP"
|
|||
#order += "ipv6"
|
||||
order += "wireless wlp3s0"
|
||||
order += "ethernet fschl-vpn"
|
||||
order += "ethernet enp0s25"
|
||||
order += "ethernet enp31s0"
|
||||
order += "volume Master"
|
||||
order += "battery 0"
|
||||
# order += "cpu_temperature 0"
|
||||
order += "memory"
|
||||
order += "load"
|
||||
#order += "tztime local"
|
||||
order += "tztime DE"
|
||||
order += "tztime local"
|
||||
# order += "tztime DE"
|
||||
#order += "tztime KG"
|
||||
# order += "tztime UK"
|
||||
|
||||
# look for icons: https://fontawesome.com/icons?d=gallery
|
||||
wireless wlp3s0 {
|
||||
format_up = " %essid(%quality) %ip"
|
||||
format_down = "-"
|
||||
}
|
||||
|
||||
ethernet fschl-vpn {
|
||||
# if you use %speed, i3status requires root privileges
|
||||
format_up = "VPN: %ip "
|
||||
format_down = "VPN:-"
|
||||
format_up = "fschl-vpn: %ip"
|
||||
format_down = "fschl-vpn: -"
|
||||
}
|
||||
|
||||
ethernet enp0s25 {
|
||||
ethernet enp31s0 {
|
||||
# if you use %speed, i3status requires root privileges
|
||||
format_up = "E: %ip (%speed)"
|
||||
format_down = "E:-"
|
||||
|
@ -78,7 +72,7 @@ tztime local {
|
|||
|
||||
tztime DE {
|
||||
format = "DE %Y-%m-%d (%V) %a %H:%M:%S"
|
||||
timezone = "Europe/Berlin"
|
||||
timezone = "Europe/Berlin"
|
||||
}
|
||||
|
||||
tztime UK {
|
||||
|
@ -121,10 +115,10 @@ disk "/media/driveBay" {
|
|||
format = "/ %avail"
|
||||
}
|
||||
|
||||
volume Master {
|
||||
format = " %volume"
|
||||
format_muted = " %volume"
|
||||
device = "default"
|
||||
mixer = "Master"
|
||||
mixer_idx = 0
|
||||
}
|
||||
# volume Master {
|
||||
# format = " %volume"
|
||||
# format_muted = " %volume"
|
||||
# device = "default"
|
||||
# mixer = "Master"
|
||||
# mixer_idx = 0
|
||||
# }
|
||||
|
|
|
@ -22,7 +22,7 @@ order += "run_watch DHCP"
|
|||
order += "path_exists VPN"
|
||||
order += "wireless wlp3s0"
|
||||
# order += "ethernet eth0"
|
||||
order += "ethernet enp0s25"
|
||||
order += "ethernet enp31s0"
|
||||
order += "volume master"
|
||||
order += "battery 0"
|
||||
order += "load"
|
||||
|
@ -39,13 +39,8 @@ battery 0 {
|
|||
}
|
||||
|
||||
|
||||
wireless wlp3s0 {
|
||||
format_up = " %essid (%quality)"
|
||||
format_down = " -"
|
||||
}
|
||||
|
||||
# ethernet eth0 {
|
||||
ethernet enp0s25 {
|
||||
ethernet enp31s0 {
|
||||
# if you use %speed, i3status requires root privileges
|
||||
format_up = "E: up"
|
||||
format_down = "E: down"
|
||||
|
|
1
.profile
1
.profile
|
@ -21,3 +21,4 @@ if [ -d "$HOME/bin" ] ; then
|
|||
PATH="$HOME/bin:$PATH"
|
||||
fi
|
||||
|
||||
. "$HOME/.cargo/env"
|
||||
|
|
19
.spacemacs
19
.spacemacs
|
@ -56,11 +56,19 @@ This function should only modify configuration layer settings."
|
|||
python
|
||||
rust
|
||||
shell
|
||||
shell-scripts
|
||||
spell-checking
|
||||
;; shell-scripts
|
||||
;; spell-checking
|
||||
syntax-checking
|
||||
version-control
|
||||
yaml)
|
||||
yaml
|
||||
;; (shell :variables
|
||||
;; shell-default-height 30
|
||||
;; shell-default-position 'bottom)
|
||||
;; spell-checking
|
||||
;; syntax-checking
|
||||
;; version-control
|
||||
treemacs)
|
||||
|
||||
|
||||
;; List of additional packages that will be installed without being wrapped
|
||||
;; in a layer (generally the packages are installed only and should still be
|
||||
|
@ -70,7 +78,10 @@ This function should only modify configuration layer settings."
|
|||
;; `dotspacemacs/user-config'. To use a local version of a package, use the
|
||||
;; `:location' property: '(your-package :location "~/path/to/your-package/")
|
||||
;; Also include the dependencies as they will not be resolved automatically.
|
||||
dotspacemacs-additional-packages '()
|
||||
dotspacemacs-additional-packages '(
|
||||
org-tree-slide
|
||||
)
|
||||
|
||||
|
||||
;; A list of packages that cannot be updated.
|
||||
dotspacemacs-frozen-packages '()
|
||||
|
|
24
.tmux.conf
24
.tmux.conf
|
@ -1,24 +0,0 @@
|
|||
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
|
||||
|
||||
set-window-option -g window-status-current-bg yellow
|
||||
|
||||
# force a reload of the config file
|
||||
unbind r
|
||||
bind r source-file ~/.tmux.conf
|
||||
|
||||
# quick pane cycling
|
||||
unbind M-s
|
||||
bind -n M-s select-pane -t :.+
|
||||
|
||||
# pane splitting like in emacs
|
||||
unbind M-2
|
||||
bind -n M-2 split-window -h
|
||||
|
||||
unbind M-4
|
||||
bind -n M-4 split-window
|
||||
|
||||
#unbind C-W
|
||||
#bind -n C-W confirm-before -p "kill-pane #W? (y/n)" kill-window
|
|
@ -1,434 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# On-the-fly adjusting of the font size in urxvt
|
||||
#
|
||||
# Copyright (c) 2008 David O'Neill
|
||||
# 2012 Noah K. Tilton <noahktilton@gmail.com>
|
||||
# 2012-2013 Jan Larres <jan@majutsushi.net>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
# IN THE SOFTWARE.
|
||||
#
|
||||
# URL: https://github.com/majutsushi/urxvt-font-size
|
||||
#
|
||||
# Based on:
|
||||
# https://github.com/dave0/urxvt-font-size
|
||||
# https://github.com/noah/urxvt-font
|
||||
#
|
||||
|
||||
#:META:X_RESOURCE:%.step:interger:font size increase/decrease step
|
||||
|
||||
=head1 NAME
|
||||
|
||||
font-size - interactive font size setter
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
Put the font-size script into $HOME/.urxvt/ext/ and add it to the list
|
||||
of enabled perl-extensions in ~/.Xresources:
|
||||
|
||||
URxvt.perl-ext-common: ...,font-size
|
||||
|
||||
Add some keybindings:
|
||||
|
||||
URxvt.keysym.C-Up: font-size:increase
|
||||
URxvt.keysym.C-Down: font-size:decrease
|
||||
URxvt.keysym.C-S-Up: font-size:incglobal
|
||||
URxvt.keysym.C-S-Down: font-size:decglobal
|
||||
|
||||
Note that for urxvt versions older than 9.21 the resources have to look like this:
|
||||
|
||||
URxvt.keysym.C-Up: perl:font-size:increase
|
||||
URxvt.keysym.C-Down: perl:font-size:decrease
|
||||
URxvt.keysym.C-S-Up: perl:font-size:incglobal
|
||||
URxvt.keysym.C-S-Down: perl:font-size:decglobal
|
||||
|
||||
Supported functions:
|
||||
|
||||
=over 2
|
||||
|
||||
=item * increase/decrease:
|
||||
|
||||
increase or decrease the font size of the current terminal.
|
||||
|
||||
=item * incglobal/decglobal:
|
||||
|
||||
same as above and also adjust the X server values so all newly
|
||||
started terminals will use the same fontsize.
|
||||
|
||||
=item * incsave/decsave:
|
||||
|
||||
same as incglobal/decglobal and also modify the ~/.Xresources
|
||||
file so the changed font sizes will persist over a restart of
|
||||
the X server or a reboot.
|
||||
|
||||
=back
|
||||
|
||||
You can also change the step size that the script will use to increase
|
||||
the font size:
|
||||
|
||||
URxvt.font-size.step: 4
|
||||
|
||||
The default step size is 1. This means that with this setting a
|
||||
size change sequence would be for example 8->12->16->20 instead of
|
||||
8->9->10->11->12 etc. Please note that many X11 fonts are only
|
||||
available in specific sizes, though, and odd sizes are often not
|
||||
available, resulting in an effective step size of 2 instead of 1
|
||||
in that case.
|
||||
=cut
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my %escapecodes = (
|
||||
"font" => 710,
|
||||
"boldFont" => 711,
|
||||
"italicFont" => 712,
|
||||
"boldItalicFont" => 713
|
||||
);
|
||||
|
||||
sub on_start
|
||||
{
|
||||
my ($self) = @_;
|
||||
|
||||
$self->{step} = $self->x_resource("%.step") || 1;
|
||||
|
||||
foreach my $type (qw(font boldFont italicFont boldItalicFont)) {
|
||||
$self->{$type} = $self->x_resource($type) || "undef";
|
||||
}
|
||||
}
|
||||
|
||||
# Needed for backwards compatibility with < 9.21
|
||||
sub on_user_command
|
||||
{
|
||||
my ($self, $cmd) = @_;
|
||||
|
||||
my $step = $self->{step};
|
||||
|
||||
if ($cmd eq "font-size:increase") {
|
||||
fonts_change_size($self, $step, 0);
|
||||
} elsif ($cmd eq "font-size:decrease") {
|
||||
fonts_change_size($self, -$step, 0);
|
||||
} elsif ($cmd eq "font-size:incglobal") {
|
||||
fonts_change_size($self, $step, 1);
|
||||
} elsif ($cmd eq "font-size:decglobal") {
|
||||
fonts_change_size($self, -$step, 1);
|
||||
} elsif ($cmd eq "font-size:incsave") {
|
||||
fonts_change_size($self, $step, 2);
|
||||
} elsif ($cmd eq "font-size:decsave") {
|
||||
fonts_change_size($self, -$step, 2);
|
||||
} elsif ($cmd eq "font-size:reset") {
|
||||
fonts_reset($self);
|
||||
}
|
||||
}
|
||||
|
||||
sub on_action
|
||||
{
|
||||
my ($self, $action) = @_;
|
||||
|
||||
my $step = $self->{step};
|
||||
|
||||
if ($action eq "increase") {
|
||||
fonts_change_size($self, $step, 0);
|
||||
} elsif ($action eq "decrease") {
|
||||
fonts_change_size($self, -$step, 0);
|
||||
} elsif ($action eq "incglobal") {
|
||||
fonts_change_size($self, $step, 1);
|
||||
} elsif ($action eq "decglobal") {
|
||||
fonts_change_size($self, -$step, 1);
|
||||
} elsif ($action eq "incsave") {
|
||||
fonts_change_size($self, $step, 2);
|
||||
} elsif ($action eq "decsave") {
|
||||
fonts_change_size($self, -$step, 2);
|
||||
} elsif ($action eq "reset") {
|
||||
fonts_reset($self);
|
||||
}
|
||||
}
|
||||
|
||||
sub fonts_change_size
|
||||
{
|
||||
my ($term, $change, $save) = @_;
|
||||
|
||||
my @newfonts = ();
|
||||
|
||||
my $curres = $term->resource('font');
|
||||
if (!$curres) {
|
||||
$term->scr_add_lines("\r\nWarning: No font configured, trying a default.\r\nPlease set a font with the 'URxvt.font' resource.");
|
||||
$curres = "fixed";
|
||||
}
|
||||
my @curfonts = split(/\s*,\s*/, $curres);
|
||||
|
||||
my $basefont = shift(@curfonts);
|
||||
my ($newbasefont, $newbasesize) = handle_font($term, $basefont, $change, 0);
|
||||
push @newfonts, $newbasefont;
|
||||
|
||||
# Only adjust other fonts if base font changed
|
||||
if ($newbasefont ne $basefont) {
|
||||
foreach my $font (@curfonts) {
|
||||
my ($newfont, $newsize) = handle_font($term, $font, $change, $newbasesize);
|
||||
push @newfonts, $newfont;
|
||||
}
|
||||
my $newres = join(",", @newfonts);
|
||||
font_apply_new($term, $newres, "font", $save);
|
||||
|
||||
handle_type($term, "boldFont", $change, $newbasesize, $save);
|
||||
handle_type($term, "italicFont", $change, $newbasesize, $save);
|
||||
handle_type($term, "boldItalicFont", $change, $newbasesize, $save);
|
||||
}
|
||||
|
||||
if ($save > 1) {
|
||||
# write the new values back to the file
|
||||
my $xresources = readlink $ENV{"HOME"} . "/.Xresources";
|
||||
system("xrdb -edit " . $xresources);
|
||||
}
|
||||
}
|
||||
|
||||
sub fonts_reset
|
||||
{
|
||||
my ($term) = @_;
|
||||
|
||||
foreach my $type (qw(font boldFont italicFont boldItalicFont)) {
|
||||
my $initial = $term->{$type};
|
||||
if ($initial ne "undef") {
|
||||
font_apply_new($term, $initial, $type, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub handle_type
|
||||
{
|
||||
my ($term, $type, $change, $basesize, $save) = @_;
|
||||
|
||||
my $curres = $term->resource($type);
|
||||
if (!$curres) {
|
||||
return;
|
||||
}
|
||||
my @curfonts = split(/\s*,\s*/, $curres);
|
||||
my @newfonts = ();
|
||||
|
||||
foreach my $font (@curfonts) {
|
||||
my ($newfont, $newsize) = handle_font($term, $font, $change, $basesize);
|
||||
push @newfonts, $newfont;
|
||||
}
|
||||
|
||||
my $newres = join(",", @newfonts);
|
||||
font_apply_new($term, $newres, $type, $save);
|
||||
}
|
||||
|
||||
sub handle_font
|
||||
{
|
||||
my ($term, $font, $change, $basesize) = @_;
|
||||
|
||||
my $newfont;
|
||||
my $newsize;
|
||||
my $prefix = 0;
|
||||
|
||||
if ($font =~ /^\s*x:/) {
|
||||
$font =~ s/^\s*x://;
|
||||
$prefix = 1;
|
||||
}
|
||||
if ($font =~ /^\s*(\[.*\])?xft:/) {
|
||||
($newfont, $newsize) = font_change_size_xft($term, $font, $change, $basesize);
|
||||
} elsif ($font =~ /^\s*-/) {
|
||||
($newfont, $newsize) = font_change_size_xlfd($term, $font, $change, $basesize);
|
||||
} else {
|
||||
# check whether the font is a valid alias and if yes resolve it to the
|
||||
# actual font
|
||||
my $lsfinfo = `xlsfonts -l $font 2>/dev/null`;
|
||||
|
||||
if ($lsfinfo eq "") {
|
||||
# not a valid alias, ring the bell if it is the base font and just
|
||||
# return the current font
|
||||
if ($basesize == 0) {
|
||||
$term->scr_bell;
|
||||
}
|
||||
return ($font, $basesize);
|
||||
}
|
||||
|
||||
my $fontinfo = (split(/\n/, $lsfinfo))[-1];
|
||||
my ($fontfull) = ($fontinfo =~ /\s+([-a-z0-9]+$)/);
|
||||
($newfont, $newsize) = font_change_size_xlfd($term, $fontfull, $change, $basesize);
|
||||
}
|
||||
|
||||
# $term->scr_add_lines("\r\nNew font is $newfont\n");
|
||||
if ($prefix) {
|
||||
$newfont = "x:$newfont";
|
||||
}
|
||||
return ($newfont, $newsize);
|
||||
}
|
||||
|
||||
sub font_change_size_xft
|
||||
{
|
||||
my ($term, $fontstring, $change, $basesize) = @_;
|
||||
|
||||
my @pieces = split(/:/, $fontstring);
|
||||
my @resized = ();
|
||||
my $size = 0;
|
||||
my $new_size = 0;
|
||||
|
||||
foreach my $piece (@pieces) {
|
||||
if ($piece =~ /^(?:(?:pixel)?size=|[^=-]+-)(\d+(\.\d*)?)$/) {
|
||||
$size = $1;
|
||||
|
||||
if ($basesize != 0) {
|
||||
$new_size = $basesize;
|
||||
} else {
|
||||
$new_size = $size + $change
|
||||
}
|
||||
|
||||
$piece =~ s/(=|-)$size/$1$new_size/;
|
||||
}
|
||||
push @resized, $piece;
|
||||
}
|
||||
|
||||
my $resized_str = join(":", @resized);
|
||||
|
||||
# don't make fonts too small
|
||||
if ($new_size >= 6) {
|
||||
return ($resized_str, $new_size);
|
||||
} else {
|
||||
if ($basesize == 0) {
|
||||
$term->scr_bell;
|
||||
}
|
||||
return ($fontstring, $size);
|
||||
}
|
||||
}
|
||||
|
||||
sub font_change_size_xlfd
|
||||
{
|
||||
my ($term, $fontstring, $change, $basesize) = @_;
|
||||
|
||||
#-xos4-terminus-medium-r-normal-*-12-*-*-*-*-*-*-1
|
||||
|
||||
my @fields = qw(foundry family weight slant setwidth style pixelSize pointSize Xresolution Yresolution spacing averageWidth registry encoding);
|
||||
|
||||
my %font;
|
||||
$fontstring =~ s/^-//; # Strip leading - before split
|
||||
@font{@fields} = split(/-/, $fontstring);
|
||||
|
||||
if ($font{pixelSize} eq '*') {
|
||||
$term->scr_add_lines("\r\nWarning: Font size undefined, assuming 12.\r\nPlease set the 'URxvt.font' resource to a font with a concrete size.");
|
||||
$font{pixelSize} = '12'
|
||||
}
|
||||
if ($font{registry} eq '*') {
|
||||
$font{registry} ='iso8859';
|
||||
}
|
||||
|
||||
# Blank out the size for the pattern
|
||||
my %pattern = %font;
|
||||
$pattern{foundry} = '*';
|
||||
$pattern{setwidth} = '*';
|
||||
$pattern{pixelSize} = '*';
|
||||
$pattern{pointSize} = '*';
|
||||
# if ($basesize != 0) {
|
||||
# $pattern{Xresolution} = '*';
|
||||
# $pattern{Yresolution} = '*';
|
||||
# }
|
||||
$pattern{averageWidth} = '*';
|
||||
# make sure there are no empty fields
|
||||
foreach my $field (@fields) {
|
||||
$pattern{$field} = '*' unless defined($pattern{$field});
|
||||
}
|
||||
my $new_fontstring = '-' . join('-', @pattern{@fields});
|
||||
|
||||
my @possible;
|
||||
# $term->scr_add_lines("\r\nPattern is $new_fontstring\n");
|
||||
open(FOO, "xlsfonts -fn '$new_fontstring' | sort -u |") or die $!;
|
||||
while (<FOO>) {
|
||||
chomp;
|
||||
s/^-//; # Strip leading '-' before split
|
||||
my @fontdata = split(/-/, $_);
|
||||
|
||||
push @possible, [$fontdata[6], "-$_"];
|
||||
# $term->scr_add_lines("\r\npossibly $fontdata[6] $_\n");
|
||||
}
|
||||
close(FOO);
|
||||
|
||||
if (!@possible) {
|
||||
die "No possible fonts!";
|
||||
}
|
||||
|
||||
if ($basesize != 0) {
|
||||
# sort by font size, descending
|
||||
@possible = sort {$b->[0] <=> $a->[0]} @possible;
|
||||
|
||||
# font is not the base font, so find the largest font that is at most
|
||||
# as large as the base font. If the largest possible font is smaller
|
||||
# than the base font bail and hope that a 0-size font can be found at
|
||||
# the end of the function
|
||||
if ($possible[0]->[0] > $basesize) {
|
||||
foreach my $candidate (@possible) {
|
||||
if ($candidate->[0] <= $basesize) {
|
||||
return ($candidate->[1], $candidate->[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} elsif ($change > 0) {
|
||||
# sort by font size, ascending
|
||||
@possible = sort {$a->[0] <=> $b->[0]} @possible;
|
||||
|
||||
foreach my $candidate (@possible) {
|
||||
if ($candidate->[0] >= $font{pixelSize} + $change) {
|
||||
return ($candidate->[1], $candidate->[0]);
|
||||
}
|
||||
}
|
||||
} elsif ($change < 0) {
|
||||
# sort by font size, descending
|
||||
@possible = sort {$b->[0] <=> $a->[0]} @possible;
|
||||
|
||||
foreach my $candidate (@possible) {
|
||||
if ($candidate->[0] <= $font{pixelSize} + $change && $candidate->[0] != 0) {
|
||||
return ($candidate->[1], $candidate->[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# no fitting font available, check whether a 0-size font can be used to
|
||||
# fit the size of the base font
|
||||
@possible = sort {$a->[0] <=> $b->[0]} @possible;
|
||||
if ($basesize != 0 && $possible[0]->[0] == 0) {
|
||||
return ($possible[0]->[1], $basesize);
|
||||
} else {
|
||||
# if there is absolutely no smaller/larger font that can be used
|
||||
# return the current one, and beep if this is the base font
|
||||
if ($basesize == 0) {
|
||||
$term->scr_bell;
|
||||
}
|
||||
return ("-$fontstring", $font{pixelSize});
|
||||
}
|
||||
}
|
||||
|
||||
sub font_apply_new
|
||||
{
|
||||
my ($term, $newfont, $type, $save) = @_;
|
||||
|
||||
# $term->scr_add_lines("\r\nnew font is $newfont\n");
|
||||
|
||||
$term->cmd_parse("\033]" . $escapecodes{$type} . ";" . $newfont . "\033\\");
|
||||
|
||||
# load the xrdb db
|
||||
# system("xrdb -load " . X_RESOURCES);
|
||||
|
||||
if ($save > 0) {
|
||||
# merge the new values
|
||||
open(XRDB_MERGE, "| xrdb -merge") || die "can't fork: $!";
|
||||
local $SIG{PIPE} = sub { die "xrdb pipe broken" };
|
||||
print XRDB_MERGE "URxvt." . $type . ": " . $newfont;
|
||||
close(XRDB_MERGE) || die "bad xrdb: $! $?";
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017-2021 Frieder Schlesier
|
||||
Copyright (c) 2017-2022 Frieder Schlesier
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
|
|
|
@ -116,5 +116,10 @@
|
|||
- [ ] seperate sources.list setup for server/desktop/laptop
|
||||
- [ ] Check new bootable USB solution: https://ventoy.net/en/index.html
|
||||
- [ ] move to ansible for easier modularization of setup
|
||||
- [ ] notifications: move from ~mako~ to ~dunst~ when dunst >1.6 is available
|
||||
on debian
|
||||
|
||||
** Moving to Arch
|
||||
|
||||
- official repository setup: https://wiki.archlinux.org/title/Official_repositories#multilib
|
||||
- multiplib is required for wine
|
||||
- Sound troubleshooting: https://wiki.archlinux.org/title/Advanced_Linux_Sound_Architecture/Troubleshooting#HDMI
|
||||
- Skype: https://www.tecmint.com/install-skype-in-arch-linux/
|
||||
|
|
|
@ -1,311 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
# Copyright 2009 David Smith. GNU GPLv2 or, at your option, a later version.
|
||||
|
||||
"""Fn-F7 toggle script for xrandr.
|
||||
|
||||
How does it work?
|
||||
|
||||
First, it's stateless, so it runs xrandr -q and parses the output into a
|
||||
RandRState object. The RandRState object defines attributes and methods to
|
||||
query and set xrandr options.
|
||||
|
||||
Second, it proceeds through the state machine toggling to the next state in
|
||||
order. The RandRStateMachine controls the transitions (i.e. it defines the
|
||||
states).
|
||||
|
||||
These steps are executed by the RandRToggleCommand that parses command line
|
||||
arguments, instantiates the RandRState and RandRStateMachine instances, and
|
||||
handles errors.
|
||||
|
||||
This is one of those programs that should have existed eons ago...
|
||||
"""
|
||||
# ... it's a bit over engineered, I guess
|
||||
|
||||
__author__ = 'david.daniel.smith@gmail.com (David Smith)'
|
||||
|
||||
import logging
|
||||
import subprocess
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
def VecSum(*vecs):
|
||||
# promise to never send me different sized vectors, ok?
|
||||
size = len(vecs[0])
|
||||
result = []
|
||||
for i in range(0, size):
|
||||
result.append(sum([vec[i] for vec in vecs]))
|
||||
return result
|
||||
|
||||
|
||||
def VecScale(scalar, vec):
|
||||
return [el * scalar for el in vec]
|
||||
|
||||
|
||||
class RandRState(object):
|
||||
"""XRandR state representation."""
|
||||
|
||||
# TODO: implement reflections, too, someday
|
||||
REFLECT_NORMAL = 'reflect_normal'
|
||||
REFLECT_X = 'reflect_x'
|
||||
REFLECT_Y = 'reflect_y'
|
||||
REFLECT_XY = 'reflect_xy'
|
||||
ROTATE_NORMAL = 'rotate_normal'
|
||||
ROTATE_INVERTED = 'rotate_inverted'
|
||||
ROTATE_LEFT = 'rotate_left'
|
||||
ROTATE_RIGHT = 'rotate_right'
|
||||
|
||||
LEFT_OF = 'left_of'
|
||||
RIGHT_OF = 'right_of'
|
||||
ABOVE = 'above'
|
||||
BELOW = 'below'
|
||||
SAME_AS = 'same_as'
|
||||
|
||||
def __init__(self):
|
||||
"""Constructor."""
|
||||
self._displays = set() # the list of display names
|
||||
self._connected = set() # set of connected display names
|
||||
self._position = {} # display -> (x,y)
|
||||
self._resolution = {} # display -> (x,y)
|
||||
|
||||
def _IterDisplays(self):
|
||||
return iter(self._displays)
|
||||
|
||||
def _SetDisplays(self, displays):
|
||||
self._displays = set(displays)
|
||||
|
||||
displays = property(_IterDisplays, _SetDisplays, None, 'display names')
|
||||
|
||||
def AddDisplay(self, display):
|
||||
self._displays.add(display)
|
||||
|
||||
def RemoveDisplay(self, display):
|
||||
self._displays.remove(display)
|
||||
|
||||
def IsConnected(self, display):
|
||||
return display in self._connected
|
||||
|
||||
def SetConnected(self, connected):
|
||||
self._connected = set(connected)
|
||||
|
||||
def NumConnections(self):
|
||||
return len(self._connected)
|
||||
|
||||
def GetPosition(self, display):
|
||||
result = self._position.get(display, None)
|
||||
return result and tuple(result) or None
|
||||
|
||||
def AddConnected(self, display):
|
||||
self._connected.add(display)
|
||||
|
||||
def RemoveConnected(self, display):
|
||||
self._connected.remove(display)
|
||||
|
||||
def SetPosition(self, display, position):
|
||||
self._position[display] = tuple(position)
|
||||
|
||||
def SetRelativePosition(self, display, relative_display, position):
|
||||
logging.debug('setting %s %s %s' % (display, position, relative_display))
|
||||
rel_pos = self.GetPosition(relative_display)
|
||||
rel_res = self.GetResolution(relative_display)
|
||||
dis_res = self.GetResolution(display)
|
||||
if position is self.LEFT_OF:
|
||||
dis_pos, rel_pos = rel_pos, VecSum((dis_res[0], rel_pos[1]),
|
||||
(rel_pos[0], 0))
|
||||
elif position is self.ABOVE:
|
||||
dis_pos, rel_pos = rel_pos, VecSum((rel_pos[0], dis_res[1]),
|
||||
(0, rel_pos[1]))
|
||||
elif position is self.RIGHT_OF:
|
||||
dis_pos = (rel_res[0], rel_pos[0])
|
||||
elif position is self.BELOW:
|
||||
dis_pos = (rel_pos[0], rel_res[1])
|
||||
elif position is self.SAME_AS:
|
||||
dis_pos = rel_pos
|
||||
else:
|
||||
raise RuntimeError('invalid position')
|
||||
self.SetPosition(display, dis_pos)
|
||||
self.SetPosition(relative_display, rel_pos)
|
||||
|
||||
def GetResolution(self, display):
|
||||
result = self._resolution.get(display, None)
|
||||
return result and tuple(result) or None
|
||||
|
||||
def SetResolution(self, display, resolution):
|
||||
self._resolution[display] = tuple(resolution)
|
||||
|
||||
def __str__(self):
|
||||
result = 'XRandR State:\n'
|
||||
for display in self.displays:
|
||||
connected = ['disconnected', 'connected'][self.IsConnected(display)]
|
||||
geometry = ''
|
||||
resolution = self.GetResolution(display)
|
||||
position = self.GetPosition(display)
|
||||
if resolution is not None:
|
||||
geometry += '%dx%d' % resolution
|
||||
if position is not None:
|
||||
geometry += '+%d+%d' % position
|
||||
result += ' * ' + ' '.join((display, connected, geometry)) + '\n'
|
||||
return result.strip()
|
||||
|
||||
def Commit(self):
|
||||
logging.info('Commiting %s' % self)
|
||||
args = ['xrandr']
|
||||
for display in self.displays:
|
||||
if self.IsConnected(display):
|
||||
args.extend(['--output', display,
|
||||
'--pos', '%dx%d' % self.GetPosition(display),
|
||||
'--mode', '%dx%d' % self.GetResolution(display)])
|
||||
else:
|
||||
args.extend(['--output', display, '--off'])
|
||||
logging.debug('running "%s"' % ' '.join(args))
|
||||
proc = subprocess.Popen(' '.join(args), stderr=subprocess.PIPE, shell=1)
|
||||
if proc.wait():
|
||||
error_msg = proc.stderr.read()
|
||||
logging.error(error_msg)
|
||||
raise RuntimeError(error_msg)
|
||||
|
||||
@classmethod
|
||||
def ParseXRandROutput(cls, xrandr_output):
|
||||
screen_re = re.compile(r'^Screen')
|
||||
display_re = re.compile(r'^(?P<name>\S+)\s+((?P<disconnected>dis))?'
|
||||
+ r'connected\s+((?P<res_x>\d+)x(?P<res_y>\d+)'
|
||||
+ r'\+(?P<pos_x>\d+)\+(?P<pos_y>\d+))?')
|
||||
mode_re = re.compile(r'^\s+(?P<res_x>\d+)x(?P<res_y>\d+)\s+\d+')
|
||||
state = cls()
|
||||
line = xrandr_output.readline()
|
||||
while line:
|
||||
# look for a display line
|
||||
match = display_re.search(line)
|
||||
if not match:
|
||||
line = xrandr_output.readline()
|
||||
continue
|
||||
# parse out the name and connection status
|
||||
display = match.group('name')
|
||||
connected = not bool(match.group('disconnected'))
|
||||
logging.debug('Found %s display %s' %
|
||||
(['disconnected', 'connected'][connected],
|
||||
display))
|
||||
state.AddDisplay(display)
|
||||
res = tuple((int(match.group(x) or 0) for x in ('res_x', 'res_y')))
|
||||
pos = tuple((int(match.group(x) or 0) for x in ('pos_x', 'pos_y')))
|
||||
if connected and res != (0, 0):
|
||||
state.AddConnected(display)
|
||||
state.SetResolution(display, res)
|
||||
state.SetPosition(display, pos)
|
||||
# skip until the next display line
|
||||
line = xrandr_output.readline()
|
||||
while line and not display_re.search(line):
|
||||
line = xrandr_output.readline()
|
||||
# else, look for a mode line and set the res to that
|
||||
else:
|
||||
while True:
|
||||
line = xrandr_output.readline()
|
||||
match = mode_re.match(line)
|
||||
# if no mode lines, give up
|
||||
if not match:
|
||||
break
|
||||
res = tuple((int(match.group(x)) for x in ('res_x', 'res_y')))
|
||||
state.AddConnected(display)
|
||||
state.SetResolution(display, res)
|
||||
state.SetPosition(display, (0, 0))
|
||||
# only need one so might as well end the loop here
|
||||
break
|
||||
logging.debug('Parsed %s' % state)
|
||||
return state
|
||||
|
||||
|
||||
class RandRStateMachine(object):
|
||||
"""State manipulator."""
|
||||
|
||||
def __init__(self, state):
|
||||
"""Constructor."""
|
||||
self._state = state
|
||||
|
||||
def GetCurrentState(self):
|
||||
return self._state
|
||||
|
||||
def NextState(self):
|
||||
# if we have a clone, then next pair to the left
|
||||
if self.IsClone():
|
||||
logging.info('CLONE -> PAIR_RIGHT')
|
||||
self.SetPairExtRight()
|
||||
# if we have a pair to the left, then next pair to the right
|
||||
elif self.IsPairExtRight():
|
||||
logging.info('PAIR_RIGHT -> PAIR_LEFT')
|
||||
self.SetPairExtLeft()
|
||||
# else, just set cloning
|
||||
else:
|
||||
logging.info('UNKNOWN (or PAIR_RIGHT) -> CLONE')
|
||||
self.SetClone()
|
||||
|
||||
def IsClone(self):
|
||||
found_origin_count = 0
|
||||
for disp in self._state.displays:
|
||||
if not self._state.IsConnected(disp):
|
||||
continue
|
||||
if self._state.GetPosition(disp) == (0, 0):
|
||||
found_origin_count += 1
|
||||
return found_origin_count >= 2
|
||||
|
||||
def SetClone(self):
|
||||
for disp in self._state.displays:
|
||||
logging.info('Cloning display %s' % disp)
|
||||
if not self._state.IsConnected(disp):
|
||||
logging.info('Skipping disconnected display %s' % disp)
|
||||
continue
|
||||
self._state.SetPosition(disp, (0, 0))
|
||||
self._state.Commit()
|
||||
|
||||
def _IsPairCmp(self):
|
||||
if self._state.NumConnections() < 2:
|
||||
return 0
|
||||
for disp in self._state.displays:
|
||||
if not self._state.IsConnected(disp):
|
||||
continue
|
||||
if disp.startswith('LVDS'):
|
||||
if self._state.GetPosition(disp) == (0, 0):
|
||||
return 1
|
||||
else:
|
||||
return -1
|
||||
return 0
|
||||
|
||||
def IsPairExtLeft(self):
|
||||
return self._IsPairCmp() < 0
|
||||
|
||||
def IsPairExtRight(self):
|
||||
return self._IsPairCmp() > 0
|
||||
|
||||
def _SetPairExt(self, direction):
|
||||
lvds = ''
|
||||
ext = ''
|
||||
for disp in self._state.displays:
|
||||
if not self._state.IsConnected(disp):
|
||||
continue
|
||||
if disp.startswith('LVDS'):
|
||||
lvds = disp
|
||||
else:
|
||||
ext = disp
|
||||
self._state.SetRelativePosition(ext, lvds, direction)
|
||||
self._state.Commit()
|
||||
|
||||
def SetPairExtLeft(self):
|
||||
self._SetPairExt(self._state.LEFT_OF)
|
||||
|
||||
def SetPairExtRight(self):
|
||||
for disp in self._state.displays:
|
||||
if disp.startswith('LVDS'):
|
||||
self._state.SetPosition(disp, (0, 0))
|
||||
self._state.Commit()
|
||||
self._SetPairExt(self._state.RIGHT_OF)
|
||||
|
||||
|
||||
def main():
|
||||
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
|
||||
xrandr = subprocess.Popen('xrandr -q', stdout=subprocess.PIPE, shell=True)
|
||||
xrandr.wait()
|
||||
state = RandRState.ParseXRandROutput(xrandr.stdout)
|
||||
sm = RandRStateMachine(state)
|
||||
sm.NextState()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -5,7 +5,7 @@ set -x
|
|||
# backup.sh
|
||||
|
||||
pre="/home/fschl"
|
||||
target="/media/black_Backups/2018-12"
|
||||
target="/media/store/"
|
||||
# target="/media/driveBay/Backups"
|
||||
|
||||
folders=( "Documents" #contains Org files
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
set -e
|
||||
|
||||
# install.sh
|
||||
# This script installs my basic setup for a debian machine
|
||||
# This script installs a basic setup for a debian machine
|
||||
|
||||
USERNAME=fschl
|
||||
SUDO="sudo"
|
||||
|
@ -20,7 +20,7 @@ check_root() {
|
|||
}
|
||||
|
||||
apt_sources() {
|
||||
# http://deb.debian.org/
|
||||
# https://www.debian.org/releases/
|
||||
ddist=$1
|
||||
DIST="${ddist:-stable}"
|
||||
|
||||
|
@ -107,8 +107,6 @@ base_applications() {
|
|||
$SUDO apt autoremove
|
||||
$SUDO apt autoclean
|
||||
$SUDO apt clean
|
||||
|
||||
|
||||
}
|
||||
|
||||
install_server_base() {
|
||||
|
@ -116,17 +114,17 @@ install_server_base() {
|
|||
|
||||
DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
apt update
|
||||
apt install -y \
|
||||
$SUDO apt update
|
||||
$SUDO apt install -y \
|
||||
fail2ban \
|
||||
logwatch \
|
||||
unattended-upgrades \
|
||||
--no-install-recommends
|
||||
|
||||
echo "... DONE... cleaning up\n\n"
|
||||
apt autoremove
|
||||
apt autoclean
|
||||
apt clean
|
||||
$SUDO apt autoremove
|
||||
$SUDO apt autoclean
|
||||
$SUDO apt clean
|
||||
|
||||
echo "setting up logwatch..."
|
||||
echo "... TODO require email to be set as parameter"
|
||||
|
@ -144,10 +142,9 @@ APT::Periodic::Update-Package-Lists "1";
|
|||
APT::Periodic::Download-Upgradeable-Packages "1";
|
||||
APT::Periodic::AutocleanInterval "7";
|
||||
APT::Periodic::Unattended-Upgrade "1";
|
||||
|
||||
EOF
|
||||
echo " ... DONE"
|
||||
|
||||
echo " ... DONE"
|
||||
}
|
||||
|
||||
no_suspend() {
|
||||
|
@ -177,9 +174,8 @@ install_nvidia_docker() {
|
|||
}
|
||||
|
||||
install_latex() {
|
||||
|
||||
apt update
|
||||
apt install -y \
|
||||
$SUDO apt update
|
||||
$SUDO apt install -y \
|
||||
evince \
|
||||
texlive \
|
||||
texlive-bibtex-extra \
|
||||
|
@ -196,7 +192,6 @@ install_latex() {
|
|||
}
|
||||
|
||||
install_workstation_apps() {
|
||||
|
||||
DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
$SUDO apt update
|
||||
|
@ -247,8 +242,8 @@ install_workstation_apps() {
|
|||
install_sway() {
|
||||
echo " installing sway and wayland tools..."
|
||||
DEBIAN_FRONTEND=noninteractive
|
||||
apt update
|
||||
apt install -y \
|
||||
$SUDO apt update
|
||||
$SUDO apt install -y \
|
||||
brightnessctl \
|
||||
mako \
|
||||
sway \
|
||||
|
@ -271,8 +266,8 @@ install_sway() {
|
|||
# build swaylock-effects because its not available on Debian
|
||||
# https://github.com/voidgloom/swaylock-effects
|
||||
(
|
||||
apt update
|
||||
apt install -y \
|
||||
$SUDO apt update
|
||||
$SUDO apt install -y \
|
||||
wayland-protocols \
|
||||
libwayland-client++0 \
|
||||
libcairo2-dev \
|
||||
|
@ -283,7 +278,7 @@ install_sway() {
|
|||
git clone https://github.com/voidgloom/swaylock-effects ${TARGET}
|
||||
cd ${TARGET}
|
||||
meson build && ninja -C build && sudo ninja -C build install
|
||||
sudo chmod a+s /usr/local/bin/swaylock
|
||||
$SUDO chmod a+s /usr/local/bin/swaylock
|
||||
)
|
||||
|
||||
}
|
||||
|
@ -322,12 +317,6 @@ install_i3() {
|
|||
# ln -s $f /home/$USER/$f
|
||||
# done
|
||||
|
||||
# $SUDO cat <<-EOF > /usr/share/dbus-1/services/org.freedesktop.Notifications.service
|
||||
# [D-BUS Service]
|
||||
# Name=org.freedesktop.Notifications
|
||||
# Exec=/usr/lib/notification-daemon/notification-daemon
|
||||
#EOF
|
||||
|
||||
echo "... setting capslock to control"
|
||||
$SUDO sed -i "s/^XKBOPTIONS=.*/XKBOPTIONS=\"ctrl:nocaps\"/" /etc/default/keyboard
|
||||
|
||||
|
@ -346,7 +335,7 @@ install_syncthing() {
|
|||
|
||||
# Update and install syncthing:
|
||||
$SUDO apt-get update
|
||||
$SUDO apt-get install syncthing
|
||||
$SUDO apt-get install -y syncthing
|
||||
echo "... DONE... cleaning up\n\n"
|
||||
$SUDO apt autoremove
|
||||
$SUDO apt autoclean
|
||||
|
@ -360,6 +349,33 @@ install_syncthing() {
|
|||
$SUDO systemctl start syncthing@${USERNAME}.service
|
||||
systemctl status syncthing@${USERNAME}.service
|
||||
|
||||
no_suspend
|
||||
|
||||
echo "... setting capslock to control"
|
||||
sed -i "s/^XKBOPTIONS=.*/XKBOPTIONS=\"ctrl:nocaps\"/" /etc/default/keyboard
|
||||
|
||||
TARGET="/home/$USERNAME/.emacs.d"
|
||||
git clone https://github.com/syl20bnr/spacemacs "${TARGET}"
|
||||
#rm -rf "${TARGET}"/private/snippets
|
||||
#git clone https://github.com/AndreaCrotti/yasnippet-snippets "${TARGET}"/private/yas-snips
|
||||
#ln -s "${TARGET}"/private/yas-snips/snippets "${TARGET}"/private/snippets/
|
||||
|
||||
}
|
||||
|
||||
link_userdirs() {
|
||||
|
||||
mount_dir=$1
|
||||
target_mount="${mount_dir:-/mnt/docs/}"
|
||||
user_dirs=("Documents Downloads Music Pictures Videos")
|
||||
for DIR in $user_dirs
|
||||
do
|
||||
echo "removing and linking ${DIR}..."
|
||||
rm -rfv /home/$USERNAME/$DIR
|
||||
echo "link target: ${target_mount}/${DIR}"
|
||||
ln -vs ${target_mount}/${DIR} /home/${USERNAME}/${DIR}
|
||||
done
|
||||
|
||||
projects_mount=$docs_mount
|
||||
}
|
||||
|
||||
install_vscodium() {
|
||||
|
@ -427,7 +443,7 @@ EOF
|
|||
docker-ce \
|
||||
--no-install-recommends
|
||||
|
||||
$SUDO addgroup ${USERNAME} docker
|
||||
$SUDO usermod -aG docker ${USERNAME}
|
||||
|
||||
docker version
|
||||
docker info
|
||||
|
@ -442,7 +458,6 @@ install_compose() {
|
|||
echo "installing docker-compose $VERS ... curling from github"
|
||||
|
||||
curl -SL "https://github.com/docker/compose/releases/download/${VERS}/${FILE}" -o /tmp/${FILE}
|
||||
|
||||
curl -SL "https://github.com/docker/compose/releases/download/${VERS}/${FILE}.sha256" -o /tmp/${FILE}.sha256
|
||||
|
||||
if [ ! $(cat /tmp/${FILE}.sha256 | sha256sum -c -) ]; then
|
||||
|
@ -459,6 +474,49 @@ install_compose() {
|
|||
/usr/bin/docker-compose version
|
||||
}
|
||||
|
||||
install_nvidia() {
|
||||
echo "Prepare install for NVIDIA proprietary display driver"
|
||||
|
||||
apt update
|
||||
apt install -y \
|
||||
gcc \
|
||||
linux-source \
|
||||
linux-headers-`uname -r` \
|
||||
--no-install-recommends
|
||||
|
||||
echo ""
|
||||
echo "Please find a link to the current Package"
|
||||
echo " https://devtalk.nvidia.com/default/topic/533434/linux/current-graphics-driver-releases/"
|
||||
echo ""
|
||||
echo "1. Download the self extracting archive. (*.run)"
|
||||
echo "2. reboot into recovery mode and login as root"
|
||||
echo "3. sh DRIVER_ARCHIVE.run"
|
||||
echo ""
|
||||
echo "... check if driver was installed correctly: $ nvidia-smi"
|
||||
echo "more information can be found in README at link above"
|
||||
|
||||
echo ""
|
||||
echo "Install NVIDIA-docker"
|
||||
echo ""
|
||||
echo "since Docker 19.03 no additional runtime required."
|
||||
echo " https://github.com/NVIDIA/nvidia-docker"
|
||||
|
||||
# https://nvidia.github.io/nvidia-docker/
|
||||
distribution="debian10"
|
||||
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
|
||||
apt update
|
||||
apt install -y nvidia-container-toolkit
|
||||
systemctl restart docker
|
||||
docker pull nvidia/cuda:9.0-base
|
||||
|
||||
echo ""
|
||||
echo "... check if driver was installed correctly: "
|
||||
echo "$ docker run --gpus all nvidia/cuda:9.0-base nvidia-smi"
|
||||
echo " should give same output as above"
|
||||
}
|
||||
|
||||
install_virtualbox() {
|
||||
# https://wiki.debian.org/VirtualBox#Installation_of_non-free_edition
|
||||
$SUDO apt install -y \
|
||||
|
@ -469,11 +527,20 @@ install_virtualbox() {
|
|||
software-properties-common \
|
||||
--no-install-recommends
|
||||
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | $SUDO apt-key add -
|
||||
|
||||
# add docker apt repo
|
||||
cat <<-EOF > /etc/apt/sources.list.d/docker.list
|
||||
deb [arch=amd64] https://download.docker.com/linux/debian buster stable
|
||||
# deb [arch=amd64] https://download.docker.com/linux/debian buster test
|
||||
# deb [arch=amd64] https://download.docker.com/linux/debian buster nightly
|
||||
EOF
|
||||
|
||||
}
|
||||
|
||||
# install/update golang from source
|
||||
install_golang() {
|
||||
export GO_VERSION=1.16.0
|
||||
export GO_VERSION=1.18
|
||||
export GO_SRC=/usr/local/go
|
||||
|
||||
# if we are passing the version
|
||||
|
@ -481,7 +548,6 @@ install_golang() {
|
|||
export GO_VERSION=$1
|
||||
fi
|
||||
|
||||
# subshell because we `cd`
|
||||
(
|
||||
curl -sSL "https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz" | $SUDO tar -v -C /usr/local -xz
|
||||
)
|
||||
|
@ -491,8 +557,8 @@ install_rust() {
|
|||
echo "... rustup.sh ... "
|
||||
curl --proto 'https' --tlsv1.2 https://sh.rustup.rs | sh
|
||||
|
||||
eco "... adding dependencies for alacritty and i3status-rs ... "
|
||||
sudo apt install -y \
|
||||
echo "... adding dependencies for alacritty and i3status-rs ... "
|
||||
$SUDO apt install -y \
|
||||
cmake \
|
||||
fonts-font-awesome \
|
||||
gcc \
|
||||
|
@ -506,8 +572,6 @@ install_rust() {
|
|||
python3 \
|
||||
--no-install-recommends
|
||||
|
||||
# for whatever reason alacritty is not available in debian repos
|
||||
cargo install alacritty
|
||||
cargo install du-dust
|
||||
|
||||
(
|
||||
|
@ -518,7 +582,6 @@ install_rust() {
|
|||
cargo install --path .
|
||||
./install.sh
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
main() {
|
||||
|
@ -535,7 +598,10 @@ main() {
|
|||
install_compose
|
||||
;;
|
||||
server)
|
||||
base_applications
|
||||
install_server_base
|
||||
install_docker
|
||||
install_compose
|
||||
;;
|
||||
i3)
|
||||
base_applications
|
||||
|
@ -549,6 +615,9 @@ main() {
|
|||
install_sway
|
||||
install_workstation_apps
|
||||
;;
|
||||
links)
|
||||
link_userdirs /mnt/docs/
|
||||
;;
|
||||
latex)
|
||||
install_latex
|
||||
;;
|
||||
|
|
|
@ -0,0 +1,333 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# install.sh
|
||||
# This script installs a basic setup for a debian machine
|
||||
|
||||
USERNAME=fschl
|
||||
SUDO="sudo"
|
||||
|
||||
check_root() {
|
||||
# We need root rights at some point
|
||||
if [ "$(whoami)" != "root" ]; then
|
||||
if ! which $SUDO >/dev/null; then
|
||||
echo "ERROR: $0 is not run as root and $SUDO is not available" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
SUDO="" # We're already root
|
||||
fi
|
||||
}
|
||||
|
||||
base_applications() {
|
||||
echo "update and installing baseapps..."
|
||||
|
||||
$SUDO pacman -Syu \
|
||||
bash-completion \
|
||||
bmon \
|
||||
bzip2 \
|
||||
ca-certificates \
|
||||
cmake \
|
||||
coreutils \
|
||||
cryptsetup \
|
||||
curl \
|
||||
dhclient \
|
||||
dnsutils \
|
||||
gcc \
|
||||
git \
|
||||
gnupg \
|
||||
htop \
|
||||
make \
|
||||
mount \
|
||||
net-tools \
|
||||
networkmanager \
|
||||
pacman-contrib \
|
||||
rsync \
|
||||
openssh \
|
||||
sudo \
|
||||
tar \
|
||||
tmux \
|
||||
tree \
|
||||
unzip \
|
||||
vim \
|
||||
vpnc \
|
||||
wireguard-tools \
|
||||
zip
|
||||
|
||||
echo "... DONE... cleaning up\n\n"
|
||||
|
||||
# $SUDO ip link add dev wg0 type wireguard
|
||||
$SUDO systemctl start NetworkManager.service
|
||||
$SUDO systemctl enable NetworkManager.service
|
||||
}
|
||||
|
||||
|
||||
no_suspend() {
|
||||
# https://wiki.debian.org/SystemdSuspendSedation
|
||||
$SUDO sed -i "s/HandleLidSwitch=.*/HandleLidSwitch=ignore/" /etc/systemd/logind.conf
|
||||
$SUDO sed -i "s/HandleLidSwitchDocked=.*/HandleLidSwitchDocked=ignore/" /etc/systemd/logind.conf
|
||||
$SUDO sed -i "s/IdleActionSec=.*/IdleActionSec=90min/" /etc/systemd/logind.conf
|
||||
|
||||
# turn off screen blanking
|
||||
# https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=18200&sid=135af53eb82496bc64f4c0eefbc86d2c&start=25
|
||||
# http://raspberrypi.stackexchange.com/questions/752/how-do-i-prevent-the-screen-from-going-blank
|
||||
xset s noblank
|
||||
|
||||
$SUDO systemctl restart systemd-logind.service
|
||||
}
|
||||
|
||||
install_nvidia_docker() {
|
||||
# get latest driver from https://www.nvidia.com/object/unix.html
|
||||
# https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(version-2.0)#prerequisites
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
|
||||
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
|
||||
sudo apt-get update
|
||||
|
||||
# Install nvidia-docker2 and reload the Docker daemon configuration
|
||||
sudo apt-get install -y nvidia-docker2
|
||||
sudo pkill -SIGHUP dockerd
|
||||
}
|
||||
|
||||
install_latex() {
|
||||
echo "- installing LaTeX.."
|
||||
pacman -Syu \
|
||||
evince \
|
||||
texlive \
|
||||
texlive-bibtex-extra \
|
||||
texlive-fonts-extra \
|
||||
texlive-fonts-recommended \
|
||||
texlive-lang-english \
|
||||
texlive-lang-german \
|
||||
texlive-latex-extra \
|
||||
texlive-latex-recommended \
|
||||
texlive-pictures \
|
||||
texlive-plain-generic
|
||||
echo "..done"
|
||||
}
|
||||
|
||||
install_i3() {
|
||||
echo "- installing i3wm and some tools..."
|
||||
|
||||
# check if CJK and other eastern letters are displayed correctly:
|
||||
# https://meta.wikimedia.org/wiki/List_of_Wikipedias
|
||||
|
||||
# tlp: Advanced Linux Power Management
|
||||
# http://linrunner.de/en/tlp/docs/tlp-linux-advanced-power-management.html
|
||||
# deb http://repo.linrunner.de/debian sid main
|
||||
|
||||
$SUDO pacman -Syu \
|
||||
alsa-utils \
|
||||
arandr \
|
||||
aspell \
|
||||
aspell-de \
|
||||
aspell-en \
|
||||
emacs \
|
||||
feh \
|
||||
firefox \
|
||||
gimp \
|
||||
i3 \
|
||||
i3lock \
|
||||
i3lock-fancy \
|
||||
i3status \
|
||||
keepassxc \
|
||||
lightdm \
|
||||
obs-studio \
|
||||
openvpn \
|
||||
powerline-fonts \
|
||||
pulseaudio \
|
||||
pulseaudio-alsa \
|
||||
pulsemixer \
|
||||
rxvt-unicode \
|
||||
scrot \
|
||||
shotwell \
|
||||
speedcrunch \
|
||||
thunderbird \
|
||||
thunderbird-l10n-de \
|
||||
thunderbird-l10n-en-gb \
|
||||
ttf-font-awesome \
|
||||
ttf-dejavu \
|
||||
ttf-opensans \
|
||||
udiskie \
|
||||
vlc \
|
||||
xorg \
|
||||
xorg-xrandr \
|
||||
noto-fonts \
|
||||
syncthing
|
||||
|
||||
|
||||
$SUDO localectl set-x11-keymap de,de ctrl:nocaps
|
||||
|
||||
|
||||
# cups-browsed \
|
||||
# feh \
|
||||
# firmware-linux-nonfree \
|
||||
# firmware-realtek \
|
||||
# fswebcam \
|
||||
# libnotify-bin \
|
||||
# libnotify-dev \
|
||||
# libreoffice-calc \
|
||||
# libreoffice-impress \
|
||||
# libreoffice-l10n-de \
|
||||
# libreoffice-l10n-en-gb \
|
||||
# libreoffice-writer \
|
||||
# network-manager-gnome \
|
||||
# network-manager-vpnc \
|
||||
# network-manager-vpnc-gnome \
|
||||
# notify-osd \
|
||||
# ntfs-3g \
|
||||
# nmap \
|
||||
# pulseaudio \
|
||||
# remmina \
|
||||
# rxvt-unicode-256color \
|
||||
# scrot \
|
||||
# shotwell \
|
||||
# slim \
|
||||
# --no-install-recommends
|
||||
|
||||
# cat <<-EOF > /usr/share/dbus-1/services/org.freedesktop.Notifications.service
|
||||
# [D-BUS Service]
|
||||
# Name=org.freedesktop.Notifications
|
||||
# Exec=/usr/lib/notification-daemon/notification-daemon
|
||||
# EOF
|
||||
|
||||
TARGET="/home/$USERNAME/.emacs.d"
|
||||
git clone https://github.com/syl20bnr/spacemacs "${TARGET}"
|
||||
# rm -rf "${TARGET}"/private/snippets
|
||||
# git clone https://github.com/AndreaCrotti/yasnippet-snippets "${TARGET}"/private/yas-snippets
|
||||
# ln -s "${TARGET}"/private/yas-snips/snippets "${TARGET}"/private/snippets/
|
||||
|
||||
no_suspend
|
||||
|
||||
echo "... setting capslock to control"
|
||||
sed -i "s/^XKBOPTIONS=.*/XKBOPTIONS=\"ctrl:nocaps\"/" /etc/default/keyboard
|
||||
|
||||
TARGET="/home/$USERNAME/.emacs.d"
|
||||
git clone https://github.com/syl20bnr/spacemacs "${TARGET}"
|
||||
#rm -rf "${TARGET}"/private/snippets
|
||||
#git clone https://github.com/AndreaCrotti/yasnippet-snippets "${TARGET}"/private/yas-snips
|
||||
#ln -s "${TARGET}"/private/yas-snips/snippets "${TARGET}"/private/snippets/
|
||||
|
||||
}
|
||||
|
||||
link_userdirs() {
|
||||
|
||||
mount_dir=$1
|
||||
target_mount="${mount_dir:-/mnt/docs/}"
|
||||
user_dirs=("Documents Downloads Music Pictures Videos")
|
||||
for DIR in $user_dirs
|
||||
do
|
||||
echo "removing and linking ${DIR}..."
|
||||
rm -rfv /home/$USERNAME/$DIR
|
||||
echo "link target: ${target_mount}/${DIR}"
|
||||
ln -vs ${target_mount}/${DIR} /home/${USERNAME}/${DIR}
|
||||
done
|
||||
|
||||
projects_mount=$docs_mount
|
||||
}
|
||||
|
||||
install_wine() {
|
||||
# edit /etc/pacman.conf
|
||||
# TODO: enable multilib + Include mirrorlist
|
||||
|
||||
# if using NVidia gpu
|
||||
$SUDO pacman -Syu \
|
||||
lib32-alsa-plugins \
|
||||
lib32-libpulse \
|
||||
lib32-nvidia-utils \
|
||||
lib32-openal \
|
||||
multilib \
|
||||
wine
|
||||
}
|
||||
|
||||
install_vscodium() {
|
||||
# https://vscodium.com/
|
||||
|
||||
pacman -Syu \
|
||||
codium \
|
||||
--no-install-recommends
|
||||
|
||||
codium version
|
||||
}
|
||||
|
||||
install_docker() {
|
||||
echo "installing docker binary Version $VERS ..."
|
||||
# https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount
|
||||
|
||||
pacman -Syu \
|
||||
docker \
|
||||
docker-compose
|
||||
|
||||
$SUDO usermod -aG docker $USERNAME
|
||||
|
||||
docker version
|
||||
docker info
|
||||
}
|
||||
|
||||
|
||||
install_nvidia() {
|
||||
echo "Prepare install for NVIDIA proprietary display driver"
|
||||
|
||||
pacman -Syu \
|
||||
nvidia
|
||||
}
|
||||
|
||||
install_virtualbox() {
|
||||
# https://wiki.debian.org/VirtualBox#Installation_of_non-free_edition
|
||||
pacman -Syu \
|
||||
apt-transport-https \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg2 \
|
||||
software-properties-common \
|
||||
--no-install-recommends
|
||||
|
||||
}
|
||||
|
||||
|
||||
main() {
|
||||
local cmd=$1
|
||||
|
||||
if [[ -z "$cmd" ]]; then
|
||||
echo "Usage: \n base (includes docker+compose)| desktop | server | dotfiles | vscode | latex | update-docker | go"
|
||||
fi
|
||||
|
||||
case "$cmd" in
|
||||
base)
|
||||
# apt_sources buster
|
||||
base_applications
|
||||
;;
|
||||
server)
|
||||
base_applications
|
||||
install_server_base
|
||||
install_docker
|
||||
install_compose
|
||||
;;
|
||||
desktop)
|
||||
base_applications
|
||||
install_docker
|
||||
install_compose
|
||||
install_i3
|
||||
if [ -f "./get_private_stuff.sh" ]; then
|
||||
source get_private_stuff.sh
|
||||
fi
|
||||
;;
|
||||
links)
|
||||
link_userdirs /mnt/docs/
|
||||
;;
|
||||
latex)
|
||||
install_latex
|
||||
;;
|
||||
vscode)
|
||||
install_vscodium
|
||||
;;
|
||||
update-docker)
|
||||
install_docker
|
||||
install_compose
|
||||
;;
|
||||
go)
|
||||
install_golang
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
|
@ -77,4 +77,3 @@ if ! shopt -oq posix; then
|
|||
. /etc/bash_completion
|
||||
fi
|
||||
fi
|
||||
. "$HOME/.cargo/env"
|
||||
|
|
22
sway/config
22
sway/config
|
@ -254,6 +254,28 @@ bar {
|
|||
font pango:DejaVu Sans Mono, FontAwesome 8
|
||||
}
|
||||
|
||||
bar {
|
||||
# position top
|
||||
colors {
|
||||
background #323232
|
||||
statusline #93b4a6
|
||||
focused_workspace #7d9683 #6c71b4 #ede6b3
|
||||
active_workspace #fdf6e3 #6c71b4 #ede6b3
|
||||
# focused_workspace #7d9683 #6c71c4 #fdf6e3
|
||||
# active_workspace #fdf6e3 #6c71c4 #fdf6e3
|
||||
inactive_workspace #002b36 #586e75 #002b36
|
||||
urgent_workspace #d33682 #d33682 #fdf6e3
|
||||
}
|
||||
|
||||
status_command i3status --config ~/dotfiles/.i3/status.conf
|
||||
tray_output $LAPTOP
|
||||
|
||||
# i3blocks: http://kumarcode.com/Colorful-i3/
|
||||
# status_command i3blocks -c ~/.i3/i3blocks.conf
|
||||
output $LAPTOP
|
||||
output $CENTER
|
||||
font pango:DejaVu Sans Mono, FontAwesome 8
|
||||
}
|
||||
|
||||
# bar {
|
||||
# # output $CENTER
|
||||
|
|
|
@ -89,12 +89,12 @@ driver = "sysfs"
|
|||
format = "{percentage} {time}"
|
||||
allow_missing = true
|
||||
|
||||
# [[block]]
|
||||
# block = "networkmanager"
|
||||
# on_click = "alacritty -e nmtui"
|
||||
# interface_name_exclude = ["br\\-[0-9a-f]{12}", "docker\\d+"]
|
||||
# interface_name_include = []
|
||||
# ap_format = "{ssid^10}"
|
||||
[[block]]
|
||||
block = "networkmanager"
|
||||
on_click = "alacritty -e nmtui"
|
||||
interface_name_exclude = ["br\\-[0-9a-f]{12}", "docker\\d+"]
|
||||
interface_name_include = []
|
||||
ap_format = "{ssid^10}"
|
||||
|
||||
|
||||
[[block]]
|
||||
|
|
Loading…
Reference in New Issue