mirror of
				https://github.com/frebib/dotfiles.git
				synced 2024-06-14 12:57:23 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master' into surface
This commit is contained in:
		| @@ -1,4 +1,4 @@ | |||||||
| #!/bin/sh | #!/bin/bash | ||||||
|  |  | ||||||
| # Run all system xinitrc shell scripts | # Run all system xinitrc shell scripts | ||||||
| xinitdir="/etc/X11/xinit/xinitrc.d" | xinitdir="/etc/X11/xinit/xinitrc.d" | ||||||
| @@ -11,35 +11,12 @@ if [ -d "$xinitdir" ]; then | |||||||
|     done |     done | ||||||
| fi | fi | ||||||
|  |  | ||||||
| source $HOME/.profile | # Source generic xprofile stuff | ||||||
|  | source "$(dirname "${BASH_SOURCE[0]}")/xprofile" | ||||||
| xrdb -merge $XDG_CONFIG_HOME/X11/xresources |  | ||||||
| xrandr --dpi $(xrdb -query | grep -i xft.dpi | cut -d: -f2) |  | ||||||
| xrandr --output eDP1 --primary |  | ||||||
|  |  | ||||||
| setxkbmap -option caps:none |  | ||||||
| xset r rate 200 18 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| export TERMINAL="termite" |  | ||||||
| export BROWSER="chromium" |  | ||||||
| export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel" |  | ||||||
| export QT_QPA_PLATFORMTHEME=gtk2 |  | ||||||
| export QT_STYLE_OVERRIDE=gtk2 |  | ||||||
| export XDG_CURRENT_DESKTOP="GNOME" # Fixes xdg-open |  | ||||||
|  |  | ||||||
| # Merge system clipboards |  | ||||||
| if [ -n "$DISPLAY" ] && exists autocutsel && ! pidof autocutsel 1>/dev/null; then |  | ||||||
|     autocutsel -fork |  | ||||||
|     autocutsel -selection PRIMARY -fork |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # Start the gnome-keyring if it's installed | # Start the gnome-keyring if it's installed | ||||||
| if exists gnome-keyring-daemon; then | if exists gnome-keyring-daemon; then | ||||||
|     export $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gnupg) |     export $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gnupg) | ||||||
| fi | fi | ||||||
|  |  | ||||||
| ~/.local/share/surface-scripts/pend & |  | ||||||
| ~/.local/share/surface-scripts/rotationd & |  | ||||||
|  |  | ||||||
| exec i3 | exec i3 | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								.config/X11/xprofile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								.config/X11/xprofile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | # Graphical-specific environment variables | ||||||
|  | export TERMINAL="termite" | ||||||
|  | export BROWSER="chromium" | ||||||
|  | export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel" | ||||||
|  | export QT_QPA_PLATFORMTHEME=gtk2 | ||||||
|  | export QT_STYLE_OVERRIDE=gtk2 | ||||||
|  | export XDG_CURRENT_DESKTOP="GNOME" # Fixes xdg-open | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Load Xorg resources and set the DPI | ||||||
|  | xrdb -merge $XDG_CONFIG_HOME/X11/xresources | ||||||
|  | xrandr --dpi $(xrdb -query | grep -i xft.dpi | cut -d: -f2) | ||||||
|  | xrandr --output eDP1 --primary | ||||||
|  |  | ||||||
|  | setxkbmap -option caps:none | ||||||
|  | xset r rate 200 18 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Merge system clipboards | ||||||
|  | if [ -n "$DISPLAY" ] && exists autocutsel && ! pidof autocutsel 1>/dev/null; then | ||||||
|  |     autocutsel -fork | ||||||
|  |     autocutsel -selection PRIMARY -fork | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | ~/.local/share/surface-scripts/pend & | ||||||
|  | ~/.local/share/surface-scripts/rotationd & | ||||||
							
								
								
									
										463
									
								
								.config/alacritty/alacritty.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										463
									
								
								.config/alacritty/alacritty.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,463 @@ | |||||||
|  | # Configuration for Alacritty, the GPU enhanced terminal emulator. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Any items in the `env` entry below will be added as | ||||||
|  | # environment variables. Some entries may override variables | ||||||
|  | # set by alacritty itself. | ||||||
|  | env: | ||||||
|  |   # TERM variable | ||||||
|  |   # | ||||||
|  |   # This value is used to set the `$TERM` environment variable for | ||||||
|  |   # each instance of Alacritty. If it is not present, alacritty will | ||||||
|  |   # check the local terminfo database and use 'alacritty' if it is | ||||||
|  |   # available, otherwise 'xterm-256color' is used. | ||||||
|  |   # | ||||||
|  |   TERM: xterm-256color | ||||||
|  |  | ||||||
|  | window: | ||||||
|  |   # Window dimensions (changes require restart) | ||||||
|  |   # | ||||||
|  |   # Specified in number of columns/lines, not pixels. | ||||||
|  |   # If both are `0`, this setting is ignored. | ||||||
|  |   dimensions: | ||||||
|  |     columns: 80 | ||||||
|  |     lines: 24 | ||||||
|  |  | ||||||
|  |   # Window padding (changes require restart) | ||||||
|  |   # | ||||||
|  |   # Blank space added around the window in pixels. This padding is not scaled | ||||||
|  |   # by DPI and the specified value is always added at both opposing sides. | ||||||
|  |   padding: | ||||||
|  |     x: 8 | ||||||
|  |     y: 8 | ||||||
|  |  | ||||||
|  |   # Window decorations | ||||||
|  |   # | ||||||
|  |   # Values for `decorations`: | ||||||
|  |   #     - full: Borders and title bar | ||||||
|  |   #     - none: Neither borders nor title bar | ||||||
|  |   decorations: full | ||||||
|  |  | ||||||
|  | scrolling: | ||||||
|  |   # Maximum number of lines in the scrollback buffer. | ||||||
|  |   # Specifying '0' will disable scrolling. | ||||||
|  |   history: 10000 | ||||||
|  |  | ||||||
|  |   # Number of lines the viewport will move for every line scrolled when | ||||||
|  |   # scrollback is enabled (history > 0). | ||||||
|  |   multiplier: 3 | ||||||
|  |  | ||||||
|  |   # Faux Scrolling | ||||||
|  |   # | ||||||
|  |   # The `faux_multiplier` setting controls the number of lines the terminal | ||||||
|  |   # should scroll when the alternate screen buffer is active. This is used | ||||||
|  |   # to allow mouse scrolling for applications like `man`. | ||||||
|  |   # | ||||||
|  |   # Specifying `0` will disable faux scrolling. | ||||||
|  |   faux_multiplier: 3 | ||||||
|  |  | ||||||
|  |   # Scroll to the bottom when new text is written to the terminal. | ||||||
|  |   auto_scroll: false | ||||||
|  |  | ||||||
|  | # Spaces per Tab (changes require restart) | ||||||
|  | # | ||||||
|  | # This setting defines the width of a tab in cells. | ||||||
|  | # | ||||||
|  | # Some applications, like Emacs, rely on knowing about the width of a tab. | ||||||
|  | # To prevent unexpected behavior in these applications, it's also required to | ||||||
|  | # change the `it` value in terminfo when altering this setting. | ||||||
|  | tabspaces: 8 | ||||||
|  |  | ||||||
|  | # Font configuration (changes require restart) | ||||||
|  | # | ||||||
|  | # Important font attributes like antialiasing, subpixel aa, and hinting can be | ||||||
|  | # controlled through fontconfig. Specifically, the following attributes should | ||||||
|  | # have an effect: | ||||||
|  | #   - hintstyle | ||||||
|  | #   - antialias | ||||||
|  | #   - lcdfilter | ||||||
|  | #   - rgba | ||||||
|  | # | ||||||
|  | # For instance, if you wish to disable subpixel antialiasing, you might set the | ||||||
|  | # rgba property to `none`. If you wish to completely disable antialiasing, you | ||||||
|  | # can set antialias to `false`. | ||||||
|  | # | ||||||
|  | # Please see these resources for more information on how to use fontconfig: | ||||||
|  | #   - https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration | ||||||
|  | #   - file:///usr/share/doc/fontconfig/fontconfig-user.html | ||||||
|  | font: | ||||||
|  |   # Normal (roman) font face | ||||||
|  |   normal: | ||||||
|  |     family: monospace | ||||||
|  |     # The `style` can be specified to pick a specific face. | ||||||
|  |     # style: Regular | ||||||
|  |  | ||||||
|  |   # Bold font face | ||||||
|  |   bold: | ||||||
|  |     family: monospace | ||||||
|  |     # The `style` can be specified to pick a specific face. | ||||||
|  |     # style: Bold | ||||||
|  |  | ||||||
|  |   # Italic font face | ||||||
|  |   italic: | ||||||
|  |     family: monospace | ||||||
|  |     # The `style` can be specified to pick a specific face. | ||||||
|  |     # style: Italic | ||||||
|  |  | ||||||
|  |   # Point size | ||||||
|  |   size: 9.0 | ||||||
|  |  | ||||||
|  |   # Offset is the extra space around each character. `offset.y` can be thought of | ||||||
|  |   # as modifying the line spacing, and `offset.x` as modifying the letter spacing. | ||||||
|  |   offset: | ||||||
|  |     x: 0 | ||||||
|  |     y: 0 | ||||||
|  |  | ||||||
|  |   # Glyph offset determines the locations of the glyphs within their cells with | ||||||
|  |   # the default being at the bottom. Increasing `x` moves the glyph to the right, | ||||||
|  |   # increasing `y` moves the glyph upwards. | ||||||
|  |   glyph_offset: | ||||||
|  |     x: 0 | ||||||
|  |     y: 0 | ||||||
|  |  | ||||||
|  |   # Scale the font size based on the monitor's DPI. This will lead to bigger text on HiDPI | ||||||
|  |   # screens and make reading text a little easier. | ||||||
|  |   # On X11 it is possible to change the DPI for each instance of alacritty by using | ||||||
|  |   # `WINIT_HIDPI_FACTOR=1.0 alacritty` to scale the font. | ||||||
|  |   scale_with_dpi: true | ||||||
|  |  | ||||||
|  | # Display the time it takes to redraw each frame. | ||||||
|  | render_timer: false | ||||||
|  |  | ||||||
|  | # Use custom cursor colors. If `true`, the `colors.cursor.foreground` and | ||||||
|  | # `colors.cursor.background` colors will be used to display the cursor. | ||||||
|  | # Otherwise the cell colors are inverted for the cursor. | ||||||
|  | custom_cursor_colors: true | ||||||
|  |  | ||||||
|  | # If `true`, bold text is drawn using the bright color variants. | ||||||
|  | draw_bold_text_with_bright_colors: true | ||||||
|  |  | ||||||
|  | colors: | ||||||
|  |   # Default colors | ||||||
|  |   primary: | ||||||
|  |     foreground: '0xeceff1' | ||||||
|  |     background: '0x383c4a' | ||||||
|  |  | ||||||
|  |     # Bright and dim foreground colors | ||||||
|  |     # | ||||||
|  |     # The dimmed foreground color is calculated automatically if it is not present. | ||||||
|  |     # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors` | ||||||
|  |     # is `false`, the normal foreground color will be used. | ||||||
|  |     # | ||||||
|  |     #dim_foreground: '0x9a9a9a' | ||||||
|  |     #bright_foreground: '0xffffff' | ||||||
|  |  | ||||||
|  |   # Cursor colors | ||||||
|  |   # | ||||||
|  |   # These will only be used when the `custom_cursor_colors` field is set to `true`. | ||||||
|  |   cursor: | ||||||
|  |     text:       '0xeceff1' | ||||||
|  |     cursor:     '0x5294e2' | ||||||
|  |  | ||||||
|  |   # Normal colors | ||||||
|  |   normal: | ||||||
|  |     black:      '0x333638' | ||||||
|  |     red:        '0xf41f1c' | ||||||
|  |     green:      '0x8bc34a' | ||||||
|  |     yellow:     '0xffc107' | ||||||
|  |     blue:       '0x0266f4' | ||||||
|  |     magenta:    '0xcc17cc' | ||||||
|  |     cyan:       '0x10aeba' | ||||||
|  |     white:      '0x8b9396' | ||||||
|  |  | ||||||
|  |   # Bright colors | ||||||
|  |   bright: | ||||||
|  |     black:      '0x475760' | ||||||
|  |     red:        '0xe53727' | ||||||
|  |     green:      '0x9ccc65' | ||||||
|  |     yellow:     '0xffa000' | ||||||
|  |     blue:       '0x81b3f9' | ||||||
|  |     magenta:    '0xa56ecc' | ||||||
|  |     cyan:       '0x5ddae2' | ||||||
|  |     white:      '0xeceff1' | ||||||
|  |  | ||||||
|  |   # Indexed Colors | ||||||
|  |   # | ||||||
|  |   # The indexed colors include all colors from 16 to 256. | ||||||
|  |   # When these are not set, they're filled with sensible defaults. | ||||||
|  |   # | ||||||
|  |   #indexed_colors: | ||||||
|  |   #  - { index: 16, color: '0x000000' } | ||||||
|  |  | ||||||
|  | # Visual Bell | ||||||
|  | # | ||||||
|  | # Any time the BEL code is received, Alacritty "rings" the visual bell. Once | ||||||
|  | # rung, the terminal background will be set to white and transition back to the | ||||||
|  | # default background color. You can control the rate of this transition by | ||||||
|  | # setting the `duration` property (represented in milliseconds). You can also | ||||||
|  | # configure the transition function by setting the `animation` property. | ||||||
|  | # | ||||||
|  | # Values for `animation`: | ||||||
|  | #   - Ease | ||||||
|  | #   - EaseOut | ||||||
|  | #   - EaseOutSine | ||||||
|  | #   - EaseOutQuad | ||||||
|  | #   - EaseOutCubic | ||||||
|  | #   - EaseOutQuart | ||||||
|  | #   - EaseOutQuint | ||||||
|  | #   - EaseOutExpo | ||||||
|  | #   - EaseOutCirc | ||||||
|  | #   - Linear | ||||||
|  | # | ||||||
|  | # Specifying a `duration` of `0` will disable the visual bell. | ||||||
|  | visual_bell: | ||||||
|  |   animation: EaseOutExpo | ||||||
|  |   duration: 0 | ||||||
|  |  | ||||||
|  | # Background opacity | ||||||
|  | # | ||||||
|  | # Window opacity as a floating point number from `0.0` to `1.0`. | ||||||
|  | # The value `0.0` is completely transparent and `1.0` is opaque. | ||||||
|  | background_opacity: 0.95 | ||||||
|  |  | ||||||
|  | # Mouse bindings | ||||||
|  | # | ||||||
|  | # Available fields: | ||||||
|  | #   - mouse | ||||||
|  | #   - action | ||||||
|  | #   - mods (optional) | ||||||
|  | # | ||||||
|  | # Values for `mouse`: | ||||||
|  | #   - Middle | ||||||
|  | #   - Left | ||||||
|  | #   - Right | ||||||
|  | #   - Numeric identifier such as `5` | ||||||
|  | # | ||||||
|  | # All available `mods` and `action` values are documented in the key binding | ||||||
|  | # section. | ||||||
|  | mouse_bindings: | ||||||
|  |   - { mouse: Middle, action: PasteSelection } | ||||||
|  |  | ||||||
|  | mouse: | ||||||
|  |   # Click settings | ||||||
|  |   # | ||||||
|  |   # The `double_click` and `triple_click` settings control the time | ||||||
|  |   # alacritty should wait for accepting multiple clicks as one double | ||||||
|  |   # or triple click. | ||||||
|  |   double_click: { threshold: 300 } | ||||||
|  |   triple_click: { threshold: 300 } | ||||||
|  |  | ||||||
|  | selection: | ||||||
|  |   semantic_escape_chars: ",│`|:\"' ()[]{}<>" | ||||||
|  |  | ||||||
|  |   # When set to `true`, selected text will be copied to both the primary and | ||||||
|  |   # the selection clipboard. Otherwise, it will only be copied to the selection | ||||||
|  |   # clipboard. | ||||||
|  |   save_to_clipboard: false | ||||||
|  |  | ||||||
|  | dynamic_title: true | ||||||
|  |  | ||||||
|  | hide_cursor_when_typing: false | ||||||
|  |  | ||||||
|  | # Cursor style | ||||||
|  | # | ||||||
|  | # Values for 'cursor_style': | ||||||
|  | #   - Block | ||||||
|  | #   - Underline | ||||||
|  | #   - Beam | ||||||
|  | cursor_style: Block | ||||||
|  |  | ||||||
|  | # If this is `true`, the cursor will be rendered as a hollow box when the | ||||||
|  | # window is not focused. | ||||||
|  | unfocused_hollow_cursor: true | ||||||
|  |  | ||||||
|  | # Live config reload (changes require restart) | ||||||
|  | live_config_reload: true | ||||||
|  |  | ||||||
|  | # Shell | ||||||
|  | # | ||||||
|  | # You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`. | ||||||
|  | # Entries in `shell.args` are passed unmodified as arguments to the shell. | ||||||
|  | # | ||||||
|  | #shell: | ||||||
|  | #  program: /bin/bash | ||||||
|  | #  args: | ||||||
|  | #    - --login | ||||||
|  |  | ||||||
|  | # Key bindings | ||||||
|  | # | ||||||
|  | # Key bindings are specified as a list of objects. Each binding will specify | ||||||
|  | # a key and modifiers required to trigger it, terminal modes where the binding | ||||||
|  | # is applicable, and what should be done when the key binding fires. It can | ||||||
|  | # either send a byte sequnce to the running application (`chars`), execute | ||||||
|  | # a predefined action (`action`) or fork and execute a specified command plus | ||||||
|  | # arguments (`command`). | ||||||
|  | # | ||||||
|  | # Example: | ||||||
|  | #   `- { key: V, mods: Command, action: Paste }` | ||||||
|  | # | ||||||
|  | # Available fields: | ||||||
|  | #   - key | ||||||
|  | #   - mods (optional) | ||||||
|  | #   - chars | action | command (exactly one required) | ||||||
|  | #   - mode (optional) | ||||||
|  | # | ||||||
|  | # Values for `key`: | ||||||
|  | #   - `A` -> `Z` | ||||||
|  | #   - `F1` -> `F12` | ||||||
|  | #   - `Key1` -> `Key0` | ||||||
|  | # | ||||||
|  | #   A full list with available key codes can be found here: | ||||||
|  | #   https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants | ||||||
|  | # | ||||||
|  | # Values for `mods`: | ||||||
|  | #   - Command | ||||||
|  | #   - Control | ||||||
|  | #   - Shift | ||||||
|  | #   - Alt | ||||||
|  | # | ||||||
|  | #   Multiple `mods` can be combined using `|` like this: `mods: Control|Shift`. | ||||||
|  | #   Whitespace and capitalization is relevant and must match the example. | ||||||
|  | # | ||||||
|  | # Values for `chars`: | ||||||
|  | #   The `chars` field writes the specified string to the terminal. This makes | ||||||
|  | #   it possible to pass escape sequences. | ||||||
|  | #   To find escape codes for bindings like `PageUp` ("\x1b[5~"), you can run | ||||||
|  | #   the command `showkey -a` outside of tmux. | ||||||
|  | #   Note that applications use terminfo to map escape sequences back to | ||||||
|  | #   keys. It is therefore required to update the terminfo when | ||||||
|  | #   changing an escape sequence. | ||||||
|  | # | ||||||
|  | # Values for `action`: | ||||||
|  | #   - Paste | ||||||
|  | #   - PasteSelection | ||||||
|  | #   - Copy | ||||||
|  | #   - IncreaseFontSize | ||||||
|  | #   - DecreaseFontSize | ||||||
|  | #   - ResetFontSize | ||||||
|  | #   - ScrollPageUp | ||||||
|  | #   - ScrollPageDown | ||||||
|  | #   - ScrollToTop | ||||||
|  | #   - ScrollToBottom | ||||||
|  | #   - ClearHistory | ||||||
|  | #   - Hide | ||||||
|  | #   - Quit | ||||||
|  | # | ||||||
|  | # Values for `command`: | ||||||
|  | #   The `command` field must be a map containing a `program` string and | ||||||
|  | #   an `args` array of command line parameter strings. | ||||||
|  | # | ||||||
|  | #   Example: | ||||||
|  | #       `command: { program: "alacritty", args: ["-e", "vttest"] }` | ||||||
|  | # | ||||||
|  | # Values for `mode`: | ||||||
|  | #   - ~AppCursor | ||||||
|  | #   - AppCursor | ||||||
|  | #   - ~AppKeypad | ||||||
|  | #   - AppKeypad | ||||||
|  | key_bindings: | ||||||
|  |   - { key: V,        mods: Control|Shift,    action: Paste               } | ||||||
|  |   - { key: C,        mods: Control|Shift,    action: Copy                } | ||||||
|  |   - { key: Paste,                   action: Paste                        } | ||||||
|  |   - { key: Copy,                    action: Copy                         } | ||||||
|  |   - { key: Q,        mods: Command, action: Quit                         } | ||||||
|  |   - { key: W,        mods: Command, action: Quit                         } | ||||||
|  |   - { key: Insert,   mods: Shift,   action: PasteSelection               } | ||||||
|  |   - { key: Key0,     mods: Control, action: ResetFontSize                } | ||||||
|  |   - { key: Equals,   mods: Control, action: IncreaseFontSize             } | ||||||
|  |   - { key: Subtract, mods: Control, action: DecreaseFontSize             } | ||||||
|  |   - { key: Home,                    chars: "\x1bOH",   mode: AppCursor   } | ||||||
|  |   - { key: Home,                    chars: "\x1b[H",   mode: ~AppCursor  } | ||||||
|  |   - { key: End,                     chars: "\x1bOF",   mode: AppCursor   } | ||||||
|  |   - { key: End,                     chars: "\x1b[F",   mode: ~AppCursor  } | ||||||
|  |   - { key: PageUp,   mods: Shift,   chars: "\x1b[5;2~"                   } | ||||||
|  |   - { key: PageUp,   mods: Control, chars: "\x1b[5;5~"                   } | ||||||
|  |   - { key: PageUp,                  chars: "\x1b[5~"                     } | ||||||
|  |   - { key: PageDown, mods: Shift,   chars: "\x1b[6;2~"                   } | ||||||
|  |   - { key: PageDown, mods: Control, chars: "\x1b[6;5~"                   } | ||||||
|  |   - { key: PageDown,                chars: "\x1b[6~"                     } | ||||||
|  |   - { key: Tab,      mods: Shift,   chars: "\x1b[Z"                      } | ||||||
|  |   - { key: Back,                    chars: "\x7f"                        } | ||||||
|  |   - { key: Back,     mods: Alt,     chars: "\x1b\x7f"                    } | ||||||
|  |   - { key: Insert,                  chars: "\x1b[2~"                     } | ||||||
|  |   - { key: Delete,                  chars: "\x1b[3~"                     } | ||||||
|  |   - { key: Left,     mods: Shift,   chars: "\x1b[1;2D"                   } | ||||||
|  |   - { key: Left,     mods: Control, chars: "\x1b[1;5D"                   } | ||||||
|  |   - { key: Left,     mods: Alt,     chars: "\x1b[1;3D"                   } | ||||||
|  |   - { key: Left,                    chars: "\x1b[D",   mode: ~AppCursor  } | ||||||
|  |   - { key: Left,                    chars: "\x1bOD",   mode: AppCursor   } | ||||||
|  |   - { key: Right,    mods: Shift,   chars: "\x1b[1;2C"                   } | ||||||
|  |   - { key: Right,    mods: Control, chars: "\x1b[1;5C"                   } | ||||||
|  |   - { key: Right,    mods: Alt,     chars: "\x1b[1;3C"                   } | ||||||
|  |   - { key: Right,                   chars: "\x1b[C",   mode: ~AppCursor  } | ||||||
|  |   - { key: Right,                   chars: "\x1bOC",   mode: AppCursor   } | ||||||
|  |   - { key: Up,       mods: Shift,   chars: "\x1b[1;2A"                   } | ||||||
|  |   - { key: Up,       mods: Control, chars: "\x1b[1;5A"                   } | ||||||
|  |   - { key: Up,       mods: Alt,     chars: "\x1b[1;3A"                   } | ||||||
|  |   - { key: Up,                      chars: "\x1b[A",   mode: ~AppCursor  } | ||||||
|  |   - { key: Up,                      chars: "\x1bOA",   mode: AppCursor   } | ||||||
|  |   - { key: Down,     mods: Shift,   chars: "\x1b[1;2B"                   } | ||||||
|  |   - { key: Down,     mods: Control, chars: "\x1b[1;5B"                   } | ||||||
|  |   - { key: Down,     mods: Alt,     chars: "\x1b[1;3B"                   } | ||||||
|  |   - { key: Down,                    chars: "\x1b[B",   mode: ~AppCursor  } | ||||||
|  |   - { key: Down,                    chars: "\x1bOB",   mode: AppCursor   } | ||||||
|  |   - { key: F1,                      chars: "\x1bOP"                      } | ||||||
|  |   - { key: F2,                      chars: "\x1bOQ"                      } | ||||||
|  |   - { key: F3,                      chars: "\x1bOR"                      } | ||||||
|  |   - { key: F4,                      chars: "\x1bOS"                      } | ||||||
|  |   - { key: F5,                      chars: "\x1b[15~"                    } | ||||||
|  |   - { key: F6,                      chars: "\x1b[17~"                    } | ||||||
|  |   - { key: F7,                      chars: "\x1b[18~"                    } | ||||||
|  |   - { key: F8,                      chars: "\x1b[19~"                    } | ||||||
|  |   - { key: F9,                      chars: "\x1b[20~"                    } | ||||||
|  |   - { key: F10,                     chars: "\x1b[21~"                    } | ||||||
|  |   - { key: F11,                     chars: "\x1b[23~"                    } | ||||||
|  |   - { key: F12,                     chars: "\x1b[24~"                    } | ||||||
|  |   - { key: F1,       mods: Shift,   chars: "\x1b[1;2P"                   } | ||||||
|  |   - { key: F2,       mods: Shift,   chars: "\x1b[1;2Q"                   } | ||||||
|  |   - { key: F3,       mods: Shift,   chars: "\x1b[1;2R"                   } | ||||||
|  |   - { key: F4,       mods: Shift,   chars: "\x1b[1;2S"                   } | ||||||
|  |   - { key: F5,       mods: Shift,   chars: "\x1b[15;2~"                  } | ||||||
|  |   - { key: F6,       mods: Shift,   chars: "\x1b[17;2~"                  } | ||||||
|  |   - { key: F7,       mods: Shift,   chars: "\x1b[18;2~"                  } | ||||||
|  |   - { key: F8,       mods: Shift,   chars: "\x1b[19;2~"                  } | ||||||
|  |   - { key: F9,       mods: Shift,   chars: "\x1b[20;2~"                  } | ||||||
|  |   - { key: F10,      mods: Shift,   chars: "\x1b[21;2~"                  } | ||||||
|  |   - { key: F11,      mods: Shift,   chars: "\x1b[23;2~"                  } | ||||||
|  |   - { key: F12,      mods: Shift,   chars: "\x1b[24;2~"                  } | ||||||
|  |   - { key: F1,       mods: Control, chars: "\x1b[1;5P"                   } | ||||||
|  |   - { key: F2,       mods: Control, chars: "\x1b[1;5Q"                   } | ||||||
|  |   - { key: F3,       mods: Control, chars: "\x1b[1;5R"                   } | ||||||
|  |   - { key: F4,       mods: Control, chars: "\x1b[1;5S"                   } | ||||||
|  |   - { key: F5,       mods: Control, chars: "\x1b[15;5~"                  } | ||||||
|  |   - { key: F6,       mods: Control, chars: "\x1b[17;5~"                  } | ||||||
|  |   - { key: F7,       mods: Control, chars: "\x1b[18;5~"                  } | ||||||
|  |   - { key: F8,       mods: Control, chars: "\x1b[19;5~"                  } | ||||||
|  |   - { key: F9,       mods: Control, chars: "\x1b[20;5~"                  } | ||||||
|  |   - { key: F10,      mods: Control, chars: "\x1b[21;5~"                  } | ||||||
|  |   - { key: F11,      mods: Control, chars: "\x1b[23;5~"                  } | ||||||
|  |   - { key: F12,      mods: Control, chars: "\x1b[24;5~"                  } | ||||||
|  |   - { key: F1,       mods: Alt,     chars: "\x1b[1;6P"                   } | ||||||
|  |   - { key: F2,       mods: Alt,     chars: "\x1b[1;6Q"                   } | ||||||
|  |   - { key: F3,       mods: Alt,     chars: "\x1b[1;6R"                   } | ||||||
|  |   - { key: F4,       mods: Alt,     chars: "\x1b[1;6S"                   } | ||||||
|  |   - { key: F5,       mods: Alt,     chars: "\x1b[15;6~"                  } | ||||||
|  |   - { key: F6,       mods: Alt,     chars: "\x1b[17;6~"                  } | ||||||
|  |   - { key: F7,       mods: Alt,     chars: "\x1b[18;6~"                  } | ||||||
|  |   - { key: F8,       mods: Alt,     chars: "\x1b[19;6~"                  } | ||||||
|  |   - { key: F9,       mods: Alt,     chars: "\x1b[20;6~"                  } | ||||||
|  |   - { key: F10,      mods: Alt,     chars: "\x1b[21;6~"                  } | ||||||
|  |   - { key: F11,      mods: Alt,     chars: "\x1b[23;6~"                  } | ||||||
|  |   - { key: F12,      mods: Alt,     chars: "\x1b[24;6~"                  } | ||||||
|  |   - { key: F1,       mods: Super,   chars: "\x1b[1;3P"                   } | ||||||
|  |   - { key: F2,       mods: Super,   chars: "\x1b[1;3Q"                   } | ||||||
|  |   - { key: F3,       mods: Super,   chars: "\x1b[1;3R"                   } | ||||||
|  |   - { key: F4,       mods: Super,   chars: "\x1b[1;3S"                   } | ||||||
|  |   - { key: F5,       mods: Super,   chars: "\x1b[15;3~"                  } | ||||||
|  |   - { key: F6,       mods: Super,   chars: "\x1b[17;3~"                  } | ||||||
|  |   - { key: F7,       mods: Super,   chars: "\x1b[18;3~"                  } | ||||||
|  |   - { key: F8,       mods: Super,   chars: "\x1b[19;3~"                  } | ||||||
|  |   - { key: F9,       mods: Super,   chars: "\x1b[20;3~"                  } | ||||||
|  |   - { key: F10,      mods: Super,   chars: "\x1b[21;3~"                  } | ||||||
|  |   - { key: F11,      mods: Super,   chars: "\x1b[23;3~"                  } | ||||||
|  |   - { key: F12,      mods: Super,   chars: "\x1b[24;3~"                  } | ||||||
| @@ -149,7 +149,7 @@ | |||||||
|     max_icon_size = 72 |     max_icon_size = 72 | ||||||
|  |  | ||||||
|     # Paths to default icons. |     # Paths to default icons. | ||||||
|     icon_path = /usr/share/icons/Xenlism-Wildfire/Status/:/usr/share/icons/Xenlism-Wildfire/Devices/:/usr/share/icons/Adwaita/scalable/status:/usr/share/icons/Adwaita/scalable/devices |     icon_path = /usr/share/icons/Xenlism-Wildfire/Status/:/usr/share/icons/Xenlism-Wildfire/Devices/:/usr/share/icons/Adwaita/32x32/status:/usr/share/icons/Adwaita/32x32/devices | ||||||
|     frame_width = 4 |     frame_width = 4 | ||||||
|     frame_color = "#404552" |     frame_color = "#404552" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,9 +5,9 @@ | |||||||
| [core] | [core] | ||||||
| 	autocrlf = input | 	autocrlf = input | ||||||
| 	excludesfile = $HOME/.config/git/gitignore | 	excludesfile = $HOME/.config/git/gitignore | ||||||
| 	pager = /usr/share/git/diff-highlight/diff-highlight | $PAGER | 	pager = diff-highlight | $PAGER | ||||||
| [interactive] | [interactive] | ||||||
| 	diffFilter = /usr/share/git/diff-highlight/diff-highlight | 	diffFilter = diff-highlight | ||||||
| [commit] | [commit] | ||||||
| 	gpgsign = true | 	gpgsign = true | ||||||
| [push] | [push] | ||||||
|   | |||||||
| @@ -14,15 +14,15 @@ bindsym $alt+F4 kill | |||||||
|  |  | ||||||
| # change window focus | # change window focus | ||||||
| bindsym $mod+d focus left | bindsym $mod+d focus left | ||||||
| bindsym $mod+n focus right |  | ||||||
| bindsym $mod+t focus up |  | ||||||
| bindsym $mod+h focus down | bindsym $mod+h focus down | ||||||
|  | bindsym $mod+t focus up | ||||||
|  | bindsym $mod+n focus right | ||||||
|  |  | ||||||
| # move focused window | # move focused window | ||||||
| bindsym $mod+Shift+d move left | bindsym $mod+Shift+d move left | ||||||
| bindsym $mod+Shift+n move down | bindsym $mod+Shift+h move down | ||||||
| bindsym $mod+Shift+t move up | bindsym $mod+Shift+t move up | ||||||
| bindsym $mod+Shift+h move right | bindsym $mod+Shift+n move right | ||||||
|  |  | ||||||
| # split in horizontal orientation | # split in horizontal orientation | ||||||
| bindsym $mod+m split h | bindsym $mod+m split h | ||||||
| @@ -131,13 +131,11 @@ new_float none | |||||||
|  |  | ||||||
| gaps inner 9 | gaps inner 9 | ||||||
| gaps outer 1 | gaps outer 1 | ||||||
| #smart_gaps on |  | ||||||
|  |  | ||||||
| focus_follows_mouse yes | focus_follows_mouse yes | ||||||
|  |  | ||||||
| # keybindings | # keybindings | ||||||
| bindsym $mod+Shift+j            reload | bindsym $mod+Shift+j            reload | ||||||
| #bindsym $mod+Shift+p restart |  | ||||||
| bindsym $mod+c                  exec chromium | bindsym $mod+c                  exec chromium | ||||||
| bindsym $mod+v                  exec "i3-sensible-terminal -e \\"$SHELL -c vim;$SHELL\\" | bindsym $mod+v                  exec "i3-sensible-terminal -e \\"$SHELL -c vim;$SHELL\\" | ||||||
| bindsym $mod+Ctrl+v             exec "i3-sensible-terminal -r floating-term -e \\"$SHELL -c vim;$SHELL\\" | bindsym $mod+Ctrl+v             exec "i3-sensible-terminal -r floating-term -e \\"$SHELL -c vim;$SHELL\\" | ||||||
| @@ -147,13 +145,12 @@ bindsym $mod+Ctrl+Return  exec i3-sensible-terminal -r floating-term  --geometry | |||||||
| bindsym $mod+Shift+Return       exec i3-sensible-terminal -d "`xcwd`" | bindsym $mod+Shift+Return       exec i3-sensible-terminal -d "`xcwd`" | ||||||
| bindsym $mod+Ctrl+Shift+Return  exec i3-sensible-terminal -r floating-term --geometry 96x30 -d "`xcwd`" | bindsym $mod+Ctrl+Shift+Return  exec i3-sensible-terminal -r floating-term --geometry 96x30 -d "`xcwd`" | ||||||
| bindsym $mod+l                  exec ~/.config/i3/lock.sh | bindsym $mod+l                  exec ~/.config/i3/lock.sh | ||||||
| # -fg "#CCD3DAE3" -bg "#CC383C4A" -hlbg "#CC5294E2"  |  | ||||||
| bindsym $mod+space              exec "pkill rofi; rofi -show run -sidebar-mode -terminal i3-sensible-terminal -normal-window" | bindsym $mod+space              exec "pkill rofi; rofi -show run -sidebar-mode -terminal i3-sensible-terminal -normal-window" | ||||||
| bindsym $mod+Shift+p            exec rofi-pass | bindsym $mod+Shift+p            exec rofi-pass | ||||||
| bindsym $mod+Shift+e            exec rofi-emoji | bindsym $mod+Shift+e            exec rofi-emoji | ||||||
| bindsym $mod+Shift+i            exec rofi-fontawesome | bindsym $mod+Shift+i            exec rofi-fontawesome | ||||||
| bindsym --release Print        exec imgur-screenshot | bindsym --release Print         exec screenshot | ||||||
| bindsym --release $mod+Print   exec imgur-screenshot -f | bindsym --release $mod+Print    exec imgur-screenshot | ||||||
| bindsym $mod+$alt+space         exec --no-startup-id ~/.config/i3/cycleaudio.py && pkill -RTMIN+10 i3blocks | bindsym $mod+$alt+space         exec --no-startup-id ~/.config/i3/cycleaudio.py && pkill -RTMIN+10 i3blocks | ||||||
| bindsym $mod+numbersign         exec "termite -e 'sh -c xclip\ -o\ |\ gpg\ --decrypt\ 2>&1\ \;\ $SHELL'" | bindsym $mod+numbersign         exec "termite -e 'sh -c xclip\ -o\ |\ gpg\ --decrypt\ 2>&1\ \;\ $SHELL'" | ||||||
| bindsym $mod+r                  exec "bash -c 'pwgen -nc 32 1 | tee >(xargs notify-send Generated\ password\:) | xclip -i'" | bindsym $mod+r                  exec "bash -c 'pwgen -nc 32 1 | tee >(xargs notify-send Generated\ password\:) | xclip -i'" | ||||||
| @@ -170,10 +167,10 @@ bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT | |||||||
| bindsym XF86AudioMute           exec --no-startup-id pactl set-sink-mute   @DEFAULT_SINK@ toggle | bindsym XF86AudioMute           exec --no-startup-id pactl set-sink-mute   @DEFAULT_SINK@ toggle | ||||||
| bindsym XF86MonBrightnessUp     exec xbacklight -inc 5 && pkill -RTMIN+12 i3blocks | bindsym XF86MonBrightnessUp     exec xbacklight -inc 5 && pkill -RTMIN+12 i3blocks | ||||||
| bindsym XF86MonBrightnessDown   exec xbacklight -dec 5 && pkill -RTMIN+12 i3blocks | bindsym XF86MonBrightnessDown   exec xbacklight -dec 5 && pkill -RTMIN+12 i3blocks | ||||||
| exec --no-startup-id "ip monitor | while read; do pkill -RTMIN+15 i3blocks; done" |  | ||||||
|  |  | ||||||
| # app launch shortcuts | # app launch shortcuts | ||||||
| exec --no-startup-id ~/.config/i3/disable-standby-fs.py | exec --no-startup-id ~/.config/i3/disable-standby-fs.py | ||||||
|  | exec --no-startup-id "ip monitor | while read; do pkill -RTMIN+15 i3blocks; done" | ||||||
| exec --no-startup-id feh --no-fehbg --no-xinerama --bg-fill ~/pictures/lakesidesunrise.jpg | exec --no-startup-id feh --no-fehbg --no-xinerama --bg-fill ~/pictures/lakesidesunrise.jpg | ||||||
| exec --no-startup-id xautolock -time 5 -locker ~/.config/i3/lock.sh -nocloseout -nocloseerr | exec --no-startup-id xautolock -time 5 -locker ~/.config/i3/lock.sh -nocloseout -nocloseerr | ||||||
|  |  | ||||||
| @@ -188,6 +185,7 @@ exec --no-startup-id solaar | |||||||
| exec --no-startup-id pullover | exec --no-startup-id pullover | ||||||
| exec --no-startup-id onboard | exec --no-startup-id onboard | ||||||
| exec --no-startup-id touchegg | exec --no-startup-id touchegg | ||||||
|  | exec --no-startup-id mailnag | ||||||
| exec --no-startup-id compton -b --config ~/.config/compton.conf | exec --no-startup-id compton -b --config ~/.config/compton.conf | ||||||
| exec --no-startup-id chromium --no-startup-window | exec --no-startup-id chromium --no-startup-window | ||||||
| exec --no-startup-id thunderbird | exec --no-startup-id thunderbird | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								.config/mailnag/mailnag.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								.config/mailnag/mailnag.cfg
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | [spamfilterplugin] | ||||||
|  | filter_text = viagra | ||||||
|  |  | ||||||
|  | [core] | ||||||
|  | imap_idle_timeout = 10 | ||||||
|  | enabled_plugins = dbusplugin, libnotifyplugin, soundplugin | ||||||
|  | poll_interval = 10 | ||||||
|  | credentialstore = auto | ||||||
|  | connectivity_test = auto | ||||||
|  | autostart = 1 | ||||||
|  |  | ||||||
|  | [soundplugin] | ||||||
|  | soundfile = mailnag.ogg | ||||||
|  |  | ||||||
|  | [libnotifyplugin] | ||||||
|  | notification_mode = 2 | ||||||
|  | max_visible_mails = 10 | ||||||
|  |  | ||||||
|  | [account1] | ||||||
|  | enabled = 1 | ||||||
|  | name = frebib.net | ||||||
|  | user = me@frebib.net | ||||||
|  | password =  | ||||||
|  | server = imappro.zoho.com | ||||||
|  | port = 993 | ||||||
|  | ssl = 1 | ||||||
|  | imap = 1 | ||||||
|  | idle = 0 | ||||||
|  | folder = INBOX, Spam | ||||||
							
								
								
									
										42
									
								
								.config/mimeapps.list
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								.config/mimeapps.list
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | [Default Applications] | ||||||
|  |  | ||||||
|  | # eog for images | ||||||
|  | image/bmp=eog.desktop | ||||||
|  | image/gif=eog.desktop | ||||||
|  | image/jpeg=eog.desktop | ||||||
|  | image/jpg=eog.desktop | ||||||
|  | image/pjpeg=eog.desktop | ||||||
|  | image/png=eog.desktop | ||||||
|  | image/svg+xml-compressed=eog.desktop | ||||||
|  | image/svg+xml=eog.desktop | ||||||
|  | image/tiff=eog.desktop | ||||||
|  | image/x-bmp=eog.desktop | ||||||
|  | image/x-gray=eog.desktop | ||||||
|  | image/x-icb=eog.desktop | ||||||
|  | image/x-ico=eog.desktop | ||||||
|  | image/x-png=eog.desktop | ||||||
|  | image/x-portable-anymap=eog.desktop | ||||||
|  | image/x-portable-bitmap=eog.desktop | ||||||
|  | image/x-portable-graymap=eog.desktop | ||||||
|  | image/x-portable-pixmap=eog.desktop | ||||||
|  |  | ||||||
|  | # evince for pdfs | ||||||
|  | application/pdf=evince.desktop | ||||||
|  |  | ||||||
|  | # vim for textual files | ||||||
|  | application/x-shellscript=vim.desktop | ||||||
|  | text/english=vim.desktop | ||||||
|  | text/plain=vim.desktop | ||||||
|  | text/x-makefile=vim.desktop | ||||||
|  |  | ||||||
|  | # Chromium for web/html | ||||||
|  | text/html=chromium.desktop | ||||||
|  | x-scheme-handler/about=chromium.desktop | ||||||
|  | x-scheme-handler/http=chromium.desktop | ||||||
|  | x-scheme-handler/https=chromium.desktop | ||||||
|  | x-scheme-handler/unknown=chromium.desktop | ||||||
|  |  | ||||||
|  | # Various desktop applications | ||||||
|  | inode/directory=nautilus.desktop | ||||||
|  | x-scheme-handler/magnet=deluge.desktop | ||||||
|  | x-scheme-handler/tg=telegramdesktop.desktop | ||||||
| @@ -5,7 +5,9 @@ set undodir=$XDG_CACHE_HOME/vim/undo// | |||||||
| set directory=$XDG_CACHE_HOME/vim/swap// | set directory=$XDG_CACHE_HOME/vim/swap// | ||||||
| set backupdir=$XDG_CACHE_HOME/vim/backup// | set backupdir=$XDG_CACHE_HOME/vim/backup// | ||||||
| set viminfo+='1000,n$XDG_CACHE_HOME/vim/viminfo | set viminfo+='1000,n$XDG_CACHE_HOME/vim/viminfo | ||||||
| set runtimepath+=$XDG_CONFIG_HOME/vim,$VIMRUNTIME,$XDG_CONFIG_HOME/vim/after | set runtimepath-=$HOME/.vim | ||||||
|  | set runtimepath^=$XDG_CONFIG_HOME/vim,$VIMRUNTIME,$XDG_CONFIG_HOME/vim/after | ||||||
|  | let g:netrw_home=$XDG_CACHE_HOME.'/vim' | ||||||
|  |  | ||||||
| silent !mkdir -p $XDG_CACHE_HOME/vim/swap $XDG_CACHE_HOME/vim/undo $XDG_CACHE_HOME/vim/backup | silent !mkdir -p $XDG_CACHE_HOME/vim/swap $XDG_CACHE_HOME/vim/undo $XDG_CACHE_HOME/vim/backup | ||||||
|  |  | ||||||
| @@ -47,6 +49,9 @@ endfunction | |||||||
| set autowrite | set autowrite | ||||||
| autocmd CursorHold,CursorHoldI,InsertLeave,FocusGained,FocusLost * call SaveIfExist() | autocmd CursorHold,CursorHoldI,InsertLeave,FocusGained,FocusLost * call SaveIfExist() | ||||||
|  |  | ||||||
|  | " Auto-resize split on window resize | ||||||
|  | autocmd VimResized * wincmd = | ||||||
|  |  | ||||||
| " Search options | " Search options | ||||||
| set hlsearch | set hlsearch | ||||||
| set ignorecase | set ignorecase | ||||||
| @@ -100,13 +105,17 @@ Plug 'airblade/vim-gitgutter' | |||||||
| Plug 'ryanoasis/vim-devicons' | Plug 'ryanoasis/vim-devicons' | ||||||
| Plug 'vim-airline/vim-airline' | Plug 'vim-airline/vim-airline' | ||||||
| Plug 'vim-airline/vim-airline-themes' | Plug 'vim-airline/vim-airline-themes' | ||||||
| Plug 'chr4/nginx.vim' |  | ||||||
| Plug 'PotatoesMaster/i3-vim-syntax' |  | ||||||
| Plug 'lervag/vimtex' | Plug 'lervag/vimtex' | ||||||
| Plug 'JamshedVesuna/vim-markdown-preview' | Plug 'JamshedVesuna/vim-markdown-preview' | ||||||
| Plug 'junegunn/fzf.vim' | Plug 'junegunn/fzf.vim' | ||||||
| Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } | Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } | ||||||
|  |  | ||||||
|  | " Syntax Highlighting | ||||||
|  | Plug 'chr4/nginx.vim' | ||||||
|  | Plug 'PotatoesMaster/i3-vim-syntax' | ||||||
|  | Plug 'puppetlabs/puppet-syntax-vim' | ||||||
|  | Plug 'arrufat/vala.vim' | ||||||
|  |  | ||||||
| call plug#end() | call plug#end() | ||||||
|  |  | ||||||
| " Change to dvorak-mapped keys | " Change to dvorak-mapped keys | ||||||
| @@ -213,10 +222,6 @@ if (exists("g:use_dvorak") && g:use_dvorak == 1) | |||||||
| 	noremap h j | 	noremap h j | ||||||
| 	noremap t k | 	noremap t k | ||||||
| 	noremap n l | 	noremap n l | ||||||
| 	noremap D H |  | ||||||
| 	noremap H J |  | ||||||
| 	noremap T K |  | ||||||
| 	noremap N L |  | ||||||
|  |  | ||||||
| 	noremap gh gj | 	noremap gh gj | ||||||
| 	noremap gt gk | 	noremap gt gk | ||||||
| @@ -274,6 +279,18 @@ if (exists("g:use_dvorak") && g:use_dvorak == 1) | |||||||
|     " NERDTree configuration |     " NERDTree configuration | ||||||
|     let NERDTreeMapOpenInTab='\t'   " prevent t opening file |     let NERDTreeMapOpenInTab='\t'   " prevent t opening file | ||||||
|  |  | ||||||
|  |     " Also remap keys in :Explore | ||||||
|  |     augroup netrw_dvorak_fix | ||||||
|  |         autocmd! | ||||||
|  |         autocmd filetype netrw call Fix_netrw_maps_for_dvorak() | ||||||
|  |     augroup END | ||||||
|  |     function! Fix_netrw_maps_for_dvorak() | ||||||
|  |         noremap <buffer> d h | ||||||
|  |         noremap <buffer> h j | ||||||
|  |         noremap <buffer> t k | ||||||
|  |         noremap <buffer> n l | ||||||
|  |     endfunction | ||||||
|  |  | ||||||
| endif | endif | ||||||
|  |  | ||||||
| " Save aliases. | " Save aliases. | ||||||
|   | |||||||
| @@ -58,7 +58,7 @@ source "$antigen_src" | |||||||
| antigen bundle zsh-users/zsh-completions | antigen bundle zsh-users/zsh-completions | ||||||
| antigen bundle zsh-users/zsh-autosuggestions | antigen bundle zsh-users/zsh-autosuggestions | ||||||
| antigen bundle zsh-users/zsh-history-substring-search | antigen bundle zsh-users/zsh-history-substring-search | ||||||
| antigen bundle zsh-users/zsh-syntax-highlighting | antigen bundle zsh-users/zsh-syntax-highlighting@feature/redrawhook | ||||||
| antigen bundle mafredri/zsh-async | antigen bundle mafredri/zsh-async | ||||||
|  |  | ||||||
| antigen apply | antigen apply | ||||||
| @@ -82,8 +82,21 @@ bindkey '^[[A' fzf-history-widget                   # Up (fzf) | |||||||
| bindkey '^[[B' fzf-history-widget                   # Down (fzf) | bindkey '^[[B' fzf-history-widget                   # Down (fzf) | ||||||
| bindkey '^[[1;3A' history-substring-search-up       # Alt+Up (hsh) | bindkey '^[[1;3A' history-substring-search-up       # Alt+Up (hsh) | ||||||
| bindkey '^[[1;3B' history-substring-search-down     # Alt+Down (hsh) | bindkey '^[[1;3B' history-substring-search-down     # Alt+Down (hsh) | ||||||
| bindkey -M vicmd v edit-command-line |  | ||||||
|  |  | ||||||
|  | bindkey "^V" edit-command-line | ||||||
|  | bindkey -M vicmd "^V" edit-command-line | ||||||
|  |  | ||||||
|  | bindkey -M vicmd d vi-backward-char | ||||||
|  | bindkey -M vicmd h vi-down-line-or-history | ||||||
|  | bindkey -M vicmd t vi-up-line-or-history | ||||||
|  | bindkey -M vicmd n vi-forward-char | ||||||
|  | bindkey -M vicmd k vi-delete | ||||||
|  | bindkey -M vicmd K vi-kill-eol | ||||||
|  | bindkey -M vicmd j vi-find-next-char-skip | ||||||
|  | bindkey -M vicmd l vi-repeat-search | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ZSH_AUTOSUGGEST_USE_ASYNC=true | ||||||
| ZSH_AUTOSUGGEST_CLEAR_WIDGETS=("${(@)ZSH_AUTOSUGGEST_CLEAR_WIDGETS:#(up|down)-line-or-history}") | ZSH_AUTOSUGGEST_CLEAR_WIDGETS=("${(@)ZSH_AUTOSUGGEST_CLEAR_WIDGETS:#(up|down)-line-or-history}") | ||||||
| ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(history-substring-search-up history-substring-search-down) | ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(history-substring-search-up history-substring-search-down) | ||||||
|  |  | ||||||
| @@ -91,26 +104,31 @@ HISTORY_SUBSTRING_SEARCH_FUZZY=true | |||||||
| HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=true | HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=true | ||||||
| HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='underline' | HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='underline' | ||||||
|  |  | ||||||
| typeset -A ZSH_HIGHLIGHT_STYLES | default='fg=12' | ||||||
|  | prog='fg=blue' | ||||||
|  | ZSH_HIGHLIGHT_STYLES=() | ||||||
| ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets root line) | ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets root line) | ||||||
| ZSH_HIGHLIGHT_STYLES[default]='fg=12' | ZSH_HIGHLIGHT_STYLES[root]='bg=red' | ||||||
|  | ZSH_HIGHLIGHT_STYLES[default]=$default | ||||||
|  | ZSH_HIGHLIGHT_STYLES[arg0]=$prog | ||||||
| ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold' | ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold' | ||||||
| ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=yellow' | ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=yellow' | ||||||
| ZSH_HIGHLIGHT_STYLES[alias]='fg=blue' | ZSH_HIGHLIGHT_STYLES[alias]=$prog | ||||||
| ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=green,underline' | ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=green' | ||||||
| ZSH_HIGHLIGHT_STYLES[builtin]='fg=blue' | ZSH_HIGHLIGHT_STYLES[builtin]='fg=4' | ||||||
| ZSH_HIGHLIGHT_STYLES[function]='fg=blue' | ZSH_HIGHLIGHT_STYLES[function]=$prog | ||||||
| ZSH_HIGHLIGHT_STYLES[command]='fg=blue' | ZSH_HIGHLIGHT_STYLES[command]=$prog | ||||||
| ZSH_HIGHLIGHT_STYLES[precommand]='fg=blue' | ZSH_HIGHLIGHT_STYLES[precommand]='fg=4' | ||||||
| ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=cyan' | ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=cyan' | ||||||
| ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' | ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=green' | ||||||
| ZSH_HIGHLIGHT_STYLES[path]='fg=blue' | ZSH_HIGHLIGHT_STYLES[path]='fg=cyan' | ||||||
| ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=yellow,bold' | ZSH_HIGHLIGHT_STYLES[path_separator]='fg=cyan' | ||||||
|  | ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=208' | ||||||
| ZSH_HIGHLIGHT_STYLES[globbing]='fg=red' | ZSH_HIGHLIGHT_STYLES[globbing]='fg=red' | ||||||
| ZSH_HIGHLIGHT_STYLES[comment]='fg=7' | ZSH_HIGHLIGHT_STYLES[comment]='fg=7' | ||||||
| ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=blue' | ZSH_HIGHLIGHT_STYLES[history-expansion]=$default | ||||||
| ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=12' | ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=$default | ||||||
| ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=12' | ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=$default | ||||||
| ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=magenta' | ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=magenta' | ||||||
| ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow' | ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow' | ||||||
| ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' | ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' | ||||||
| @@ -119,11 +137,13 @@ ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=cyan' | |||||||
| ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' | ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=cyan' | ||||||
| ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=cyan' | ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=cyan' | ||||||
| ZSH_HIGHLIGHT_STYLES[assign]='fg=green' | ZSH_HIGHLIGHT_STYLES[assign]='fg=green' | ||||||
| ZSH_HIGHLIGHT_STYLES[redirection]='fg=cyan' | ZSH_HIGHLIGHT_STYLES[redirection]='fg=cyan,bold' | ||||||
|  |  | ||||||
| source "$DOTFILES/aliases" | source "$DOTFILES/aliases" | ||||||
|  |  | ||||||
| # Load some manual plugins | # Load some manual plugins | ||||||
| source "$ZSH_DIR/plugins/sudo.zsh" | source "$ZSH_DIR/plugins/sudo.zsh" | ||||||
| source "$ZSH_DIR/plugins/fish-theme.zsh" | source "$ZSH_DIR/plugins/fish-theme.zsh" | ||||||
|  | source "$ZSH_DIR/plugins/git-rprompt.zsh" | ||||||
| [ -f '/usr/share/fzf/key-bindings.zsh' ] && source /usr/share/fzf/key-bindings.zsh | [ -f '/usr/share/fzf/key-bindings.zsh' ] && source /usr/share/fzf/key-bindings.zsh | ||||||
|  | [ -f '/usr/share/doc/pkgfile/command-not-found.zsh' ] && source /usr/share/doc/pkgfile/command-not-found.zsh | ||||||
|   | |||||||
| @@ -4,57 +4,6 @@ _fishy_collapsed_wd() { | |||||||
|     pwd | sed -E 's|^'$HOME'|~|;s|(.*)/|\1%|;s|((^\|/)\.?[^/%]{1})[^/%]*|\1|g;s|(.*)%|\1/|' |     pwd | sed -E 's|^'$HOME'|~|;s|(.*)/|\1%|;s|((^\|/)\.?[^/%]{1})[^/%]*|\1|g;s|(.*)%|\1/|' | ||||||
| } | } | ||||||
|  |  | ||||||
| git_prompt_info() { |  | ||||||
|   ref=$(git symbolic-ref HEAD 2> /dev/null) || return |  | ||||||
|   echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_SUFFIX" |  | ||||||
| } |  | ||||||
| git_prompt_status() { |  | ||||||
|     # Get the status of the working tree |  | ||||||
|     INDEX=$(command git status --porcelain -b 2> /dev/null) |  | ||||||
|     STATUS="" |  | ||||||
|     if $(echo "$INDEX" | grep -E '^\?\? ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(echo "$INDEX" | grep '^A  ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" |  | ||||||
|     elif $(echo "$INDEX" | grep '^M  ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" |  | ||||||
|     elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" |  | ||||||
|     elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(echo "$INDEX" | grep '^R  ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" |  | ||||||
|     elif $(echo "$INDEX" | grep '^D  ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" |  | ||||||
|     elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_STASHED$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(echo "$INDEX" | grep '^## .*ahead' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_AHEAD$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(echo "$INDEX" | grep '^## .*behind' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_BEHIND$STATUS" |  | ||||||
|     fi |  | ||||||
|     if $(echo "$INDEX" | grep '^## .*diverged' &> /dev/null); then |  | ||||||
|       STATUS="$ZSH_THEME_GIT_PROMPT_DIVERGED$STATUS" |  | ||||||
|     fi |  | ||||||
|     echo $STATUS |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # Required for dynamic prompt | # Required for dynamic prompt | ||||||
| setopt prompt_subst | setopt prompt_subst | ||||||
|  |  | ||||||
| @@ -62,17 +11,4 @@ local user_color='green'; [ $UID -eq 0 ] && user_color='red' | |||||||
| PROMPT="%n@%m %F{$user_color}\$(_fishy_collapsed_wd)%f%(!.#.>) " | PROMPT="%n@%m %F{$user_color}\$(_fishy_collapsed_wd)%f%(!.#.>) " | ||||||
| PROMPT2='%F{red}\ %f' | PROMPT2='%F{red}\ %f' | ||||||
|  |  | ||||||
| local return_status="%F{red}%(?..%?)%f" | RPROMPT='%F{red}%(?.. %?)%f' | ||||||
| RPROMPT='${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}' |  | ||||||
|  |  | ||||||
| ZSH_THEME_GIT_PROMPT_PREFIX=" " |  | ||||||
| ZSH_THEME_GIT_PROMPT_SUFFIX="" |  | ||||||
| ZSH_THEME_GIT_PROMPT_DIRTY="" |  | ||||||
| ZSH_THEME_GIT_PROMPT_CLEAN="" |  | ||||||
|  |  | ||||||
| ZSH_THEME_GIT_PROMPT_ADDED="%{$fg_bold[green]%}+" |  | ||||||
| ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg_bold[blue]%}!" |  | ||||||
| ZSH_THEME_GIT_PROMPT_DELETED="%{$fg_bold[red]%}-" |  | ||||||
| ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg_bold[magenta]%}>" |  | ||||||
| ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg_bold[yellow]%}#" |  | ||||||
| ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg_bold[cyan]%}?" |  | ||||||
|   | |||||||
							
								
								
									
										74
									
								
								.config/zsh/plugins/git-rprompt.zsh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								.config/zsh/plugins/git-rprompt.zsh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | |||||||
|  | # ZSH RPROMPT containing simple Git status | ||||||
|  |  | ||||||
|  | git_prompt_info() { | ||||||
|  |     ref=$(git symbolic-ref HEAD 2> /dev/null) || return | ||||||
|  |     echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_SUFFIX" | ||||||
|  | } | ||||||
|  | git_prompt_status() { | ||||||
|  |     # Get the status of the working tree | ||||||
|  |     INDEX=$(command git status --porcelain -b 2> /dev/null) | ||||||
|  |     RESET='%f' | ||||||
|  |     STATUS="" | ||||||
|  |     if $(echo "$INDEX" | grep -E '^\?\? ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(echo "$INDEX" | grep '^A  ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$RESET$STATUS" | ||||||
|  |     elif $(echo "$INDEX" | grep '^M  ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$RESET$STATUS" | ||||||
|  |     elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$RESET$STATUS" | ||||||
|  |     elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(echo "$INDEX" | grep '^R  ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$RESET$STATUS" | ||||||
|  |     elif $(echo "$INDEX" | grep '^D  ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$RESET$STATUS" | ||||||
|  |     elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_STASHED$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(echo "$INDEX" | grep '^## .*ahead' &> /dev/null); then | ||||||
|  |         AHEAD=$(echo "$INDEX" | sed -nE 's/.*ahead\s([0-9]*).*/\1/p') | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_AHEAD$AHEAD$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(echo "$INDEX" | grep '^## .*behind' &> /dev/null); then | ||||||
|  |         BEHIND=$(echo "$INDEX" | sed -nE 's/.*behind\s([0-9]*).*/\1/p') | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_BEHIND$BEHIND$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     if $(echo "$INDEX" | grep '^## .*diverged' &> /dev/null); then | ||||||
|  |         STATUS="$ZSH_THEME_GIT_PROMPT_DIVERGED$RESET$STATUS" | ||||||
|  |     fi | ||||||
|  |     echo $STATUS | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Required for dynamic prompt | ||||||
|  | setopt prompt_subst | ||||||
|  |  | ||||||
|  | ZSH_THEME_GIT_PROMPT_PREFIX=" " | ||||||
|  | ZSH_THEME_GIT_PROMPT_SUFFIX="" | ||||||
|  | ZSH_THEME_GIT_PROMPT_DIRTY="" | ||||||
|  | ZSH_THEME_GIT_PROMPT_CLEAN="" | ||||||
|  | ZSH_THEME_GIT_PROMPT_AHEAD="%F{green}↑" | ||||||
|  | ZSH_THEME_GIT_PROMPT_BEHIND="%F{red}↓" | ||||||
|  |  | ||||||
|  | ZSH_THEME_GIT_PROMPT_ADDED="%F{green}+" | ||||||
|  | ZSH_THEME_GIT_PROMPT_MODIFIED="%F{blue}~" | ||||||
|  | ZSH_THEME_GIT_PROMPT_DELETED="%F{red}-" | ||||||
|  | ZSH_THEME_GIT_PROMPT_RENAMED="%F{magenta}>" | ||||||
|  | ZSH_THEME_GIT_PROMPT_UNMERGED="%F{yellow}#" | ||||||
|  | ZSH_THEME_GIT_PROMPT_UNTRACKED="%F{cyan}?" | ||||||
|  |  | ||||||
|  | RPROMPT="\$(git_prompt_info)\$(git_prompt_status)%{\$reset_color%}$RPROMPT" | ||||||
							
								
								
									
										6
									
								
								.profile
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								.profile
									
									
									
									
									
								
							| @@ -14,8 +14,8 @@ case "$(basename "$(readlink -f /proc/$$/exe)")" in | |||||||
|     bash) thisfile="$(readlink -f "${BASH_SOURCE[0]}")";; |     bash) thisfile="$(readlink -f "${BASH_SOURCE[0]}")";; | ||||||
|     *)   thisfile="$(find /proc/$$/fd/ | xargs -n1 -r readlink -f | grep profile | head -n1)";; |     *)   thisfile="$(find /proc/$$/fd/ | xargs -n1 -r readlink -f | grep profile | head -n1)";; | ||||||
| esac | esac | ||||||
| export DOTFILES="$(dirname "${thisfile:-$XDG_CONFIG_HOME/dotfiles}")" | export DOTFILES="$(dirname "${thisfile:-$XDG_CONFIG_HOME/dotfiles/.profile}")" | ||||||
| export PATH="${PATH}:$DOTFILES/scripts:$HOME/.local/share/surface-scripts" | export PATH="${PATH}:/sbin:/usr/sbin:$DOTFILES/scripts:$HOME/.local/share/surface-scripts" | ||||||
|  |  | ||||||
| # Override paths for non-compliant programs | # Override paths for non-compliant programs | ||||||
| # https://wiki.archlinux.org/index.php/XDG_Base_Directory_support | # https://wiki.archlinux.org/index.php/XDG_Base_Directory_support | ||||||
| @@ -40,6 +40,8 @@ export CARGO_HOME="$XDG_DATA_HOME/cargo" | |||||||
| export PASSWORD_STORE_DIR="$XDG_DATA_HOME/pass" | export PASSWORD_STORE_DIR="$XDG_DATA_HOME/pass" | ||||||
| # Python | # Python | ||||||
| export PYTHONHISTFILE="$XDG_DATA_HOME/python/histfile" | export PYTHONHISTFILE="$XDG_DATA_HOME/python/histfile" | ||||||
|  | # Weechat | ||||||
|  | export WEECHAT_HOME="$XDG_CONFIG_HOME/weechat" | ||||||
|  |  | ||||||
| # Go configuration | # Go configuration | ||||||
| export GOPATH="$XDG_DATA_HOME/go" | export GOPATH="$XDG_DATA_HOME/go" | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								aliases
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								aliases
									
									
									
									
									
								
							| @@ -18,7 +18,7 @@ alias al=la # No, I don't need the Mono Assembly Linker | |||||||
|  |  | ||||||
| alias md="mkdir -p" | alias md="mkdir -p" | ||||||
| alias rd="rmdir -p" | alias rd="rmdir -p" | ||||||
| mcd(){ mkdir -p $@ && cd $@; } | mcd(){ mkdir -p -- $@ && cd -- $@; } | ||||||
| alias -- -='cd -' | alias -- -='cd -' | ||||||
| alias cdt='cd `mktemp -d`' | alias cdt='cd `mktemp -d`' | ||||||
| alias grep='grep --color' | alias grep='grep --color' | ||||||
| @@ -36,7 +36,6 @@ alias -g NUL="&> /dev/null" | |||||||
| alias -g BG="&;disown" | alias -g BG="&;disown" | ||||||
| alias -g COL="| column -t" | alias -g COL="| column -t" | ||||||
| alias -g CLIP="| xclip -i -selection primary -f | xclip -i -selection clipboard" | alias -g CLIP="| xclip -i -selection primary -f | xclip -i -selection clipboard" | ||||||
| calc() { bc -l <<< "$@"; } |  | ||||||
|  |  | ||||||
| alias svi=sudoedit | alias svi=sudoedit | ||||||
| alias svim=sudoedit | alias svim=sudoedit | ||||||
| @@ -55,7 +54,6 @@ alias pacaur='pacaur --color=always' | |||||||
| alias tree='tree --dirsfirst -C -F' | alias tree='tree --dirsfirst -C -F' | ||||||
| alias make="make -j$(nproc)" | alias make="make -j$(nproc)" | ||||||
| alias dd='dd status=progress' | alias dd='dd status=progress' | ||||||
| alias env='env | sort | sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g"' |  | ||||||
| alias ssh="ssh -tt" | alias ssh="ssh -tt" | ||||||
| alias wget="wget --hsts-file=$XDG_DATA_HOME/wget/hsts-file" | alias wget="wget --hsts-file=$XDG_DATA_HOME/wget/hsts-file" | ||||||
| vim --version 2>/dev/null | command grep -q +clientserver && \ | vim --version 2>/dev/null | command grep -q +clientserver && \ | ||||||
| @@ -80,6 +78,10 @@ alias abuild-sign='alpine-sdk abuild-sign' | |||||||
| alias apk='alpine-sdk apk' | alias apk='alpine-sdk apk' | ||||||
| alias hddtemps='find /sys/block/ -name sd\* | sed "s|sys/block|dev|g" | sudo xargs hddtemp | sort -t: -k3' | alias hddtemps='find /sys/block/ -name sd\* | sed "s|sys/block|dev|g" | sudo xargs hddtemp | sort -t: -k3' | ||||||
| alias stripansi='sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g"' | alias stripansi='sed -r "s/\x1B\[(([0-9]+)(;[0-9]+)*)?[m,K,H,f,J]//g"' | ||||||
|  | alias calc="noglob bc -l <<<" # noglob allows * without quoting | ||||||
|  |  | ||||||
|  | # Function aliases | ||||||
|  | env() { command env $@ | stripansi | sort; } | ||||||
|  |  | ||||||
| # System aliases | # System aliases | ||||||
| alias s="sudo systemctl" | alias s="sudo systemctl" | ||||||
| @@ -91,10 +93,7 @@ alias kl='killall -s 9' | |||||||
| alias chx='chmod +x' | alias chx='chmod +x' | ||||||
|  |  | ||||||
| # File default aliases | # File default aliases | ||||||
| pdf() { | alias -s pdf="open" | ||||||
|     evince $@ NE BG |  | ||||||
| } |  | ||||||
| alias -s pdf=pdf |  | ||||||
| alias -s zip="unzip -l" | alias -s zip="unzip -l" | ||||||
| alias -s rar="unrar l" | alias -s rar="unrar l" | ||||||
| alias -s tar="tar tf" | alias -s tar="tar tf" | ||||||
| @@ -118,6 +117,7 @@ alias gc="git commit" | |||||||
| alias gcm="gc -m" | alias gcm="gc -m" | ||||||
| gcmst() { git stash -u -k && git commit -m "$1" && git stash pop; } | gcmst() { git stash -u -k && git commit -m "$1" && git stash pop; } | ||||||
| alias gca="git commit --amend" | alias gca="git commit --amend" | ||||||
|  | alias gcn="git commit --no-edit" | ||||||
| alias gcan="git commit --amend --no-edit" | alias gcan="git commit --amend --no-edit" | ||||||
| alias gcam="git commit --amend -m" | alias gcam="git commit --amend -m" | ||||||
| alias gst="git status" | alias gst="git status" | ||||||
| @@ -250,9 +250,7 @@ _dsh() { | |||||||
| } | } | ||||||
|  |  | ||||||
| alias dm='docker-machine' | alias dm='docker-machine' | ||||||
| dm-con() { | dm-con() { eval $(docker-machine env $1); } | ||||||
|     eval $(docker-machine env $1) |  | ||||||
| } |  | ||||||
| alias dmc=dm-con | alias dmc=dm-con | ||||||
|  |  | ||||||
| alias dc='docker-compose' | alias dc='docker-compose' | ||||||
| @@ -262,6 +260,8 @@ alias zfs='sudo zfs' | |||||||
| alias zpool='sudo zpool' | alias zpool='sudo zpool' | ||||||
| alias z=zfs | alias z=zfs | ||||||
| alias zp=zpool | alias zp=zpool | ||||||
|  | zl() { (set -o pipefail; command zfs list $@ | grep -Ev 'docker/[0-9a-f]{64}'); return $?; } | ||||||
|  | _zl() { _zfs "list $@" } | ||||||
|  |  | ||||||
| # General Aliases | # General Aliases | ||||||
| alias ssha='eval `ssh-agent` ; ssh-add' | alias ssha='eval `ssh-agent` ; ssh-add' | ||||||
| @@ -275,9 +275,8 @@ alias sshc="$EDITOR ~/.ssh/config" | |||||||
| alias dotfiles="cd $DOTFILES" | alias dotfiles="cd $DOTFILES" | ||||||
| alias i3c="$EDITOR $XDG_CONFIG_HOME/i3/config ; i3-msg restart" | alias i3c="$EDITOR $XDG_CONFIG_HOME/i3/config ; i3-msg restart" | ||||||
| alias i3bc="$EDITOR $XDG_CONFIG_HOME/i3/blocks/config ; i3-msg restart" | alias i3bc="$EDITOR $XDG_CONFIG_HOME/i3/blocks/config ; i3-msg restart" | ||||||
| i3b() { | i3b() { $EDITOR $XDG_CONFIG_HOME/i3/blocks/$@; } | ||||||
|     $EDITOR $XDG_CONFIG_HOME/i3/blocks/$@ |  | ||||||
| } |  | ||||||
| alias sf=screenfetch | alias sf=screenfetch | ||||||
| alias nf=neofetch | alias nf=neofetch | ||||||
| randstr() { tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w $1 | head -n 1; } | randstr() { tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w $1 | head -n 1; } | ||||||
|   | |||||||
							
								
								
									
										289
									
								
								scripts/diff-highlight
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										289
									
								
								scripts/diff-highlight
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,289 @@ | |||||||
|  | #!/usr/bin/perl | ||||||
|  | package DiffHighlight; | ||||||
|  |  | ||||||
|  | use 5.008; | ||||||
|  | use warnings FATAL => 'all'; | ||||||
|  | use strict; | ||||||
|  |  | ||||||
|  | # Highlight by reversing foreground and background. You could do | ||||||
|  | # other things like bold or underline if you prefer. | ||||||
|  | my @OLD_HIGHLIGHT = ( | ||||||
|  | 	color_config('color.diff-highlight.oldnormal'), | ||||||
|  | 	color_config('color.diff-highlight.oldhighlight', "\x1b[7m"), | ||||||
|  | 	color_config('color.diff-highlight.oldreset', "\x1b[27m") | ||||||
|  | ); | ||||||
|  | my @NEW_HIGHLIGHT = ( | ||||||
|  | 	color_config('color.diff-highlight.newnormal', $OLD_HIGHLIGHT[0]), | ||||||
|  | 	color_config('color.diff-highlight.newhighlight', $OLD_HIGHLIGHT[1]), | ||||||
|  | 	color_config('color.diff-highlight.newreset', $OLD_HIGHLIGHT[2]) | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | my $RESET = "\x1b[m"; | ||||||
|  | my $COLOR = qr/\x1b\[[0-9;]*m/; | ||||||
|  | my $BORING = qr/$COLOR|\s/; | ||||||
|  |  | ||||||
|  | my @removed; | ||||||
|  | my @added; | ||||||
|  | my $in_hunk; | ||||||
|  | my $graph_indent = 0; | ||||||
|  |  | ||||||
|  | our $line_cb = sub { print @_ }; | ||||||
|  | our $flush_cb = sub { local $| = 1 }; | ||||||
|  |  | ||||||
|  | # Count the visible width of a string, excluding any terminal color sequences. | ||||||
|  | sub visible_width { | ||||||
|  | 	local $_ = shift; | ||||||
|  | 	my $ret = 0; | ||||||
|  | 	while (length) { | ||||||
|  | 		if (s/^$COLOR//) { | ||||||
|  | 			# skip colors | ||||||
|  | 		} elsif (s/^.//) { | ||||||
|  | 			$ret++; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return $ret; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Return a substring of $str, omitting $len visible characters from the | ||||||
|  | # beginning, where terminal color sequences do not count as visible. | ||||||
|  | sub visible_substr { | ||||||
|  | 	my ($str, $len) = @_; | ||||||
|  | 	while ($len > 0) { | ||||||
|  | 		if ($str =~ s/^$COLOR//) { | ||||||
|  | 			next | ||||||
|  | 		} | ||||||
|  | 		$str =~ s/^.//; | ||||||
|  | 		$len--; | ||||||
|  | 	} | ||||||
|  | 	return $str; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub handle_line { | ||||||
|  | 	my $orig = shift; | ||||||
|  | 	local $_ = $orig; | ||||||
|  |  | ||||||
|  | 	# match a graph line that begins a commit | ||||||
|  | 	if (/^(?:$COLOR?\|$COLOR?[ ])* # zero or more leading "|" with space | ||||||
|  | 	         $COLOR?\*$COLOR?[ ]   # a "*" with its trailing space | ||||||
|  | 	      (?:$COLOR?\|$COLOR?[ ])* # zero or more trailing "|" | ||||||
|  | 	                         [ ]*  # trailing whitespace for merges | ||||||
|  | 	    /x) { | ||||||
|  | 	        my $graph_prefix = $&; | ||||||
|  |  | ||||||
|  | 		# We must flush before setting graph indent, since the | ||||||
|  | 		# new commit may be indented differently from what we | ||||||
|  | 		# queued. | ||||||
|  | 		flush(); | ||||||
|  | 		$graph_indent = visible_width($graph_prefix); | ||||||
|  |  | ||||||
|  | 	} elsif ($graph_indent) { | ||||||
|  | 		if (length($_) < $graph_indent) { | ||||||
|  | 			$graph_indent = 0; | ||||||
|  | 		} else { | ||||||
|  | 			$_ = visible_substr($_, $graph_indent); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (!$in_hunk) { | ||||||
|  | 		$line_cb->($orig); | ||||||
|  | 		$in_hunk = /^$COLOR*\@\@ /; | ||||||
|  | 	} | ||||||
|  | 	elsif (/^$COLOR*-/) { | ||||||
|  | 		push @removed, $orig; | ||||||
|  | 	} | ||||||
|  | 	elsif (/^$COLOR*\+/) { | ||||||
|  | 		push @added, $orig; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		flush(); | ||||||
|  | 		$line_cb->($orig); | ||||||
|  | 		$in_hunk = /^$COLOR*[\@ ]/; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	# Most of the time there is enough output to keep things streaming, | ||||||
|  | 	# but for something like "git log -Sfoo", you can get one early | ||||||
|  | 	# commit and then many seconds of nothing. We want to show | ||||||
|  | 	# that one commit as soon as possible. | ||||||
|  | 	# | ||||||
|  | 	# Since we can receive arbitrary input, there's no optimal | ||||||
|  | 	# place to flush. Flushing on a blank line is a heuristic that | ||||||
|  | 	# happens to match git-log output. | ||||||
|  | 	if (!length) { | ||||||
|  | 		$flush_cb->(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub flush { | ||||||
|  | 	# Flush any queued hunk (this can happen when there is no trailing | ||||||
|  | 	# context in the final diff of the input). | ||||||
|  | 	show_hunk(\@removed, \@added); | ||||||
|  | 	@removed = (); | ||||||
|  | 	@added = (); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub highlight_stdin { | ||||||
|  | 	while (<STDIN>) { | ||||||
|  | 		handle_line($_); | ||||||
|  | 	} | ||||||
|  | 	flush(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Ideally we would feed the default as a human-readable color to | ||||||
|  | # git-config as the fallback value. But diff-highlight does | ||||||
|  | # not otherwise depend on git at all, and there are reports | ||||||
|  | # of it being used in other settings. Let's handle our own | ||||||
|  | # fallback, which means we will work even if git can't be run. | ||||||
|  | sub color_config { | ||||||
|  | 	my ($key, $default) = @_; | ||||||
|  | 	my $s = `git config --get-color $key 2>/dev/null`; | ||||||
|  | 	return length($s) ? $s : $default; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub show_hunk { | ||||||
|  | 	my ($a, $b) = @_; | ||||||
|  |  | ||||||
|  | 	# If one side is empty, then there is nothing to compare or highlight. | ||||||
|  | 	if (!@$a || !@$b) { | ||||||
|  | 		$line_cb->(@$a, @$b); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	# If we have mismatched numbers of lines on each side, we could try to | ||||||
|  | 	# be clever and match up similar lines. But for now we are simple and | ||||||
|  | 	# stupid, and only handle multi-line hunks that remove and add the same | ||||||
|  | 	# number of lines. | ||||||
|  | 	if (@$a != @$b) { | ||||||
|  | 		$line_cb->(@$a, @$b); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	my @queue; | ||||||
|  | 	for (my $i = 0; $i < @$a; $i++) { | ||||||
|  | 		my ($rm, $add) = highlight_pair($a->[$i], $b->[$i]); | ||||||
|  | 		$line_cb->($rm); | ||||||
|  | 		push @queue, $add; | ||||||
|  | 	} | ||||||
|  | 	$line_cb->(@queue); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub highlight_pair { | ||||||
|  | 	my @a = split_line(shift); | ||||||
|  | 	my @b = split_line(shift); | ||||||
|  |  | ||||||
|  | 	# Find common prefix, taking care to skip any ansi | ||||||
|  | 	# color codes. | ||||||
|  | 	my $seen_plusminus; | ||||||
|  | 	my ($pa, $pb) = (0, 0); | ||||||
|  | 	while ($pa < @a && $pb < @b) { | ||||||
|  | 		if ($a[$pa] =~ /$COLOR/) { | ||||||
|  | 			$pa++; | ||||||
|  | 		} | ||||||
|  | 		elsif ($b[$pb] =~ /$COLOR/) { | ||||||
|  | 			$pb++; | ||||||
|  | 		} | ||||||
|  | 		elsif ($a[$pa] eq $b[$pb]) { | ||||||
|  | 			$pa++; | ||||||
|  | 			$pb++; | ||||||
|  | 		} | ||||||
|  | 		elsif (!$seen_plusminus && $a[$pa] eq '-' && $b[$pb] eq '+') { | ||||||
|  | 			$seen_plusminus = 1; | ||||||
|  | 			$pa++; | ||||||
|  | 			$pb++; | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
|  | 			last; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	# Find common suffix, ignoring colors. | ||||||
|  | 	my ($sa, $sb) = ($#a, $#b); | ||||||
|  | 	while ($sa >= $pa && $sb >= $pb) { | ||||||
|  | 		if ($a[$sa] =~ /$COLOR/) { | ||||||
|  | 			$sa--; | ||||||
|  | 		} | ||||||
|  | 		elsif ($b[$sb] =~ /$COLOR/) { | ||||||
|  | 			$sb--; | ||||||
|  | 		} | ||||||
|  | 		elsif ($a[$sa] eq $b[$sb]) { | ||||||
|  | 			$sa--; | ||||||
|  | 			$sb--; | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
|  | 			last; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (is_pair_interesting(\@a, $pa, $sa, \@b, $pb, $sb)) { | ||||||
|  | 		return highlight_line(\@a, $pa, $sa, \@OLD_HIGHLIGHT), | ||||||
|  | 		       highlight_line(\@b, $pb, $sb, \@NEW_HIGHLIGHT); | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		return join('', @a), | ||||||
|  | 		       join('', @b); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # we split either by $COLOR or by character. This has the side effect of | ||||||
|  | # leaving in graph cruft. It works because the graph cruft does not contain "-" | ||||||
|  | # or "+" | ||||||
|  | sub split_line { | ||||||
|  | 	local $_ = shift; | ||||||
|  | 	return utf8::decode($_) ? | ||||||
|  | 		map { utf8::encode($_); $_ } | ||||||
|  | 			map { /$COLOR/ ? $_ : (split //) } | ||||||
|  | 			split /($COLOR+)/ : | ||||||
|  | 		map { /$COLOR/ ? $_ : (split //) } | ||||||
|  | 		split /($COLOR+)/; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub highlight_line { | ||||||
|  | 	my ($line, $prefix, $suffix, $theme) = @_; | ||||||
|  |  | ||||||
|  | 	my $start = join('', @{$line}[0..($prefix-1)]); | ||||||
|  | 	my $mid = join('', @{$line}[$prefix..$suffix]); | ||||||
|  | 	my $end = join('', @{$line}[($suffix+1)..$#$line]); | ||||||
|  |  | ||||||
|  | 	# If we have a "normal" color specified, then take over the whole line. | ||||||
|  | 	# Otherwise, we try to just manipulate the highlighted bits. | ||||||
|  | 	if (defined $theme->[0]) { | ||||||
|  | 		s/$COLOR//g for ($start, $mid, $end); | ||||||
|  | 		chomp $end; | ||||||
|  | 		return join('', | ||||||
|  | 			$theme->[0], $start, $RESET, | ||||||
|  | 			$theme->[1], $mid, $RESET, | ||||||
|  | 			$theme->[0], $end, $RESET, | ||||||
|  | 			"\n" | ||||||
|  | 		); | ||||||
|  | 	} else { | ||||||
|  | 		return join('', | ||||||
|  | 			$start, | ||||||
|  | 			$theme->[1], $mid, $theme->[2], | ||||||
|  | 			$end | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Pairs are interesting to highlight only if we are going to end up | ||||||
|  | # highlighting a subset (i.e., not the whole line). Otherwise, the highlighting | ||||||
|  | # is just useless noise. We can detect this by finding either a matching prefix | ||||||
|  | # or suffix (disregarding boring bits like whitespace and colorization). | ||||||
|  | sub is_pair_interesting { | ||||||
|  | 	my ($a, $pa, $sa, $b, $pb, $sb) = @_; | ||||||
|  | 	my $prefix_a = join('', @$a[0..($pa-1)]); | ||||||
|  | 	my $prefix_b = join('', @$b[0..($pb-1)]); | ||||||
|  | 	my $suffix_a = join('', @$a[($sa+1)..$#$a]); | ||||||
|  | 	my $suffix_b = join('', @$b[($sb+1)..$#$b]); | ||||||
|  |  | ||||||
|  | 	return visible_substr($prefix_a, $graph_indent) !~ /^$COLOR*-$BORING*$/ || | ||||||
|  | 	       visible_substr($prefix_b, $graph_indent) !~ /^$COLOR*\+$BORING*$/ || | ||||||
|  | 	       $suffix_a !~ /^$BORING*$/ || | ||||||
|  | 	       $suffix_b !~ /^$BORING*$/; | ||||||
|  | } | ||||||
|  | package main; | ||||||
|  |  | ||||||
|  | # Some scripts may not realize that SIGPIPE is being ignored when launching the | ||||||
|  | # pager--for instance scripts written in Python. | ||||||
|  | $SIG{PIPE} = 'DEFAULT'; | ||||||
|  |  | ||||||
|  | DiffHighlight::highlight_stdin(); | ||||||
|  | exit 0; | ||||||
							
								
								
									
										55
									
								
								scripts/screenshot
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										55
									
								
								scripts/screenshot
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,55 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | set -e | ||||||
|  |  | ||||||
|  | NOTIFY_APPNAME="$(basename "$0")" | ||||||
|  | NOTIFY_ICONPATH="/usr/share/icons/Xenlism-Wildfire/Apps/screenshot.svg" | ||||||
|  |  | ||||||
|  | SCROT_CMD="maim -m 10 -us %" | ||||||
|  | FILENAME=`date "+$NOTIFY_APPNAME-%Y-%m-%d-%H%M%S.png"` | ||||||
|  | DIRECTORY="$HOME/pictures/screenshots" | ||||||
|  |  | ||||||
|  | SCP_HOST=frebib@Poseidon.nerdhouse.io | ||||||
|  | SCP_PATH=/dave/www/frebib.net/s | ||||||
|  | URL_PATH=https://frebib.net/s | ||||||
|  |  | ||||||
|  | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|  |  | ||||||
|  | send_notification() { | ||||||
|  |     title="$1" | ||||||
|  |     body="$2" | ||||||
|  |     replace_id="$3" | ||||||
|  |  | ||||||
|  |     notify-send \ | ||||||
|  |         -a "$NOTIFY_APPNAME" \ | ||||||
|  |         -i "$NOTIFY_ICONPATH" \ | ||||||
|  |         "$title" "$body" \ | ||||||
|  |         $(if [ -n "$replace_id" ]; then printf "%s" "-r $replace_id"; fi) \ | ||||||
|  |         -p | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Make the screenshot directory | ||||||
|  | mkdir -p "$DIRECTORY" | ||||||
|  |  | ||||||
|  | # Take the screenshot and save it | ||||||
|  | out_path="$DIRECTORY/$FILENAME" | ||||||
|  | if ! error=$(eval ${SCROT_CMD//\%/$out_path} 2>&1); then | ||||||
|  |     send_notification "Screenshot error" "Failed to take a screenshot:<br><br>$error" >/dev/null | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | notif_id=$(send_notification "Screenshot uploading" "$FILENAME<br><br>The image is available in the clipboard immediately" || true) | ||||||
|  |  | ||||||
|  | # Add image to clipboard | ||||||
|  | xclip -i "$out_path" -selection primary -t image/png | ||||||
|  |  | ||||||
|  | # 'Upload' the screenshot | ||||||
|  | if ! error=$(scp -C $out_path $SCP_HOST:$SCP_PATH 2>&1); then | ||||||
|  |     send_notification "Screenshot upload error" "Failed to upload image:<br><br>$error" >/dev/null | ||||||
|  |     exit 2 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Add URL to clipboard | ||||||
|  | out_url="$URL_PATH/$FILENAME" | ||||||
|  | echo "$out_url" | xclip -i -selection clipboard | ||||||
|  | send_notification "Screenshot uploaded!" "$out_url" $notif_id >/dev/null || true | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user