Compare commits
No commits in common. "master" and "main" have entirely different histories.
@ -9,27 +9,24 @@ alias cp='cp -i'
|
|||||||
alias mv='mv -i'
|
alias mv='mv -i'
|
||||||
|
|
||||||
# useful commands
|
# useful commands
|
||||||
alias pp="paruz -S"
|
alias p="sudo pacman"
|
||||||
alias pr="paruz -R"
|
alias y="yay"
|
||||||
alias upgrade="sudo pacman -Syyu"
|
alias upgrade="sudo pacman -Syyu && yay -Syyu"
|
||||||
alias ls="exa --icons"
|
alias ls="exa --group-directories-first -lh"
|
||||||
alias l="exa --icons --group-directories-first -lh"
|
alias l="exa --group-directories-first -lh"
|
||||||
alias la="exa --icons --group-directories-first -alh"
|
alias la="exa --group-directories-first -alh"
|
||||||
alias lt="exa --icons --group-directories-first -lh --tree"
|
|
||||||
alias llt="exa --icons --group-directories-first -alh --tree"
|
|
||||||
alias print="printf"
|
alias print="printf"
|
||||||
alias q="exit"
|
alias q="exit"
|
||||||
alias x="exit"
|
|
||||||
# nvim edits
|
# nvim edits
|
||||||
alias cfi3="nvim ~/.config/i3/config"
|
alias cfi3="nvim ~/.config/i3/config"
|
||||||
alias cfi3s="nvim ~/.config/i3status/config"
|
alias cfi3s="nvim ~/.config/i3status/config"
|
||||||
alias cfn="nvim ~/.config/nvim/init.vim"
|
alias cfn="nvim ~/.config/nvim/init.vim"
|
||||||
alias e="nvim"
|
alias e="nvim ."
|
||||||
|
|
||||||
# cd commands
|
# cd commands
|
||||||
alias c="cd ~/.config"
|
alias c="cd ~/.config"
|
||||||
alias cuni="cd ~/Documents/Uni/CS && l"
|
alias cuni="cd ~/Documents/Uni/CS && l"
|
||||||
|
|
||||||
# cli applications
|
# cli applications
|
||||||
alias yt="youtube-viewer"
|
alias yt="youtube-viewer"
|
||||||
|
|
||||||
@ -37,14 +34,5 @@ alias yt="youtube-viewer"
|
|||||||
alias gs="git status"
|
alias gs="git status"
|
||||||
alias gp="git push"
|
alias gp="git push"
|
||||||
alias ga="git add"
|
alias ga="git add"
|
||||||
alias gd="git diff origin/master"
|
|
||||||
|
|
||||||
#cat is now bat!
|
|
||||||
alias cat="bat"
|
|
||||||
|
|
||||||
# kitty
|
|
||||||
alias icat="kitty +kitten icat "
|
|
||||||
|
|
||||||
function fman() {
|
|
||||||
man -k . | fzf -q "$1" --prompt='man> ' --preview $'echo {} | tr -d \'()\' | awk \'{printf "%s ", $2} {print $1}\' | xargs -r man' | tr -d '()' | awk '{printf "%s ", $2} {print $1}' | xargs -r man
|
|
||||||
}
|
|
||||||
|
15
.bashrc
15
.bashrc
@ -5,23 +5,15 @@ export VISUAL=/usr/bin/nvim
|
|||||||
export EDITOR=/usr/bin/nvim
|
export EDITOR=/usr/bin/nvim
|
||||||
export SPOTIPY_CLIENT_ID='aafa7f3fb81f46f681415f2cedfda2c8'
|
export SPOTIPY_CLIENT_ID='aafa7f3fb81f46f681415f2cedfda2c8'
|
||||||
export SPOTIPY_CLIENT_SECRET='6ebee1d932c34fcdb711d4bf14dac0de'
|
export SPOTIPY_CLIENT_SECRET='6ebee1d932c34fcdb711d4bf14dac0de'
|
||||||
export BW_SESSION="dFERFxdk1zdXiPxf54dULKCONLUSfUsg3KJ65lqIxhSy0SVbNCO5redWZ85YaGQ4ShGAV6zuKif7RO4dAy/K4g=="
|
|
||||||
export BROWSER=brave
|
export BROWSER=brave
|
||||||
#export GOROOT=/usr/local/go
|
|
||||||
#export GOPATH=$HOME/go
|
|
||||||
#export GOBIN=$HOME/go/bin
|
|
||||||
#export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$GOBIN
|
|
||||||
#export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store"
|
#export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store"
|
||||||
#export GNUPGHOME="${XDG_DATA_HOME:-$HOME/.local/share}/gnupg"
|
#export GNUPGHOME="${XDG_DATA_HOME:-$HOME/.local/share}/gnupg"
|
||||||
# - Ui4axsk9mwfw? -
|
# - Ui4axsk9mwfw? -
|
||||||
|
|
||||||
set -o vi
|
set -o vi
|
||||||
bind -m vi-command 'Control-l: clear-screen'
|
bind -m vi-command 'Control-l: clear-screen'
|
||||||
bind -m vi-insert 'Control-l: clear-screen'
|
bind -m vi-insert 'Control-l: clear-screen'
|
||||||
|
|
||||||
#ufetch
|
#ufetch
|
||||||
#bash ~/Git/fetch.sh/fetch.sh
|
|
||||||
#bash ~/.scripts/we
|
|
||||||
|
|
||||||
#(cat $HOME/.config/wpg/sequences &)
|
#(cat $HOME/.config/wpg/sequences &)
|
||||||
function lazygit() {
|
function lazygit() {
|
||||||
git add .
|
git add .
|
||||||
@ -172,8 +164,3 @@ eval "$(zoxide init bash)"
|
|||||||
eval "$(starship init bash)"
|
eval "$(starship init bash)"
|
||||||
|
|
||||||
|
|
||||||
# BEGIN_KITTY_SHELL_INTEGRATION
|
|
||||||
if test -n "$KITTY_INSTALLATION_DIR" -a -e "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; then source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"; fi
|
|
||||||
# END_KITTY_SHELL_INTEGRATION
|
|
||||||
|
|
||||||
source /home/simon/.config/broot/launcher/bash/br
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,7 +1,6 @@
|
|||||||
env:
|
env:
|
||||||
TERM: xterm-256color
|
TERM: xterm-256color
|
||||||
|
|
||||||
|
|
||||||
scrolling:
|
scrolling:
|
||||||
history: 5000
|
history: 5000
|
||||||
|
|
||||||
@ -9,7 +8,6 @@ window:
|
|||||||
padding:
|
padding:
|
||||||
x: 0
|
x: 0
|
||||||
y: 0
|
y: 0
|
||||||
draw_bold_text_with_bright_colors: true
|
|
||||||
|
|
||||||
colors:
|
colors:
|
||||||
# Default colors
|
# Default colors
|
||||||
@ -107,11 +105,9 @@ font:
|
|||||||
#family: IBM Plex Mono
|
#family: IBM Plex Mono
|
||||||
#family: Source Code Pro
|
#family: Source Code Pro
|
||||||
#family: BlexMono Nerd Font
|
#family: BlexMono Nerd Font
|
||||||
#family: Fira Code
|
family: Fira Code
|
||||||
#family: Blex Mono Bold Nerd Font Complete
|
|
||||||
family: Comic Code Ligatures
|
|
||||||
style:
|
style:
|
||||||
size: 12
|
size: 6.95
|
||||||
|
|
||||||
url:
|
url:
|
||||||
# URL launcher
|
# URL launcher
|
||||||
@ -132,3 +128,4 @@ Key_bindings:
|
|||||||
- { key: C, mods: Control|Alt, action: Copy }
|
- { key: C, mods: Control|Alt, action: Copy }
|
||||||
- { key: Return, mods: Control, action: SpawnNewInstance }
|
- { key: Return, mods: Control, action: SpawnNewInstance }
|
||||||
- { key: T, mods: Control, action: SpawnNewInstance }
|
- { key: T, mods: Control, action: SpawnNewInstance }
|
||||||
|
|
||||||
|
194
i3/config
194
i3/config
@ -3,6 +3,8 @@
|
|||||||
#
|
#
|
||||||
# Should you change your keyboard layout some time, delete
|
# Should you change your keyboard layout some time, delete
|
||||||
# this file and re-run i3-config-wizard(1).
|
# this file and re-run i3-config-wizard(1).
|
||||||
|
#
|
||||||
|
|
||||||
# i3 config file (v4)
|
# i3 config file (v4)
|
||||||
#
|
#
|
||||||
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
||||||
@ -17,10 +19,8 @@ set_from_resource $split i3wm.color10 "#9E664B0"
|
|||||||
#font pango: Source Code Pro 12px
|
#font pango: Source Code Pro 12px
|
||||||
#font pango: IBM Plex Mono 11px
|
#font pango: IBM Plex Mono 11px
|
||||||
#font pango: JetBrains Mono 8
|
#font pango: JetBrains Mono 8
|
||||||
font pango: BlexMono Nerd Font 11px
|
#font pango: BlexMono Nerd Font 11px
|
||||||
#font pango: Iosevka Nerd Font 13px
|
font pango: Fira Code 11px
|
||||||
#font pango: Comic Code Ligatures Medium 11px
|
|
||||||
#font pango: Fira Code 11px
|
|
||||||
|
|
||||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
||||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
||||||
@ -48,40 +48,38 @@ font pango: BlexMono Nerd Font 11px
|
|||||||
|
|
||||||
# ------------------------- NEW COLORS -------------------------
|
# ------------------------- NEW COLORS -------------------------
|
||||||
# class border backgr. text indicator child_border
|
# class border backgr. text indicator child_border
|
||||||
#client.focused $coloract $coloract $white $split $coloract
|
client.focused $coloract $coloract $white $split $coloract
|
||||||
#client.focused_inactive $coloract $coloract $white $split $coloract
|
client.focused_inactive $coloract $coloract $white $split $coloract
|
||||||
#client.unfocused $colorin $colorin #888888 $split $colorin
|
client.unfocused $colorin $colorin #888888 $split $colorin
|
||||||
#client.urgent #2f343a #900000 $white #900000 #900000
|
client.urgent #2f343a #900000 $white #900000 #900000
|
||||||
#client.placeholder #000000 #0c0c0c $white #000000 #0c0c0c
|
client.placeholder #000000 #0c0c0c $white #000000 #0c0c0c
|
||||||
|
|
||||||
|
client.background #ffffff
|
||||||
|
|
||||||
|
|
||||||
#client.background #ffffff
|
|
||||||
|
|
||||||
# -------------------- DRACULA THEME ----------------------------
|
|
||||||
client.focused #6272A4 #6272A4 #F8F8F2 #FF79C6 #6272A4
|
|
||||||
client.focused_inactive #44475A #44475A #F8F8F2 #44475A #44475A
|
|
||||||
client.unfocused #282A36 #282A36 #BFBFBF #282A36 #282A36
|
|
||||||
client.urgent #44475A #FF5555 #F8F8F2 #FF5555 #FF5555
|
|
||||||
client.placeholder #282A36 #282A36 #F8F8F2 #282A36 #282A36
|
|
||||||
#
|
|
||||||
client.background #F8F8F2
|
|
||||||
|
|
||||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
||||||
# they are included here as an example. Modify as you see fit.
|
# they are included here as an example. Modify as you see fit.
|
||||||
|
|
||||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
||||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||||
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork --color=000000
|
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
||||||
exec --no-startup-id setxkbmap -option
|
exec --no-startup-id setxkbmap -option
|
||||||
exec --no-startup-id autotiling
|
|
||||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
||||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
||||||
exec --no-startup-id nm-applet
|
exec --no-startup-id nm-applet
|
||||||
exec --no-startup-id bash ~/.fehbg &
|
exec --no-startup-id redshift
|
||||||
# exec --no-startup-id guake #retire until its fixed?
|
#exec --no-startup-id teams
|
||||||
|
#exec --no-startup-id i3-msg 'workspace 10; exec teams'
|
||||||
|
#exec --no-startup-id i3-msg 'workspace 9; exec discord'
|
||||||
|
#exec --no-startup-id discord
|
||||||
|
#exec --no-startup-id nitrogen --restore
|
||||||
|
exec --no-startup-id nitrogen --set-zoom-fill --save /home/simon/Pictures/wallpapers/vidar-nordli-mathisen-Sk32_wG8lcQ-unsplash.jpg
|
||||||
|
#exec --no-startup-id wpg -mi && wpg --brt $(wpg -c) 10.6 && wpg -s $(wpg -c)
|
||||||
|
exec --no-startup-id guake
|
||||||
exec --no-startup-id picom -c
|
exec --no-startup-id picom -c
|
||||||
exec --no-startup-id xfce4-power-manager
|
exec --no-startup-id xfce4-power-manager
|
||||||
exec --no-startup-id gammy
|
|
||||||
exec --no-startup-id emacs --daemon
|
|
||||||
|
|
||||||
# Use pactl to adjust volume in PulseAudio.
|
# Use pactl to adjust volume in PulseAudio.
|
||||||
set $refresh_i3status killall -SIGUSR1 i3status
|
set $refresh_i3status killall -SIGUSR1 i3status
|
||||||
@ -89,22 +87,13 @@ bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT
|
|||||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
||||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||||
|
|
||||||
# Binds for - and + for volume on keypad!
|
# Binds for - and + for volume
|
||||||
bindsym $mod+KP_Add exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
bindsym $mod+KP_Add exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
||||||
bindsym $mod+KP_Subtract exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
bindsym $mod+KP_Subtract exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
||||||
bindsym $mod+KP_Multiply exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
bindsym $mod+KP_Multiply exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||||
|
|
||||||
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
||||||
|
|
||||||
# Use xev to find the keys on the keypad
|
|
||||||
# Binds for swapping between single laptop screen to 2 with an ultrawide
|
|
||||||
bindsym $mod+KP_End exec --no-startup-id bash ~/.scripts/laptop
|
|
||||||
bindsym $mod+KP_Down exec --no-startup-id bash ~/.scripts/ultrawide
|
|
||||||
bindsym $mod+KP_Next exec --no-startup-id bash ~/.scripts/tf2
|
|
||||||
bindsym $mod+KP_Left exec --no-startup-id bash ~/.scripts/one-mon.sh
|
|
||||||
|
|
||||||
# Make a note and push via gotify
|
|
||||||
#bindsym $mod+n exec --no-startup-id bash ~/.scripts/gnote # replaced with QOwnNotes as i use it more
|
|
||||||
|
|
||||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||||
floating_modifier $mod
|
floating_modifier $mod
|
||||||
|
|
||||||
@ -135,28 +124,22 @@ bindsym $mod+Shift+Down move down
|
|||||||
bindsym $mod+Shift+Up move up
|
bindsym $mod+Shift+Up move up
|
||||||
bindsym $mod+Shift+Right move right
|
bindsym $mod+Shift+Right move right
|
||||||
|
|
||||||
|
|
||||||
bindsym $mod+Ctrl+Right resize shrink width 1 px or 1 ppt
|
bindsym $mod+Ctrl+Right resize shrink width 1 px or 1 ppt
|
||||||
bindsym $mod+Ctrl+Up resize grow height 1 px or 1 ppt
|
bindsym $mod+Ctrl+Up resize grow height 1 px or 1 ppt
|
||||||
bindsym $mod+Ctrl+Down resize shrink height 1 px or 1 ppt
|
bindsym $mod+Ctrl+Down resize shrink height 1 px or 1 ppt
|
||||||
bindsym $mod+Ctrl+Left resize grow width 1 px or 1 ppt
|
bindsym $mod+Ctrl+Left resize grow width 1 px or 1 ppt
|
||||||
|
|
||||||
# multi moniter support
|
# multi moniter support
|
||||||
# focus monitors
|
bindsym $mod+greater move workspace to output right
|
||||||
bindsym $mod+bracketleft focus output left
|
bindsym $mod+less move workspace to output left
|
||||||
bindsym $mod+bracketright focus output right
|
|
||||||
|
|
||||||
# move to monitors
|
|
||||||
bindsym $mod+Shift+bracketleft move output left
|
|
||||||
bindsym $mod+Shift+bracketright move output right
|
|
||||||
|
|
||||||
# split in horizontal orientation
|
# split in horizontal orientation
|
||||||
#bindsym $mod+semicolon split h
|
bindsym $mod+semicolon split h
|
||||||
|
|
||||||
# split in vertical orientation
|
# split in vertical orientation
|
||||||
# bindsym $mod+v split v
|
bindsym $mod+v split v
|
||||||
|
|
||||||
# toggle split windows
|
|
||||||
bindsym $mod+semicolon split toggle
|
|
||||||
|
|
||||||
# enter fullscreen mode for the focused container
|
# enter fullscreen mode for the focused container
|
||||||
bindsym $mod+f fullscreen toggle
|
bindsym $mod+f fullscreen toggle
|
||||||
@ -164,8 +147,7 @@ bindsym $mod+f fullscreen toggle
|
|||||||
# change container layout (stacked, tabbed, toggle split)
|
# change container layout (stacked, tabbed, toggle split)
|
||||||
#bindsym $mod+s layout stacking
|
#bindsym $mod+s layout stacking
|
||||||
#bindsym $mod+w layout tabbed
|
#bindsym $mod+w layout tabbed
|
||||||
#bindsym $mod+s layout toggle tabbed
|
bindsym $mod+s layout toggle split
|
||||||
bindsym $mod+Tab layout toggle tabbed split
|
|
||||||
|
|
||||||
# toggle tiling / floating
|
# toggle tiling / floating
|
||||||
bindsym $mod+space floating toggle
|
bindsym $mod+space floating toggle
|
||||||
@ -174,13 +156,13 @@ bindsym $mod+space floating toggle
|
|||||||
bindsym $mod+Shift+space focus mode_toggle
|
bindsym $mod+Shift+space focus mode_toggle
|
||||||
|
|
||||||
# focus the parent container
|
# focus the parent container
|
||||||
#bindsym $mod+a focus parent
|
bindsym $mod+a focus parent
|
||||||
|
|
||||||
# focus the child container
|
# focus the child container
|
||||||
#bindsym $mod+d focus child
|
#bindsym $mod+d focus child
|
||||||
|
|
||||||
new_window pixel 3
|
new_window pixel 2
|
||||||
default_border pixel 3
|
default_border pixel 2
|
||||||
|
|
||||||
gaps inner 14
|
gaps inner 14
|
||||||
gaps outer 14
|
gaps outer 14
|
||||||
@ -196,20 +178,25 @@ bindsym $mod+shift+o gaps outer current minus 5
|
|||||||
bindsym $mod+BackSpace gaps inner all set 14; gaps outer all set 14
|
bindsym $mod+BackSpace gaps inner all set 14; gaps outer all set 14
|
||||||
bindsym $mod+shift+BackSpace gaps inner all set 0; gaps outer all set 0
|
bindsym $mod+shift+BackSpace gaps inner all set 0; gaps outer all set 0
|
||||||
|
|
||||||
#### Programs
|
|
||||||
bindsym $mod+Return exec kitty
|
|
||||||
bindsym $mod+Shift+Return exec alacritty -e ~/.scripts/web
|
|
||||||
# bindsym $mod+Ctrl+Return exec alacritty -e ~/.scripts/mc #BRING BACK THE MC SERVER???
|
|
||||||
bindsym $mod+x exec xinput-gui
|
|
||||||
bindsym $mod+c exec brave https://calendar.google.com/calendar/u/0/r?pli=1
|
|
||||||
bindsym $mod+Shift+b exec blueman-manager
|
|
||||||
bindsym $mod+p exec bwmenu
|
|
||||||
bindsym $mod+Shift+f exec --no-startup-id thunar
|
|
||||||
bindsym $mod+Ctrl+f exec --no-startup-id alacritty -e ranger
|
|
||||||
bindsym $mod+e exec emacsclient -c -a 'emacs'
|
|
||||||
bindsym $mod+n exec --no-startup-id QOwnNotes
|
|
||||||
|
|
||||||
# Print Screen :::
|
#### Programs
|
||||||
|
|
||||||
|
bindsym $mod+Return exec alacritty
|
||||||
|
bindsym $mod+Shift+Return exec alacritty -e ~/.scripts/web
|
||||||
|
bindsym $mod+Ctrl+Return exec alacritty -e nvim ~/vimwiki/index.md
|
||||||
|
|
||||||
|
|
||||||
|
bindsym $mod+d exec rofi -show run
|
||||||
|
bindsym $mod+Shift+d exec rofi -show drun -show-icons true
|
||||||
|
|
||||||
|
bindsym $mod+c exec gnome-calendar
|
||||||
|
bindsym $mod+Shift+b exec blueman-manager
|
||||||
|
bindsym $mod+Shift+t exec lyx &
|
||||||
|
bindsym $mod+p exec passmenu -l 30
|
||||||
|
bindsym $mod+Shift+p exec gpodder
|
||||||
|
bindsym $mod+Shift+f exec --no-startup-id nautilus
|
||||||
|
bindsym $mod+Ctrl+f exec --no-startup-id alacritty -e ranger
|
||||||
|
|
||||||
#WHOLE SCREEN
|
#WHOLE SCREEN
|
||||||
bindsym Print exec scrot $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png
|
bindsym Print exec scrot $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png
|
||||||
|
|
||||||
@ -220,36 +207,33 @@ bindsym $mod+Print exec scrot -u $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%
|
|||||||
#bindsym --release $mod+Shift+Print exec --no-startup-id scrot -s $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png
|
#bindsym --release $mod+Shift+Print exec --no-startup-id scrot -s $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png
|
||||||
bindsym --release $mod+Shift+Print exec --no-startup-id bash /home/simon/.scripts/vscrnpaste
|
bindsym --release $mod+Shift+Print exec --no-startup-id bash /home/simon/.scripts/vscrnpaste
|
||||||
|
|
||||||
##OPEN DIR
|
|
||||||
bindsym $mod+s exec --no-startup-id nautilus ~/Pictures/Screenshots/
|
|
||||||
|
|
||||||
#### ROFI
|
#### ROFI
|
||||||
#bindsym $mod+e exec --no-startup-id rofi -show
|
bindsym $mod+e exec --no-startup-id rofi -show emoji -modi emoji
|
||||||
bindsym Menu exec --no-startup-id rofi -show
|
|
||||||
bindsym $mod+Shift+e exec --no-startup-id rofi -show emoji -modi emoji
|
bindsym $mod+Shift+e exec --no-startup-id rofi -show
|
||||||
bindsym $mod+d exec rofi -show run
|
|
||||||
bindsym $mod+Shift+d exec rofi -show drun -show-icons true
|
|
||||||
|
|
||||||
#neomutt mail
|
#neomutt mail
|
||||||
#bindsym $mod+m exec --no-startup-id alacritty -e neomutt
|
bindsym $mod+m exec --no-startup-id alacritty -e neomutt
|
||||||
#bindsym $mod+m exec --no-startup-id kitty -e neomutt
|
|
||||||
#bindsym $mod+Shift+m exec --no-startup-id mullvad-vpn #not used atm!
|
|
||||||
|
|
||||||
#float certian windows
|
#float certian windows
|
||||||
|
|
||||||
for_window [class="feh" instance="feh"] floating enable
|
for_window [class="feh" instance="feh"] floating enable
|
||||||
for_window [class="org.pwmt.zathura" instance="zathura"] floating enable
|
for_window [class="org.pwmt.zathura" instance="zathura"] floating enable
|
||||||
for_window [class="gl" instance="mpv"] floating enable
|
for_window [class="gl" instance="mpv"] floating enable
|
||||||
for_window [instance="gammy"] floating enable
|
|
||||||
for_window [class="^.*"] border pixel 3
|
|
||||||
|
|
||||||
#wpg
|
#wpg
|
||||||
#bindsym $mod+$alt+t exec wpg -m && wpg --brt $(wpg -c) 10.6 && wpg -s $(wpg -c) && bash /home/simon/.scripts/getwal
|
#bindsym $mod+$alt+t exec wpg -m && wpg --brt $(wpg -c) 10.6 && wpg -s $(wpg -c) && bash /home/simon/.scripts/getwal
|
||||||
|
|
||||||
|
#bindsym $mod+$alt+t exec nitrogen --set-zoom-fill --random /home/simon/Pictures/wallpapers/
|
||||||
|
bindsym $mod+$alt+t exec nitrogen --set-zoom-fill /home/simon/Pictures/wallpapers/vidar-nordli-mathisen-Sk32_wG8lcQ-unsplash.jpg
|
||||||
|
|
||||||
bindsym XF86MonBrightnessDown exec light -U 5 # decrease screen brightness
|
bindsym XF86MonBrightnessDown exec light -U 5 # decrease screen brightness
|
||||||
bindsym XF86MonBrightnessUp exec light -A 5 # increase screen brightness
|
bindsym XF86MonBrightnessUp exec light -A 5 # increase screen brightness
|
||||||
bindsym $mod+w exec --no-startup-id brave
|
bindsym $mod+w exec --no-startup-id brave www.simonkellet.xyz
|
||||||
bindsym $mod+Shift+w exec --no-startup-id qutebrowser simonkellet.xyz
|
bindsym $mod+Shift+w exec --no-startup-id qutebrowser www.simonkellet.xyz
|
||||||
bindsym $mod+Ctrl+w exec --no-startup-id kitty -e amfora simonkellet.xyz
|
bindsym $mod+Ctrl+w exec --no-startup-id alacritty -e amfora simonkellet.xyz
|
||||||
|
|
||||||
# Define names for default workspaces for which we configure key bindings later on.
|
# Define names for default workspaces for which we configure key bindings later on.
|
||||||
# We use variables to avoid repeating the names in multiple places.
|
# We use variables to avoid repeating the names in multiple places.
|
||||||
@ -264,18 +248,6 @@ set $ws8 "8"
|
|||||||
set $ws9 "9"
|
set $ws9 "9"
|
||||||
set $ws10 "10"
|
set $ws10 "10"
|
||||||
|
|
||||||
workspace 1 output primary
|
|
||||||
workspace 2 output primary
|
|
||||||
workspace 3 output primary
|
|
||||||
workspace 4 output primary
|
|
||||||
workspace 5 output primary
|
|
||||||
|
|
||||||
workspace 6 output eDP-1
|
|
||||||
workspace 7 output eDP-1
|
|
||||||
workspace 8 output eDP-1
|
|
||||||
workspace 9 output eDP-1
|
|
||||||
workspace 10 output eDP-1
|
|
||||||
|
|
||||||
# switch to workspace
|
# switch to workspace
|
||||||
bindsym $mod+1 workspace number $ws1
|
bindsym $mod+1 workspace number $ws1
|
||||||
bindsym $mod+2 workspace number $ws2
|
bindsym $mod+2 workspace number $ws2
|
||||||
@ -332,10 +304,10 @@ mode "resize" {
|
|||||||
bindsym $mod+r mode "default"
|
bindsym $mod+r mode "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
#bindsym $mod+r mode "resize" #not used!
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
|
set $Locker i3lock && sleep 1
|
||||||
|
|
||||||
#set $Locker i3lock --color=000000 && sleep 1
|
|
||||||
set $Locker sh ~/.config/i3lock/lock.sh
|
|
||||||
set $mode_system (l)lock (e)logout (s)suspend (h)hibernate (r)reboot (Shift+s)shutdown
|
set $mode_system (l)lock (e)logout (s)suspend (h)hibernate (r)reboot (Shift+s)shutdown
|
||||||
|
|
||||||
mode "$mode_system" {
|
mode "$mode_system" {
|
||||||
@ -350,8 +322,10 @@ mode "$mode_system" {
|
|||||||
bindsym Return mode "default"
|
bindsym Return mode "default"
|
||||||
bindsym Escape mode "default"
|
bindsym Escape mode "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
bindsym $mod+Escape mode "$mode_system"
|
bindsym $mod+Escape mode "$mode_system"
|
||||||
|
|
||||||
|
#
|
||||||
#set $coloract "#6a8e7a"
|
#set $coloract "#6a8e7a"
|
||||||
#set $colorin "#3c5045"
|
#set $colorin "#3c5045"
|
||||||
#set_from_resource $white i3wm.color15 "#fefbec"
|
#set_from_resource $white i3wm.color15 "#fefbec"
|
||||||
@ -364,33 +338,21 @@ bar {
|
|||||||
modifier none
|
modifier none
|
||||||
status_command i3status
|
status_command i3status
|
||||||
tray_output primary
|
tray_output primary
|
||||||
tray_output eDP-1
|
|
||||||
i3bar_command i3bar
|
i3bar_command i3bar
|
||||||
position top
|
position bottom
|
||||||
separator_symbol "|"
|
separator_symbol "|"
|
||||||
|
|
||||||
# colors {
|
|
||||||
# background #000000
|
|
||||||
# statusline $white
|
|
||||||
# separator $white
|
|
||||||
#
|
|
||||||
# focused_workspace $colorin $split #FFFFFF
|
|
||||||
# active_workspace #333333 #222222 #FFFFFF
|
|
||||||
# inactive_workspace #333333 #222222 #888888
|
|
||||||
# urgent_workspace #2F343A #900000 #FFFFFF
|
|
||||||
# binding_mode #2F343A #900000 #FFFFFF
|
|
||||||
# }
|
|
||||||
# DRACULA THEMMEMEMEMMEE
|
|
||||||
colors {
|
colors {
|
||||||
background #282A36
|
background #000000
|
||||||
statusline #F8F8F2
|
statusline $white
|
||||||
separator #44475A
|
separator $white
|
||||||
|
|
||||||
focused_workspace #44475A #44475A #F8F8F2
|
focused_workspace $colorin $split #FFFFFF
|
||||||
active_workspace #282A36 #44475A #F8F8F2
|
active_workspace #333333 #222222 #FFFFFF
|
||||||
inactive_workspace #282A36 #282A36 #BFBFBF
|
inactive_workspace #333333 #222222 #888888
|
||||||
urgent_workspace #FF5555 #FF5555 #F8F8F2
|
urgent_workspace #2F343A #900000 #FFFFFF
|
||||||
binding_mode #FF5555 #FF5555 #F8F8F2
|
binding_mode #2F343A #900000 #FFFFFF
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bindsym $mod+b bar mode toggle
|
bindsym $mod+b bar mode toggle
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
BLANK='#282a36'
|
|
||||||
CLEAR='#282a36'
|
|
||||||
DEFAULT='#bd93f9'
|
|
||||||
TEXT='#bd93f9'
|
|
||||||
WRONG='#ff5555'
|
|
||||||
VERIFYING='#50fa7b'
|
|
||||||
|
|
||||||
i3lock \
|
|
||||||
--insidever-color=$CLEAR \
|
|
||||||
--ringver-color=$VERIFYING \
|
|
||||||
\
|
|
||||||
--insidewrong-color=$CLEAR \
|
|
||||||
--ringwrong-color=$WRONG \
|
|
||||||
\
|
|
||||||
--inside-color=$BLANK \
|
|
||||||
--ring-color=$DEFAULT \
|
|
||||||
--line-color=$BLANK \
|
|
||||||
--separator-color=$DEFAULT \
|
|
||||||
\
|
|
||||||
--verif-color=$TEXT \
|
|
||||||
--wrong-color=$TEXT \
|
|
||||||
--time-color=$TEXT \
|
|
||||||
--date-color=$TEXT \
|
|
||||||
--layout-color=$TEXT \
|
|
||||||
--keyhl-color=$WRONG \
|
|
||||||
--bshl-color=$WRONG \
|
|
||||||
\
|
|
||||||
--screen 1 \
|
|
||||||
--blur 5 \
|
|
||||||
--clock \
|
|
||||||
--indicator \
|
|
||||||
--time-str="%H:%M:%S" \
|
|
||||||
--date-str="%A %d/%m/%Y" \
|
|
@ -1,31 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
i3lock \
|
|
||||||
--blur 5 \
|
|
||||||
--bar-indicator \
|
|
||||||
--bar-pos y+h \
|
|
||||||
--bar-direction 1 \
|
|
||||||
--bar-max-height 50 \
|
|
||||||
--bar-base-width 50 \
|
|
||||||
--bar-color 000000cc \
|
|
||||||
--keyhl-color 880088cc \
|
|
||||||
--bar-periodic-step 50 \
|
|
||||||
--bar-step 50 \
|
|
||||||
--redraw-thread \
|
|
||||||
\
|
|
||||||
--clock \
|
|
||||||
--force-clock \
|
|
||||||
--time-pos x+5:y+h-80 \
|
|
||||||
--time-color 880088ff \
|
|
||||||
--date-pos tx:ty+15 \
|
|
||||||
--date-color 990099ff \
|
|
||||||
--date-align 1 \
|
|
||||||
--time-align 1 \
|
|
||||||
--ringver-color 8800ff88 \
|
|
||||||
--ringwrong-color ff008888 \
|
|
||||||
--status-pos x+5:y+h-16 \
|
|
||||||
--verif-align 1 \
|
|
||||||
--wrong-align 1 \
|
|
||||||
--verif-color ffffffff \
|
|
||||||
--wrong-color ffffffff \
|
|
||||||
--modif-pos -50:-50
|
|
@ -66,5 +66,5 @@ cpu_temperature 0 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tztime local {
|
tztime local {
|
||||||
format = " (%a) %d/%m/%Y %H:%M"
|
format = " %d/%m/%Y %H:%M"
|
||||||
}
|
}
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
foreground #f8f8f2
|
|
||||||
background #282a36
|
|
||||||
title_fg #f8f8f2
|
|
||||||
title_bg #282a36
|
|
||||||
margin_bg #6272a4
|
|
||||||
margin_fg #44475a
|
|
||||||
removed_bg #ff5555
|
|
||||||
highlight_removed_bg #ff5555
|
|
||||||
removed_margin_bg #ff5555
|
|
||||||
added_bg #50fa7b
|
|
||||||
highlight_added_bg #50fa7b
|
|
||||||
added_margin_bg #50fa7b
|
|
||||||
filler_bg #44475a
|
|
||||||
hunk_margin_bg #44475a
|
|
||||||
hunk_bg #bd93f9
|
|
||||||
search_bg #8be9fd
|
|
||||||
search_fg #282a36
|
|
||||||
select_bg #f1fa8c
|
|
||||||
select_fg #282a36
|
|
@ -1,62 +0,0 @@
|
|||||||
# https://draculatheme.com/kitty
|
|
||||||
#
|
|
||||||
# Installation instructions:
|
|
||||||
#
|
|
||||||
# cp dracula.conf ~/.config/kitty/
|
|
||||||
# echo "include dracula.conf" >> ~/.config/kitty/kitty.conf
|
|
||||||
#
|
|
||||||
# Then reload kitty for the config to take affect.
|
|
||||||
# Alternatively copy paste below directly into kitty.conf
|
|
||||||
|
|
||||||
foreground #f8f8f2
|
|
||||||
background #282a36
|
|
||||||
selection_foreground #ffffff
|
|
||||||
selection_background #44475a
|
|
||||||
|
|
||||||
url_color #8be9fd
|
|
||||||
|
|
||||||
# black
|
|
||||||
color0 #21222c
|
|
||||||
color8 #6272a4
|
|
||||||
|
|
||||||
# red
|
|
||||||
color1 #ff5555
|
|
||||||
color9 #ff6e6e
|
|
||||||
|
|
||||||
# green
|
|
||||||
color2 #50fa7b
|
|
||||||
color10 #69ff94
|
|
||||||
|
|
||||||
# yellow
|
|
||||||
color3 #f1fa8c
|
|
||||||
color11 #ffffa5
|
|
||||||
|
|
||||||
# blue
|
|
||||||
color4 #bd93f9
|
|
||||||
color12 #d6acff
|
|
||||||
|
|
||||||
# magenta
|
|
||||||
color5 #ff79c6
|
|
||||||
color13 #ff92df
|
|
||||||
|
|
||||||
# cyan
|
|
||||||
color6 #8be9fd
|
|
||||||
color14 #a4ffff
|
|
||||||
|
|
||||||
# white
|
|
||||||
color7 #f8f8f2
|
|
||||||
color15 #ffffff
|
|
||||||
|
|
||||||
# Cursor colors
|
|
||||||
cursor #f8f8f2
|
|
||||||
cursor_text_color background
|
|
||||||
|
|
||||||
# Tab bar colors
|
|
||||||
active_tab_foreground #282a36
|
|
||||||
active_tab_background #f8f8f2
|
|
||||||
inactive_tab_foreground #282a36
|
|
||||||
inactive_tab_background #6272a4
|
|
||||||
|
|
||||||
# Marks
|
|
||||||
mark1_foreground #282a36
|
|
||||||
mark1_background #ff5555
|
|
1522
kitty/kitty.conf
1522
kitty/kitty.conf
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
|||||||
Subproject commit b1abdd54ba655ef34f75a568d78625981bf1722c
|
|
@ -1,5 +0,0 @@
|
|||||||
snippet beg "begin{} / end{}" bA
|
|
||||||
\begin{$1}
|
|
||||||
$0
|
|
||||||
\end{$1}
|
|
||||||
endsnippet
|
|
@ -1,3 +0,0 @@
|
|||||||
snippet std "use namespace std" b
|
|
||||||
using namespace std;
|
|
||||||
endsnippet
|
|
160
nvim/init.vim
160
nvim/init.vim
@ -1,22 +1,6 @@
|
|||||||
call plug#begin('~/local/share/nvim/plugged')
|
call plug#begin('~/local/share/nvim/plugged')
|
||||||
|
|
||||||
" Lightline
|
|
||||||
Plug 'itchyny/lightline.vim'
|
Plug 'itchyny/lightline.vim'
|
||||||
let g:lightline ={
|
|
||||||
\ 'colorscheme' : 'dracula',
|
|
||||||
\ 'component_function': {
|
|
||||||
\ 'filetype': 'MyFiletype',
|
|
||||||
\ 'fileformat': 'MyFileformat',
|
|
||||||
\ }
|
|
||||||
\}
|
|
||||||
function! MyFiletype()
|
|
||||||
return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype . ' ' . WebDevIconsGetFileTypeSymbol() : 'no ft') : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! MyFileformat()
|
|
||||||
return winwidth(0) > 70 ? (&fileformat . ' ' . WebDevIconsGetFileFormatSymbol()) : ''
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
Plug 'editorconfig/editorconfig-vim'
|
Plug 'editorconfig/editorconfig-vim'
|
||||||
|
|
||||||
" Fzf
|
" Fzf
|
||||||
@ -27,7 +11,7 @@ Plug 'junegunn/fzf.vim'
|
|||||||
Plug 'junegunn/limelight.vim'
|
Plug 'junegunn/limelight.vim'
|
||||||
|
|
||||||
" NERDTree
|
" NERDTree
|
||||||
Plug 'preservim/nerdtree'
|
Plug 'scrooloose/nerdtree'
|
||||||
|
|
||||||
" Improvements Plug 'terryma/vim-multiple-cursors'
|
" Improvements Plug 'terryma/vim-multiple-cursors'
|
||||||
Plug 'tpope/vim-eunuch'
|
Plug 'tpope/vim-eunuch'
|
||||||
@ -36,8 +20,8 @@ Plug 'scrooloose/syntastic'
|
|||||||
Plug 'jiangmiao/auto-pairs'
|
Plug 'jiangmiao/auto-pairs'
|
||||||
|
|
||||||
"Airline
|
"Airline
|
||||||
"Plug 'vim-airline/vim-airline'
|
Plug 'vim-airline/vim-airline'
|
||||||
"Plug 'vim-airline/vim-airline-themes'
|
Plug 'vim-airline/vim-airline-themes'
|
||||||
Plug 'prabirshrestha/vim-lsp'
|
Plug 'prabirshrestha/vim-lsp'
|
||||||
|
|
||||||
" Themes
|
" Themes
|
||||||
@ -45,91 +29,28 @@ Plug 'tomasr/molokai'
|
|||||||
Plug 'gko/vim-coloresque'
|
Plug 'gko/vim-coloresque'
|
||||||
Plug 'dracula/vim', { 'as': 'dracula' }
|
Plug 'dracula/vim', { 'as': 'dracula' }
|
||||||
Plug 'joshdick/onedark.vim'
|
Plug 'joshdick/onedark.vim'
|
||||||
Plug 'Mofiqul/dracula.nvim'
|
|
||||||
" Lang. Support
|
" Lang. Support
|
||||||
"""""""""""""""""""""""""""""""GO"""""""""""""""""""""""""""""""""""""""
|
Plug 'fatih/vim-go'
|
||||||
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
|
|
||||||
Plug 'deoplete-plugins/deoplete-go', { 'do': 'make'}
|
|
||||||
set completeopt-=preview
|
|
||||||
" Go related keybinds
|
|
||||||
autocmd FileType go nmap <leader>r <Plug>(go-run)
|
|
||||||
|
|
||||||
" Move through errors easier!
|
|
||||||
map <C-n> :cnext<CR>
|
|
||||||
map <C-m> :cprevious<CR>
|
|
||||||
nnoremap <leader>a :cclose<CR>
|
|
||||||
|
|
||||||
" run :GoBuild or :GoTestCompile based on the go file
|
|
||||||
function! s:build_go_files()
|
|
||||||
let l:file = expand('%')
|
|
||||||
if l:file =~# '^\f\+_test\.go$'
|
|
||||||
call go#test#Test(0, 1)
|
|
||||||
elseif l:file =~# '^\f\+\.go$'
|
|
||||||
call go#cmd#Build(0)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
autocmd FileType go nmap <leader>b :<C-u>call <SID>build_go_files()<CR>
|
|
||||||
|
|
||||||
let g:go_def_mode='gopls'
|
|
||||||
let g:go_info_mode='gopls'
|
|
||||||
let g:go_list_type = "quickfix"
|
|
||||||
let g:go_gopls_complete_unimported = 1
|
|
||||||
let g:go_gopls_use_placeholders = 1
|
|
||||||
|
|
||||||
set autowrite
|
|
||||||
""""""""""""""""""""""""""""""GO""""""""""""""""""""""""""""""""""""""""
|
|
||||||
|
|
||||||
" JAVA
|
|
||||||
Plug 'artur-shaik/vim-javacomplete2'
|
Plug 'artur-shaik/vim-javacomplete2'
|
||||||
autocmd FileType java setlocal omnifunc=javacomplete#Complete
|
|
||||||
|
|
||||||
"Plug 'Valloric/YouCompleteMe', { 'do': './install.py' }
|
"Plug 'Valloric/YouCompleteMe', { 'do': './install.py' }
|
||||||
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
|
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
|
||||||
Plug 'zchee/deoplete-jedi'
|
Plug 'zchee/deoplete-jedi'
|
||||||
Plug 'deoplete-plugins/deoplete-clang'
|
|
||||||
Plug 'davidhalter/jedi-vim'
|
Plug 'davidhalter/jedi-vim'
|
||||||
|
|
||||||
" RUST
|
|
||||||
Plug 'rust-lang/rust.vim'
|
Plug 'rust-lang/rust.vim'
|
||||||
Plug 'simrat39/rust-tools.nvim'
|
|
||||||
|
|
||||||
Plug 'neovim/nvim-lspconfig'
|
|
||||||
Plug 'preservim/nerdcommenter'
|
Plug 'preservim/nerdcommenter'
|
||||||
Plug 'mattn/emmet-vim'
|
Plug 'mattn/emmet-vim'
|
||||||
|
|
||||||
" Code Folding
|
" Code Folding
|
||||||
Plug 'tmhedberg/SimpylFold'
|
Plug 'tmhedberg/SimpylFold'
|
||||||
|
|
||||||
" Code Formatting
|
" Writing
|
||||||
Plug 'Chiel92/vim-autoformat'
|
|
||||||
noremap <F3> :Autoformat<CR>
|
|
||||||
|
|
||||||
" Indent Blanklines
|
|
||||||
Plug 'lukas-reineke/indent-blankline.nvim'
|
|
||||||
|
|
||||||
" Writing in LaTeX
|
|
||||||
Plug 'junegunn/goyo.vim'
|
Plug 'junegunn/goyo.vim'
|
||||||
Plug 'lervag/vimtex'
|
Plug 'lervag/vimtex'
|
||||||
Plug 'xuhdev/vim-latex-live-preview', { 'for': 'tex' }
|
Plug 'xuhdev/vim-latex-live-preview', { 'for': 'tex' }
|
||||||
" Plug 'conornewton/vim-latex-preview'
|
" Plug 'conornewton/vim-latex-preview'
|
||||||
let g:tex_flavor='latex'
|
|
||||||
let g:vimtex_view_method='zathura'
|
|
||||||
let g:vimtex_quickfix_mode=0
|
|
||||||
let g:livepreview_previewer = 'zathura'
|
|
||||||
let g:livepreview_engine = 'xelatex'
|
|
||||||
|
|
||||||
set conceallevel=1
|
"Zoxide
|
||||||
let g:tex_conceal='abdmg'
|
|
||||||
|
|
||||||
" Ultisnips
|
|
||||||
Plug 'sirver/ultisnips'
|
|
||||||
Plug 'honza/vim-snippets'
|
|
||||||
let g:UltiSnipsExpandTrigger = '<tab>'
|
|
||||||
let g:UltiSnipsJumpForwardTrigger="<c-b>"
|
|
||||||
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
|
|
||||||
let g:UltiSnipsListSnippets="<c-;>"
|
|
||||||
|
|
||||||
" Zoxide
|
|
||||||
Plug 'nanotee/zoxide.vim'
|
Plug 'nanotee/zoxide.vim'
|
||||||
|
|
||||||
" Vim Wiki
|
" Vim Wiki
|
||||||
@ -138,8 +59,6 @@ Plug 'mattn/calendar-vim'
|
|||||||
|
|
||||||
" Animate
|
" Animate
|
||||||
" Plug 'camspiers/animate.vim'
|
" Plug 'camspiers/animate.vim'
|
||||||
|
|
||||||
" Lens
|
|
||||||
Plug 'camspiers/lens.vim'
|
Plug 'camspiers/lens.vim'
|
||||||
|
|
||||||
" Better Syntax Support
|
" Better Syntax Support
|
||||||
@ -152,25 +71,12 @@ Plug 'tpope/vim-fugitive'
|
|||||||
" Icons
|
" Icons
|
||||||
Plug 'ryanoasis/vim-devicons'
|
Plug 'ryanoasis/vim-devicons'
|
||||||
|
|
||||||
" Lightspeed
|
|
||||||
Plug 'ggandor/lightspeed.nvim'
|
|
||||||
|
|
||||||
" Markdown Preview
|
|
||||||
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': 'markdown' }
|
|
||||||
|
|
||||||
call plug#end()
|
call plug#end()
|
||||||
|
|
||||||
|
|
||||||
"let g:molokai_original = 1
|
"let g:molokai_original = 1
|
||||||
"let g:airline_theme='onedark'
|
let g:airline_theme='onedark'
|
||||||
"let g:airline_theme='dracula'
|
|
||||||
let g:ale_enable=0
|
let g:ale_enable=0
|
||||||
let g:ale_linters = {
|
|
||||||
\ 'python': ['pylint'],
|
|
||||||
\ 'vim': ['vint'],
|
|
||||||
\ 'cpp': ['clang'],
|
|
||||||
\ 'c': ['clang'],
|
|
||||||
\ 'go': ['gopls'],
|
|
||||||
\}
|
|
||||||
syntax on
|
syntax on
|
||||||
filetype plugin indent on
|
filetype plugin indent on
|
||||||
set shiftwidth=4
|
set shiftwidth=4
|
||||||
@ -178,14 +84,12 @@ set softtabstop=4
|
|||||||
set tabstop=4
|
set tabstop=4
|
||||||
set expandtab
|
set expandtab
|
||||||
set number relativenumber
|
set number relativenumber
|
||||||
colorscheme dracula
|
colorscheme onedark
|
||||||
set nocompatible
|
set nocompatible
|
||||||
set encoding=UTF-8
|
set encoding=UTF-8
|
||||||
set clipboard+=unnamedplus
|
set clipboard+=unnamedplus
|
||||||
set mouse=a
|
|
||||||
set laststatus=3
|
|
||||||
set termguicolors
|
|
||||||
|
|
||||||
|
set mouse=a
|
||||||
" Map Leader
|
" Map Leader
|
||||||
let mapleader = ","
|
let mapleader = ","
|
||||||
|
|
||||||
@ -194,13 +98,11 @@ let g:vimwiki_list = [{'path': '~/vimwiki/',
|
|||||||
\ 'syntax': 'markdown', 'ext': '.md'}]
|
\ 'syntax': 'markdown', 'ext': '.md'}]
|
||||||
|
|
||||||
:map <F11> :setlocal spell! spelllang=en_gb<CR>
|
:map <F11> :setlocal spell! spelllang=en_gb<CR>
|
||||||
|
|
||||||
"Quick spellcheck
|
|
||||||
inoremap <F10> <c-g>u<Esc>[s1z=`]a<c-g>u
|
|
||||||
|
|
||||||
au BufNewFile ~/vimwiki/diary/*.md :silent 0r !~/.config/nvim/generate-vimwiki-diary-template '%'
|
au BufNewFile ~/vimwiki/diary/*.md :silent 0r !~/.config/nvim/generate-vimwiki-diary-template '%'
|
||||||
|
|
||||||
|
|
||||||
|
let NERDTreeMapOpenInTab='<ENTER>'
|
||||||
|
|
||||||
" Insert Date
|
" Insert Date
|
||||||
nnoremap <silent><leader>d :put=system('date +%d/%b/%Y')<CR>
|
nnoremap <silent><leader>d :put=system('date +%d/%b/%Y')<CR>
|
||||||
|
|
||||||
@ -216,10 +118,10 @@ let g:fzf_nvim_statusline = 0 " disable statusline overwriting
|
|||||||
nnoremap <silent> <leader><space> :Files<CR>
|
nnoremap <silent> <leader><space> :Files<CR>
|
||||||
nnoremap <silent> <leader>w :Windows<CR>
|
nnoremap <silent> <leader>w :Windows<CR>
|
||||||
nnoremap <silent> <leader>h :History<CR>
|
nnoremap <silent> <leader>h :History<CR>
|
||||||
nnoremap <silent> <leader>G :GFiles<CR>
|
nnoremap <silent> <leader>G<space> :GFiles<CR>
|
||||||
" nnoremap <silent> <leader>GS :GFiles?<CR>
|
nnoremap <silent> <leader>GS :GFiles?<CR>
|
||||||
|
|
||||||
" Easy update and reload nvim init file
|
" Easy to update and reload nvim init file
|
||||||
nnoremap <Leader>e :e $MYVIMRC<CR>
|
nnoremap <Leader>e :e $MYVIMRC<CR>
|
||||||
nnoremap <Leader>S :source $MYVIMRC<CR>
|
nnoremap <Leader>S :source $MYVIMRC<CR>
|
||||||
|
|
||||||
@ -228,12 +130,9 @@ let g:deoplete#enable_at_startup = 1
|
|||||||
autocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endif
|
autocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endif
|
||||||
let g:jedi#completions_enabled = 0
|
let g:jedi#completions_enabled = 0
|
||||||
let g:jedi#use_splits_not_buffers = "right"
|
let g:jedi#use_splits_not_buffers = "right"
|
||||||
" g:deoplete#sources#jedi#python_path = 'python3'
|
|
||||||
let g:python3_host_prog = '/usr/bin/python3'
|
|
||||||
|
|
||||||
" Limeligt + Goyo Binds
|
" Limeligt Binds
|
||||||
nnoremap <Leader>l :Limelight!!<CR>
|
nnoremap <Leader>l :Limelight!!<CR>
|
||||||
nnoremap <Leader>g :Goyo<CR>
|
|
||||||
let g:limelight_conceal_guifg = 'DarkGray'
|
let g:limelight_conceal_guifg = 'DarkGray'
|
||||||
let g:limelight_conceal_guifg = '#777777'
|
let g:limelight_conceal_guifg = '#777777'
|
||||||
let g:limelight_conceal_ctermfg = 'gray'
|
let g:limelight_conceal_ctermfg = 'gray'
|
||||||
@ -256,13 +155,9 @@ nnoremap <A-Up> :tabn<CR>
|
|||||||
|
|
||||||
" Basic cmd commands
|
" Basic cmd commands
|
||||||
nnoremap <A-n> :!touch<Space>
|
nnoremap <A-n> :!touch<Space>
|
||||||
nnoremap <A-o> :e<Space>
|
nnoremap <A-o> :tabe<Space>
|
||||||
nnoremap <A-O> :tabe<Space>
|
|
||||||
nnoremap <A-v> :vsplit<Space>
|
nnoremap <A-v> :vsplit<Space>
|
||||||
|
|
||||||
" Markdown Preview
|
|
||||||
nnoremap <leader>m :MarkdownPreviewToggle<CR>
|
|
||||||
|
|
||||||
" Screenshot command
|
" Screenshot command
|
||||||
nnoremap <silent> <leader>s :!bash /home/simon/.scripts/vscrnpaste<CR><CR>
|
nnoremap <silent> <leader>s :!bash /home/simon/.scripts/vscrnpaste<CR><CR>
|
||||||
|
|
||||||
@ -276,7 +171,7 @@ vmap < <gv
|
|||||||
vmap > >gv
|
vmap > >gv
|
||||||
|
|
||||||
" Open NERDTree
|
" Open NERDTree
|
||||||
nnoremap <leader><enter> :NERDTreeToggle<CR>
|
nnoremap <leader>N :NERDTreeToggle<CR>
|
||||||
|
|
||||||
" Vimwiki md2html
|
" Vimwiki md2html
|
||||||
let g:vimwiki_list = [{
|
let g:vimwiki_list = [{
|
||||||
@ -292,20 +187,3 @@ let g:vimwiki_list = [{
|
|||||||
" Vimwiki
|
" Vimwiki
|
||||||
nnoremap <leader>T :VimwikiTable<CR>
|
nnoremap <leader>T :VimwikiTable<CR>
|
||||||
|
|
||||||
" Rust
|
|
||||||
let g:rustfmt_autosave = 1
|
|
||||||
|
|
||||||
" C
|
|
||||||
let g:clang_complete_auto = 0
|
|
||||||
let g:clang_auto_select = 0
|
|
||||||
let g:neoformat_cpp_clangformat = {
|
|
||||||
\ 'exe': 'clang-format',
|
|
||||||
\ 'args': ['--style="{IndentWidth: 4}"']
|
|
||||||
\}
|
|
||||||
let g:neoformat_enabled_cpp = ['clangformat']
|
|
||||||
let g:neoformat_enabled_c = ['clangformat']
|
|
||||||
|
|
||||||
|
|
||||||
" Fullscreen on nvim in kitty term
|
|
||||||
"autocmd VimLeave * :silent !kitty @ set-spacing padding=20 margin=20
|
|
||||||
"autocmd VimEnter * :silent !kitty @ set-spacing padding=0 margin=0
|
|
||||||
|
@ -60,152 +60,3 @@ loadpantomime
|
|||||||
PlayID
|
PlayID
|
||||||
AgentID
|
AgentID
|
||||||
WAMP
|
WAMP
|
||||||
i
|
|
||||||
GDPR
|
|
||||||
ProjID
|
|
||||||
DevID
|
|
||||||
DevProj
|
|
||||||
OCaml
|
|
||||||
tera
|
|
||||||
giga
|
|
||||||
milli
|
|
||||||
μ
|
|
||||||
PMOS
|
|
||||||
NMOS
|
|
||||||
Javascript
|
|
||||||
JSON
|
|
||||||
ANDed
|
|
||||||
ORed
|
|
||||||
xy
|
|
||||||
x'y
|
|
||||||
DNF
|
|
||||||
CNF
|
|
||||||
Minterms
|
|
||||||
minterm
|
|
||||||
Maxterms
|
|
||||||
maxterm
|
|
||||||
OO
|
|
||||||
FP
|
|
||||||
regex
|
|
||||||
TT
|
|
||||||
clockless
|
|
||||||
LD
|
|
||||||
JK
|
|
||||||
IOCCC
|
|
||||||
Mellon's
|
|
||||||
hasNextInt
|
|
||||||
ArithmeticExcpetion
|
|
||||||
plaintext
|
|
||||||
Ciphertext
|
|
||||||
cmp
|
|
||||||
ve
|
|
||||||
Rambus
|
|
||||||
RDRAM
|
|
||||||
RIMM
|
|
||||||
DIMM
|
|
||||||
SIMM
|
|
||||||
Inline
|
|
||||||
ASM
|
|
||||||
HLL
|
|
||||||
detailInfo
|
|
||||||
getInfo
|
|
||||||
getRegNum
|
|
||||||
p2
|
|
||||||
CSCU9V4
|
|
||||||
ACWL
|
|
||||||
DCBA
|
|
||||||
DCB'A
|
|
||||||
DC'BA
|
|
||||||
DC'B'A
|
|
||||||
D'CBA
|
|
||||||
D'CB'A
|
|
||||||
D'C'BA
|
|
||||||
D'C'B'A
|
|
||||||
Σ
|
|
||||||
CSCU9Y4
|
|
||||||
structs
|
|
||||||
RESTful
|
|
||||||
goroutines
|
|
||||||
wikipedia
|
|
||||||
org
|
|
||||||
Kernighan
|
|
||||||
Northeastern
|
|
||||||
RedHat
|
|
||||||
st
|
|
||||||
Griesemer
|
|
||||||
GitLab
|
|
||||||
CockroachDB
|
|
||||||
fmt
|
|
||||||
ioutil
|
|
||||||
ReadFile
|
|
||||||
dicts
|
|
||||||
len
|
|
||||||
gobyexample
|
|
||||||
com
|
|
||||||
struct
|
|
||||||
OpenWeatherMap
|
|
||||||
json
|
|
||||||
loadJson
|
|
||||||
WeatherAPI
|
|
||||||
sizeof
|
|
||||||
int
|
|
||||||
ptr
|
|
||||||
naddr
|
|
||||||
addr
|
|
||||||
max
|
|
||||||
of
|
|
||||||
maxptr
|
|
||||||
scanf
|
|
||||||
Fediverse
|
|
||||||
microblogging
|
|
||||||
fediverse
|
|
||||||
indeti
|
|
||||||
ActivityPub
|
|
||||||
W3C
|
|
||||||
linuxrocks
|
|
||||||
lgbt
|
|
||||||
flexability
|
|
||||||
simonkellet
|
|
||||||
Pixelfed
|
|
||||||
Instagram
|
|
||||||
Bookwyrm
|
|
||||||
BookWyrm
|
|
||||||
WebTorrent
|
|
||||||
Peertube
|
|
||||||
YouTuber's
|
|
||||||
PeerTube
|
|
||||||
Y4
|
|
||||||
2nd
|
|
||||||
malloc
|
|
||||||
JVM
|
|
||||||
Naur
|
|
||||||
BNF
|
|
||||||
src
|
|
||||||
CSCU9A5
|
|
||||||
EBNF
|
|
||||||
EOL
|
|
||||||
AST
|
|
||||||
CSCU9E5
|
|
||||||
toString
|
|
||||||
equals
|
|
||||||
Powerpoint
|
|
||||||
slideshow
|
|
||||||
HTML5
|
|
||||||
tannoy
|
|
||||||
Alexa
|
|
||||||
YT
|
|
||||||
command
|
|
||||||
Pantone
|
|
||||||
CSCU9X5
|
|
||||||
desample
|
|
||||||
Bicubic
|
|
||||||
Metafiles
|
|
||||||
UML
|
|
||||||
Backpatching
|
|
||||||
Inlining
|
|
||||||
JIT
|
|
||||||
GI
|
|
||||||
HotSpot
|
|
||||||
kern
|
|
||||||
CounterTeller
|
|
||||||
Arduino
|
|
||||||
|
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
# If a config.py file exists, this file is ignored unless it's explicitly loaded
|
# If a config.py file exists, this file is ignored unless it's explicitly loaded
|
||||||
# via config.load_autoconfig(). For more information, see:
|
# via config.load_autoconfig(). For more information, see:
|
||||||
# https://github.com/qutebrowser/qutebrowser/blob/main/doc/help/configuring.asciidoc#loading-autoconfigyml
|
# https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#loading-autoconfigyml
|
||||||
# DO NOT edit this file by hand, qutebrowser will overwrite it.
|
# DO NOT edit this file by hand, qutebrowser will overwrite it.
|
||||||
# Instead, create a config.py - see :help for details.
|
# Instead, create a config.py - see :help for details.
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ config.bind('xt', 'config-cycle tabs.show always never')
|
|||||||
config.bind('xx', 'config-cycle tabs.show always never;; config-cycle statusbar.show always never')
|
config.bind('xx', 'config-cycle tabs.show always never;; config-cycle statusbar.show always never')
|
||||||
|
|
||||||
c.url.searchengines["g"] = "https://www.google.co.uk/search?q={}"
|
c.url.searchengines["g"] = "https://www.google.co.uk/search?q={}"
|
||||||
c.url.searchengines = {'DEFAULT': 'https://www.google.co.uk/search?q={}'}
|
c.url.searchengines["ddg"] = "https://www.duckduckgo.com/?q={}"
|
||||||
c.url.searchengines["b"] = "https://search.brave.com/search?q={}"
|
c.url.searchengines["b"] = "https://search.brave.com/search?q={}"
|
||||||
c.url.searchengines["aw"] = "https://wiki.archlinux.org/?search={}"
|
c.url.searchengines["aw"] = "https://wiki.archlinux.org/?search={}"
|
||||||
c.url.searchengines["yt"] = "http://www.youtube.com/results?search_query={}"
|
c.url.searchengines["yt"] = "http://www.youtube.com/results?search_query={}"
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
[FileDialog]
|
|
||||||
history=file:///home/simon/Calibre Library/Jason Cannon/Linux for Beginners_ An Introduction to the Linux Operating System and Command Line (7), file:///home/simon/Calibre Library/Jonathan Moeller/The Linux Command Line Beginner's Guide (6), file:///home/simon, file:///home/simon/Downloads
|
|
||||||
lastVisited=file:///home/simon/Downloads
|
|
||||||
qtVersion=5.15.2
|
|
||||||
shortcuts=file:, file:///home/simon
|
|
||||||
sidebarWidth=97
|
|
||||||
treeViewHeader="@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1\xeb\0\0\0\x4\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x4\0\0\x1\b\0\0\0\x1\0\0\0\0\0\0\0;\0\0\0\x1\0\0\0\0\0\0\0@\0\0\0\x1\0\0\0\0\0\0\0h\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\xff\xff\xff\xff)"
|
|
||||||
viewMode=Detail
|
|
278
qutebrowser/userscripts/qute-pass
Executable file
278
qutebrowser/userscripts/qute-pass
Executable file
@ -0,0 +1,278 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com>
|
||||||
|
#
|
||||||
|
# This file is part of qutebrowser.
|
||||||
|
#
|
||||||
|
# qutebrowser is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# qutebrowser is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with qutebrowser. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Insert login information using pass and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). A short
|
||||||
|
demonstration can be seen here: https://i.imgur.com/KN3XuZP.gif.
|
||||||
|
"""
|
||||||
|
|
||||||
|
USAGE = """The domain of the site has to appear as a segment in the pass path,
|
||||||
|
for example: "github.com/cryzed" or "websites/github.com". How the username and
|
||||||
|
password are determined is freely configurable using the CLI arguments. As an
|
||||||
|
example, if you instead store the username as part of the secret (and use a
|
||||||
|
site's name as filename), instead of the default configuration, use
|
||||||
|
`--username-target secret` and `--username-pattern "username: (.+)"`.
|
||||||
|
|
||||||
|
The login information is inserted by emulating key events using qutebrowser's
|
||||||
|
fake-key command in this manner: [USERNAME]<Tab>[PASSWORD], which is compatible
|
||||||
|
with almost all login forms.
|
||||||
|
|
||||||
|
If you use gopass with multiple mounts, use the CLI switch --mode gopass to switch to gopass mode.
|
||||||
|
|
||||||
|
Suggested bindings similar to Uzbl's `formfiller` script:
|
||||||
|
|
||||||
|
config.bind('<z><l>', 'spawn --userscript qute-pass')
|
||||||
|
config.bind('<z><u><l>', 'spawn --userscript qute-pass --username-only')
|
||||||
|
config.bind('<z><p><l>', 'spawn --userscript qute-pass --password-only')
|
||||||
|
config.bind('<z><o><l>', 'spawn --userscript qute-pass --otp-only')
|
||||||
|
"""
|
||||||
|
|
||||||
|
EPILOG = """Dependencies: tldextract (Python 3 module), pass, pass-otp (optional).
|
||||||
|
For issues and feedback please use: https://github.com/cryzed/qutebrowser-userscripts.
|
||||||
|
|
||||||
|
WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if
|
||||||
|
you decide to submit a crash report!"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import enum
|
||||||
|
import fnmatch
|
||||||
|
import functools
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import tldextract
|
||||||
|
|
||||||
|
|
||||||
|
def expanded_path(path):
|
||||||
|
# Expand potential ~ in paths, since this script won't be called from a shell that does it for us
|
||||||
|
expanded = os.path.expanduser(path)
|
||||||
|
# Add trailing slash if not present
|
||||||
|
return os.path.join(expanded, '')
|
||||||
|
|
||||||
|
|
||||||
|
argument_parser = argparse.ArgumentParser(description=__doc__, usage=USAGE, epilog=EPILOG)
|
||||||
|
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL'))
|
||||||
|
argument_parser.add_argument('--password-store', '-p',
|
||||||
|
default=expanded_path(os.getenv('PASSWORD_STORE_DIR', default='~/.password-store')),
|
||||||
|
help='Path to your pass password-store (only used in pass-mode)', type=expanded_path)
|
||||||
|
argument_parser.add_argument('--mode', '-M', choices=['pass', 'gopass'], default="pass",
|
||||||
|
help='Select mode [gopass] to use gopass instead of the standard pass.')
|
||||||
|
argument_parser.add_argument('--username-pattern', '-u', default=r'.*/(.+)',
|
||||||
|
help='Regular expression that matches the username')
|
||||||
|
argument_parser.add_argument('--username-target', '-U', choices=['path', 'secret'], default='path',
|
||||||
|
help='The target for the username regular expression')
|
||||||
|
argument_parser.add_argument('--password-pattern', '-P', default=r'(.*)',
|
||||||
|
help='Regular expression that matches the password')
|
||||||
|
argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu',
|
||||||
|
help='Invocation used to execute a dmenu-provider')
|
||||||
|
argument_parser.add_argument('--noinsert-mode', '-n', dest='insert_mode', action='store_false',
|
||||||
|
help="Don't automatically enter insert mode")
|
||||||
|
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8',
|
||||||
|
help='Encoding used to communicate with subprocesses')
|
||||||
|
argument_parser.add_argument('--merge-candidates', '-m', action='store_true',
|
||||||
|
help='Merge pass candidates for fully-qualified and registered domain name')
|
||||||
|
argument_parser.add_argument('--extra-url-suffixes', '-s', default='',
|
||||||
|
help='Comma-separated string containing extra suffixes (e.g local)')
|
||||||
|
group = argument_parser.add_mutually_exclusive_group()
|
||||||
|
group.add_argument('--username-only', '-e', action='store_true', help='Only insert username')
|
||||||
|
group.add_argument('--password-only', '-w', action='store_true', help='Only insert password')
|
||||||
|
group.add_argument('--otp-only', '-o', action='store_true', help='Only insert OTP code')
|
||||||
|
|
||||||
|
stderr = functools.partial(print, file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
class ExitCodes(enum.IntEnum):
|
||||||
|
SUCCESS = 0
|
||||||
|
FAILURE = 1
|
||||||
|
# 1 is automatically used if Python throws an exception
|
||||||
|
NO_PASS_CANDIDATES = 2
|
||||||
|
COULD_NOT_MATCH_USERNAME = 3
|
||||||
|
COULD_NOT_MATCH_PASSWORD = 4
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotMatchUsername(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotMatchPassword(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def qute_command(command):
|
||||||
|
with open(os.environ['QUTE_FIFO'], 'w') as fifo:
|
||||||
|
fifo.write(command + '\n')
|
||||||
|
fifo.flush()
|
||||||
|
|
||||||
|
|
||||||
|
def find_pass_candidates(domain):
|
||||||
|
candidates = []
|
||||||
|
|
||||||
|
if arguments.mode == "gopass":
|
||||||
|
all_passwords = subprocess.run(["gopass", "list", "--flat" ], stdout=subprocess.PIPE).stdout.decode("UTF-8").splitlines()
|
||||||
|
|
||||||
|
for password in all_passwords:
|
||||||
|
if domain in password:
|
||||||
|
candidates.append(password)
|
||||||
|
else:
|
||||||
|
for path, directories, file_names in os.walk(arguments.password_store, followlinks=True):
|
||||||
|
secrets = fnmatch.filter(file_names, '*.gpg')
|
||||||
|
if not secrets:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Strip password store path prefix to get the relative pass path
|
||||||
|
pass_path = path[len(arguments.password_store):]
|
||||||
|
split_path = pass_path.split(os.path.sep)
|
||||||
|
for secret in secrets:
|
||||||
|
secret_base = os.path.splitext(secret)[0]
|
||||||
|
if domain not in (split_path + [secret_base]):
|
||||||
|
continue
|
||||||
|
|
||||||
|
candidates.append(os.path.join(pass_path, secret_base))
|
||||||
|
return candidates
|
||||||
|
|
||||||
|
|
||||||
|
def _run_pass(pass_arguments):
|
||||||
|
# The executable is conveniently named after it's mode [pass|gopass].
|
||||||
|
pass_command = [arguments.mode]
|
||||||
|
env = os.environ.copy()
|
||||||
|
env['PASSWORD_STORE_DIR'] = arguments.password_store
|
||||||
|
process = subprocess.run(pass_command + pass_arguments, env=env, stdout=subprocess.PIPE)
|
||||||
|
return process.stdout.decode(arguments.io_encoding).strip()
|
||||||
|
|
||||||
|
|
||||||
|
def pass_(path):
|
||||||
|
return _run_pass(['show', path])
|
||||||
|
|
||||||
|
|
||||||
|
def pass_otp(path):
|
||||||
|
if arguments.mode == "gopass":
|
||||||
|
return _run_pass(['otp', '-o', path])
|
||||||
|
return _run_pass(['otp', path])
|
||||||
|
|
||||||
|
|
||||||
|
def dmenu(items, invocation):
|
||||||
|
command = shlex.split(invocation)
|
||||||
|
process = subprocess.run(command, input='\n'.join(items).encode(arguments.io_encoding), stdout=subprocess.PIPE)
|
||||||
|
return process.stdout.decode(arguments.io_encoding).strip()
|
||||||
|
|
||||||
|
|
||||||
|
def fake_key_raw(text):
|
||||||
|
for character in text:
|
||||||
|
# Escape all characters by default, space requires special handling
|
||||||
|
sequence = '" "' if character == ' ' else '\{}'.format(character)
|
||||||
|
qute_command('fake-key {}'.format(sequence))
|
||||||
|
|
||||||
|
|
||||||
|
def extract_password(secret, pattern):
|
||||||
|
match = re.match(pattern, secret)
|
||||||
|
if not match:
|
||||||
|
raise CouldNotMatchPassword("Pattern did not match target")
|
||||||
|
try:
|
||||||
|
return match.group(1)
|
||||||
|
except IndexError:
|
||||||
|
raise CouldNotMatchPassword("Pattern did not contain capture group, please use capture group. Example: (.*)")
|
||||||
|
|
||||||
|
|
||||||
|
def extract_username(target, pattern):
|
||||||
|
match = re.search(pattern, target, re.MULTILINE)
|
||||||
|
if not match:
|
||||||
|
raise CouldNotMatchUsername("Pattern did not match target")
|
||||||
|
try:
|
||||||
|
return match.group(1)
|
||||||
|
except IndexError:
|
||||||
|
raise CouldNotMatchUsername("Pattern did not contain capture group, please use capture group. Example: (.*)")
|
||||||
|
|
||||||
|
|
||||||
|
def main(arguments):
|
||||||
|
if not arguments.url:
|
||||||
|
argument_parser.print_help()
|
||||||
|
return ExitCodes.FAILURE
|
||||||
|
|
||||||
|
extractor = tldextract.TLDExtract(extra_suffixes=arguments.extra_url_suffixes.split(','))
|
||||||
|
extract_result = extractor(arguments.url)
|
||||||
|
|
||||||
|
# Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains),
|
||||||
|
# the registered domain name, the IPv4 address if that's what the URL represents and finally the private domain
|
||||||
|
# (if a non-public suffix was used).
|
||||||
|
candidates = set()
|
||||||
|
attempted_targets = []
|
||||||
|
|
||||||
|
private_domain = ''
|
||||||
|
if not extract_result.suffix:
|
||||||
|
private_domain = ('.'.join((extract_result.subdomain, extract_result.domain))
|
||||||
|
if extract_result.subdomain else extract_result.domain)
|
||||||
|
|
||||||
|
for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.ipv4, private_domain]):
|
||||||
|
attempted_targets.append(target)
|
||||||
|
target_candidates = find_pass_candidates(target)
|
||||||
|
if not target_candidates:
|
||||||
|
continue
|
||||||
|
|
||||||
|
candidates.update(target_candidates)
|
||||||
|
if not arguments.merge_candidates:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if not candidates:
|
||||||
|
stderr('No pass candidates for URL {!r} found! (I tried {!r})'.format(arguments.url, attempted_targets))
|
||||||
|
return ExitCodes.NO_PASS_CANDIDATES
|
||||||
|
|
||||||
|
selection = candidates.pop() if len(candidates) == 1 else dmenu(sorted(candidates), arguments.dmenu_invocation)
|
||||||
|
# Nothing was selected, simply return
|
||||||
|
if not selection:
|
||||||
|
return ExitCodes.SUCCESS
|
||||||
|
|
||||||
|
# If username-target is path and user asked for username-only, we don't need to run pass.
|
||||||
|
# Or if using otp-only, it will run pass on its own.
|
||||||
|
secret = None
|
||||||
|
if not (arguments.username_target == 'path' and arguments.username_only) and not arguments.otp_only:
|
||||||
|
secret = pass_(selection)
|
||||||
|
username_target = selection if arguments.username_target == 'path' else secret
|
||||||
|
try:
|
||||||
|
if arguments.username_only:
|
||||||
|
fake_key_raw(extract_username(username_target, arguments.username_pattern))
|
||||||
|
elif arguments.password_only:
|
||||||
|
fake_key_raw(extract_password(secret, arguments.password_pattern))
|
||||||
|
elif arguments.otp_only:
|
||||||
|
otp = pass_otp(selection)
|
||||||
|
fake_key_raw(otp)
|
||||||
|
else:
|
||||||
|
# Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch
|
||||||
|
# back into insert-mode, so the form can be directly submitted by hitting enter afterwards
|
||||||
|
fake_key_raw(extract_username(username_target, arguments.username_pattern))
|
||||||
|
qute_command('fake-key <Tab>')
|
||||||
|
fake_key_raw(extract_password(secret, arguments.password_pattern))
|
||||||
|
except CouldNotMatchPassword as e:
|
||||||
|
stderr('Failed to match password, target: secret, error: {}'.format(e))
|
||||||
|
return ExitCodes.COULD_NOT_MATCH_PASSWORD
|
||||||
|
except CouldNotMatchUsername as e:
|
||||||
|
stderr('Failed to match username, target: {}, error: {}'.format(arguments.username_target, e))
|
||||||
|
return ExitCodes.COULD_NOT_MATCH_USERNAME
|
||||||
|
|
||||||
|
if arguments.insert_mode:
|
||||||
|
qute_command('mode-enter insert')
|
||||||
|
|
||||||
|
return ExitCodes.SUCCESS
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
arguments = argument_parser.parse_args()
|
||||||
|
sys.exit(main(arguments))
|
278
qutebrowser/userscripts/qute-pass.py
Executable file
278
qutebrowser/userscripts/qute-pass.py
Executable file
@ -0,0 +1,278 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com>
|
||||||
|
#
|
||||||
|
# This file is part of qutebrowser.
|
||||||
|
#
|
||||||
|
# qutebrowser is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# qutebrowser is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with qutebrowser. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Insert login information using pass and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). A short
|
||||||
|
demonstration can be seen here: https://i.imgur.com/KN3XuZP.gif.
|
||||||
|
"""
|
||||||
|
|
||||||
|
USAGE = """The domain of the site has to appear as a segment in the pass path,
|
||||||
|
for example: "github.com/cryzed" or "websites/github.com". How the username and
|
||||||
|
password are determined is freely configurable using the CLI arguments. As an
|
||||||
|
example, if you instead store the username as part of the secret (and use a
|
||||||
|
site's name as filename), instead of the default configuration, use
|
||||||
|
`--username-target secret` and `--username-pattern "username: (.+)"`.
|
||||||
|
|
||||||
|
The login information is inserted by emulating key events using qutebrowser's
|
||||||
|
fake-key command in this manner: [USERNAME]<Tab>[PASSWORD], which is compatible
|
||||||
|
with almost all login forms.
|
||||||
|
|
||||||
|
If you use gopass with multiple mounts, use the CLI switch --mode gopass to switch to gopass mode.
|
||||||
|
|
||||||
|
Suggested bindings similar to Uzbl's `formfiller` script:
|
||||||
|
|
||||||
|
config.bind('<z><l>', 'spawn --userscript qute-pass')
|
||||||
|
config.bind('<z><u><l>', 'spawn --userscript qute-pass --username-only')
|
||||||
|
config.bind('<z><p><l>', 'spawn --userscript qute-pass --password-only')
|
||||||
|
config.bind('<z><o><l>', 'spawn --userscript qute-pass --otp-only')
|
||||||
|
"""
|
||||||
|
|
||||||
|
EPILOG = """Dependencies: tldextract (Python 3 module), pass, pass-otp (optional).
|
||||||
|
For issues and feedback please use: https://github.com/cryzed/qutebrowser-userscripts.
|
||||||
|
|
||||||
|
WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if
|
||||||
|
you decide to submit a crash report!"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import enum
|
||||||
|
import fnmatch
|
||||||
|
import functools
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import tldextract
|
||||||
|
|
||||||
|
|
||||||
|
def expanded_path(path):
|
||||||
|
# Expand potential ~ in paths, since this script won't be called from a shell that does it for us
|
||||||
|
expanded = os.path.expanduser(path)
|
||||||
|
# Add trailing slash if not present
|
||||||
|
return os.path.join(expanded, '')
|
||||||
|
|
||||||
|
|
||||||
|
argument_parser = argparse.ArgumentParser(description=__doc__, usage=USAGE, epilog=EPILOG)
|
||||||
|
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL'))
|
||||||
|
argument_parser.add_argument('--password-store', '-p',
|
||||||
|
default=expanded_path(os.getenv('PASSWORD_STORE_DIR', default='~/.password-store')),
|
||||||
|
help='Path to your pass password-store (only used in pass-mode)', type=expanded_path)
|
||||||
|
argument_parser.add_argument('--mode', '-M', choices=['pass', 'gopass'], default="pass",
|
||||||
|
help='Select mode [gopass] to use gopass instead of the standard pass.')
|
||||||
|
argument_parser.add_argument('--username-pattern', '-u', default=r'.*/(.+)',
|
||||||
|
help='Regular expression that matches the username')
|
||||||
|
argument_parser.add_argument('--username-target', '-U', choices=['path', 'secret'], default='path',
|
||||||
|
help='The target for the username regular expression')
|
||||||
|
argument_parser.add_argument('--password-pattern', '-P', default=r'(.*)',
|
||||||
|
help='Regular expression that matches the password')
|
||||||
|
argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu',
|
||||||
|
help='Invocation used to execute a dmenu-provider')
|
||||||
|
argument_parser.add_argument('--noinsert-mode', '-n', dest='insert_mode', action='store_false',
|
||||||
|
help="Don't automatically enter insert mode")
|
||||||
|
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8',
|
||||||
|
help='Encoding used to communicate with subprocesses')
|
||||||
|
argument_parser.add_argument('--merge-candidates', '-m', action='store_true',
|
||||||
|
help='Merge pass candidates for fully-qualified and registered domain name')
|
||||||
|
argument_parser.add_argument('--extra-url-suffixes', '-s', default='',
|
||||||
|
help='Comma-separated string containing extra suffixes (e.g local)')
|
||||||
|
group = argument_parser.add_mutually_exclusive_group()
|
||||||
|
group.add_argument('--username-only', '-e', action='store_true', help='Only insert username')
|
||||||
|
group.add_argument('--password-only', '-w', action='store_true', help='Only insert password')
|
||||||
|
group.add_argument('--otp-only', '-o', action='store_true', help='Only insert OTP code')
|
||||||
|
|
||||||
|
stderr = functools.partial(print, file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
class ExitCodes(enum.IntEnum):
|
||||||
|
SUCCESS = 0
|
||||||
|
FAILURE = 1
|
||||||
|
# 1 is automatically used if Python throws an exception
|
||||||
|
NO_PASS_CANDIDATES = 2
|
||||||
|
COULD_NOT_MATCH_USERNAME = 3
|
||||||
|
COULD_NOT_MATCH_PASSWORD = 4
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotMatchUsername(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotMatchPassword(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def qute_command(command):
|
||||||
|
with open(os.environ['QUTE_FIFO'], 'w') as fifo:
|
||||||
|
fifo.write(command + '\n')
|
||||||
|
fifo.flush()
|
||||||
|
|
||||||
|
|
||||||
|
def find_pass_candidates(domain):
|
||||||
|
candidates = []
|
||||||
|
|
||||||
|
if arguments.mode == "gopass":
|
||||||
|
all_passwords = subprocess.run(["gopass", "list", "--flat" ], stdout=subprocess.PIPE).stdout.decode("UTF-8").splitlines()
|
||||||
|
|
||||||
|
for password in all_passwords:
|
||||||
|
if domain in password:
|
||||||
|
candidates.append(password)
|
||||||
|
else:
|
||||||
|
for path, directories, file_names in os.walk(arguments.password_store, followlinks=True):
|
||||||
|
secrets = fnmatch.filter(file_names, '*.gpg')
|
||||||
|
if not secrets:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Strip password store path prefix to get the relative pass path
|
||||||
|
pass_path = path[len(arguments.password_store):]
|
||||||
|
split_path = pass_path.split(os.path.sep)
|
||||||
|
for secret in secrets:
|
||||||
|
secret_base = os.path.splitext(secret)[0]
|
||||||
|
if domain not in (split_path + [secret_base]):
|
||||||
|
continue
|
||||||
|
|
||||||
|
candidates.append(os.path.join(pass_path, secret_base))
|
||||||
|
return candidates
|
||||||
|
|
||||||
|
|
||||||
|
def _run_pass(pass_arguments):
|
||||||
|
# The executable is conveniently named after it's mode [pass|gopass].
|
||||||
|
pass_command = [arguments.mode]
|
||||||
|
env = os.environ.copy()
|
||||||
|
env['PASSWORD_STORE_DIR'] = arguments.password_store
|
||||||
|
process = subprocess.run(pass_command + pass_arguments, env=env, stdout=subprocess.PIPE)
|
||||||
|
return process.stdout.decode(arguments.io_encoding).strip()
|
||||||
|
|
||||||
|
|
||||||
|
def pass_(path):
|
||||||
|
return _run_pass(['show', path])
|
||||||
|
|
||||||
|
|
||||||
|
def pass_otp(path):
|
||||||
|
if arguments.mode == "gopass":
|
||||||
|
return _run_pass(['otp', '-o', path])
|
||||||
|
return _run_pass(['otp', path])
|
||||||
|
|
||||||
|
|
||||||
|
def dmenu(items, invocation):
|
||||||
|
command = shlex.split(invocation)
|
||||||
|
process = subprocess.run(command, input='\n'.join(items).encode(arguments.io_encoding), stdout=subprocess.PIPE)
|
||||||
|
return process.stdout.decode(arguments.io_encoding).strip()
|
||||||
|
|
||||||
|
|
||||||
|
def fake_key_raw(text):
|
||||||
|
for character in text:
|
||||||
|
# Escape all characters by default, space requires special handling
|
||||||
|
sequence = '" "' if character == ' ' else '\{}'.format(character)
|
||||||
|
qute_command('fake-key {}'.format(sequence))
|
||||||
|
|
||||||
|
|
||||||
|
def extract_password(secret, pattern):
|
||||||
|
match = re.match(pattern, secret)
|
||||||
|
if not match:
|
||||||
|
raise CouldNotMatchPassword("Pattern did not match target")
|
||||||
|
try:
|
||||||
|
return match.group(1)
|
||||||
|
except IndexError:
|
||||||
|
raise CouldNotMatchPassword("Pattern did not contain capture group, please use capture group. Example: (.*)")
|
||||||
|
|
||||||
|
|
||||||
|
def extract_username(target, pattern):
|
||||||
|
match = re.search(pattern, target, re.MULTILINE)
|
||||||
|
if not match:
|
||||||
|
raise CouldNotMatchUsername("Pattern did not match target")
|
||||||
|
try:
|
||||||
|
return match.group(1)
|
||||||
|
except IndexError:
|
||||||
|
raise CouldNotMatchUsername("Pattern did not contain capture group, please use capture group. Example: (.*)")
|
||||||
|
|
||||||
|
|
||||||
|
def main(arguments):
|
||||||
|
if not arguments.url:
|
||||||
|
argument_parser.print_help()
|
||||||
|
return ExitCodes.FAILURE
|
||||||
|
|
||||||
|
extractor = tldextract.TLDExtract(extra_suffixes=arguments.extra_url_suffixes.split(','))
|
||||||
|
extract_result = extractor(arguments.url)
|
||||||
|
|
||||||
|
# Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains),
|
||||||
|
# the registered domain name, the IPv4 address if that's what the URL represents and finally the private domain
|
||||||
|
# (if a non-public suffix was used).
|
||||||
|
candidates = set()
|
||||||
|
attempted_targets = []
|
||||||
|
|
||||||
|
private_domain = ''
|
||||||
|
if not extract_result.suffix:
|
||||||
|
private_domain = ('.'.join((extract_result.subdomain, extract_result.domain))
|
||||||
|
if extract_result.subdomain else extract_result.domain)
|
||||||
|
|
||||||
|
for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.ipv4, private_domain]):
|
||||||
|
attempted_targets.append(target)
|
||||||
|
target_candidates = find_pass_candidates(target)
|
||||||
|
if not target_candidates:
|
||||||
|
continue
|
||||||
|
|
||||||
|
candidates.update(target_candidates)
|
||||||
|
if not arguments.merge_candidates:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if not candidates:
|
||||||
|
stderr('No pass candidates for URL {!r} found! (I tried {!r})'.format(arguments.url, attempted_targets))
|
||||||
|
return ExitCodes.NO_PASS_CANDIDATES
|
||||||
|
|
||||||
|
selection = candidates.pop() if len(candidates) == 1 else dmenu(sorted(candidates), arguments.dmenu_invocation)
|
||||||
|
# Nothing was selected, simply return
|
||||||
|
if not selection:
|
||||||
|
return ExitCodes.SUCCESS
|
||||||
|
|
||||||
|
# If username-target is path and user asked for username-only, we don't need to run pass.
|
||||||
|
# Or if using otp-only, it will run pass on its own.
|
||||||
|
secret = None
|
||||||
|
if not (arguments.username_target == 'path' and arguments.username_only) and not arguments.otp_only:
|
||||||
|
secret = pass_(selection)
|
||||||
|
username_target = selection if arguments.username_target == 'path' else secret
|
||||||
|
try:
|
||||||
|
if arguments.username_only:
|
||||||
|
fake_key_raw(extract_username(username_target, arguments.username_pattern))
|
||||||
|
elif arguments.password_only:
|
||||||
|
fake_key_raw(extract_password(secret, arguments.password_pattern))
|
||||||
|
elif arguments.otp_only:
|
||||||
|
otp = pass_otp(selection)
|
||||||
|
fake_key_raw(otp)
|
||||||
|
else:
|
||||||
|
# Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch
|
||||||
|
# back into insert-mode, so the form can be directly submitted by hitting enter afterwards
|
||||||
|
fake_key_raw(extract_username(username_target, arguments.username_pattern))
|
||||||
|
qute_command('fake-key <Tab>')
|
||||||
|
fake_key_raw(extract_password(secret, arguments.password_pattern))
|
||||||
|
except CouldNotMatchPassword as e:
|
||||||
|
stderr('Failed to match password, target: secret, error: {}'.format(e))
|
||||||
|
return ExitCodes.COULD_NOT_MATCH_PASSWORD
|
||||||
|
except CouldNotMatchUsername as e:
|
||||||
|
stderr('Failed to match username, target: {}, error: {}'.format(arguments.username_target, e))
|
||||||
|
return ExitCodes.COULD_NOT_MATCH_USERNAME
|
||||||
|
|
||||||
|
if arguments.insert_mode:
|
||||||
|
qute_command('mode-enter insert')
|
||||||
|
|
||||||
|
return ExitCodes.SUCCESS
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
arguments = argument_parser.parse_args()
|
||||||
|
sys.exit(main(arguments))
|
126
rofi/config.rasi
126
rofi/config.rasi
@ -1,126 +0,0 @@
|
|||||||
/*Dracula theme based on the Purple official rofi theme*/
|
|
||||||
|
|
||||||
* {
|
|
||||||
font: "Fira Code 14";
|
|
||||||
foreground: #f8f8f2;
|
|
||||||
background-color: #282a36;
|
|
||||||
active-background: #6272a4;
|
|
||||||
urgent-background: #ff5555;
|
|
||||||
selected-background: @active-background;
|
|
||||||
selected-urgent-background: @urgent-background;
|
|
||||||
selected-active-background: @active-background;
|
|
||||||
separatorcolor: @active-background;
|
|
||||||
bordercolor: @active-background;
|
|
||||||
}
|
|
||||||
|
|
||||||
#window {
|
|
||||||
background-color: @background-color;
|
|
||||||
border: 1;
|
|
||||||
border-radius: 6;
|
|
||||||
border-color: @bordercolor;
|
|
||||||
padding: 5;
|
|
||||||
}
|
|
||||||
#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 dash 0px 0px ;
|
|
||||||
border-color: @bordercolor;
|
|
||||||
spacing: 2px ;
|
|
||||||
scrollbar: false;
|
|
||||||
padding: 2px 0px 0px ;
|
|
||||||
}
|
|
||||||
#element {
|
|
||||||
border: 0;
|
|
||||||
padding: 1px ;
|
|
||||||
}
|
|
||||||
#element.normal.normal {
|
|
||||||
background-color: @background-color;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
#element.normal.urgent {
|
|
||||||
background-color: @urgent-background;
|
|
||||||
text-color: @urgent-foreground;
|
|
||||||
}
|
|
||||||
#element.normal.active {
|
|
||||||
background-color: @active-background;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
#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: @foreground;
|
|
||||||
}
|
|
||||||
#element.alternate.normal {
|
|
||||||
background-color: @background-color;
|
|
||||||
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: @foreground;
|
|
||||||
}
|
|
||||||
#prompt {
|
|
||||||
spacing: 0;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
#inputbar {
|
|
||||||
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
|
||||||
}
|
|
||||||
#textbox-prompt-colon {
|
|
||||||
expand: false;
|
|
||||||
str: ":";
|
|
||||||
margin: 0px 0.3em 0em 0em ;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
element-text, element-icon {
|
|
||||||
background-color: inherit;
|
|
||||||
text-color: inherit;
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
rofi.modi: window,run,ssh
|
|
||||||
rofi.width: 50
|
|
||||||
rofi.lines: 15
|
|
||||||
rofi.columns: 1
|
|
||||||
rofi.font: roboto mono 10
|
|
||||||
rofi.color-normal: #0e4470, #9dd9df, #0e4470, #016694, #9dd9df
|
|
||||||
rofi.color-urgent: #0e4470, #d6b48d, #22231D, #d6b48d, #9dd9df
|
|
||||||
rofi.color-active: #0e4470, #2db1b9, #0e4470, #2db1b9, #0e4470
|
|
||||||
rofi.color-window: #0e4470, #016694, #014665
|
|
||||||
rofi.bw: 5
|
|
||||||
rofi.location: 0
|
|
||||||
rofi.padding: 5
|
|
||||||
rofi.yoffset: 0
|
|
||||||
rofi.xoffset: 0
|
|
||||||
rofi.fixed-num-lines: true
|
|
||||||
rofi.terminal: rofi-sensible-terminal
|
|
||||||
rofi.ssh-client: ssh
|
|
||||||
rofi.ssh-command: {terminal} -e {ssh-client} {host}
|
|
||||||
rofi.run-command: {cmd}
|
|
||||||
rofi.parse-hosts: true
|
|
||||||
rofi.matching: normal
|
|
||||||
rofi.separator-style: none
|
|
||||||
rofi.scrollbar-width: 0
|
|
||||||
rofi.kb-mode-next: Shift+Right,Control+Tab,Alt+l
|
|
||||||
rofi.kb-mode-previous: Shift+Left,Control+Shift+Tab,Alt+h
|
|
||||||
rofi.kb-row-up: Up,Control+p,Shift+Tab,Shift+ISO_Left_Tab,Alt+k
|
|
||||||
rofi.kb-row-down: Down,Control+n,Alt+j
|
|
@ -1,5 +1,5 @@
|
|||||||
[directory]
|
[directory]
|
||||||
truncation_length = 3
|
truncation_length = 8
|
||||||
truncation_symbol = "…/"
|
truncation_symbol = "…/"
|
||||||
|
|
||||||
[line_break]
|
[line_break]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user