Compare commits
	
		
			24 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 9b77ba85ed | ||
|  | f84de51208 | ||
|  | 3752afd442 | ||
|  | d0b12cc649 | ||
|  | 1c493a18d5 | ||
|  | 9d21e238eb | ||
|  | c3f73a7863 | ||
|  | 44cac44e4c | ||
|  | d7d1a8eedc | ||
|  | de6455136e | ||
|  | 79bd690e49 | ||
|  | 04c9ceda03 | ||
| 3a1e82ff49 | |||
| 09a241efb9 | |||
| 7bff8a4f00 | |||
| 53582d2a7c | |||
| 3921a49856 | |||
| 38849a9f8b | |||
| 9c25c9f531 | |||
| d314f20b5e | |||
| e7462827d5 | |||
| 8212d1f5e2 | |||
| c38f8b5633 | |||
| faa991bbaf | 
| @ -9,24 +9,27 @@ alias cp='cp -i' | ||||
| alias mv='mv -i' | ||||
| 
 | ||||
| # useful commands | ||||
| alias p="sudo pacman" | ||||
| alias y="yay" | ||||
| alias upgrade="sudo pacman -Syyu && yay -Syyu" | ||||
| alias ls="exa --group-directories-first -lh" | ||||
| alias l="exa --group-directories-first -lh" | ||||
| alias la="exa --group-directories-first -alh" | ||||
| alias pp="paruz -S" | ||||
| alias pr="paruz -R" | ||||
| alias upgrade="sudo pacman -Syyu" | ||||
| alias ls="exa --icons" | ||||
| alias l="exa --icons --group-directories-first -lh" | ||||
| alias la="exa --icons  --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 q="exit" | ||||
| 
 | ||||
| alias x="exit" | ||||
| # nvim edits | ||||
| alias cfi3="nvim ~/.config/i3/config" | ||||
| alias cfi3s="nvim ~/.config/i3status/config" | ||||
| alias cfn="nvim ~/.config/nvim/init.vim" | ||||
| alias e="nvim ." | ||||
| alias e="nvim" | ||||
| 
 | ||||
| # cd commands | ||||
| alias c="cd ~/.config" | ||||
| alias cuni="cd ~/Documents/Uni/CS && l" | ||||
| 
 | ||||
| # cli applications | ||||
| alias yt="youtube-viewer" | ||||
| 
 | ||||
| @ -34,5 +37,14 @@ alias yt="youtube-viewer" | ||||
| alias gs="git status" | ||||
| alias gp="git push" | ||||
| 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,15 +5,23 @@ export VISUAL=/usr/bin/nvim | ||||
| export EDITOR=/usr/bin/nvim | ||||
| export SPOTIPY_CLIENT_ID='aafa7f3fb81f46f681415f2cedfda2c8' | ||||
| export SPOTIPY_CLIENT_SECRET='6ebee1d932c34fcdb711d4bf14dac0de' | ||||
| export BW_SESSION="dFERFxdk1zdXiPxf54dULKCONLUSfUsg3KJ65lqIxhSy0SVbNCO5redWZ85YaGQ4ShGAV6zuKif7RO4dAy/K4g==" | ||||
| 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 GNUPGHOME="${XDG_DATA_HOME:-$HOME/.local/share}/gnupg" | ||||
| # - Ui4axsk9mwfw? -  | ||||
| 
 | ||||
| set -o vi | ||||
| bind -m vi-command 'Control-l: clear-screen' | ||||
| bind -m vi-insert 'Control-l: clear-screen' | ||||
| 
 | ||||
| #ufetch | ||||
| #bash ~/Git/fetch.sh/fetch.sh | ||||
| #bash ~/.scripts/we | ||||
| 
 | ||||
| #(cat $HOME/.config/wpg/sequences &) | ||||
| function lazygit() { | ||||
|     git add . | ||||
| @ -164,3 +172,8 @@ eval "$(zoxide 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 | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-Bold.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-Bold.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-BoldItalic.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-BoldItalic.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-Italic.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-Italic.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-Light.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-Light.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-LightIta.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-LightIta.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-MedIta.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-MedIta.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-Medium.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-Medium.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-Regular.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-Regular.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-SemBdIta.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-SemBdIta.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-SemiBold.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-SemiBold.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-Thin.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-Thin.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-ThinItalic.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-ThinItalic.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-UltLtIta.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-UltLtIta.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								ComicCodeLigatures-UltraLight.otf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ComicCodeLigatures-UltraLight.otf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -1,6 +1,7 @@ | ||||
| env: | ||||
|     TERM: xterm-256color | ||||
| 
 | ||||
|    | ||||
| scrolling: | ||||
|     history: 5000 | ||||
| 
 | ||||
| @ -8,6 +9,7 @@ window: | ||||
|  padding: | ||||
|     x: 0 | ||||
|     y: 0 | ||||
|     draw_bold_text_with_bright_colors: true | ||||
| 
 | ||||
| colors: | ||||
|   # Default colors | ||||
| @ -105,9 +107,11 @@ font: | ||||
|     #family: IBM Plex Mono | ||||
|     #family: Source Code Pro | ||||
|     #family: BlexMono Nerd Font | ||||
|     family: Fira Code | ||||
|     #family: Fira Code | ||||
|     #family: Blex Mono Bold Nerd Font Complete | ||||
|     family: Comic Code Ligatures | ||||
|     style:   | ||||
|   size: 6.95 | ||||
|   size: 12 | ||||
| 
 | ||||
|   url: | ||||
|     # URL launcher | ||||
| @ -128,4 +132,3 @@ Key_bindings: | ||||
|     - { key: C,        mods: Control|Alt,  action: Copy        } | ||||
|     - { key: Return,   mods: Control, action: SpawnNewInstance } | ||||
|     - { key: T,        mods: Control, action: SpawnNewInstance } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										188
									
								
								i3/config
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								i3/config
									
									
									
									
									
								
							| @ -3,8 +3,6 @@ | ||||
| # | ||||
| # Should you change your keyboard layout some time, delete | ||||
| # this file and re-run i3-config-wizard(1). | ||||
| # | ||||
| 
 | ||||
| # i3 config file (v4) | ||||
| # | ||||
| # Please see https://i3wm.org/docs/userguide.html for a complete reference! | ||||
| @ -19,8 +17,10 @@ set_from_resource $split i3wm.color10 "#9E664B0" | ||||
| #font pango: Source Code Pro 12px | ||||
| #font pango: IBM Plex Mono 11px | ||||
| #font pango: JetBrains Mono 8 | ||||
| #font pango: BlexMono Nerd Font 11px | ||||
| font pango: Fira Code 11px | ||||
| font pango: BlexMono Nerd Font 11px | ||||
| #font pango: Iosevka Nerd Font 13px | ||||
| #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 | ||||
| # text rendering and scalability on retina/hidpi displays (thanks to pango). | ||||
| @ -48,38 +48,40 @@ font pango: Fira Code 11px | ||||
| 
 | ||||
| # ------------------------- NEW COLORS  ------------------------- | ||||
| # class                 border    backgr.   text    indicator child_border | ||||
| client.focused          $coloract $coloract $white  $split $coloract | ||||
| client.focused_inactive $coloract $coloract $white  $split $coloract | ||||
| client.unfocused        $colorin  $colorin  #888888 $split $colorin | ||||
| client.urgent           #2f343a   #900000   $white  #900000 #900000 | ||||
| client.placeholder      #000000   #0c0c0c   $white  #000000 #0c0c0c | ||||
| 
 | ||||
| client.background       #ffffff | ||||
| 
 | ||||
| #client.focused          $coloract $coloract $white  $split $coloract | ||||
| #client.focused_inactive $coloract $coloract $white  $split $coloract | ||||
| #client.unfocused        $colorin  $colorin  #888888 $split $colorin | ||||
| #client.urgent           #2f343a   #900000   $white  #900000 #900000 | ||||
| #client.placeholder      #000000   #0c0c0c   $white  #000000 #0c0c0c | ||||
| 
 | ||||
| #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 | ||||
| # 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 | ||||
| # screen before suspend. Use loginctl lock-session to lock your screen. | ||||
| exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork | ||||
| exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork --color=000000 | ||||
| exec --no-startup-id setxkbmap -option | ||||
| exec --no-startup-id autotiling | ||||
| # 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. | ||||
| exec --no-startup-id nm-applet | ||||
| exec --no-startup-id redshift | ||||
| #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 bash ~/.fehbg & | ||||
| # exec --no-startup-id guake #retire until its fixed? | ||||
| exec --no-startup-id picom -c | ||||
| 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. | ||||
| set $refresh_i3status killall -SIGUSR1 i3status | ||||
| @ -87,13 +89,22 @@ 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 XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status | ||||
| 
 | ||||
| # Binds for - and + for volume | ||||
| # Binds for - and + for volume on keypad! | ||||
| 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_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 | ||||
| 
 | ||||
| # 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 | ||||
| floating_modifier $mod | ||||
| 
 | ||||
| @ -124,22 +135,28 @@ bindsym $mod+Shift+Down move down | ||||
| bindsym $mod+Shift+Up move up | ||||
| bindsym $mod+Shift+Right move right | ||||
| 
 | ||||
| 
 | ||||
| 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+Down resize shrink height 1 px or 1 ppt | ||||
| bindsym $mod+Ctrl+Left resize grow width 1 px or 1 ppt | ||||
| 
 | ||||
| # multi moniter support | ||||
| bindsym $mod+greater move workspace to output right | ||||
| bindsym $mod+less move workspace to output left | ||||
| # focus monitors | ||||
| bindsym $mod+bracketleft focus 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 | ||||
| bindsym $mod+semicolon split h  | ||||
| #bindsym $mod+semicolon split h  | ||||
| 
 | ||||
| # 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 | ||||
| bindsym $mod+f fullscreen toggle | ||||
| @ -147,7 +164,8 @@ bindsym $mod+f fullscreen toggle | ||||
| # change container layout (stacked, tabbed, toggle split) | ||||
| #bindsym $mod+s layout stacking | ||||
| #bindsym $mod+w layout tabbed | ||||
| bindsym $mod+s layout toggle split | ||||
| #bindsym $mod+s layout toggle tabbed | ||||
| bindsym $mod+Tab layout toggle tabbed split | ||||
| 
 | ||||
| # toggle tiling / floating | ||||
| bindsym $mod+space floating toggle | ||||
| @ -156,13 +174,13 @@ bindsym $mod+space floating toggle | ||||
| bindsym $mod+Shift+space focus mode_toggle | ||||
| 
 | ||||
| # focus the parent container | ||||
| bindsym $mod+a focus parent | ||||
| #bindsym $mod+a focus parent | ||||
| 
 | ||||
| # focus the child container | ||||
| #bindsym $mod+d focus child | ||||
| 
 | ||||
| new_window pixel 2 | ||||
| default_border pixel 2 | ||||
| new_window pixel 3 | ||||
| default_border pixel 3 | ||||
| 
 | ||||
| gaps inner 14 | ||||
| gaps outer 14 | ||||
| @ -178,25 +196,20 @@ bindsym $mod+shift+o			gaps outer current minus 5 | ||||
| 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 | ||||
| 
 | ||||
| 
 | ||||
| #### Programs | ||||
| 
 | ||||
| bindsym $mod+Return exec alacritty  | ||||
| bindsym $mod+Return exec kitty  | ||||
| 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+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+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  | ||||
| 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 ::: | ||||
| #WHOLE SCREEN | ||||
| bindsym Print exec scrot $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png | ||||
| 
 | ||||
| @ -207,33 +220,36 @@ 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 bash /home/simon/.scripts/vscrnpaste | ||||
| 
 | ||||
| ##OPEN DIR | ||||
| bindsym $mod+s exec --no-startup-id nautilus ~/Pictures/Screenshots/  | ||||
| 
 | ||||
| #### ROFI | ||||
| bindsym $mod+e exec --no-startup-id rofi -show emoji -modi emoji | ||||
| 
 | ||||
| bindsym $mod+Shift+e exec --no-startup-id rofi -show | ||||
| #bindsym $mod+e exec --no-startup-id rofi -show | ||||
| bindsym Menu exec --no-startup-id rofi -show | ||||
| bindsym $mod+Shift+e exec --no-startup-id rofi -show emoji -modi emoji | ||||
| bindsym $mod+d exec rofi -show run  | ||||
| bindsym $mod+Shift+d exec rofi -show drun -show-icons true | ||||
| 
 | ||||
| #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 | ||||
| 
 | ||||
| for_window [class="feh" instance="feh"] floating enable | ||||
| for_window [class="org.pwmt.zathura" instance="zathura"] floating enable | ||||
| for_window [class="gl" instance="mpv"] floating enable | ||||
| for_window [instance="gammy"] floating enable | ||||
| for_window [class="^.*"] border pixel 3 | ||||
| 
 | ||||
| #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 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 XF86MonBrightnessUp exec light -A 5 # increase screen brightness | ||||
| bindsym $mod+w exec --no-startup-id brave www.simonkellet.xyz | ||||
| bindsym $mod+Shift+w exec --no-startup-id qutebrowser www.simonkellet.xyz | ||||
| bindsym $mod+Ctrl+w exec --no-startup-id alacritty -e amfora simonkellet.xyz | ||||
| bindsym $mod+w exec --no-startup-id brave | ||||
| bindsym $mod+Shift+w exec --no-startup-id qutebrowser simonkellet.xyz | ||||
| bindsym $mod+Ctrl+w exec --no-startup-id kitty -e amfora simonkellet.xyz | ||||
| 
 | ||||
| # Define names for default workspaces for which we configure key bindings later on. | ||||
| # We use variables to avoid repeating the names in multiple places. | ||||
| @ -248,6 +264,18 @@ set $ws8 "8" | ||||
| set $ws9 "9" | ||||
| 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 | ||||
| bindsym $mod+1 workspace number $ws1 | ||||
| bindsym $mod+2 workspace number $ws2 | ||||
| @ -304,10 +332,10 @@ mode "resize" { | ||||
|         bindsym $mod+r mode "default" | ||||
| } | ||||
| 
 | ||||
| bindsym $mod+r mode "resize" | ||||
| 
 | ||||
| set $Locker i3lock && sleep 1 | ||||
| #bindsym $mod+r mode "resize" #not used! | ||||
| 
 | ||||
| #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 | ||||
|   | ||||
| mode "$mode_system" { | ||||
| @ -322,10 +350,8 @@ mode "$mode_system" { | ||||
| 	bindsym Return mode "default" | ||||
| 	bindsym Escape mode "default" | ||||
| } | ||||
| 
 | ||||
| bindsym $mod+Escape mode "$mode_system" | ||||
| 
 | ||||
| # | ||||
| #set $coloract "#6a8e7a" | ||||
| #set $colorin "#3c5045" | ||||
| #set_from_resource $white i3wm.color15 "#fefbec" | ||||
| @ -338,21 +364,33 @@ bar { | ||||
|     modifier none | ||||
|     status_command i3status | ||||
|     tray_output primary | ||||
|     tray_output eDP-1 | ||||
| 	i3bar_command i3bar  | ||||
|     position bottom | ||||
|     position top | ||||
|     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 { | ||||
|     background #000000 | ||||
|     statusline $white | ||||
|     separator  $white | ||||
|     background #282A36 | ||||
|     statusline #F8F8F2 | ||||
|     separator  #44475A | ||||
| 
 | ||||
|     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 | ||||
|     focused_workspace  #44475A #44475A #F8F8F2 | ||||
|     active_workspace   #282A36 #44475A #F8F8F2 | ||||
|     inactive_workspace #282A36 #282A36 #BFBFBF | ||||
|     urgent_workspace   #FF5555 #FF5555 #F8F8F2 | ||||
|     binding_mode       #FF5555 #FF5555 #F8F8F2 | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| bindsym $mod+b bar mode toggle  | ||||
|  | ||||
							
								
								
									
										35
									
								
								i3lock/lock.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										35
									
								
								i3lock/lock.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,35 @@ | ||||
| #!/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"       \ | ||||
							
								
								
									
										31
									
								
								i3lock/lock_bar.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								i3lock/lock_bar.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,31 @@ | ||||
| #!/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 { | ||||
|         format = " %d/%m/%Y %H:%M" | ||||
|         format = " (%a) %d/%m/%Y %H:%M" | ||||
| } | ||||
|  | ||||
							
								
								
									
										19
									
								
								kitty/diff.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								kitty/diff.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| 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 | ||||
							
								
								
									
										62
									
								
								kitty/dracula.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								kitty/dracula.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| # 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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1522
									
								
								kitty/kitty.conf
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								kitty/themes
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								kitty/themes
									
									
									
									
									
										Submodule
									
								
							| @ -0,0 +1 @@ | ||||
| Subproject commit b1abdd54ba655ef34f75a568d78625981bf1722c | ||||
							
								
								
									
										5
									
								
								nvim/UltiSnips/beg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								nvim/UltiSnips/beg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| snippet beg "begin{} / end{}" bA | ||||
| \begin{$1} | ||||
| 	$0 | ||||
| \end{$1} | ||||
| endsnippet | ||||
							
								
								
									
										3
									
								
								nvim/UltiSnips/std.snippets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								nvim/UltiSnips/std.snippets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| snippet std "use namespace std" b | ||||
| using namespace std; | ||||
| endsnippet | ||||
							
								
								
									
										160
									
								
								nvim/init.vim
									
									
									
									
									
								
							
							
						
						
									
										160
									
								
								nvim/init.vim
									
									
									
									
									
								
							| @ -1,6 +1,22 @@ | ||||
| call plug#begin('~/local/share/nvim/plugged') | ||||
| 
 | ||||
| " Lightline | ||||
| 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' | ||||
| 
 | ||||
| " Fzf | ||||
| @ -11,7 +27,7 @@ Plug 'junegunn/fzf.vim' | ||||
| Plug 'junegunn/limelight.vim' | ||||
| 
 | ||||
| " NERDTree | ||||
| Plug 'scrooloose/nerdtree' | ||||
| Plug 'preservim/nerdtree' | ||||
| 
 | ||||
| " Improvements Plug 'terryma/vim-multiple-cursors' | ||||
| Plug 'tpope/vim-eunuch' | ||||
| @ -20,8 +36,8 @@ Plug 'scrooloose/syntastic' | ||||
| Plug 'jiangmiao/auto-pairs' | ||||
| 
 | ||||
| "Airline | ||||
| Plug 'vim-airline/vim-airline' | ||||
| Plug 'vim-airline/vim-airline-themes' | ||||
| "Plug 'vim-airline/vim-airline' | ||||
| "Plug 'vim-airline/vim-airline-themes' | ||||
| Plug 'prabirshrestha/vim-lsp' | ||||
| 
 | ||||
| " Themes | ||||
| @ -29,28 +45,91 @@ Plug 'tomasr/molokai' | ||||
| Plug 'gko/vim-coloresque' | ||||
| Plug 'dracula/vim', { 'as': 'dracula' } | ||||
| Plug 'joshdick/onedark.vim' | ||||
| 
 | ||||
| Plug 'Mofiqul/dracula.nvim' | ||||
| " Lang. Support | ||||
| Plug 'fatih/vim-go' | ||||
| """""""""""""""""""""""""""""""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' | ||||
| autocmd FileType java setlocal omnifunc=javacomplete#Complete | ||||
| 
 | ||||
| "Plug 'Valloric/YouCompleteMe', { 'do': './install.py' } | ||||
| Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } | ||||
| Plug 'zchee/deoplete-jedi' | ||||
| Plug 'deoplete-plugins/deoplete-clang' | ||||
| Plug 'davidhalter/jedi-vim' | ||||
| 
 | ||||
| " RUST | ||||
| Plug 'rust-lang/rust.vim' | ||||
| Plug 'simrat39/rust-tools.nvim' | ||||
| 
 | ||||
| Plug 'neovim/nvim-lspconfig' | ||||
| Plug 'preservim/nerdcommenter' | ||||
| Plug 'mattn/emmet-vim' | ||||
| 
 | ||||
| " Code Folding | ||||
| Plug 'tmhedberg/SimpylFold' | ||||
| 
 | ||||
| " Writing | ||||
| " Code Formatting | ||||
| Plug 'Chiel92/vim-autoformat' | ||||
| noremap <F3> :Autoformat<CR> | ||||
| 
 | ||||
| " Indent Blanklines | ||||
| Plug 'lukas-reineke/indent-blankline.nvim' | ||||
| 
 | ||||
| " Writing in LaTeX | ||||
| Plug 'junegunn/goyo.vim' | ||||
| Plug 'lervag/vimtex' | ||||
| Plug 'xuhdev/vim-latex-live-preview', { 'for': 'tex' } | ||||
| " 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' | ||||
| 
 | ||||
| "Zoxide | ||||
| set conceallevel=1 | ||||
| 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' | ||||
| 
 | ||||
| " Vim Wiki | ||||
| @ -59,6 +138,8 @@ Plug 'mattn/calendar-vim' | ||||
| 
 | ||||
| " Animate | ||||
| " Plug 'camspiers/animate.vim' | ||||
| 
 | ||||
| " Lens | ||||
| Plug 'camspiers/lens.vim' | ||||
| 
 | ||||
| " Better Syntax Support | ||||
| @ -71,12 +152,25 @@ Plug 'tpope/vim-fugitive' | ||||
| " Icons | ||||
| 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() | ||||
| 
 | ||||
| 
 | ||||
| "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_linters = { | ||||
|     \ 'python': ['pylint'], | ||||
|     \ 'vim': ['vint'], | ||||
|     \ 'cpp': ['clang'], | ||||
|     \ 'c': ['clang'], | ||||
|     \ 'go': ['gopls'], | ||||
| \} | ||||
| syntax on | ||||
| filetype plugin indent on | ||||
| set shiftwidth=4 | ||||
| @ -84,12 +178,14 @@ set softtabstop=4 | ||||
| set tabstop=4 | ||||
| set expandtab | ||||
| set number relativenumber | ||||
| colorscheme onedark | ||||
| colorscheme dracula | ||||
| set nocompatible | ||||
| set encoding=UTF-8 | ||||
| set clipboard+=unnamedplus | ||||
| 
 | ||||
| set mouse=a | ||||
| set laststatus=3 | ||||
| set termguicolors  | ||||
| 
 | ||||
| " Map Leader | ||||
| let mapleader = "," | ||||
| 
 | ||||
| @ -98,11 +194,13 @@ let g:vimwiki_list = [{'path': '~/vimwiki/', | ||||
|                       \ 'syntax': 'markdown', 'ext': '.md'}] | ||||
| 
 | ||||
| :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 '%' | ||||
| 
 | ||||
| 
 | ||||
| let NERDTreeMapOpenInTab='<ENTER>' | ||||
| 
 | ||||
| " Insert Date | ||||
| nnoremap <silent><leader>d :put=system('date +%d/%b/%Y')<CR> | ||||
| 
 | ||||
| @ -118,10 +216,10 @@ let g:fzf_nvim_statusline = 0 " disable statusline overwriting | ||||
| nnoremap <silent> <leader><space> :Files<CR> | ||||
| nnoremap <silent> <leader>w :Windows<CR> | ||||
| nnoremap <silent> <leader>h :History<CR> | ||||
| nnoremap <silent> <leader>G<space> :GFiles<CR> | ||||
| nnoremap <silent> <leader>GS :GFiles?<CR> | ||||
| nnoremap <silent> <leader>G :GFiles<CR> | ||||
| " nnoremap <silent> <leader>GS :GFiles?<CR> | ||||
| 
 | ||||
| " Easy to update and reload nvim init file | ||||
| " Easy update and reload nvim init file | ||||
| nnoremap <Leader>e :e $MYVIMRC<CR> | ||||
| nnoremap <Leader>S :source $MYVIMRC<CR> | ||||
| 
 | ||||
| @ -130,9 +228,12 @@ let g:deoplete#enable_at_startup = 1 | ||||
| autocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endif | ||||
| let g:jedi#completions_enabled = 0 | ||||
| let g:jedi#use_splits_not_buffers = "right" | ||||
| " g:deoplete#sources#jedi#python_path = 'python3' | ||||
| let g:python3_host_prog = '/usr/bin/python3' | ||||
| 
 | ||||
| " Limeligt Binds | ||||
| " Limeligt + Goyo Binds | ||||
| nnoremap <Leader>l :Limelight!!<CR> | ||||
| nnoremap <Leader>g :Goyo<CR> | ||||
| let g:limelight_conceal_guifg = 'DarkGray' | ||||
| let g:limelight_conceal_guifg = '#777777' | ||||
| let g:limelight_conceal_ctermfg = 'gray' | ||||
| @ -155,9 +256,13 @@ nnoremap <A-Up> :tabn<CR> | ||||
| 
 | ||||
| " Basic cmd commands | ||||
| nnoremap <A-n> :!touch<Space> | ||||
| nnoremap <A-o> :tabe<Space> | ||||
| nnoremap <A-o> :e<Space> | ||||
| nnoremap <A-O> :tabe<Space> | ||||
| nnoremap <A-v> :vsplit<Space> | ||||
| 
 | ||||
| " Markdown Preview | ||||
| nnoremap <leader>m :MarkdownPreviewToggle<CR> | ||||
| 
 | ||||
| " Screenshot command | ||||
| nnoremap <silent> <leader>s :!bash /home/simon/.scripts/vscrnpaste<CR><CR> | ||||
| 
 | ||||
| @ -171,7 +276,7 @@ vmap < <gv | ||||
| vmap > >gv | ||||
| 
 | ||||
| " Open NERDTree | ||||
| nnoremap <leader>N :NERDTreeToggle<CR> | ||||
| nnoremap <leader><enter> :NERDTreeToggle<CR> | ||||
| 
 | ||||
| " Vimwiki md2html | ||||
| let g:vimwiki_list = [{ | ||||
| @ -187,3 +292,20 @@ let g:vimwiki_list = [{ | ||||
| " Vimwiki  | ||||
| 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,3 +60,152 @@ loadpantomime | ||||
| PlayID | ||||
| AgentID | ||||
| 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 | ||||
| # via config.load_autoconfig(). For more information, see: | ||||
| # https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#loading-autoconfigyml | ||||
| # https://github.com/qutebrowser/qutebrowser/blob/main/doc/help/configuring.asciidoc#loading-autoconfigyml | ||||
| # DO NOT edit this file by hand, qutebrowser will overwrite it. | ||||
| # 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') | ||||
| 
 | ||||
| c.url.searchengines["g"] = "https://www.google.co.uk/search?q={}" | ||||
| c.url.searchengines["ddg"] = "https://www.duckduckgo.com/?q={}" | ||||
| c.url.searchengines = {'DEFAULT': 'https://www.google.co.uk/search?q={}'} | ||||
| c.url.searchengines["b"] = "https://search.brave.com/search?q={}" | ||||
| c.url.searchengines["aw"] = "https://wiki.archlinux.org/?search={}" | ||||
| c.url.searchengines["yt"] = "http://www.youtube.com/results?search_query={}" | ||||
|  | ||||
							
								
								
									
										8
									
								
								qutebrowser/qsettings/QtProject.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								qutebrowser/qsettings/QtProject.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| [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 | ||||
| @ -1,278 +0,0 @@ | ||||
| #!/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)) | ||||
| @ -1,278 +0,0 @@ | ||||
| #!/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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								rofi/config.rasi
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,126 @@ | ||||
| /*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; | ||||
| } | ||||
							
								
								
									
										27
									
								
								rofi/config_ori
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								rofi/config_ori
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| 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] | ||||
| truncation_length = 8 | ||||
| truncation_length = 3 | ||||
| truncation_symbol = "…/" | ||||
| 
 | ||||
| [line_break] | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user