chore: make dots public

This commit is contained in:
winston 2022-07-30 07:17:12 +02:00
commit 3d4784d386
Signed by: winston
GPG key ID: 3786770EDBC2B481
103 changed files with 9459 additions and 0 deletions

20
.chezmoi.yaml.tmpl Normal file
View file

@ -0,0 +1,20 @@
encryption: gpg
gpg:
recipient: hey@winston.sh
edit:
command: nvim
diff:
command: nvim
args:
- "-d"
- "{{`{{ .Destination }}`}}"
- "{{`{{ .Target }}`}}"
merge:
command: nvim
args:
- "-d"
- "{{`{{ .Destination }}`}}"
- "{{`{{ .Source }}"
- "{{ .Target }}`}}"

14
.chezmoiexternal.yaml Normal file
View file

@ -0,0 +1,14 @@
.antigen/antigen.zsh:
type: file
url: "https://raw.githubusercontent.com/zsh-users/antigen/master/bin/antigen.zsh"
refreshPeriod: 168h
.config/tmux/plugins/tpm:
type: git-repo
url: "https://github.com/tmux-plugins/tpm"
refreshPeriod: 168h
.config/wezterm/colors/catppuccin:
type: git-repo
url: "https://github.com/catppuccin/wezterm.git"
refreshPeriod: 168h

21
.chezmoiignore Normal file
View file

@ -0,0 +1,21 @@
# ignore the README, of course...
README.md
{{- if ne .chezmoi.os "linux" }}
# ignore linux configuration
.config/dunst/
.config/i3/
.config/polybar/
.config/rofi/
.config/picom.conf
.config/redshift.conf
.local/bin/launch_polybar
.xscreensaver
.Xmodmap
{{- end }}
{{- if ne .chezmoi.os "darwin" }}
# ignore macOS configuration
.config/sketchybar/
.config/skhd/
.config/yabai/
.qutebrowser
{{- end }}

2
dot_Xmodmap Normal file
View file

@ -0,0 +1,2 @@
pointer = 1 2 3 5 4 7 6 8 9 10 11 12
clear Lock

View file

@ -0,0 +1,16 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdA/A+ep8XtO5CmUVsTReTRTwcekGyYT5rYVLHfp+0wZHIw
ReGpYdfjRu8/fyxHAXuu8bjfoLeowpwt2UWl+7NIOXvDlNB4N65hm52OCFYWBRJf
0sEAAc3clPjQia5ZeqEqNUWc/lhg0xmfuq6bWmmr9gC1jinhCB+RcpUKIFcHxBmx
UxO6TjKz/oQVGubQju15AzjE2w3DmiZXTnPBTD7Pnu68wBCPcoVQZYVxlPpappc+
E/mI2xrIg6riES+QZkajQPJvsI7sSCyQVct3y3eAv/UX+7NDHujtEcrEIPvR5MBW
1/OCE8rQlqzqwxL1DazaIuISRF6QVCdic0VEHTCSZzoxxIkAca8vJvK0gSshgyhv
mBjR2EhJFcW7nwP4LfSuOGRVyr4+lXeoNFE1Hj4m0JJHZ0bs63tFClLUHL3SuLfs
VG9ii6PZCN0sgfS00VKyv9fc6PHIV6hg5Pg6q+RijLQ+cFJKl6y8kgSx5xWzjpAY
HlNxtwOMe5Zz+gGkEZrBnq0IgWOBL5wM7WjHsxxU4/QvqB8wzzfzOTSQQd0T76pq
rd/IH/phCf+CA9jTvxPICD822BgoIwqOKGlh65RBuA/+5qn0MbEvuW+tQkaB2pR8
pkGVl5wGMfaXLb8U8PEKQVNxi8f6gw4JSLIvxAlz8re++pOhr5FyHCb7i1GJHfGp
I5dlbQ4/XaH7OiorM94CCZGDug==
=TMnT
-----END PGP MESSAGE-----

152
dot_config/dunst/dunstrc Normal file
View file

@ -0,0 +1,152 @@
# See dunst(5) for all configuration options
# vim:ft=cfg
[global]
frame_width = 3
frame_color = "#89B4FA"
font = Victor Mono 12
width = 300
height = 300
# Allow a small subset of html markup:
markup = yes
# The format of the message.
format = "<b>%a</b>\n%s %p\n%b"
# Sort messages by urgency.
sort = yes
# Show how many messages are currently hidden (because of geometry).
indicate_hidden = yes
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# The frequency with wich text that is longer than the notification
# window allows bounces back and forth.
# This option conflicts with "word_wrap".
# Set to 0 to disable.
bounce_freq = 5
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Split notifications into multiple lines if they don't fit into
# geometry.
word_wrap = no
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Shrink window if it's smaller than the width. Will be ignored if
# width is 0.
shrink = yes
# The transparency of the window. Range: [0; 100].
transparency = 5
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
idle_threshold = 30
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# keyboard: follow window with keyboard focus
follow = keyboard
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
# The height of a single line. If the height is smaller than the
# font height, it will get raised to the font height.
# This adds empty space above and under the text.
line_height = 2
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
separator_height = 1
# Padding between text and separator.
# padding = 8
padding = 2
# Padding between text and icon.
text_icon_padding = 4
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color= frame
# Print a notification on startup.
# This is mainly for error detection, since dbus (re-)starts dunst
# automatically after a crash.
startup_notification = false
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = firefox
# Align icons left/right/off
icon_position = left
# Paths to default icons.
icon_path = /usr/share/icons/Papirus-Dark/16x16/status/:/usr/share/icons/Papirus-Dark/16x16/devices/:/usr/share/icons/Papirus-Dark/16x16/legacy/
min_icon_size=24
max_icon_size=64
[shortcuts]
# Shortcuts are specified as [modifier+][modifier+]...key
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
# "mod3" and "mod4" (windows-key).
# Xev might be helpful to find names for keys.
# Close notification.
close = mod1+space
# Close all notifications.
# close_all = ctrl+shift+space
close_all = ctrl+mod1+space
# Redisplay last message(s).
# On the US keyboard layout "grave" is normally above TAB and left
# of "1".
history = ctrl+mod4+h
# Context menu.
context = ctrl+mod1+c
[urgency_low]
background = "#1e1e2e"
foreground = "#cdd6f4"
[urgency_normal]
background = "#1e1e2e"
foreground = "#cdd6f4"
[urgency_critical]
background = "#1e1e2e"
foreground = "#cdd6f4"
frame_color = "#fab387"

View file

@ -0,0 +1,11 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAnRakjI8f1Sw1YzEkKfnYr6DjhhMgi+DvrqTiY2dRTEcw
t9LEuARvsckZDvzt7e9V+hTCPHLFAyhg1OUPXwfoLZAIy9tYdA7Kl/NnffPEeccy
0sALAW+7vpMXEdu2fQgMH/jKwwSjQLjm7uTX2t2aToYP4DNsuvbbZhrOciF2Y6uf
UaTL4ao9tqZhuhDl3L0F/+l+MUU/x0DTud5xaV97FcVPJkOoEEEDmWZ65Rg0BO6m
r17fnuAkg5w+zVtXdpWB6dNeGURewBBL2t8uSccWhmrxnAQLWpMc8vZdMY2+884y
CPHY/Eb56MsYoCi7JkSukAtgqGDdtYxT/nQH7Ev7o125nvjkPklLgyPbtY54SCp2
8XId9/4vG4P23sTC6Jc=
=mlWV
-----END PGP MESSAGE-----

View file

@ -0,0 +1,11 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAH6u8KuzZ7V+9Rh1r8DyA1En64bqAjuoIUe9YRgprSH4w
vo2DqLAss0dn67m9IOQWhvT+xY5YV5khhrPNbuOE8TlPfkxF05C8wnuOesZd6S/A
0sAAAUMgdUgfx/TyKWQGYQYwj44m26IUWGNVJDZ4lQXbE4Z+pEaQguohsoeKTEhQ
A890l1IryH317sbFcgR37kHKMoL8T2cDbjfRWsaIZOnioXUS6RcdzkkInE36enge
PwxThiiSk179DYFkKQUfoq54QXIhK0x3BImbzbiaxCvAS55Np1jzWeQMF7h+IK5/
nxF3kQxJOZbGL4b0IfixgrIi3P1xAo/QY1xTUGNgobhH/+cOc9dwahY0xqUyvytx
+Jy1
=AH1k
-----END PGP MESSAGE-----

View file

@ -0,0 +1,11 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdACJl4yfv5C/LftHTmzr6+8ke7CVsR10M0J+HMw65n6Tsw
2j2U+6Shvb5yXOw0dljSjpCdoPKw4bgXkTkMoeh5uDTGAXr3c2YhGJLeS+T9LEoE
0sAPAQShiPnSYvZrTMlYT/PPLOEJaN7wz3IDIK1MXL1876YdUtve3YybQk36wPoJ
xw1vsXGwVrw7Ia3SQIGPANkXWx6GKYWjbbrYTBj2gVkG79CV5DTL8vCQLHNAjuwR
JiLEOuuOKUv19QjEcfA0LJOIZSEEKj9XaFYWavqijqOFU560AZY1cyldq63Mg6wg
O0j7L0LGg0E/GJ+if2og4FJ7z5ML1g6UUUoigDGfAH4XwhK3Y5DExPZtUy0/W4zM
+LicLJATW4ziaC0lk5IG0xgm
=1ncJ
-----END PGP MESSAGE-----

3
dot_config/git/ignore Normal file
View file

@ -0,0 +1,3 @@
.DS_Store
.idea
*.log

337
dot_config/i3/config Normal file
View file

@ -0,0 +1,337 @@
# vim:ft=i3config
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
# Set mod key (Mod1=<Alt>, Mod4=<Super>)
set $mod Mod4
# Set DPI value
set_from_resource $dpi Xft.dpi 96
# Configure border style <normal|1pixel|pixel xx|none|pixel>
default_border pixel 2
default_floating_border normal
# Hide borders
hide_edge_borders none
# change borders
bindsym $mod+u border none
bindsym $mod+y border pixel 2
bindsym $mod+n border normal
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font xft:Inter 11
# Use Mouse+$mod to drag floating windows
floating_modifier $mod
# start a terminal
bindsym $mod+Shift+Return exec wezterm
# kill focused window
bindsym $mod+Shift+q kill
# Start Applications
bindsym $mod+F2 exec firefox
bindsym $mod+F3 exec wezterm start ranger
bindsym $mod+ShiftF3 exec pcmanfm
bindsym $mod+t exec --no-startup-id pkill picom
bindsym $mod+Ctrl+p --release exec --no-startup-id flameshot gui
bindsym $mod+Ctrl+t exec --no-startup-id picom --experimental-backends -b
bindsym $mod+Ctrl+x --release exec --no-startup-id xkill
focus_follows_mouse yes
# change focus
bindsym $mod+Ctrl+h focus left
bindsym $mod+Ctrl+j focus down
bindsym $mod+Ctrl+k focus up
bindsym $mod+Ctrl+l focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Ctrl+Left focus left
bindsym $mod+Ctrl+Down focus down
bindsym $mod+Ctrl+Up focus up
bindsym $mod+Ctrl+Right focus right
# move focused window
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# workspace back and forth (with/without active container)
workspace_auto_back_and_forth no
# split orientation
bindsym $mod+q split toggle
# toggle 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+d floating toggle
# change focus between tiling / floating windows
bindsym $mod+d focus mode_toggle
# toggle sticky
bindsym $mod+Shift+s sticky toggle
# focus the parent container
bindsym $mod+a focus parent
# move the currently focused window to the scratchpad
bindsym $mod+Shift+Tab move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+Tab scratchpad show
# Workspace names
# to display names or symbols instead of plain workspace numbers you can use
# something like: set $ws1 1:mail
# set $ws2 2:
set $ws1 1
set $ws2 2
set $ws3 3
set $ws4 4
set $ws5 5
set $ws6 6
set $ws7 7
set $ws8 8
set $ws9 9
# switch to workspace
bindsym $mod+Ctrl+1 workspace $ws1
bindsym $mod+Ctrl+2 workspace $ws2
bindsym $mod+Ctrl+3 workspace $ws3
bindsym $mod+Ctrl+4 workspace $ws4
bindsym $mod+Ctrl+5 workspace $ws5
bindsym $mod+Ctrl+6 workspace $ws6
bindsym $mod+Ctrl+7 workspace $ws7
bindsym $mod+Ctrl+8 workspace $ws8
bindsym $mod+Ctrl+9 workspace $ws9
bindsym $mod+Ctrl+0 workspace $ws10
# Move to workspace with focused container
bindsym $mod+Shift+1 move container to workspace $ws1; workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2; workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3; workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4; workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5; workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6; workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7; workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8; workspace $ws8
bindsym $mod+Shift+9 move container to workspace $ws9; workspace $ws9
bindsym $mod+Shift+0 move container to workspace $ws10; workspace $ws10
### Open specific applications in specific modes
# fullscreen
for_window [class="Oblogout"] fullscreen enable
# floating sticky
for_window [class="Lxappearance"] floating enable sticky enable border normal
for_window [class="Nitrogen"] floating enable sticky enable border normal
for_window [class="Qtconfig-qt4"] floating enable sticky enable border normal
for_window [class="qt5ct"] floating enable sticky enable border normal
for_window [class="1Password"] floating enable sticky enable border pixel 1
for_window [title="Blender Render"] floating enable border pixel 1
for_window [title="(?i)SteamTinkerLaunch"] floating enable border pixel 1
# floating with 1px border
for_window [class="Galculator"] floating enable border pixel 1
for_window [title="alsamixer"] floating enable border pixel 1
# floating with normal border (titled)
for_window [class="(?i)System-config-printer.py"] floating enable border normal
for_window [class="(?i)virtualbox"] floating enable border normal
for_window [class="GParted"] floating enable border normal
for_window [class="Manjaro Settings Manager"] floating enable border normal
for_window [class="Simple-scan"] floating enable border normal
for_window [class="Timeset-gui"] floating enable border normal
for_window [class="calamares"] floating enable border normal
# floating without special settings
for_window [class="Clipgrab"] floating enable
for_window [class="Lightdm-settings"] floating enable
for_window [class="Manjaro-hello"] floating enable
for_window [class="Pamac-manager"] floating enable
for_window [class="Pavucontrol"] floating enable
for_window [class="Xfburn"] floating enable
for_window [class="fpakman"] floating enable
for_window [class="octopi"] floating enable
for_window [title="File Transfer*"] floating enable
for_window [title="MuseScore: Play Panel"] floating enable
for_window [title="Steam Guard - Computer Authorization Required"] floating enable
# general WM role settings
for_window [window_role="pop-up"] floating enable
for_window [window_role="task_dialog"] floating enable
# super special Jetbrains Settings
for_window [class="jetbrains-.+" title="Welcome to .+"] floating enable border pixel 1
for_window [class="jetbrains-.+" title="win0"] floating enable
# gksu via yad
for_window [class="Yad" title="Authentication"] floating enable
# switch to workspace with urgent window automatically
for_window [urgent=latest] focus
# 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'"
# Set shut down, restart and locking features
bindsym $mod+Escape mode "$mode_system"
set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
mode "$mode_system" {
bindsym l exec --no-startup-id i3exit lock, mode "default"
bindsym s exec --no-startup-id i3exit suspend, mode "default"
bindsym u exec --no-startup-id i3exit switch_user, mode "default"
bindsym e exec --no-startup-id i3exit logout, mode "default"
bindsym h exec --no-startup-id i3exit hibernate, mode "default"
bindsym r exec --no-startup-id i3exit reboot, mode "default"
bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"
# exit system mode: "Enter" or "Escape"
bindsym Return mode "default"
bindsym Escape mode "default"
}
# Resize window (you can also use the mouse for that)
bindsym $mod+r mode "resize"
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
bindsym h resize shrink width 5 px or 5 ppt
bindsym j resize grow height 5 px or 5 ppt
bindsym k resize shrink height 5 px or 5 ppt
bindsym l resize grow width 5 px or 5 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
# exit resize mode: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
# Autostart applications
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec --no-startup-id ~/.local/bin/launch_polybar
exec --no-startup-id ~/.fehbg
exec --no-startup-id 1password --silent
exec --no-startup-id blueman-applet
exec --no-startup-id dunst
exec --no-startup-id pa-applet
exec --no-startup-id pcmanfm -d
exec --no-startup-id redshift
exec --no-startup-id sleep 1; picom -b
# xcursor tweak by oberon
exec_always --no-startup-id fix_xcursor
# caps is also ctrl
exec_always --no-startup-id setxkbmap -option "ctrl:nocaps" -option "compose:ralt"
# Theme colors
# class border backgr. text indic. child_border
client.focused #F5C2E7 #313244 #CDD6F4 #F5E0DC #FF80BF
client.focused_inactive #F5C2E7 #313244 #CDD6F4 #F5E0DC #9580FF
client.unfocused #CBA6F7 #313244 #CDD6F4 #F5E0DC #9580FF
client.urgent #F38BA8 #313244 #CDD6F4 #F5E0DC #FF9580
client.placeholder #F2CDCD #313244 #CDD6F4 #F5E0DC #282A36
client.background #F2CDCD
#############################
### settings for i3-gaps: ###
#############################
# Set inner/outer gaps
gaps inner 8
gaps outer 0
# Additionally, you can issue commands with the following syntax. This is useful to bind keys to changing the gap size.
# gaps inner|outer current|all set|plus|minus <px>
# gaps inner all set 10
# gaps outer all plus 5
# Smart gaps (gaps used if only more than one container on the workspace)
smart_gaps off
# Smart borders (draw borders around container only if it is not the only container on this workspace)
# on|no_gaps (on=always activate and no_gaps=only activate if the gap size to the edge of the screen is 0)
smart_borders no_gaps
# Press $mod+Shift+g to enter the gap mode. Choose o or i for modifying outer/inner gaps. Press one of + / - (in-/decrement for current workspace) or 0 (remove gaps for current workspace). If you also press Shift with these keys, the change will be global for all workspaces.
set $mode_gaps Gaps: (o) outer, (i) inner
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
bindsym $mod+Shift+g mode "$mode_gaps"
mode "$mode_gaps" {
bindsym o mode "$mode_gaps_outer"
bindsym i mode "$mode_gaps_inner"
bindsym Return mode "default"
bindsym Escape mode "default"
}
mode "$mode_gaps_inner" {
bindsym plus gaps inner current plus 5
bindsym minus gaps inner current minus 5
bindsym 0 gaps inner current set 0
bindsym Shift+plus gaps inner all plus 5
bindsym Shift+minus gaps inner all minus 5
bindsym Shift+0 gaps inner all set 0
bindsym Return mode "default"
bindsym Escape mode "default"
}
mode "$mode_gaps_outer" {
bindsym plus gaps outer current plus 5
bindsym minus gaps outer current minus 5
bindsym 0 gaps outer current set 0
bindsym Shift+plus gaps outer all plus 5
bindsym Shift+minus gaps outer all minus 5
bindsym Shift+0 gaps outer all set 0
bindsym Return mode "default"
bindsym Escape mode "default"
}
# rofi instead of drun
bindsym $mod+space exec --no-startup-id rofi -show run -dpi $dpi
# 1password
bindsym $mod+backslash exec --no-startup-id 1password --quick-access
# move workspaces across monitors
bindsym $mod+Ctrl+greater move workspace to output right
bindsym $mod+Ctrl+less move workspace to output left

View file

@ -0,0 +1,53 @@
# example configuration file for khard version > 0.14.0
# place it under ~/.config/khard/khard.conf
# This file is parsed by the configobj library. The syntax is described at
# https://configobj.readthedocs.io/en/latest/configobj.html#the-config-file-format
[addressbooks]
[[default]]
path = ~/.local/share/contacts/Default/
[general]
debug = no
default_action = list
# These are either strings or comma seperated lists
editor = nvim
merge_editor = nvim -d
[contact table]
# display names by first or last name: first_name / last_name / formatted_name
display = first_name
# group by address book: yes / no
group_by_addressbook = no
# reverse table ordering: yes / no
reverse = no
# append nicknames to name column: yes / no
show_nicknames = no
# show uid table column: yes / no
show_uids = yes
# sort by first or last name: first_name / last_name / formatted_name
sort = last_name
# localize dates: yes / no
localize_dates = yes
# set a comma separated list of preferred phone number types in descending priority
# or nothing for non-filtered alphabetical order
preferred_phone_number_type = pref, cell, home
# set a comma separated list of preferred email address types in descending priority
# or nothing for non-filtered alphabetical order
preferred_email_address_type = pref, work, home
[vcard]
# extend contacts with your own private objects
# these objects are stored with a leading "X-" before the object name in the vcard files
# every object label may only contain letters, digits and the - character
# example:
# private_objects = Jabber, Skype, Twitter
# default: , (the empty list)
private_objects = Jabber, Skype, Twitter
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
skip_unparsable = no

108
dot_config/kitty/kitty.conf Normal file
View file

@ -0,0 +1,108 @@
# vim:fileencoding=utf-8:foldmethod=marker
# rice {{{
# font
font_family Victor Mono
font_size 14
# nerd fonts
symbol_map U+23FB-U+23FE,U+2665,U+26A1,U+2B58,U+E000-U+E00A,U+E0A0-U+E0A3,U+E0B0-U+E0C8,U+E0CA,U+E0CC-U+E0D2,U+E0D4,U+E200-U+E2A9,U+E300-U+E3E3,U+E5FA-U+E62F,U+E700-U+E7C5,U+F000-U+F2E0,U+F300-U+F31C,U+F400-U+F4A9,U+F500-U+F8FF,U+FB26 Symbols Nerd Font
# window
# don't center
placement_strategy top-left
# don't use pixel-perfect resize mode
resize_in_steps yes
# width between panes
window_border_width 2pt
# text alpha in inacive panes
inactive_text_alpha 0.8
hide_window_decorations yes
# tab bar
active_tab_font_style normal
inactive_tab_font_style italic
tab_bar_style powerline
tab_bar_align left
tab_bar_edge bottom
tab_powerline_style slanted
tab_bar_margin_width 0.0
include mocha.conf
# }}}
# mouse stuff {{{
mouse_hide_wait 0.5
detect_urls yes
# mouse pointer
pointer_shape_when_grabbed beam
default_pointer_shape arrow
# url highlighting style and detection
url_style single
url_prefixes http https file ftp gemini irc gopher mailto news git
# word detection
strip_trailing_spaces never
select_by_word_characters @-./_~?&=%+#
# }}}
# other settings {{{
enable_audio_bell no
editor nvim
# }}}
# tmux-like config {{{
# super key mod: CTRL+S
# splits ftw, stack is for emulating tmux pane zoom
enabled_layouts splits, stack
# this emulates zooming panes
map ctrl+s>z toggle_layout stack
## panes
# create new panes
map ctrl+s>- launch --location=hsplit --cwd=current
map ctrl+s>\ launch --location=vsplit --cwd=current
# jump to other panes
map ctrl+s>h neighboring_window left
map ctrl+s>l neighboring_window right
map ctrl+s>k neighboring_window up
map ctrl+s>j neighboring_window down
map ctrl+s>q focus_visible_window
# move panes
map ctrl+s>ctrl+k move_window up
map ctrl+s>ctrl+h move_window left
map ctrl+s>ctrl+l move_window right
map ctrl+s>ctrl+j move_window down
# manipulate panes
map ctrl+s>ctrl+r start_resizing_window
map ctrl+s>r layout_action rotate
map ctrl+s>x close_window
# open ui panel to move the pane somewhere else
map ctrl+s>m detach_window ask
## tabs - tmux-like tabs
# always show tab bar
tab_bar_min_tabs 1
# show index for easier switching, show number of panes
tab_title_template "{index}: {title}{sup.num_windows if num_windows > 1 else ''}{activity_symbol}{bell_symbol}"
map ctrl+s>c new_tab
map ctrl+s>n next_tab
map ctrl+s>p previous_tab
map ctrl+s>1 goto_tab 1
map ctrl+s>2 goto_tab 2
map ctrl+s>3 goto_tab 3
map ctrl+s>4 goto_tab 4
map ctrl+s>5 goto_tab 5
map ctrl+s>6 goto_tab 6
map ctrl+s>7 goto_tab 7
map ctrl+s>8 goto_tab 8
map ctrl+s>9 goto_tab 9
# }}}
# power mode:
# spawn a pane which broadcasts its input to all other panes
map F3 launch --allow-remote-control kitty +kitten broadcast
# reload config
map F5 load_config_file

View file

@ -0,0 +1,80 @@
# vim:ft=kitty
## name: Catppuccin-Latte
## author: Pocco81 (https://github.com/Pocco81)
## license: MIT
## upstream: https://github.com/catppuccin/kitty/blob/main/latte.conf
## blurb: Soothing pastel theme for the high-spirited!
# The basic colors
foreground #4C4F69
background #EFF1F5
selection_foreground #EFF1F5
selection_background #DC8A78
# Cursor colors
cursor #DC8A78
cursor_text_color #EFF1F5
# URL underline color when hovering with mouse
url_color #DC8A78
# Kitty window border colors
active_border_color #7287FD
inactive_border_color #9CA0B0
bell_border_color #DF8E1D
# OS Window titlebar colors
wayland_titlebar_color system
macos_titlebar_color system
# Tab bar colors
active_tab_foreground #EFF1F5
active_tab_background #8839EF
inactive_tab_foreground #4C4F69
inactive_tab_background #9CA0B0
tab_bar_background #BCC0CC
# Colors for marks (marked text in the terminal)
mark1_foreground #EFF1F5
mark1_background #7287fD
mark2_foreground #EFF1F5
mark2_background #8839EF
mark3_foreground #EFF1F5
mark3_background #209FB5
# The 16 terminal colors
# black
color0 #5C5F77
color8 #6C6F85
# red
color1 #D20F39
color9 #D20F39
# green
color2 #40A02B
color10 #40A02B
# yellow
color3 #DF8E1D
color11 #DF8E1D
# blue
color4 #1E66F5
color12 #1E66F5
# magenta
color5 #EA76CB
color13 #EA76CB
# cyan
color6 #179299
color14 #179299
# white
color7 #ACB0BE
color15 #BCC0CC

View file

@ -0,0 +1,80 @@
# vim:ft=kitty
## name: Catppuccin-Mocha
## author: Pocco81 (https://github.com/Pocco81)
## license: MIT
## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf
## blurb: Soothing pastel theme for the high-spirited!
# The basic colors
foreground #CDD6F4
background #1E1E2E
selection_foreground #1E1E2E
selection_background #F5E0DC
# Cursor colors
cursor #F5E0DC
cursor_text_color #1E1E2E
# URL underline color when hovering with mouse
url_color #F5E0DC
# Kitty window border colors
active_border_color #B4BEFE
inactive_border_color #6C7086
bell_border_color #F9E2AF
# OS Window titlebar colors
wayland_titlebar_color system
macos_titlebar_color system
# Tab bar colors
active_tab_foreground #11111B
active_tab_background #CBA6F7
inactive_tab_foreground #CDD6F4
inactive_tab_background #181825
tab_bar_background #11111B
# Colors for marks (marked text in the terminal)
mark1_foreground #1E1E2E
mark1_background #B4BEFE
mark2_foreground #1E1E2E
mark2_background #CBA6F7
mark3_foreground #1E1E2E
mark3_background #74C7EC
# The 16 terminal colors
# black
color0 #45475A
color8 #585B70
# red
color1 #F38BA8
color9 #F38BA8
# green
color2 #A6E3A1
color10 #A6E3A1
# yellow
color3 #F9E2AF
color11 #F9E2AF
# blue
color4 #89B4FA
color12 #89B4FA
# magenta
color5 #F5C2E7
color13 #F5C2E7
# cyan
color6 #94E2D5
color14 #94E2D5
# white
color7 #BAC2DE
color15 #A6ADC8

View file

@ -0,0 +1,12 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAvVYo3oVO5iscwOFwogD+NKHS0n0WE7r/L/dLFxBpX0sw
CJkY0KU0LIB63VlkU8sdoC2A73IJwLg3KFoRWNT+5C9G2iet8Kbg0DYXmkQ0TwoN
0sBcAWYVjnsf54fGYvGtM7SZ+OUW3Q/sKZPLP+5FjcPNGL/TeWmtcSDr+ymSbw6r
AsqClFzLHYixD3fVMGnY/rLdj/+C7I2Kia0mUU7A1vWHqDyiRdsZNC0icoe0oDNY
WycZuXVDxpZ1ikhYA2ENp0tv5XRrvsuuLXm3RLLSYiY41R1NUepWpve6UimcAzcf
Et1Arq7ptW7Gw/etQxx+P40I1tmLJg8g5zlIQM0BZjyq9bt39lUTvYpbvpJXZ/uc
/WeW5M5hyEVPY9td8KheCDcESxHXPbbS9lPDYsD3PURQpeyCAEE/C4yaZKpBYPbV
qZEawSOS0L7dVxdGoP4IeAd3d0MXHrFgYy4INslBKecTv3khxCrH2YGo/nYTHL8=
=OlAq
-----END PGP MESSAGE-----

View file

@ -0,0 +1,21 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAg0t08EcfvRvVW4hLDq1IZkzALytZW8hjw86tVI0RZxgw
T+37J65ib0rWFWS/x2McFR4itiW2xYEzDaa9Z1CAx71EeYxSq2ARMyxwGMKvq94e
0ukBfuMQpRtrrvjvH1GOAdggkILBq2Rnql967yxkrf6iwlSJlNpbkMsXZdCWeGrD
mM6bd3B9D8lsBOeePNXdu5ejh5YnA2/SHRkf+JKsioPo4gvTnAQ+adb1Xa/ADruS
vbJz7V3Ji+LMgq5rdsUsT0ctR/85RqyFsXbLOYojB+Etud3//Yzovbc2TgZe6qA5
1wEBKtWjBgTlGGCxnYR6ht0f7ymMkL4aARkIpM+DTnkWSmoDEq6oO8ib4NRh3Mnd
kNDV+yEdViaj5fu8a7h1DWQsHa1xs+g0ppHOWfXPNbJq0RRTWROztGfhuPhXLC+x
K8KOv+k0euMjxgXkxkKK8b5Hw7Dq9kHlyoqXxDz+FBT0neh3s8+UDoDlBOzG80JC
ByPzBZ42cfWbbJ8JHABG1AeGmxDNYsMBUro9JjRR1cjZ++adezQQdnBZZcB3ATGy
QE1wwTG41TGVLdo1MvqfHncjtG1YoubG//HLjvYq0gLCa46IkVagsEzsc/sNcV7f
5nNOkvGwhjxVgo/0emBNS7IEdFKpszoxpQOI50wRfdkE2nB6XjHiNiJbMADPUHAW
om2zlTRFrE9AFI+YFE053BfhJC9bbiuoXsPEF75RMQkbzjdh2jRw5d9o4Tr69N3y
trP1TfZyEshNeKSU7H07p3zJ3rzMRAU4HVRtSzIKPN251cAJcn5Yg4aCegOHoJ1U
naQRs7xiPihlViQTDjdyn397oSO1+YFfDtG2a1MJilUVmPLFNLtkQeWj2oC/L4m0
i5KQ+x+7UPrSMa0FFtjWNLhh7tXHEYCDzhKRNUcgAwmrqG6uL/Zs3ktsiPhlX0cL
Dzb8dsitfYtZ43rt5QUMAQeqrKOsfTjrXmn994H31sjRmFqqSTZUA1EibEGxacTp
U+80nmQW2cPPGDZjXt2bp/OymqyfkNI3Llv2fJGRpRvge8eSrI9BE+BOgKXP
=jaGP
-----END PGP MESSAGE-----

View file

@ -0,0 +1,23 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAeIEi26S8uxkG1vm2FyVx1XceCD2wIZe0PmAjvf/ZuQUw
dbJC6pu2RDHuvmquGxOO5kRn5abN9MCm+8xcZ4ze49qVeoFJ9URP451Fx4iww6WE
0ukBR4+JKeyppPZ71tMiGNqVsveE1O2iXHrFDaH1uY7X0zPgHoiKyzIqAQHJnC9p
+wQaaJZ/5is9iJGtNbNAfSPt//lHlKtcS8ocziZhUJKCrQ4scI0VLQrvmgxr1D6E
wEwl/eBmPgUtAIbs9MNaTZ5v/6WLDBJnb6NJx2S2vdrSd7BFjnR5qoCie9bLy03b
DZAzlrf0qtuKFQrauaSfDumArpm59uVMT/McZbO9FU2+Q0yz7nEDRXqAOmCoq66N
RsMdkOBoeEdVKFxQovriOvY4fxHxqAnD4h04icbj6l32VfGoDGUElUMlpsMLmE5T
F6mirp2AWZWH59VTRKCbFNr1Y2XVFO9V3rPB9XRTeM4xJ5cIAvhfcHOfv6UEXV6Y
ihlibwClnzGEGqNi3n84CDtLIzf6Gc8saVNsHOPNF2fXXgYdebU8Bt3V64uyhPRK
1GkzzuH2QGH/2GU23dGNT1BVKzVUheB/nPmGFaqEA+nsDzvjzt0htQE6oht1EpIg
aULIMk/rospSkZs2Px4xmUYb75o1GOS0xduaVRozEIvpf0FsTuzYv4NhhI6ni5bu
KyRY9x/Ojaccx11v8XxKHBBtW7RQlcsGJVGPWz9R9HPbOgHgcykYVUixz8vgVmvl
QLy04AIy17fYoxvggtcXiKY6Wm1oFeZkS/RFFcloWME2yMBYnbSW9Qm0CA/TxeXs
1QzkI5b8VzT8iNO8fWxMBIGfKBeL4uKo3d4bhCCdhUGsPcnkFXqKD37CsYZ4ikfz
u8A/jM8sbYcYG9uJ0YaKkn5B52g05GRaGsot/XsaatKfuVrReVI36fMO2jEmrbG3
S05Sb/nwceMv99BX1oJPWgeF9LT6C/NmO4YCY45biDnkCD4B9b6WXfWLvao+yd/9
Fxkl3Q+C6x5R3uI646RunZo9AQ1HRlNcO/KPec34s66fj236Vrnj3AO/jn64+B2w
PCFvzp6Uvcwu23iEW8dC2/HkAXZSyDT7boYT1VNj6D2lE5KmTJB+XPcUfQfPqgpy
LX3LPaKvZAnARNojVq64qQpqC9XKXCkT0t0Ipw==
=Rvrb
-----END PGP MESSAGE-----

View file

@ -0,0 +1,32 @@
# vim: filetype=neomuttrc
{{ if eq .chezmoi.os "darwin" -}}
source /usr/local/share/mutt-wizard/mutt-wizard.muttrc
{{ else }}
source /usr/share/mutt-wizard/mutt-wizard.muttrc
{{- end }}
# use thread sorting
set sort="threads"
set sort_aux="reverse-last-date-received"
# compose with pandoc / Markdown
macro compose m \
"<enter-command>set pipe_decode<enter>\
<pipe-message>docker run -i -v /tmp:/tmp --rm pandoc/core -f gfm -t plain -o /tmp/msg.txt<enter>\
<pipe-message>docker run -i -v /tmp:/tmp -v ~/.config/mutt/templates/work.html:/mutt/templates/work.html --rm pandoc/core -s -f gfm --self-contained -o /tmp/msg.html --resource-path /mutt/templates/ --template work<enter>\
<enter-command>unset pipe_decode<enter>\
<attach-file>/tmp/msg.txt<enter>\
<attach-file>/tmp/msg.html<enter>\
<tag-entry><previous-entry><tag-entry><group-alternatives>" \
"Convert markdown to HTML5 and plaintext alternative content types"
# khard / vdirsyncer as an autocompleting addressbook
set query_command = "khard email --parsable %s"
bind editor <Tab> complete-query
bind editor ^T complete
# default account
source ~/.config/mutt/accounts/1-personal.muttrc
# swap between accounts
macro index,pager i1 '<sync-mailbox><enter-command>source ~/.config/mutt/accounts/1-personal.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to personal"
macro index,pager i2 '<sync-mailbox><enter-command>source ~/.config/mutt/accounts/2-work.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to work"

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<style>
$styles.html()$
</style>
$for(css)$
<link rel="stylesheet" href="$css$" />
$endfor$
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
$for(header-includes)$
$header-includes$
$endfor$
</head>
<body>
$body$
$for(include-after)$
$include-after$
$endfor$
</body>
</html>

View file

@ -0,0 +1,34 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdADlzt6BIwyLO/Yf1mYOdx/CqpOIW2cvqi5vDZVGrTAFMw
g0nPQUZDQBW6ILWD8gOs/DjQzrTLeBTO/kQrICuQR1EVi3LU0B7gNJvpuoKS0AWB
0uoB4KNirsq9pOmjbyOL0znyOUlLpfLbgLZZlnPG/to3IzjYUUlzlYI/9Fsu7p9J
J9pvVe3BLDMGadsc9d7Ja2K03BUulA12mq6amOxnRFAbZWkbWLcOax3FazPd44v2
L2XRXb+Jc2gyB47y5TpjY3u+TmqLnGueu/nQhrOX4hL05SPhi3DdlTLUAMdjS0iF
q4bl5UlQmXvOf4uttnN39sHJ93IEKMi/Kh6ANIme2dPnXXuTXK91V8JoETdTIUwX
z29aX/pNsFxWReuCFJQoPCAdg87+SP+SZ45JCCG8iUIHvgMVEUaHdEtwR2Lo2Bnn
2EyOVjaBaY05M2sFJmxj7Mmfquhm/TkfPzMS/9x27i075ZWDuknEaJeD0IvKFR2h
vZN4Vcv6eYP9e1HL+vWha0HyWB4PD56clfRWPmhrWlmZx8k7f9trTod1wI8Z9pnt
nVQaj6wyCMQO5oliePGUwDWosssEKhyE0Ca3peQxPNg+TYreIrE9sWEaaySgzB70
Rl7MUQiZ1aLiWHfnijqv6G2yV1fsIuTOvoBLAQVY4ajU3+TcC2krz4aIP2xapFC2
mdlrbqNExwgMctTrjv/PsxbJgCLaK0rf9RaZBhm+mDORcKToqN+odhGHo8vnzYKe
p7g2nq4eL++uM4R+4CjE700zaKTmEzV3KUpTE9KCkL5VtDr+w+cmMNHGmR95P/+q
/Bgh33OY1bJOY7LNAHsWPl0BjrJLsTi7/eIJ8nKCT0vllW7TvNfVotNmjtWX/KIw
sJO/xoyvply9/eAIBiVK2n+Kav9XBuiToK+84tw8TiyAPXxDg9nEf4TNIgyB90gO
oDKQhmRL/jRBHP/k/k5flgg+OY60owx+letq8L03UyReFt6mW2oLuizRACBJ6wUq
RKmfPmajvtBPyIzv23zYGmRtubhwgeKQtQCMNJJ4wbQ/iFdJCBO8qKoYhxNonF94
/aRCvQQOKT6enj1W7RnAPPGzEmyLRu1pu0G3KlIQHIL4Lnj5NKUomES1Cu9K5dER
OUqVaXiW8hAXHEClYRMV1UIxMDPOI0aSfU0FCtiK8NPKARMCZbcnePetJTnlwCaQ
by1evvis2DY0U5lZ6+9dwvp7diQ0dtw4193FGHjBWiF2jhPlfzjrouo6II2v1u1w
0j2Ntt6KtMVVFpzYMkaB4fdxms8lVxyw5U0pjSOBxo1po3kPFSA4P/ZgT2+IXvuz
EQZzRl9bE3EZRtf8YouSnErQIo5ppBzrawzSdFSpzQ+qbnostmmEgfMIX7DXE8CE
z4zlHStoZsEZGnbOZA5I4dAyOSgy1EG3E+nhkDzSkCth7FO8Lrlz0cVjiVb0fMx8
b2x110Qedv4WAglhdJEsjKemwG6CyrcDoEf2UfbM8lkrkdoFndcr4ThkhYDUMprq
Bsfm476j00dc+W6RPaheZyGPGSHjz3oJJOG3sbD6vfVy30TTPOjSTAqGsPZHk/7q
SAVI7kOMHArkQRb/NSO4+bU/297WRM4IskiLFAj8wBQUf0JLQLbAShkXkhqyIHl6
LM9MqAv0gir8nMuXUF35tjfrkp1+2tKhuv0OSYPjuJR9xIFbpFxiBbAaqrUAzXdS
TIbbwyh3gpjs+DRq6pC2Yv14+M0tdtrjHJiYCsosLisz+0mcF0mpVFmg+7qUw10+
wrMphGtxzESSzXNfs+RQ6vUM0n4SdBXvZJXCN4xmPBxmfdB1HX9HAdQDWMTMsSo7
daMHAmp9G9Fxs+okin3QAq4C6UoVLSu7qnO+geEcj7/qKQ==
=8s1o
-----END PGP MESSAGE-----

2
dot_config/newsboat/urls Normal file
View file

@ -0,0 +1,2 @@
https://this-week-in-neovim.org/rss
https://neomutt.org/feed.xml

109
dot_config/nvim/init.lua Normal file
View file

@ -0,0 +1,109 @@
-- vim:fdm=marker
pcall(require, "impatient")
-- packer {{{
local fn = vim.fn
local install_path = fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim"
if fn.empty(fn.glob(install_path)) > 0 then
print("Cloning packer ..")
fn.system({ "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path })
-- install plugins + compile their configs
vim.cmd("packadd packer.nvim")
require("plugins")
require("packer").sync()
end
require("utils")
require("lsp")
-- custom packer command
local packer_cmd = function(callback)
return function()
require("plugins")
require("packer")[callback]()
end
end
local function cmd(lhs, fun, opt)
vim.api.nvim_create_user_command(lhs, fun, opt or {})
end
cmd("PackerClean", packer_cmd("clean"))
cmd("PackerCompile", packer_cmd("compile"))
cmd("PackerInstall", packer_cmd("install"))
cmd("PackerProfile", packer_cmd("profile"))
cmd("PackerStatus", packer_cmd("status"))
cmd("PackerSync", packer_cmd("sync"))
cmd("PackerUpdate", packer_cmd("update"))
-- }}}
-- prelude
vim.opt.laststatus = 3
vim.opt.list = true
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.scrolloff = 5
vim.opt.showtabline = 2
vim.opt.sidescrolloff = 15
vim.opt.splitbelow = true
vim.opt.splitright = true
vim.opt.termguicolors = true
vim.opt.shadafile = nil
-- basic boring stuff
vim.g.mapleader = " "
vim.opt.mouse = "nv"
-- redefine word boundaries - '_' is a word seperator, this helps with snake_case
vim.cmd("set iskeyword-=_")
-- easier split navigation
Nmap("<C-J>", "<C-W>j<CR>")
Nmap("<C-K>", "<C-W>k<CR>")
Nmap("<C-L>", "<C-W>l<CR>")
Nmap("<C-H>", "<C-W>h<CR>")
-- escape :terminal easier
vim.cmd([[tnoremap <Esc> <C-\><C-n>]])
-- indentations settings
vim.opt.shiftwidth = 2
vim.opt.tabstop = 2
vim.opt.softtabstop = 2
vim.opt.expandtab = true
-- indentation autocmds for some filetypes
vim.cmd([[
" smol spaces for soydev
autocmd FileType html,css,js,jsreact,ts,tsreact,json,yaml setlocal ts=2 sw=2 sts=0 et
" Tabs, yikes
autocmd FileType go,lua setlocal ts=4 sw=4 sts=4 noet
" Spaces, based languages
autocmd FileType python,rust setlocal ts=4 sw=4 sts=4 et
]])
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = "*.lua",
callback = function()
vim.defer_fn(function()
if vim.fn.expand("%:p"):match(vim.fn.resolve(vim.fn.stdpath("config"))) then
packer_cmd("compile")
end
end, 0)
end,
})
if vim.g.neovide then
vim.cmd("cd $HOME")
vim.g.neovide_cursor_vfx_mode = "ripple"
vim.g.neovide_input_macos_alt_is_meta = true
vim.o.guifont = "VictorMono Nerd Font:h18"
-- allow copy & paste in neovide,
-- https://github.com/neovide/neovide/issues/1263
vim.cmd([[
map <D-v> "+p<CR>
map! <D-v> <C-R>+
tmap <D-v> <C-R>+
vmap <D-c> "+y<CR>
]])
end

View file

@ -0,0 +1,38 @@
require("bufferline").setup({
closable = false,
icons = "both",
insert_at_end = true,
no_name_title = "",
})
-- hop between buffers in order of the bar
Nmap("<A-,>", "<Cmd>BufferPrevious<CR>")
Nmap("<A-.>", "<Cmd>BufferNext<CR>")
-- Re-order to previous/next
Nmap("<A-<>", "<Cmd>BufferMovePrevious<CR>")
Nmap("<A->>", "<Cmd>BufferMoveNext<CR>")
-- Goto buffer in position...
Nmap("<A-1>", "<Cmd>BufferGoto 1<CR>")
Nmap("<A-2>", "<Cmd>BufferGoto 2<CR>")
Nmap("<A-3>", "<Cmd>BufferGoto 3<CR>")
Nmap("<A-4>", "<Cmd>BufferGoto 4<CR>")
Nmap("<A-5>", "<Cmd>BufferGoto 5<CR>")
Nmap("<A-6>", "<Cmd>BufferGoto 6<CR>")
Nmap("<A-7>", "<Cmd>BufferGoto 7<CR>")
Nmap("<A-8>", "<Cmd>BufferGoto 8<CR>")
Nmap("<A-9>", "<Cmd>BufferGoto 9<CR>")
Nmap("<A-0>", "<Cmd>BufferLast<CR>")
-- Pin/unpin buffer
Nmap("<A-p>", "<Cmd>BufferPin<CR>")
-- Close buffer
Nmap("<A-x>", "<Cmd>BufferClose<CR>")
Nmap("<A-X>", "<Cmd>BufferClose!<CR>")
-- create new buffer
Nmap("<A-c>", "<Cmd>enew<CR>")
-- pick buffer
Nmap("<A-space>", "<Cmd>BufferPick<CR>")
-- Sort automatically by...
Nmap("<Space>bb", "<Cmd>BufferOrderByBufferNumber<CR>")
Nmap("<Space>bd", "<Cmd>BufferOrderByDirectory<CR>")
Nmap("<Space>bl", "<Cmd>BufferOrderByLanguage<CR>")
Nmap("<Space>bw", "<Cmd>BufferOrderByWindowNumber<CR>")

View file

@ -0,0 +1,75 @@
-- use transparency in terminal only
local useTransparentBG = true
if vim.g.neovide then
useTransparentBG = false
end
vim.g.catppuccin_flavour = "mocha"
require("catppuccin").setup({
transparent_background = false,
term_colors = true,
dim_inactive = {
enable = false,
shade = "dark",
percentage = 0.05,
},
styles = {
comments = { "italic" },
conditionals = { "italic" },
},
integrations = {
treesitter = true,
native_lsp = {
enabled = true,
virtual_text = {
errors = { "italic" },
hints = { "italic" },
warnings = { "italic" },
information = { "italic" },
},
underlines = {
errors = { "underline" },
hints = { "underline" },
warnings = { "underline" },
information = { "underline" },
},
},
cmp = true,
coc_nvim = false,
lsp_saga = true,
lsp_trouble = true,
nvimtree = {
enabled = false,
},
neotree = {
enabled = true,
show_root = false,
transparent_panel = false,
},
which_key = true,
indent_blankline = {
enabled = true,
colored_indent_levels = true,
},
barbar = false,
bufferline = true,
dashboard = true,
fern = false,
gitgutter = false,
gitsigns = true,
hop = false,
leap = false,
lightspeed = false,
markdown = true,
neogit = true,
notify = true,
symbols_outline = true,
telekasten = false,
telescope = true,
ts_rainbow = true,
vim_sneak = false,
}
})
vim.cmd("colorscheme catppuccin")

View file

@ -0,0 +1,66 @@
local home = os.getenv("HOME")
local db = require("dashboard")
db.custom_header = function()
local quotes = {
"Demonic presence at unsafe levels.",
"Rip and tear, until it is done.",
"So you walk eternally through the shadow realms.",
"The only thing they fear... is you.",
"There he lies still, and ever more, in silent suffering.",
"We will send unto them...only you.",
"What you see now in this facility is the cost. Of progress.",
"You can't just shoot a hole in the surface of mars!",
"WARNING: The Slayer has entered the facility.",
"DANGER: THE SLAYER HAS CONTROL OF THE BFG.",
}
local random_quote = quotes[math.random(#quotes)]
return {
[[]],
[[ _ _ _____ _ _ _____ _____ _____ _ _ _ _ ________ ___]],
[[| | | |_ _| \ | |/ ___|_ _| _ | \ | | | | | |_ _| \/ |]],
[[| | | | | | | \| |\ `--. | | | | | | \| | | | | | | | | . . |]],
[[| |/\| | | | | . ` | `--. \ | | | | | | . ` | | | | | | | | |\/| |]],
[[\ /\ /_| |_| |\ |/\__/ / | | \ \_/ / |\ | _ \ \_/ /_| |_| | | |]],
[[ \/ \/ \___/\_| \_/\____/ \_/ \___/\_| \_/ (_) \___/ \___/\_| |_/]],
[[]],
random_quote,
[[]],
}
end
db.custom_center = {
{
icon = "",
desc = "Restore latest session ",
action = "SessionLoad",
},
{
icon = "",
desc = "Open Projects ",
action = "Telescope project",
},
{
icon = "",
desc = "Find File ",
action = "Telescope find_files find_command=rg,--hidden,--files",
},
{
icon = "",
desc = "File Browser ",
action = "Telescope file_browser",
},
{
icon = "",
desc = "Find word ",
action = "Telescope live_grep",
},
{
icon = "",
desc = "Open Settings ",
action = function()
vim.cmd("cd " .. home .. "/.config/nvim/")
vim.cmd("edit init.lua")
end
},
}

View file

@ -0,0 +1,58 @@
local clrs = require("catppuccin.palettes.init").get_palette()
local ctp_feline = require("catppuccin.groups.integrations.feline")
ctp_feline.setup({
assets = {
left_separator = "",
right_separator = "",
bar = "",
mode_icon = "",
},
sett = {
show_modified = true,
curr_dir = clrs.mauve,
curr_file = clrs.blue,
},
})
require("feline").setup({
components = ctp_feline.get(),
force_inactive = {
filetypes = {
"^packer$",
"^startify$",
"^fugitive$",
"^fugitiveblame$",
"^qf$",
"^help$",
},
buftypes = {
"^terminal$",
},
bufnames = {},
},
})
-- local navic = require("nvim-navic")
-- local wbar = {
-- active = {},
-- inactive = {}
-- }
-- table.insert(wbar.active, {})
-- table.insert(wbar.active, {})
-- table.insert(wbar.active, {})
-- table.insert(wbar.active[1], {
-- provider = function()
-- return navic.get_location()
-- end,
-- enabled = function()
-- return navic.is_available()
-- end,
-- })
-- table.insert(wbar.active[3], {
-- provider = 'lsp_client_names'
-- })
-- require("feline").winbar.setup({ components = wbar })

View file

@ -0,0 +1,63 @@
require("gitsigns").setup({
signs = {
add = {
hl = "GitSignsAdd",
text = "+",
numhl = "GitSignsAddNr",
linehl = "GitSignsAddLn",
},
change = {
hl = "GitSignsChange",
text = "~",
numhl = "GitSignsChangeNr",
linehl = "GitSignsChangeLn",
},
delete = {
hl = "GitSignsDelete",
text = "_",
numhl = "GitSignsDeleteNr",
linehl = "GitSignsDeleteLn",
},
topdelete = {
hl = "GitSignsDelete",
text = "",
numhl = "GitSignsDeleteNr",
linehl = "GitSignsDeleteLn",
},
changedelete = {
hl = "GitSignsChange",
text = "x",
numhl = "GitSignsChangeNr",
linehl = "GitSignsChangeLn",
},
},
linehl = false,
numhl = false,
signcolumn = true,
word_diff = false,
watch_gitdir = { interval = 1000, follow_files = true },
attach_to_untracked = true,
-- current line highlighting
current_line_blame = true,
current_line_blame_opts = {
delay = 1000,
ignore_whitespace = true,
virt_text = true,
virt_text_pos = "eol",
},
current_line_blame_formatter = "<author>, <author_time:%R> - <summary> | <abbrev_sha>",
-- perf
max_file_length = 40000,
sign_priority = 6,
update_debounce = 100,
-- use the included status formatter
status_formatter = nil,
preview_config = {
border = "single",
style = "minimal",
relative = "cursor",
row = 0,
col = 1,
},
yadm = { enable = false },
})

View file

@ -0,0 +1,111 @@
local saga = require("lspsaga")
saga.init_lsp_saga({
symbol_in_winbar = {
in_custom = true,
enable = true,
separator = " > ",
show_file = true,
click_support = function(node, clicks, button, modifier)
-- To see all avaiable defails: vim.pretty_print(node)
local st = node.range.start
local en = node.range["end"]
if button == "l" then
if modifier == "c" then
print("lspsaga") -- ctrl left click to print "lspsaga"
end -- jump to node's ending line+char
if clicks == 2 then
-- double left click to visual select
vim.fn.cursor(st.line + 1, st.character + 1)
vim.cmd.normal("v")
vim.fn.cursor(en.line + 1, en.character + 1)
else -- jump to node's starting line+char
vim.fn.cursor(st.line + 1, st.character + 1)
end
elseif button == "r" then
if modifier == "c" then
print("lspsaga") -- shift right click to print "lspsaga"
end -- jump to node's ending line+char
vim.fn.cursor(en.line + 1, en.character + 1)
elseif button == "m" then
-- middle click to visual select node
vim.fn.cursor(st.line + 1, st.character + 1)
vim.cmd.normal("v")
vim.fn.cursor(en.line + 1, en.character + 1)
end
end,
},
})
Nmap("gr", "<cmd>Lspsaga rename<cr>")
Nmap("gx", "<cmd>Lspsaga code_action<cr>")
Xmap("gx", ":<c-u>Lspsaga range_code_action<cr>")
Nmap("K", "<cmd>Lspsaga hover_doc<cr>")
Nmap("go", "<cmd>Lspsaga show_line_diagnostics<cr>")
Nmap("gj", "<cmd>Lspsaga diagnostic_jump_next<cr>")
Nmap("gk", "<cmd>Lspsaga diagnostic_jump_prev<cr>")
Nmap("<C-u>", "<cmd>lua require('lspsaga.action').smart_scroll_with_saga(-1, '<c-u>')<cr>", {})
Nmap("<C-d>", "<cmd>lua require('lspsaga.action').smart_scroll_with_saga(1, '<c-d>')<cr>", {})
-- nullchilly winbar
local function get_file_name(include_path)
local file_name = require("lspsaga.symbolwinbar").get_file_name()
if vim.fn.bufname("%") == "" then
return ""
end
if include_path == false then
return file_name
end
-- Else if include path: ./lsp/saga.lua -> lsp > saga.lua
local sep = vim.loop.os_uname().sysname == "Windows" and "\\" or "/"
local path_list = vim.split(string.gsub(vim.fn.expand("%:~:.:h"), "%%", ""), sep)
local file_path = ""
for _, cur in ipairs(path_list) do
file_path = (cur == "." or cur == "~") and "" or file_path .. cur .. " " .. "%#LspSagaWinbarSep#>%*" .. " %*"
end
return file_path .. file_name
end
local function config_winbar()
local exclude = {
["teminal"] = true,
["toggleterm"] = true,
["prompt"] = true,
["NvimTree"] = true,
["help"] = true,
} -- Ignore float windows and exclude filetype
if vim.api.nvim_win_get_config(0).zindex or exclude[vim.bo.filetype] then
vim.wo.winbar = ""
else
local ok, lspsaga = pcall(require, "lspsaga.symbolwinbar")
local sym
if ok then
sym = lspsaga.get_symbol_node()
end
local win_val = ""
win_val = get_file_name(true) -- set to true to include path
if sym ~= nil then
win_val = win_val .. sym
end
vim.wo.winbar = win_val
end
end
local events = { "BufEnter", "BufWinEnter", "CursorMoved" }
vim.api.nvim_create_autocmd(events, {
pattern = "*",
callback = function()
config_winbar()
end,
})
vim.api.nvim_create_autocmd("User", {
pattern = "LspsagaUpdateSymbol",
callback = function()
config_winbar()
end,
})
vim.cmd([[
nnoremap <silent> <A-d> <cmd>lua require('lspsaga.floaterm').open_float_terminal()<CR>
tnoremap <silent> <A-d> <C-\><C-n>:lua require('lspsaga.floaterm').close_float_terminal()<CR>
]])

View file

@ -0,0 +1,106 @@
function string.starts(self, str)
return self:find('^' .. str) ~= nil
end
local conceal = function()
local home = os.getenv("HOME")
local blacklist = {
[home .. "/git/work"] = "Working...",
[home .. "/git/freelance"] = "Freelancing...",
[home .. "/git/freelance"] = "Freelancing...",
}
local cur_file = vim.fn.expand("%:p")
for k, v in pairs(blacklist) do
if cur_file:starts(k) then
return v
end
end
return false
end
require("presence"):setup({
-- General options
auto_update = true,
neovim_image_text = "The Soydev's Kryptonite",
-- Main image display (either "neovim" or "file")
main_image = "file",
-- A list of strings or Lua patterns that disable Rich Presence if the current file name, path, or workspace matches
---@diagnostic disable-next-line: unused-local
buttons = function(buffer, repo_url)
-- ignore where no repo_url is set
if repo_url == nil then
return false
end
-- only show certain org/user repos, don't leak clients or work
local visible_urls = {
"github.com/catppuccin",
"github.com/farbenfroh",
"github.com/nekowinston",
}
-- check if repo_url is in the list of visible urls
for _, visible_url in ipairs(visible_urls) do
if repo_url:find(visible_url) then
return {
{
label = "Steal the code",
url = repo_url,
},
}
end
end
-- if not, return false
return false
end,
debounce_timeout = 10,
file_assets = {
["k8s.yaml"] = {
"Kubernetes",
"https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.png",
},
["Chart.yaml"] = {
"Helm Chart",
"https://raw.githubusercontent.com/helm/community/main/art/images/Logo-Tweak-Dark.png",
},
["helmfile.yaml"] = {
"helmfile",
"https://raw.githubusercontent.com/helm/community/main/art/images/Logo-Tweak-Dark.png",
}
},
-- Rich Presence text options
editing_text = function(s)
local concealed = conceal()
if concealed then
return concealed
end
return "✍️ " .. s
end,
reading_text = function(s)
local concealed = conceal()
if concealed then
return concealed
end
return "📖 " .. s
end,
file_explorer_text = function(s)
local concealed = conceal()
if concealed then
return concealed
end
return "📁 " .. s
end,
workspace_text = function(s)
local concealed = conceal()
if s ~= nil and not concealed then
return "🗂️ ".. s
else
return nil
end
end,
git_commit_text = "Committing changes",
plugin_manager_text = "🤹 Plugins",
line_number_text = "L%s of %s",
})

View file

@ -0,0 +1,65 @@
require("nvim-treesitter.configs").setup({
auto_install = true,
ignore_install = {
-- woulnd't install sometimes, not needed
"phpdoc",
},
highlight = {
enable = true,
},
ensure_installed = {
"bash",
"c",
"cmake",
"comment",
"cpp",
"css",
"dockerfile",
"fish",
"gdscript",
"glsl",
"go",
"godot_resource",
"gomod",
"gowork",
"graphql",
"help",
"hjson",
"html",
"http",
"java",
"javascript",
"jsdoc",
"json",
"json5",
"jsonc",
"kotlin",
"latex",
"lua",
"make",
"markdown",
"ninja",
"perl",
"php",
"prisma",
"proto",
"pug",
"python",
"rasi",
"regex",
"ruby",
"rust",
"scss",
"sql",
"svelte",
"swift",
"teal",
"todotxt",
"toml",
"tsx",
"typescript",
"vim",
"vue",
"yaml",
},
})

236
dot_config/nvim/lua/lsp.lua Normal file
View file

@ -0,0 +1,236 @@
require("mason").setup({
ui = {
border = "none",
icons = {
package_installed = "",
package_pending = "",
package_uninstalled = "",
},
},
})
require("mason-lspconfig").setup({ automatic_installation = true })
vim.opt.completeopt = "menu,menuone,noselect"
-- debug mode enabled
vim.lsp.set_log_level("debug")
-- Setup nvim-cmp.
local cmp = require("cmp")
cmp.setup({
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<Tab>"] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "vsnip" },
}, { { name = "buffer" } }),
})
-- Set configuration for specific filetype.
cmp.setup.filetype("gitcommit", {
sources = cmp.config.sources({
{ name = "cmp_git" },
}, { { name = "buffer" } }),
})
-- search
cmp.setup.cmdline("/", {
mapping = cmp.mapping.preset.cmdline(),
sources = { { name = "buffer" } },
})
-- Use cmdline & path source for ':'
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources(
{ {
name = "path",
option = { trailing_slash = true },
} },
{ { name = "cmdline" } }
),
})
-- Setup lspconfig.
local capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities())
-- Mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
local opts = { noremap = true, silent = true }
vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float, opts)
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist, opts)
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
---@diagnostic disable-next-line: unused-local
local on_attach = function(client, bufnr)
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
-- disable yaml diagnostics on Helm files
if vim.bo[bufnr].buftype ~= "" or vim.bo[bufnr].filetype == "helm" then
vim.diagnostic.disable()
end
-- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, bufopts)
vim.keymap.set("n", "gd", vim.lsp.buf.definition, bufopts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts)
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, bufopts)
vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, bufopts)
vim.keymap.set("n", "<space>wa", vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set("n", "<space>wl", function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts)
vim.keymap.set("n", "<space>D", vim.lsp.buf.type_definition, bufopts)
vim.keymap.set("n", "<space>rn", vim.lsp.buf.rename, bufopts)
vim.keymap.set("n", "<space>ca", vim.lsp.buf.code_action, bufopts)
vim.keymap.set("n", "gr", vim.lsp.buf.references, bufopts)
vim.keymap.set("n", "<space>nf", function()
vim.lsp.buf.format({
-- filter to only use null-ls
filter = function(c)
return c.name == "null-ls"
end,
bufnr = bufnr,
})
end, bufopts)
end
local common_config = {
on_attach = on_attach,
}
local lsp = require("lspconfig")
-- joke language
lsp.sumneko_lua.setup({
on_attach = on_attach,
capabilities = capabilities,
settings = {
Lua = {
workspace = {
-- Make the server aware of Neovim runtime files
library = vim.api.nvim_get_runtime_file("", true),
checkThirdParty = false,
maxPreload = 100000,
preloadFileSize = 10000,
},
diagnostics = {
-- Get the language server to recognize the `vim` global
globals = { "vim" },
},
telemetry = {
enable = false,
},
},
},
})
--- the cool kids
lsp.bashls.setup(common_config)
lsp.gopls.setup(common_config)
lsp.pyright.setup(common_config)
lsp.rust_analyzer.setup(common_config)
--- Web Development
lsp.cssls.setup(common_config)
local emmet_cap = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities())
emmet_cap.textDocument.completion.completionItem.snippetSupport = true
lsp.emmet_ls.setup({
on_attach = on_attach,
capabilities = emmet_cap,
filetypes = {
"javascriptreact",
"typescriptreact",
"html",
"svelte",
"css",
"less",
"sass",
"scss",
},
})
-- lsp.html.setup(common_config)
lsp.tailwindcss.setup({
on_attach = on_attach,
capabilities = capabilities,
settings = {
emmetCompletions = true,
},
})
-- soydev
lsp.prismals.setup(common_config)
lsp.svelte.setup(common_config)
-- attach tsserver only when there's a 'package.json' file in the CWD
lsp.tsserver.setup({
on_attach = on_attach,
capabilities = capabilities,
root_dir = lsp.util.root_pattern("package.json"),
})
-- attach deno only when there's a 'deps.ts' file in the CWD
lsp.denols.setup({
on_attach = on_attach,
capabilities = capabilities,
root_dir = lsp.util.root_pattern("deps.ts"),
single_file_support = false,
})
-- data formats
lsp.dockerls.setup(common_config)
lsp.graphql.setup({
on_attach = on_attach,
capabilities = capabilities,
root_dir = lsp.util.root_pattern(".graphqlrc*", ".graphql.config.*", "graphql.config.*"),
settings = {
graphql = {
schemaPath = "schema.graphql",
},
},
})
lsp.jsonls.setup({
on_attach = on_attach,
capabilities = capabilities,
settings = {
json = {
schemas = require("schemastore").json.schemas(),
validate = { enable = true },
},
},
})
lsp.yamlls.setup({
on_attach = on_attach,
capabilities = capabilities,
settings = {
redhat = {
telemetry = {
enabled = false,
},
},
yaml = {
schemas = {
["https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.24.2-standalone-strict/all.json"] = {
"*.k8s.yaml",
"*.k8s.yml",
"kubectl-edit-*.yaml",
},
},
},
},
})
--- Documentation
lsp.ltex.setup(common_config)
-- lsp.marksman.setup(common_config)
-- lsp.prosemd_lsp.setup(common_config)

View file

@ -0,0 +1,471 @@
require("utils")
vim.cmd([[packadd packer.nvim]])
local packer = require("packer")
-- slow internet...
packer.init({
git = { clone_timeout = 180 },
profile = {
enable = true,
},
})
return packer.startup(function(use)
-- Packer managing itself
use("wbthomason/packer.nvim")
-- startup time or some shit
use("lewis6991/impatient.nvim")
-- colour scheme
use({
"catppuccin/nvim",
as = "catppuccin",
branch = "dev",
config = function()
require("config/catppuccin")
end,
})
use({
"Pocco81/true-zen.nvim",
branch = "main",
config = function()
require("true-zen").setup({
modes = {
ataraxis = {
shade = "dark",
backdrop = 0.00,
quit_untoggles = true,
padding = {
left = 52,
right = 52,
top = 0,
bottom = 0,
},
},
narrow = {
run_ataraxis = true,
},
},
integrations = {
tmux = true,
},
})
end,
})
-- git gutter
use({
"lewis6991/gitsigns.nvim",
config = function()
require("config/gitsigns")
end,
})
-- rainbow indents
use({
"lukas-reineke/indent-blankline.nvim",
config = function()
require("indent_blankline").setup({
space_char_blankline = " ",
show_current_conext = true,
char_highlight_list = {
"IndentBlanklineIndent1",
"IndentBlanklineIndent2",
"IndentBlanklineIndent3",
"IndentBlanklineIndent4",
"IndentBlanklineIndent5",
"IndentBlanklineIndent6",
},
})
vim.g.indent_blankline_filetype_exclude = {
"dashboard",
"help",
"neogitstatus",
"fugitive",
"packer",
"NvimTree",
"Trouble",
}
end,
})
-- top bar
use({
"akinsho/bufferline.nvim",
config = function()
require("bufferline").setup({
options = {
show_close_icon = false,
separator_style = "slant",
close_icon = "",
offsets = { { filetype = "NvimTree" } },
left_mouse_command = "buffer %d",
middle_mouse_command = "bdelete! %d",
right_mouse_command = nil,
},
})
-- hop between buffers in order of the bar
Nmap("<A-,>", "<Cmd>BufferLineCyclePrev<CR>")
Nmap("<A-.>", "<Cmd>BufferLineCycleNext<CR>")
-- Re-order to previous/next
Nmap("<A-<>", "<Cmd>BufferLineMovePrev<CR>")
Nmap("<A->>", "<Cmd>BufferLineMoveNext<CR>")
-- Goto buffer in position...
Nmap("<A-1>", "<Cmd>BufferLineGoToBuffer 1<CR>")
Nmap("<A-2>", "<Cmd>BufferLineGoToBuffer 2<CR>")
Nmap("<A-3>", "<Cmd>BufferLineGoToBuffer 3<CR>")
Nmap("<A-4>", "<Cmd>BufferLineGoToBuffer 4<CR>")
Nmap("<A-5>", "<Cmd>BufferLineGoToBuffer 5<CR>")
Nmap("<A-6>", "<Cmd>BufferLineGoToBuffer 6<CR>")
Nmap("<A-7>", "<Cmd>BufferLineGoToBuffer 7<CR>")
Nmap("<A-8>", "<Cmd>BufferLineGoToBuffer 8<CR>")
Nmap("<A-9>", "<Cmd>BufferLineGoToBuffer 9<CR>")
Nmap("<A-0>", "<Cmd>BufferLineGoToBuffer -1<CR>")
-- Pin/unpin buffer
Nmap("<A-p>", "<Cmd>BufferLineTogglePin<CR>")
-- Close buffer
Nmap("<A-x>", "<Cmd>bdelete<CR>")
Nmap("<A-X>", "<Cmd>bdelete!<CR>")
-- create new buffer
Nmap("<A-c>", "<Cmd>enew<CR>")
-- pick buffer
Nmap("<A-space>", "<Cmd>BufferLinePick<CR>")
-- Sort automatically by...
Nmap("<Space>bd", "<Cmd>BufferLineSortByDirectory<CR>")
Nmap("<Space>bl", "<Cmd>BufferLineSortByExtension<CR>")
end,
})
-- bottom bar
use({
"feline-nvim/feline.nvim",
requires = "kyazdani42/nvim-web-devicons",
after = { "catppuccin" },
config = function()
require("config/feline")
end,
})
-- DJI Osmo
use({
"luukvbaal/stabilize.nvim",
config = function()
require("stabilize").setup()
end,
})
-- syntax
use({
"nvim-treesitter/nvim-treesitter",
run = ":TSUpdate",
config = function()
require("config/treesitter")
end,
})
use({ "p00f/nvim-ts-rainbow", requires = "nvim-treesitter/nvim-treesitter" })
-- show possible key combos
use({
"folke/which-key.nvim",
config = function()
require("which-key").setup({})
end,
})
-- we IDE now
use({
"rcarriga/nvim-notify",
config = function()
require("notify").setup({
fps = 60,
timeout = 2500,
stages = "fade",
})
end,
})
-- syntax
use("alker0/chezmoi.vim")
use("digitaltoad/vim-pug")
use("ron-rs/ron.vim")
use("elkowar/yuck.vim")
-- tooling
use({
"editorconfig/editorconfig-vim",
config = function()
-- add fugitive buffers to the editorconfig excludes
vim.g.EditorConfig_exclude_patterns = { "fugitive://.*", "scp://.*" }
end,
})
-- read and write encrypted pgp files
use("jamessan/vim-gnupg")
-- additional functionality
use("tpope/vim-commentary")
use("tpope/vim-surround")
use("ggandor/lightspeed.nvim")
-- make those above work in repeat commands
use("tpope/vim-repeat")
use({
"windwp/nvim-autopairs",
config = function()
require("nvim-autopairs").setup({})
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
local cmp = require("cmp")
cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done())
end,
})
use({
"windwp/nvim-ts-autotag",
config = function()
require("nvim-ts-autotag").setup()
end,
})
use({
"heavenshell/vim-jsdoc",
run = "make install",
config = function()
Nmap("<leader>jd", "<Cmd>JsDoc<CR>")
end,
})
-- git
use("tpope/vim-fugitive")
-- why not both?
use({
"TimUntersberger/neogit",
requires = "nvim-lua/plenary.nvim",
config = function()
Nmap("<leader>ng", "<Cmd>Neogit<CR>")
end,
})
use("christoomey/vim-sort-motion")
use("dhruvasagar/vim-table-mode")
use({
"kyazdani42/nvim-tree.lua",
config = function()
require("nvim-tree").setup({ update_cwd = true })
Nmap("<C-n>", ":NvimTreeToggle<CR>")
Nmap("<leader>r", ":NvimTreeRefresh<CR>")
end,
})
use({
"RRethy/vim-hexokinase",
run = "make",
config = function()
vim.g.Hexokinase_highlighters = { "virtual" }
end,
})
use({
"simrat39/symbols-outline.nvim",
config = function()
Nmap("<leader>so", ":SymbolsOutline<CR>")
end,
})
-- databases
use({
"kristijanhusak/vim-dadbod-ui",
requires = "tpope/vim-dadbod",
config = function()
Nmap("<leader>db", ":DBUIToggle<CR>")
vim.g.db_ui_use_nerd_fonts = true
vim.g.db_ui_win_position = "right"
end,
})
use({
"kristijanhusak/vim-dadbod-completion",
requires = { { "tpope/vim-dadbod" }, { "hrsh7th/nvim-cmp" } },
config = function()
require("cmp").setup.buffer({ sources = { { name = "vim-dadbod-completion" } } })
end,
})
-- telescope
use({
"nvim-telescope/telescope.nvim",
requires = "nvim-lua/plenary.nvim",
config = function()
-- Find files using Telescope command-line sugar.
Nmap("<leader>fc", "<cmd>Telescope conventional_commits<CR>")
Nmap("<leader>fr", "<cmd>Telescope asynctasks all<CR>")
Nmap("<leader>ff", "<cmd>Telescope find_files<CR>")
Nmap("<leader>fg", "<cmd>Telescope live_grep<CR>")
Nmap("<leader>fb", "<cmd>Telescope buffers<CR>")
Nmap("<leader>fh", "<cmd>Telescope help_tags<CR>")
end,
})
use({
"nvim-telescope/telescope-fzf-native.nvim",
run = "make",
requires = "nvim-telescope/telescope.nvim",
config = function()
local telescope = require("telescope")
telescope.setup({
extensions = {
fzf = {
fuzzy = true,
override_generic_sorter = true,
override_file_sorter = true,
case_mode = "smart_case",
},
},
})
telescope.load_extension("fzf")
end,
})
use({
"nvim-telescope/telescope-file-browser.nvim",
config = function()
require("telescope").load_extension("file_browser")
end,
})
use({
"nvim-telescope/telescope-project.nvim",
config = function()
require("telescope").load_extension("project")
end,
})
use({
"olacin/telescope-cc.nvim",
requires = {
{ "nvim-telescope/telescope.nvim" },
{ "nvim-lua/popup.nvim" },
},
config = function()
require("telescope").load_extension("conventional_commits")
end,
})
use({
"sudormrfbin/cheatsheet.nvim",
})
use({
"andweeb/presence.nvim",
config = function()
require("config/presence")
end,
})
use({ "iamcco/markdown-preview.nvim", run = "cd app && yarn install" })
-- external extensions
use("williamboman/mason.nvim")
-- LSP
use("williamboman/mason-lspconfig.nvim")
use("neovim/nvim-lspconfig")
-- completion
use("hrsh7th/nvim-cmp")
use("hrsh7th/cmp-buffer")
use("hrsh7th/cmp-cmdline")
use("hrsh7th/cmp-nvim-lsp")
use("hrsh7th/cmp-path")
use("hrsh7th/cmp-vsnip")
use("hrsh7th/vim-vsnip")
use("petertriho/cmp-git")
-- other
use({
"jose-elias-alvarez/null-ls.nvim",
config = function()
local null_ls = require("null-ls")
null_ls.setup({
sources = {
null_ls.builtins.formatting.gofmt,
null_ls.builtins.formatting.prettier,
null_ls.builtins.formatting.rustfmt,
null_ls.builtins.formatting.stylua,
},
})
end,
requires = { "nvim-lua/plenary.nvim" },
})
use({
"simrat39/rust-tools.nvim",
config = function()
require("rust-tools").setup({})
end,
})
use("b0o/schemastore.nvim")
--
use({
"folke/trouble.nvim",
config = function()
require("trouble").setup({})
end,
})
use({
"glepnir/lspsaga.nvim",
config = function()
require("config/lspsaga")
end,
})
--
use({
"github/copilot.vim",
config = function()
Imap("<C-J>", "copilot#Accept(<Tab>)", { noremap = true, silent = true, expr = true })
vim.g.copilot_no_tab_map = true
end,
})
-- organization
use({
"vimwiki/vimwiki",
branch = "dev",
config = function()
vim.g.vimwiki_global_ext = 0
vim.g.vimwiki_list = {
{
auto_export = 1,
path_html = "~/.local/share/vimwiki/",
path = "~/.local/share/vimwiki/",
syntax = "markdown",
ext = ".md",
},
}
end,
})
use("tools-life/taskwiki")
use({
"skywind3000/asyncrun.vim",
config = function()
vim.g.asyncrun_open = 6
end,
})
use({ "skywind3000/asynctasks.vim" })
use({
"GustavoKatel/telescope-asynctasks.nvim",
config = function()
require("telescope").load_extension("asynctasks")
end,
})
-- startup
use({
"glepnir/dashboard-nvim",
config = function()
require("config/dashboard")
end,
})
-- automatic theme switching
use({
"f-person/auto-dark-mode.nvim",
config = function()
local auto_dark_mode = require("auto-dark-mode")
auto_dark_mode.setup({
---@diagnostic disable-next-line: assign-type-mismatch
update_interval = 5000,
set_dark_mode = function()
vim.cmd("Catppuccin mocha")
end,
set_light_mode = function()
vim.cmd("Catppuccin latte")
end,
})
auto_dark_mode.init()
end,
cond = vim.fn.has("macunix"),
})
end)

View file

@ -0,0 +1,18 @@
local function map(mode, shortcut, command, opt)
vim.keymap.set(mode, shortcut, command, opt)
end
function Nmap(shortcut, command, opt)
opt = opt or { noremap = true, silent = true }
map("n", shortcut, command, opt)
end
function Imap(shortcut, command, opt)
opt = opt or { noremap = true, silent = true }
map("i", shortcut, command, opt)
end
function Xmap(shortcut, command, opt)
opt = opt or { noremap = true, silent = true }
map("x", shortcut, command, opt)
end

View file

@ -0,0 +1,10 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAJKDgbUchDhAHfojOyIOHRBU+WIJXHstaCPOrPWxvfW4w
RJt2LYBB2EynZ2URPGKb7JuIOnaQVHrUpdqLqTewv6PgrCIhSvj8bmxM0uJCRp0k
0rsBLe30wj1au6VG3nlz2j4Wip8Sz9JrzfDdFR/4V6+hGFXH9Wy4qkdPWj6vZm3+
TFG9LlUMV6NxmzyrI3Lf7oVQ589KX4mn617xkErGDjgITdGN7rfpd24ML94uQYbA
cF0PYFH2bxHh+AtAMYq6Tg+Af7nhQm7CZMTrcYhnl99/O+WXgq3RGEK1bqGe63XL
/Y721oRPf4egZvahAGzchjqHXJXlxvK1vJC3YasqF2722BTKiqVwZSr5+sIZ
=sh0b
-----END PGP MESSAGE-----

417
dot_config/picom.conf Normal file
View file

@ -0,0 +1,417 @@
#################################
# Shadows #
#################################
# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = true
# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 8
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
shadow-opacity = .5
# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -7
# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -7
# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0
# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0
# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue)
# shadow-color = "#000000"
# Specify a list of conditions of windows that should have no shadow.
#
# examples:
# shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c"
];
# Specify a list of conditions of windows that should have no shadow painted over, such as a dock window.
# clip-shadow-above = []
# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use
# shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = ""
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false
#################################
# Fading #
#################################
# Fade windows in/out when opening/closing and when opacity changes,
# unless no-fading-openclose is used.
# fading = false
fading = false;
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.03;
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.03;
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
# fade-delta = 10
# Specify a list of conditions of windows that should not be faded.
# fade-exclude = []
# Do not fade on window open/close.
# no-fading-openclose = false
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false
#################################
# Transparency / Opacity #
#################################
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
# inactive-opacity = 1
#inactive-opacity = 0.8;
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
#frame-opacity = 1.0;
# Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows.
# inactive-opacity-override = true
inactive-opacity-override = false;
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
# active-opacity = 1.0
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
# inactive-dim = 0.0
# Specify a list of conditions of windows that should never be considered focused.
# focus-exclude = []
focus-exclude = [];
# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
# Note we don't make any guarantee about possible conflicts with other
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
# opacity-rule = [ "80:class_g = 'URxvt'" ];
#
# opacity-rule = []
#################################
# Corners #
#################################
# Sets the radius of rounded window corners. When > 0, the compositor will
# round the corners of windows. Does not interact well with
# `transparent-clipping`.
# corner-radius = 20;
# Exclude conditions for rounded corners.
rounded-corners-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'"
];
#################################
# Background-Blurring #
#################################
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
# blur-size = 12
#
# blur-deviation = false
#
blur-method = "dual_kawase"
blur-strength = 2
# Blur background of semi-transparent / ARGB windows.
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
# blur-background = false
# Blur background of windows when the window frame is not opaque.
# Implies:
# blur-background
# Bad in performance, with driver-dependent behavior. The name may change.
#
# blur-background-frame = false
# Use fixed blur strength rather than adjusting according to window opacity.
blur-background-fixed = true
# Specify the blur convolution kernel, with the following format:
# example:
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ""
blur-kern = "3x3box";
# Exclude conditions for background blur.
# blur-background-exclude = []
blur-background-exclude = [
# "window_type = 'dock'",
# "window_type = 'desktop'",
# "_GTK_FRAME_EXTENTS@:c"
];
#################################
# General Settings #
#################################
# Enable remote control via D-Bus. See the man page for more details.
# dbus = true
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
backend = "glx"
# backend = "xrender";
# Enable/disable VSync.
# vsync = false
vsync = true;
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false
# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = true;
# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;
# Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false
# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows.
#
# unredir-if-possible = false
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true;
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. This usually means windows from the same application
# will be considered focused or unfocused at the same time.
# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too.
#
# detect-client-leader = false
# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1
# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
# glx-no-stencil = false
# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false
# Disable the use of damage information.
# This cause the whole screen to be redrawn everytime, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
use-damage = true;
# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false
# GLX backend: Use specified GLSL fragment shader for rendering window contents.
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
# in the source tree for examples.
#
# glx-fshader-win = ""
# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false
# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false
# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0
# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false
# Set the log level. Possible values are:
# "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "warn";
# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = "/path/to/your/log/file"
# Show all X errors (for debugging)
# show-all-xerrors = false
# Write process ID to a file.
# write-pid-path = "/path/to/your/log/file"
# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
# "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
# fade, shadow:::
# Controls window-type-specific shadow and fade settings.
#
# opacity:::
# Controls default opacity of the window type.
#
# focus:::
# Controls whether the window of this type is to be always considered focused.
# (By default, all window types except "normal" and "dialog" has this on.)
#
# full-shadow:::
# Controls whether shadow is drawn under the parts of the window that you
# normally won't be able to see. Useful when the window has parts of it
# transparent, and you want shadows in those areas.
#
# clip-shadow-above:::
# Controls wether shadows that would have been drawn above the window should
# be clipped. Useful for dock windows that should have no shadow painted on top.
#
# redir-ignore:::
# Controls whether this type of windows should cause screen to become
# redirected again after been unredirected. If you have unredir-if-possible
# set, and doesn't want certain window to cause unnecessary screen redirection,
# you can set this to `true`.
#
wintypes:
{
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
dock = { shadow = false; clip-shadow-above = true; }
dnd = { shadow = false; }
popup_menu = { opacity = 0.8; }
dropdown_menu = { opacity = 0.8; }
};

View file

@ -0,0 +1,28 @@
[colors]
rosewater = #dc8a78
flamingo = #dd7878
pink = #ea76cb
mauve = #8839ef
red = #d20f39
maroon = #e64553
peach = #fe640b
yellow = #df8e1d
green = #40a02b
teal = #179299
sky = #04a5e5
sapphire = #209fb5
blue = #1e66f5
lavender = #7287fd
text = #4c4f69
subtext1 = #5c5f77
subtext0 = #6c6f85
overlay2 = #7c7f93
overlay1 = #8c8fa1
overlay0 = #9ca0b0
surface2 = #acb0be
surface1 = #bcc0cc
surface0 = #ccd0da
base = #eff1f5
mantle = #e6e9ef
crust = #dce0e8
crust_bg = #f2dce0e8

View file

@ -0,0 +1,28 @@
[colors]
rosewater = #f5e0dc
flamingo = #f2cdcd
pink = #f5c2e7
mauve = #cba6f7
red = #f38ba8
maroon = #eba0ac
peach = #fab387
yellow = #f9e2af
green = #a6e3a1
teal = #94e2d5
sky = #89dceb
sapphire = #74c7ec
blue = #89b4fa
lavender = #b4befe
text = #cdd6f4
subtext0 = #bac2de
subtext1 = #a6adc8
overlay0 = #9399b2
overlay1 = #7f849c
overlay2 = #6c7086
surface0 = #585b70
surface1 = #45475a
surface2 = #313244
base = #1e1e2e
mantle = #181825
crust = #11111b
crust_bg = #f211111b

View file

@ -0,0 +1,162 @@
;# vim:ft=dosini
include-file = colors/mocha.ini
[global/wm]
margin-top = 0
margin-bottom = 0
[settings]
screenchange-reload = true
[bar/main]
monitor = ${env:MONITOR:HDMI-0}
height = 24pt
width = 100%
fixed-center = true
background = ${colors.crust_bg}
foreground = ${colors.text}
line-size = 1pt
module-margin-left = 4pt
module-margin-right = 4pt
font-0 = "Inter:style=Medium:size=14;4"
font-1 = "Victor Mono:style=SemiBold Italic:size=14;3"
; font for nerdfont icons
font-2 = "Symbols Nerd Font:style=1000-em:size=14;4"
modules-left = i3 title
modules-center = nowplaying
modules-right = task mail volume battery vpn date time
tray-position = none
[module/i3]
type = internal/i3
format = <label-state> <label-mode>
index-sort = true
wrapping-scroll = false
; Only show workspaces on the same output as the bar
pin-workspaces = true
label-mode-foreground = ${colors.mauve}
; focused = Active workspace on focused monitor
label-focused = %icon%
label-focused-foreground = ${colors.pink}
label-focused-padding = 8pt
; unfocused = Inactive workspace on any monitor
label-unfocused = %icon%
label-unfocused-foreground = ${colors.mauve}
label-unfocused-padding = ${self.label-focused-padding}
; visible = Active workspace on unfocused monitor
label-visible = %icon%
label-visible-foreground = ${colors.mauve}
label-visible-padding = ${self.label-focused-padding}
; urgent = Workspace with urgency hint set
label-urgent = %icon%
label-urgent-foreground = ${colors.red}
label-urgent-padding = ${self.label-focused-padding}
ws-icon-0=1;
ws-icon-1=2;
ws-icon-2=3;
ws-icon-3=4;
ws-icon-4=5;
ws-icon-5=6;
ws-icon-6=7;
ws-icon-7=8;
ws-icon-8=9;
ws-icon-9=10;
ws-icon-default=
[module/title]
type = custom/script
exec = i3-window-title
tail = true
[module/mail]
type = custom/script
exec = mailcount
interval = 10
format-prefix = " "
format-foreground = ${colors.red}
[module/task]
type = custom/script
exec = taskcount
interval = 10
format-foreground = ${colors.red}
[module/vpn]
type = custom/script
exec = mullvad-status
tail = true
format-foreground = ${colors.green}
[module/date]
type = custom/script
interval = 60
# fall back to normie date if discordian date is not available
exec = (ddate +'%{%A, %b %d%}' || date +'%A, %b %d')
format-foreground = ${colors.blue}
label =  %output%
[module/time]
type = internal/date
time = "%H:%M"
format-foreground = ${colors.mauve}
format-padding = 4pt
label =  %time%
[module/nowplaying]
type = custom/script
interval = 3
exec = media-status
tail = true
format-foreground = ${colors.text}
click-left = playerctl play-pause
label-font = 2
[module/battery]
type = internal/battery
label = Test
format-foreground = ${colors.yellow}
full-at = 99
; If an inotify event haven't been reported in this many
; seconds, manually poll for new values.
; Needed as a fallback for systems that don't report events
; on sysfs/procfs.
poll-interval = 10
[module/volume]
type = internal/pulseaudio
format-volume-foreground = ${colors.peach}
format-muted-foreground = ${colors.peach}
use-ui-max = false
; Interval for volume increase/decrease (in percent points)
interval = 5
label-muted = ﱝ 0%
ramp-volume-0 =
ramp-volume-1 = 奔
ramp-volume-2 =
format-volume = <ramp-volume> <label-volume>
click-right = pavucontrol

View file

@ -0,0 +1,111 @@
import catppuccin
config.load_autoconfig()
catppuccin.setup(c, "mocha")
### general stuff
# macOS keybinds :kekw:
c.bindings.commands = {
"normal": {
"<Meta+t>": "open -t",
"<Meta+w>": "tab-close",
"<Meta+r>": "reload",
"<Meta+1>": "tab-focus 1",
"<Meta+2>": "tab-focus 2",
"<Meta+3>": "tab-focus 3",
"<Meta+4>": "tab-focus 4",
"<Meta+5>": "tab-focus 5",
"<Meta+6>": "tab-focus 6",
"<Meta+7>": "tab-focus 7",
"<Meta+8>": "tab-focus 8",
"<Meta+9>": "tab-focus 9",
"<Meta+0>": "tab-focus 10",
"<Meta+q>": "quit",
}
}
# search when typing in the address bar, and use DDG
c.url.auto_search = "naive"
c.url.searchengines = {"DEFAULT": "https://duckduckgo.com/?q={}"}
### rice
# a teensy bit more padding...
c.statusbar.padding = {"bottom": 4, "left": 4, "right": 4, "top": 4}
c.tabs.padding = {"bottom": 4, "left": 4, "right": 4, "top": 4}
# don't show the tab indicator
c.tabs.indicator.width = 0
## fonts
c.fonts.default_size = "14pt"
# default Comic Code
c.fonts.default_family = "Victor Mono"
# Inter for UI
c.fonts.tabs.selected = "default_size Inter var"
c.fonts.tabs.unselected = "default_size Inter var"
c.fonts.hints = "default_size Inter var"
# uppercase for hints, a la vimium
c.hints.uppercase = True
### other stuff
# use brave blocker + hosts file
c.content.blocking.method = "both"
# self explanatory
c.content.javascript.can_access_clipboard = True
c.content.pdfjs = True
# flags
c.qt.args = [
"--force-color-profile=srgb",
]
# experimental Privacy-Redirect
from pprint import pprint
import re
from PyQt5.QtCore import QUrl
from qutebrowser.api import interceptor
privacy_mappings = [
{
"pattern": r'.*\.youtube.com',
"redirect": "https://iv.winston.sh",
}
]
# compile the regexes
privacy_mappings_re = [re.compile(host["pattern"]) for host in privacy_mappings]
def redirect_to_proxies(info: interceptor.Request):
"""keep me productive by redirecting certain hosts"""
global privacy_mappings
req_host = info.request_url.host()
print(info.request_url)
if any(host.match(req_host) for host in privacy_mappings_re):
try:
print([host for host in privacy_mappings_re if host["pattern"].match(req_host)])
# info.redirect(new_url)
except:
pass
return True
def redirect_80_to_443(info: interceptor.Request):
url = info.request_url
scheme = url.scheme()
req_host = url.host()
allowlist = [
"localhost",
"127.0.0.1"
]
if scheme == "http" and req_host not in allowlist:
url.setScheme("https")
try:
info.redirect(url)
except:
pass
return True
# interceptor.register(redirect_to_proxies)
interceptor.register(redirect_80_to_443)

View file

@ -0,0 +1,62 @@
# This is a sample commands.py. You can add your own commands here.
#
# Please refer to commands_full.py for all the default commands and a complete
# documentation. Do NOT add them all here, or you may end up with defunct
# commands when upgrading ranger.
# A simple command for demonstration purposes follows.
# -----------------------------------------------------------------------------
from __future__ import (absolute_import, division, print_function)
# You can import any python module as needed.
import os
# You always need to import ranger.api.commands here to get the Command class:
from ranger.api.commands import Command
# Any class that is a subclass of "Command" will be integrated into ranger as a
# command. Try typing ":my_edit<ENTER>" in ranger!
class my_edit(Command):
# The so-called doc-string of the class will be visible in the built-in
# help that is accessible by typing "?c" inside ranger.
""":my_edit <filename>
A sample command for demonstration purposes that opens a file in an editor.
"""
# The execute method is called when you run this command in ranger.
def execute(self):
# self.arg(1) is the first (space-separated) argument to the function.
# This way you can write ":my_edit somefilename<ENTER>".
if self.arg(1):
# self.rest(1) contains self.arg(1) and everything that follows
target_filename = self.rest(1)
else:
# self.fm is a ranger.core.filemanager.FileManager object and gives
# you access to internals of ranger.
# self.fm.thisfile is a ranger.container.file.File object and is a
# reference to the currently selected file.
target_filename = self.fm.thisfile.path
# This is a generic function to print text in ranger.
self.fm.notify("Let's edit the file " + target_filename + "!")
# Using bad=True in fm.notify allows you to print error messages:
if not os.path.exists(target_filename):
self.fm.notify("The given file does not exist!", bad=True)
return
# This executes a function from ranger.core.acitons, a module with a
# variety of subroutines that can help you construct commands.
# Check out the source, or run "pydoc ranger.core.actions" for a list.
self.fm.edit_file(target_filename)
# The tab method is called when you press tab, and should return a list of
# suggestions that the user will tab through.
# tabnum is 1 for <TAB> and -1 for <S-TAB> by default
def tab(self, tabnum):
# This is a generic tab-completion function that iterates through the
# content of the current directory.
return self._tab_directory_content()

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,350 @@
#!/usr/bin/env bash
set -o noclobber -o noglob -o nounset -o pipefail
IFS=$'\n'
## If the option `use_preview_script` is set to `true`,
## then this script will be called and its output will be displayed in ranger.
## ANSI color codes are supported.
## STDIN is disabled, so interactive scripts won't work properly
## This script is considered a configuration file and must be updated manually.
## It will be left untouched if you upgrade ranger.
## Because of some automated testing we do on the script #'s for comments need
## to be doubled up. Code that is commented out, because it's an alternative for
## example, gets only one #.
## Meanings of exit codes:
## code | meaning | action of ranger
## -----+------------+-------------------------------------------
## 0 | success | Display stdout as preview
## 1 | no preview | Display no preview at all
## 2 | plain text | Display the plain content of the file
## 3 | fix width | Don't reload when width changes
## 4 | fix height | Don't reload when height changes
## 5 | fix both | Don't ever reload
## 6 | image | Display the image `$IMAGE_CACHE_PATH` points to as an image preview
## 7 | image | Display the file directly as an image
## Script arguments
FILE_PATH="${1}" # Full path of the highlighted file
PV_WIDTH="${2}" # Width of the preview pane (number of fitting characters)
## shellcheck disable=SC2034 # PV_HEIGHT is provided for convenience and unused
PV_HEIGHT="${3}" # Height of the preview pane (number of fitting characters)
IMAGE_CACHE_PATH="${4}" # Full path that should be used to cache image preview
PV_IMAGE_ENABLED="${5}" # 'True' if image previews are enabled, 'False' otherwise.
FILE_EXTENSION="${FILE_PATH##*.}"
FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')"
## Settings
HIGHLIGHT_SIZE_MAX=262143 # 256KiB
HIGHLIGHT_TABWIDTH=${HIGHLIGHT_TABWIDTH:-8}
HIGHLIGHT_STYLE=${HIGHLIGHT_STYLE:-pablo}
HIGHLIGHT_OPTIONS="--replace-tabs=${HIGHLIGHT_TABWIDTH} --style=${HIGHLIGHT_STYLE} ${HIGHLIGHT_OPTIONS:-}"
PYGMENTIZE_STYLE=${PYGMENTIZE_STYLE:-autumn}
OPENSCAD_IMGSIZE=${RNGR_OPENSCAD_IMGSIZE:-1000,1000}
OPENSCAD_COLORSCHEME=${RNGR_OPENSCAD_COLORSCHEME:-Tomorrow Night}
handle_extension() {
case "${FILE_EXTENSION_LOWER}" in
## Archive
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
atool --list -- "${FILE_PATH}" && exit 5
bsdtar --list --file "${FILE_PATH}" && exit 5
exit 1;;
rar)
## Avoid password prompt by providing empty password
unrar lt -p- -- "${FILE_PATH}" && exit 5
exit 1;;
7z)
## Avoid password prompt by providing empty password
7z l -p -- "${FILE_PATH}" && exit 5
exit 1;;
## PDF
pdf)
## Preview as text conversion
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
fmt -w "${PV_WIDTH}" && exit 5
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
fmt -w "${PV_WIDTH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
exit 1;;
## BitTorrent
torrent)
transmission-show -- "${FILE_PATH}" && exit 5
exit 1;;
## OpenDocument
odt|ods|odp|sxw)
## Preview as text conversion
odt2txt "${FILE_PATH}" && exit 5
## Preview as markdown conversion
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
exit 1;;
## XLSX
xlsx)
## Preview as csv conversion
## Uses: https://github.com/dilshod/xlsx2csv
xlsx2csv -- "${FILE_PATH}" && exit 5
exit 1;;
## HTML
htm|html|xhtml)
## Preview as text conversion
w3m -dump "${FILE_PATH}" && exit 5
lynx -dump -- "${FILE_PATH}" && exit 5
elinks -dump "${FILE_PATH}" && exit 5
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
;;
## JSON
json)
jq --color-output . "${FILE_PATH}" && exit 5
python -m json.tool -- "${FILE_PATH}" && exit 5
;;
## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected
## by file(1).
dff|dsf|wv|wvc)
mediainfo "${FILE_PATH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
;; # Continue with next handler on failure
esac
}
handle_image() {
## Size of the preview if there are multiple options or it has to be
## rendered from vector graphics. If the conversion program allows
## specifying only one dimension while keeping the aspect ratio, the width
## will be used.
local DEFAULT_SIZE="1920x1080"
local mimetype="${1}"
case "${mimetype}" in
## SVG
# image/svg+xml|image/svg)
# convert -- "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6
# exit 1;;
## DjVu
# image/vnd.djvu)
# ddjvu -format=tiff -quality=90 -page=1 -size="${DEFAULT_SIZE}" \
# - "${IMAGE_CACHE_PATH}" < "${FILE_PATH}" \
# && exit 6 || exit 1;;
## Image
image/*)
local orientation
orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )"
## If orientation data is present and the image actually
## needs rotating ("1" means no rotation)...
if [[ -n "$orientation" && "$orientation" != 1 ]]; then
## ...auto-rotate the image according to the EXIF data.
convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6
fi
## `w3mimgdisplay` will be called for all images (unless overriden
## as above), but might fail for unsupported types.
exit 7;;
## Video
# video/*)
# # Thumbnail
# ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6
# exit 1;;
## PDF
# application/pdf)
# pdftoppm -f 1 -l 1 \
# -scale-to-x "${DEFAULT_SIZE%x*}" \
# -scale-to-y -1 \
# -singlefile \
# -jpeg -tiffcompression jpeg \
# -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \
# && exit 6 || exit 1;;
## ePub, MOBI, FB2 (using Calibre)
# application/epub+zip|application/x-mobipocket-ebook|\
# application/x-fictionbook+xml)
# # ePub (using https://github.com/marianosimone/epub-thumbnailer)
# epub-thumbnailer "${FILE_PATH}" "${IMAGE_CACHE_PATH}" \
# "${DEFAULT_SIZE%x*}" && exit 6
# ebook-meta --get-cover="${IMAGE_CACHE_PATH}" -- "${FILE_PATH}" \
# >/dev/null && exit 6
# exit 1;;
## Font
application/font*|application/*opentype)
preview_png="/tmp/$(basename "${IMAGE_CACHE_PATH%.*}").png"
if fontimage -o "${preview_png}" \
--pixelsize "120" \
--fontname \
--pixelsize "80" \
--text " ABCDEFGHIJKLMNOPQRSTUVWXYZ " \
--text " abcdefghijklmnopqrstuvwxyz " \
--text " 0123456789.:,;(*!?') ff fl fi ffi ffl " \
--text " The quick brown fox jumps over the lazy dog. " \
"${FILE_PATH}";
then
convert -- "${preview_png}" "${IMAGE_CACHE_PATH}" \
&& rm "${preview_png}" \
&& exit 6
else
exit 1
fi
;;
## Preview archives using the first image inside.
## (Very useful for comic book collections for example.)
# application/zip|application/x-rar|application/x-7z-compressed|\
# application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar)
# local fn=""; local fe=""
# local zip=""; local rar=""; local tar=""; local bsd=""
# case "${mimetype}" in
# application/zip) zip=1 ;;
# application/x-rar) rar=1 ;;
# application/x-7z-compressed) ;;
# *) tar=1 ;;
# esac
# { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \
# { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \
# { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \
# { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return
#
# fn=$(echo "$fn" | python -c "import sys; import mimetypes as m; \
# [ print(l, end='') for l in sys.stdin if \
# (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\
# sort -V | head -n 1)
# [ "$fn" = "" ] && return
# [ "$bsd" ] && fn=$(printf '%b' "$fn")
#
# [ "$tar" ] && tar --extract --to-stdout \
# --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6
# fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g')
# [ "$bsd" ] && bsdtar --extract --to-stdout \
# --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6
# [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}"
# [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \
# "${IMAGE_CACHE_PATH}" && exit 6
# [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \
# "${IMAGE_CACHE_PATH}" && exit 6
# [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}"
# ;;
esac
# openscad_image() {
# TMPPNG="$(mktemp -t XXXXXX.png)"
# openscad --colorscheme="${OPENSCAD_COLORSCHEME}" \
# --imgsize="${OPENSCAD_IMGSIZE/x/,}" \
# -o "${TMPPNG}" "${1}"
# mv "${TMPPNG}" "${IMAGE_CACHE_PATH}"
# }
# case "${FILE_EXTENSION_LOWER}" in
# ## 3D models
# ## OpenSCAD only supports png image output, and ${IMAGE_CACHE_PATH}
# ## is hardcoded as jpeg. So we make a tempfile.png and just
# ## move/rename it to jpg. This works because image libraries are
# ## smart enough to handle it.
# csg|scad)
# openscad_image "${FILE_PATH}" && exit 6
# ;;
# 3mf|amf|dxf|off|stl)
# openscad_image <(echo "import(\"${FILE_PATH}\");") && exit 6
# ;;
# esac
}
handle_mime() {
local mimetype="${1}"
case "${mimetype}" in
## RTF and DOC
text/rtf|*msword)
## Preview as text conversion
## note: catdoc does not always work for .doc files
## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/
catdoc -- "${FILE_PATH}" && exit 5
exit 1;;
## DOCX, ePub, FB2 (using markdown)
## You might want to remove "|epub" and/or "|fb2" below if you have
## uncommented other methods to preview those formats
*wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml)
## Preview as markdown conversion
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
exit 1;;
## XLS
*ms-excel)
## Preview as csv conversion
## xls2csv comes with catdoc:
## http://www.wagner.pp.ru/~vitus/software/catdoc/
xls2csv -- "${FILE_PATH}" && exit 5
exit 1;;
## Text
text/* | */xml)
## Syntax highlight
if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then
exit 2
fi
if [[ "$( tput colors )" -ge 256 ]]; then
local pygmentize_format='terminal256'
local highlight_format='xterm256'
else
local pygmentize_format='terminal'
local highlight_format='ansi'
fi
env HIGHLIGHT_OPTIONS="${HIGHLIGHT_OPTIONS}" highlight \
--out-format="${highlight_format}" \
--force -- "${FILE_PATH}" && exit 5
env COLORTERM=8bit bat --color=always --style="plain" \
-- "${FILE_PATH}" && exit 5
pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}"\
-- "${FILE_PATH}" && exit 5
exit 2;;
## DjVu
image/vnd.djvu)
## Preview as text conversion (requires djvulibre)
djvutxt "${FILE_PATH}" | fmt -w "${PV_WIDTH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
exit 1;;
## Image
image/*)
## Preview as text conversion
# img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4
exiftool "${FILE_PATH}" && exit 5
exit 1;;
## Video and audio
video/* | audio/*)
mediainfo "${FILE_PATH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
exit 1;;
esac
}
handle_fallback() {
echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5
exit 1
}
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then
handle_image "${MIMETYPE}"
fi
handle_extension
handle_mime "${MIMETYPE}"
handle_fallback
exit 1

765
dot_config/ranger/rc.conf Normal file
View file

@ -0,0 +1,765 @@
# ===================================================================
# This file contains the default startup commands for ranger.
# To change them, it is recommended to create either /etc/ranger/rc.conf
# (system-wide) or ~/.config/ranger/rc.conf (per user) and add your custom
# commands there.
#
# If you copy this whole file there, you may want to set the environment
# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice.
#
# The purpose of this file is mainly to define keybindings and settings.
# For running more complex python code, please create a plugin in "plugins/" or
# a command in "commands.py".
#
# Each line is a command that will be run before the user interface
# is initialized. As a result, you can not use commands which rely
# on the UI such as :delete or :mark.
# ===================================================================
# ===================================================================
# == Options
# ===================================================================
# Which viewmode should be used? Possible values are:
# miller: Use miller columns which show multiple levels of the hierarchy
# multipane: Midnight-commander like multipane view showing all tabs next
# to each other
set viewmode miller
#set viewmode multipane
# How many columns are there, and what are their relative widths?
set column_ratios 1,3,4
# Which files should be hidden? (regular expression)
set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$
# Show hidden files? You can toggle this by typing 'zh'
set show_hidden false
# Ask for a confirmation when running the "delete" command?
# Valid values are "always", "never", "multiple" (default)
# With "multiple", ranger will ask only if you delete multiple files at once.
set confirm_on_delete multiple
# Use non-default path for file preview script?
# ranger ships with scope.sh, a script that calls external programs (see
# README.md for dependencies) to preview images, archives, etc.
#set preview_script ~/.config/ranger/scope.sh
# Use the external preview script or display simple plain text or image previews?
set use_preview_script true
# Automatically count files in the directory, even before entering them?
set automatically_count_files true
# Open all images in this directory when running certain image viewers
# like feh or sxiv? You can still open selected files by marking them.
set open_all_images true
# Be aware of version control systems and display information.
set vcs_aware false
# State of the four backends git, hg, bzr, svn. The possible states are
# disabled, local (only show local info), enabled (show local and remote
# information).
set vcs_backend_git enabled
set vcs_backend_hg disabled
set vcs_backend_bzr disabled
set vcs_backend_svn disabled
# Truncate the long commit messages to this length when shown in the statusbar.
set vcs_msg_length 50
# Use one of the supported image preview protocols
set preview_images false
# Set the preview image method. Supported methods:
#
# * w3m (default):
# Preview images in full color with the external command "w3mimgpreview"?
# This requires the console web browser "w3m" and a supported terminal.
# It has been successfully tested with "xterm" and "urxvt" without tmux.
#
# * iterm2:
# Preview images in full color using iTerm2 image previews
# (http://iterm2.com/images.html). This requires using iTerm2 compiled
# with image preview support.
#
# This feature relies on the dimensions of the terminal's font. By default, a
# width of 8 and height of 11 are used. To use other values, set the options
# iterm2_font_width and iterm2_font_height to the desired values.
#
# * terminology:
# Previews images in full color in the terminology terminal emulator.
# Supports a wide variety of formats, even vector graphics like svg.
#
# * urxvt:
# Preview images in full color using urxvt image backgrounds. This
# requires using urxvt compiled with pixbuf support.
#
# * urxvt-full:
# The same as urxvt but utilizing not only the preview pane but the
# whole terminal window.
#
# * kitty:
# Preview images in full color using kitty image protocol.
# Requires python PIL or pillow library.
# If ranger does not share the local filesystem with kitty
# the transfer method is changed to encode the whole image;
# while slower, this allows remote previews,
# for example during an ssh session.
# Tmux is unsupported.
#
# * ueberzug:
# Preview images in full color with the external command "ueberzug".
# Images are shown by using a child window.
# Only for users who run X11 in GNU/Linux.
set preview_images_method w3m
# Delay in seconds before displaying an image with the w3m method.
# Increase it in case of experiencing display corruption.
set w3m_delay 0.02
# Manually adjust the w3mimg offset when using a terminal which needs this
set w3m_offset 0
# Default iTerm2 font size (see: preview_images_method: iterm2)
set iterm2_font_width 8
set iterm2_font_height 11
# Use a unicode "..." character to mark cut-off filenames?
set unicode_ellipsis false
# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic).
# Requires the python-bidi pip package
set bidi_support false
# Show dotfiles in the bookmark preview box?
set show_hidden_bookmarks true
# Which colorscheme to use? These colorschemes are available by default:
# default, jungle, snow, solarized
set colorscheme default
# Preview files on the rightmost column?
# And collapse (shrink) the last column if there is nothing to preview?
set preview_files true
set preview_directories true
set collapse_preview true
# Wrap long lines in plain text previews?
set wrap_plaintext_previews false
# Save the console history on exit?
set save_console_history true
# Draw the status bar on top of the browser window (default: bottom)
set status_bar_on_top false
# Draw a progress bar in the status bar which displays the average state of all
# currently running tasks which support progress bars?
set draw_progress_bar_in_status_bar true
# Draw borders around columns? (separators, outline, both, or none)
# Separators are vertical lines between columns.
# Outline draws a box around all the columns.
# Both combines the two.
set draw_borders none
# Display the directory name in tabs?
set dirname_in_tabs false
# Enable the mouse support?
set mouse_enabled true
# Display the file size in the main column or status bar?
set display_size_in_main_column true
set display_size_in_status_bar true
# Display the free disk space in the status bar?
set display_free_space_in_status_bar true
# Display files tags in all columns or only in main column?
set display_tags_in_all_columns true
# Set a title for the window? Updates both `WM_NAME` and `WM_ICON_NAME`
set update_title false
# Set the tmux/screen window-name to "ranger"?
set update_tmux_title true
# Shorten the title if it gets long? The number defines how many
# directories are displayed at once, 0 turns off this feature.
set shorten_title 3
# Show hostname in titlebar?
set hostname_in_titlebar true
# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
set tilde_in_titlebar false
# How many directory-changes or console-commands should be kept in history?
set max_history_size 20
set max_console_history_size 50
# Try to keep so much space between the top/bottom border when scrolling:
set scroll_offset 8
# Flush the input after each key hit? (Noticeable when ranger lags)
set flushinput true
# Padding on the right when there's no preview?
# This allows you to click into the space to run the file.
set padding_right true
# Save bookmarks (used with mX and `X) instantly?
# This helps to synchronize bookmarks between multiple ranger
# instances but leads to *slight* performance loss.
# When false, bookmarks are saved when ranger is exited.
set autosave_bookmarks true
# Save the "`" bookmark to disk. This can be used to switch to the last
# directory by typing "``".
set save_backtick_bookmark true
# You can display the "real" cumulative size of directories by using the
# command :get_cumulative_size or typing "dc". The size is expensive to
# calculate and will not be updated automatically. You can choose
# to update it automatically though by turning on this option:
set autoupdate_cumulative_size false
# Turning this on makes sense for screen readers:
set show_cursor false
# One of: size, natural, basename, atime, ctime, mtime, type, random
set sort natural
# Additional sorting options
set sort_reverse false
set sort_case_insensitive true
set sort_directories_first true
set sort_unicode false
# Enable this if key combinations with the Alt Key don't work for you.
# (Especially on xterm)
set xterm_alt_key false
# Whether to include bookmarks in cd command
set cd_bookmarks true
# Changes case sensitivity for the cd command tab completion
set cd_tab_case sensitive
# Use fuzzy tab completion with the "cd" command. For example,
# ":cd /u/lo/b<tab>" expands to ":cd /usr/local/bin".
set cd_tab_fuzzy false
# Avoid previewing files larger than this size, in bytes. Use a value of 0 to
# disable this feature.
set preview_max_size 0
# The key hint lists up to this size have their sublists expanded.
# Otherwise the submaps are replaced with "...".
set hint_collapse_threshold 10
# Add the highlighted file to the path in the titlebar
set show_selection_in_titlebar true
# The delay that ranger idly waits for user input, in milliseconds, with a
# resolution of 100ms. Lower delay reduces lag between directory updates but
# increases CPU load.
set idle_delay 2000
# When the metadata manager module looks for metadata, should it only look for
# a ".metadata.json" file in the current directory, or do a deep search and
# check all directories above the current one as well?
set metadata_deep_search false
# Clear all existing filters when leaving a directory
set clear_filters_on_dir_change false
# Disable displaying line numbers in main column.
# Possible values: false, absolute, relative.
set line_numbers false
# When line_numbers=relative show the absolute line number in the
# current line.
set relative_current_zero false
# Start line numbers from 1 instead of 0
set one_indexed false
# Save tabs on exit
set save_tabs_on_exit false
# Enable scroll wrapping - moving down while on the last item will wrap around to
# the top and vice versa.
set wrap_scroll false
# Set the global_inode_type_filter to nothing. Possible options: d, f and l for
# directories, files and symlinks respectively.
set global_inode_type_filter
# This setting allows to freeze the list of files to save I/O bandwidth. It
# should be 'false' during start-up, but you can toggle it by pressing F.
set freeze_files false
# Print file sizes in bytes instead of the default human-readable format.
set size_in_bytes false
# Warn at startup if RANGER_LEVEL env var is greater than 0, in other words
# give a warning when you nest ranger in a subshell started by ranger.
# Special value "error" makes the warning more visible.
set nested_ranger_warning true
# ===================================================================
# == Local Options
# ===================================================================
# You can set local options that only affect a single directory.
# Examples:
# setlocal path=~/downloads sort mtime
# ===================================================================
# == Command Aliases in the Console
# ===================================================================
alias e edit
alias q quit
alias q! quit!
alias qa quitall
alias qa! quitall!
alias qall quitall
alias qall! quitall!
alias setl setlocal
alias filter scout -prts
alias find scout -aets
alias mark scout -mr
alias unmark scout -Mr
alias search scout -rs
alias search_inc scout -rts
alias travel scout -aefklst
# ===================================================================
# == Define keys for the browser
# ===================================================================
# Basic
map Q quitall
map q quit
copymap q ZZ ZQ
map R reload_cwd
map F set freeze_files!
map <C-r> reset
map <C-l> redraw_window
map <C-c> abort
map <esc> change_mode normal
map ~ set viewmode!
map i display_file
map <A-j> scroll_preview 1
map <A-k> scroll_preview -1
map ? help
map W display_log
map w taskview_open
map S shell $SHELL
map : console
map ; console
map ! console shell%space
map @ console -p6 shell %%s
map # console shell -p%space
map s console shell%space
map r chain draw_possible_programs; console open_with%space
map f console find%space
map cd console cd%space
map <C-p> chain console; eval fm.ui.console.history_move(-1)
# Change the line mode
map Mf linemode filename
map Mi linemode fileinfo
map Mm linemode mtime
map Mh linemode humanreadablemtime
map Mp linemode permissions
map Ms linemode sizemtime
map MH linemode sizehumanreadablemtime
map Mt linemode metatitle
# Tagging / Marking
map t tag_toggle
map ut tag_remove
map "<any> tag_toggle tag=%any
map <Space> mark_files toggle=True
map v mark_files all=True toggle=True
map uv mark_files all=True val=False
map V toggle_visual_mode
map uV toggle_visual_mode reverse=True
# For the nostalgics: Midnight Commander bindings
map <F1> help
map <F2> rename_append
map <F3> display_file
map <F4> edit
map <F5> copy
map <F6> cut
map <F7> console mkdir%space
map <F8> console delete
#map <F8> console trash
map <F10> exit
# In case you work on a keyboard with dvorak layout
map <UP> move up=1
map <DOWN> move down=1
map <LEFT> move left=1
map <RIGHT> move right=1
map <HOME> move to=0
map <END> move to=-1
map <PAGEDOWN> move down=1 pages=True
map <PAGEUP> move up=1 pages=True
map <CR> move right=1
#map <DELETE> console delete
map <INSERT> console touch%space
# VIM-like
copymap <UP> k
copymap <DOWN> j
copymap <LEFT> h
copymap <RIGHT> l
copymap <HOME> gg
copymap <END> G
copymap <PAGEDOWN> <C-F>
copymap <PAGEUP> <C-B>
map J move down=0.5 pages=True
map K move up=0.5 pages=True
copymap J <C-D>
copymap K <C-U>
# Jumping around
map H history_go -1
map L history_go 1
map ] move_parent 1
map [ move_parent -1
map } traverse
map { traverse_backwards
map ) jump_non
map gh cd ~
map ge cd /etc
map gu cd /usr
map gd cd /dev
map gl cd -r .
map gL cd -r %f
map go cd /opt
map gv cd /var
map gm cd /media
map gi eval fm.cd('/run/media/' + os.getenv('USER'))
map gM cd /mnt
map gs cd /srv
map gp cd /tmp
map gr cd /
map gR eval fm.cd(ranger.RANGERDIR)
map g/ cd /
map g? cd /usr/share/doc/ranger
# External Programs
map E edit
map du shell -p du --max-depth=1 -h --apparent-size
map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh
map yp yank path
map yd yank dir
map yn yank name
map y. yank name_without_extension
# Filesystem Operations
map = chmod
map cw console rename%space
map a rename_append
map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"))
map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7)
map pp paste
map po paste overwrite=True
map pP paste append=True
map pO paste overwrite=True append=True
map pl paste_symlink relative=False
map pL paste_symlink relative=True
map phl paste_hardlink
map pht paste_hardlinked_subtree
map pd console paste dest=
map p`<any> paste dest=%any_path
map p'<any> paste dest=%any_path
map dD console delete
map dT console trash
map dd cut
map ud uncut
map da cut mode=add
map dr cut mode=remove
map dt cut mode=toggle
map yy copy
map uy uncut
map ya copy mode=add
map yr copy mode=remove
map yt copy mode=toggle
# Temporary workarounds
map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier)
map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier)
map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier)
map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier)
map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier)
map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier)
map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier)
map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier)
# Searching
map / console search%space
map n search_next
map N search_next forward=False
map ct search_next order=tag
map cs search_next order=size
map ci search_next order=mimetype
map cc search_next order=ctime
map cm search_next order=mtime
map ca search_next order=atime
# Tabs
map <C-n> tab_new
map <C-w> tab_close
map <TAB> tab_move 1
map <S-TAB> tab_move -1
map <A-Right> tab_move 1
map <A-Left> tab_move -1
map gt tab_move 1
map gT tab_move -1
map gn tab_new
map gc tab_close
map uq tab_restore
map <a-1> tab_open 1
map <a-2> tab_open 2
map <a-3> tab_open 3
map <a-4> tab_open 4
map <a-5> tab_open 5
map <a-6> tab_open 6
map <a-7> tab_open 7
map <a-8> tab_open 8
map <a-9> tab_open 9
map <a-r> tab_shift 1
map <a-l> tab_shift -1
# Sorting
map or set sort_reverse!
map oz set sort=random
map os chain set sort=size; set sort_reverse=False
map ob chain set sort=basename; set sort_reverse=False
map on chain set sort=natural; set sort_reverse=False
map om chain set sort=mtime; set sort_reverse=False
map oc chain set sort=ctime; set sort_reverse=False
map oa chain set sort=atime; set sort_reverse=False
map ot chain set sort=type; set sort_reverse=False
map oe chain set sort=extension; set sort_reverse=False
map oS chain set sort=size; set sort_reverse=True
map oB chain set sort=basename; set sort_reverse=True
map oN chain set sort=natural; set sort_reverse=True
map oM chain set sort=mtime; set sort_reverse=True
map oC chain set sort=ctime; set sort_reverse=True
map oA chain set sort=atime; set sort_reverse=True
map oT chain set sort=type; set sort_reverse=True
map oE chain set sort=extension; set sort_reverse=True
map dc get_cumulative_size
# Settings
map zc set collapse_preview!
map zd set sort_directories_first!
map zh set show_hidden!
map <C-h> set show_hidden!
copymap <C-h> <backspace>
copymap <backspace> <backspace2>
map zI set flushinput!
map zi set preview_images!
map zm set mouse_enabled!
map zp set preview_files!
map zP set preview_directories!
map zs set sort_case_insensitive!
map zu set autoupdate_cumulative_size!
map zv set use_preview_script!
map zf console filter%space
copymap zf zz
# Filter stack
map .d filter_stack add type d
map .f filter_stack add type f
map .l filter_stack add type l
map .m console filter_stack add mime%space
map .n console filter_stack add name%space
map .# console filter_stack add hash%space
map ." filter_stack add duplicate
map .' filter_stack add unique
map .| filter_stack add or
map .& filter_stack add and
map .! filter_stack add not
map .r filter_stack rotate
map .c filter_stack clear
map .* filter_stack decompose
map .p filter_stack pop
map .. filter_stack show
# Bookmarks
map `<any> enter_bookmark %any
map '<any> enter_bookmark %any
map m<any> set_bookmark %any
map um<any> unset_bookmark %any
map m<bg> draw_bookmarks
copymap m<bg> um<bg> `<bg> '<bg>
# Generate all the chmod bindings with some python help:
eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg))
# ===================================================================
# == Define keys for the console
# ===================================================================
# Note: Unmapped keys are passed directly to the console.
# Basic
cmap <tab> eval fm.ui.console.tab()
cmap <s-tab> eval fm.ui.console.tab(-1)
cmap <ESC> eval fm.ui.console.close()
cmap <CR> eval fm.ui.console.execute()
cmap <C-l> redraw_window
copycmap <ESC> <C-c>
copycmap <CR> <C-j>
# Move around
cmap <up> eval fm.ui.console.history_move(-1)
cmap <down> eval fm.ui.console.history_move(1)
cmap <left> eval fm.ui.console.move(left=1)
cmap <right> eval fm.ui.console.move(right=1)
cmap <home> eval fm.ui.console.move(right=0, absolute=True)
cmap <end> eval fm.ui.console.move(right=-1, absolute=True)
cmap <a-b> eval fm.ui.console.move_word(left=1)
cmap <a-f> eval fm.ui.console.move_word(right=1)
copycmap <a-b> <a-left>
copycmap <a-f> <a-right>
# Line Editing
cmap <backspace> eval fm.ui.console.delete(-1)
cmap <delete> eval fm.ui.console.delete(0)
cmap <C-w> eval fm.ui.console.delete_word()
cmap <A-d> eval fm.ui.console.delete_word(backward=False)
cmap <C-k> eval fm.ui.console.delete_rest(1)
cmap <C-u> eval fm.ui.console.delete_rest(-1)
cmap <C-y> eval fm.ui.console.paste()
# And of course the emacs way
copycmap <ESC> <C-g>
copycmap <up> <C-p>
copycmap <down> <C-n>
copycmap <left> <C-b>
copycmap <right> <C-f>
copycmap <home> <C-a>
copycmap <end> <C-e>
copycmap <delete> <C-d>
copycmap <backspace> <C-h>
# Note: There are multiple ways to express backspaces. <backspace> (code 263)
# and <backspace2> (code 127). To be sure, use both.
copycmap <backspace> <backspace2>
# This special expression allows typing in numerals:
cmap <allow_quantifiers> false
# ===================================================================
# == Pager Keybindings
# ===================================================================
# Movement
pmap <down> pager_move down=1
pmap <up> pager_move up=1
pmap <left> pager_move left=4
pmap <right> pager_move right=4
pmap <home> pager_move to=0
pmap <end> pager_move to=-1
pmap <pagedown> pager_move down=1.0 pages=True
pmap <pageup> pager_move up=1.0 pages=True
pmap <C-d> pager_move down=0.5 pages=True
pmap <C-u> pager_move up=0.5 pages=True
copypmap <UP> k <C-p>
copypmap <DOWN> j <C-n> <CR>
copypmap <LEFT> h
copypmap <RIGHT> l
copypmap <HOME> g
copypmap <END> G
copypmap <C-d> d
copypmap <C-u> u
copypmap <PAGEDOWN> n f <C-F> <Space>
copypmap <PAGEUP> p b <C-B>
# Basic
pmap <C-l> redraw_window
pmap <ESC> pager_close
copypmap <ESC> q Q i <F3>
pmap E edit_file
# ===================================================================
# == Taskview Keybindings
# ===================================================================
# Movement
tmap <up> taskview_move up=1
tmap <down> taskview_move down=1
tmap <home> taskview_move to=0
tmap <end> taskview_move to=-1
tmap <pagedown> taskview_move down=1.0 pages=True
tmap <pageup> taskview_move up=1.0 pages=True
tmap <C-d> taskview_move down=0.5 pages=True
tmap <C-u> taskview_move up=0.5 pages=True
copytmap <UP> k <C-p>
copytmap <DOWN> j <C-n> <CR>
copytmap <HOME> g
copytmap <END> G
copytmap <C-u> u
copytmap <PAGEDOWN> n f <C-F> <Space>
copytmap <PAGEUP> p b <C-B>
# Changing priority and deleting tasks
tmap J eval -q fm.ui.taskview.task_move(-1)
tmap K eval -q fm.ui.taskview.task_move(0)
tmap dd eval -q fm.ui.taskview.task_remove()
tmap <pagedown> eval -q fm.ui.taskview.task_move(-1)
tmap <pageup> eval -q fm.ui.taskview.task_move(0)
tmap <delete> eval -q fm.ui.taskview.task_remove()
# Basic
tmap <C-l> redraw_window
tmap <ESC> taskview_close
copytmap <ESC> q Q w <C-c>
# ===================================================================
# old tweaks
map % shell open -R %f
set preview_images true
set preview_images_method iterm2

View file

@ -0,0 +1,284 @@
# vim: ft=cfg
#
# This is the configuration file of "rifle", ranger's file executor/opener.
# Each line consists of conditions and a command. For each line the conditions
# are checked and if they are met, the respective command is run.
#
# Syntax:
# <condition1> , <condition2> , ... = command
#
# The command can contain these environment variables:
# $1-$9 | The n-th selected file
# $@ | All selected files
#
# If you use the special command "ask", rifle will ask you what program to run.
#
# Prefixing a condition with "!" will negate its result.
# These conditions are currently supported:
# match <regexp> | The regexp matches $1
# ext <regexp> | The regexp matches the extension of $1
# mime <regexp> | The regexp matches the mime type of $1
# name <regexp> | The regexp matches the basename of $1
# path <regexp> | The regexp matches the absolute path of $1
# has <program> | The program is installed (i.e. located in $PATH)
# env <variable> | The environment variable "variable" is non-empty
# file | $1 is a file
# directory | $1 is a directory
# number <n> | change the number of this command to n
# terminal | stdin, stderr and stdout are connected to a terminal
# X | A graphical environment is available (darwin, Xorg, or Wayland)
#
# There are also pseudo-conditions which have a "side effect":
# flag <flags> | Change how the program is run. See below.
# label <label> | Assign a label or name to the command so it can
# | be started with :open_with <label> in ranger
# | or `rifle -p <label>` in the standalone executable.
# else | Always true.
#
# Flags are single characters which slightly transform the command:
# f | Fork the program, make it run in the background.
# | New command = setsid $command >& /dev/null &
# r | Execute the command with root permissions
# | New command = sudo $command
# t | Run the program in a new terminal. If $TERMCMD is not defined,
# | rifle will attempt to extract it from $TERM.
# | New command = $TERMCMD -e $command
# Note: The "New command" serves only as an illustration, the exact
# implementation may differ.
# Note: When using rifle in ranger, there is an additional flag "c" for
# only running the current file even if you have marked multiple files.
#-------------------------------------------
# Websites
#-------------------------------------------
# Rarely installed browsers get higher priority; It is assumed that if you
# install a rare browser, you probably use it. Firefox/konqueror/w3m on the
# other hand are often only installed as fallback browsers.
ext x?html?, has surf, X, flag f = surf -- file://"$1"
ext x?html?, has vimprobable, X, flag f = vimprobable -- "$@"
ext x?html?, has vimprobable2, X, flag f = vimprobable2 -- "$@"
ext x?html?, has qutebrowser, X, flag f = qutebrowser -- "$@"
ext x?html?, has dwb, X, flag f = dwb -- "$@"
ext x?html?, has jumanji, X, flag f = jumanji -- "$@"
ext x?html?, has luakit, X, flag f = luakit -- "$@"
ext x?html?, has uzbl, X, flag f = uzbl -- "$@"
ext x?html?, has uzbl-tabbed, X, flag f = uzbl-tabbed -- "$@"
ext x?html?, has uzbl-browser, X, flag f = uzbl-browser -- "$@"
ext x?html?, has uzbl-core, X, flag f = uzbl-core -- "$@"
ext x?html?, has midori, X, flag f = midori -- "$@"
ext x?html?, has opera, X, flag f = opera -- "$@"
ext x?html?, has firefox, X, flag f = firefox -- "$@"
ext x?html?, has seamonkey, X, flag f = seamonkey -- "$@"
ext x?html?, has iceweasel, X, flag f = iceweasel -- "$@"
ext x?html?, has chromium-browser, X, flag f = chromium-browser -- "$@"
ext x?html?, has chromium, X, flag f = chromium -- "$@"
ext x?html?, has google-chrome, X, flag f = google-chrome -- "$@"
ext x?html?, has epiphany, X, flag f = epiphany -- "$@"
ext x?html?, has konqueror, X, flag f = konqueror -- "$@"
ext x?html?, has elinks, terminal = elinks "$@"
ext x?html?, has links2, terminal = links2 "$@"
ext x?html?, has links, terminal = links "$@"
ext x?html?, has lynx, terminal = lynx -- "$@"
ext x?html?, has w3m, terminal = w3m "$@"
#-------------------------------------------
# Misc
#-------------------------------------------
# Define the "editor" for text files as first action
mime ^text, label editor = ${VISUAL:-$EDITOR} -- "$@"
mime ^text, label pager = "$PAGER" -- "$@"
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
!mime ^text, label pager, ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@"
ext 1 = man "$1"
ext s[wmf]c, has zsnes, X = zsnes "$1"
ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1"
ext nes, has fceux, X = fceux "$1"
ext exe = wine "$1"
name ^[mM]akefile$ = make
#--------------------------------------------
# Scripts
#-------------------------------------------
ext py = python -- "$1"
ext pl = perl -- "$1"
ext rb = ruby -- "$1"
ext js = node -- "$1"
ext sh = sh -- "$1"
ext php = php -- "$1"
#--------------------------------------------
# Audio without X
#-------------------------------------------
mime ^audio|ogg$, terminal, has mpv = mpv -- "$@"
mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@"
mime ^audio|ogg$, terminal, has mplayer = mplayer -- "$@"
ext midi?, terminal, has wildmidi = wildmidi -- "$@"
#--------------------------------------------
# Video/Audio with a GUI
#-------------------------------------------
mime ^video|audio, has gmplayer, X, flag f = gmplayer -- "$@"
mime ^video|audio, has smplayer, X, flag f = smplayer "$@"
mime ^video, has mpv, X, flag f = mpv -- "$@"
mime ^video, has mpv, X, flag f = mpv --fs -- "$@"
mime ^video, has mplayer2, X, flag f = mplayer2 -- "$@"
mime ^video, has mplayer2, X, flag f = mplayer2 -fs -- "$@"
mime ^video, has mplayer, X, flag f = mplayer -- "$@"
mime ^video, has mplayer, X, flag f = mplayer -fs -- "$@"
mime ^video|audio, has vlc, X, flag f = vlc -- "$@"
mime ^video|audio, has totem, X, flag f = totem -- "$@"
mime ^video|audio, has totem, X, flag f = totem --fullscreen -- "$@"
#--------------------------------------------
# Video without X
#-------------------------------------------
mime ^video, terminal, !X, has mpv = mpv -- "$@"
mime ^video, terminal, !X, has mplayer2 = mplayer2 -- "$@"
mime ^video, terminal, !X, has mplayer = mplayer -- "$@"
#-------------------------------------------
# Documents
#-------------------------------------------
ext pdf, has llpp, X, flag f = llpp "$@"
ext pdf, has zathura, X, flag f = zathura -- "$@"
ext pdf, has mupdf, X, flag f = mupdf "$@"
ext pdf, has mupdf-x11,X, flag f = mupdf-x11 "$@"
ext pdf, has apvlv, X, flag f = apvlv -- "$@"
ext pdf, has xpdf, X, flag f = xpdf -- "$@"
ext pdf, has evince, X, flag f = evince -- "$@"
ext pdf, has atril, X, flag f = atril -- "$@"
ext pdf, has okular, X, flag f = okular -- "$@"
ext pdf, has epdfview, X, flag f = epdfview -- "$@"
ext pdf, has qpdfview, X, flag f = qpdfview "$@"
ext pdf, has open, X, flag f = open "$@"
ext docx?, has catdoc, terminal = catdoc -- "$@" | "$PAGER"
ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric, X, flag f = gnumeric -- "$@"
ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread, X, flag f = kspread -- "$@"
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@"
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice, X, flag f = soffice "$@"
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice, X, flag f = ooffice "$@"
ext djvu, has zathura,X, flag f = zathura -- "$@"
ext djvu, has evince, X, flag f = evince -- "$@"
ext djvu, has atril, X, flag f = atril -- "$@"
ext djvu, has djview, X, flag f = djview -- "$@"
ext epub, has ebook-viewer, X, flag f = ebook-viewer -- "$@"
ext epub, has zathura, X, flag f = zathura -- "$@"
ext epub, has mupdf, X, flag f = mupdf -- "$@"
ext mobi, has ebook-viewer, X, flag f = ebook-viewer -- "$@"
ext cbr, has zathura, X, flag f = zathura -- "$@"
ext cbz, has zathura, X, flag f = zathura -- "$@"
#-------------------------------------------
# Images
#-------------------------------------------
mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@"
mime ^image/svg, has display, X, flag f = display -- "$@"
mime ^image, has imv, X, flag f = imv -- "$@"
mime ^image, has pqiv, X, flag f = pqiv -- "$@"
mime ^image, has sxiv, X, flag f = sxiv -- "$@"
mime ^image, has feh, X, flag f = feh -- "$@"
mime ^image, has mirage, X, flag f = mirage -- "$@"
mime ^image, has ristretto, X, flag f = ristretto "$@"
mime ^image, has eog, X, flag f = eog -- "$@"
mime ^image, has eom, X, flag f = eom -- "$@"
mime ^image, has nomacs, X, flag f = nomacs -- "$@"
mime ^image, has geeqie, X, flag f = geeqie -- "$@"
mime ^image, has gpicview, X, flag f = gpicview -- "$@"
mime ^image, has gwenview, X, flag f = gwenview -- "$@"
mime ^image, has gimp, X, flag f = gimp -- "$@"
ext xcf, X, flag f = gimp -- "$@"
#-------------------------------------------
# Archives
#-------------------------------------------
# avoid password prompt by providing empty password
ext 7z, has 7z = 7z -p l "$@" | "$PAGER"
# This requires atool
ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has atool = atool --list --each -- "$@" | "$PAGER"
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --list --each -- "$@" | "$PAGER"
ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has atool = atool --extract --each -- "$@"
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --extract --each -- "$@"
# Listing and extracting archives without atool:
ext tar|gz|bz2|xz, has tar = tar vvtf "$1" | "$PAGER"
ext tar|gz|bz2|xz, has tar = for file in "$@"; do tar vvxf "$file"; done
ext bz2, has bzip2 = for file in "$@"; do bzip2 -dk "$file"; done
ext zip, has unzip = unzip -l "$1" | less
ext zip, has unzip = for file in "$@"; do unzip -d "${file%.*}" "$file"; done
ext ace, has unace = unace l "$1" | less
ext ace, has unace = for file in "$@"; do unace e "$file"; done
ext rar, has unrar = unrar l "$1" | less
ext rar, has unrar = for file in "$@"; do unrar x "$file"; done
#-------------------------------------------
# Fonts
#-------------------------------------------
mime ^font, has fontforge, X, flag f = fontforge "$@"
#-------------------------------------------
# Flag t fallback terminals
#-------------------------------------------
# Rarely installed terminal emulators get higher priority; It is assumed that
# if you install a rare terminal emulator, you probably use it.
# gnome-terminal/konsole/xterm on the other hand are often installed as part of
# a desktop environment or as fallback terminal emulators.
mime ^ranger/x-terminal-emulator, has terminology = terminology -e "$@"
mime ^ranger/x-terminal-emulator, has kitty = kitty -- "$@"
mime ^ranger/x-terminal-emulator, has alacritty = alacritty -e "$@"
mime ^ranger/x-terminal-emulator, has sakura = sakura -e "$@"
mime ^ranger/x-terminal-emulator, has lilyterm = lilyterm -e "$@"
#mime ^ranger/x-terminal-emulator, has cool-retro-term = cool-retro-term -e "$@"
mime ^ranger/x-terminal-emulator, has termite = termite -x '"$@"'
#mime ^ranger/x-terminal-emulator, has yakuake = yakuake -e "$@"
mime ^ranger/x-terminal-emulator, has guake = guake -ne "$@"
mime ^ranger/x-terminal-emulator, has tilda = tilda -c "$@"
mime ^ranger/x-terminal-emulator, has st = st -e "$@"
mime ^ranger/x-terminal-emulator, has terminator = terminator -x "$@"
mime ^ranger/x-terminal-emulator, has urxvt = urxvt -e "$@"
mime ^ranger/x-terminal-emulator, has pantheon-terminal = pantheon-terminal -e "$@"
mime ^ranger/x-terminal-emulator, has lxterminal = lxterminal -e "$@"
mime ^ranger/x-terminal-emulator, has mate-terminal = mate-terminal -x "$@"
mime ^ranger/x-terminal-emulator, has xfce4-terminal = xfce4-terminal -x "$@"
mime ^ranger/x-terminal-emulator, has konsole = konsole -e "$@"
mime ^ranger/x-terminal-emulator, has gnome-terminal = gnome-terminal -- "$@"
mime ^ranger/x-terminal-emulator, has xterm = xterm -e "$@"
#-------------------------------------------
# Misc
#-------------------------------------------
label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1"
label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1"
label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1"
label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1"
#-------------------------------------------
# Generic file openers
#-------------------------------------------
label open, has xdg-open = xdg-open -- "$@"
label open, has open = open -- "$@"
# Define the editor for non-text files + pager as last action
!mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ask
label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
label pager, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@"
######################################################################
# The actions below are left so low down in this file on purpose, so #
# they are never triggered accidentally. #
######################################################################
# Execute a file as program/script.
mime application/x-executable = "$1"
# Move the file to trash using trash-cli.
label trash, has trash-put = trash-put -- "$@"
label trash = mkdir -p -- ${XDG_DATA_DIR:-$HOME/.ranger}/ranger-trash; mv -- "$@" ${XDG_DATA_DIR:-$HOME/.ranger}/ranger-trash

10
dot_config/redshift.conf Normal file
View file

@ -0,0 +1,10 @@
[redshift]
location-provider=manual
temp-day=6500
temp-night=4500
gamma=0.8
[manual]
lat=47.06
lon=15.45

View file

@ -0,0 +1,21 @@
/* colors */
* {
al: #00000000;
bg: #2A212CFF;
bga: #0a0a0aFF;
fg: #FF80BFFF;
ac: #fdd835FF;
se: #fdd8351A;
drac-bgd: #2A212C;
drac-cur: #544158;
drac-fgd: #F8F8F2;
drac-cmt: #9F70A9;
drac-cya: #80FFEA;
drac-grn: #8AFF80;
drac-ora: #FFCA80;
drac-pnk: #FF80BF;
drac-pur: #9580FF;
drac-red: #FF9580;
drac-yel: #FFFF80;
}

129
dot_config/rofi/config.rasi Normal file
View file

@ -0,0 +1,129 @@
@import "colors.rasi"
* {
font: "Jetbrains Mono NerdFont 12";
foreground: @drac-fgd;
background: @drac-bgd;
active-background: @drac-pnk;
urgent-background: @drac-red;
selected-background: @active-background;
selected-urgent-background: @urgent-background;
selected-active-background: @active-background;
separatorcolor: @active-background;
bordercolor: @drac-cmt;
}
#window {
background-color: @background;
border-color: @bordercolor;
border: 2;
padding: 0;
}
#mainbox {
border: 0;
padding: 0;
}
#message {
border: 1px dash 0px 0px ;
border-color: @separatorcolor;
padding: 1px ;
}
#textbox {
text-color: @foreground;
}
#listview {
fixed-height: 0;
border: 2px 0px 0px;
border-color: @bordercolor;
spacing: 2px;
scrollbar: false;
padding: 0px 0px 0px ;
}
#element {
border: 0;
padding: 0px 10px;
}
#element.normal.normal {
background-color: @background;
text-color: @foreground;
}
#element.normal.urgent {
background-color: @urgent-background;
text-color: @urgent-foreground;
}
#element.normal.active {
background-color: @active-background;
text-color: @background;
}
#element.selected.normal {
background-color: @selected-background;
text-color: @foreground;
}
#element.selected.urgent {
background-color: @selected-urgent-background;
text-color: @foreground;
}
#element.selected.active {
background-color: @selected-active-background;
text-color: @background;
}
#element.alternate.normal {
background-color: @background;
text-color: @foreground;
}
#element.alternate.urgent {
background-color: @urgent-background;
text-color: @foreground;
}
#element.alternate.active {
background-color: @active-background;
text-color: @foreground;
}
#scrollbar {
width: 2px ;
border: 0;
handle-width: 8px ;
padding: 0;
}
#sidebar {
border: 2px dash 0px 0px ;
border-color: @separatorcolor;
}
#button.selected {
background-color: @selected-background;
text-color: @foreground;
}
#inputbar {
spacing: 0;
text-color: @foreground;
padding: 1px ;
}
#case-indicator {
spacing: 0;
text-color: @foreground;
}
#entry {
spacing: 0;
text-color: @drac-cya;
}
#prompt {
spacing: 0;
text-color: @drac-grn;
}
#inputbar {
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
}
#textbox-prompt-colon {
expand: false;
str: ":";
margin: 0px 0.3em 0em 0em ;
text-color: @drac-grn;
}

View file

@ -0,0 +1,25 @@
/* Confirm Dialog */
@import "colors.rasi"
* {
background-color: @bga;
text-color: @fg;
font: "Terminus 9";
}
window {
width: 225px;
padding: 25px;
border: 0px;
border-radius: 0px;
border-color: @ac;
location: center;
y-offset: -2em;
}
entry {
expand: true;
text-color: @ac;
}

View file

@ -0,0 +1,24 @@
/* Confirm Dialog */
@import "colors.rasi"
* {
background-color: @bga;
text-color: @fg;
font: "Terminus 9";
}
window {
width: 320px;
padding: 25px;
border: 0px;
border-radius: 0px;
border-color: @ac;
location: center;
y-offset: -2em;
}
entry {
expand: true;
text-color: @ac;
}

View file

@ -0,0 +1,113 @@
configuration {
font: "JetBrainsMono Nerd Font 10";
show-icons: true;
display-drun: "";
drun-display-format: "{name}";
disable-history: false;
fullscreen: false;
hide-scrollbar: true;
sidebar-mode: false;
}
@import "colors.rasi"
window {
background-color: @bg;
text-color: @fg;
border: 0px;
border-color: @ac;
border-radius: 0px;
width: 300px;
location: center;
x-offset: 0;
y-offset: 0;
}
prompt {
enabled: true;
padding: 0px 0px 0px 5px;
background-color: @al;
text-color: @fg;
}
textbox-prompt-colon {
padding: 0px 0px 0px 2px;
background-color: @al;
text-color: @ac;
expand: false;
str: "";
font: "JetBrainsMono Nerd Font 10";
}
entry {
background-color: @al;
text-color: @fg;
placeholder-color: @fg;
expand: true;
horizontal-align: 0;
placeholder: "Search...";
padding: 0px;
blink: true;
}
inputbar {
children: [ textbox-prompt-colon, prompt ];
background-color: @bga;
text-color: @fg;
expand: false;
border: 0px 0px 0px 0px;
border-radius: 0px;
border-color: @ac;
margin: 0px;
padding: 12px;
}
listview {
background-color: @al;
padding: 0px;
columns: 1;
lines: 5;
spacing: 0px;
cycle: true;
dynamic: true;
layout: vertical;
}
mainbox {
background-color: @al;
border: 0px;
border-radius: 0px;
border-color: @ac;
children: [ inputbar, listview ];
spacing: 0px;
padding: 0px;
}
element {
background-color: @al;
text-color: @fg;
orientation: horizontal;
border-radius: 0px;
padding: 8px 8px 8px -15px;
}
element-icon {
size: 24px;
border: 0px;
}
element-text {
expand: true;
horizontal-align: 0;
vertical-align: 0.5;
margin: 0px 2.5px 0px 2.5px;
}
element selected {
background-color: @se;
text-color: @fg;
border: 0px 0px 0px 2px;
border-radius: 0px;
border-color: @ac;
}

View file

@ -0,0 +1,135 @@
#!/usr/bin/env bash
# vim:fileencoding=utf-8:foldmethod=marker
PLUGIN_DIR="$HOME/.config/sketchybar/plugins"
## bar appearance {{{
sketchybar --bar \
height=32 \
blur_radius=10 \
position=top \
padding_left=0 \
padding_right=4 \
# colors are managed seperately in the colordummy,
# which listens to theme_changed events,
# to swap between Catppuccin Mocha and Latte
sketchybar -m --add event theme_changed AppleInterfaceThemeChangedNotification
sketchybar \
--add item colordummy left \
--set colordummy \
icon.drawing=off \
label.drawing=off \
script="$PLUGIN_DIR/colordummy.sh" \
--subscribe colordummy theme_changed
##### Changing Defaults #####
sketchybar --default \
updates=when_shown \
drawing=on \
icon.font="Symbols Nerd Font:2048-em:18.0" \
label.font="Inter:Regular:16.0" \
label.padding_left=1 \
label.padding_right=1 \
icon.padding_left=8 \
icon.padding_right=8
# }}}
## left side of the bar {{{
# spaces for yabai wm
SPACE_ICONS=(
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
)
for i in "${!SPACE_ICONS[@]}"
do
if [[ $i == 0 ]]; then
lbgp=0
else
lbgp=1
fi
sketchybar \
--add space "space.$i" left \
--set "space.$i" associated_space=$(($i+1)) \
icon="${SPACE_ICONS[i]}" \
icon.padding_left=8 \
icon.padding_right=8 \
background.padding_left="$lbgp" \
background.padding_right=1 \
background.height=32 \
label.drawing=off \
script="$PLUGIN_DIR/space.sh" \
click_script="yabai -m space --focus $(($i+1))"
done
# window title
sketchybar \
--add item window_title left \
--set window_title \
background.padding_left=8 \
script="$PLUGIN_DIR/window_title.sh" \
--subscribe window_title front_app_switched
## }}}
## middle of the bar {{{
# Apple Music Status
sketchybar -m --add event song_update com.apple.Music.playerInfo
sketchybar \
--add item music center \
--set music \
label.font="Victor Mono:Bold Italic:16.0" \
script="$PLUGIN_DIR/music.sh" \
--subscribe music song_update
# }}}
## right side of the bar {{{
# this starts at the rightmost item
# items should be self explanatory by their name, and are separated by a blank line
sketchybar \
\
--add item clock right \
--set clock \
script="$PLUGIN_DIR/clock.sh" \
update_freq=10 \
\
--add item date right \
--set date \
script="$PLUGIN_DIR/ddate.sh" \
update_freq=60 \
\
--add item mullvad right \
--set mullvad \
script="$PLUGIN_DIR/mullvad.sh" \
update_freq=10 \
\
--add item battery right \
--set battery \
update_freq=30 \
script="$PLUGIN_DIR/battery.sh" \
--subscribe battery system_woke \
\
--add item sound right \
--set sound \
script="$PLUGIN_DIR/sound.sh" \
update_freq=5 \
\
--add item mail right \
--set mail \
script="$PLUGIN_DIR/mailIndicator.sh" \
update_freq=10 \
\
--add item tasks right \
--set tasks \
script="$PLUGIN_DIR/tasks.sh" \
update_freq=10
##### fin #####
sketchybar --update

View file

@ -0,0 +1,26 @@
#!/usr/bin/env bash
PERCENTAGE=$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1)
CHARGING=$(pmset -g batt | grep 'AC Power')
if [ "$PERCENTAGE" = "" ]; then
exit 0
fi
case ${PERCENTAGE} in
9[0-9]|100) ICON=""
;;
[6-8][0-9]) ICON=""
;;
[3-5][0-9]) ICON=""
;;
[1-2][0-9]) ICON=""
;;
*) ICON=""
esac
if [[ "$CHARGING" != "" ]]; then
ICON="⚡"
fi
sketchybar --set battery icon="$ICON" label="${PERCENTAGE}%"

View file

@ -0,0 +1,3 @@
#!/usr/bin/env sh
sketchybar --set "$NAME" label="$(date '+%H:%M')" icon=" "

View file

@ -0,0 +1,150 @@
#!/usr/bin/env bash
# check wether or not macOS is in dark mode
if [[ $(defaults read -g AppleInterfaceStyle) != 'Dark' ]]; then
THEME="light"
else
THEME="dark"
fi
if [[ $THEME == 'dark' ]]; then
ROSEWATER="f5e0dc"
FLAMINGO="f2cdcd"
PINK="f5c2e7"
MAUVE="cba6f7"
RED="f38ba8"
MAROON="eba0ac"
PEACH="fab387"
YELLOW="f9e2af"
GREEN="a6e3a1"
TEAL="94e2d5"
SKY="89dceb"
SAPPHIRE="74c7ec"
BLUE="89b4fa"
LAVENDER="b4befe"
TEXT="cdd6f4"
SUBTEXT1="bac2de"
SUBTEXT0="a6adc8"
OVERLAY2="9399b2"
OVERLAY1="7f849c"
OVERLAY0="6c7086"
SURFACE2="585b70"
SURFACE1="45475a"
SURFACE0="313244"
BASE="1e1e2e"
MANTLE="181825"
CRUST="11111b"
else
ROSEWATER="dc8a78"
FLAMINGO="dd7878"
PINK="ea76cb"
MAUVE="8839ef"
RED="d20f39"
MAROON="e64553"
PEACH="fe640b"
YELLOW="df8e1d"
GREEN="40a02b"
TEAL="179299"
SKY="04a5e5"
SAPPHIRE="209fb5"
BLUE="1e66f5"
LAVENDER="7287fd"
TEXT="4c4f69"
SUBTEXT1="5c5f77"
SUBTEXT0="6c6f85"
OVERLAY2="7c7f93"
OVERLAY1="8c8fa1"
OVERLAY0="9ca0b0"
SURFACE2="acb0be"
SURFACE1="bcc0cc"
SURFACE0="ccd0da"
CRUST="dce0e8"
MANTLE="e6e9ef"
BASE="eff1f5"
fi
function color() {
alpha=${2:-255}
color="$1"
case $1 in
rosewater) color=$ROSEWATER ;;
flamingo) color=$FLAMINGO ;;
pink) color=$PINK ;;
mauve) color=$MAUVE ;;
red) color=$RED ;;
maroon) color=$MAROON ;;
peach) color=$PEACH ;;
yellow) color=$YELLOW ;;
green) color=$GREEN ;;
teal) color=$TEAL ;;
sky) color=$SKY ;;
sapphire) color=$SAPPHIRE ;;
blue) color=$BLUE ;;
lavender) color=$LAVENDER ;;
text) color=$TEXT ;;
subtext1) color=$SUBTEXT1 ;;
subtext0) color=$SUBTEXT0 ;;
overlay2) color=$OVERLAY2 ;;
overlay1) color=$OVERLAY1 ;;
overlay0) color=$OVERLAY0 ;;
surface2) color=$SURFACE2 ;;
surface1) color=$SURFACE1 ;;
surface0) color=$SURFACE0 ;;
crust) color=$CRUST ;;
mantle) color=$MANTLE ;;
base) color=$BASE ;;
*) color=$BASE ;;
esac
printf -v alpha "%02x" "$alpha"
echo "0x${alpha}${color}"
}
sketchybar \
--bar \
color=$(color crust 200) \
\
--default \
icon.color=$(color pink) \
label.color=$(color text) \
\
--set /space/ \
icon.color=$(color mauve 128) \
icon.highlight_color=$(color pink) \
background.highlight_color=$(color pink) \
\
--set window_title \
icon.color=$(color text) \
label.color=$(color text) \
\
--set music \
icon.color=$(color subtext1) \
label.color=$(color subtext1) \
\
--set clock \
icon.color=$(color mauve) \
label.color=$(color mauve) \
\
--set date \
icon.color=$(color blue) \
label.color=$(color blue) \
\
--set mullvad \
icon.color=$(color green) \
label.color=$(color green) \
\
--set battery \
icon.color=$(color yellow) \
label.color=$(color yellow) \
\
--set sound \
icon.color=$(color peach) \
label.color=$(color peach) \
\
--set mail \
icon.color=$(color red) \
label.color=$(color red) \
\
--set tasks \
icon.color=$(color red) \
label.color=$(color red)

View file

@ -0,0 +1,4 @@
#!/usr/bin/env bash
DATE="$(ddate +'%{%A, %b %d%}')"
sketchybar --set "$NAME" label="$DATE" icon=" "

View file

@ -0,0 +1,30 @@
#!/usr/bin/env bash
UNREAD_ONLY=false
MAIL_DIR=~/.local/share/mail
COUNT=0
if [[ -d ${MAIL_DIR} ]]; then
for dir in "${MAIL_DIR}"/*/; do
# get file count for the unread mailbox, add to count
unreads=$( find "${dir}INBOX/new" | wc -l)
COUNT=$((COUNT+unreads))
# also add the rest of the inbox if var is set
if ! ($UNREAD_ONLY); then
other=$( find "${dir}INBOX/new" | wc -l)
COUNT=$((COUNT+other))
fi
done
fi
if [[ $COUNT -gt 0 ]]; then
ICON=" "
LABEL="$COUNT"
else
ICON=" "
fi
sketchybar --set "$NAME" label="$LABEL" icon="$ICON"

View file

@ -0,0 +1,21 @@
#!/usr/bin/env bash
# path where mullvad is kept
PATH=/usr/local/bin:$PATH
if command -v mullvad &> /dev/null; then
MULLVAD_STATUS=$(mullvad status)
if echo "$MULLVAD_STATUS" | grep -q 'Connected'; then
OUTPUT=$(mullvad status | cut -d " " -f 3 | cut -d "-" -f 1 | tr '/a-z/' '/A-Z/')
ICON=" "
else
ICON=" "
fi
else
ICON=" "
OUTPUT=""
fi
sketchybar --set "$NAME" icon="$ICON" label="$OUTPUT"

View file

@ -0,0 +1,22 @@
#!/usr/bin/env sh
if pgrep -xq Music; then
STATE=$(osascript -e 'tell application "Music" to player state as string' 2>/dev/null || echo "")
TRACK=$(osascript -e 'tell application "Music" to name of current track as string' 2>/dev/null || echo "")
ARTIST=$(osascript -e 'tell application "Music" to album artist of current track as string' 2>/dev/null || echo "")
if [ "$STATE" = "playing" ]; then
ICON=""
LABEL="$ARTIST - $TRACK"
else
ICON=""
if [ "$TRACK" = "" ] || [ "$ARTIST" = "" ]; then
LABEL="paused"
else
LABEL="$ARTIST - $TRACK"
fi
fi
sketchybar --set "$NAME" icon="$ICON" label="$LABEL" --add event "${NAME}-changed"
else
sketchybar --set "$NAME" icon="" label="" --add event "${NAME}-changed"
fi

View file

@ -0,0 +1,25 @@
#!/usr/bin/env bash
VOLUME=$(osascript -e "get volume settings" | cut -d " " -d ":" -f2 | cut -d "," -f1)
MUTED=$(osascript -e "get volume settings" | grep "muted:true")
if [[ "$MUTED" != "" ]]; then
ICON="ﱝ"
else
case ${VOLUME} in
100) ICON="";;
9[0-9]) ICON="";;
8[0-9]) ICON="";;
7[0-9]) ICON="";;
6[0-9]) ICON="";;
5[0-9]) ICON="";;
4[0-9]) ICON="";;
3[0-9]) ICON="";;
2[0-9]) ICON="";;
1[0-9]) ICON="";;
[0-9]) ICON="";;
*) ICON=""
esac
fi
sketchybar --set "$NAME" icon="$ICON" label="$VOLUME%"

View file

@ -0,0 +1,3 @@
#!/usr/bin/env sh
sketchybar --set "$NAME" icon.highlight="$SELECTED" background.drawing="$SELECTED"

View file

@ -0,0 +1,19 @@
#!/usr/bin/env bash
urg=$(task count due.before:tomorrow status:pending)
week=$(task count due.before:eow status:pending)
month=$(task count due.before:eom status:pending)
total=$(task count status:pending)
if [[ $total -eq 0 ]]; then
ICON=" "
LABEL="All done"
elif [[ $urg -eq 0 ]]; then
ICON=" "
LABEL="$week/$month/$total"
else
ICON=" "
LABEL="$week/$month/$total"
fi
sketchybar --set "$NAME" label="$LABEL" icon="$ICON"

View file

@ -0,0 +1,69 @@
#!/usr/bin/env bash
case "$INFO" in
# IDEs
"CLion") ;&
"GoLand") ;&
"PhpStorm") ;&
"PyCharm") ;&
"WebStorm") ;&
"Lapce") ;&
"Xcode") ICON=" ";;
"Neovide") ICON=" ";;
# developer
"Docker") ICON=" ";;
# terminals
"Kitty") ;&
"iTerm") ;&
"Terminal") ;&
"WezTerm") ICON=" ";;
# browsers
"Chromium") ICON=" ";;
"Firefox") ICON=" ";;
"Safari") ICON=" ";;
"qutebrowser") ICON=" ";;
# system
"App Store") ICON=" ";;
"Books") ICON=" ";;
"Finder") ICON=" ";;
"Music") ICON="ﱘ ";;
"Podcasts") ICON=" ";;
"Photos") ICON=" ";;
"Preview") ICON=" ";;
"System Preferences") ICON=" ";;
# chat
"Discord") ICON="ﭮ ";;
"Mattermost") ICON=" ";;
"Slack") ICON=" ";;
# creativity
"Affinity Designer") ICON=" ";;
"Affinity Photo") ICON=" ";;
"Affinity Publisher") ICON=" ";;
"Blender") ICON=" ";;
"Final Cut") ICON=" ";;
"Garageband") ICON=" ";;
"Logic Pro X") ICON=" ";;
"iMovie") ICON=" ";;
# password managers
"GPG Keychain") ;&
"KeePassXC") ;&
"LastPass") ;&
"1Password") ICON=" ";;
# other
"Audible") ICON=" ";;
"Pocket Casts") ICON=" ";;
"Setapp") ICON=" ";;
"Spotify") ICON=" ";;
"Steam") ICON=" ";;
*) ICON="ﬓ ";;
esac
sketchybar --set "$NAME" label="$INFO" icon="$ICON"

74
dot_config/skhd/skhdrc Normal file
View file

@ -0,0 +1,74 @@
# vim:fileencoding=utf-8:foldmethod=marker
# Link to yabairc for <g-f>: ~/.config/yabai/yabairc
# WORKS WITH SIP ENABLED:
# focus window
cmd + ctrl - h : yabai -m window --focus west
cmd + ctrl - j : yabai -m window --focus south
cmd + ctrl - k : yabai -m window --focus north
cmd + ctrl - l : yabai -m window --focus east
# move window
cmd + shift - h : yabai -m window --warp west
cmd + shift - j : yabai -m window --warp south
cmd + shift - k : yabai -m window --warp north
cmd + shift - l : yabai -m window --warp east
cmd + shift - d: yabai -m window --toggle float
cmd + shift - return : open -na "WezTerm.app"
cmd - f2 : open -na "Firefox"
# open Ranger
cmd - f3 : wezterm start ranger $HOME
# alternative: open Finder
# cmd - f3 : open "$HOME"
# restart yabai
cmd + alt - r : launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai"
# ONLY WORKS WITH SIP DISABLED: {{{
# fast focus space left/right
ctrl - left : yabai -m space --focus prev
ctrl - right : yabai -m space --focus next
# switch to space
# cmd - 1 : yabai -m space --focus 1
# cmd - 2 : yabai -m space --focus 2
# cmd - 3 : yabai -m space --focus 3
# cmd - 4 : yabai -m space --focus 4
# cmd - 5 : yabai -m space --focus 5
# cmd - 6 : yabai -m space --focus 6
# cmd - 7 : yabai -m space --focus 7
# cmd - 8 : yabai -m space --focus 8
# cmd - 9 : yabai -m space --focus 9
# cmd - 0 : yabai -m space --focus 10
cmd + ctrl - 1 : yabai -m space --focus 1
cmd + ctrl - 2 : yabai -m space --focus 2
cmd + ctrl - 3 : yabai -m space --focus 3
cmd + ctrl - 4 : yabai -m space --focus 4
cmd + ctrl - 5 : yabai -m space --focus 5
cmd + ctrl - 6 : yabai -m space --focus 6
cmd + ctrl - 7 : yabai -m space --focus 7
cmd + ctrl - 8 : yabai -m space --focus 8
cmd + ctrl - 9 : yabai -m space --focus 9
cmd + ctrl - 0 : yabai -m space --focus 10
# send window to desktop and follow focus
cmd + shift - 1 : yabai -m window --space 1; yabai -m space --focus 1
cmd + shift - 2 : yabai -m window --space 2; yabai -m space --focus 2
cmd + shift - 3 : yabai -m window --space 3; yabai -m space --focus 3
cmd + shift - 4 : yabai -m window --space 4; yabai -m space --focus 4
cmd + shift - 5 : yabai -m window --space 5; yabai -m space --focus 5
cmd + shift - 6 : yabai -m window --space 6; yabai -m space --focus 6
cmd + shift - 7 : yabai -m window --space 7; yabai -m space --focus 7
cmd + shift - 8 : yabai -m window --space 8; yabai -m space --focus 8
cmd + shift - 9 : yabai -m window --space 9; yabai -m space --focus 9
cmd + shift - 0 : yabai -m window --space 10; yabai -m space --focus 10
# move spaces between displays
# 2B is '<'
cmd + shift - 0x2B : yabai -m space --display prev
# 2F is '>'
cmd + shift - 0x2F : yabai -m space --display next
# }}}

274
dot_config/starship.toml Normal file
View file

@ -0,0 +1,274 @@
# Get editor completions based on the config schema
'$schema' = 'https://starship.rs/config-schema.json'
### MAIN SHELL
# directory | username@hostname | cmd duration | sudo | VCS | language versions | kubernetes
# > input after line break
format = """
$directory\
$username\
$hostname\
$container\
$sudo\
$shlvl\
$vcsh\
$git_branch\
$git_commit\
$git_state\
$git_metrics\
$git_status\
$hg_branch\
$cmd_duration\
$status\
$fill\
$package\
$buf\
$c\
$cmake\
$cobol\
$conda\
$crystal\
$dart\
$deno\
$dotnet\
$elixir\
$elm\
$erlang\
$golang\
$haskell\
$helm\
$java\
$julia\
$kotlin\
$lua\
$nim\
$nix_shell\
$nodejs\
$ocaml\
$perl\
$php\
$pulumi\
$purescript\
$python\
$red\
$rlang\
$ruby\
$rust\
$scala\
$spack\
$swift\
$vlang\
$vagrant\
$zig\
$aws\
$azure\
$gcloud\
$openstack\
$docker_context\
$kubernetes\
$terraform\
$line_break\
$shell\
$character"""
add_newline = true
[character]
success_symbol = '[ﬦ](bold blue) '
error_symbol = '[ﬦ](bold blue) '
vicmd_symbol = '[](bold green) '
[directory]
style = 'fg:bright-cyan'
read_only = ' '
use_os_path_sep = false # fuck windows :verynice:
[directory.substitutions]
'.config' = ' '
'Code' = ' '
'Desktop' = ' '
'Documents' = ' '
'Downloads' = ' '
'Music' = ' '
'Pictures' = ' '
'Work' = ' '
'git' = ' '
[username]
format = '\[[$user]($style)\]'
[sudo]
disabled = false
format = '\[[$symbol]($style)\]'
style = 'fg:red'
symbol = ' '
[git_branch]
symbol = ' '
format = '\[[$symbol$branch]($style)\]'
style = 'fg:bright-purple'
[git_status]
format = '(\[[$all_status$ahead_behind]($style)\] )'
style = 'fg:bright-purple'
[hg_branch]
format = '\[[$symbol$branch]($style)\]'
[cmd_duration]
format = '\[[ $duration]($style)\]'
[fill]
symbol = '─'
style = 'fg:black'
### LANGUAGE VERSION INDICATORS
[c]
format = '\[[$symbol($version(-$name))]($style)\]'
[cmake]
format = '\[[$symbol($version)]($style)\]'
[cobol]
format = '\[[$symbol($version)]($style)\]'
[conda]
format = '\[[$symbol$environment]($style)\]'
[crystal]
format = '\[[$symbol($version)]($style)\]'
[dart]
format = '\[[$symbol($version)]($style)\]'
[deno]
format = '\[[$symbol($version)]($style)\]'
[dotnet]
format = '\[[$symbol($version)(🎯 $tfm)]($style)\]'
[elixir]
format = '\[[$symbol($version \(OTP $otp_version\))]($style)\]'
[elm]
format = '\[[$symbol($version)]($style)\]'
[erlang]
format = '\[[$symbol($version)]($style)\]'
[golang]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
[haskell]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
[helm]
symbol = 'ﴱ '
format = '\[[$symbol($version)]($style)\]'
[java]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
[julia]
format = '\[[$symbol($version)]($style)\]'
[kotlin]
format = '\[[$symbol($version)]($style)\]'
[lua]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
[nim]
format = '\[[$symbol($version)]($style)\]'
[nix_shell]
format = '\[[$symbol$state( \($name\))]($style)\]'
[nodejs]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
detect_extensions = []
style = 'green'
[ocaml]
format = '\[[$symbol($version)(\($switch_indicator$switch_name\))]($style)\]'
[package]
symbol = ' '
format = '\[[$symbol$version]($style)\]'
style = '16'
[perl]
format = '\[[$symbol($version)]($style)\]'
[php]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
[pulumi]
format = '\[[$symbol$stack]($style)\]'
[purescript]
format = '\[[$symbol($version)]($style)\]'
[python]
symbol = ' '
format = '\[[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))]($style)\]'
[red]
format = '\[[$symbol($version)]($style)\]'
[ruby]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
[rust]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
[scala]
format = '\[[$symbol($version)]($style)\]'
[spack]
format = '\[[$symbol$environment]($style)\]'
[swift]
symbol = ' '
format = '\[[$symbol($version)]($style)\]'
[vagrant]
format = '\[[$symbol($version)]($style)\]'
[vlang]
format = '\[[$symbol($version)]($style)\]'
[zig]
format = '\[[$symbol($version)]($style)\]'
### CONTEXT INDICATORS
[aws]
symbol = ' '
format = '\[[$symbol($profile)(\($region\))(\[$duration\])]($style)\]'
[docker_context]
symbol = ' '
format = '\[[$symbol$context]($style)\]'
[gcloud]
symbol = ' '
format = '\[[$symbol$account(@$domain)(\($region\))]($style)\]'
[kubernetes]
symbol = ' '
format = '\[[$symbol($cluster/$namespace)]($style)\]'
disabled = false
[openstack]
symbol = ' '
format = '\[[$symbol$cloud(\($project\))]($style)\]'
[terraform]
format = '\[[$symbol$workspace]($style)\]'

View file

@ -0,0 +1,101 @@
###############################################################################
#
# Copyright 2006 - 2021, Tomas Babej, Paul Beckingham, Federico Hernandez.
#
# 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.
#
# https://www.opensource.org/licenses/mit-license.php
#
###############################################################################
rule.precedence.color=deleted,completed,active,keyword.,tag.,project.,overdue,scheduled,due.today,due,blocked,blocking,recurring,tagged,uda.
# This is a theme that disables all default colors
# It can be used as template for other themes
# General decoration
color.label=
color.label.sort=
color.alternate=
color.header=
color.footnote=
color.warning=
color.error=
color.debug=
# Task state
color.completed=
color.deleted=
color.active=
color.recurring=
color.scheduled=
color.until=
color.blocked=
color.blocking=
# Project
color.project.none=
# Priority
color.uda.priority.H=
color.uda.priority.L=
color.uda.priority.M=
# Tags
color.tag.next=
color.tag.none=
color.tagged=
# Due
color.due=
color.due.today=
color.overdue=
# Report: burndown
color.burndown.done=
color.burndown.pending=
color.burndown.started=
# Report: history
color.history.add=
color.history.delete=
color.history.done=
# Report: summary
color.summary.background=
color.summary.bar=
# Command: calendar
color.calendar.due=
color.calendar.due.today=
color.calendar.holiday=
color.calendar.overdue=
color.calendar.today=
color.calendar.weekend=
color.calendar.weeknumber=
# Command: sync
color.sync.added=
color.sync.changed=
color.sync.rejected=
# Command: undo
color.undo.after=
color.undo.before=

76
dot_config/task/taskrc Normal file
View file

@ -0,0 +1,76 @@
# Files
data.location=~/.local/share/task
hooks.location=~/.config/task/hooks
# Color theme
include ~/.config/task/no-color.theme
news.version=2.6.0
context.work.read=tag:work
context.work.write=tag:work
# Bugwarrior UDAs
uda.githubtitle.type=string
uda.githubtitle.label=Github Title
uda.githubbody.type=string
uda.githubbody.label=Github Body
uda.githubcreatedon.type=date
uda.githubcreatedon.label=Github Created
uda.githubupdatedat.type=date
uda.githubupdatedat.label=Github Updated
uda.githubclosedon.type=date
uda.githubclosedon.label=GitHub Closed
uda.githubmilestone.type=string
uda.githubmilestone.label=Github Milestone
uda.githubrepo.type=string
uda.githubrepo.label=Github Repo Slug
uda.githuburl.type=string
uda.githuburl.label=Github URL
uda.githubtype.type=string
uda.githubtype.label=Github Type
uda.githubnumber.type=numeric
uda.githubnumber.label=Github Issue/PR #
uda.githubuser.type=string
uda.githubuser.label=Github User
uda.githubnamespace.type=string
uda.githubnamespace.label=Github Namespace
uda.githubstate.type=string
uda.githubstate.label=GitHub State
uda.gitlabtitle.type=string
uda.gitlabtitle.label=Gitlab Title
uda.gitlabdescription.type=string
uda.gitlabdescription.label=Gitlab Description
uda.gitlabcreatedon.type=date
uda.gitlabcreatedon.label=Gitlab Created
uda.gitlabupdatedat.type=date
uda.gitlabupdatedat.label=Gitlab Updated
uda.gitlabduedate.type=date
uda.gitlabduedate.label=Gitlab Due Date
uda.gitlabmilestone.type=string
uda.gitlabmilestone.label=Gitlab Milestone
uda.gitlaburl.type=string
uda.gitlaburl.label=Gitlab URL
uda.gitlabrepo.type=string
uda.gitlabrepo.label=Gitlab Repo Slug
uda.gitlabtype.type=string
uda.gitlabtype.label=Gitlab Type
uda.gitlabnumber.type=string
uda.gitlabnumber.label=Gitlab Issue/MR #
uda.gitlabstate.type=string
uda.gitlabstate.label=Gitlab Issue/MR State
uda.gitlabupvotes.type=numeric
uda.gitlabupvotes.label=Gitlab Upvotes
uda.gitlabdownvotes.type=numeric
uda.gitlabdownvotes.label=Gitlab Downvotes
uda.gitlabwip.type=numeric
uda.gitlabwip.label=Gitlab MR Work-In-Progress Flag
uda.gitlabauthor.type=string
uda.gitlabauthor.label=Gitlab Author
uda.gitlabassignee.type=string
uda.gitlabassignee.label=Gitlab Assignee
uda.gitlabnamespace.type=string
uda.gitlabnamespace.label=Gitlab Namespace
uda.gitlabweight.type=numeric
uda.gitlabweight.label=Gitlab Weight
# END Bugwarrior UDAs
context=work

93
dot_config/tmux/tmux.conf Normal file
View file

@ -0,0 +1,93 @@
# reset ^B to ^S
unbind C-b
set -g prefix C-s
bind-key -r C-s send-prefix
# simple reload key
bind-key r source-file ~/.tmux.conf \; display-message '~/.tmux.conf reloaded'
# vim-like arrows to switch and resize panes
unbind-key Up
unbind-key Down
unbind-key Left
unbind-key Right
unbind-key M-Up
unbind-key M-Down
unbind-key M-Left
unbind-key M-Right
unbind-key C-Up
unbind-key C-Down
unbind-key C-Left
unbind-key C-Right
unbind-key |
unbind-key -
# what the fuck
bind-key \\ split-window -h -c "#{pane_current_path}"
bind-key - split-window -v -c "#{pane_current_path}"
# i can't explain this but it makes sense coming from vim
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
bind-key -r M-h resize-pane -L
bind-key -r M-j resize-pane -D
bind-key -r M-k resize-pane -U
bind-key -r M-l resize-pane -R
bind-key -r C-h resize-pane -L 5
bind-key -r C-j resize-pane -D 5
bind-key -r C-k resize-pane -U 5
bind-key -r C-l resize-pane -R 5
# start counting tabs and panes at 1
set -g base-index 1
set -g pane-base-index 1
set -g pane-border-format "#{pane_index} #{pane_current_command}"
unbind-key 0
bind-key 0 select-window -t 10
set-option -sg escape-time 0
set-window-option -g mode-keys vi
set-option -g focus-events on
set-option -g default-terminal 'screen-256color'
set-option -g terminal-overrides ',xterm-256color:RGB'
# couple of vi mode keybinds
unbind -T copy-mode-vi Space; #Default for begin-selection
unbind -T copy-mode-vi Enter; #Default for copy-selection
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
set -g @plugin 'jaclu/tmux-menus'
set -g @plugin 'jimeh/tmux-themepack'
set -g @plugin 'schasse/tmux-jump'
set -g @plugin 'spywhere/tmux-now-playing'
set -g @plugin 'tmux-plugins/tmux-cowboy'
set -g @plugin 'tmux-plugins/tmux-maildir-counter'
set -g @plugin 'tmux-plugins/tmux-open'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-urlview'
set -g @plugin 'tmux-plugins/tpm'
# tmux-menus
set -g @menus_location_x 'C'
set -g @menus_location_y 'C'
set -g @menus_trigger 'm'
# now playing
set -g @now-playing-status-format '{icon} {scrollable}'
set -g @now-playing-scrollable-format '{artist} - {title}'
set -g @now-playing-playing-icon '|>'
# tmux-themepack
set -g @themepack-status-right-area-left-format '#{now_playing}'
set -g @themepack 'powerline/block/blue'
set -g @jump-key 'f'
set-environment -g TMUX_PLUGIN_MANAGER_PATH '~/.config/tmux/plugins'
run -b '~/.config/tmux/plugins/tpm/tpm'

View file

@ -0,0 +1,13 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAQoIAa54tk/NeNbqv3NUspAtE0Jg58eilpplJo+2HpGEw
+PzXokq0phL7UCrc0FRVD6lkT4LNX1cluf3JOKWmwagfUWaXhSPu9K+mEuAC7nbJ
0sB/AeTU4hM3LX3KORSPx1+YhJ/XZDXX2f7eo0+RC4uTILF6nX8wYmynXKEFSbGp
PrmRSkBPVRqNHvB9QKppRgF4sjMtXz+2iGHKIomhv5EHmsbaFvI5tnJARIe40jyL
6wKQBEEkfTPf+0Manw9FaMSdL7+wnl4C1Yvea7CjpwVgXgFNCsp5svIQFoooQJIZ
+YhL8UGYigbljuSV514n9cz1GuGX0UsdFvbTBf/XJyzMDQdkJikmxo8QjBAPlkai
Riu/4K0Q6HJAXuh16Vg9aQZVlkdaoD3MkfJ+EeLIjtmaulLAwHSrhDxLeuDOrLoy
hvJGhAWstj7Qg8DLDIckQLabGlG5sZDGvPnohr9CMLWSAp9Y/bXEzTLmGTLJOgvp
JCN/UYpGRv4Js3TfRjXHJjYO4AkiixdcrKlMIyCEJ0oJrw==
=oC6M
-----END PGP MESSAGE-----

View file

@ -0,0 +1,238 @@
-- vim:foldmethod=marker:foldlevel=1
local wezterm = require("wezterm")
local catppuccin = require("colors/catppuccin/catppuccin").setup({
sync_flavours = {
light = "latte",
dark = "mocha",
},
})
-- fonts I like, with the settings I prefer {{{
-- kept seperately from the rest of the config so that I can easily change them
local fonts = {
cascadia = wezterm.font({
family = "Cascadia Code",
harfbuzz_features = {
"ss01=1",
"ss19=1",
},
}),
comic = wezterm.font("Comic Code Ligatures"),
fira = wezterm.font({
family = "Fira Code",
harfbuzz_features = {
"cv06=1",
"cv14=1",
"cv32=1",
"ss04=1",
"ss07=1",
"ss09=1",
},
}),
fantasque = wezterm.font("Fantasque Sans Mono"),
victor = wezterm.font({
family = "Victor Mono",
weight = "DemiBold",
}),
}
-- }}}
-- make numbers superscript or subscript {{{
---@diagnostic disable-next-line: unused-local,unused-function
local function style_number(number, style)
local superscript = {
"",
"¹",
"²",
"³",
"",
"",
"",
"",
"",
"",
}
local subscript = {
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
}
local numbers = (style == "super") and superscript or subscript
local number_string = tostring(number)
local result = ""
for i = 1, #number_string do
local char = number_string:sub(i, i)
local nr = tonumber(char)
if number then
result = result .. numbers[nr + 1]
else
result = result .. char
end
end
return result
end
-- }}}
-- custom tab bar {{{
---@diagnostic disable-next-line: unused-local
wezterm.on("format-tab-title", function(tab, tabs, panes, config, hover, max_width)
local RIGHT_DIVIDER = utf8.char(0xe0bc)
local active_tab_index = 0
for _, t in ipairs(tabs) do
if t.is_active == true then
active_tab_index = t.tab_index
end
end
local active_bg = config.colors.tab_bar.active_tab.bg_color
local active_fg = config.colors.tab_bar.active_tab.fg_color
local inactive_bg = config.colors.tab_bar.inactive_tab.bg_color
local inactive_fg = config.colors.tab_bar.inactive_tab.fg_color
local new_tab_bg = config.colors.tab_bar.new_tab.bg_color
local s_bg, s_fg, e_bg, e_fg
-- the last tab
if tab.tab_index == #tabs - 1 then
if tab.is_active then
s_bg = active_bg
s_fg = active_fg
e_bg = new_tab_bg
e_fg = active_bg
else
s_bg = inactive_bg
s_fg = inactive_fg
e_bg = new_tab_bg
e_fg = inactive_bg
end
elseif tab.tab_index == active_tab_index - 1 then
s_bg = inactive_bg
s_fg = inactive_fg
e_bg = active_bg
e_fg = inactive_bg
elseif tab.is_active then
s_bg = active_bg
s_fg = active_fg
e_bg = inactive_bg
e_fg = active_bg
else
s_bg = inactive_bg
s_fg = inactive_fg
e_bg = inactive_bg
e_fg = inactive_bg
end
return {
{ Background = { Color = s_bg } },
{ Foreground = { Color = s_fg } },
{ Text = " " .. tab.tab_index + 1 .. ": " .. tab.active_pane.title .. " " },
{ Background = { Color = e_bg } },
{ Foreground = { Color = e_fg } },
{ Text = RIGHT_DIVIDER },
}
end)
-- }}}
local function get_os()
local target = wezterm.target_triple
if string.find(target, "linux") then
return "linux"
elseif string.find(target, "darwin") then
return "macos"
else
-- who cares
return "OH GOD PLEASE NO"
end
end
local window_padding = {}
if get_os() == "linux" then
window_padding = {
left = 0,
right = 0,
top = 0,
bottom = 0,
}
elseif get_os() == "macos" then
window_padding = {
left = 2,
right = 2,
top = 2,
bottom = 2,
}
end
local act = wezterm.action
return {
---- keyboard shortcuts
disable_default_key_bindings = false,
leader = { key = "s", mods = "CTRL", timeout_milliseconds = 5000 },
keys = {
-- use 'Backslash' to split horizontally
{
key = "\\",
mods = "LEADER",
action = act({ SplitHorizontal = { domain = "CurrentPaneDomain" } }),
},
-- and 'Minus' to split vertically
{
key = "-",
mods = "LEADER",
action = act({ SplitVertical = { domain = "CurrentPaneDomain" } }),
},
-- 'hjkl' to move between panes
{ key = "h", mods = "LEADER", action = act({ ActivatePaneDirection = "Left" }) },
{ key = "j", mods = "LEADER", action = act({ ActivatePaneDirection = "Down" }) },
{ key = "k", mods = "LEADER", action = act({ ActivatePaneDirection = "Up" }) },
{ key = "l", mods = "LEADER", action = act({ ActivatePaneDirection = "Right" }) },
-- -- Shift + 'hjkl' to resize panes
{ key = "h", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Left", 5 } }) },
{ key = "j", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Down", 5 } }) },
{ key = "k", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Up", 5 } }) },
{ key = "l", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Right", 5 } }) },
-- numbers to navigate to tabs
{ key = "1", mods = "LEADER", action = act({ ActivateTab = 0 }) },
{ key = "2", mods = "LEADER", action = act({ ActivateTab = 1 }) },
{ key = "3", mods = "LEADER", action = act({ ActivateTab = 2 }) },
{ key = "4", mods = "LEADER", action = act({ ActivateTab = 3 }) },
{ key = "5", mods = "LEADER", action = act({ ActivateTab = 4 }) },
{ key = "6", mods = "LEADER", action = act({ ActivateTab = 5 }) },
{ key = "7", mods = "LEADER", action = act({ ActivateTab = 6 }) },
{ key = "8", mods = "LEADER", action = act({ ActivateTab = 7 }) },
{ key = "9", mods = "LEADER", action = act({ ActivateTab = 8 }) },
{ key = "9", mods = "LEADER", action = act({ ActivateTab = 9 }) },
-- 'c' to create a new tab
{ key = "c", mods = "LEADER", action = act({ SpawnTab = "CurrentPaneDomain" }) },
-- 'x' to kill the current pane
{ key = "x", mods = "LEADER", action = act({ CloseCurrentPane = { confirm = true } }) },
-- 'z' to toggle the zoom for the current pane
{ key = "z", mods = "LEADER", action = "TogglePaneZoomState" },
-- 'v' to visually select in the current pane
{ key = "v", mods = "LEADER", action = "ActivateCopyMode" },
},
-- font
font_size = 18,
font = fonts.victor,
use_fancy_tab_bar = false,
tab_bar_at_bottom = true,
hide_tab_bar_if_only_one_tab = true,
tab_max_width = 32,
-- window
window_decorations = "RESIZE",
window_padding = window_padding,
-- theme
colors = catppuccin,
-- nightly only
clean_exit_codes = { 130 },
}

View file

@ -0,0 +1,87 @@
#!/usr/bin/env bash
# vim:fileencoding=utf-8:foldmethod=marker
# Link to skhrc for <g-f>: ~/.config/skhd/skhdrc
# when SIP is disabled {{{
sudo yabai --load-sa
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
# ensure that there are always 10 spaces
spacestocreate=$(expr 10 - "$(yabai -m query --spaces | jq length)")
while [ "$spacestocreate" -gt 0 ]; do
yabai -m space --create
spacestocreate=$(expr "$spacestocreate" - 1)
done
# }}}
# apps which should
# - not be managed
# - not stick
# - a layer above
APPS_ABOVE=(
"JetBrains Toolbox"
"Mullvad VPN"
"Sip"
"iStat Menus Status"
)
APPS_UNMANAGED=(
"CleanShot X"
"System Preferences"
)
# special rules for windows/apps
for app in "${APPS_ABOVE[@]}"; do
yabai -m rule --add app="^$app\$" manage=off sticky=off layer=above border=off
done
for app in "${APPS_UNMANAGED[@]}"; do
yabai -m rule --add app="^$app\$" manage=off border=off
done
# global settings
# MOUSE FOCUS: useless when SIP is enabled, borked when disabled.
# yabai -m config mouse_follows_focus on
# yabai -m config focus_follows_mouse on
# MOUSE MODIFIER: this actually works, wewlad.
# shit experience though, since CMD + click is commonly used throughout apps.
yabai -m config mouse_modifier fn
yabai -m config mouse_action1 move
yabai -m config mouse_action2 resize
yabai -m config mouse_drop_action swap
# a sad imitation of i3
yabai -m config window_origin_display default
yabai -m config window_placement second_child
# keep this turned off if you want to take screenshots...
# -> https://github.com/koekeishiya/yabai/discussions/1079
#yabai -m config window_topmost off
# welcome to the ricefields, motherfucker
yabai -m config active_window_border_color 0xfff5c2e7
yabai -m config normal_window_border_color 0xffb4befe
yabai -m config insert_feedback_color 0xfff9e2af
yabai -m config window_border on
yabai -m config window_border_width 4
yabai -m config window_opacity off
# SIP disabled only? FeelsBadMan
yabai -m config window_shadow float
# other shit
yabai -m config auto_balance off
yabai -m config split_ratio 0.50
# general space settings
yabai -m config layout bsp
yabai -m config top_padding 8
yabai -m config bottom_padding 8
yabai -m config left_padding 8
yabai -m config right_padding 8
yabai -m config window_gap 8
# when using uebersicht, add a 30 rel px gap on the top
yabai -m config external_bar all:30:0
# yabai -m config external_bar all:0:0
printf "\n\n\nRELOAD: finished loading yabai conf\n"

78
dot_gitconfig Normal file
View file

@ -0,0 +1,78 @@
; vim:fenc=utf-8:ft=gitconfig
; identity & authentication
[include]
path = ~/.config/git/pseudonym
; using 'pass' as the password manager
[credential]
helper = !pass-git-helper $@
useHttpPath = true
; change identity based on the cwd
; work
[includeIf "gitdir:~/git/work/"]
path = ~/.config/git/work
; freelance
[includeIf "gitdir:~/git/freelance/"]
path = ~/.config/git/personal
[core]
excludesfile = ~/.config/git/gitignore
autocrlf = input
pager = diff-so-fancy | less --tabs=4 -RFX
[interactive]
diffFilter = diff-so-fancy --patch
[alias]
up = "!git remote update -p; git merge --ff-only @{u}"
patch = "!git --no-pager diff --no-color"
zip = "!git archive --format=zip --output=$(basename $(git rev-parse --show-toplevel)).zip $(git rev-parse --short HEAD)"
gzip = "!git archive --format=tar.gz --output=$(basename $(git rev-parse --show-toplevel)).tar.gz $(git rev-parse --short HEAD)"
logo = log --format=format:'%>|(8)%Cblue%h%Creset %Cgreen%><(14)%ar%Creset %C(dim)[%G?]%Creset %s%C(yellow)%d%Creset'
lol = log --graph --format=format:'%>|(14)%Cblue%h%Creset %Cgreen%><(14)%ar%Creset %C(dim)[%G?]%Creset %s%C(yellow)%d%Creset'
lola = log --graph --format=format:'%>|(14)%Cblue%h%Creset %Cgreen%><(14)%ar%Creset %C(dim)[%G?]%Creset %s%C(yellow)%d%Creset' --all
yolo = !git commit -m \"chore: $(curl -s whatthecommit.com/index.txt)\"
[commit]
gpgSign = true
[push]
default = current
[format]
signoff = true
[grep]
lineNumber = true
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[init]
defaultBranch = main
[color]
branch = auto
diff = auto
status = auto
[color "branch"]
current = yellow reverse
local = yellow
remote = green
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
[color "status"]
added = yellow
changed = green
untracked = cyan

59
dot_ideavimrc Normal file
View file

@ -0,0 +1,59 @@
""" map leader to <space> ----------------------------------------------------
let mapleader=" "
""" emulated plugins
" use 'c|d|yia' to c|d|y inner arguments
set argtextobj
" enable gcc / gc+motion to toggle comments
set commentary
" jump around text easier, with <space> as leader
Plug 'easymotion/vim-easymotion'
" highlight yank. duh.
set highlightedyank
" vim navigation for the dir tree view
set NERDTree
set ReplaceWithRegister
set surround
set textobj-entire
""" Common settings ----------------------------------------------------------
" '_' is a word separator
set iskeyword-=_
set relativenumber
set number
" scroll offset
set scrolloff=5
set sidescrolloff=5
" don't use Ex mode, use Q for formatting.
map Q gq
""" IDEA-specific settings ---------------------------------------------------
set ideamarks
set ideajoin
set ideastatusicon=gray
""" Mappings -----------------------------------------------------------------
" IDEA binds
map <leader>a <Action>(Annotate)
map <leader>b <Action>(ToggleLineBreakpoint)
map <leader>h <Action>(Vcs.ShowTabbedFileHistory)
map <leader>r <Action>(RenameElement)
map <leader>z <Action>(ToggleDistractionFreeMode)
" plugin binds
map <C-N> :NERDTreeToggle<CR>
" easier split navigation
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
sethandler <C-D> a:vim
sethandler <C-U> a:vim
sethandler <C-R> n:ide

View file

@ -0,0 +1,202 @@
-----BEGIN PGP MESSAGE-----
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
=15NS
-----END PGP MESSAGE-----

View file

@ -0,0 +1,50 @@
#! /bin/bash
#
# /usr/bin/setcursor
# config files
gtk2=$HOME/.gtkrc-2.0
gtk3=$HOME/.config/gtk-3.0/settings.ini
[[ -e $HOME/.extend.Xresources ]] && xr=$HOME/.extend.Xresources || xr=$HOME/.Xresources
# we'll have to override libxcursor's default
default=share/icons/default/index.theme
glob_default=/usr/$default
user_default=$HOME/.local/$default
[[ -e $glob_default ]] && [[ ! -e $user_default ]] && install -D $glob_default $user_default
# cursor-theme entries
cursor_gtk2=$(grep "cursor-theme-name" $gtk2 | cut -d'"' -f2)
cursor_gtk3=$(grep "cursor-theme-name" $gtk3 | cut -d'=' -f2)
cursor_xr=$(grep "Xcursor.theme" $xr | cut -d' ' -f2)
cursor=$1
# find config last modified
if [ -z $1 ]; then
cursor=$cursor_gtk2; newest=$gtk2
[[ $xr -nt $gtk2 ]] && [[ ! -z $cursor_xr ]] && cursor=$cursor_xr && newest=$xr
[[ $gtk3 -nt $newest ]] && [[ ! -z $cursor_gtk3 ]] && cursor=$cursor_gtk3
fi
# Strip any quotes from cursor string
cursor=$(echo $cursor | sed -e 's/"//g')
# set theme in all config files
echo "setting cursortheme \"$cursor\""
[[ "$cursor" != "$cursor_xr" ]] && \
sed -i "s/Xcursor.theme:.*/Xcursor.theme: $cursor/g" $xr &>/dev/null && \
xrdb -merge -I$HOME ~/.Xresources
[[ "$cursor" != "$cursor_gtk2" ]] && \
sed -i "s/cursor-theme-name=\".*\"/cursor-theme-name=\"$cursor\"/" $gtk2
[[ "$cursor" != "$cursor_gtk3" ]] && \
sed -i "s/cursor-theme-name=.*/cursor-theme-name=$cursor/" $gtk3 &>/dev/null
[[ -e $user_default ]] && sed -i "s/Inherits=.*/Inherits=$cursor/" $user_default &>/dev/null
# and in the realms of the GNOMEs
[[ -f /usr/bin/gconftool-2 ]] && gconftool-2 --type string -s /desktop/gnome/peripherals/mouse/cursor $cursor
[[ -f /usr/bin/gsettings ]] && gsettings set org.gnome.desktop.interface cursor-theme $cursor
exit
# oberon 2016

View file

@ -0,0 +1,103 @@
#!/bin/bash
# simple screenshot-script using scrot for manjaro-i3 by oberon@manjaro.org
_conf=$HOME/.config/i3-scrot.conf
if ! [ -f $_conf ]; then
echo "scrot_dir=$(xdg-user-dir PICTURES)" > $_conf
fi
source $_conf
if ! [ -d $scrot_dir ]; then
mkdir -p $scrot_dir
fi
if ! [[ -z "$2" ]]; then
cmd="scrot -d $2"
else
cmd='scrot'
fi
case "$1" in
--desk|-d|$NULL)
cd $scrot_dir
$cmd &&
sleep 1 &&
notify-send "screenshot has been saved in $scrot_dir"
;;
--window|-w)
cd $scrot_dir
$cmd -u &&
sleep 1 &&
notify-send "screenshot has been saved in $scrot_dir"
;;
--select|-s)
cd $scrot_dir
notify-send 'select an area for the screenshot' &
scrot -s &&
sleep 1 && notify-send "screenshot has been saved in $scrot_dir"
;;
--desk-to-clipboard|-dc|$NULL)
cd $scrot_dir
scrot -e 'xclip -selection clipboard -t image/png -i $f && rm $f' &&
sleep 1 &&
notify-send "screenshot has been copied to clipboard"
;;
--window-to-clipboard|-wc)
cd $scrot_dir
scrot -u -e 'xclip -selection clipboard -t image/png -i $f && rm $f' &&
sleep 1 &&
notify-send "screenshot has been copied to clipboard"
;;
--select-to-clipboard|-sc)
cd $scrot_dir
notify-send 'select an area for the screenshot' &
scrot -s -e 'xclip -selection clipboard -t image/png -i $f && rm $f' &&
sleep 1 && notify-send "screenshot has been copied to clipboard"
;;
--help|-h)
echo "
available options:
-d | --desk full screen
-w | --window active window
-s | --select selection
-dc | --desk-to-clipboard full screen to clipboard
-wc | --window-to-clipboard active window to clipboard
-sc | --select-to-clipboard selection to clipboard
-h | --help display this information
The -d, -w, -dc, and -wc options can be used with a delay
by adding the number of seconds, like for example:
'i3-scrot -w 5'
Default option is 'full screen'.
The file destination can be set in ${_conf}.
Default is $scrot_dir
"
;;
*)
echo "
== ! i3-scrot: missing or wrong argument ! ==
available options:
-d | --desk full screen
-w | --window active window
-s | --select selection
-dc | --desk-to-clipboard full screen to clipboard
-wc | --window-to-clipboard active window to clipboard
-sc | --select-to-clipboard selection to clipboard
-h | --help display this information
Default option is 'full screen'.
The file destination can be set in ${_conf}.
Default is $scrot_dir
"
exit 2
esac
exit 0

View file

@ -0,0 +1,35 @@
#!/bin/sh
# with openrc use loginctl
[ "$(cat /proc/1/comm)" = "systemd" ] && logind=systemctl || logind=loginctl
case "$1" in
lock)
xscreensaver-command -lock
;;
logout)
i3-msg exit
;;
switch_user)
dm-tool switch-to-greeter
;;
suspend)
xscreensaver-command -lock && $logind suspend
;;
hibernate)
xscreensaver-command -lock && $logind hibernate
;;
reboot)
$logind reboot
;;
shutdown)
$logind poweroff
;;
*)
echo "== ! i3exit: missing or invalid argument ! =="
echo "Try again with: lock | logout | switch_user | suspend | hibernate | reboot | shutdown"
exit 2
esac
exit 0

View file

@ -0,0 +1,23 @@
#!/usr/bin/env bash
(
flock 200
killall -q polybar
while pgrep -u $UID -x polybar > /dev/null; do sleep 0.5; done
outputs=$(xrandr --query | grep " connected" | cut -d" " -f1)
tray_output=$(xrandr --query | grep " primary" | cut -d" " -f 1)
for m in $outputs; do
export MONITOR=$m
export TRAY_POSITION=none
if [[ $m == "$tray_output" ]]; then
TRAY_POSITION=right
fi
polybar --reload main </dev/null >"/var/tmp/polybar-$m.log" 2>&1 200>&- &
disown
done
) 200>/var/tmp/polybar-launch.lock

View file

@ -0,0 +1,22 @@
#!/bin/bash
UNREAD_ONLY=true
MAIL_DIR=~/.local/share/mail
mailcount=0
if [[ -d ${MAIL_DIR} ]]; then
for dir in ${MAIL_DIR}/*/; do
# get file count for the unread mailbox, add to count
mailcount=$(( $( ls ${dir}INBOX/new | wc -l ) + $mailcount ))
# also add the rest of the inbox if var is set
if !($UNREAD_ONLY); then
mailcount=$(( $( ls ${dir}INBOX/cur | wc -l ) + $mailcount ))
fi
done
fi
echo ${mailcount}

View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
while read LINE; do
if echo "$LINE" | grep -q 'Connected'; then
# get the relay (3rd word) | drop the wireguard/openvpn suffix | make it uppercase
# just replace this with whatever style you like
OUTPUT=$(echo $LINE | cut -d " " -f 3 | cut -d "-" -f 1 | tr '/a-z/' '/A-Z/')
ICON=" "
else
ICON=" "
fi
echo $ICON $OUTPUT
done < <(mullvad status listen)

View file

@ -0,0 +1,78 @@
#!/usr/bin/env bash
dir="~/.config/rofi"
uptime=$(uptime -p | sed -e 's/up //g')
rofi_command="rofi -theme $dir/powermenu.rasi"
# Options
lock=" Lock"
suspend=" Sleep"
logout=" Logout"
reboot=" Restart"
shutdown=" Shutdown"
# Confirmation
confirm_exit() {
rofi -dmenu\
-i\
-no-fixed-num-lines\
-p "Are You Sure? : "\
-theme $dir/confirm.rasi
}
# Message
msg() {
rofi -theme "$dir/message.rasi" -e "Available Options - yes / y / no / n"
}
# Variable passed to rofi
options="$lock\n$suspend\n$logout\n$reboot\n$shutdown"
chosen="$(echo -e "$options" | $rofi_command -p "Uptime: $uptime" -dmenu -selected-row 0)"
case $chosen in
$shutdown)
ans=$(confirm_exit &)
if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then
i3exit shutdown
elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then
exit 0
else
msg
fi
;;
$reboot)
ans=$(confirm_exit &)
if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then
i3exit reboot
elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then
exit 0
else
msg
fi
;;
$lock)
i3exit lock
;;
$suspend)
ans=$(confirm_exit &)
if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then
i3exit suspend
elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then
exit 0
else
msg
fi
;;
$logout)
ans=$(confirm_exit &)
if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then
i3exit logout
elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then
exit 0
else
msg
fi
;;
esac

View file

@ -0,0 +1,19 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAwRGvDXppBb80wRL9kSYPq+4DDy/UBn0lDVmMexjs2VUw
cGTlsNpmiNjd09XgQYQUr1bp2JyV8sCsfgk2eaySV+XSsVkUNzHbhx1kB5fZNnBg
0ukBfrQmTiYQHllCNF6LbA+GYUM3Q22a37ZLxxMlHeT+sm3T/s+FiIlVofAjwQfa
sTxXVVg7tpJIWv9+2WxQ+FbUi3VYWnUYeLqcsBbw99jSrcCGmrIebi92kajHISOK
4a2tF5RS+3xPUNsopHRwhWAhFgIvIeNt90DFnujgQjtcR8pvF6iMOlBUMVBuHB2L
/Sm+swVc8VAeMfJ7jmJIC1HYcl7AgQuHnDFbE2+Gk9q2amIKadSiNPpKFLJmk80e
xtYckly2tNjWDCG0fRua0NO1A4flRpAz62dAScifvzNxGvgxiqFapNXLzHlcBWY/
KnS1am2xXgneHHT3+/chuJ1BlaoJ5q6QsbyN4QYN9onCC4mV7vhcVVU48TTjPn+b
HYmTY7Y7XZdzGDJGBTYrVHqx8FhcswOXHpSTFpYgKmR/ywZ3vYwoNlKGFWBaem7J
VlrKRQ3L5WT/r14lNTWAfv9PpzNcXDZ1hCzDeEs2Zwm6ouuDclDg9qEDxz3lH9sl
CEabocOt3om5Bzs2HkyJr96lmWwfPkR00fvb1vEPeidE5iCBZ5/E57PEr2ps1fUV
poROi2YjAhKMujJTNNaR3fc6dofhZ8fRzMJt9EA1IIhhizUA+iX1VwQfZRlZKgE0
GKEh1m01p+p5QW3GHfe03nB6GxoF8NOevhGbZlOxK+lU0k1X9qZB3TJ5HoihPTbx
Y9gHAJfP6vULQz+B6pS/iSr955i/F3WRVUILGmYhDBEReDz89WI+v1HbNyU1Ud//
wmHycqESQmxWEqDle2HU2A==
=CjYQ
-----END PGP MESSAGE-----

6
dot_urlview.tmpl Normal file
View file

@ -0,0 +1,6 @@
REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):]
{{ if eq .chezmoi.os "darwin" -}}
COMMAND open -a "Firefox" %s
{{ else }}
COMMAND /usr/bin/firefox -new-tab %s
{{- end -}}

7
dot_zprofile.tmpl Normal file
View file

@ -0,0 +1,7 @@
export EDITOR=nvim
export TERMINAL=wezterm
{{ if eq .chezmoi.os "darwin" -}}
# homebrew
eval "$(/opt/homebrew/bin/brew shellenv)"
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
{{- end -}}

56
dot_zshenv Normal file
View file

@ -0,0 +1,56 @@
### COMMON ###
export EDITOR=nvim
# don't write a less history
export LESSHISTFILE=-
# check if .local/bin is directory, if not create it
if [ ! -d "$HOME/.local/bin" ]; then
mkdir -p "$HOME/.local/bin"
fi
export PATH="$HOME/.local/bin:$PATH"
if [ -d "/usr/local/sbin" ]; then
export PATH="/usr/local/sbin:$PATH"
fi
### LINUX ### - TODO: replace with chezmoi os check
if [[ $(uname -s) == 'Linux' ]]; then
BROWSER="$(which firefox)"
export BROWSER
fi
### MACOS ###
export XDG_CONFIG_HOME="$HOME/.config"
if [[ -x "$(command -v brew)" ]]; then
export PATH="/opt/homebrew/sbin:$PATH"
fi
### KUBERNETES ###
# add to path if '.krew' exists or $KREW_ROOT is set
if [ -d "$HOME/.krew" ] || [ -z "$KREW_ROOT" ]; then
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
fi
export KUBE_EDITOR="$EDITOR"
### PYTHON ###
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
if [ -d "$HOME/.pyenv/bin" ]; then
export PATH="$PATH:$HOME/.pyenv/bin"
fi
### RUST ###
if [ -f "$HOME/.cargo/env" ]; then
. "$HOME/.cargo/env"
fi
export PATH="$PATH:$HOME/.cargo/bin"
### NODE ###
export NVM_DIR="$HOME/.config/nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# yarn
export PATH="$PATH:$HOME/.yarn/bin"
export PATH="/opt/homebrew/opt/libpq/bin:$PATH"
### GO ###
export PATH="$PATH:$HOME/go/bin"

170
dot_zshrc Normal file
View file

@ -0,0 +1,170 @@
# vim:fileencoding=utf-8:foldmethod=marker
# load starship
eval "$(starship init zsh)"
### plugins via antigen {{{
# load antigen
source "$HOME/.antigen/antigen.zsh"
antigen use oh-my-zsh
antigen bundle colored-man-pages
antigen bundle colorize
antigen bundle docker-compose
antigen bundle git
antigen bundle gpg-agent
antigen bundle kubectl
# omz's vi-mode doesn't vibe with starship
antigen bundle jeffreytse/zsh-vi-mode
antigen bundle greymd/docker-zsh-completion
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-completions
antigen bundle zsh-users/zsh-syntax-highlighting
antigen apply
# }}}
### basics {{{
# history
export HISTFILE="$HOME/.zhistory"
export HISTSIZE=10000
export SAVEHIST=10000
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_IGNORE_DUPS
# fuck if available
[[ -x "$(command -v thefuck)" ]] && eval $(thefuck --alias)
# credit to locotay
function bitch() {
[ "$1" = "you" ] && [ "$2" = "better" ] && sudo "${@:3}"
}
# }}}
### aliases & functions {{{
## basics, from common to peculiar tweaks {{{
# use exa+lsd to list directories, if available, falling back to ls aliases
if [ -x "$(command -v lsd)" ] && [ -x "$(command -v exa)" ]; then
# add a bit more space between the file icon & name
export EXA_ICON_SPACING=1
# lsd is the better drop-in replacement
alias ls='lsd'
# only exa can do this, atm
alias l='exa --icons --group-directories-first'
alias ll='exa --icons --group-directories-first --git -l'
alias la='exa --icons --group-directories-first --git -la'
# only lsd can do this, atm
alias lt='lsd -l --total-size'
alias lat='lsd -lA --total-size'
else
alias l='ls'
alias ll='ls -l'
alias la='ls -lA'
fi
# use neovim as vim, if installed
if [[ -x "$(command -v nvim)" ]]; then
alias vim='nvim'
# open vimwiki
alias wiki='nvim -c VimwikiIndex'
fi
if [[ -x "$(command -v newsboat)" ]]; then
alias nb='newsboat -C ~/.config/newsboat/config -u ~/.config/newsboat/urls'
fi
[[ -x "$(command -v nvim)" ]] && alias tt='taskwarrior-tui'
# switch between yubikeys for the same GPG key
alias switch_yubikeys='gpg-connect-agent "scd serialno" "learn --force" /bye'
# list tty devices on macOS, useful for Arduino & other boards
alias lstty='ls /dev | grep -E "^(tty\.|cu\.)" --color=never'
#}}}
## OS-dependent tweaks {{{
# manage yabai & ecosystem easier
function twm() {
case "$1" in
"start")
brew services start skhd
brew services start yabai
;;
"stop")
brew services stop skhd
brew services stop yabai
;;
"restart")
launchctl kickstart -k "gui/${UID}/homebrew.mxcl.skhd"
launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai"
;;
*)
echo "Usage: twm <start|restart|stop>"
return 1
;;
esac
}
function icat() {
if [ "$TERM_PROGRAM" = "WezTerm" ]; then
wezterm imgcat "$@"
elif [ "$TERM" = "xterm-kitty" ]; then
kitty +kitten imgcat "$@"
else
echo 'No image viewer defined for this terminal'
fi
}
#}}}
## development {{{
# use the combination of colordiff & diff-so-fancy
if [ -x "$(command -v colordiff)" ] && [ -x "$(command -v diff-so-fancy)" ]; then
function diff() {
colordiff -N -u "$@" | diff-so-fancy
}
function kdiff() {
KUBECTL_EXTERNAL_DIFF="colordiff -N -u"
kubectl diff "$@" | diff-so-fancy
}
fi
# }}}
## chezmoi
alias cma='chezmoi add'
alias cmap='chezmoi apply'
alias cmcd='cd $(chezmoi source-path)'
alias cmd='chezmoi diff'
alias cme='chezmoi edit'
alias cmm='chezmoi merge'
alias cmrm='chezmoi remove'
alias cmst='chezmoi status'
alias cmup='chezmoi update'
alias onefetch='onefetch --true-color=never'
### }}}
### languages & frameworks {{{
# python, my old friend
if [ -x "$(command -v pyenv)" ]; then
eval "$(pyenv init -)"
fi
# }}}
### technical BS {{{
# some bs seting the window title, apparently
function set_win_title(){
echo -ne "\033]0;$(basename "$PWD")\007"
}
precmd_functions+=(set_win_title)
# }}}
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

View file

@ -0,0 +1,16 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAScqMcrDn0VKl7IBjwUsE9R7MDLYN+Dsd+A3ChSFiKTww
T2wwdWqjRpTtqRucbm5bOJ8374kudX01CgygjQuYVZv+dnvg9G4DA9w4a3dx0X6+
0sEPAf6ckVZ/EfxNAdS1BXF0tZ6JpiqUN8nv2lHBDDCY7bk+SbPnDHT97n4e21M6
QeTHt9aYlvvn3KOkQ40XH6Sp7YyaNNBi7w8aE8JhId9z7LVCkND8dYSCBE+k5qnM
71LeWJY+c845COjuK917L9X6CgSfYLi5oe9u/CrF0P2Jdj65eBRqz+WSw9OUz9sR
p5so4NhzXU7tUZAokDeRuuAiuaQjOH/Ye/YucqCioV1ATUaa3j8gb8M8lrO+0EJK
4bxH8qdWlGZS4WTH97l/1CrpgVrt6OtW9jEZK4CddyuPS/uY1CPdrbyAMRugRw19
Z/pGp0cNmNXk2iUa3QUrdnyRfv68sCv0wB+xrqgppU/90JNd2bCAb+RIWU8mtOHe
CPXsWlEtY0VkhDto2o4LEJEq/TIrQBUerubSo1p/r10UBws/1NU3YcdhSTEYdy2b
yUUKz4H9E4EK9AiHLtMQ4I15ojToivvb7rJDaGZQGjN75qev0u15qELLjhNLlAS/
l5IF4UYIT3t3puZxmNQuH9GyfOVzbZGNZ+kjVSXEgArhhQZBi/5UHVGG09WEfAyr
i+vhtZlxFu1vBmiK64stiIN0cmICH1Y4UyGZi5KCiXlYdw==
=b25X
-----END PGP MESSAGE-----

View file

@ -0,0 +1,12 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAhC83Q146cdQ9FqgO9BrkXmh77m/0YZ+RdSZPnQKvQQ4w
WCkoVukVe3T8BnoRAMGEBUYmy5Hd1CFUbKVPD+GCt8IslunaT0CO9ITyEPS4RZka
0sBRAf+rSCDwtWHgxk0LRS+4WocvxTnoGlMjxUfI+ljRr9wNv2RfWDbMzFkSpZm2
nFcpQOOsQBfKoSmXao0ZttbjpCnHvQZac57YAujpxvR/oa+fK73wedhh8PLCLTpq
aJhwkB3X4NgPFLcZ5COF1Y+EbNQgrnIS5bP1u2TQskx7h0sMBnj5W7Yx+ei4nz1M
3pp8jnIzWmol6MiEfkpQEYGYtsJoT+2aRETNF5MDphGcOTp+fmRz0XYDmw69/QJZ
PjTFsyxUIdPEs/RZBGrR8TW8aHPpP5Bh7oMpA5Ewxdm07+UXKjg9EjSXLj8ubB0a
xTjS/rIr9IRBZP9BkZV8+eBJcmF25o0vbt55MKwonnoY522t
=0DgQ
-----END PGP MESSAGE-----

View file

@ -0,0 +1,9 @@
-----BEGIN PGP MESSAGE-----
hF4Dt852JJsu9zQSAQdAinMDIj5T8qZNg5p8XNjDjZph3OZRUfSWd4vEYVQPIRUw
4+qunbjT8S3d9LJHaTtPLgrc/Ky2If3IIGIIv5qiSqNG3Bebhh2SP7LUpO1au6ro
0m0BbTx4S0oM6ShewCMo4EE5yNXlg3G6g4nRwN51jxuxjHpIj+jNTkIDGfb/iA5U
ZCsF1461mdHdbfbwlshMaviawnSAs2Rbc0Jery+dQATIJhm+NdZbNiyudZwVCalW
aE5pHWvZm8PE8psxy3VB
=Imms
-----END PGP MESSAGE-----

View file

@ -0,0 +1,8 @@
enable-ssh-support
default-cache-ttl 60
max-cache-ttl 120
default-cache-ttl-ssh 60
max-cache-ttl-ssh 120
{{ if eq .chezmoi.os "darwin" }}
pinentry-program /opt/homebrew/bin/pinentry-mac
{{ end }}

View file

@ -0,0 +1,2 @@
no-emit-version
use-agent

Binary file not shown.

View file

@ -0,0 +1,3 @@
„^·Ξv$.χ4@Λl@”~ΣhgJS0‡M6ΛqΞΜ<CE9E>Β.?²®„;0μι1PG/ΎA<CE8E>‡Ψ†μAΫX
eygμμΕΑ†Ν› 7<>΅γΈFy#™Φβ€ό<E282AC>xό<>ϋ,«σΟς<CE9F>_—ΩU .ΑνΣ±¦Ch<43>° ¤p£kΌγjσCτGίΔ5LΥφΦ°Diώ <0B>Μig®4ά,Η@ρ&<26>²ρH
Maή¤oΗϊJVwξ>ζZέ<5A><CEAD>σΏΨΰ*HΕΏ¨§/_B§MUΰ><3E>Ϊ

View file

@ -0,0 +1 @@
A476C39610E53A689A57BD0D0B89BC45007EE9CC

View file

@ -0,0 +1,2 @@
„^·Îv$.÷4@y¤®5ª#LðÄ"Ê{ Ò_Þõ™WÎJã¢ÆŽ\s0}µ”ô²N DjÞÄN¦qú‡¦pغÑX kDø—抺-ˆ&N8h¤wï¦SÒd­­óúmyÞ€u3èF2ÃÒ.8yÏÐ\l{ðÓ<>Óeš9b0A»Ú³ÿ×o ]Çþ£¢?éð€Á´~EêN\—åÔ~ÞØý.ŠOüáÚë „¢qs¥[z
é

View file

@ -0,0 +1,3 @@
„^·Îv$.÷4@-Ý3mU<6D>sHwËâÒ;1Ê=äfi«íµž±Mv0û¡Ì™ãœ‡_)¼srXw³r>RŒØ¢cG×T™0t©`_Z‰zS:/š®Òr<18>çALž[.ÆÆ×f$P&ÖÅÔ§VŠgÀ}sš«1 µË K ,a°„L<1A>T<02>îp,Û0Ð a8 ëj3Y_ð˜ë¯áá®(# JV†Ñ
`çAjÄG×v*ÕÀ§©ºC,mÇ §;Å!Í
†ù

Some files were not shown because too many files have changed in this diff Show more