27 Commits

Author SHA1 Message Date
agresdominik 45fb878bd1 vpn shortcut 2026-03-14 21:17:40 +01:00
agresdominik c96e8fd36b added pdf opening in fzf 2026-03-11 11:56:55 +01:00
agresdominik b768d53ab8 Bunch of changes, fuzzy document finder 2026-03-11 11:42:24 +01:00
agresdominik 7dfa279413 sway settings 2026-02-26 17:29:16 +01:00
agresdominik 9ea0e598a6 Added color fix to ls in terminal on ExFAT mounted systems 2026-02-12 13:24:04 +01:00
agresdominik 815561e0ef i3 updates 2026-01-31 00:45:20 +01:00
agresdominik 774763dd07 zshrc from arch 2026-01-31 00:42:52 +01:00
agresdominik 0d6cfd7781 nvim, i3 config and new zed settings 2025-12-11 15:21:12 +01:00
agresdominik 467588a604 Notif tool 2025-11-28 17:47:22 +01:00
agresdominik d87753ff4e sway custom bar 2025-11-16 23:37:27 +01:00
agresdominik b9e201b454 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-11-16 23:24:49 +01:00
agresdominik dabafd59c2 Added vpn script 2025-11-16 23:24:13 +01:00
Dominik 1d274896fb Add MIT License to the project 2025-11-14 18:58:48 +01:00
agresdominik ba89086781 Fixed keyboard mapping for mac keyboard 2025-11-12 14:27:20 +01:00
agresdominik 35c6b79229 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-11-12 14:24:37 +01:00
agresdominik d7b760d93e Update to dotfiles 2025-11-12 14:23:45 +01:00
agresdominik 80394ad98c mac update 2025-11-06 13:46:20 +01:00
agresdominik 73d5a0d548 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-11-06 13:41:49 +01:00
agresdominik f8ad9e5ecb fixed startup block 2025-11-06 13:41:21 +01:00
agresdominik baeb900c65 switched keys on macos 2025-11-06 02:34:58 +01:00
agresdominik ac651fe95d arch linux part of zshrc 2025-11-06 01:55:36 +01:00
agresdominik 918103f48b Separated zshrc in multiple fiels, allowing loading according source based on hostname 2025-11-06 01:49:30 +01:00
agresdominik f5f32f5f45 adjusted sway config 2025-11-06 01:38:19 +01:00
Dominik 7916b9dc3f Merge pull request #1 from agresdominik/asahi_linux
Asahi linux
2025-11-06 01:29:20 +01:00
agresdominik 81aa7cd3aa Deleted old files 2025-11-06 01:25:20 +01:00
agresdominik 72a8bce86d test 2025-11-06 01:24:54 +01:00
agresdominik 2277906fdc fixed some i3 config and zshrc bluetooth alias 2025-11-06 01:24:06 +01:00
52 changed files with 1610 additions and 191 deletions
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Dominik Agreš
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.
+6
View File
@@ -0,0 +1,6 @@
systemctl --user import-environment DISPLAY XAUTHORITY DBUS_SESSION_BUS_ADDRESS
dbus-update-activation-environment --systemd DISPLAY XAUTHORITY DBUS_SESSION_BUS_ADDRESS
i3
export GTK_THEME=Adwaita-dark
export QT_QPA_PLATFORMTHEME=gtk2
+271
View File
@@ -0,0 +1,271 @@
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
follow = none
### Geometry ###
width = 300
height = (0, 300)
origin = top-right
offset = (10, 50)
scale = 0
notification_limit = 5
### Progress bar ###
progress_bar = true
progress_bar_height = 10
progress_bar_frame_width = 1
progress_bar_min_width = 150
progress_bar_max_width = 300
progress_bar_corner_radius = 0
progress_bar_corners = all
icon_corner_radius = 0
icon_corners = all
indicate_hidden = yes
transparency = 20
separator_height = 0
padding = 8
horizontal_padding = 8
text_icon_padding = 0
frame_width = 3
# Defines color of the frame around the notification window.
frame_color = "#aaaaaa"
gap_size = 0
separator_color = frame
sort = yes
idle_threshold = 120
### Text ###
font = Monospace 8
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
format = "<b>%s</b>\n%a %b"
alignment = left
vertical_alignment = center
show_age_threshold = 60
ellipsize = middle
ignore_newline = no
stack_duplicates = true
hide_duplicate_count = false
show_indicators = yes
### Icons ###
enable_recursive_icon_lookup = true
icon_theme = Adwaita
icon_position = off
min_icon_size = 32
max_icon_size = 128
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
sticky_history = yes
history_length = 20
### Misc/Advanced ###
dmenu = /usr/bin/dmenu -p dunst:
browser = /usr/bin/xdg-open
always_run_script = true
title = Dunst
class = Dunst
corner_radius = 5
corners = all
ignore_dbusclose = false
mouse_left_click = do_action, close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
[experimental]
per_monitor_dpi = false
[urgency_low]
background = "#222222"
foreground = "#888888"
timeout = 20
default_icon = dialog-information
[urgency_normal]
background = "#285577"
foreground = "#ffffff"
timeout = 30
override_pause_level = 30
default_icon = dialog-information
[urgency_critical]
background = "#900000"
foreground = "#ffffff"
frame_color = "#ff0000"
timeout = 0
override_pause_level = 60
default_icon = dialog-warning
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
# override_pause_level
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# You can also allow a notification to appear even when paused. Notification will appear whenever notification's override_pause_level >= dunst's paused level.
# This can be used to set partial pause modes, where more urgent notifications get through, but less urgent stay paused. To do that, you can override the following in the rules:
# override_pause_level = X
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg
+28 -28
View File
@@ -1,22 +1,37 @@
# i3blocks configuration file
#
# The i3blocks man page describes the usage of the binary,
# and its website describes the configuration:
#
# https://vivien.github.io/i3blocks
# Global properties
separator=true
separator_block_width=20
[greetings]
color=#f5af19
command=echo "$USER"
color=#00b894
command=echo "[$USER@$HOSTNAME ~]"
interval=once
[uptime]
command=awk '{t=int($1); d=t/86400; h=(t%86400)/3600; m=(t%3600)/60; if(d>0) printf "%dd %02d:%02dh\n", d,h,m; else printf "%02d:%02dh\n", h,m}' /proc/uptime
interval=60
label=UPT:
[homelab]
command=/home/agres/.config/i3/scripts/lab.sh
interval=60
label=LAB:
[homelab]
command=/home/agres/.config/i3/scripts/vpn.sh
interval=10
label=VPN:
[batteries_mouse]
command=/home/agres/.config/i3/scripts/mouse_battery.sh
interval=60
[batteries_keyboard]
command=/home/agres/.config/i3/scripts/keyboard_battery.sh
interval=60
[cpu]
command=mpstat 1 1 | awk '/Average/ {print 100 - $NF"%"}'
command=/home/agres/.config/i3/scripts/cpu_usage.sh
interval=5
label=CPU:
@@ -26,25 +41,10 @@ interval=5
label=GPU:
[mem]
command=free -h | awk '/^Mem/ {print $3 "/" $2}'
command=/home/agres/.config/i3/scripts/mem_usage.sh
interval=10
label=MEM:
#[down]
#command=vnstat -tr 2 | tail -n 3 | awk '/rx/ {print $2}'
#interval=5
#label=DOWN:
#[up]
#command=vnstat -tr 2 | tail -n 3 | awk '/tx/ {print $2}'
#interval=5
#label=UP:
[time]
command=date '+%d.%m %H:%M:%S'
command=date '+%d.%m %H:%M'
interval=1
-3
View File
@@ -1,3 +0,0 @@
i3
export GTK_THEME=Adwaita-dark
export QT_QPA_PLATFORMTHEME=gtk2
-79
View File
@@ -1,79 +0,0 @@
# Oh my zsh
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="eastwood"
HIST_STAMPS="dd.mm.yyyy"
plugins=(git sudo)
source $ZSH/oh-my-zsh.sh
# -- Linux Specific --
if [[ -z $DISPLAY ]] && [[ $(tty) == /dev/tty1 ]]; then
startx
fi
# -- Local Setup ---
# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then
export EDITOR='nvim'
else
export EDITOR='nvim'
fi
# -- Env Paths ---
# go
#export PATH=/usr/local/go/bin:$PATH
# pyenv
#export PYENV_ROOT="$HOME/.pyenv"
#export PATH="$PYENV_ROOT/bin:$PATH"
#eval "$(pyenv init --path)"
#eval "$(pyenv init -)"
# pipx
#export PATH="$PATH:/Users/agres/.local/bin"
#export PATH="$HOME/.local/bin:$PATH"
# pipx Linux
export PATH="$HOME/.local/bin:$PATH"
# bun
#[ -s "/Users/agres/.bun/_bun" ] && source "/Users/agres/.bun/_bun"
#export BUN_INSTALL="$HOME/.bun"
#export PATH="$BUN_INSTALL/bin:$PATH"
# -- Customization --
# Alais: ls to run tree (without any flags)
unalias ls 2>/dev/null
ls() {
if [[ $# -eq 0 ]]; then
tree -L 1
else
command ls -G "$@"
fi
}
# Alias: list all modified and new files in current directory
alias lsgit='git status --porcelain | cut -c 4- | xargs ls -l'
# Alias: wifi to print qr code in terminal from file (device adjustable)
alias wifi='cat /Users/agres/Projects/python_lang/wifi_qr/wifi_password.txt | qr --asci'
# Alias: connect and disconnect bluetooth headphones
#alias airpods-connect='bluetoothctl --controller 6C:2F:80:E0:88:8B connect 80:95:3A:DC:8E:41'
alias airpods-connect='echo -e "select 12:34:56:78:9A:BC\nconnect 80:95:3A:DC:8E:41" | bluetoothctl >> /dev/null'
#alias airpods-disconnect='bluetoothctl --controller 6C:2F:80:E0:88:8B disconnect 80:95:3A:DC:8E:41'
alias airpods-disconnect='echo -e "select 12:34:56:78:9A:BC\ndisconnect 80:95:3A:DC:8E:41" | bluetoothctl >> /dev/null'
alias airpods='echo -e "select 12:34:56:78:9A:BC\ninfo 80:95:3A:DC:8E:41" | bluetoothctl | grep "Connected: "'
# Alias: avoid nano
alias nano=nvim
# Alias quick mount network smdb drive
alias md0='sudo mount --mkdir -t cifs //192.168.0.200/MD0 /mnt/md0 -o username=agres'
Executable → Regular
+100 -40
View File
@@ -1,15 +1,12 @@
set $mod Mod4
#font pango:monospace 8
#font pango:DejaVu Sans Mono 8
#font pango:JetBrains Mono 8
# Set i3 font
font pango:MesloLGL Nerd Font Mono 8
# Start basic functionality apps
exec --no-startup-id dex --autostart --environment i3
#exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
exec --no-startup-id nm-applet
exec --no-startup-id xautolock -time 30 -locker "/home/agres/.config/i3/scripts/lock.sh"
exec --no-startup-id xautolock -time 120 -locker "/home/agres/.config/i3/scripts/lock.sh"
# Keyboard quick buttons
set $refresh_i3status killall -SIGUSR1 i3status
@@ -18,9 +15,7 @@ bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
bindsym --release $mod+Shift+S exec --no-startup-id sh -c '/home/agres/.config/i3/scripts/focused-monitor.sh | xclip -selection clipboard -t image/png'
bindsym --release $mod+Shift+Ctrl+S exec --no-startup-id sh -c '/home/agres/.config/i3/scripts/focused-monitor.sh ~/pictures/$(date +%Y-%m-%d_%H-%M-%S).png'
bindsym --release $mod+Shift+Ctrl+S exec --no-startup-id sh -c '/home/agres/.config/i3/scripts/focused-monitor.sh ~/other/pictures/$(date +%Y-%m-%d_%H-%M-%S).png'
floating_modifier $mod
tiling_drag modifier titlebar
@@ -30,12 +25,14 @@ bindsym $mod+Return exec alacritty
bindsym $mod+Shift+q kill
bindsym $mod+d exec --no-startup-id rofi -show run -theme solarized
bindsym $mod+s exec --no-startup-id ~/.local/bin/docpic-rofi
# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
bindsym $mod+h focus left
bindsym $mod+Left focus left
bindsym $mod+Down focus down
@@ -43,10 +40,10 @@ bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+semicolon move right
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
bindsym $mod+Shift+h move left
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
@@ -54,8 +51,7 @@ bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+h split h
bindsym $mod+b split h
# split in vertical orientation
bindsym $mod+v split v
@@ -63,8 +59,8 @@ bindsym $mod+v split v
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
#bindsym $mod+s layout stacking
#bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
@@ -74,20 +70,22 @@ bindsym $mod+Shift+space floating toggle
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
#bindsym $mod+a focus parent
# focus the child container
#bindsym $mod+d focus child
#Stop focus from wrapping around edges (stay on last window in that direction)
focus_wrapping no
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws1 "1:Code"
set $ws2 "2:Term"
set $ws3 "3:Term"
set $ws4 "4:VM"
set $ws5 "5:Web"
set $ws6 "6:Mail"
set $ws7 "7:Games"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
@@ -147,16 +145,56 @@ mode "resize" {
bindsym $mod+r mode "resize"
gaps inner 5
#gaps outer 2
gaps inner 3
gaps outer 0
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
# Separate bars for dual screen setup
bar {
status_command i3blocks
position top
output DisplayPort-0
status_command i3blocks
position top
tray_output none
workspace_buttons yes
colors {
background #000000
statusline #ffffff
separator #333333
focused_workspace #00675a #00675a #ffffff
active_workspace #1c1c1c #1c1c1c #cccccc
inactive_workspace #000000 #000000 #777777
urgent_workspace #870000 #870000 #ffffff
}
}
bar {
output HDMI-A-0
status_command i3blocks
position top
tray_output none
workspace_buttons yes
colors {
background #000000
statusline #ffffff
separator #333333
focused_workspace #00675a #00675a #ffffff
active_workspace #1c1c1c #1c1c1c #cccccc
inactive_workspace #000000 #000000 #777777
urgent_workspace #870000 #870000 #ffffff
}
}
# Hard defined workspace placement
workspace $ws1 output DisplayPort-0
workspace $ws2 output DisplayPort-0
workspace $ws3 output DisplayPort-0
workspace $ws4 output DisplayPort-0
workspace $ws5 output HDMI-A-0
workspace $ws6 output HDMI-A-0
workspace $ws7 output HDMI-A-0
#workspace $ws8 output HDMI-A-1
# Load Xresources file
exec --no-startup-id xrdb -merge ~/.Xresources
# Keyboard to German
@@ -170,10 +208,32 @@ exec --no-startup-id feh --bg-scale /home/agres/.config/i3/wallpaper/wallpaper.j
# Disable screen from going black after 10 mins to 3 hours
exec --no-startup-id xset s 7200 7200
exec --no-startup-id xset dpms 7200 7200 7200
# Slight Transparency
exec --no-startup-id picom
# Start notification tool
exec --no-startup-id dunst
# Start librepods
#exec --no-startup-id /home/agres/other/build/librepods-main/linux/build/librepods --hide
default_border pixel 4
default_floating_border normal 0
# Window overlay theme
client.focused #00b5af #00b5af #fdf6e3 #073642
client.focused_inactive #073642 #073642 #fdf6e3 #073642
client.unfocused #073642 #073642 #fdf6e3 #073642
set $g0 #111111
set $g1 #1A1A1A
set $g2 #2A2A2A
set $g3 #3A3A3A
set $g4 #4A4A4A
set $g5 #BFBFBF
set $g6 #E6E6E6
set $accent #808080
set $ws_accent #00675a
# --- Window decoration colors ---
# Format: client.<state> <border> <background> <text> <indicator> <child_border>
client.focused $ws_accent $ws_accent $g6 $accent $ws_accent
client.focused_inactive $g3 $g3 $g5 $g3 $g3
client.unfocused $g3 $g3 $g5 $g3 $g3
client.urgent #5F1F1F #5F1F1F $g6 #B35C5C #5F1F1F
client.placeholder $g0 $g0 $g5 $g3 $g0
client.background $g0
+223
View File
@@ -0,0 +1,223 @@
set $mod Mod4
# Set i3 font
font pango:MesloLGL Nerd Font Mono 8
# Start basic functionality apps
exec --no-startup-id dex --autostart --environment i3
exec --no-startup-id nm-applet
exec --no-startup-id xautolock -time 30 -locker "/home/agres/.config/i3/scripts/lock.sh"
# Keyboard quick buttons
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
bindsym --release $mod+Shift+S exec --no-startup-id sh -c '/home/agres/.config/i3/scripts/focused-monitor.sh | xclip -selection clipboard -t image/png'
bindsym --release $mod+Shift+Ctrl+S exec --no-startup-id sh -c '/home/agres/.config/i3/scripts/focused-monitor.sh ~/other/pictures/$(date +%Y-%m-%d_%H-%M-%S).png'
floating_modifier $mod
tiling_drag modifier titlebar
bindsym $mod+Return exec alacritty
bindsym $mod+Shift+q kill
bindsym $mod+d exec --no-startup-id rofi -show run -theme solarized
# change focus
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
bindsym $mod+h focus left
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
bindsym $mod+Shift+h move left
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+b split h
# split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
#bindsym $mod+s layout stacking
#bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
#bindsym $mod+a focus parent
# focus the child container
#bindsym $mod+d focus child
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1:Code"
set $ws2 "2:Term"
set $ws3 "3:Term"
set $ws4 "4:VM"
set $ws5 "5:Web"
set $ws6 "6:Mail"
set $ws7 "7:Games"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
# Locking the screen with i3lock
bindsym $mod+q exec --no-startup-id "/home/agres/.config/i3/scripts/lock.sh"
# resize window (you can also use the mouse for that)
mode "resize" {
bindsym j resize shrink width 10 px or 10 ppt
bindsym k resize grow height 10 px or 10 ppt
bindsym l resize shrink height 10 px or 10 ppt
bindsym semicolon resize grow width 10 px or 10 ppt
# same bindings, but for the arrow keys
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
# back to normal: Enter or Escape or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
gaps inner 3
gaps outer 0
# Separate bars for dual screen setup
bar {
output DisplayPort-0
status_command i3blocks
position top
tray_output none
workspace_buttons yes
colors {
background #000000
statusline #ffffff
separator #333333
focused_workspace #00675a #00675a #ffffff
active_workspace #1c1c1c #1c1c1c #cccccc
inactive_workspace #000000 #000000 #777777
urgent_workspace #870000 #870000 #ffffff
}
}
bar {
output HDMI-A-0
status_command i3blocks
position top
tray_output none
workspace_buttons yes
colors {
background #000000
statusline #ffffff
separator #333333
focused_workspace #00675a #00675a #ffffff
active_workspace #1c1c1c #1c1c1c #cccccc
inactive_workspace #000000 #000000 #777777
urgent_workspace #870000 #870000 #ffffff
}
}
# Hard defined workspace placement
workspace $ws1 output DisplayPort-0
workspace $ws2 output DisplayPort-0
workspace $ws3 output DisplayPort-0
workspace $ws4 output DisplayPort-0
workspace $ws5 output HDMI-A-0
workspace $ws6 output HDMI-A-0
workspace $ws7 output HDMI-A-0
#workspace $ws8 output HDMI-A-1
# Load Xresources file
exec --no-startup-id xrdb -merge ~/.Xresources
# Keyboard to German
exec --no-startup-id setxkbmap -layout de
# Set the screens correctly
exec --no-startup-id xrandr --output HDMI-A-0 --primary --auto --output DisplayPort-0 --auto --left-of HDMI-A-0
# Scale 4K screen bigger
exec --no-startup-id xrandr --output DisplayPort-0 --scale 0.8x0.8
# Set wallpaper
exec --no-startup-id feh --bg-scale /home/agres/.config/i3/wallpaper/wallpaper.jpg
# Disable screen from going black after 10 mins to 3 hours
exec --no-startup-id xset s 7200 7200
exec --no-startup-id xset dpms 7200 7200 7200
# Slight Transparency
exec --no-startup-id picom
# Start notification tool
exec --no-startup-id dunst
# Application Autostarts
exec --no-startup-id i3-msg "workspace $ws2; exec alacritty"
exec --no-startup-id i3-msg "workspace $ws1; exec zeditor"
exec --no-startup-id i3-msg "workspace $ws5; exec zen-browser"
exec --no-startup-id i3-msg "workspace $ws6; exec thunderbird"
# Window overlay theme
client.focused #00b894 #00675a #ffffff #00b894 #00675a
client.focused_inactive #303030 #1c1c1c #cccccc #303030 #1c1c1c
client.unfocused #1c1c1c #000000 #999999 #1c1c1c #000000
client.urgent #ff5f5f #870000 #ffffff #ff5f5f #870000
client.placeholder #000000 #000000 #ffffff #000000 #000000
+17
View File
@@ -0,0 +1,17 @@
#!/bin/sh
usage=$(mpstat 1 1 | awk '/Average/ {print 100 - $NF}')
temp=$(sensors | awk '/^Tctl:/ {gsub(/[+°]C/, "", $2); print $2; exit}')
temp=${temp#+}
text="${usage}% ${temp}°C"
echo "$text"
echo "$text"
if [ "$(printf "%.0f" "$usage")" -ge 90 ]; then
echo "#ffcc66"
else
echo "#ffffff"
fi
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
# Which output contains the focused node?
output=$(i3-msg -t get_tree | jq -r '.. | select(.focused? == true) | .output')
# Get its geometry from i3 directly
geometry=$(i3-msg -t get_outputs \
| jq -r --arg out "$output" '.[] | select(.name==$out and .active)
| .rect | "\(.width)x\(.height)+\(.x)+\(.y)"')
# Shoot that output
exec maim -u -g "$geometry" "$@"
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
# ~/.config/i3/scripts/gpu_usage.sh
if command -v rocm-smi &>/dev/null; then
output=$(rocm-smi --showtemp --showuse)
temp=$(echo "$output" | awk -F': ' '/Sensor edge/ {print $3; exit}')
usage=$(echo "$output" | awk -F': ' '/GPU use/ {print $3; exit}')
echo "${usage}% ${temp}°C"
echo "${usage}% ${temp}°C"
if [ "$usage" -ge 90 ]; then
echo "#ffcc66"
else
echo "#ffffff"
fi
else
echo "N/A"
echo "N/A"
echo "#ffffff"
fi
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
KBD_PATH="/org/freedesktop/UPower/devices/keyboard_dev_D7_E8_29_FA_0F_D0"
if upower -i "$KBD_PATH" 2>/dev/null | grep -q "present:.*yes"; then
perc=$(upower -i "$KBD_PATH" | awk '/percentage:/ {print $2}')
echo "KBD:$perc"
echo "KBD:$perc"
raw=${perc%\%}
if [ "$raw" -ge 15 ]; then
echo "#ffffff"
else
echo "#ffcc66"
fi
else
echo ""
fi
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
HOST=192.168.0.200
if ping -c1 -W1 "$HOST" >/dev/null 2>&1; then
echo "UP"
echo "UP"
echo "#00b894"
else
echo "DOWN"
echo "DOWN"
echo "#ff0000"
fi
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
if pgrep -x i3lock >/dev/null; then
exit 0
fi
img=/tmp/lock.png
scrot --overwrite "$img"
magick "$img" -blur 0x8 "$img"
i3lock \
-i "$img" \
--inside-color=373445ff \
--ring-color=ffffffff \
--line-color=00000000 \
--keyhl-color=d23c3dff \
--bshl-color=d23c3dff \
--separator-color=00000000 \
--insidever-color=ffffff1c \
--insidewrong-color=d23c3d1c \
--ringver-color=ffffffff \
--ringwrong-color=d23c3dff \
--indicator \
--clock \
--time-color=ffffffff \
--date-color=ffffffff \
--time-font="JetBrainsMono Nerd Font" \
--date-font="JetBrainsMono Nerd Font" \
--radius=120
+23
View File
@@ -0,0 +1,23 @@
#!/bin/sh
used=$(free -h --si | awk '/^Mem/ {print $3}')
total="32G"
text="${used}/${total}"
echo "$text"
echo "$text"
u=$(free --si | awk '/^Mem/ {print $3}')
t=$(free --si | awk '/^Mem/ {print $2}')
u_num=${u%[A-Za-z]*}
t_num=${t%[A-Za-z]*}
pct=$(awk -v u="$u_num" -v t="$t_num" 'BEGIN {printf "%.0f", (u/t)*100}')
if [ "$pct" -ge 90 ]; then
echo "#ffcc66"
else
echo "#ffffff"
fi
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
MOUSE_PATH=$(upower -e | grep -E 'hidpp_battery_[0-9]+$' | head -n 1)
if [[ -n "$MOUSE_PATH" ]] && upower -i "$MOUSE_PATH" 2>/dev/null | grep -q "present:.*yes"; then
perc=$(upower -i "$MOUSE_PATH" | awk '/percentage:/ {print $2}')
echo "MOUSE:$perc"
echo "MOUSE:$perc"
raw=${perc%\%}
if [ "$raw" -ge 15 ]; then
echo "#ffffff"
else
echo "#ffcc66"
fi
else
echo ""
fi
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
STATUS="$(mullvad status 2>/dev/null)"
if echo "$STATUS" | grep -q "^Connected"; then
echo "UP"
echo "UP"
echo "#00b894"
else
echo "DOWN"
echo "DOWN"
echo "#ff0000"
fi
Binary file not shown.

After

Width:  |  Height:  |  Size: 478 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

+17
View File
@@ -0,0 +1,17 @@
#!/bin/sh
usage=$(mpstat 1 1 | awk '/Average/ {print 100 - $NF}')
temp=$(sensors | awk '/^Tctl:/ {gsub(/[+°]C/, "", $2); print $2; exit}')
temp=${temp#+}
text="${usage}% ${temp}°C"
echo "$text"
echo "$text"
if [ "$(printf "%.0f" "$usage")" -ge 90 ]; then
echo "#ffcc66"
else
echo "#ffffff"
fi
+18 -4
View File
@@ -1,8 +1,22 @@
#!/bin/bash
# ~/.config/i3/scripts/gpu_usage.sh
if [ -f /sys/module/amdgpu/drivers/pci:amdgpu/0000:2b:00.0/gpu_busy_percent ]; then
usage=$(awk '{print $1}' /sys/module/amdgpu/drivers/pci:amdgpu/0000:2b:00.0/gpu_busy_percent)
echo "${usage}%"
if command -v rocm-smi &>/dev/null; then
output=$(rocm-smi --showtemp --showuse)
temp=$(echo "$output" | awk -F': ' '/Sensor edge/ {print $3; exit}')
usage=$(echo "$output" | awk -F': ' '/GPU use/ {print $3; exit}')
echo "${usage}% ${temp}°C"
echo "${usage}% ${temp}°C"
if [ "$usage" -ge 90 ]; then
echo "#ffcc66"
else
echo "#ffffff"
fi
else
echo "N/A"
echo "N/A"
echo "N/A"
echo "#ffffff"
fi
+12 -1
View File
@@ -1,10 +1,21 @@
#!/usr/bin/env bash
KBD_PATH="/org/freedesktop/UPower/devices/keyboard_dev_D7_E8_29_FA_0F_CF"
KBD_PATH="/org/freedesktop/UPower/devices/keyboard_dev_D7_E8_29_FA_0F_D0"
if upower -i "$KBD_PATH" 2>/dev/null | grep -q "present:.*yes"; then
perc=$(upower -i "$KBD_PATH" | awk '/percentage:/ {print $2}')
echo "KBD:$perc"
echo "KBD:$perc"
raw=${perc%\%}
if [ "$raw" -ge 15 ]; then
echo "#ffffff"
else
echo "#ffcc66"
fi
else
echo ""
fi
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
HOST=192.168.0.200
if ping -c1 -W1 "$HOST" >/dev/null 2>&1; then
echo "UP"
echo "UP"
echo "#00b894"
else
echo "DOWN"
echo "DOWN"
echo "#ff0000"
fi
+23
View File
@@ -0,0 +1,23 @@
#!/bin/sh
used=$(free -h --si | awk '/^Mem/ {print $3}')
total="32G"
text="${used}/${total}"
echo "$text"
echo "$text"
u=$(free --si | awk '/^Mem/ {print $3}')
t=$(free --si | awk '/^Mem/ {print $2}')
u_num=${u%[A-Za-z]*}
t_num=${t%[A-Za-z]*}
pct=$(awk -v u="$u_num" -v t="$t_num" 'BEGIN {printf "%.0f", (u/t)*100}')
if [ "$pct" -ge 90 ]; then
echo "#ffcc66"
else
echo "#ffffff"
fi
+10
View File
@@ -4,7 +4,17 @@ MOUSE_PATH=$(upower -e | grep -E 'hidpp_battery_[0-9]+$' | head -n 1)
if [[ -n "$MOUSE_PATH" ]] && upower -i "$MOUSE_PATH" 2>/dev/null | grep -q "present:.*yes"; then
perc=$(upower -i "$MOUSE_PATH" | awk '/percentage:/ {print $2}')
echo "MOUSE:$perc"
echo "MOUSE:$perc"
raw=${perc%\%}
if [ "$raw" -ge 15 ]; then
echo "#ffffff"
else
echo "#ffcc66"
fi
else
echo ""
fi
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
STATUS="$(mullvad status 2>/dev/null)"
if echo "$STATUS" | grep -q "^Connected"; then
echo "UP"
echo "UP"
echo "#00b894"
else
echo "DOWN"
echo "DOWN"
echo "#ff0000"
fi
Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

+9
View File
@@ -0,0 +1,9 @@
#!/bin/sh
cd "$HOME/documents" || exit 1
fd --type f . |
fzf \
--scheme=path \
--prompt='documents> ' \
--preview 'bat --style=numbers --color=always --line-range :300 {}' \
--bind 'enter:become(nvim {})'
+18
View File
@@ -0,0 +1,18 @@
#!/bin/sh
file=$(
cd "$HOME/documents" || exit 1
fd --type f . | rofi -dmenu -i -p "documents"
) || exit 0
[ -n "$file" ] || exit 0
path="$HOME/documents/$file"
case "$path" in
*.pdf|*.PDF)
exec zathura "$path"
;;
*)
exec alacritty -e nvim "$path"
;;
esac
+5
View File
@@ -0,0 +1,5 @@
sudo openconnect -vvvv --timestamp --dump-http-traffic \
--protocol=anyconnect \
--useragent='AnyConnect' \
--gnutls-priority="NORMAL:-VERS-ALL:+VERS-TLS1.2:+RSA:+AES-128-CBC:+SHA1" \
vpn-ac.uni-heidelberg.de/2fa
+16
View File
@@ -0,0 +1,16 @@
-- Set leader key to Space
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- Load basic settings
require("config.options")
require("config.keymaps")
-- Load plugins (lazy.nvim will be auto-installed)
require("config.plugins")
-- Plugin-specific configuration
require("config.lsp")
require("config.treesitter")
require("config.telescope")
require("config.cmp")
+23
View File
@@ -0,0 +1,23 @@
{
"LuaSnip": { "branch": "master", "commit": "3732756842a2f7e0e76a7b0487e9692072857277" },
"barbar.nvim": { "branch": "master", "commit": "fb4369940a07dda35fa4d7f54cf4a36aa00440e6" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" },
"cmp-nvim-lsp": { "branch": "main", "commit": "bd5a7d6db125d4654b50eeae9f5217f24bb22fd3" },
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "20ad4419564d6e22b189f6738116b38871082332" },
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lualine.nvim": { "branch": "master", "commit": "3946f0122255bc377d14a59b27b609fb3ab25768" },
"neo-tree.nvim": { "branch": "v3.x", "commit": "f3df514fff2bdd4318127c40470984137f87b62e" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-cmp": { "branch": "main", "commit": "106c4bcc053a5da783bf4a9d907b6f22485c2ea0" },
"nvim-lspconfig": { "branch": "master", "commit": "b34fbdffdcb6295c7a25df6ba375452a2e73c32e" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-web-devicons": { "branch": "master", "commit": "8dcb311b0c92d460fac00eac706abd43d94d68af" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"sonokai": { "branch": "master", "commit": "ec07018013b4683cf33f80ee4bdf3eca2621da33" },
"telescope.nvim": { "branch": "master", "commit": "3a12a853ebf21ec1cce9a92290e3013f8ae75f02" },
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" }
}
+74
View File
@@ -0,0 +1,74 @@
-- Completion setup for Neovim using nvim-cmp and LuaSnip
-- Safely import modules
local cmp_status, cmp = pcall(require, "cmp")
if not cmp_status then
return
end
local snip_status, luasnip = pcall(require, "luasnip")
if not snip_status then
return
end
-- Load friendly-snippets (optional, prebuilt snippets)
require("luasnip.loaders.from_vscode").lazy_load()
-- Setup nvim-cmp
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-Space>"] = cmp.mapping.complete(), -- Trigger completion menu
["<CR>"] = cmp.mapping.confirm({ select = true }), -- Confirm selection
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" }, -- LSP completion
{ name = "luasnip" }, -- Snippets
}, {
{ name = "buffer" }, -- Words in current buffer
{ name = "path" }, -- File system paths
}),
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
formatting = {
format = function(entry, vim_item)
vim_item.menu = ({
nvim_lsp = "[LSP]",
luasnip = "[Snip]",
buffer = "[Buf]",
path = "[Path]",
})[entry.source.name]
return vim_item
end,
},
})
+67
View File
@@ -0,0 +1,67 @@
local map = vim.api.nvim_set_keymap
local opts = { noremap = true, silent = true }
-- Tabs shortcuts
map('n', '<A-,>', '<Cmd>BufferPrevious<CR>', opts)
map('n', '<A-.>', '<Cmd>BufferNext<CR>', opts)
map('n', '<A-1>', '<Cmd>BufferGoto 1<CR>', opts)
map('n', '<A-2>', '<Cmd>BufferGoto 2<CR>', opts)
map('n', '<A-3>', '<Cmd>BufferGoto 3<CR>', opts)
map('n', '<A-4>', '<Cmd>BufferGoto 4<CR>', opts)
map('n', '<A-5>', '<Cmd>BufferGoto 5<CR>', opts)
map('n', '<A-6>', '<Cmd>BufferGoto 6<CR>', opts)
map('n', '<A-7>', '<Cmd>BufferGoto 7<CR>', opts)
map('n', '<A-8>', '<Cmd>BufferGoto 8<CR>', opts)
map('n', '<A-9>', '<Cmd>BufferGoto 9<CR>', opts)
map('n', '<A-0>', '<Cmd>BufferLast<CR>', opts)
map('n', '<A-c>', '<Cmd>BufferClose<CR>', opts)
map('n', '<C-p>', '<Cmd>BufferPick<CR>', opts)
map('n', '<C-s-p>', '<Cmd>BufferPickDelete<CR>', opts)
map('n', '<Space>bb', '<Cmd>BufferOrderByBufferNumber<CR>', opts)
map('n', '<Space>bn', '<Cmd>BufferOrderByName<CR>', opts)
map('n', '<Space>bd', '<Cmd>BufferOrderByDirectory<CR>', opts)
map('n', '<Space>bl', '<Cmd>BufferOrderByLanguage<CR>', opts)
map('n', '<Space>bw', '<Cmd>BufferOrderByWindowNumber<CR>', opts)
-- Toggle Neotree
map('n', '<leader>e', ':Neotree toggle<CR>', opts)
-- Terminal
map('n', '<leader>t', ':terminal<CR>', opts)
--[[
-- Turn off arrow keys
vim.keymap.set("n", "<Up>", "<Nop>", opts)
vim.keymap.set("n", "<Down>", "<Nop>", opts)
vim.keymap.set("n", "<Left>", "<Nop>", opts)
vim.keymap.set("n", "<Right>", "<Nop>", opts)
vim.keymap.set("i", "<Up>", "<Nop>", opts)
vim.keymap.set("i", "<Down>", "<Nop>", opts)
vim.keymap.set("i", "<Left>", "<Nop>", opts)
vim.keymap.set("i", "<Right>", "<Nop>", opts)
-- To move around in insert mode with hjkl
vim.keymap.set("i", "<C-h>", "<Left>", opts)
vim.keymap.set("i", "<C-j>", "<Down>", opts)
vim.keymap.set("i", "<C-k>", "<Up>", opts)
vim.keymap.set("i", "<C-l>", "<Right>", opts)
vim.keymap.set("v", "<Up>", "<Nop>", opts)
vim.keymap.set("v", "<Down>", "<Nop>", opts)
vim.keymap.set("v", "<Left>", "<Nop>", opts)
vim.keymap.set("v", "<Right>", "<Nop>", opts)
vim.keymap.set("o", "<Up>", "<Nop>", opts)
vim.keymap.set("o", "<Down>", "<Nop>", opts)
vim.keymap.set("o", "<Left>", "<Nop>", opts)
vim.keymap.set("o", "<Right>", "<Nop>", opts)
vim.keymap.set("t", "<Up>", "<Nop>", opts)
vim.keymap.set("t", "<Down>", "<Nop>", opts)
vim.keymap.set("t", "<Left>", "<Nop>", opts)
vim.keymap.set("t", "<Right>", "<Nop>", opts)
--]]
+34
View File
@@ -0,0 +1,34 @@
-- Common on_attach handler
local on_attach = function(client, bufnr)
local opts = { buffer = bufnr }
vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
end
-- Configure all your servers
vim.lsp.config("lua_ls", {
on_attach = on_attach,
settings = {
Lua = { diagnostics = { globals = { "vim" } } },
},
})
vim.lsp.config("pyright", { on_attach = on_attach })
vim.lsp.config("gopls", { on_attach = on_attach })
vim.lsp.config("clangd", { on_attach = on_attach })
vim.lsp.config("omnisharp", { on_attach = on_attach })
vim.lsp.config("jdtls", { on_attach = on_attach })
vim.lsp.config("ts_ls", { on_attach = on_attach })
vim.lsp.config("jsonls", { on_attach = on_attach })
vim.lsp.config("yamlls", { on_attach = on_attach })
-- Enable them all
for _, server in ipairs({
"lua_ls", "pyright", "gopls", "clangd",
"omnisharp", "jdtls", "ts_ls", "jsonls", "yamlls",
}) do
vim.lsp.enable(server)
end
+9
View File
@@ -0,0 +1,9 @@
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
vim.opt.termguicolors = true
vim.opt.cursorline = true
vim.opt.mouse = "a"
vim.opt.clipboard:append('unnamedplus')
+93
View File
@@ -0,0 +1,93 @@
-- Bootstrap lazy.nvim if not installed
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git", "clone", "--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
lazypath
})
end
vim.opt.rtp:prepend(lazypath)
-- Plugins
require("lazy").setup({
-- Core
"nvim-lua/plenary.nvim",
-- UI
"nvim-lualine/lualine.nvim",
"nvim-tree/nvim-web-devicons",
-- Treesitter
{ "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" },
-- Telescope
"nvim-telescope/telescope.nvim",
-- LSP
"neovim/nvim-lspconfig",
-- Themes
"folke/tokyonight.nvim",
{
'sainnhe/sonokai',
lazy = false,
priority = 1000,
config = function()
-- Optionally configure and load the colorscheme
-- directly inside the plugin declaration.
vim.g.sonokai_enable_italic = true
vim.cmd.colorscheme('sonokai')
end
},
-- Autocomplete
{
"hrsh7th/nvim-cmp",
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline",
"L3MON4D3/LuaSnip",
"saadparwaiz1/cmp_luasnip",
"rafamadriz/friendly-snippets",
},
--[[ Markdown Render Page
{
'MeanderingProgrammer/render-markdown.nvim',
dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.nvim'}, -- if you use the mini.nvim suite
-- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.icons' }, -- if you use standalone mini plugins
-- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons
---@module 'render-markdown'
---@type render.md.UserConfig
opts = {},
},
--]]
-- Tabs
{ 'romgrk/barbar.nvim',
dependencies = {
'lewis6991/gitsigns.nvim', -- OPTIONAL: for git status
'nvim-tree/nvim-web-devicons', -- OPTIONAL: for file icons
},
init = function() vim.g.barbar_auto_setup = false end,
opts = {
-- lazy.nvim will automatically call setup for you. put your options here, anything missing will use the default:
-- animation = true,
-- insert_at_start = true,
-- …etc.
},
},
{
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
dependencies = {
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
"nvim-tree/nvim-web-devicons", -- optional, but recommended
},
lazy = false, -- neo-tree will lazily load itself
},
})
+25
View File
@@ -0,0 +1,25 @@
local telescope = require("telescope")
telescope.setup({
defaults = {
prompt_prefix = "🔍 ",
selection_caret = "",
path_display = { "smart" },
sorting_strategy = "ascending",
layout_config = { prompt_position = "top" },
},
pickers = {
find_files = {
hidden = true, -- show hidden files
},
},
})
-- Optional: keymaps for quick access
local builtin = require("telescope.builtin")
vim.keymap.set("n", "<leader>ff", builtin.find_files, { desc = "Find files" })
vim.keymap.set("n", "<leader>fg", builtin.live_grep, { desc = "Grep text" })
vim.keymap.set("n", "<leader>fb", builtin.buffers, { desc = "Find buffers" })
vim.keymap.set("n", "<leader>fh", builtin.help_tags, { desc = "Find help" })
vim.keymap.set("n", "<leader>fr", builtin.oldfiles, { desc = "Recent files" })
+16
View File
@@ -0,0 +1,16 @@
require("nvim-treesitter.configs").setup({
ensure_installed = {
-- Programming Languages
"lua", "python", "bash", "javascript", "typescript",
"go", "java", "c", "cpp", "c_sharp", "rust",
-- Web Languages
"html", "css", "scss", "json", "yaml", "toml", "xml",
-- Other formats
"markdown", "markdown_inline", "sql", "dockerfile", "gitignore"
},
highlight = { enable = true },
indent = { enable = true },
})
+65 -31
View File
@@ -5,7 +5,19 @@ set $down j
set $up k
set $right l
set $term alacritty
set $menu wmenu-run -l 5
set $menu wmenu-run -l 5 -N 000000ff -n ffffffff -M 00675aff -m ffffffff -S 00675aff -s ffffffff
# Workspace Names
set $ws1 "1: Code"
set $ws2 "2: Term"
set $ws3 "3: Term"
set $ws4 "4: VM"
set $ws5 "5: Web"
set $ws6 "6: Mail"
set $ws7 "7: Games"
set $ws8 "8: Other"
set $ws9 "9: Other"
set $ws10 "10: Other"
# Font
font pango:MesloLGL Nerd Font Mono 10
@@ -48,33 +60,36 @@ exec_always /home/agres/.config/sway/scripts/lock-sway.sh
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# Stop focus from wrapping around edges (stay on last window in that direction)
focus_wrapping no
# Workspaces:
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
bindsym $mod+3 workspace number 3
bindsym $mod+4 workspace number 4
bindsym $mod+5 workspace number 5
bindsym $mod+6 workspace number 6
bindsym $mod+7 workspace number 7
bindsym $mod+8 workspace number 8
bindsym $mod+9 workspace number 9
bindsym $mod+0 workspace number 10
bindsym $mod+Shift+1 move container to workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10
bindsym $mod+Shift+1 move container to workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8
bindsym $mod+Shift+9 move container to workspace $ws9
bindsym $mod+Shift+0 move container to workspace $ws10
# Layout stuff:
bindsym $mod+b splith
bindsym $mod+v splitv
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
# bindsym $mod+s layout stacking
# bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
bindsym $mod+f fullscreen
bindsym $mod+Shift+space floating toggle
@@ -108,25 +123,38 @@ bindsym $mod+r mode "resize"
# Special keys to adjust brightness via brightnessctl
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
# bindsym --locked button exec brightnessctl --device='kbd_backlight' set +10%
# bindsym --locked button exec brightnessctl --device='kbd_backlight' set -10%
# Special key to take a screenshot with grim
bindsym Print exec grim
# Status Bar:
bar {
position top
status_command while /home/agres/.config/sway/scripts/status.sh; do sleep 1; done
status_command while /home/agres/.config/sway/scripts/status.sh; do sleep 0.5; done
colors {
background #000000
statusline #ffffff
background #323232
inactive_workspace #32323200 #32323200 #5c5c5c
separator #333333
focused_workspace #00675a #00675a #ffffff
active_workspace #1c1c1c #1c1c1c #cccccc
inactive_workspace #000000 #000000 #777777
urgent_workspace #870000 #870000 #ffffff
}
}
input * {
input type:keyboard {
xkb_layout de
xkb_variant nodeadkeys
}
input "1452:641:Apple_SPI_Keyboard" {
xkb_layout de
xkb_variant nodeadkeys
xkb_options altwin:swap_lalt_lwin
}
input "1452:641:Apple_SPI_Trackpad" {
pointer_accel -0.1
natural_scroll enabled
@@ -141,9 +169,15 @@ output eDP-1 {
# Opacity Settings
for_window [app_id="Alacritty"] opacity 0.98
# Border Colors
client.focused #00b5af #00b5af #fdf6e3 #073642
client.focused_inactive #073642 #073642 #fdf6e3 #073642
client.unfocused #073642 #073642 #fdf6e3 #073642
# Show a slightly thicker border so focused window color is more obvious
default_border pixel 3
default_floating_border pixel 3
# Window overlay theme
client.focused #00b894 #00675a #ffffff #00b894 #00675a
client.focused_inactive #303030 #1c1c1c #cccccc #303030 #1c1c1c
client.unfocused #1c1c1c #000000 #999999 #1c1c1c #000000
client.urgent #ff5f5f #870000 #ffffff #ff5f5f #870000
client.placeholder #000000 #000000 #ffffff #000000 #000000
include /etc/sway/config.d/*
+24 -5
View File
@@ -1,8 +1,27 @@
#!/bin/bash
mem=$(free -h | awk '/Mem:/ {print $3 "/" $2}')
cpu=$(grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {printf "%.1f%%", usage}')
bat=$(cat /sys/class/power_supply/macsmc-battery/capacity 2>/dev/null || echo "N/A")
time=$(date "+%d.%m %H:%M:%S")
MEM=$(free -h --si | awk '/Mem:/ {print $3 "/" $2}')
echo "$USER | CPU: $cpu | MEM: $mem | BAT: $bat% | $time"
CPU=$(mpstat 1 1 | awk '/Average/ {printf "%.1f%%\n", 100 - $NF"%"}')
CAP=$(cat /sys/class/power_supply/macsmc-battery/capacity 2>/dev/null || echo "N/A")
STAT=$(cat /sys/class/power_supply/macsmc-battery/status 2>/dev/null || stat="")
if [[ $CAP != "N/A" && $STAT == "Charging" ]]; then
BAT="${CAP}% (C)"
elif [[ $CAP != "N/A" ]]; then
BAT="${CAP}%"
else
BAT="N/A"
fi
TIME=$(date "+%d.%m %H:%M")
#BRIGHT=$(echo "$(brightnessctl get) / 4.2" | bc)
VPN_STATUS=$(mullvad status 2>/dev/null | grep -q '^Connected' && echo UP || echo DOWN)
LAB_STATUS=$(ping -c1 -W1 192.168.0.200 >/dev/null 2>&1 && echo UP || echo DOWN )
UPTIME=$(awk '{t=int($1); d=t/86400; h=(t%86400)/3600; m=(t%3600)/60; if(d>0) printf "%dd %02d:%02dh\n", d,h,m; else printf "%02d:%02dh\n", h,m}' /proc/uptime)
POWER=$(powerprofilesctl get | tr '[:lower:]' '[:upper:]')
echo "$USER | UPT: $UPTIME | POW: $POWER | LAB: $LAB_STATUS | VPN: $VPN_STATUS | CPU: $CPU | MEM: $MEM | BAT: $BAT | $TIME "
+105
View File
@@ -0,0 +1,105 @@
{
// Global Telemetry Settings
"telemetry": {
"diagnostics": false,
"metrics": false
},
// Behaviour
"tab_size": 2,
"vim_mode": true,
"format_on_save": "off",
"autosave": "on_focus_change",
// Theme / Visual Settings
"icon_theme": {
"mode": "dark",
"light": "Zed (Default)",
"dark": "Zed (Default)"
},
"theme": {
"mode": "dark",
"light": "Gruvbox Light",
"dark": "Gruvbox Dark Hard"
},
"ui_font_size": 16.0,
"buffer_font_size": 13.0,
"soft_wrap": "editor_width",
// Indentation
"indent_guides": {
"enabled": true,
"coloring": "indent_aware"
},
// Relative line numbers (vim)
"relative_line_numbers": "enabled",
// Further Visual Settings
"tab_bar": {
"show": true
},
"scrollbar": {
"show": "never"
},
// Predictions
"show_edit_predictions": false,
// Language Settings
"languages": {
"Go": {
"show_edit_predictions": false
}
},
// File syntax highlight
"file_types": {
"Dockerfile": ["Dockerfile", "Dockerfile.*"],
"JSON": ["json", "jsonc", "*.code-snippets"],
},
// Agent / LLM Settings
"language_models": {
"ollama": {
"api_url": "http://localhost:11434",
"available_models": [
{
"name": "qwen2.5-coder:14b-instruct-q4_0",
"display_name": "Qwen2.5 Coder 14B Instruct (Q4_0)",
"max_tokens": 32768,
"supports_tools": false,
"supports_thinking": false
}
]
}
},
"agent": {
"default_profile": "write",
"default_model": {
"provider": "copilot_chat",
"model": "gpt-5-mini"
},
"model_parameters": []
},
// LLM Inline Prediction
"edit_predictions": {
"provider": "copilot"
},
// LSP Server Settings
"lsp": {
"texlab": {
"settings": {
"texlab": {
"build": {
"onSave": false
}
}
}
}
}
}
+69
View File
@@ -0,0 +1,69 @@
# Oh my zsh
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="eastwood"
HIST_STAMPS="dd.mm.yyyy"
plugins=(git sudo)
# Load sources
source $ZSH/oh-my-zsh.sh
case "$HOST" in
arch) source ~/.zshrc_arch ;;
fedora-mac) source ~/.zshrc_fedora ;;
esac
source /usr/share/fzf/key-bindings.zsh
# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then
export EDITOR='nvim'
else
export EDITOR='nvim'
fi
# Alais: ls to run tree (without any flags)
unalias ls 2>/dev/null
ls() {
if [[ $# -eq 0 ]]; then
tree -L 1
else
command ls -G "$@"
fi
}
# Alias: list all modified and new files in current directory
alias lsgit='git status --porcelain | cut -c 4- | xargs ls -l'
# Bluetooth headphones
alias airpods-connect='echo -e "connect 80:95:3A:DC:8E:41" | bluetoothctl >> /dev/null'
alias airpods-disconnect='echo -e "disconnect 80:95:3A:DC:8E:41" | bluetoothctl >> /dev/null'
alias airpods='echo -e "info 80:95:3A:DC:8E:41" | bluetoothctl | grep "Connected: "'
# Alias: avoid nano
alias nano=nvim
# Alias quick mount network smdb drive
alias md0='sudo mount --mkdir -t cifs //192.168.0.200/MD0 /mnt/md0 -o username=agres,uid=$(id -u),gid=$(id -g)'
# Load ssh keys in terminal
alias loadssh='eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_ed25519'
# Tmux aliases
alias ta='tmux attach -t'
alias tn='tmux new -s'
alias tl='tmux ls'
alias tk='tmux kill-session -t'
# Pdf alias
alias pdf='zathura'
# GPG TTY Fix
export GPG_TTY=$(tty)
# Fix unreadable color pallete for ExFat File systems
LS_COLORS="$LS_COLORS:ow=01;36:"
export LS_COLORS
# Add local and global bin files to path
export PATH="/home/agres/.npm-global/bin:$PATH"
export PATH="$HOME/.local/bin:$PATH"
+14
View File
@@ -0,0 +1,14 @@
# Start on boot
if [[ -z $DISPLAY ]] && [[ $(tty) == /dev/tty1 ]]; then
startx
fi
# -- Env Paths ---
export GOPATH=$HOME/.local/go/
export GOBIN=$HOME/.local/go/bin
export PATH=$PATH:$GOBIN
export PATH="$HOME/.local/bin:$PATH"
# -- FzF ---
source /usr/share/fzf/completion.zsh
+11
View File
@@ -0,0 +1,11 @@
# Start on boot
if [[ -z $DISPLAY ]] && [[ $(tty) == /dev/tty1 ]]; then
exec sway
fi
# -- Env Paths ---
export GOPATH=$HOME/.local/go/
export GOBIN=$HOME/.local/go/bin
export PATH=$PATH:$GOBIN
export PATH="$HOME/.local/bin:$PATH"