initial dotfiles added
This commit is contained in:
		
							parent
							
								
									bf6d582ee6
								
							
						
					
					
						commit
						051caa3bbb
					
				
							
								
								
									
										135
									
								
								alacritty/alacritty.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								alacritty/alacritty.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,135 @@
 | 
			
		||||
env:
 | 
			
		||||
    TERM: xterm-256color
 | 
			
		||||
 | 
			
		||||
scrolling:
 | 
			
		||||
    history: 5000
 | 
			
		||||
 | 
			
		||||
window:
 | 
			
		||||
 padding:
 | 
			
		||||
    x: 0
 | 
			
		||||
    y: 0
 | 
			
		||||
 | 
			
		||||
colors:
 | 
			
		||||
  # Default colors
 | 
			
		||||
  #primary:
 | 
			
		||||
    #background: '#000000'
 | 
			
		||||
    #background: '#1B1B1B'
 | 
			
		||||
    #foreground: '0xf8f8f2'
 | 
			
		||||
  primary:
 | 
			
		||||
    background: '#030303'
 | 
			
		||||
    foreground: '#f1ebeb' #uoou
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  cursor:
 | 
			
		||||
    style:
 | 
			
		||||
      shape: Beam
 | 
			
		||||
      blinking: On
 | 
			
		||||
        #text: '0x44475a'
 | 
			
		||||
        #cursor: '0xf8f8f2'
 | 
			
		||||
 | 
			
		||||
  # Selection colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors which should be used to draw the selection area. If selection
 | 
			
		||||
  # background is unset, selection color will be the inverse of the cell colors.
 | 
			
		||||
  # If only text is unset the cell text color will remain the same.
 | 
			
		||||
  selection:
 | 
			
		||||
    text: '0xf8f8f2'
 | 
			
		||||
    background: '0x44475a'
 | 
			
		||||
  normal:
 | 
			
		||||
        black: '#252525'
 | 
			
		||||
        red: '#ff009e'
 | 
			
		||||
        green: '#6fff00'
 | 
			
		||||
        yellow: '#d5ff00'
 | 
			
		||||
        magenta: '#00ffc2'
 | 
			
		||||
        blue: '#ff00d4'
 | 
			
		||||
        cyan: '#00fff0'
 | 
			
		||||
        white: '#ffffff'
 | 
			
		||||
  bright:
 | 
			
		||||
        black: '#535353'
 | 
			
		||||
        red: '#ff009e'
 | 
			
		||||
        green: '#6fff00'
 | 
			
		||||
        yellow: '#d5ff00'
 | 
			
		||||
        magenta: '#00ffc2'
 | 
			
		||||
        blue: '#ff00d4'
 | 
			
		||||
        cyan: '#00fff0'
 | 
			
		||||
        white: '#ffffff'
 | 
			
		||||
 | 
			
		||||
  # Normal colors
 | 
			
		||||
  # normal:
 | 
			
		||||
    #  black:   '0x000000'
 | 
			
		||||
    #red:     '0xff5555'
 | 
			
		||||
    #green:   '0x50fa7b'
 | 
			
		||||
    #yellow:  '0xf1fa8c'
 | 
			
		||||
    #magenta:    '0xbd93f9'
 | 
			
		||||
    #blue: '0xff79c6'
 | 
			
		||||
    #cyan:    '0x8be9fd'
 | 
			
		||||
    #white:   '0xbfbfbf'
 | 
			
		||||
 | 
			
		||||
  # Bright colors
 | 
			
		||||
  #bright:
 | 
			
		||||
  #  black:   '0x4d4d4d'
 | 
			
		||||
  #  red:     '0xff6e67'
 | 
			
		||||
  #  green:   '0x5af78e'
 | 
			
		||||
  #  yellow:  '0xf4f99d'
 | 
			
		||||
  #  magenta:    '0xcaa9fa'
 | 
			
		||||
  #  blue: '0xff92d0'
 | 
			
		||||
  #  cyan:    '0x9aedfe'
 | 
			
		||||
  #  white:   '0xe6e6e6'
 | 
			
		||||
 | 
			
		||||
  # Dim colors
 | 
			
		||||
  #
 | 
			
		||||
  # If the dim colors are not set, they will be calculated automatically based
 | 
			
		||||
  # on the `normal` colors.
 | 
			
		||||
  dim:
 | 
			
		||||
    black:   '0x14151b'
 | 
			
		||||
    red:     '0xff2222'
 | 
			
		||||
    green:   '0x1ef956'
 | 
			
		||||
    yellow:  '0xebf85b'
 | 
			
		||||
    blue:    '0x4d5b86'
 | 
			
		||||
    magenta: '0xff46b0'
 | 
			
		||||
    cyan:    '0x59dffc'
 | 
			
		||||
    white:   '0xe6e6d1'
 | 
			
		||||
 | 
			
		||||
  # Indexed Colors
 | 
			
		||||
  #
 | 
			
		||||
  # The indexed colors include all colors from 16 to 256.
 | 
			
		||||
  # When these are not set, they're filled with sensible defaults.
 | 
			
		||||
  #
 | 
			
		||||
  # Example:
 | 
			
		||||
  #   `- { index: 16, color: '0xff00ff' }`
 | 
			
		||||
  #
 | 
			
		||||
  indexed_colors: []
 | 
			
		||||
 | 
			
		||||
font:
 | 
			
		||||
  normal:
 | 
			
		||||
    family: IBM Plex Mono  
 | 
			
		||||
    style:  
 | 
			
		||||
 | 
			
		||||
  bold:
 | 
			
		||||
    family: IBM Plex Mono  
 | 
			
		||||
    style: Bold
 | 
			
		||||
 | 
			
		||||
  italic:
 | 
			
		||||
    family: IBM Plex Mono  
 | 
			
		||||
    style: Italic
 | 
			
		||||
 | 
			
		||||
  bold_italic:
 | 
			
		||||
    family: IBM Plex Mono  
 | 
			
		||||
    style: Bold Italic
 | 
			
		||||
 | 
			
		||||
  size: 6.95
 | 
			
		||||
 | 
			
		||||
# Key bindings
 | 
			
		||||
Key_bindings:
 | 
			
		||||
    - { key: Equals,   mods: Super, action: IncreaseFontSize }
 | 
			
		||||
    - { key: Subtract, mods: Super, action: DecreaseFontSize }
 | 
			
		||||
    - { key: Key0,     mods: Super, action: ResetFontSize    }
 | 
			
		||||
    - { key: PageUp,   mods: Shift,   action: ScrollPageUp   }
 | 
			
		||||
    - { key: PageDown, mods: Shift,   action: ScrollPageDown }
 | 
			
		||||
    - { key: End,      mods: Shift,   action: ScrollToBottom }
 | 
			
		||||
    - { key: Home,     mods: Shift,   action: ScrollToTop    }
 | 
			
		||||
    - { key: V,        mods: Control|Alt,  action: Paste       }
 | 
			
		||||
    - { key: C,        mods: Control|Alt,  action: Copy        }
 | 
			
		||||
    - { key: Return,   mods: Control, action: SpawnNewInstance }
 | 
			
		||||
    - { key: T,        mods: Control, action: SpawnNewInstance }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										813
									
								
								alacritty/backup_alacritty.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										813
									
								
								alacritty/backup_alacritty.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,813 @@
 | 
			
		||||
# Configuration for Alacritty, the GPU enhanced terminal emulator.
 | 
			
		||||
# p
 | 
			
		||||
 | 
			
		||||
# Import additional configuration files
 | 
			
		||||
#
 | 
			
		||||
# Imports are loaded in order, skipping all missing files, with the importing
 | 
			
		||||
# file being loaded last. If a field is already present in a previous import, it
 | 
			
		||||
# will be replaced.
 | 
			
		||||
#
 | 
			
		||||
# All imports must either be absolute paths starting with `/`, or paths relative
 | 
			
		||||
# to the user's home directory starting with `~/`.
 | 
			
		||||
#import:
 | 
			
		||||
#  - /path/to/alacritty.yml
 | 
			
		||||
 | 
			
		||||
# 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: alacritty
 | 
			
		||||
 | 
			
		||||
#window:
 | 
			
		||||
  # Window dimensions (changes require restart)
 | 
			
		||||
  #
 | 
			
		||||
  # Number of lines/columns (not pixels) in the terminal. The number of columns
 | 
			
		||||
  # must be at least `2`, while using a value of `0` for columns and lines will
 | 
			
		||||
  # fall back to the window manager's recommended size.
 | 
			
		||||
  #dimensions:
 | 
			
		||||
  #  columns: 0
 | 
			
		||||
  #  lines: 0
 | 
			
		||||
 | 
			
		||||
  # Window position (changes require restart)
 | 
			
		||||
  #
 | 
			
		||||
  # Specified in number of pixels.
 | 
			
		||||
  # If the position is not set, the window manager will handle the placement.
 | 
			
		||||
  #position:
 | 
			
		||||
  #  x: 0
 | 
			
		||||
  #  y: 0
 | 
			
		||||
 | 
			
		||||
  # Window padding (changes require restart)
 | 
			
		||||
  #
 | 
			
		||||
  # Blank space added around the window in pixels. This padding is scaled
 | 
			
		||||
  # by DPI and the specified value is always added at both opposing sides.
 | 
			
		||||
  #padding:
 | 
			
		||||
  #  x: 0
 | 
			
		||||
  #  y: 0
 | 
			
		||||
 | 
			
		||||
  # Spread additional padding evenly around the terminal content.
 | 
			
		||||
  #dynamic_padding: false
 | 
			
		||||
 | 
			
		||||
  # Window decorations
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `decorations`:
 | 
			
		||||
  #     - full: Borders and title bar
 | 
			
		||||
  #     - none: Neither borders nor title bar
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `decorations` (macOS only):
 | 
			
		||||
  #     - transparent: Title bar, transparent background and title bar buttons
 | 
			
		||||
  #     - buttonless: Title bar, transparent background and no title bar buttons
 | 
			
		||||
  #decorations: full
 | 
			
		||||
 | 
			
		||||
  # Startup Mode (changes require restart)
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `startup_mode`:
 | 
			
		||||
  #   - Windowed
 | 
			
		||||
  #   - Maximized
 | 
			
		||||
  #   - Fullscreen
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `startup_mode` (macOS only):
 | 
			
		||||
  #   - SimpleFullscreen
 | 
			
		||||
  #startup_mode: Windowed
 | 
			
		||||
 | 
			
		||||
  # Window title
 | 
			
		||||
  #title: Alacritty
 | 
			
		||||
 | 
			
		||||
  # Allow terminal applications to change Alacritty's window title.
 | 
			
		||||
  #dynamic_title: true
 | 
			
		||||
 | 
			
		||||
  # Window class (Linux/BSD only):
 | 
			
		||||
  #class:
 | 
			
		||||
    # Application instance name
 | 
			
		||||
    #instance: Alacritty
 | 
			
		||||
    # General application class
 | 
			
		||||
    #general: Alacritty
 | 
			
		||||
 | 
			
		||||
  # GTK theme variant (Linux/BSD only)
 | 
			
		||||
  #
 | 
			
		||||
  # Override the variant of the GTK theme. Commonly supported values are `dark`
 | 
			
		||||
  # and `light`. Set this to `None` to use the default theme variant.
 | 
			
		||||
  #gtk_theme_variant: None
 | 
			
		||||
 | 
			
		||||
#scrolling:
 | 
			
		||||
  # Maximum number of lines in the scrollback buffer.
 | 
			
		||||
  # Specifying '0' will disable scrolling.
 | 
			
		||||
  #history: 10000
 | 
			
		||||
 | 
			
		||||
  # Scrolling distance multiplier.
 | 
			
		||||
  #multiplier: 3
 | 
			
		||||
 | 
			
		||||
# Font configuration
 | 
			
		||||
font:
 | 
			
		||||
  # Normal (roman) font face
 | 
			
		||||
  normal:
 | 
			
		||||
    # Font family
 | 
			
		||||
    #
 | 
			
		||||
    Default:
 | 
			
		||||
    #   - (macOS) Menlo
 | 
			
		||||
    #   - (Linux/BSD) monospace
 | 
			
		||||
    #   - (Windows) Consolas
 | 
			
		||||
    family: monospace
 | 
			
		||||
 | 
			
		||||
    # The `style` can be specified to pick a specific face.
 | 
			
		||||
    #style: Regular
 | 
			
		||||
 | 
			
		||||
  # Bold font face
 | 
			
		||||
  #bold:
 | 
			
		||||
    # Font family
 | 
			
		||||
    #
 | 
			
		||||
    # If the bold family is not specified, it will fall back to the
 | 
			
		||||
    # value specified for the normal font.
 | 
			
		||||
    #family: monospace
 | 
			
		||||
 | 
			
		||||
    # The `style` can be specified to pick a specific face.
 | 
			
		||||
    #style: Bold
 | 
			
		||||
 | 
			
		||||
  # Italic font face
 | 
			
		||||
  #italic:
 | 
			
		||||
    # Font family
 | 
			
		||||
    #
 | 
			
		||||
    # If the italic family is not specified, it will fall back to the
 | 
			
		||||
    # value specified for the normal font.
 | 
			
		||||
    #family: monospace
 | 
			
		||||
 | 
			
		||||
    # The `style` can be specified to pick a specific face.
 | 
			
		||||
    #style: Italic
 | 
			
		||||
 | 
			
		||||
  # Bold italic font face
 | 
			
		||||
  #bold_italic:
 | 
			
		||||
    # Font family
 | 
			
		||||
    #
 | 
			
		||||
    # If the bold italic family is not specified, it will fall back to the
 | 
			
		||||
    # value specified for the normal font.
 | 
			
		||||
    #family: monospace
 | 
			
		||||
 | 
			
		||||
    # The `style` can be specified to pick a specific face.
 | 
			
		||||
    #style: Bold Italic
 | 
			
		||||
 | 
			
		||||
  # Point size
 | 
			
		||||
  size: 6.95
 | 
			
		||||
 | 
			
		||||
  # 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 upward.
 | 
			
		||||
  #glyph_offset:
 | 
			
		||||
  #  x: 0
 | 
			
		||||
  #  y: 0
 | 
			
		||||
 | 
			
		||||
  # Thin stroke font rendering (macOS only)
 | 
			
		||||
  #
 | 
			
		||||
  # Thin strokes are suitable for retina displays, but for non-retina screens
 | 
			
		||||
  # it is recommended to set `use_thin_strokes` to `false`.
 | 
			
		||||
  #use_thin_strokes: true
 | 
			
		||||
 | 
			
		||||
# If `true`, bold text is drawn using the bright color variants.
 | 
			
		||||
#draw_bold_text_with_bright_colors: false
 | 
			
		||||
 | 
			
		||||
# Colors (Tomorrow Night)
 | 
			
		||||
colors:
 | 
			
		||||
  # Default colors
 | 
			
		||||
  #: primary:
 | 
			
		||||
  background: '#1d1f21'
 | 
			
		||||
  foreground: '#c5c8c6'
 | 
			
		||||
 | 
			
		||||
    # 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: '#828482'
 | 
			
		||||
    #bright_foreground: '#eaeaea'
 | 
			
		||||
 | 
			
		||||
  # Cursor colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors which should be used to draw the terminal cursor.
 | 
			
		||||
  #
 | 
			
		||||
  # Allowed values are CellForeground and CellBackground, which reference the
 | 
			
		||||
  # affected cell, or hexadecimal colors like #ff00ff.
 | 
			
		||||
  #cursor:
 | 
			
		||||
  #  text: CellBackground
 | 
			
		||||
  #  cursor: CellForeground
 | 
			
		||||
 | 
			
		||||
  # Vi mode cursor colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors for the cursor when the vi mode is active.
 | 
			
		||||
  #
 | 
			
		||||
  # Allowed values are CellForeground and CellBackground, which reference the
 | 
			
		||||
  # affected cell, or hexadecimal colors like #ff00ff.
 | 
			
		||||
  #vi_mode_cursor:
 | 
			
		||||
  #  text: CellBackground
 | 
			
		||||
  #  cursor: CellForeground
 | 
			
		||||
 | 
			
		||||
  # Search colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors used for the search bar and match highlighting.
 | 
			
		||||
  #search:
 | 
			
		||||
    # Allowed values are CellForeground and CellBackground, which reference the
 | 
			
		||||
    # affected cell, or hexadecimal colors like #ff00ff.
 | 
			
		||||
    #matches:
 | 
			
		||||
    #  foreground: '#000000'
 | 
			
		||||
    #  background: '#ffffff'
 | 
			
		||||
    #focused_match:
 | 
			
		||||
    #  foreground: CellBackground
 | 
			
		||||
    #  background: CellForeground
 | 
			
		||||
 | 
			
		||||
    #bar:
 | 
			
		||||
    #  background: '#c5c8c6'
 | 
			
		||||
    #  foreground: '#1d1f21'
 | 
			
		||||
 | 
			
		||||
  # Line indicator
 | 
			
		||||
  #
 | 
			
		||||
  # Color used for the indicator displaying the position in history during
 | 
			
		||||
  # search and vi mode.
 | 
			
		||||
  #
 | 
			
		||||
  # By default, these will use the opposing primary color.
 | 
			
		||||
  #line_indicator:
 | 
			
		||||
  #  foreground: None
 | 
			
		||||
  #  background: None
 | 
			
		||||
 | 
			
		||||
  # Selection colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors which should be used to draw the selection area.
 | 
			
		||||
  #
 | 
			
		||||
  # Allowed values are CellForeground and CellBackground, which reference the
 | 
			
		||||
  # affected cell, or hexadecimal colors like #ff00ff.
 | 
			
		||||
  #selection:
 | 
			
		||||
  #  text: CellBackground
 | 
			
		||||
  #  background: CellForeground
 | 
			
		||||
 | 
			
		||||
  # Normal colors
 | 
			
		||||
  #normal:
 | 
			
		||||
  #  black:   '#1d1f21'
 | 
			
		||||
  #  red:     '#cc6666'
 | 
			
		||||
  #  green:   '#b5bd68'
 | 
			
		||||
  #  yellow:  '#f0c674'
 | 
			
		||||
  #  blue:    '#81a2be'
 | 
			
		||||
  #  magenta: '#b294bb'
 | 
			
		||||
  #  cyan:    '#8abeb7'
 | 
			
		||||
  #  white:   '#c5c8c6'
 | 
			
		||||
 | 
			
		||||
  # Bright colors
 | 
			
		||||
  #bright:
 | 
			
		||||
  #  black:   '#666666'
 | 
			
		||||
  #  red:     '#d54e53'
 | 
			
		||||
  #  green:   '#b9ca4a'
 | 
			
		||||
  #  yellow:  '#e7c547'
 | 
			
		||||
  #  blue:    '#7aa6da'
 | 
			
		||||
  #  magenta: '#c397d8'
 | 
			
		||||
  #  cyan:    '#70c0b1'
 | 
			
		||||
  #  white:   '#eaeaea'
 | 
			
		||||
 | 
			
		||||
  # Dim colors
 | 
			
		||||
  #
 | 
			
		||||
  # If the dim colors are not set, they will be calculated automatically based
 | 
			
		||||
  # on the `normal` colors.
 | 
			
		||||
  #dim:
 | 
			
		||||
  #  black:   '#131415'
 | 
			
		||||
  #  red:     '#864343'
 | 
			
		||||
  #  green:   '#777c44'
 | 
			
		||||
  #  yellow:  '#9e824c'
 | 
			
		||||
  #  blue:    '#556a7d'
 | 
			
		||||
  #  magenta: '#75617b'
 | 
			
		||||
  #  cyan:    '#5b7d78'
 | 
			
		||||
  #  white:   '#828482'
 | 
			
		||||
 | 
			
		||||
  # Indexed Colors
 | 
			
		||||
  #
 | 
			
		||||
  # The indexed colors include all colors from 16 to 256.
 | 
			
		||||
  # When these are not set, they're filled with sensible defaults.
 | 
			
		||||
  #
 | 
			
		||||
  # Example:
 | 
			
		||||
  #   `- { index: 16, color: '#ff00ff' }`
 | 
			
		||||
  #
 | 
			
		||||
  #indexed_colors: []
 | 
			
		||||
 | 
			
		||||
# Bell
 | 
			
		||||
#
 | 
			
		||||
# The bell is rung every time the BEL control character is received.
 | 
			
		||||
#bell:
 | 
			
		||||
  # Visual Bell Animation
 | 
			
		||||
  #
 | 
			
		||||
  # Animation effect for flashing the screen when the visual bell is rung.
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `animation`:
 | 
			
		||||
  #   - Ease
 | 
			
		||||
  #   - EaseOut
 | 
			
		||||
  #   - EaseOutSine
 | 
			
		||||
  #   - EaseOutQuad
 | 
			
		||||
  #   - EaseOutCubic
 | 
			
		||||
  #   - EaseOutQuart
 | 
			
		||||
  #   - EaseOutQuint
 | 
			
		||||
  #   - EaseOutExpo
 | 
			
		||||
  #   - EaseOutCirc
 | 
			
		||||
  #   - Linear
 | 
			
		||||
  #animation: EaseOutExpo
 | 
			
		||||
 | 
			
		||||
  # Duration of the visual bell flash in milliseconds. A `duration` of `0` will
 | 
			
		||||
  # disable the visual bell animation.
 | 
			
		||||
  #duration: 0
 | 
			
		||||
 | 
			
		||||
  # Visual bell animation color.
 | 
			
		||||
  #color: '#ffffff'
 | 
			
		||||
 | 
			
		||||
  # Bell Command
 | 
			
		||||
  #
 | 
			
		||||
  # This program is executed whenever the bell is rung.
 | 
			
		||||
  #
 | 
			
		||||
  # When set to `command: None`, no command will be executed.
 | 
			
		||||
  #
 | 
			
		||||
  # Example:
 | 
			
		||||
  #   command:
 | 
			
		||||
  #     program: notify-send
 | 
			
		||||
  #     args: ["Hello, World!"]
 | 
			
		||||
  #
 | 
			
		||||
  #command: None
 | 
			
		||||
 | 
			
		||||
# 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: 1.0
 | 
			
		||||
 | 
			
		||||
#selection:
 | 
			
		||||
  # This string contains all characters that are used as separators for
 | 
			
		||||
  # "semantic words" in Alacritty.
 | 
			
		||||
  #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
 | 
			
		||||
 | 
			
		||||
  # When set to `true`, selected text will be copied to the primary clipboard.
 | 
			
		||||
  #save_to_clipboard: false
 | 
			
		||||
 | 
			
		||||
cursor:
 | 
			
		||||
  # Cursor style
 | 
			
		||||
  style:
 | 
			
		||||
    # Cursor shape
 | 
			
		||||
    #
 | 
			
		||||
    # Values for `shape`:
 | 
			
		||||
    #   - ▇ Block
 | 
			
		||||
    #   - _ Underline
 | 
			
		||||
    #   - | Beam
 | 
			
		||||
    shape: Block
 | 
			
		||||
 | 
			
		||||
    # Cursor blinking state
 | 
			
		||||
    #
 | 
			
		||||
    # Values for `blinking`:
 | 
			
		||||
    #   - Never: Prevent the cursor from ever blinking
 | 
			
		||||
    #   - Off: Disable blinking by default
 | 
			
		||||
    #   - On: Enable blinking by default
 | 
			
		||||
    #   - Always: Force the cursor to always blink
 | 
			
		||||
    #blinking: Off
 | 
			
		||||
 | 
			
		||||
  # Vi mode cursor style
 | 
			
		||||
  #
 | 
			
		||||
  # If the vi mode cursor style is `None` or not specified, it will fall back to
 | 
			
		||||
  # the style of the active value of the normal cursor.
 | 
			
		||||
  #
 | 
			
		||||
  # See `cursor.style` for available options.
 | 
			
		||||
  #vi_mode_style: None
 | 
			
		||||
 | 
			
		||||
  # Cursor blinking interval in milliseconds.
 | 
			
		||||
  #blink_interval: 750
 | 
			
		||||
 | 
			
		||||
  # If this is `true`, the cursor will be rendered as a hollow box when the
 | 
			
		||||
  # window is not focused.
 | 
			
		||||
  #unfocused_hollow: true
 | 
			
		||||
 | 
			
		||||
  # Thickness of the cursor relative to the cell width as floating point number
 | 
			
		||||
  # from `0.0` to `1.0`.
 | 
			
		||||
  #thickness: 0.15
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
#
 | 
			
		||||
# Default:
 | 
			
		||||
#   - (macOS) /bin/bash --login
 | 
			
		||||
#   - (Linux/BSD) user login shell
 | 
			
		||||
#   - (Windows) powershell
 | 
			
		||||
#shell:
 | 
			
		||||
#  program: /bin/bash
 | 
			
		||||
#  args:
 | 
			
		||||
#    - --login
 | 
			
		||||
 | 
			
		||||
# Startup directory
 | 
			
		||||
#
 | 
			
		||||
# Directory the shell is started in. If this is unset, or `None`, the working
 | 
			
		||||
# directory of the parent process will be used.
 | 
			
		||||
#working_directory: None
 | 
			
		||||
 | 
			
		||||
# Send ESC (\x1b) before characters when alt is pressed.
 | 
			
		||||
#alt_send_esc: true
 | 
			
		||||
 | 
			
		||||
#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 }
 | 
			
		||||
 | 
			
		||||
  # If this is `true`, the cursor is temporarily hidden when typing.
 | 
			
		||||
  #hide_when_typing: false
 | 
			
		||||
 | 
			
		||||
  #url:
 | 
			
		||||
    # URL launcher
 | 
			
		||||
    #
 | 
			
		||||
    # This program is executed when clicking on a text which is recognized as a
 | 
			
		||||
    # URL. The URL is always added to the command as the last parameter.
 | 
			
		||||
    #
 | 
			
		||||
    # When set to `launcher: None`, URL launching will be disabled completely.
 | 
			
		||||
    #
 | 
			
		||||
    # Default:
 | 
			
		||||
    #   - (macOS) open
 | 
			
		||||
    #   - (Linux/BSD) xdg-open
 | 
			
		||||
    #   - (Windows) explorer
 | 
			
		||||
    #launcher:
 | 
			
		||||
    #  program: xdg-open
 | 
			
		||||
    #  args: []
 | 
			
		||||
 | 
			
		||||
    # URL modifiers
 | 
			
		||||
    #
 | 
			
		||||
    # These are the modifiers that need to be held down for opening URLs when
 | 
			
		||||
    # clicking on them. The available modifiers are documented in the key
 | 
			
		||||
    # binding section.
 | 
			
		||||
    #modifiers: None
 | 
			
		||||
 | 
			
		||||
# Mouse bindings
 | 
			
		||||
#
 | 
			
		||||
# Mouse bindings are specified as a list of objects, much like the key
 | 
			
		||||
# bindings further below.
 | 
			
		||||
#
 | 
			
		||||
# To trigger mouse bindings when an application running within Alacritty
 | 
			
		||||
# captures the mouse, the `Shift` modifier is automatically added as a
 | 
			
		||||
# requirement.
 | 
			
		||||
#
 | 
			
		||||
# Each mouse binding will specify a:
 | 
			
		||||
#
 | 
			
		||||
# - `mouse`:
 | 
			
		||||
#
 | 
			
		||||
#   - Middle
 | 
			
		||||
#   - Left
 | 
			
		||||
#   - Right
 | 
			
		||||
#   - Numeric identifier such as `5`
 | 
			
		||||
#
 | 
			
		||||
# - `action` (see key bindings)
 | 
			
		||||
#
 | 
			
		||||
# And optionally:
 | 
			
		||||
#
 | 
			
		||||
# - `mods` (see key bindings)
 | 
			
		||||
#mouse_bindings:
 | 
			
		||||
#  - { mouse: Middle, action: PasteSelection }
 | 
			
		||||
 | 
			
		||||
# Key bindings
 | 
			
		||||
#
 | 
			
		||||
# Key bindings are specified as a list of objects. For example, this is the
 | 
			
		||||
# default paste binding:
 | 
			
		||||
#
 | 
			
		||||
# `- { key: V, mods: Control|Shift, action: Paste }`
 | 
			
		||||
#
 | 
			
		||||
# Each key binding will specify a:
 | 
			
		||||
#
 | 
			
		||||
# - `key`: Identifier of the key pressed
 | 
			
		||||
#
 | 
			
		||||
#    - A-Z
 | 
			
		||||
#    - F1-F24
 | 
			
		||||
#    - Key0-Key9
 | 
			
		||||
#
 | 
			
		||||
#    A full list with available key codes can be found here:
 | 
			
		||||
#    https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
 | 
			
		||||
#
 | 
			
		||||
#    Instead of using the name of the keys, the `key` field also supports using
 | 
			
		||||
#    the scancode of the desired key. Scancodes have to be specified as a
 | 
			
		||||
#    decimal number. This command will allow you to display the hex scancodes
 | 
			
		||||
#    for certain keys:
 | 
			
		||||
#
 | 
			
		||||
#       `showkey --scancodes`.
 | 
			
		||||
#
 | 
			
		||||
# Then exactly one of:
 | 
			
		||||
#
 | 
			
		||||
# - `chars`: Send a byte sequence to the running application
 | 
			
		||||
#
 | 
			
		||||
#    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.
 | 
			
		||||
#
 | 
			
		||||
# - `action`: Execute a predefined action
 | 
			
		||||
#
 | 
			
		||||
#   - ToggleViMode
 | 
			
		||||
#   - SearchForward
 | 
			
		||||
#       Start searching toward the right of the search origin.
 | 
			
		||||
#   - SearchBackward
 | 
			
		||||
#       Start searching toward the left of the search origin.
 | 
			
		||||
#   - Copy
 | 
			
		||||
#   - Paste
 | 
			
		||||
#   - IncreaseFontSize
 | 
			
		||||
#   - DecreaseFontSize
 | 
			
		||||
#   - ResetFontSize
 | 
			
		||||
#   - ScrollPageUp
 | 
			
		||||
#   - ScrollPageDown
 | 
			
		||||
#   - ScrollHalfPageUp
 | 
			
		||||
#   - ScrollHalfPageDown
 | 
			
		||||
#   - ScrollLineUp
 | 
			
		||||
#   - ScrollLineDown
 | 
			
		||||
#   - ScrollToTop
 | 
			
		||||
#   - ScrollToBottom
 | 
			
		||||
#   - ClearHistory
 | 
			
		||||
#       Remove the terminal's scrollback history.
 | 
			
		||||
#   - Hide
 | 
			
		||||
#       Hide the Alacritty window.
 | 
			
		||||
#   - Minimize
 | 
			
		||||
#       Minimize the Alacritty window.
 | 
			
		||||
#   - Quit
 | 
			
		||||
#       Quit Alacritty.
 | 
			
		||||
#   - ToggleFullscreen
 | 
			
		||||
#   - SpawnNewInstance
 | 
			
		||||
#       Spawn a new instance of Alacritty.
 | 
			
		||||
#   - ClearLogNotice
 | 
			
		||||
#       Clear Alacritty's UI warning and error notice.
 | 
			
		||||
#   - ClearSelection
 | 
			
		||||
#       Remove the active selection.
 | 
			
		||||
#   - ReceiveChar
 | 
			
		||||
#   - None
 | 
			
		||||
#
 | 
			
		||||
# - Vi mode exclusive actions:
 | 
			
		||||
#
 | 
			
		||||
#   - Open
 | 
			
		||||
#       Open URLs at the cursor location with the launcher configured in
 | 
			
		||||
#       `url.launcher`.
 | 
			
		||||
#   - ToggleNormalSelection
 | 
			
		||||
#   - ToggleLineSelection
 | 
			
		||||
#   - ToggleBlockSelection
 | 
			
		||||
#   - ToggleSemanticSelection
 | 
			
		||||
#       Toggle semantic selection based on `selection.semantic_escape_chars`.
 | 
			
		||||
#
 | 
			
		||||
# - Vi mode exclusive cursor motion actions:
 | 
			
		||||
#
 | 
			
		||||
#   - Up
 | 
			
		||||
#       One line up.
 | 
			
		||||
#   - Down
 | 
			
		||||
#       One line down.
 | 
			
		||||
#   - Left
 | 
			
		||||
#       One character left.
 | 
			
		||||
#   - Right
 | 
			
		||||
#       One character right.
 | 
			
		||||
#   - First
 | 
			
		||||
#       First column, or beginning of the line when already at the first column.
 | 
			
		||||
#   - Last
 | 
			
		||||
#       Last column, or beginning of the line when already at the last column.
 | 
			
		||||
#   - FirstOccupied
 | 
			
		||||
#       First non-empty cell in this terminal row, or first non-empty cell of
 | 
			
		||||
#       the line when already at the first cell of the row.
 | 
			
		||||
#   - High
 | 
			
		||||
#       Top of the screen.
 | 
			
		||||
#   - Middle
 | 
			
		||||
#       Center of the screen.
 | 
			
		||||
#   - Low
 | 
			
		||||
#       Bottom of the screen.
 | 
			
		||||
#   - SemanticLeft
 | 
			
		||||
#       Start of the previous semantically separated word.
 | 
			
		||||
#   - SemanticRight
 | 
			
		||||
#       Start of the next semantically separated word.
 | 
			
		||||
#   - SemanticLeftEnd
 | 
			
		||||
#       End of the previous semantically separated word.
 | 
			
		||||
#   - SemanticRightEnd
 | 
			
		||||
#       End of the next semantically separated word.
 | 
			
		||||
#   - WordLeft
 | 
			
		||||
#       Start of the previous whitespace separated word.
 | 
			
		||||
#   - WordRight
 | 
			
		||||
#       Start of the next whitespace separated word.
 | 
			
		||||
#   - WordLeftEnd
 | 
			
		||||
#       End of the previous whitespace separated word.
 | 
			
		||||
#   - WordRightEnd
 | 
			
		||||
#       End of the next whitespace separated word.
 | 
			
		||||
#   - Bracket
 | 
			
		||||
#       Character matching the bracket at the cursor's location.
 | 
			
		||||
#   - SearchNext
 | 
			
		||||
#       Beginning of the next match.
 | 
			
		||||
#   - SearchPrevious
 | 
			
		||||
#       Beginning of the previous match.
 | 
			
		||||
#   - SearchStart
 | 
			
		||||
#       Start of the match to the left of the vi mode cursor.
 | 
			
		||||
#   - SearchEnd
 | 
			
		||||
#       End of the match to the right of the vi mode cursor.
 | 
			
		||||
#
 | 
			
		||||
# - Search mode exclusive actions:
 | 
			
		||||
#   - SearchFocusNext
 | 
			
		||||
#       Move the focus to the next search match.
 | 
			
		||||
#   - SearchFocusPrevious
 | 
			
		||||
#       Move the focus to the previous search match.
 | 
			
		||||
#   - SearchConfirm
 | 
			
		||||
#   - SearchCancel
 | 
			
		||||
#   - SearchClear
 | 
			
		||||
#       Reset the search regex.
 | 
			
		||||
#   - SearchDeleteWord
 | 
			
		||||
#       Delete the last word in the search regex.
 | 
			
		||||
#   - SearchHistoryPrevious
 | 
			
		||||
#       Go to the previous regex in the search history.
 | 
			
		||||
#   - SearchHistoryNext
 | 
			
		||||
#       Go to the next regex in the search history.
 | 
			
		||||
#
 | 
			
		||||
# - macOS exclusive actions:
 | 
			
		||||
#   - ToggleSimpleFullscreen
 | 
			
		||||
#       Enter fullscreen without occupying another space.
 | 
			
		||||
#
 | 
			
		||||
# - Linux/BSD exclusive actions:
 | 
			
		||||
#
 | 
			
		||||
#   - CopySelection
 | 
			
		||||
#       Copy from the selection buffer.
 | 
			
		||||
#   - PasteSelection
 | 
			
		||||
#       Paste from the selection buffer.
 | 
			
		||||
#
 | 
			
		||||
# - `command`: Fork and execute a specified command plus arguments
 | 
			
		||||
#
 | 
			
		||||
#    The `command` field must be a map containing a `program` string and an
 | 
			
		||||
#    `args` array of command line parameter strings. For example:
 | 
			
		||||
#       `{ program: "alacritty", args: ["-e", "vttest"] }`
 | 
			
		||||
#
 | 
			
		||||
# And optionally:
 | 
			
		||||
#
 | 
			
		||||
# - `mods`: Key modifiers to filter binding actions
 | 
			
		||||
#
 | 
			
		||||
#    - Command
 | 
			
		||||
#    - Control
 | 
			
		||||
#    - Option
 | 
			
		||||
#    - Super
 | 
			
		||||
#    - Shift
 | 
			
		||||
#    - Alt
 | 
			
		||||
#
 | 
			
		||||
#    Multiple `mods` can be combined using `|` like this:
 | 
			
		||||
#       `mods: Control|Shift`.
 | 
			
		||||
#    Whitespace and capitalization are relevant and must match the example.
 | 
			
		||||
#
 | 
			
		||||
# - `mode`: Indicate a binding for only specific terminal reported modes
 | 
			
		||||
#
 | 
			
		||||
#    This is mainly used to send applications the correct escape sequences
 | 
			
		||||
#    when in different modes.
 | 
			
		||||
#
 | 
			
		||||
#    - AppCursor
 | 
			
		||||
#    - AppKeypad
 | 
			
		||||
#    - Search
 | 
			
		||||
#    - Alt
 | 
			
		||||
#    - Vi
 | 
			
		||||
#
 | 
			
		||||
#    A `~` operator can be used before a mode to apply the binding whenever
 | 
			
		||||
#    the mode is *not* active, e.g. `~Alt`.
 | 
			
		||||
#
 | 
			
		||||
# Bindings are always filled by default, but will be replaced when a new
 | 
			
		||||
# binding with the same triggers is defined. To unset a default binding, it can
 | 
			
		||||
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
 | 
			
		||||
# a no-op if you do not wish to receive input characters for that binding.
 | 
			
		||||
#
 | 
			
		||||
# If the same trigger is assigned to multiple actions, all of them are executed
 | 
			
		||||
# in the order they were defined in.
 | 
			
		||||
#key_bindings:
 | 
			
		||||
  #- { key: Paste,                                       action: Paste          }
 | 
			
		||||
  #- { key: Copy,                                        action: Copy           }
 | 
			
		||||
  #- { key: L,         mods: Control,                    action: ClearLogNotice }
 | 
			
		||||
  #- { key: L,         mods: Control, mode: ~Vi|~Search, chars: "\x0c"          }
 | 
			
		||||
  #- { key: PageUp,    mods: Shift,   mode: ~Alt,        action: ScrollPageUp,  }
 | 
			
		||||
  #- { key: PageDown,  mods: Shift,   mode: ~Alt,        action: ScrollPageDown }
 | 
			
		||||
  #- { key: Home,      mods: Shift,   mode: ~Alt,        action: ScrollToTop,   }
 | 
			
		||||
  #- { key: End,       mods: Shift,   mode: ~Alt,        action: ScrollToBottom }
 | 
			
		||||
 | 
			
		||||
  # Vi Mode
 | 
			
		||||
  #- { key: Space,  mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom          }
 | 
			
		||||
  #- { key: Space,  mods: Shift|Control, mode: ~Search,    action: ToggleViMode            }
 | 
			
		||||
  #- { key: Escape,                      mode: Vi|~Search, action: ClearSelection          }
 | 
			
		||||
  #- { key: I,                           mode: Vi|~Search, action: ScrollToBottom          }
 | 
			
		||||
  #- { key: I,                           mode: Vi|~Search, action: ToggleViMode            }
 | 
			
		||||
  #- { key: C,      mods: Control,       mode: Vi|~Search, action: ToggleViMode            }
 | 
			
		||||
  #- { key: Y,      mods: Control,       mode: Vi|~Search, action: ScrollLineUp            }
 | 
			
		||||
  #- { key: E,      mods: Control,       mode: Vi|~Search, action: ScrollLineDown          }
 | 
			
		||||
  #- { key: G,                           mode: Vi|~Search, action: ScrollToTop             }
 | 
			
		||||
  #- { key: G,      mods: Shift,         mode: Vi|~Search, action: ScrollToBottom          }
 | 
			
		||||
  #- { key: B,      mods: Control,       mode: Vi|~Search, action: ScrollPageUp            }
 | 
			
		||||
  #- { key: F,      mods: Control,       mode: Vi|~Search, action: ScrollPageDown          }
 | 
			
		||||
  #- { key: U,      mods: Control,       mode: Vi|~Search, action: ScrollHalfPageUp        }
 | 
			
		||||
  #- { key: D,      mods: Control,       mode: Vi|~Search, action: ScrollHalfPageDown      }
 | 
			
		||||
  #- { key: Y,                           mode: Vi|~Search, action: Copy                    }
 | 
			
		||||
  #- { key: Y,                           mode: Vi|~Search, action: ClearSelection          }
 | 
			
		||||
  #- { key: Copy,                        mode: Vi|~Search, action: ClearSelection          }
 | 
			
		||||
  #- { key: V,                           mode: Vi|~Search, action: ToggleNormalSelection   }
 | 
			
		||||
  #- { key: V,      mods: Shift,         mode: Vi|~Search, action: ToggleLineSelection     }
 | 
			
		||||
  #- { key: V,      mods: Control,       mode: Vi|~Search, action: ToggleBlockSelection    }
 | 
			
		||||
  #- { key: V,      mods: Alt,           mode: Vi|~Search, action: ToggleSemanticSelection }
 | 
			
		||||
  #- { key: Return,                      mode: Vi|~Search, action: Open                    }
 | 
			
		||||
  #- { key: K,                           mode: Vi|~Search, action: Up                      }
 | 
			
		||||
  #- { key: J,                           mode: Vi|~Search, action: Down                    }
 | 
			
		||||
  #- { key: H,                           mode: Vi|~Search, action: Left                    }
 | 
			
		||||
  #- { key: L,                           mode: Vi|~Search, action: Right                   }
 | 
			
		||||
  #- { key: Up,                          mode: Vi|~Search, action: Up                      }
 | 
			
		||||
  #- { key: Down,                        mode: Vi|~Search, action: Down                    }
 | 
			
		||||
  #- { key: Left,                        mode: Vi|~Search, action: Left                    }
 | 
			
		||||
  #- { key: Right,                       mode: Vi|~Search, action: Right                   }
 | 
			
		||||
  #- { key: Key0,                        mode: Vi|~Search, action: First                   }
 | 
			
		||||
  #- { key: Key4,   mods: Shift,         mode: Vi|~Search, action: Last                    }
 | 
			
		||||
  #- { key: Key6,   mods: Shift,         mode: Vi|~Search, action: FirstOccupied           }
 | 
			
		||||
  #- { key: H,      mods: Shift,         mode: Vi|~Search, action: High                    }
 | 
			
		||||
  #- { key: M,      mods: Shift,         mode: Vi|~Search, action: Middle                  }
 | 
			
		||||
  #- { key: L,      mods: Shift,         mode: Vi|~Search, action: Low                     }
 | 
			
		||||
  #- { key: B,                           mode: Vi|~Search, action: SemanticLeft            }
 | 
			
		||||
  #- { key: W,                           mode: Vi|~Search, action: SemanticRight           }
 | 
			
		||||
  #- { key: E,                           mode: Vi|~Search, action: SemanticRightEnd        }
 | 
			
		||||
  #- { key: B,      mods: Shift,         mode: Vi|~Search, action: WordLeft                }
 | 
			
		||||
  #- { key: W,      mods: Shift,         mode: Vi|~Search, action: WordRight               }
 | 
			
		||||
  #- { key: E,      mods: Shift,         mode: Vi|~Search, action: WordRightEnd            }
 | 
			
		||||
  #- { key: Key5,   mods: Shift,         mode: Vi|~Search, action: Bracket                 }
 | 
			
		||||
  #- { key: Slash,                       mode: Vi|~Search, action: SearchForward           }
 | 
			
		||||
  #- { key: Slash,  mods: Shift,         mode: Vi|~Search, action: SearchBackward          }
 | 
			
		||||
  #- { key: N,                           mode: Vi|~Search, action: SearchNext              }
 | 
			
		||||
  #- { key: N,      mods: Shift,         mode: Vi|~Search, action: SearchPrevious          }
 | 
			
		||||
 | 
			
		||||
  # Search Mode
 | 
			
		||||
  #- { key: Return,                mode: Search|Vi,  action: SearchConfirm         }
 | 
			
		||||
  #- { key: Escape,                mode: Search,     action: SearchCancel          }
 | 
			
		||||
  #- { key: C,      mods: Control, mode: Search,     action: SearchCancel          }
 | 
			
		||||
  #- { key: U,      mods: Control, mode: Search,     action: SearchClear           }
 | 
			
		||||
  #- { key: W,      mods: Control, mode: Search,     action: SearchDeleteWord      }
 | 
			
		||||
  #- { key: P,      mods: Control, mode: Search,     action: SearchHistoryPrevious }
 | 
			
		||||
  #- { key: N,      mods: Control, mode: Search,     action: SearchHistoryNext     }
 | 
			
		||||
  #- { key: Up,                    mode: Search,     action: SearchHistoryPrevious }
 | 
			
		||||
  #- { key: Down,                  mode: Search,     action: SearchHistoryNext     }
 | 
			
		||||
  #- { key: Return,                mode: Search|~Vi, action: SearchFocusNext       }
 | 
			
		||||
  #- { key: Return, mods: Shift,   mode: Search|~Vi, action: SearchFocusPrevious   }
 | 
			
		||||
 | 
			
		||||
  # (Windows, Linux, and BSD only)
 | 
			
		||||
  #- { key: V,              mods: Control|Shift, mode: ~Vi,        action: Paste            }
 | 
			
		||||
  #- { key: C,              mods: Control|Shift,                   action: Copy             }
 | 
			
		||||
  #- { key: F,              mods: Control|Shift, mode: ~Search,    action: SearchForward    }
 | 
			
		||||
  #- { key: B,              mods: Control|Shift, mode: ~Search,    action: SearchBackward   }
 | 
			
		||||
  #- { key: C,              mods: Control|Shift, mode: Vi|~Search, action: ClearSelection   }
 | 
			
		||||
  #- { key: Insert,         mods: Shift,                           action: PasteSelection   }
 | 
			
		||||
  #- { key: Key0,           mods: Control,                         action: ResetFontSize    }
 | 
			
		||||
  #- { key: Equals,         mods: Control,                         action: IncreaseFontSize }
 | 
			
		||||
  #- { key: Plus,           mods: Control,                         action: IncreaseFontSize }
 | 
			
		||||
  #- { key: NumpadAdd,      mods: Control,                         action: IncreaseFontSize }
 | 
			
		||||
  #- { key: Minus,          mods: Control,                         action: DecreaseFontSize }
 | 
			
		||||
  #- { key: NumpadSubtract, mods: Control,                         action: DecreaseFontSize }
 | 
			
		||||
 | 
			
		||||
  # (Windows only)
 | 
			
		||||
  #- { key: Return,   mods: Alt,           action: ToggleFullscreen }
 | 
			
		||||
 | 
			
		||||
  # (macOS only)
 | 
			
		||||
  #- { key: K,              mods: Command, mode: ~Vi|~Search, chars: "\x0c"            }
 | 
			
		||||
  #- { key: K,              mods: Command, mode: ~Vi|~Search, action: ClearHistory     }
 | 
			
		||||
  #- { key: Key0,           mods: Command,                    action: ResetFontSize    }
 | 
			
		||||
  #- { key: Equals,         mods: Command,                    action: IncreaseFontSize }
 | 
			
		||||
  #- { key: Plus,           mods: Command,                    action: IncreaseFontSize }
 | 
			
		||||
  #- { key: NumpadAdd,      mods: Command,                    action: IncreaseFontSize }
 | 
			
		||||
  #- { key: Minus,          mods: Command,                    action: DecreaseFontSize }
 | 
			
		||||
  #- { key: NumpadSubtract, mods: Command,                    action: DecreaseFontSize }
 | 
			
		||||
  #- { key: V,              mods: Command,                    action: Paste            }
 | 
			
		||||
  #- { key: C,              mods: Command,                    action: Copy             }
 | 
			
		||||
  #- { key: C,              mods: Command, mode: Vi|~Search,  action: ClearSelection   }
 | 
			
		||||
  #- { key: H,              mods: Command,                    action: Hide             }
 | 
			
		||||
  #- { key: M,              mods: Command,                    action: Minimize         }
 | 
			
		||||
  #- { key: Q,              mods: Command,                    action: Quit             }
 | 
			
		||||
  #- { key: W,              mods: Command,                    action: Quit             }
 | 
			
		||||
  #- { key: N,              mods: Command,                    action: SpawnNewInstance }
 | 
			
		||||
  #- { key: F,              mods: Command|Control,            action: ToggleFullscreen }
 | 
			
		||||
  #- { key: F,              mods: Command, mode: ~Search,     action: SearchForward    }
 | 
			
		||||
  #- { key: B,              mods: Command, mode: ~Search,     action: SearchBackward   }
 | 
			
		||||
 | 
			
		||||
#debug:
 | 
			
		||||
  # Display the time it takes to redraw each frame.
 | 
			
		||||
  #render_timer: false
 | 
			
		||||
 | 
			
		||||
  # Keep the log file after quitting Alacritty.
 | 
			
		||||
  #persistent_logging: false
 | 
			
		||||
 | 
			
		||||
  # Log level
 | 
			
		||||
  #
 | 
			
		||||
  # Values for `log_level`:
 | 
			
		||||
  #   - Off
 | 
			
		||||
  #   - Error
 | 
			
		||||
  #   - Warn
 | 
			
		||||
  #   - Info
 | 
			
		||||
  #   - Debug
 | 
			
		||||
  #   - Trace
 | 
			
		||||
  #log_level: Warn
 | 
			
		||||
 | 
			
		||||
  # Print all received window events.
 | 
			
		||||
  #print_events: false
 | 
			
		||||
							
								
								
									
										110
									
								
								alacritty/hexalacritty.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								alacritty/hexalacritty.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,110 @@
 | 
			
		||||
env:
 | 
			
		||||
    TERM: xterm-256color
 | 
			
		||||
 | 
			
		||||
scrolling:
 | 
			
		||||
    history: 5000
 | 
			
		||||
 | 
			
		||||
window:
 | 
			
		||||
 padding:
 | 
			
		||||
    x: 16
 | 
			
		||||
    y: 16
 | 
			
		||||
 | 
			
		||||
colors:
 | 
			
		||||
  # Default colors
 | 
			
		||||
  primary:
 | 
			
		||||
    #background: '#000000'
 | 
			
		||||
    background: '#1B1B1B'
 | 
			
		||||
    foreground: '0xf8f8f2'
 | 
			
		||||
 | 
			
		||||
  cursor:
 | 
			
		||||
    text: '0x44475a'
 | 
			
		||||
    cursor: '0xf8f8f2'
 | 
			
		||||
 | 
			
		||||
  # Selection colors
 | 
			
		||||
  #
 | 
			
		||||
  # Colors which should be used to draw the selection area. If selection
 | 
			
		||||
  # background is unset, selection color will be the inverse of the cell colors.
 | 
			
		||||
  # If only text is unset the cell text color will remain the same.
 | 
			
		||||
  selection:
 | 
			
		||||
    text: '0xf8f8f2'
 | 
			
		||||
    background: '0x44475a'
 | 
			
		||||
 | 
			
		||||
  # Normal colors
 | 
			
		||||
  normal:
 | 
			
		||||
    black:   '0x000000'
 | 
			
		||||
    red:     '0xff5555'
 | 
			
		||||
    green:   '0x50fa7b'
 | 
			
		||||
    yellow:  '0xf1fa8c'
 | 
			
		||||
    blue:    '0xbd93f9'
 | 
			
		||||
    magenta: '0xff79c6'
 | 
			
		||||
    cyan:    '0x8be9fd'
 | 
			
		||||
    white:   '0xbfbfbf'
 | 
			
		||||
 | 
			
		||||
  # Bright colors
 | 
			
		||||
  bright:
 | 
			
		||||
    black:   '0x4d4d4d'
 | 
			
		||||
    red:     '0xff6e67'
 | 
			
		||||
    green:   '0x5af78e'
 | 
			
		||||
    yellow:  '0xf4f99d'
 | 
			
		||||
    blue:    '0xcaa9fa'
 | 
			
		||||
    magenta: '0xff92d0'
 | 
			
		||||
    cyan:    '0x9aedfe'
 | 
			
		||||
    white:   '0xe6e6e6'
 | 
			
		||||
 | 
			
		||||
  # Dim colors
 | 
			
		||||
  #
 | 
			
		||||
  # If the dim colors are not set, they will be calculated automatically based
 | 
			
		||||
  # on the `normal` colors.
 | 
			
		||||
  dim:
 | 
			
		||||
    black:   '0x14151b'
 | 
			
		||||
    red:     '0xff2222'
 | 
			
		||||
    green:   '0x1ef956'
 | 
			
		||||
    yellow:  '0xebf85b'
 | 
			
		||||
    blue:    '0x4d5b86'
 | 
			
		||||
    magenta: '0xff46b0'
 | 
			
		||||
    cyan:    '0x59dffc'
 | 
			
		||||
    white:   '0xe6e6d1'
 | 
			
		||||
 | 
			
		||||
  # Indexed Colors
 | 
			
		||||
  #
 | 
			
		||||
  # The indexed colors include all colors from 16 to 256.
 | 
			
		||||
  # When these are not set, they're filled with sensible defaults.
 | 
			
		||||
  #
 | 
			
		||||
  # Example:
 | 
			
		||||
  #   `- { index: 16, color: '0xff00ff' }`
 | 
			
		||||
  #
 | 
			
		||||
  indexed_colors: []
 | 
			
		||||
 | 
			
		||||
font:
 | 
			
		||||
  normal:
 | 
			
		||||
    family: monospace
 | 
			
		||||
    style: Regular
 | 
			
		||||
 | 
			
		||||
  bold:
 | 
			
		||||
    family: monospace
 | 
			
		||||
    style: Bold
 | 
			
		||||
 | 
			
		||||
  italic:
 | 
			
		||||
    family: monospace
 | 
			
		||||
    style: Italic
 | 
			
		||||
 | 
			
		||||
  bold_italic:
 | 
			
		||||
    family: monospace
 | 
			
		||||
    style: Bold Italic
 | 
			
		||||
 | 
			
		||||
  size: 6
 | 
			
		||||
 | 
			
		||||
# Key bindings
 | 
			
		||||
Key_bindings:
 | 
			
		||||
    - { key: Equals,   mods: Super, action: IncreaseFontSize }
 | 
			
		||||
    - { key: Subtract, mods: Super, action: DecreaseFontSize }
 | 
			
		||||
    - { key: Key0,     mods: Super, action: ResetFontSize    }
 | 
			
		||||
    - { key: PageUp,   mods: Shift,   action: ScrollPageUp   }
 | 
			
		||||
    - { key: PageDown, mods: Shift,   action: ScrollPageDown }
 | 
			
		||||
    - { key: End,      mods: Shift,   action: ScrollToBottom }
 | 
			
		||||
    - { key: Home,     mods: Shift,   action: ScrollToTop    }
 | 
			
		||||
    - { key: V,        mods: Control|Alt,  action: Paste       }
 | 
			
		||||
    - { key: C,        mods: Control|Alt,  action: Copy        }
 | 
			
		||||
    - { key: Return,   mods: Control, action: SpawnNewInstance }
 | 
			
		||||
    - { key: T,        mods: Control, action: SpawnNewInstance }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										400
									
								
								amfora/config.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										400
									
								
								amfora/config.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,400 @@
 | 
			
		||||
# This is the default config file.
 | 
			
		||||
# It also shows all the default values, if you don't create the file.
 | 
			
		||||
 | 
			
		||||
# All URL values may omit the scheme and/or port, as well as the beginning double slash
 | 
			
		||||
# Valid URL examples:
 | 
			
		||||
# gemini://example.com
 | 
			
		||||
# //example.com
 | 
			
		||||
# example.com
 | 
			
		||||
# example.com:123
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[a-general]
 | 
			
		||||
# Press Ctrl-H to access it
 | 
			
		||||
#home = "gemini://gemini.circumlunar.space"
 | 
			
		||||
home = "gemini://simonkellet.xyz"
 | 
			
		||||
# Follow up to 5 Gemini redirects without prompting.
 | 
			
		||||
# A prompt is always shown after the 5th redirect and for redirects to protocols other than Gemini.
 | 
			
		||||
# If set to false, a prompt will be shown before following redirects.
 | 
			
		||||
auto_redirect = false
 | 
			
		||||
 | 
			
		||||
# What command to run to open a HTTP(S) URL.
 | 
			
		||||
# Set to "default" to try to guess the browser, or set to "off" to not open HTTP(S) URLs.
 | 
			
		||||
# If a command is set, than the URL will be added (in quotes) to the end of the command.
 | 
			
		||||
# A space will be prepended to the URL.
 | 
			
		||||
#
 | 
			
		||||
# The best to define a command is using a string array.
 | 
			
		||||
# Examples:
 | 
			
		||||
# http = ['firefox']
 | 
			
		||||
# http = ['custom-browser', '--flag', '--option=2']
 | 
			
		||||
# http = ['/path/with spaces/in it/firefox']
 | 
			
		||||
#
 | 
			
		||||
# Note the use of single quotes, so that backslashes will not be escaped.
 | 
			
		||||
# Using just a string will also work, but it is deprecated, and will degrade if
 | 
			
		||||
# you use paths with spaces.
 | 
			
		||||
 | 
			
		||||
http = 'default'
 | 
			
		||||
 | 
			
		||||
# Any URL that will accept a query string can be put here
 | 
			
		||||
search = "gemini://gus.guru/search"
 | 
			
		||||
 | 
			
		||||
# Whether colors will be used in the terminal
 | 
			
		||||
color = true
 | 
			
		||||
 | 
			
		||||
# Whether ANSI color codes from the page content should be rendered
 | 
			
		||||
ansi = true
 | 
			
		||||
 | 
			
		||||
# Whether to replace list asterisks with unicode bullets
 | 
			
		||||
bullets = true
 | 
			
		||||
 | 
			
		||||
# Whether to show link after link text
 | 
			
		||||
show_link = false
 | 
			
		||||
 | 
			
		||||
# A number from 0 to 1, indicating what percentage of the terminal width the left margin should take up.
 | 
			
		||||
left_margin = 0.15
 | 
			
		||||
 | 
			
		||||
# The max number of columns to wrap a page's text to. Preformatted blocks are not wrapped.
 | 
			
		||||
max_width = 100
 | 
			
		||||
 | 
			
		||||
# 'downloads' is the path to a downloads folder.
 | 
			
		||||
# An empty value means the code will find the default downloads folder for your system.
 | 
			
		||||
# If the path does not exist it will be created.
 | 
			
		||||
# Note the use of single quotes, so that backslashes will not be escaped.
 | 
			
		||||
downloads = ''
 | 
			
		||||
 | 
			
		||||
# Max size for displayable content in bytes - after that size a download window pops up
 | 
			
		||||
page_max_size = 2097152  # 2 MiB
 | 
			
		||||
# Max time it takes to load a page in seconds - after that a download window pops up
 | 
			
		||||
page_max_time = 10
 | 
			
		||||
 | 
			
		||||
# Whether to replace tab numbers with emoji favicons, which are cached.
 | 
			
		||||
emoji_favicons = true
 | 
			
		||||
 | 
			
		||||
# When a scrollbar appears. "never", "auto", and "always" are the only valid values.
 | 
			
		||||
# "auto" means the scrollbar only appears when the page is longer than the window.
 | 
			
		||||
scrollbar = "auto"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[auth]
 | 
			
		||||
# Authentication settings
 | 
			
		||||
# Note the use of single quotes for values, so that backslashes will not be escaped.
 | 
			
		||||
 | 
			
		||||
[auth.certs]
 | 
			
		||||
# Client certificates
 | 
			
		||||
# Set domain name equal to path to client cert
 | 
			
		||||
# "example.com" = 'mycert.crt'
 | 
			
		||||
 | 
			
		||||
[auth.keys]
 | 
			
		||||
# Client certificate keys
 | 
			
		||||
# Set domain name equal to path to key for the client cert above
 | 
			
		||||
# "example.com" = 'mycert.key'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#[keybindings]
 | 
			
		||||
# If you have a non-US keyboard, use bind_tab1 through bind_tab0 to
 | 
			
		||||
# setup the shift-number bindings: Eg, for US keyboards (the default):
 | 
			
		||||
# bind_tab1 = "!"
 | 
			
		||||
# bind_tab2 = "@"
 | 
			
		||||
# bind_tab3 = "#"
 | 
			
		||||
# bind_tab4 = "$"
 | 
			
		||||
# bind_tab5 = "%"
 | 
			
		||||
# bind_tab6 = "^"
 | 
			
		||||
# bind_tab7 = "&"
 | 
			
		||||
# bind_tab8 = "*"
 | 
			
		||||
# bind_tab9 = "("
 | 
			
		||||
# bind_tab0 = ")"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[keybindings]
 | 
			
		||||
bind_bottom       = ":"
 | 
			
		||||
bind_quit         = "q"
 | 
			
		||||
bind_reload       = "r"
 | 
			
		||||
bind_back         = "H"
 | 
			
		||||
bind_forward      = "L"
 | 
			
		||||
bind_next_tab     = "J"
 | 
			
		||||
bind_prev_tab     = "K"
 | 
			
		||||
bind_new_tab      = "O"
 | 
			
		||||
bind_close_tab    = "D"
 | 
			
		||||
bind_save         = "S"
 | 
			
		||||
bind_home         = "h"
 | 
			
		||||
bind_bookmarks    = "b"
 | 
			
		||||
bind_add_bookmark = "B" 
 | 
			
		||||
bind_edit         = "e"
 | 
			
		||||
# Whitespace is not allowed in any of the keybindings! Use 'Space' and 'Tab' to bind to those keys.
 | 
			
		||||
# Multiple keys can be bound to one command, just use a TOML array.
 | 
			
		||||
# To add the Alt modifier, the binding must start with Alt-, should be reasonably universal
 | 
			
		||||
# Ctrl- won't work on all keys, see this for a list:
 | 
			
		||||
# https://github.com/gdamore/tcell/blob/cb1e5d6fa606/key.go#L83
 | 
			
		||||
 | 
			
		||||
# An example of a TOML array for multiple keys being bound to one command is the default
 | 
			
		||||
# binding for reload:
 | 
			
		||||
# bind_reload = ["R","Ctrl-R"]
 | 
			
		||||
# One thing to note here is that "R" is capitalization sensitive, so it means shift-r.
 | 
			
		||||
# "Ctrl-R" means both ctrl-r and ctrl-shift-R (this is a quirk of what ctrl-r means on
 | 
			
		||||
# an ANSI terminal)
 | 
			
		||||
 | 
			
		||||
# The default binding for opening the bottom bar for entering a URL or link number is:
 | 
			
		||||
# bind_bottom = "Space"
 | 
			
		||||
# This is how to get the Spacebar as a keybinding, if you try to use " ", it won't work.
 | 
			
		||||
# And, finally, an example of a simple, unmodified character is:
 | 
			
		||||
# bind_edit = "e"
 | 
			
		||||
# This binds the "e" key to the command to edit the current URL.
 | 
			
		||||
 | 
			
		||||
# The bind_link[1-90] options are for the commands to go to the first 10 links on a page,
 | 
			
		||||
# typically these are bound to the number keys:
 | 
			
		||||
# bind_link1 = "1"
 | 
			
		||||
# bind_link2 = "2"
 | 
			
		||||
# bind_link3 = "3"
 | 
			
		||||
# bind_link4 = "4"
 | 
			
		||||
# bind_link5 = "5"
 | 
			
		||||
# bind_link6 = "6"
 | 
			
		||||
# bind_link7 = "7"
 | 
			
		||||
# bind_link8 = "8"
 | 
			
		||||
# bind_link9 = "9"
 | 
			
		||||
# bind_link0 = "0"
 | 
			
		||||
 | 
			
		||||
# All keybindings:
 | 
			
		||||
#
 | 
			
		||||
# bind_bottom
 | 
			
		||||
# bind_edit
 | 
			
		||||
# bind_home
 | 
			
		||||
# bind_bookmarks
 | 
			
		||||
# bind_add_bookmark
 | 
			
		||||
# bind_save
 | 
			
		||||
# bind_reload
 | 
			
		||||
# bind_back
 | 
			
		||||
# bind_forward
 | 
			
		||||
# bind_pgup
 | 
			
		||||
# bind_pgdn
 | 
			
		||||
# bind_new_tab
 | 
			
		||||
# bind_close_tab
 | 
			
		||||
# bind_next_tab
 | 
			
		||||
# bind_prev_tab
 | 
			
		||||
# bind_quit
 | 
			
		||||
# bind_help
 | 
			
		||||
# bind_sub: for viewing the subscriptions page
 | 
			
		||||
# bind_add_sub
 | 
			
		||||
 | 
			
		||||
[url-handlers]
 | 
			
		||||
# Allows setting the commands to run for various URL schemes.
 | 
			
		||||
# E.g. to open FTP URLs with FileZilla set the following key:
 | 
			
		||||
#   ftp = 'filezilla'
 | 
			
		||||
# You can set any scheme to "off" or "" to disable handling it, or
 | 
			
		||||
# just leave the key unset.
 | 
			
		||||
#
 | 
			
		||||
# DO NOT use this for setting the HTTP command.
 | 
			
		||||
# Use the http setting in the "a-general" section above.
 | 
			
		||||
#
 | 
			
		||||
# NOTE: These settings are overrided by the ones in the proxies section.
 | 
			
		||||
# Note the use of single quotes, so that backslashes will not be escaped.
 | 
			
		||||
 | 
			
		||||
# This is a special key that defines the handler for all URL schemes for which
 | 
			
		||||
# no handler is defined.
 | 
			
		||||
other = 'off'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# [[mediatype-handlers]] section
 | 
			
		||||
# ---------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Specify what applications will open certain media types.
 | 
			
		||||
# By default your default application will be used to open the file when you select "Open".
 | 
			
		||||
# You only need to configure this section if you want to override your default application,
 | 
			
		||||
# or do special things like streaming.
 | 
			
		||||
#
 | 
			
		||||
# Note the use of single quotes for commands, so that backslashes will not be escaped.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# To open jpeg files with the feh command:
 | 
			
		||||
#
 | 
			
		||||
# [[mediatype-handlers]]
 | 
			
		||||
# cmd = ['feh']
 | 
			
		||||
# types = ["image/jpeg"]
 | 
			
		||||
#
 | 
			
		||||
# Each command that you specify must come under its own [[mediatype-handlers]]. You may
 | 
			
		||||
# specify as many [[mediatype-handlers]] as you want to setup multiple commands.
 | 
			
		||||
#
 | 
			
		||||
# If the subtype is omitted then the specified command will be used for the
 | 
			
		||||
# entire type:
 | 
			
		||||
#
 | 
			
		||||
# [[mediatype-handlers]]
 | 
			
		||||
# command = ['vlc', '--flag']
 | 
			
		||||
# types = ["audio", "video"]
 | 
			
		||||
#
 | 
			
		||||
# A catch-all handler can by specified with "*".
 | 
			
		||||
# Note that there are already catch-all handlers in place for all OSes,
 | 
			
		||||
# that open the file using your default application. This is only if you
 | 
			
		||||
# want to override that.
 | 
			
		||||
#
 | 
			
		||||
# [[mediatype-handlers]]
 | 
			
		||||
# cmd = ['some-command']
 | 
			
		||||
# types = [
 | 
			
		||||
#         "application/pdf",
 | 
			
		||||
#         "*",
 | 
			
		||||
# ]
 | 
			
		||||
#
 | 
			
		||||
# You can also choose to stream the data instead of downloading it all before
 | 
			
		||||
# opening it. This is especially useful for large video or audio files, as
 | 
			
		||||
# well as radio streams, which will never complete. You can do this like so:
 | 
			
		||||
#
 | 
			
		||||
# [[mediatype-handlers]]
 | 
			
		||||
# cmd = ['vlc', '-']
 | 
			
		||||
# types = ["audio", "video"]
 | 
			
		||||
# stream = true
 | 
			
		||||
#
 | 
			
		||||
# This uses vlc to stream all video and audio content.
 | 
			
		||||
# By default stream is set to off for all handlers
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# If you want to always open a type in its viewer without the download or open
 | 
			
		||||
# prompt appearing, you can add no_prompt = true
 | 
			
		||||
#
 | 
			
		||||
# [[mediatype-handlers]]
 | 
			
		||||
# cmd = ['feh']
 | 
			
		||||
# types = ["image"]
 | 
			
		||||
# no_prompt = true
 | 
			
		||||
#
 | 
			
		||||
# Note: Multiple handlers cannot be defined for the same full media type, but
 | 
			
		||||
# still there needs to be an order for which handlers are used. The following
 | 
			
		||||
# order applies regardless of the order written in the config:
 | 
			
		||||
#
 | 
			
		||||
# 1. Full media type: "image/jpeg"
 | 
			
		||||
# 2. Just type: "image"
 | 
			
		||||
# 3. Catch-all: "*"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[cache]
 | 
			
		||||
# Options for page cache - which is only for text pages
 | 
			
		||||
# Increase the cache size to speed up browsing at the expense of memory
 | 
			
		||||
# Zero values mean there is no limit
 | 
			
		||||
 | 
			
		||||
max_size = 0  # Size in bytes
 | 
			
		||||
max_pages = 30 # The maximum number of pages the cache will store
 | 
			
		||||
 | 
			
		||||
# How long a page will stay in cache, in seconds.
 | 
			
		||||
timeout = 1800 # 30 mins
 | 
			
		||||
 | 
			
		||||
[proxies]
 | 
			
		||||
# Allows setting a Gemini proxy for different schemes.
 | 
			
		||||
# The settings are similar to the url-handlers section above.
 | 
			
		||||
# E.g. to open a gopher page by connecting to a Gemini proxy server:
 | 
			
		||||
#   gopher = "example.com:123"
 | 
			
		||||
#
 | 
			
		||||
# Port 1965 is assumed if no port is specified.
 | 
			
		||||
#
 | 
			
		||||
# NOTE: These settings override any external handlers specified in
 | 
			
		||||
# the url-handlers section.
 | 
			
		||||
#
 | 
			
		||||
# Note that HTTP and HTTPS are treated as separate protocols here.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[subscriptions]
 | 
			
		||||
# For tracking feeds and pages
 | 
			
		||||
 | 
			
		||||
# Whether a pop-up appears when viewing a potential feed
 | 
			
		||||
popup = true
 | 
			
		||||
 | 
			
		||||
# How often to check for updates to subscriptions in the background, in seconds.
 | 
			
		||||
# Set it to 0 to disable this feature. You can still update individual feeds
 | 
			
		||||
# manually, or restart the browser.
 | 
			
		||||
#
 | 
			
		||||
# Note Amfora will check for updates on browser start no matter what this setting is.
 | 
			
		||||
update_interval = 1800 # 30 mins
 | 
			
		||||
 | 
			
		||||
# How many subscriptions can be checked at the same time when updating.
 | 
			
		||||
# If you have many subscriptions you may want to increase this for faster
 | 
			
		||||
# update times. Any value below 1 will be corrected to 1.
 | 
			
		||||
workers = 3
 | 
			
		||||
 | 
			
		||||
# The number of subscription updates displayed per page.
 | 
			
		||||
entries_per_page = 20
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[theme]
 | 
			
		||||
# This section is for changing the COLORS used in Amfora.
 | 
			
		||||
# These colors only apply if 'color' is enabled above.
 | 
			
		||||
# Colors can be set using a W3C color name, or a hex value such as "#ffffff".
 | 
			
		||||
 | 
			
		||||
# Note that not all colors will work on terminals that do not have truecolor support.
 | 
			
		||||
# If you want to stick to the standard 16 or 256 colors, you can get
 | 
			
		||||
# a list of those here: /https://jonasjacek.github.io/colors/
 | 
			
		||||
# DO NOT use the names from that site, just the hex codes.
 | 
			
		||||
 | 
			
		||||
# Definitions:
 | 
			
		||||
#   bg = background
 | 
			
		||||
#   fg = foreground
 | 
			
		||||
#   dl = download
 | 
			
		||||
#   btn = button
 | 
			
		||||
#   hdg = heading
 | 
			
		||||
#   bkmk = bookmark
 | 
			
		||||
#   modal = a popup window/box in the middle of the screen
 | 
			
		||||
 | 
			
		||||
# EXAMPLES:
 | 
			
		||||
# hdg_1 = "green"
 | 
			
		||||
# hdg_2 = "#5f0000"
 | 
			
		||||
 | 
			
		||||
# Available keys to set:
 | 
			
		||||
bg = "#282c34" 
 | 
			
		||||
tab_num = "#3071db"
 | 
			
		||||
tab_divider = "#5699af"
 | 
			
		||||
bottombar_label = "#98be65"
 | 
			
		||||
bottombar_text = "#7d7d7d"
 | 
			
		||||
bottombar_bg = "#202328"
 | 
			
		||||
 | 
			
		||||
hdg_1 = "#ff6c6b"
 | 
			
		||||
hdg_2 = "#51afef"
 | 
			
		||||
hdg_3 = "#4669ff"
 | 
			
		||||
amfora_link = "#c678dd"
 | 
			
		||||
foreign_link = "#98be65"
 | 
			
		||||
link_number = "#7d7d7d"
 | 
			
		||||
regular_text = "#ffffff"
 | 
			
		||||
quote_text = "#a9a1e1"
 | 
			
		||||
preformatted_text = "#ecbe7b"
 | 
			
		||||
list_text = "#bbc2cf"
 | 
			
		||||
 | 
			
		||||
# bg: background for pages, tab row, app in general
 | 
			
		||||
# tab_num: The number/highlight of the tabs at the top
 | 
			
		||||
# tab_divider: The color of the divider character between tab numbers: |
 | 
			
		||||
# bottombar_label: The color of the prompt that appears when you press space
 | 
			
		||||
# bottombar_text: The color of the text you type
 | 
			
		||||
# bottombar_bg
 | 
			
		||||
# scrollbar: The scrollbar that appears on the right for long pages
 | 
			
		||||
 | 
			
		||||
# hdg_1
 | 
			
		||||
# hdg_2
 | 
			
		||||
# hdg_3
 | 
			
		||||
# amfora_link: A link that Amfora supports viewing. For now this is only gemini://
 | 
			
		||||
# foreign_link: HTTP(S), Gopher, etc
 | 
			
		||||
# link_number: The silver number that appears to the left of a link
 | 
			
		||||
# regular_text: Normal gemini text, and plaintext documents
 | 
			
		||||
# quote_text
 | 
			
		||||
# preformatted_text
 | 
			
		||||
# list_text
 | 
			
		||||
 | 
			
		||||
# btn_bg: The bg color for all modal buttons
 | 
			
		||||
# btn_text: The text color for all modal buttons
 | 
			
		||||
 | 
			
		||||
# dl_choice_modal_bg
 | 
			
		||||
# dl_choice_modal_text
 | 
			
		||||
# dl_modal_bg
 | 
			
		||||
# dl_modal_text
 | 
			
		||||
# info_modal_bg
 | 
			
		||||
# info_modal_text
 | 
			
		||||
# error_modal_bg
 | 
			
		||||
# error_modal_text
 | 
			
		||||
# yesno_modal_bg
 | 
			
		||||
# yesno_modal_text
 | 
			
		||||
# tofu_modal_bg
 | 
			
		||||
# tofu_modal_text
 | 
			
		||||
# subscription_modal_bg
 | 
			
		||||
# subscription_modal_text
 | 
			
		||||
 | 
			
		||||
# input_modal_bg
 | 
			
		||||
# input_modal_text
 | 
			
		||||
# input_modal_field_bg: The bg of the input field, where you type the text
 | 
			
		||||
# input_modal_field_text: The color of the text you type
 | 
			
		||||
 | 
			
		||||
# bkmk_modal_bg
 | 
			
		||||
# bkmk_modal_text
 | 
			
		||||
# bkmk_modal_label
 | 
			
		||||
# bkmk_modal_field_bg
 | 
			
		||||
# bkmk_modal_field_text
 | 
			
		||||
							
								
								
									
										0
									
								
								calibre/conversion/debug.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/debug.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								calibre/conversion/epub_output.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/epub_output.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								calibre/conversion/heuristics.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/heuristics.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								calibre/conversion/look_and_feel.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/look_and_feel.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								calibre/conversion/metadata.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/metadata.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								calibre/conversion/mobi_output.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/mobi_output.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										3
									
								
								calibre/conversion/page_setup.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								calibre/conversion/page_setup.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
json:{
 | 
			
		||||
  "output_profile": "kindle_pw3"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										0
									
								
								calibre/conversion/pdf_input.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/pdf_input.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								calibre/conversion/search_and_replace.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/search_and_replace.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								calibre/conversion/structure_detection.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/structure_detection.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								calibre/conversion/toc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								calibre/conversion/toc.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										15
									
								
								calibre/dynamic.pickle.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								calibre/dynamic.pickle.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
{
 | 
			
		||||
  "add books dialog dir": "/home/simon/Downloads/Test files",
 | 
			
		||||
  "sort_history": [
 | 
			
		||||
    [
 | 
			
		||||
      "timestamp",
 | 
			
		||||
      false
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      "timestamp",
 | 
			
		||||
      false
 | 
			
		||||
    ]
 | 
			
		||||
  ],
 | 
			
		||||
  "welcome_wizard_device": "kindle_pw",
 | 
			
		||||
  "welcome_wizard_was_run": true
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										110129
									
								
								calibre/fonts/scanner_cache.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110129
									
								
								calibre/fonts/scanner_cache.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										50
									
								
								calibre/global.py.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								calibre/global.py.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
			
		||||
{
 | 
			
		||||
  "add_formats_to_existing": false,
 | 
			
		||||
  "case_sensitive": false,
 | 
			
		||||
  "check_for_dupes_on_ctl": false,
 | 
			
		||||
  "database_path": "/home/simon/library1.db",
 | 
			
		||||
  "filename_pattern": "(?P<title>.+) - (?P<author>[^_]+)",
 | 
			
		||||
  "input_format_order": [
 | 
			
		||||
    "EPUB",
 | 
			
		||||
    "AZW3",
 | 
			
		||||
    "MOBI",
 | 
			
		||||
    "LIT",
 | 
			
		||||
    "PRC",
 | 
			
		||||
    "FB2",
 | 
			
		||||
    "HTML",
 | 
			
		||||
    "HTM",
 | 
			
		||||
    "XHTM",
 | 
			
		||||
    "SHTML",
 | 
			
		||||
    "XHTML",
 | 
			
		||||
    "ZIP",
 | 
			
		||||
    "DOCX",
 | 
			
		||||
    "ODT",
 | 
			
		||||
    "RTF",
 | 
			
		||||
    "PDF",
 | 
			
		||||
    "TXT"
 | 
			
		||||
  ],
 | 
			
		||||
  "installation_uuid": "9c03fad4-0252-48ad-acc5-b9146eef4535",
 | 
			
		||||
  "isbndb_com_key": "",
 | 
			
		||||
  "language": "en_GB",
 | 
			
		||||
  "library_path": "/home/simon/Calibre Library",
 | 
			
		||||
  "limit_search_columns": false,
 | 
			
		||||
  "limit_search_columns_to": [
 | 
			
		||||
    "title",
 | 
			
		||||
    "authors",
 | 
			
		||||
    "tags",
 | 
			
		||||
    "series",
 | 
			
		||||
    "publisher"
 | 
			
		||||
  ],
 | 
			
		||||
  "manage_device_metadata": "manual",
 | 
			
		||||
  "mark_new_books": false,
 | 
			
		||||
  "migrated": false,
 | 
			
		||||
  "network_timeout": 5,
 | 
			
		||||
  "new_book_tags": [],
 | 
			
		||||
  "output_format": "mobi",
 | 
			
		||||
  "read_file_metadata": true,
 | 
			
		||||
  "saved_searches": {},
 | 
			
		||||
  "swap_author_names": false,
 | 
			
		||||
  "use_primary_find_in_search": true,
 | 
			
		||||
  "user_categories": {},
 | 
			
		||||
  "worker_process_priority": "normal"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										151
									
								
								calibre/gui.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								calibre/gui.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,151 @@
 | 
			
		||||
{
 | 
			
		||||
  "book_details_splitter_horizontal_state": [
 | 
			
		||||
    true,
 | 
			
		||||
    200
 | 
			
		||||
  ],
 | 
			
		||||
  "book_list_pin_splitter_state": {
 | 
			
		||||
    "__class__": "bytearray",
 | 
			
		||||
    "__value__": "AAAA/wAAAAEAAAACAAABAAAAAEYA/////wEAAAABAA=="
 | 
			
		||||
  },
 | 
			
		||||
  "convert_bulk_dialog_geom": {
 | 
			
		||||
    "__class__": "bytearray",
 | 
			
		||||
    "__value__": "AdnQywADAAAAAAAZAAAACgAAB1YAAAPfAAAAGwAAAAoAAAdUAAAD3QAAAAAAAAAAB4AAAAAbAAAACgAAB1QAAAPd"
 | 
			
		||||
  },
 | 
			
		||||
  "convert_single_dialog_geom": {
 | 
			
		||||
    "__class__": "bytearray",
 | 
			
		||||
    "__value__": "AdnQywADAAAAAAAdAAAAFAAAB1oAAAPpAAAAHwAAABQAAAdYAAAD5wAAAAAAAAAAB4AAAAAfAAAAFAAAB1gAAAPn"
 | 
			
		||||
  },
 | 
			
		||||
  "cover_browser_splitter_vertical_state": [
 | 
			
		||||
    false,
 | 
			
		||||
    300
 | 
			
		||||
  ],
 | 
			
		||||
  "custom_colors_for_color_dialog": [
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255,
 | 
			
		||||
      255
 | 
			
		||||
    ]
 | 
			
		||||
  ],
 | 
			
		||||
  "grid view visible": false,
 | 
			
		||||
  "jobs view column layout3": {
 | 
			
		||||
    "__class__": "bytearray",
 | 
			
		||||
    "__value__": "AAAA/wAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAFAQEBAAAAAAAAAAAAAAAAAGT/////AAAAhAAAAAAAAAAFAAAAZAAAAAEAAAAAAAAAZAAAAAEAAAAAAAAAZAAAAAEAAAAAAAAAZAAAAAEAAAAAAAAAZAAAAAEAAAAAAAAD6AAAAAAA"
 | 
			
		||||
  },
 | 
			
		||||
  "jobs_dialog_geometry": {
 | 
			
		||||
    "__class__": "bytearray",
 | 
			
		||||
    "__value__": "AdnQywADAAAAAAQTAAABhwAABo8AAAOmAAAEFQAAAYcAAAaNAAADpAAAAAAAAAAAB4AAAAQVAAABhwAABo0AAAOk"
 | 
			
		||||
  },
 | 
			
		||||
  "library_usage_stats": {
 | 
			
		||||
    "/home/simon/Calibre Library": 4
 | 
			
		||||
  },
 | 
			
		||||
  "quick_start_guide_added": true,
 | 
			
		||||
  "quickview visible": false,
 | 
			
		||||
  "replace_scene_breaks_history": [
 | 
			
		||||
    "",
 | 
			
		||||
    "<hr />",
 | 
			
		||||
    "∗ ∗ ∗",
 | 
			
		||||
    "• • •",
 | 
			
		||||
    "♦ ♦ ♦",
 | 
			
		||||
    "† †",
 | 
			
		||||
    "‡ ‡ ‡",
 | 
			
		||||
    "∞ ∞ ∞",
 | 
			
		||||
    "¤ ¤ ¤"
 | 
			
		||||
  ],
 | 
			
		||||
  "search bar visible": true,
 | 
			
		||||
  "tag browser search box visible": false,
 | 
			
		||||
  "tag_browser_splitter_horizontal_state": [
 | 
			
		||||
    true,
 | 
			
		||||
    200
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										79
									
								
								calibre/gui.py.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								calibre/gui.py.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,79 @@
 | 
			
		||||
{
 | 
			
		||||
  "LRF_conversion_defaults": [],
 | 
			
		||||
  "LRF_ebook_viewer_options": null,
 | 
			
		||||
  "asked_library_thing_password": false,
 | 
			
		||||
  "auto_download_cover": false,
 | 
			
		||||
  "autolaunch_server": false,
 | 
			
		||||
  "column_map": [
 | 
			
		||||
    "title",
 | 
			
		||||
    "ondevice",
 | 
			
		||||
    "authors",
 | 
			
		||||
    "size",
 | 
			
		||||
    "timestamp",
 | 
			
		||||
    "rating",
 | 
			
		||||
    "publisher",
 | 
			
		||||
    "tags",
 | 
			
		||||
    "series",
 | 
			
		||||
    "pubdate"
 | 
			
		||||
  ],
 | 
			
		||||
  "confirm_delete": false,
 | 
			
		||||
  "cover_flow_queue_length": 6,
 | 
			
		||||
  "default_send_to_device_action": "DeviceAction:main::False:False",
 | 
			
		||||
  "delete_news_from_library_on_upload": false,
 | 
			
		||||
  "disable_animations": false,
 | 
			
		||||
  "disable_tray_notification": false,
 | 
			
		||||
  "enforce_cpu_limit": true,
 | 
			
		||||
  "get_social_metadata": true,
 | 
			
		||||
  "gui_layout": "wide",
 | 
			
		||||
  "highlight_search_matches": false,
 | 
			
		||||
  "internally_viewed_formats": [
 | 
			
		||||
    "LRF",
 | 
			
		||||
    "EPUB",
 | 
			
		||||
    "LIT",
 | 
			
		||||
    "MOBI",
 | 
			
		||||
    "PRC",
 | 
			
		||||
    "POBI",
 | 
			
		||||
    "AZW",
 | 
			
		||||
    "AZW3",
 | 
			
		||||
    "HTML",
 | 
			
		||||
    "FB2",
 | 
			
		||||
    "FBZ",
 | 
			
		||||
    "PDB",
 | 
			
		||||
    "RB",
 | 
			
		||||
    "SNB",
 | 
			
		||||
    "HTMLZ",
 | 
			
		||||
    "KEPUB"
 | 
			
		||||
  ],
 | 
			
		||||
  "jobs_search_history": [],
 | 
			
		||||
  "lrf_viewer_search_history": [],
 | 
			
		||||
  "main_search_history": [],
 | 
			
		||||
  "main_window_geometry": {
 | 
			
		||||
    "__class__": "bytearray",
 | 
			
		||||
    "__value__": "AdnQywADAAAAAAAAAAAAFgAAB38AAAQ3AAAAAAAAABYAAAd/AAAENwAAAAAAAAAAB4AAAAAAAAAAFgAAB38AAAQ3"
 | 
			
		||||
  },
 | 
			
		||||
  "match_tags_type": "any",
 | 
			
		||||
  "new_version_notification": true,
 | 
			
		||||
  "oldest_news": 60,
 | 
			
		||||
  "overwrite_author_title_metadata": true,
 | 
			
		||||
  "plugin_search_history": [],
 | 
			
		||||
  "save_to_disk_template_history": [],
 | 
			
		||||
  "scheduler_search_history": [],
 | 
			
		||||
  "search_as_you_type": false,
 | 
			
		||||
  "send_to_device_template_history": [],
 | 
			
		||||
  "send_to_storage_card_by_default": false,
 | 
			
		||||
  "separate_cover_flow": false,
 | 
			
		||||
  "shortcuts_search_history": [],
 | 
			
		||||
  "show_avg_rating": true,
 | 
			
		||||
  "sort_tags_by": "name",
 | 
			
		||||
  "systray_icon": false,
 | 
			
		||||
  "tag_browser_hidden_categories": {
 | 
			
		||||
    "__class__": "set",
 | 
			
		||||
    "__value__": []
 | 
			
		||||
  },
 | 
			
		||||
  "tweaks_search_history": [],
 | 
			
		||||
  "upload_news_to_device": true,
 | 
			
		||||
  "use_roman_numerals_for_series_number": true,
 | 
			
		||||
  "viewer_search_history": [],
 | 
			
		||||
  "viewer_toc_search_history": [],
 | 
			
		||||
  "worker_limit": 6
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								calibre/viewer-webengine.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								calibre/viewer-webengine.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
{
 | 
			
		||||
  "main_window_geometry": {
 | 
			
		||||
    "__class__": "bytearray",
 | 
			
		||||
    "__value__": "AdnQywADAAAAAAPAAAAAFgAAB38AAAQ3AAADxAAAABoAAAd7AAAEMwAAAAAAAAAAB4AAAAPEAAAAGgAAB3sAAAQz"
 | 
			
		||||
  },
 | 
			
		||||
  "main_window_state": {
 | 
			
		||||
    "__class__": "bytearray",
 | 
			
		||||
    "__value__": "AAAA/wAAAAH9AAAAAgAAAAAAAAAAAAAAAPwCAAAAAvsAAAAQAHQAbwBjAC0AZABvAGMAawAAAAAA/////wAAAIcA////+wAAABYAcwBlAGEAcgBjAGgALQBkAG8AYwBrAAAAAAD/////AAAAlQD///8AAAABAAAAAAAAAAD8AgAAAAT7AAAAFgBsAG8AbwBrAHUAcAAtAGQAbwBjAGsAAAAAAP////8AAAB9AP////sAAAAcAGIAbwBvAGsAbQBhAHIAawBzAC0AZABvAGMAawAAAAAA/////wAAAOcA////+wAAABwAaQBuAHMAcABlAGMAdABvAHIALQBkAG8AYwBrAAAAAAD/////AAAAEwD////7AAAAHgBoAGkAZwBoAGwAaQBnAGgAdABzAC0AZABvAGMAawAAAAAA/////wAAAMkA////AAADuAAABBoAAAAEAAAABAAAAAgAAAAI/AAAAAEAAAAAAAAAAQAAAB4AYQBjAHQAaQBvAG4AcwBfAHQAbwBvAGwAYgBhAHICAAAAAP////8AAAAAAAAAAA=="
 | 
			
		||||
  },
 | 
			
		||||
  "old_prefs_migrated": true,
 | 
			
		||||
  "session_data": {
 | 
			
		||||
    "controls_help_shown_count": 1,
 | 
			
		||||
    "standalone_font_settings": {},
 | 
			
		||||
    "standalone_misc_settings": {
 | 
			
		||||
      "remember_last_read": true,
 | 
			
		||||
      "remember_window_geometry": false,
 | 
			
		||||
      "save_annotations_in_ebook": true,
 | 
			
		||||
      "singleinstance": false
 | 
			
		||||
    },
 | 
			
		||||
    "standalone_recently_opened": [
 | 
			
		||||
      {
 | 
			
		||||
        "authors": [
 | 
			
		||||
          "maaz sedu"
 | 
			
		||||
        ],
 | 
			
		||||
        "key": "/home/simon/Calibre Library/maaz sedu/A STUDY OF THERMO-STRUCTURAL EFFECTS IN A ROCKET COMBUSTION CHAMBER (2)/A STUDY OF THERMO-STRUCTURAL EFFECTS IN A - maaz sedu.epub",
 | 
			
		||||
        "pathtoebook": "/home/simon/Calibre Library/maaz sedu/A STUDY OF THERMO-STRUCTURAL EFFECTS IN A ROCKET COMBUSTION CHAMBER (2)/A STUDY OF THERMO-STRUCTURAL EFFECTS IN A - maaz sedu.epub",
 | 
			
		||||
        "timestamp": "2021-09-20T13:47:33.274Z",
 | 
			
		||||
        "title": "A STUDY OF THERMO-STRUCTURAL EFFECTS IN A ROCKET COMBUSTION CHAMBER"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1 @@
 | 
			
		||||
[{"pos": "epubcfi(/4/2/4/6/2@50.67:76.52)", "pos_type": "epubcfi", "timestamp": "2021-09-20T13:47:37.367067+00:00", "type": "last-read"}]
 | 
			
		||||
							
								
								
									
										182
									
								
								i3/backconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								i3/backconfig
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,182 @@
 | 
			
		||||
# This file has been auto-generated by i3-config-wizard(1).
 | 
			
		||||
# It will not be overwritten, so edit it as you like.
 | 
			
		||||
#
 | 
			
		||||
# 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!
 | 
			
		||||
 | 
			
		||||
set $mod Mod4
 | 
			
		||||
 | 
			
		||||
# Font for window titles. Will also be used by the bar unless a different font
 | 
			
		||||
# is used in the bar {} block below.
 | 
			
		||||
font pango:monospace 8
 | 
			
		||||
 | 
			
		||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
 | 
			
		||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
 | 
			
		||||
#font pango:DejaVu Sans Mono 8
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
# Use pactl to adjust volume in PulseAudio.
 | 
			
		||||
set $refresh_i3status killall -SIGUSR1 i3status
 | 
			
		||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
 | 
			
		||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
 | 
			
		||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
 | 
			
		||||
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
 | 
			
		||||
 | 
			
		||||
# Use Mouse+$mod to drag floating windows to their wanted position
 | 
			
		||||
floating_modifier $mod
 | 
			
		||||
 | 
			
		||||
# start a terminal
 | 
			
		||||
bindsym $mod+Return exec i3-sensible-terminal
 | 
			
		||||
 | 
			
		||||
# kill focused window
 | 
			
		||||
bindsym $mod+Shift+q kill
 | 
			
		||||
 | 
			
		||||
# start dmenu (a program launcher)
 | 
			
		||||
bindsym $mod+d exec --no-startup-id dmenu_run
 | 
			
		||||
# A more modern dmenu replacement is rofi:
 | 
			
		||||
# bindcode $mod+40 exec "rofi -modi drun,run -show drun"
 | 
			
		||||
# There also is i3-dmenu-desktop which only displays applications shipping a
 | 
			
		||||
# .desktop file. It is a wrapper around dmenu, so you need that installed.
 | 
			
		||||
# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
 | 
			
		||||
 | 
			
		||||
# change focus
 | 
			
		||||
bindsym $mod+j focus left
 | 
			
		||||
bindsym $mod+k focus down
 | 
			
		||||
bindsym $mod+l focus up
 | 
			
		||||
bindsym $mod+semicolon focus right
 | 
			
		||||
 | 
			
		||||
# alternatively, you can use the cursor keys:
 | 
			
		||||
bindsym $mod+Left focus left
 | 
			
		||||
bindsym $mod+Down focus down
 | 
			
		||||
bindsym $mod+Up focus up
 | 
			
		||||
bindsym $mod+Right focus right
 | 
			
		||||
 | 
			
		||||
# move focused window
 | 
			
		||||
bindsym $mod+Shift+j move left
 | 
			
		||||
bindsym $mod+Shift+k move down
 | 
			
		||||
bindsym $mod+Shift+l move up
 | 
			
		||||
bindsym $mod+Shift+semicolon move right
 | 
			
		||||
 | 
			
		||||
# alternatively, you can use the cursor keys:
 | 
			
		||||
bindsym $mod+Shift+Left move left
 | 
			
		||||
bindsym $mod+Shift+Down move down
 | 
			
		||||
bindsym $mod+Shift+Up move up
 | 
			
		||||
bindsym $mod+Shift+Right move right
 | 
			
		||||
 | 
			
		||||
# split in horizontal orientation
 | 
			
		||||
bindsym $mod+h split h
 | 
			
		||||
 | 
			
		||||
# split in vertical orientation
 | 
			
		||||
bindsym $mod+v split v
 | 
			
		||||
 | 
			
		||||
# enter fullscreen mode for the focused container
 | 
			
		||||
bindsym $mod+f fullscreen toggle
 | 
			
		||||
 | 
			
		||||
# change container layout (stacked, tabbed, toggle split)
 | 
			
		||||
bindsym $mod+s layout stacking
 | 
			
		||||
bindsym $mod+w layout tabbed
 | 
			
		||||
bindsym $mod+e layout toggle split
 | 
			
		||||
 | 
			
		||||
# toggle tiling / floating
 | 
			
		||||
bindsym $mod+Shift+space floating toggle
 | 
			
		||||
 | 
			
		||||
# change focus between tiling / floating windows
 | 
			
		||||
bindsym $mod+space focus mode_toggle
 | 
			
		||||
 | 
			
		||||
# focus the parent container
 | 
			
		||||
bindsym $mod+a focus parent
 | 
			
		||||
 | 
			
		||||
# focus the child container
 | 
			
		||||
#bindsym $mod+d focus child
 | 
			
		||||
 | 
			
		||||
# Define names for default workspaces for which we configure key bindings later on.
 | 
			
		||||
# We use variables to avoid repeating the names in multiple places.
 | 
			
		||||
set $ws1 "1"
 | 
			
		||||
set $ws2 "2"
 | 
			
		||||
set $ws3 "3"
 | 
			
		||||
set $ws4 "4"
 | 
			
		||||
set $ws5 "5"
 | 
			
		||||
set $ws6 "6"
 | 
			
		||||
set $ws7 "7"
 | 
			
		||||
set $ws8 "8"
 | 
			
		||||
set $ws9 "9"
 | 
			
		||||
set $ws10 "10"
 | 
			
		||||
 | 
			
		||||
# switch to workspace
 | 
			
		||||
bindsym $mod+1 workspace number $ws1
 | 
			
		||||
bindsym $mod+2 workspace number $ws2
 | 
			
		||||
bindsym $mod+3 workspace number $ws3
 | 
			
		||||
bindsym $mod+4 workspace number $ws4
 | 
			
		||||
bindsym $mod+5 workspace number $ws5
 | 
			
		||||
bindsym $mod+6 workspace number $ws6
 | 
			
		||||
bindsym $mod+7 workspace number $ws7
 | 
			
		||||
bindsym $mod+8 workspace number $ws8
 | 
			
		||||
bindsym $mod+9 workspace number $ws9
 | 
			
		||||
bindsym $mod+0 workspace number $ws10
 | 
			
		||||
 | 
			
		||||
# move focused container to workspace
 | 
			
		||||
bindsym $mod+Shift+1 move container to workspace number $ws1
 | 
			
		||||
bindsym $mod+Shift+2 move container to workspace number $ws2
 | 
			
		||||
bindsym $mod+Shift+3 move container to workspace number $ws3
 | 
			
		||||
bindsym $mod+Shift+4 move container to workspace number $ws4
 | 
			
		||||
bindsym $mod+Shift+5 move container to workspace number $ws5
 | 
			
		||||
bindsym $mod+Shift+6 move container to workspace number $ws6
 | 
			
		||||
bindsym $mod+Shift+7 move container to workspace number $ws7
 | 
			
		||||
bindsym $mod+Shift+8 move container to workspace number $ws8
 | 
			
		||||
bindsym $mod+Shift+9 move container to workspace number $ws9
 | 
			
		||||
bindsym $mod+Shift+0 move container to workspace number $ws10
 | 
			
		||||
 | 
			
		||||
# reload the configuration file
 | 
			
		||||
bindsym $mod+Shift+c reload
 | 
			
		||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
 | 
			
		||||
bindsym $mod+Shift+r restart
 | 
			
		||||
# exit i3 (logs you out of your X session)
 | 
			
		||||
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
 | 
			
		||||
 | 
			
		||||
# resize window (you can also use the mouse for that)
 | 
			
		||||
mode "resize" {
 | 
			
		||||
        # These bindings trigger as soon as you enter the resize mode
 | 
			
		||||
 | 
			
		||||
        # Pressing left will shrink the window’s width.
 | 
			
		||||
        # Pressing right will grow the window’s width.
 | 
			
		||||
        # Pressing up will shrink the window’s height.
 | 
			
		||||
        # Pressing down will grow the window’s height.
 | 
			
		||||
        bindsym j resize shrink width 10 px or 10 ppt
 | 
			
		||||
        bindsym k resize grow height 10 px or 10 ppt
 | 
			
		||||
        bindsym l resize shrink height 10 px or 10 ppt
 | 
			
		||||
        bindsym semicolon resize grow width 10 px or 10 ppt
 | 
			
		||||
 | 
			
		||||
        # same bindings, but for the arrow keys
 | 
			
		||||
        bindsym Left resize shrink width 10 px or 10 ppt
 | 
			
		||||
        bindsym Down resize grow height 10 px or 10 ppt
 | 
			
		||||
        bindsym Up resize shrink height 10 px or 10 ppt
 | 
			
		||||
        bindsym Right resize grow width 10 px or 10 ppt
 | 
			
		||||
 | 
			
		||||
        # back to normal: Enter or Escape or $mod+r
 | 
			
		||||
        bindsym Return mode "default"
 | 
			
		||||
        bindsym Escape mode "default"
 | 
			
		||||
        bindsym $mod+r mode "default"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bindsym $mod+r mode "resize"
 | 
			
		||||
 | 
			
		||||
# Start i3bar to display a workspace bar (plus the system information i3status
 | 
			
		||||
# finds out, if available)
 | 
			
		||||
bar {
 | 
			
		||||
        status_command i3status
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										343
									
								
								i3/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										343
									
								
								i3/config
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,343 @@
 | 
			
		||||
# This file has been auto-generated by i3-config-wizard(1).
 | 
			
		||||
# It will not be overwritten, so edit it as you like.
 | 
			
		||||
#
 | 
			
		||||
# 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!
 | 
			
		||||
set $mod Mod4
 | 
			
		||||
set $alt Mod1
 | 
			
		||||
set $coloract "#ff00c1"
 | 
			
		||||
set $colorin "#c387b5"
 | 
			
		||||
set_from_resource $white i3wm.color15 "#fefbec"
 | 
			
		||||
set_from_resource $split i3wm.color10 "#9E664B0"
 | 
			
		||||
# Font for window titles. Will also be used by the bar unless a different font
 | 
			
		||||
# is used in the bar {} block below.
 | 
			
		||||
#font pango: Source Code Pro 12px
 | 
			
		||||
font pango: IBM Plex Mono 11px
 | 
			
		||||
#font pango: JetBrains Mono 8
 | 
			
		||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
 | 
			
		||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
 | 
			
		||||
#font pango:DejaVu Sans Mono 8
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# ------------------------- OLD COLORS  -------------------------
 | 
			
		||||
#set $fg-color #fdfff1
 | 
			
		||||
#set $bg-color #272821
 | 
			
		||||
#set $contrast-color #3b3c35
 | 
			
		||||
#set $red-color #f82570
 | 
			
		||||
#set $green-color #a6e12d
 | 
			
		||||
#set $yellow-color #e4db73
 | 
			
		||||
#set $orange-color #fc961f
 | 
			
		||||
#set $purple-color #ae81ff
 | 
			
		||||
 | 
			
		||||
# class                     border  	       backgr. 	    text    	    indicator 	    child_border
 | 
			
		||||
#client.focused          	$contrast-color    $bg-color	$yellow-color	$contrast-color	$yellow-color
 | 
			
		||||
#client.focused_inactive     $bg-color		   $bg-color	$yellow-color	$bg-color	    $bg-color
 | 
			
		||||
#client.unfocused          	$bg-color          $bg-color	$contrast-color	$bg-color	    $bg-color
 | 
			
		||||
#client.urgent         		$red-color		   $bg-color	$red-color	    $red-color      $red-color
 | 
			
		||||
#client.placeholder          $bg-color		   $bg-color	$yellow-color	$bg-color	    $bg-color
 | 
			
		||||
#client.background       	$fg-color
 | 
			
		||||
 | 
			
		||||
# ------------------------- 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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
# 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 picom -c
 | 
			
		||||
exec --no-startup-id xfce4-power-manager
 | 
			
		||||
 | 
			
		||||
# Use pactl to adjust volume in PulseAudio.
 | 
			
		||||
set $refresh_i3status killall -SIGUSR1 i3status
 | 
			
		||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
 | 
			
		||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
 | 
			
		||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
 | 
			
		||||
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
 | 
			
		||||
 | 
			
		||||
# Use Mouse+$mod to drag floating windows to their wanted position
 | 
			
		||||
floating_modifier $mod
 | 
			
		||||
 | 
			
		||||
# kill focused window
 | 
			
		||||
bindsym $mod+Shift+q kill
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# There also is the (new) i3-dmenu-desktop which only displays applications
 | 
			
		||||
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
 | 
			
		||||
# installed.
 | 
			
		||||
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
 | 
			
		||||
 | 
			
		||||
# change focus
 | 
			
		||||
bindsym $mod+h focus left
 | 
			
		||||
bindsym $mod+j focus down
 | 
			
		||||
bindsym $mod+k focus up
 | 
			
		||||
bindsym $mod+l focus right
 | 
			
		||||
 | 
			
		||||
# alternatively, you can use the cursor keys:
 | 
			
		||||
bindsym $mod+Left focus left
 | 
			
		||||
bindsym $mod+Down focus down
 | 
			
		||||
bindsym $mod+Up focus up
 | 
			
		||||
bindsym $mod+Right focus right
 | 
			
		||||
 | 
			
		||||
# move focused window
 | 
			
		||||
bindsym $mod+Shift+h move left
 | 
			
		||||
bindsym $mod+Shift+j move down
 | 
			
		||||
bindsym $mod+Shift+k move up
 | 
			
		||||
bindsym $mod+Shift+l move right
 | 
			
		||||
 | 
			
		||||
# alternatively, you can use the cursor keys:
 | 
			
		||||
bindsym $mod+Shift+Left move left
 | 
			
		||||
bindsym $mod+Shift+Down move down
 | 
			
		||||
bindsym $mod+Shift+Up move up
 | 
			
		||||
bindsym $mod+Shift+Right move right
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# split in horizontal orientation
 | 
			
		||||
bindsym $mod+semicolon split h 
 | 
			
		||||
 | 
			
		||||
# split in vertical orientation
 | 
			
		||||
bindsym $mod+v split v
 | 
			
		||||
 | 
			
		||||
# enter fullscreen mode for the focused container
 | 
			
		||||
bindsym $mod+f fullscreen toggle
 | 
			
		||||
 | 
			
		||||
# change container layout (stacked, tabbed, toggle split)
 | 
			
		||||
#bindsym $mod+s layout stacking
 | 
			
		||||
#bindsym $mod+w layout tabbed
 | 
			
		||||
bindsym $mod+s layout toggle split
 | 
			
		||||
 | 
			
		||||
# toggle tiling / floating
 | 
			
		||||
bindsym $mod+space floating toggle
 | 
			
		||||
 | 
			
		||||
# change focus between tiling / floating windows
 | 
			
		||||
bindsym $mod+Shift+space focus mode_toggle
 | 
			
		||||
 | 
			
		||||
# focus the parent container
 | 
			
		||||
bindsym $mod+a focus parent
 | 
			
		||||
 | 
			
		||||
# focus the child container
 | 
			
		||||
#bindsym $mod+d focus child
 | 
			
		||||
 | 
			
		||||
new_window pixel 3
 | 
			
		||||
default_border pixel 4
 | 
			
		||||
 | 
			
		||||
gaps inner 14
 | 
			
		||||
gaps outer 14
 | 
			
		||||
 | 
			
		||||
smart_borders on
 | 
			
		||||
 | 
			
		||||
bindsym $mod+i					gaps inner current plus 5
 | 
			
		||||
bindsym $mod+shift+i			gaps inner current minus 5
 | 
			
		||||
 | 
			
		||||
bindsym $mod+o					gaps outer current plus 5
 | 
			
		||||
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+Shift+Return exec alacritty -e ~/.scripts/web
 | 
			
		||||
 | 
			
		||||
bindsym $mod+d exec rofi -show run 
 | 
			
		||||
bindsym $mod+Shift+d exec rofi -show drun -show-icons true
 | 
			
		||||
 | 
			
		||||
bindsym $mod+c exec gnome-calendar
 | 
			
		||||
bindsym $mod+Shift+b exec blueman-manager
 | 
			
		||||
bindsym $mod+Shift+t exec lyx &
 | 
			
		||||
bindsym $mod+p exec passmenu -l 30
 | 
			
		||||
bindsym $mod+Shift+p exec gpodder
 | 
			
		||||
bindsym $mod+Shift+f exec --no-startup-id pcmanfm
 | 
			
		||||
bindsym $mod+Ctrl+f exec --no-startup-id alacritty -e ranger 
 | 
			
		||||
 | 
			
		||||
bindsym Print exec scrot $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png
 | 
			
		||||
bindsym $mod+Print exec scrot -u $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png
 | 
			
		||||
bindsym $mod+Ctrl+Print exec scrot -s $HOME/Pictures/Screenshots/`date +%Y-%m-%d_%H:%M:%S`.png
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### ROFI
 | 
			
		||||
bindsym $mod+e exec --no-startup-id rofi -show emoji -modi emoji
 | 
			
		||||
 | 
			
		||||
bindsym $mod+Shift+e exec --no-startup-id rofi -show
 | 
			
		||||
 | 
			
		||||
#neomutt mail
 | 
			
		||||
bindsym $mod+m exec --no-startup-id alacritty -e neomutt
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
# Define names for default workspaces for which we configure key bindings later on.
 | 
			
		||||
# We use variables to avoid repeating the names in multiple places.
 | 
			
		||||
set $ws1 "1"
 | 
			
		||||
set $ws2 "2"
 | 
			
		||||
set $ws3 "3"
 | 
			
		||||
set $ws4 "4"
 | 
			
		||||
set $ws5 "5"
 | 
			
		||||
set $ws6 "6"
 | 
			
		||||
set $ws7 "7"
 | 
			
		||||
set $ws8 "8"
 | 
			
		||||
set $ws9 "9"
 | 
			
		||||
set $ws10 "10"
 | 
			
		||||
 | 
			
		||||
# switch to workspace
 | 
			
		||||
bindsym $mod+1 workspace number $ws1
 | 
			
		||||
bindsym $mod+2 workspace number $ws2
 | 
			
		||||
bindsym $mod+3 workspace number $ws3
 | 
			
		||||
bindsym $mod+4 workspace number $ws4
 | 
			
		||||
bindsym $mod+5 workspace number $ws5
 | 
			
		||||
bindsym $mod+6 workspace number $ws6
 | 
			
		||||
bindsym $mod+7 workspace number $ws7
 | 
			
		||||
bindsym $mod+8 workspace number $ws8
 | 
			
		||||
bindsym $mod+9 workspace number $ws9
 | 
			
		||||
bindsym $mod+0 workspace number $ws10
 | 
			
		||||
 | 
			
		||||
# move focused container to workspace
 | 
			
		||||
bindsym $mod+Shift+1 move container to workspace number $ws1
 | 
			
		||||
bindsym $mod+Shift+2 move container to workspace number $ws2
 | 
			
		||||
bindsym $mod+Shift+3 move container to workspace number $ws3
 | 
			
		||||
bindsym $mod+Shift+4 move container to workspace number $ws4
 | 
			
		||||
bindsym $mod+Shift+5 move container to workspace number $ws5
 | 
			
		||||
bindsym $mod+Shift+6 move container to workspace number $ws6
 | 
			
		||||
bindsym $mod+Shift+7 move container to workspace number $ws7
 | 
			
		||||
bindsym $mod+Shift+8 move container to workspace number $ws8
 | 
			
		||||
bindsym $mod+Shift+9 move container to workspace number $ws9
 | 
			
		||||
bindsym $mod+Shift+0 move container to workspace number $ws10
 | 
			
		||||
 | 
			
		||||
# reload the configuration file
 | 
			
		||||
bindsym $mod+Shift+c reload
 | 
			
		||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
 | 
			
		||||
bindsym $mod+Shift+r restart
 | 
			
		||||
# exit i3 (logs you out of your X session)
 | 
			
		||||
#bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
 | 
			
		||||
 | 
			
		||||
# resize window (you can also use the mouse for that)
 | 
			
		||||
mode "resize" {
 | 
			
		||||
        # These bindings trigger as soon as you enter the resize mode
 | 
			
		||||
 | 
			
		||||
        # Pressing left will shrink the window’s width.
 | 
			
		||||
        # Pressing right will grow the window’s width.
 | 
			
		||||
        # Pressing up will shrink the window’s height.
 | 
			
		||||
        # Pressing down will grow the window’s height.
 | 
			
		||||
        bindsym j resize shrink width 10 px or 10 ppt
 | 
			
		||||
        bindsym k resize grow height 10 px or 10 ppt
 | 
			
		||||
        bindsym l resize shrink height 10 px or 10 ppt
 | 
			
		||||
        bindsym semicolon resize grow width 10 px or 10 ppt
 | 
			
		||||
 | 
			
		||||
        # same bindings, but for the arrow keys
 | 
			
		||||
        bindsym Left resize shrink width 10 px or 10 ppt
 | 
			
		||||
        bindsym Down resize grow height 10 px or 10 ppt
 | 
			
		||||
        bindsym Up resize shrink height 10 px or 10 ppt
 | 
			
		||||
        bindsym Right resize grow width 10 px or 10 ppt
 | 
			
		||||
 | 
			
		||||
        # back to normal: Enter or Escape or $mod+r
 | 
			
		||||
        bindsym Return mode "default"
 | 
			
		||||
        bindsym Escape mode "default"
 | 
			
		||||
        bindsym $mod+r mode "default"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bindsym $mod+r mode "resize"
 | 
			
		||||
 | 
			
		||||
set $Locker i3lock && sleep 1
 | 
			
		||||
 | 
			
		||||
set $mode_system (l)lock  (e)logout  (s)suspend  (h)hibernate  (r)reboot  (Shift+s)shutdown
 | 
			
		||||
 
 | 
			
		||||
mode "$mode_system" {
 | 
			
		||||
	bindsym l exec --no-startup-id $Locker, mode "default"
 | 
			
		||||
	bindsym e exec --no-startup-id i3-msg exit, mode "default"
 | 
			
		||||
	bindsym s exec --no-startup-id $Locker && systemctl suspend, mode "default"
 | 
			
		||||
	bindsym h exec --no-startup-id $Locker && systemctl hibernate, mode "default"
 | 
			
		||||
	bindsym r exec --no-startup-id systemctl reboot, mode "default"
 | 
			
		||||
	bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"
 | 
			
		||||
 | 
			
		||||
	# back to normal: Enter or Escape
 | 
			
		||||
	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"
 | 
			
		||||
#set_from_resource $split i3wm.color10 "#9E664B0"
 | 
			
		||||
 | 
			
		||||
# Start i3bar to display a workspace bar (plus the system information i3status
 | 
			
		||||
# finds out, if available)
 | 
			
		||||
bar {
 | 
			
		||||
    hidden_state hide
 | 
			
		||||
    modifier none
 | 
			
		||||
    status_command i3status
 | 
			
		||||
    tray_output primary
 | 
			
		||||
	i3bar_command i3bar 
 | 
			
		||||
    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
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bindsym $mod+b bar mode toggle 
 | 
			
		||||
							
								
								
									
										53
									
								
								i3/i3status.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								i3/i3status.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
			
		||||
# i3status configuration file.
 | 
			
		||||
# see "man i3status" for documentation.
 | 
			
		||||
 | 
			
		||||
# It is important that this file is edited as UTF-8.
 | 
			
		||||
# The following line should contain a sharp s:
 | 
			
		||||
# ß
 | 
			
		||||
# If the above line is not correctly displayed, fix your editor first!
 | 
			
		||||
 | 
			
		||||
general {
 | 
			
		||||
        colors = true
 | 
			
		||||
        interval = 20
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#order += "ipv6"
 | 
			
		||||
order += "wireless _first_"
 | 
			
		||||
#order += "ethernet _first_"
 | 
			
		||||
order += "battery all"
 | 
			
		||||
order += "disk /"
 | 
			
		||||
#order += "load"
 | 
			
		||||
#order += "memory"
 | 
			
		||||
order += "tztime local"
 | 
			
		||||
 | 
			
		||||
wireless _first_ {
 | 
			
		||||
        format_up = "%essid %ip"
 | 
			
		||||
        format_down = "!!!"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ethernet _first_ {
 | 
			
		||||
        format_up = "E: %ip (%speed)"
 | 
			
		||||
        format_down = "E: down"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
battery all {
 | 
			
		||||
        format = "%status %percentage %remaining"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
disk "/" {
 | 
			
		||||
        format = "%used/%avail"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
load {
 | 
			
		||||
        format = "%1min"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
memory {
 | 
			
		||||
        format = "%used | %available"
 | 
			
		||||
        threshold_degraded = "1G"
 | 
			
		||||
        format_degraded = "MEMORY < %available"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tztime local {
 | 
			
		||||
        format = "%d/%m/%Y %H:%M"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										0
									
								
								i3/nohup.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								i3/nohup.out
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										8
									
								
								i3/ssh-menu
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								i3/ssh-menu
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
#This is a custom menu for rofi that allows me to ssh
 | 
			
		||||
into many different servers, devices etc.
 | 
			
		||||
 | 
			
		||||
#Simon Kellet, 25/06/21
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								i3blocks
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								i3blocks
									
									
									
									
									
										Submodule
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Subproject commit bb8a6d8e9a3a938d12025db7f5d43e7b75b5c450
 | 
			
		||||
							
								
								
									
										70
									
								
								i3status/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								i3status/config
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
			
		||||
# i3status configuration file.
 | 
			
		||||
# see "man i3status" for documentation.
 | 
			
		||||
 | 
			
		||||
# It is important that this file is edited as UTF-8.
 | 
			
		||||
# The following line should contain a sharp s:
 | 
			
		||||
# ß
 | 
			
		||||
# If the above line is not correctly displayed, fix your editor first!
 | 
			
		||||
 | 
			
		||||
general {
 | 
			
		||||
        colors = true
 | 
			
		||||
        interval = 20
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#order += "ipv6"
 | 
			
		||||
order += "wireless _first_"
 | 
			
		||||
#order += "ethernet _first_"
 | 
			
		||||
order += "disk /"
 | 
			
		||||
#order += "cpu_temperature 0"
 | 
			
		||||
order += "memory"
 | 
			
		||||
order += "volume master"
 | 
			
		||||
order += "battery all"
 | 
			
		||||
#order += "load"
 | 
			
		||||
#order += "memory"
 | 
			
		||||
order += "tztime local"
 | 
			
		||||
 | 
			
		||||
wireless _first_ {
 | 
			
		||||
        format_up = " %essid %ip"
 | 
			
		||||
        format_down = " !!!"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ethernet _first_ {
 | 
			
		||||
        format_up = "E: %ip (%speed)"
 | 
			
		||||
        format_down = "E: down"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
battery all {
 | 
			
		||||
		integer_battery_capacity = true
 | 
			
		||||
		last_full_capacity = true
 | 
			
		||||
        format = "%status %percentage (%remaining)"
 | 
			
		||||
        status_bat = ""
 | 
			
		||||
        status_chr = ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
volume master {
 | 
			
		||||
        format = " %volume"
 | 
			
		||||
        format_muted = ""
 | 
			
		||||
        device = "default"
 | 
			
		||||
        mixer = "Master"
 | 
			
		||||
        mixer_idx = 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
disk "/" {
 | 
			
		||||
        format = " %used/%total"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
load {
 | 
			
		||||
        format = "%1min"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
memory {
 | 
			
		||||
        format = " %used"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cpu_temperature 0 {
 | 
			
		||||
	format = " %degrees°C"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tztime local {
 | 
			
		||||
        format = " %d/%m/%Y %H:%M"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								i3status/i3status.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								i3status/i3status.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
			
		||||
# i3status configuration file.
 | 
			
		||||
# see "man i3status" for documentation.
 | 
			
		||||
 | 
			
		||||
# It is important that this file is edited as UTF-8.
 | 
			
		||||
# The following line should contain a sharp s:
 | 
			
		||||
# ß
 | 
			
		||||
# If the above line is not correctly displayed, fix your editor first!
 | 
			
		||||
 | 
			
		||||
general {
 | 
			
		||||
        colors = true
 | 
			
		||||
        interval = 20
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#order += "ipv6"
 | 
			
		||||
order += "wireless _first_"
 | 
			
		||||
#order += "ethernet _first_"
 | 
			
		||||
order += "battery all"
 | 
			
		||||
order += "disk /"
 | 
			
		||||
#order += "load"
 | 
			
		||||
#order += "memory"
 | 
			
		||||
order += "tztime local"
 | 
			
		||||
 | 
			
		||||
wireless _first_ {
 | 
			
		||||
        format_up = "%essid %ip"
 | 
			
		||||
        format_down = "!!!"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ethernet _first_ {
 | 
			
		||||
        format_up = "E: %ip (%speed)"
 | 
			
		||||
        format_down = "E: down"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
battery all {
 | 
			
		||||
        format = "%status %percentage %remaining"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
disk "/" {
 | 
			
		||||
        format = "%used/%avail"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
load {
 | 
			
		||||
        format = "%1min"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
memory {
 | 
			
		||||
        format = "%used | %available"
 | 
			
		||||
        threshold_degraded = "1G"
 | 
			
		||||
        format_degraded = "MEMORY < %available"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tztime local {
 | 
			
		||||
        format = "%d/%m/%Y %H:%M"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										107
									
								
								lf/lfrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								lf/lfrc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,107 @@
 | 
			
		||||
# Luke's lf settings
 | 
			
		||||
 | 
			
		||||
# Basic vars
 | 
			
		||||
set shell bash
 | 
			
		||||
set shellopts '-eu'
 | 
			
		||||
set ifs "\n"
 | 
			
		||||
set scrolloff 10
 | 
			
		||||
set icons
 | 
			
		||||
set period 1
 | 
			
		||||
set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
 | 
			
		||||
 | 
			
		||||
# Vars that depend on environmental variables
 | 
			
		||||
$lf -remote "send $id set previewer ${XDG_CONFIG_HOME:-$HOME/.config}/lf/scope"
 | 
			
		||||
 | 
			
		||||
# cmds/functions
 | 
			
		||||
cmd open ${{
 | 
			
		||||
    case $(file --mime-type $f -b) in
 | 
			
		||||
	image/vnd.djvu|application/pdf|application/octet-stream) setsid -f zathura $fx >/dev/null 2>&1 ;;
 | 
			
		||||
        text/*) $EDITOR $fx;;
 | 
			
		||||
	image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;;
 | 
			
		||||
	image/svg+xml) display -- $f ;;
 | 
			
		||||
	image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|tif\|ico\)\(_large\)*$" | sxiv -aio 2>/dev/null | lf-select ;;
 | 
			
		||||
	audio/*) mpv --audio-display=no $f ;;
 | 
			
		||||
	video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
 | 
			
		||||
	application/pdf|application/vnd*|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;;
 | 
			
		||||
	application/pgp-encrypted) $EDITOR $fx ;;
 | 
			
		||||
        *) for f in $fx; do setsid -f $OPENER $f >/dev/null 2>&1; done;;
 | 
			
		||||
    esac
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')"
 | 
			
		||||
 | 
			
		||||
cmd extract ${{
 | 
			
		||||
	clear; tput cup $(($(tput lines)/3)); tput bold
 | 
			
		||||
	set -f
 | 
			
		||||
	printf "%s\n\t" "$fx"
 | 
			
		||||
	printf "extract?[y/N]"
 | 
			
		||||
	read ans
 | 
			
		||||
	[ $ans = "y" ] && ext $fx
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd delete ${{
 | 
			
		||||
	clear; tput cup $(($(tput lines)/3)); tput bold
 | 
			
		||||
	set -f
 | 
			
		||||
	printf "%s\n\t" "$fx"
 | 
			
		||||
	printf "delete?[y/N]"
 | 
			
		||||
	read ans
 | 
			
		||||
	[ $ans = "y" ] && rm -rf -- $fx
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd moveto ${{
 | 
			
		||||
	clear; tput cup $(($(tput lines)/3)); tput bold
 | 
			
		||||
	set -f
 | 
			
		||||
	clear; echo "Move to where?"
 | 
			
		||||
	dest="$(cut -d'	' -f2- ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|' )" &&
 | 
			
		||||
	for x in $fx; do
 | 
			
		||||
		eval mv -iv \"$x\" \"$dest\"
 | 
			
		||||
	done &&
 | 
			
		||||
	notify-send "🚚 File(s) moved." "File(s) moved to $dest."
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd copyto ${{
 | 
			
		||||
	clear; tput cup $(($(tput lines)/3)); tput bold
 | 
			
		||||
	set -f
 | 
			
		||||
	clear; echo "Copy to where?"
 | 
			
		||||
	dest="$(cut -d'	' -f2- ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|' )" &&
 | 
			
		||||
	for x in $fx; do
 | 
			
		||||
		eval cp -ivr \"$x\" \"$dest\"
 | 
			
		||||
	done &&
 | 
			
		||||
	notify-send "📋 File(s) copied." "File(s) copies to $dest."
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
cmd setbg "$1"
 | 
			
		||||
cmd bulkrename $vidir
 | 
			
		||||
 | 
			
		||||
# Bindings
 | 
			
		||||
map <c-f> $lf -remote "send $id select '$(fzf)'"
 | 
			
		||||
map J $lf -remote "send $id cd $(cut -d'	' -f2 ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf)"
 | 
			
		||||
map gh
 | 
			
		||||
map g top
 | 
			
		||||
map D delete
 | 
			
		||||
map E extract
 | 
			
		||||
map C copyto
 | 
			
		||||
map M moveto
 | 
			
		||||
map <c-n> push :mkdir<space>
 | 
			
		||||
map <c-r> reload
 | 
			
		||||
map <c-s> set hidden!
 | 
			
		||||
map <enter> shell
 | 
			
		||||
map x $$f
 | 
			
		||||
map X !$f
 | 
			
		||||
map o &mimeopen $f
 | 
			
		||||
map O $mimeopen --ask $f
 | 
			
		||||
 | 
			
		||||
map A rename # at the very end
 | 
			
		||||
map c push A<c-u> # new rename
 | 
			
		||||
map I push A<c-a> # at the very beginning
 | 
			
		||||
map i push A<a-b><a-b><a-f> # before extention
 | 
			
		||||
map a push A<a-b> # after extention
 | 
			
		||||
map B bulkrename
 | 
			
		||||
map b $setbg $f
 | 
			
		||||
 | 
			
		||||
map <c-e> down
 | 
			
		||||
map <c-y> up
 | 
			
		||||
map V push :!nvim<space>
 | 
			
		||||
 | 
			
		||||
# Source Bookmarks
 | 
			
		||||
source "~/.config/lf/shortcutrc"
 | 
			
		||||
							
								
								
									
										58
									
								
								lf/scope
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										58
									
								
								lf/scope
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -C -f -u
 | 
			
		||||
#IFS=$'\n'
 | 
			
		||||
IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}"
 | 
			
		||||
 | 
			
		||||
# ANSI color codes are supported.
 | 
			
		||||
# STDIN is disabled, so interactive scripts won't work properly
 | 
			
		||||
 | 
			
		||||
# This script is considered a configuration file and must be updated manually.
 | 
			
		||||
 | 
			
		||||
# Meanings of exit codes:
 | 
			
		||||
# code | meaning    | action of ranger
 | 
			
		||||
# -----+------------+-------------------------------------------
 | 
			
		||||
# 0    | success    | Display stdout as preview
 | 
			
		||||
# 1    | no preview | Display no preview at all
 | 
			
		||||
# 2    | plain text | Display the plain content of the file
 | 
			
		||||
 | 
			
		||||
# Script arguments
 | 
			
		||||
FILE_PATH="${1}"         # Full path of the highlighted file
 | 
			
		||||
HEIGHT="${2}"
 | 
			
		||||
 | 
			
		||||
#FILE_EXTENSION="${FILE_PATH##*.}"
 | 
			
		||||
#FILE_EXTENSION_LOWER=$(echo ${FILE_EXTENSION} | tr '[:upper:]' '[:lower:]')
 | 
			
		||||
 | 
			
		||||
# Settings
 | 
			
		||||
HIGHLIGHT_SIZE_MAX=262143  # 256KiB
 | 
			
		||||
HIGHLIGHT_TABWIDTH=8
 | 
			
		||||
HIGHLIGHT_STYLE='pablo'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
handle_mime() {
 | 
			
		||||
    local mimetype="${1}"
 | 
			
		||||
    case "${mimetype}" in
 | 
			
		||||
	text/html) w3m -dump "${FILE_PATH}" ;;
 | 
			
		||||
	text/troff) man ./ "${FILE_PATH}" | col -b ;;
 | 
			
		||||
	text/* | */xml)
 | 
			
		||||
            if [ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]; then
 | 
			
		||||
                exit 2
 | 
			
		||||
            fi
 | 
			
		||||
            if [ "$( tput colors )" -ge 256 ]; then
 | 
			
		||||
                local highlight_format='xterm256'
 | 
			
		||||
            else
 | 
			
		||||
                local highlight_format='ansi'
 | 
			
		||||
            fi
 | 
			
		||||
            highlight --replace-tabs="${HIGHLIGHT_TABWIDTH}" --out-format="${highlight_format}" \
 | 
			
		||||
                --style="${HIGHLIGHT_STYLE}" --force -- "${FILE_PATH}" ;;
 | 
			
		||||
	application/zip) atool --list -- "${FILE_PATH}" ;;
 | 
			
		||||
        image/*) chafa --fill=block --symbols=block -c 256 -s 80x"${HEIGHT}" "${FILE_PATH}" || exit 1;;
 | 
			
		||||
        video/* | audio/*|application/octet-stream) mediainfo "${FILE_PATH}" || exit 1;;
 | 
			
		||||
        */pdf) pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - ;;
 | 
			
		||||
        *opendocument*) odt2txt "${FILE_PATH}" ;;
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
 | 
			
		||||
handle_mime "${MIMETYPE}"
 | 
			
		||||
exit 1
 | 
			
		||||
							
								
								
									
										21
									
								
								qutebrowser/autoconfig.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								qutebrowser/autoconfig.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
# 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
 | 
			
		||||
# DO NOT edit this file by hand, qutebrowser will overwrite it.
 | 
			
		||||
# Instead, create a config.py - see :help for details.
 | 
			
		||||
 | 
			
		||||
config_version: 2
 | 
			
		||||
settings:
 | 
			
		||||
  content.notifications.enabled:
 | 
			
		||||
    https://www.netflix.com: false
 | 
			
		||||
    https://www.youtube.com: false
 | 
			
		||||
  scrolling.bar:
 | 
			
		||||
    global: never
 | 
			
		||||
  scrolling.smooth:
 | 
			
		||||
    global: true
 | 
			
		||||
  tabs.position:
 | 
			
		||||
    global: left
 | 
			
		||||
  tabs.show:
 | 
			
		||||
    global: always
 | 
			
		||||
  tabs.width:
 | 
			
		||||
    global: 2%
 | 
			
		||||
							
								
								
									
										10
									
								
								qutebrowser/bookmarks/urls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								qutebrowser/bookmarks/urls
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
https://portal.stir.ac.uk/security/login.jsp?requrl=/my-portal.jsp&&user=&userid= University of Stirling Portal Login
 | 
			
		||||
https://www.gchq-careers.co.uk/cyberfirst/ CyberFirst Bursaries and Apprenticeships 2020-21
 | 
			
		||||
https://myaccount.google.com/?utm_source=sign_in_no_continue Google Account
 | 
			
		||||
https://drive.google.com/drive/my-drive My Drive - Google Drive
 | 
			
		||||
https://cloud.digitalocean.com/projects/f6cd0d83-aac5-4ea4-853b-d7a552be85d5/resources?i=c8e679 fearrising404@gmail.com project - DigitalOcean
 | 
			
		||||
https://www.shhhhhhboo.xyz/ # Welcome to Simon's Gemini page! (Est 09/05/2021) # About Me # Contact
 | 
			
		||||
https://www.discogs.com/messages/ Inbox (5)
 | 
			
		||||
http://192.168.1.254/00000111500/gui/#/main/ Home
 | 
			
		||||
http://192.168.1.125/admin/index.php Pi-hole - raspberrypi
 | 
			
		||||
http://www.patorjk.com/software/taag/#p=testall&f=Calvin%20S&t=%3C3%20Linux Text to ASCII Art Generator (TAAG)
 | 
			
		||||
							
								
								
									
										240
									
								
								qutebrowser/config.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										240
									
								
								qutebrowser/config.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,240 @@
 | 
			
		||||
import dracula.draw
 | 
			
		||||
# Autogenerated config.py
 | 
			
		||||
#
 | 
			
		||||
# NOTE: config.py is intended for advanced users who are comfortable
 | 
			
		||||
# with manually migrating the config file on qutebrowser upgrades. If
 | 
			
		||||
# you prefer, you can also configure qutebrowser using the
 | 
			
		||||
# :set/:bind/:config-* commands without having to write a config.py
 | 
			
		||||
# file.
 | 
			
		||||
#
 | 
			
		||||
# Documentation:
 | 
			
		||||
#   qute://help/configuring.html
 | 
			
		||||
#   qute://help/settings.html
 | 
			
		||||
 | 
			
		||||
# Change the argument to True to still load settings configured via autoconfig.yml
 | 
			
		||||
config.load_autoconfig(True)
 | 
			
		||||
 | 
			
		||||
##dracula
 | 
			
		||||
dracula.draw.blood(c, {
 | 
			
		||||
    'spacing': {
 | 
			
		||||
        'vertical': 6,
 | 
			
		||||
        'horizontal': 8
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
# Which cookies to accept. With QtWebEngine, this setting also controls
 | 
			
		||||
# other features with tracking capabilities similar to those of cookies;
 | 
			
		||||
# including IndexedDB, DOM storage, filesystem API, service workers, and
 | 
			
		||||
# AppCache. Note that with QtWebKit, only `all` and `never` are
 | 
			
		||||
# supported as per-domain values. Setting `no-3rdparty` or `no-
 | 
			
		||||
# unknown-3rdparty` per-domain on QtWebKit will have the same effect as
 | 
			
		||||
# `all`. If this setting is used with URL patterns, the pattern gets
 | 
			
		||||
# applied to the origin/first party URL of the page making the request,
 | 
			
		||||
# not the request URL. With QtWebEngine 5.15.0+, paths will be stripped
 | 
			
		||||
# from URLs, so URL patterns using paths will not match. With
 | 
			
		||||
# QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so
 | 
			
		||||
# you will typically need to set this setting for `example.com` when the
 | 
			
		||||
# cookie is set on `somesubdomain.example.com` for it to work properly.
 | 
			
		||||
# To debug issues with this setting, start qutebrowser with `--debug
 | 
			
		||||
# --logfilter network --debug-flag log-cookies` which will show all
 | 
			
		||||
# cookies being set.
 | 
			
		||||
# Type: String
 | 
			
		||||
# Valid values:
 | 
			
		||||
#   - all: Accept all cookies.
 | 
			
		||||
#   - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail.
 | 
			
		||||
#   - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty.
 | 
			
		||||
#   - never: Don't accept cookies at all.
 | 
			
		||||
config.set('content.cookies.accept', 'all', 'chrome-devtools://*')
 | 
			
		||||
 | 
			
		||||
# Which cookies to accept. With QtWebEngine, this setting also controls
 | 
			
		||||
# other features with tracking capabilities similar to those of cookies;
 | 
			
		||||
# including IndexedDB, DOM storage, filesystem API, service workers, and
 | 
			
		||||
# AppCache. Note that with QtWebKit, only `all` and `never` are
 | 
			
		||||
# supported as per-domain values. Setting `no-3rdparty` or `no-
 | 
			
		||||
# unknown-3rdparty` per-domain on QtWebKit will have the same effect as
 | 
			
		||||
# `all`. If this setting is used with URL patterns, the pattern gets
 | 
			
		||||
# applied to the origin/first party URL of the page making the request,
 | 
			
		||||
# not the request URL. With QtWebEngine 5.15.0+, paths will be stripped
 | 
			
		||||
# from URLs, so URL patterns using paths will not match. With
 | 
			
		||||
# QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so
 | 
			
		||||
# you will typically need to set this setting for `example.com` when the
 | 
			
		||||
# cookie is set on `somesubdomain.example.com` for it to work properly.
 | 
			
		||||
# To debug issues with this setting, start qutebrowser with `--debug
 | 
			
		||||
# --logfilter network --debug-flag log-cookies` which will show all
 | 
			
		||||
# cookies being set.
 | 
			
		||||
# Type: String
 | 
			
		||||
# Valid values:
 | 
			
		||||
#   - all: Accept all cookies.
 | 
			
		||||
#   - no-3rdparty: Accept cookies from the same origin only. This is known to break some sites, such as GMail.
 | 
			
		||||
#   - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. On QtWebEngine, this is the same as no-3rdparty.
 | 
			
		||||
#   - never: Don't accept cookies at all.
 | 
			
		||||
config.set('content.cookies.accept', 'all', 'devtools://*')
 | 
			
		||||
 | 
			
		||||
# Value to send in the `Accept-Language` header. Note that the value
 | 
			
		||||
# read from JavaScript is always the global value.
 | 
			
		||||
# Type: String
 | 
			
		||||
config.set('content.headers.accept_language', '', 'https://matchmaker.krunker.io/*')
 | 
			
		||||
 | 
			
		||||
# User agent to send.  The following placeholders are defined:  *
 | 
			
		||||
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
 | 
			
		||||
# The underlying WebKit version (set to a fixed value   with
 | 
			
		||||
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
 | 
			
		||||
# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
 | 
			
		||||
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
 | 
			
		||||
# QtWebEngine. * `{upstream_browser_version}`: The corresponding
 | 
			
		||||
# Safari/Chrome version. * `{qutebrowser_version}`: The currently
 | 
			
		||||
# running qutebrowser version.  The default value is equal to the
 | 
			
		||||
# unchanged user agent of QtWebKit/QtWebEngine.  Note that the value
 | 
			
		||||
# read from JavaScript is always the global value. With QtWebEngine
 | 
			
		||||
# between 5.12 and 5.14 (inclusive), changing the value exposed to
 | 
			
		||||
# JavaScript requires a restart.
 | 
			
		||||
# Type: FormatString
 | 
			
		||||
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}', 'https://web.whatsapp.com/')
 | 
			
		||||
 | 
			
		||||
# User agent to send.  The following placeholders are defined:  *
 | 
			
		||||
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
 | 
			
		||||
# The underlying WebKit version (set to a fixed value   with
 | 
			
		||||
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
 | 
			
		||||
# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
 | 
			
		||||
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
 | 
			
		||||
# QtWebEngine. * `{upstream_browser_version}`: The corresponding
 | 
			
		||||
# Safari/Chrome version. * `{qutebrowser_version}`: The currently
 | 
			
		||||
# running qutebrowser version.  The default value is equal to the
 | 
			
		||||
# unchanged user agent of QtWebKit/QtWebEngine.  Note that the value
 | 
			
		||||
# read from JavaScript is always the global value. With QtWebEngine
 | 
			
		||||
# between 5.12 and 5.14 (inclusive), changing the value exposed to
 | 
			
		||||
# JavaScript requires a restart.
 | 
			
		||||
# Type: FormatString
 | 
			
		||||
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version} Edg/{upstream_browser_version}', 'https://accounts.google.com/*')
 | 
			
		||||
 | 
			
		||||
# User agent to send.  The following placeholders are defined:  *
 | 
			
		||||
# `{os_info}`: Something like "X11; Linux x86_64". * `{webkit_version}`:
 | 
			
		||||
# The underlying WebKit version (set to a fixed value   with
 | 
			
		||||
# QtWebEngine). * `{qt_key}`: "Qt" for QtWebKit, "QtWebEngine" for
 | 
			
		||||
# QtWebEngine. * `{qt_version}`: The underlying Qt version. *
 | 
			
		||||
# `{upstream_browser_key}`: "Version" for QtWebKit, "Chrome" for
 | 
			
		||||
# QtWebEngine. * `{upstream_browser_version}`: The corresponding
 | 
			
		||||
# Safari/Chrome version. * `{qutebrowser_version}`: The currently
 | 
			
		||||
# running qutebrowser version.  The default value is equal to the
 | 
			
		||||
# unchanged user agent of QtWebKit/QtWebEngine.  Note that the value
 | 
			
		||||
# read from JavaScript is always the global value. With QtWebEngine
 | 
			
		||||
# between 5.12 and 5.14 (inclusive), changing the value exposed to
 | 
			
		||||
# JavaScript requires a restart.
 | 
			
		||||
# Type: FormatString
 | 
			
		||||
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99 Safari/537.36', 'https://*.slack.com/*')
 | 
			
		||||
 | 
			
		||||
# Load images automatically in web pages.
 | 
			
		||||
# Type: Bool
 | 
			
		||||
config.set('content.images', True, 'chrome-devtools://*')
 | 
			
		||||
 | 
			
		||||
# Load images automatically in web pages.
 | 
			
		||||
# Type: Bool
 | 
			
		||||
config.set('content.images', True, 'devtools://*')
 | 
			
		||||
 | 
			
		||||
# Enable JavaScript.
 | 
			
		||||
# Type: Bool
 | 
			
		||||
config.set('content.javascript.enabled', True, 'chrome-devtools://*')
 | 
			
		||||
 | 
			
		||||
# Enable JavaScript.
 | 
			
		||||
# Type: Bool
 | 
			
		||||
config.set('content.javascript.enabled', True, 'devtools://*')
 | 
			
		||||
 | 
			
		||||
# Enable JavaScript.
 | 
			
		||||
# Type: Bool
 | 
			
		||||
config.set('content.javascript.enabled', True, 'chrome://*/*')
 | 
			
		||||
 | 
			
		||||
# Enable JavaScript.
 | 
			
		||||
# Type: Bool
 | 
			
		||||
config.set('content.javascript.enabled', True, 'qute://*/*')
 | 
			
		||||
 | 
			
		||||
# Allow websites to show notifications.
 | 
			
		||||
# Type: BoolAsk
 | 
			
		||||
# Valid values:
 | 
			
		||||
#   - true
 | 
			
		||||
#   - false
 | 
			
		||||
#   - ask
 | 
			
		||||
config.set('content.notifications.enabled', False, 'https://www.reddit.com')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#config.set('colors.webpage.darkmode.enabled', True)
 | 
			
		||||
#config.set('colors.webpage.prefers_color_scheme_dark', True)
 | 
			
		||||
# variables
 | 
			
		||||
black    = "#000000"
 | 
			
		||||
darkgrey = "#030303"
 | 
			
		||||
magenta  = "#ff009e"
 | 
			
		||||
midgrey  = "#544d4d"
 | 
			
		||||
pink     = "#ff00f3"
 | 
			
		||||
red      = "#ff0000"
 | 
			
		||||
white    = "#ffffff"
 | 
			
		||||
yellow   = "#ffdb00"
 | 
			
		||||
 | 
			
		||||
c.colors.webpage.preferred_color_scheme = 'dark'
 | 
			
		||||
c.content.blocking.adblock.lists = ['https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters-2020.txt', 'https://easylist.to/easylist/easylist.txt', 'https://easylist.to/easylist/easyprivacy.txt', 'https://easylist.to/easylist/easylist.txt', 'https://easylist.to/easylist/easyprivacy.txt', 'https://easylist-downloads.adblockplus.org/easylistdutch.txt', 'https://easylist-downloads.adblockplus.org/abp-filters-anti-cv.txt', 'https://www.i-dont-care-about-cookies.eu/abp/', 'https://secure.fanboy.co.nz/fanboy-cookiemonster.txt']
 | 
			
		||||
c.content.blocking.method = 'both'
 | 
			
		||||
#c.content.user_stylesheets = '~/.config/qutebrowser/lol.css'
 | 
			
		||||
config.bind('<Ctrl-m>', 'spawn mpv --volume=50 {url}')
 | 
			
		||||
config.bind('<Ctrl-p>', 'spawn --userscript qute-pass')
 | 
			
		||||
#c.colors.completion.category.bg = black
 | 
			
		||||
#c.colors.completion.category.bg = darkgrey
 | 
			
		||||
#c.colors.completion.category.border.bottom = pink
 | 
			
		||||
#c.colors.completion.category.border.top = darkgrey
 | 
			
		||||
#c.colors.completion.category.border.top = darkgrey
 | 
			
		||||
#c.colors.completion.category.fg = white
 | 
			
		||||
#c.colors.completion.category.fg = white
 | 
			
		||||
#c.colors.completion.even.bg = midgrey
 | 
			
		||||
#c.colors.completion.fg = white
 | 
			
		||||
#c.colors.completion.item.selected.bg = pink
 | 
			
		||||
#c.colors.completion.item.selected.border.bottom = c.colors.completion.category.border.top
 | 
			
		||||
#c.colors.completion.item.selected.border.top = c.colors.completion.item.selected.bg
 | 
			
		||||
#c.colors.completion.item.selected.fg = white
 | 
			
		||||
#c.colors.completion.match.fg = pink
 | 
			
		||||
#c.colors.completion.odd.bg = darkgrey
 | 
			
		||||
#c.colors.contextmenu.disabled.bg = darkgrey
 | 
			
		||||
#c.colors.contextmenu.disabled.fg = midgrey
 | 
			
		||||
#c.colors.contextmenu.menu.bg =  darkgrey
 | 
			
		||||
#c.colors.contextmenu.menu.fg =  white
 | 
			
		||||
#c.colors.contextmenu.selected.bg = pink
 | 
			
		||||
#c.colors.contextmenu.selected.fg = white
 | 
			
		||||
#c.colors.downloads.bar.bg = black
 | 
			
		||||
#c.colors.hints.bg = black
 | 
			
		||||
#c.colors.hints.fg = pink
 | 
			
		||||
#c.colors.hints.match.fg = white
 | 
			
		||||
#c.colors.statusbar.insert.bg = pink
 | 
			
		||||
#c.colors.tabs.bar.bg = black
 | 
			
		||||
#c.colors.tabs.even.bg = midgrey
 | 
			
		||||
#c.colors.tabs.even.fg = c.colors.tabs.odd.fg
 | 
			
		||||
#c.colors.tabs.odd.bg = black
 | 
			
		||||
#c.colors.tabs.odd.fg = white
 | 
			
		||||
#c.colors.tabs.pinned.even.bg = black
 | 
			
		||||
#c.colors.tabs.pinned.even.fg = pink
 | 
			
		||||
#c.colors.tabs.pinned.odd.bg = midgrey
 | 
			
		||||
#c.colors.tabs.pinned.odd.fg = pink
 | 
			
		||||
#c.colors.tabs.pinned.selected.even.bg = pink
 | 
			
		||||
#c.colors.tabs.pinned.selected.odd.bg = pink
 | 
			
		||||
#c.colors.tabs.selected.even.bg = pink
 | 
			
		||||
#c.colors.tabs.selected.odd.bg = pink
 | 
			
		||||
#c.hints.border = black
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#c.colors.webpage.darkmode.enabled = False
 | 
			
		||||
#c.colors.webpage.darkmode.algorithm = 'lightness-cielab'
 | 
			
		||||
#c.colors.webpage.darkmode.grayscale.all = True
 | 
			
		||||
#c.colors.webpage.darkmode.grayscale.images = 0.5
 | 
			
		||||
#c.colors.webpage.darkmode.policy.images = 'never'
 | 
			
		||||
#c.colors.webpage.darkmode.policy.page = 'smart'
 | 
			
		||||
 | 
			
		||||
c.url.searchengines["g"] = "https://www.google.co.uk/search?q={}"
 | 
			
		||||
c.url.searchengines["ddg"] = "https://www.duckduckgo.com/?q={}"
 | 
			
		||||
c.url.searchengines["b"] = "https://search.brave.com/search?q={}"
 | 
			
		||||
c.url.searchengines["aw"] = "https://wiki.archlinux.org/?search={}"
 | 
			
		||||
c.url.searchengines["yt"] = "http://www.youtube.com/results?search_query={}"
 | 
			
		||||
c.url.searchengines["w"] = "https://en.wikipedia.org/w/index.php?search={}&title=Special:Search"
 | 
			
		||||
c.url.searchengines["ebay"] = "https://www.ebay.co.uk/sch/{}"
 | 
			
		||||
c.url.searchengines["r"] = "https://www.reddit.com/r/{}"
 | 
			
		||||
c.url.searchengines["ws"] = "https://www.whosampled.com/search/?q={}"
 | 
			
		||||
c.url.searchengines["gt"] = "https://github.com/search/?q={}"
 | 
			
		||||
c.url.searchengines["dic"] = "http://www.dictionary.com/browse/{}"
 | 
			
		||||
c.url.searchengines["ety"] = "http://www.etymonline.com/index.php?allowed_in_frame=0&search={}"
 | 
			
		||||
c.url.searchengines["aur"] = "https://aur.archlinux.org/packages/?O=0&K={}"
 | 
			
		||||
c.url.searchengines["proton"] = "https://www.protondb.com/search?q={}"
 | 
			
		||||
c.url.searchengines["disc"] = "https://www.discogs.com/search/?q={}"
 | 
			
		||||
							
								
								
									
										1
									
								
								qutebrowser/dracula
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								qutebrowser/dracula
									
									
									
									
									
										Submodule
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Subproject commit ba5bd6589c4bb8ab35aaaaf7111906732f9764ef
 | 
			
		||||
							
								
								
									
										0
									
								
								qutebrowser/nohup.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								qutebrowser/nohup.out
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								qutebrowser/quickmarks
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								qutebrowser/quickmarks
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										278
									
								
								qutebrowser/userscripts/qute-pass
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										278
									
								
								qutebrowser/userscripts/qute-pass
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,278 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com>
 | 
			
		||||
#
 | 
			
		||||
# This file is part of qutebrowser.
 | 
			
		||||
#
 | 
			
		||||
# qutebrowser is free software: you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# qutebrowser is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with qutebrowser.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
Insert login information using pass and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). A short
 | 
			
		||||
demonstration can be seen here: https://i.imgur.com/KN3XuZP.gif.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
USAGE = """The domain of the site has to appear as a segment in the pass path,
 | 
			
		||||
for example: "github.com/cryzed" or "websites/github.com". How the username and
 | 
			
		||||
password are determined is freely configurable using the CLI arguments. As an
 | 
			
		||||
example, if you instead store the username as part of the secret (and use a
 | 
			
		||||
site's name as filename), instead of the default configuration, use
 | 
			
		||||
`--username-target secret` and `--username-pattern "username: (.+)"`.
 | 
			
		||||
 | 
			
		||||
The login information is inserted by emulating key events using qutebrowser's
 | 
			
		||||
fake-key command in this manner: [USERNAME]<Tab>[PASSWORD], which is compatible
 | 
			
		||||
with almost all login forms.
 | 
			
		||||
 | 
			
		||||
If you use gopass with multiple mounts, use the CLI switch --mode gopass to switch to gopass mode.
 | 
			
		||||
 | 
			
		||||
Suggested bindings similar to Uzbl's `formfiller` script:
 | 
			
		||||
 | 
			
		||||
    config.bind('<z><l>', 'spawn --userscript qute-pass')
 | 
			
		||||
    config.bind('<z><u><l>', 'spawn --userscript qute-pass --username-only')
 | 
			
		||||
    config.bind('<z><p><l>', 'spawn --userscript qute-pass --password-only')
 | 
			
		||||
    config.bind('<z><o><l>', 'spawn --userscript qute-pass --otp-only')
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
EPILOG = """Dependencies: tldextract (Python 3 module), pass, pass-otp (optional).
 | 
			
		||||
For issues and feedback please use: https://github.com/cryzed/qutebrowser-userscripts.
 | 
			
		||||
 | 
			
		||||
WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if
 | 
			
		||||
you decide to submit a crash report!"""
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import enum
 | 
			
		||||
import fnmatch
 | 
			
		||||
import functools
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
import shlex
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
import tldextract
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def expanded_path(path):
 | 
			
		||||
    # Expand potential ~ in paths, since this script won't be called from a shell that does it for us
 | 
			
		||||
    expanded = os.path.expanduser(path)
 | 
			
		||||
    # Add trailing slash if not present
 | 
			
		||||
    return os.path.join(expanded, '')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
argument_parser = argparse.ArgumentParser(description=__doc__, usage=USAGE, epilog=EPILOG)
 | 
			
		||||
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL'))
 | 
			
		||||
argument_parser.add_argument('--password-store', '-p',
 | 
			
		||||
                             default=expanded_path(os.getenv('PASSWORD_STORE_DIR', default='~/.password-store')),
 | 
			
		||||
                             help='Path to your pass password-store (only used in pass-mode)', type=expanded_path)
 | 
			
		||||
argument_parser.add_argument('--mode', '-M', choices=['pass', 'gopass'], default="pass",
 | 
			
		||||
                             help='Select mode [gopass] to use gopass instead of the standard pass.')
 | 
			
		||||
argument_parser.add_argument('--username-pattern', '-u', default=r'.*/(.+)',
 | 
			
		||||
                             help='Regular expression that matches the username')
 | 
			
		||||
argument_parser.add_argument('--username-target', '-U', choices=['path', 'secret'], default='path',
 | 
			
		||||
                             help='The target for the username regular expression')
 | 
			
		||||
argument_parser.add_argument('--password-pattern', '-P', default=r'(.*)',
 | 
			
		||||
                             help='Regular expression that matches the password')
 | 
			
		||||
argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu',
 | 
			
		||||
                             help='Invocation used to execute a dmenu-provider')
 | 
			
		||||
argument_parser.add_argument('--noinsert-mode', '-n', dest='insert_mode', action='store_false',
 | 
			
		||||
                             help="Don't automatically enter insert mode")
 | 
			
		||||
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8',
 | 
			
		||||
                             help='Encoding used to communicate with subprocesses')
 | 
			
		||||
argument_parser.add_argument('--merge-candidates', '-m', action='store_true',
 | 
			
		||||
                             help='Merge pass candidates for fully-qualified and registered domain name')
 | 
			
		||||
argument_parser.add_argument('--extra-url-suffixes', '-s', default='',
 | 
			
		||||
                             help='Comma-separated string containing extra suffixes (e.g local)')
 | 
			
		||||
group = argument_parser.add_mutually_exclusive_group()
 | 
			
		||||
group.add_argument('--username-only', '-e', action='store_true', help='Only insert username')
 | 
			
		||||
group.add_argument('--password-only', '-w', action='store_true', help='Only insert password')
 | 
			
		||||
group.add_argument('--otp-only', '-o', action='store_true', help='Only insert OTP code')
 | 
			
		||||
 | 
			
		||||
stderr = functools.partial(print, file=sys.stderr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ExitCodes(enum.IntEnum):
 | 
			
		||||
    SUCCESS = 0
 | 
			
		||||
    FAILURE = 1
 | 
			
		||||
    # 1 is automatically used if Python throws an exception
 | 
			
		||||
    NO_PASS_CANDIDATES = 2
 | 
			
		||||
    COULD_NOT_MATCH_USERNAME = 3
 | 
			
		||||
    COULD_NOT_MATCH_PASSWORD = 4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CouldNotMatchUsername(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CouldNotMatchPassword(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def qute_command(command):
 | 
			
		||||
    with open(os.environ['QUTE_FIFO'], 'w') as fifo:
 | 
			
		||||
        fifo.write(command + '\n')
 | 
			
		||||
        fifo.flush()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def find_pass_candidates(domain):
 | 
			
		||||
    candidates = []
 | 
			
		||||
 | 
			
		||||
    if arguments.mode == "gopass":
 | 
			
		||||
        all_passwords = subprocess.run(["gopass", "list", "--flat" ], stdout=subprocess.PIPE).stdout.decode("UTF-8").splitlines()
 | 
			
		||||
 | 
			
		||||
        for password in all_passwords:
 | 
			
		||||
            if domain in password:
 | 
			
		||||
                candidates.append(password)
 | 
			
		||||
    else:
 | 
			
		||||
        for path, directories, file_names in os.walk(arguments.password_store, followlinks=True):
 | 
			
		||||
            secrets = fnmatch.filter(file_names, '*.gpg')
 | 
			
		||||
            if not secrets:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            # Strip password store path prefix to get the relative pass path
 | 
			
		||||
            pass_path = path[len(arguments.password_store):]
 | 
			
		||||
            split_path = pass_path.split(os.path.sep)
 | 
			
		||||
            for secret in secrets:
 | 
			
		||||
                secret_base = os.path.splitext(secret)[0]
 | 
			
		||||
                if domain not in (split_path + [secret_base]):
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                candidates.append(os.path.join(pass_path, secret_base))
 | 
			
		||||
    return candidates
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _run_pass(pass_arguments):
 | 
			
		||||
    # The executable is conveniently named after it's mode [pass|gopass].
 | 
			
		||||
    pass_command = [arguments.mode]
 | 
			
		||||
    env = os.environ.copy()
 | 
			
		||||
    env['PASSWORD_STORE_DIR'] = arguments.password_store
 | 
			
		||||
    process = subprocess.run(pass_command + pass_arguments, env=env, stdout=subprocess.PIPE)
 | 
			
		||||
    return process.stdout.decode(arguments.io_encoding).strip()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def pass_(path):
 | 
			
		||||
    return _run_pass(['show', path])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def pass_otp(path):
 | 
			
		||||
    if arguments.mode == "gopass":
 | 
			
		||||
        return _run_pass(['otp', '-o', path])
 | 
			
		||||
    return _run_pass(['otp', path])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def dmenu(items, invocation):
 | 
			
		||||
    command = shlex.split(invocation)
 | 
			
		||||
    process = subprocess.run(command, input='\n'.join(items).encode(arguments.io_encoding), stdout=subprocess.PIPE)
 | 
			
		||||
    return process.stdout.decode(arguments.io_encoding).strip()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def fake_key_raw(text):
 | 
			
		||||
    for character in text:
 | 
			
		||||
        # Escape all characters by default, space requires special handling
 | 
			
		||||
        sequence = '" "' if character == ' ' else '\{}'.format(character)
 | 
			
		||||
        qute_command('fake-key {}'.format(sequence))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def extract_password(secret, pattern):
 | 
			
		||||
    match = re.match(pattern, secret)
 | 
			
		||||
    if not match:
 | 
			
		||||
        raise CouldNotMatchPassword("Pattern did not match target")
 | 
			
		||||
    try:
 | 
			
		||||
        return match.group(1)
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        raise CouldNotMatchPassword("Pattern did not contain capture group, please use capture group. Example: (.*)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def extract_username(target, pattern):
 | 
			
		||||
    match = re.search(pattern, target, re.MULTILINE)
 | 
			
		||||
    if not match:
 | 
			
		||||
        raise CouldNotMatchUsername("Pattern did not match target")
 | 
			
		||||
    try:
 | 
			
		||||
        return match.group(1)
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        raise CouldNotMatchUsername("Pattern did not contain capture group, please use capture group. Example: (.*)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main(arguments):
 | 
			
		||||
    if not arguments.url:
 | 
			
		||||
        argument_parser.print_help()
 | 
			
		||||
        return ExitCodes.FAILURE
 | 
			
		||||
 | 
			
		||||
    extractor = tldextract.TLDExtract(extra_suffixes=arguments.extra_url_suffixes.split(','))
 | 
			
		||||
    extract_result = extractor(arguments.url)
 | 
			
		||||
 | 
			
		||||
    # Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains),
 | 
			
		||||
    # the registered domain name, the IPv4 address if that's what the URL represents and finally the private domain
 | 
			
		||||
    # (if a non-public suffix was used).
 | 
			
		||||
    candidates = set()
 | 
			
		||||
    attempted_targets = []
 | 
			
		||||
 | 
			
		||||
    private_domain = ''
 | 
			
		||||
    if not extract_result.suffix:
 | 
			
		||||
        private_domain = ('.'.join((extract_result.subdomain, extract_result.domain))
 | 
			
		||||
                          if extract_result.subdomain else extract_result.domain)
 | 
			
		||||
 | 
			
		||||
    for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.ipv4, private_domain]):
 | 
			
		||||
        attempted_targets.append(target)
 | 
			
		||||
        target_candidates = find_pass_candidates(target)
 | 
			
		||||
        if not target_candidates:
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        candidates.update(target_candidates)
 | 
			
		||||
        if not arguments.merge_candidates:
 | 
			
		||||
            break
 | 
			
		||||
    else:
 | 
			
		||||
        if not candidates:
 | 
			
		||||
            stderr('No pass candidates for URL {!r} found! (I tried {!r})'.format(arguments.url, attempted_targets))
 | 
			
		||||
            return ExitCodes.NO_PASS_CANDIDATES
 | 
			
		||||
 | 
			
		||||
    selection = candidates.pop() if len(candidates) == 1 else dmenu(sorted(candidates), arguments.dmenu_invocation)
 | 
			
		||||
    # Nothing was selected, simply return
 | 
			
		||||
    if not selection:
 | 
			
		||||
        return ExitCodes.SUCCESS
 | 
			
		||||
 | 
			
		||||
    # If username-target is path and user asked for username-only, we don't need to run pass.
 | 
			
		||||
    # Or if using otp-only, it will run pass on its own.
 | 
			
		||||
    secret = None
 | 
			
		||||
    if not (arguments.username_target == 'path' and arguments.username_only) and not arguments.otp_only:
 | 
			
		||||
        secret = pass_(selection)
 | 
			
		||||
    username_target = selection if arguments.username_target == 'path' else secret
 | 
			
		||||
    try:
 | 
			
		||||
        if arguments.username_only:
 | 
			
		||||
            fake_key_raw(extract_username(username_target, arguments.username_pattern))
 | 
			
		||||
        elif arguments.password_only:
 | 
			
		||||
            fake_key_raw(extract_password(secret, arguments.password_pattern))
 | 
			
		||||
        elif arguments.otp_only:
 | 
			
		||||
            otp = pass_otp(selection)
 | 
			
		||||
            fake_key_raw(otp)
 | 
			
		||||
        else:
 | 
			
		||||
            # Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch
 | 
			
		||||
            # back into insert-mode, so the form can be directly submitted by hitting enter afterwards
 | 
			
		||||
            fake_key_raw(extract_username(username_target, arguments.username_pattern))
 | 
			
		||||
            qute_command('fake-key <Tab>')
 | 
			
		||||
            fake_key_raw(extract_password(secret, arguments.password_pattern))
 | 
			
		||||
    except CouldNotMatchPassword as e:
 | 
			
		||||
        stderr('Failed to match password, target: secret, error: {}'.format(e))
 | 
			
		||||
        return ExitCodes.COULD_NOT_MATCH_PASSWORD
 | 
			
		||||
    except CouldNotMatchUsername as e:
 | 
			
		||||
        stderr('Failed to match username, target: {}, error: {}'.format(arguments.username_target, e))
 | 
			
		||||
        return ExitCodes.COULD_NOT_MATCH_USERNAME
 | 
			
		||||
 | 
			
		||||
    if arguments.insert_mode:
 | 
			
		||||
        qute_command('mode-enter insert')
 | 
			
		||||
 | 
			
		||||
    return ExitCodes.SUCCESS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    arguments = argument_parser.parse_args()
 | 
			
		||||
    sys.exit(main(arguments))
 | 
			
		||||
							
								
								
									
										278
									
								
								qutebrowser/userscripts/qute-pass.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										278
									
								
								qutebrowser/userscripts/qute-pass.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,278 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com>
 | 
			
		||||
#
 | 
			
		||||
# This file is part of qutebrowser.
 | 
			
		||||
#
 | 
			
		||||
# qutebrowser is free software: you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
# the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# qutebrowser is distributed in the hope that it will be useful,
 | 
			
		||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
# GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
# You should have received a copy of the GNU General Public License
 | 
			
		||||
# along with qutebrowser.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
Insert login information using pass and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). A short
 | 
			
		||||
demonstration can be seen here: https://i.imgur.com/KN3XuZP.gif.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
USAGE = """The domain of the site has to appear as a segment in the pass path,
 | 
			
		||||
for example: "github.com/cryzed" or "websites/github.com". How the username and
 | 
			
		||||
password are determined is freely configurable using the CLI arguments. As an
 | 
			
		||||
example, if you instead store the username as part of the secret (and use a
 | 
			
		||||
site's name as filename), instead of the default configuration, use
 | 
			
		||||
`--username-target secret` and `--username-pattern "username: (.+)"`.
 | 
			
		||||
 | 
			
		||||
The login information is inserted by emulating key events using qutebrowser's
 | 
			
		||||
fake-key command in this manner: [USERNAME]<Tab>[PASSWORD], which is compatible
 | 
			
		||||
with almost all login forms.
 | 
			
		||||
 | 
			
		||||
If you use gopass with multiple mounts, use the CLI switch --mode gopass to switch to gopass mode.
 | 
			
		||||
 | 
			
		||||
Suggested bindings similar to Uzbl's `formfiller` script:
 | 
			
		||||
 | 
			
		||||
    config.bind('<z><l>', 'spawn --userscript qute-pass')
 | 
			
		||||
    config.bind('<z><u><l>', 'spawn --userscript qute-pass --username-only')
 | 
			
		||||
    config.bind('<z><p><l>', 'spawn --userscript qute-pass --password-only')
 | 
			
		||||
    config.bind('<z><o><l>', 'spawn --userscript qute-pass --otp-only')
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
EPILOG = """Dependencies: tldextract (Python 3 module), pass, pass-otp (optional).
 | 
			
		||||
For issues and feedback please use: https://github.com/cryzed/qutebrowser-userscripts.
 | 
			
		||||
 | 
			
		||||
WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if
 | 
			
		||||
you decide to submit a crash report!"""
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import enum
 | 
			
		||||
import fnmatch
 | 
			
		||||
import functools
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
import shlex
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
import tldextract
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def expanded_path(path):
 | 
			
		||||
    # Expand potential ~ in paths, since this script won't be called from a shell that does it for us
 | 
			
		||||
    expanded = os.path.expanduser(path)
 | 
			
		||||
    # Add trailing slash if not present
 | 
			
		||||
    return os.path.join(expanded, '')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
argument_parser = argparse.ArgumentParser(description=__doc__, usage=USAGE, epilog=EPILOG)
 | 
			
		||||
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL'))
 | 
			
		||||
argument_parser.add_argument('--password-store', '-p',
 | 
			
		||||
                             default=expanded_path(os.getenv('PASSWORD_STORE_DIR', default='~/.password-store')),
 | 
			
		||||
                             help='Path to your pass password-store (only used in pass-mode)', type=expanded_path)
 | 
			
		||||
argument_parser.add_argument('--mode', '-M', choices=['pass', 'gopass'], default="pass",
 | 
			
		||||
                             help='Select mode [gopass] to use gopass instead of the standard pass.')
 | 
			
		||||
argument_parser.add_argument('--username-pattern', '-u', default=r'.*/(.+)',
 | 
			
		||||
                             help='Regular expression that matches the username')
 | 
			
		||||
argument_parser.add_argument('--username-target', '-U', choices=['path', 'secret'], default='path',
 | 
			
		||||
                             help='The target for the username regular expression')
 | 
			
		||||
argument_parser.add_argument('--password-pattern', '-P', default=r'(.*)',
 | 
			
		||||
                             help='Regular expression that matches the password')
 | 
			
		||||
argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu',
 | 
			
		||||
                             help='Invocation used to execute a dmenu-provider')
 | 
			
		||||
argument_parser.add_argument('--noinsert-mode', '-n', dest='insert_mode', action='store_false',
 | 
			
		||||
                             help="Don't automatically enter insert mode")
 | 
			
		||||
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8',
 | 
			
		||||
                             help='Encoding used to communicate with subprocesses')
 | 
			
		||||
argument_parser.add_argument('--merge-candidates', '-m', action='store_true',
 | 
			
		||||
                             help='Merge pass candidates for fully-qualified and registered domain name')
 | 
			
		||||
argument_parser.add_argument('--extra-url-suffixes', '-s', default='',
 | 
			
		||||
                             help='Comma-separated string containing extra suffixes (e.g local)')
 | 
			
		||||
group = argument_parser.add_mutually_exclusive_group()
 | 
			
		||||
group.add_argument('--username-only', '-e', action='store_true', help='Only insert username')
 | 
			
		||||
group.add_argument('--password-only', '-w', action='store_true', help='Only insert password')
 | 
			
		||||
group.add_argument('--otp-only', '-o', action='store_true', help='Only insert OTP code')
 | 
			
		||||
 | 
			
		||||
stderr = functools.partial(print, file=sys.stderr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ExitCodes(enum.IntEnum):
 | 
			
		||||
    SUCCESS = 0
 | 
			
		||||
    FAILURE = 1
 | 
			
		||||
    # 1 is automatically used if Python throws an exception
 | 
			
		||||
    NO_PASS_CANDIDATES = 2
 | 
			
		||||
    COULD_NOT_MATCH_USERNAME = 3
 | 
			
		||||
    COULD_NOT_MATCH_PASSWORD = 4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CouldNotMatchUsername(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CouldNotMatchPassword(Exception):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def qute_command(command):
 | 
			
		||||
    with open(os.environ['QUTE_FIFO'], 'w') as fifo:
 | 
			
		||||
        fifo.write(command + '\n')
 | 
			
		||||
        fifo.flush()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def find_pass_candidates(domain):
 | 
			
		||||
    candidates = []
 | 
			
		||||
 | 
			
		||||
    if arguments.mode == "gopass":
 | 
			
		||||
        all_passwords = subprocess.run(["gopass", "list", "--flat" ], stdout=subprocess.PIPE).stdout.decode("UTF-8").splitlines()
 | 
			
		||||
 | 
			
		||||
        for password in all_passwords:
 | 
			
		||||
            if domain in password:
 | 
			
		||||
                candidates.append(password)
 | 
			
		||||
    else:
 | 
			
		||||
        for path, directories, file_names in os.walk(arguments.password_store, followlinks=True):
 | 
			
		||||
            secrets = fnmatch.filter(file_names, '*.gpg')
 | 
			
		||||
            if not secrets:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            # Strip password store path prefix to get the relative pass path
 | 
			
		||||
            pass_path = path[len(arguments.password_store):]
 | 
			
		||||
            split_path = pass_path.split(os.path.sep)
 | 
			
		||||
            for secret in secrets:
 | 
			
		||||
                secret_base = os.path.splitext(secret)[0]
 | 
			
		||||
                if domain not in (split_path + [secret_base]):
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                candidates.append(os.path.join(pass_path, secret_base))
 | 
			
		||||
    return candidates
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _run_pass(pass_arguments):
 | 
			
		||||
    # The executable is conveniently named after it's mode [pass|gopass].
 | 
			
		||||
    pass_command = [arguments.mode]
 | 
			
		||||
    env = os.environ.copy()
 | 
			
		||||
    env['PASSWORD_STORE_DIR'] = arguments.password_store
 | 
			
		||||
    process = subprocess.run(pass_command + pass_arguments, env=env, stdout=subprocess.PIPE)
 | 
			
		||||
    return process.stdout.decode(arguments.io_encoding).strip()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def pass_(path):
 | 
			
		||||
    return _run_pass(['show', path])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def pass_otp(path):
 | 
			
		||||
    if arguments.mode == "gopass":
 | 
			
		||||
        return _run_pass(['otp', '-o', path])
 | 
			
		||||
    return _run_pass(['otp', path])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def dmenu(items, invocation):
 | 
			
		||||
    command = shlex.split(invocation)
 | 
			
		||||
    process = subprocess.run(command, input='\n'.join(items).encode(arguments.io_encoding), stdout=subprocess.PIPE)
 | 
			
		||||
    return process.stdout.decode(arguments.io_encoding).strip()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def fake_key_raw(text):
 | 
			
		||||
    for character in text:
 | 
			
		||||
        # Escape all characters by default, space requires special handling
 | 
			
		||||
        sequence = '" "' if character == ' ' else '\{}'.format(character)
 | 
			
		||||
        qute_command('fake-key {}'.format(sequence))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def extract_password(secret, pattern):
 | 
			
		||||
    match = re.match(pattern, secret)
 | 
			
		||||
    if not match:
 | 
			
		||||
        raise CouldNotMatchPassword("Pattern did not match target")
 | 
			
		||||
    try:
 | 
			
		||||
        return match.group(1)
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        raise CouldNotMatchPassword("Pattern did not contain capture group, please use capture group. Example: (.*)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def extract_username(target, pattern):
 | 
			
		||||
    match = re.search(pattern, target, re.MULTILINE)
 | 
			
		||||
    if not match:
 | 
			
		||||
        raise CouldNotMatchUsername("Pattern did not match target")
 | 
			
		||||
    try:
 | 
			
		||||
        return match.group(1)
 | 
			
		||||
    except IndexError:
 | 
			
		||||
        raise CouldNotMatchUsername("Pattern did not contain capture group, please use capture group. Example: (.*)")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main(arguments):
 | 
			
		||||
    if not arguments.url:
 | 
			
		||||
        argument_parser.print_help()
 | 
			
		||||
        return ExitCodes.FAILURE
 | 
			
		||||
 | 
			
		||||
    extractor = tldextract.TLDExtract(extra_suffixes=arguments.extra_url_suffixes.split(','))
 | 
			
		||||
    extract_result = extractor(arguments.url)
 | 
			
		||||
 | 
			
		||||
    # Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains),
 | 
			
		||||
    # the registered domain name, the IPv4 address if that's what the URL represents and finally the private domain
 | 
			
		||||
    # (if a non-public suffix was used).
 | 
			
		||||
    candidates = set()
 | 
			
		||||
    attempted_targets = []
 | 
			
		||||
 | 
			
		||||
    private_domain = ''
 | 
			
		||||
    if not extract_result.suffix:
 | 
			
		||||
        private_domain = ('.'.join((extract_result.subdomain, extract_result.domain))
 | 
			
		||||
                          if extract_result.subdomain else extract_result.domain)
 | 
			
		||||
 | 
			
		||||
    for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.ipv4, private_domain]):
 | 
			
		||||
        attempted_targets.append(target)
 | 
			
		||||
        target_candidates = find_pass_candidates(target)
 | 
			
		||||
        if not target_candidates:
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        candidates.update(target_candidates)
 | 
			
		||||
        if not arguments.merge_candidates:
 | 
			
		||||
            break
 | 
			
		||||
    else:
 | 
			
		||||
        if not candidates:
 | 
			
		||||
            stderr('No pass candidates for URL {!r} found! (I tried {!r})'.format(arguments.url, attempted_targets))
 | 
			
		||||
            return ExitCodes.NO_PASS_CANDIDATES
 | 
			
		||||
 | 
			
		||||
    selection = candidates.pop() if len(candidates) == 1 else dmenu(sorted(candidates), arguments.dmenu_invocation)
 | 
			
		||||
    # Nothing was selected, simply return
 | 
			
		||||
    if not selection:
 | 
			
		||||
        return ExitCodes.SUCCESS
 | 
			
		||||
 | 
			
		||||
    # If username-target is path and user asked for username-only, we don't need to run pass.
 | 
			
		||||
    # Or if using otp-only, it will run pass on its own.
 | 
			
		||||
    secret = None
 | 
			
		||||
    if not (arguments.username_target == 'path' and arguments.username_only) and not arguments.otp_only:
 | 
			
		||||
        secret = pass_(selection)
 | 
			
		||||
    username_target = selection if arguments.username_target == 'path' else secret
 | 
			
		||||
    try:
 | 
			
		||||
        if arguments.username_only:
 | 
			
		||||
            fake_key_raw(extract_username(username_target, arguments.username_pattern))
 | 
			
		||||
        elif arguments.password_only:
 | 
			
		||||
            fake_key_raw(extract_password(secret, arguments.password_pattern))
 | 
			
		||||
        elif arguments.otp_only:
 | 
			
		||||
            otp = pass_otp(selection)
 | 
			
		||||
            fake_key_raw(otp)
 | 
			
		||||
        else:
 | 
			
		||||
            # Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch
 | 
			
		||||
            # back into insert-mode, so the form can be directly submitted by hitting enter afterwards
 | 
			
		||||
            fake_key_raw(extract_username(username_target, arguments.username_pattern))
 | 
			
		||||
            qute_command('fake-key <Tab>')
 | 
			
		||||
            fake_key_raw(extract_password(secret, arguments.password_pattern))
 | 
			
		||||
    except CouldNotMatchPassword as e:
 | 
			
		||||
        stderr('Failed to match password, target: secret, error: {}'.format(e))
 | 
			
		||||
        return ExitCodes.COULD_NOT_MATCH_PASSWORD
 | 
			
		||||
    except CouldNotMatchUsername as e:
 | 
			
		||||
        stderr('Failed to match username, target: {}, error: {}'.format(arguments.username_target, e))
 | 
			
		||||
        return ExitCodes.COULD_NOT_MATCH_USERNAME
 | 
			
		||||
 | 
			
		||||
    if arguments.insert_mode:
 | 
			
		||||
        qute_command('mode-enter insert')
 | 
			
		||||
 | 
			
		||||
    return ExitCodes.SUCCESS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    arguments = argument_parser.parse_args()
 | 
			
		||||
    sys.exit(main(arguments))
 | 
			
		||||
							
								
								
									
										62
									
								
								ranger/commands.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ranger/commands.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,62 @@
 | 
			
		||||
# This is a sample commands.py.  You can add your own commands here.
 | 
			
		||||
#
 | 
			
		||||
# Please refer to commands_full.py for all the default commands and a complete
 | 
			
		||||
# documentation.  Do NOT add them all here, or you may end up with defunct
 | 
			
		||||
# commands when upgrading ranger.
 | 
			
		||||
 | 
			
		||||
# A simple command for demonstration purposes follows.
 | 
			
		||||
# -----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
from __future__ import (absolute_import, division, print_function)
 | 
			
		||||
 | 
			
		||||
# You can import any python module as needed.
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
# You always need to import ranger.api.commands here to get the Command class:
 | 
			
		||||
from ranger.api.commands import Command
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Any class that is a subclass of "Command" will be integrated into ranger as a
 | 
			
		||||
# command.  Try typing ":my_edit<ENTER>" in ranger!
 | 
			
		||||
class my_edit(Command):
 | 
			
		||||
    # The so-called doc-string of the class will be visible in the built-in
 | 
			
		||||
    # help that is accessible by typing "?c" inside ranger.
 | 
			
		||||
    """:my_edit <filename>
 | 
			
		||||
 | 
			
		||||
    A sample command for demonstration purposes that opens a file in an editor.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    # The execute method is called when you run this command in ranger.
 | 
			
		||||
    def execute(self):
 | 
			
		||||
        # self.arg(1) is the first (space-separated) argument to the function.
 | 
			
		||||
        # This way you can write ":my_edit somefilename<ENTER>".
 | 
			
		||||
        if self.arg(1):
 | 
			
		||||
            # self.rest(1) contains self.arg(1) and everything that follows
 | 
			
		||||
            target_filename = self.rest(1)
 | 
			
		||||
        else:
 | 
			
		||||
            # self.fm is a ranger.core.filemanager.FileManager object and gives
 | 
			
		||||
            # you access to internals of ranger.
 | 
			
		||||
            # self.fm.thisfile is a ranger.container.file.File object and is a
 | 
			
		||||
            # reference to the currently selected file.
 | 
			
		||||
            target_filename = self.fm.thisfile.path
 | 
			
		||||
 | 
			
		||||
        # This is a generic function to print text in ranger.
 | 
			
		||||
        self.fm.notify("Let's edit the file " + target_filename + "!")
 | 
			
		||||
 | 
			
		||||
        # Using bad=True in fm.notify allows you to print error messages:
 | 
			
		||||
        if not os.path.exists(target_filename):
 | 
			
		||||
            self.fm.notify("The given file does not exist!", bad=True)
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        # This executes a function from ranger.core.acitons, a module with a
 | 
			
		||||
        # variety of subroutines that can help you construct commands.
 | 
			
		||||
        # Check out the source, or run "pydoc ranger.core.actions" for a list.
 | 
			
		||||
        self.fm.edit_file(target_filename)
 | 
			
		||||
 | 
			
		||||
    # The tab method is called when you press tab, and should return a list of
 | 
			
		||||
    # suggestions that the user will tab through.
 | 
			
		||||
    # tabnum is 1 for <TAB> and -1 for <S-TAB> by default
 | 
			
		||||
    def tab(self, tabnum):
 | 
			
		||||
        # This is a generic tab-completion function that iterates through the
 | 
			
		||||
        # content of the current directory.
 | 
			
		||||
        return self._tab_directory_content()
 | 
			
		||||
							
								
								
									
										1999
									
								
								ranger/commands_full.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1999
									
								
								ranger/commands_full.py
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										759
									
								
								ranger/rc.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										759
									
								
								ranger/rc.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,759 @@
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# This file contains the default startup commands for ranger.
 | 
			
		||||
# To change them, it is recommended to create either /etc/ranger/rc.conf
 | 
			
		||||
# (system-wide) or ~/.config/ranger/rc.conf (per user) and add your custom
 | 
			
		||||
# commands there.
 | 
			
		||||
#
 | 
			
		||||
# If you copy this whole file there, you may want to set the environment
 | 
			
		||||
# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice.
 | 
			
		||||
#
 | 
			
		||||
# The purpose of this file is mainly to define keybindings and settings.
 | 
			
		||||
# For running more complex python code, please create a plugin in "plugins/" or
 | 
			
		||||
# a command in "commands.py".
 | 
			
		||||
#
 | 
			
		||||
# Each line is a command that will be run before the user interface
 | 
			
		||||
# is initialized.  As a result, you can not use commands which rely
 | 
			
		||||
# on the UI such as :delete or :mark.
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Options
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
# Which viewmode should be used?  Possible values are:
 | 
			
		||||
#     miller: Use miller columns which show multiple levels of the hierarchy
 | 
			
		||||
#     multipane: Midnight-commander like multipane view showing all tabs next
 | 
			
		||||
#                to each other
 | 
			
		||||
set viewmode miller
 | 
			
		||||
 | 
			
		||||
# How many columns are there, and what are their relative widths?
 | 
			
		||||
set column_ratios 1,3,4
 | 
			
		||||
 | 
			
		||||
# Which files should be hidden? (regular expression)
 | 
			
		||||
set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$
 | 
			
		||||
 | 
			
		||||
# Show hidden files? You can toggle this by typing 'zh'
 | 
			
		||||
set show_hidden false
 | 
			
		||||
 | 
			
		||||
# Ask for a confirmation when running the "delete" command?
 | 
			
		||||
# Valid values are "always", "never", "multiple" (default)
 | 
			
		||||
# With "multiple", ranger will ask only if you delete multiple files at once.
 | 
			
		||||
set confirm_on_delete multiple
 | 
			
		||||
 | 
			
		||||
# Use non-default path for file preview script?
 | 
			
		||||
# ranger ships with scope.sh, a script that calls external programs (see
 | 
			
		||||
# README.md for dependencies) to preview images, archives, etc.
 | 
			
		||||
#set preview_script ~/.config/ranger/scope.sh
 | 
			
		||||
 | 
			
		||||
# Use the external preview script or display simple plain text or image previews?
 | 
			
		||||
set use_preview_script true
 | 
			
		||||
 | 
			
		||||
# Automatically count files in the directory, even before entering them?
 | 
			
		||||
set automatically_count_files true
 | 
			
		||||
 | 
			
		||||
# Open all images in this directory when running certain image viewers
 | 
			
		||||
# like feh or sxiv?  You can still open selected files by marking them.
 | 
			
		||||
set open_all_images true
 | 
			
		||||
 | 
			
		||||
# Be aware of version control systems and display information.
 | 
			
		||||
set vcs_aware false
 | 
			
		||||
 | 
			
		||||
# State of the four backends git, hg, bzr, svn. The possible states are
 | 
			
		||||
# disabled, local (only show local info), enabled (show local and remote
 | 
			
		||||
# information).
 | 
			
		||||
set vcs_backend_git enabled
 | 
			
		||||
set vcs_backend_hg disabled
 | 
			
		||||
set vcs_backend_bzr disabled
 | 
			
		||||
set vcs_backend_svn disabled
 | 
			
		||||
 | 
			
		||||
# Truncate the long commit messages to this length when shown in the statusbar.
 | 
			
		||||
set vcs_msg_length 50
 | 
			
		||||
 | 
			
		||||
# Use one of the supported image preview protocols
 | 
			
		||||
set preview_images true
 | 
			
		||||
 | 
			
		||||
# Set the preview image method. Supported methods:
 | 
			
		||||
#
 | 
			
		||||
# * w3m (default):
 | 
			
		||||
#   Preview images in full color with the external command "w3mimgpreview"?
 | 
			
		||||
#   This requires the console web browser "w3m" and a supported terminal.
 | 
			
		||||
#   It has been successfully tested with "xterm" and "urxvt" without tmux.
 | 
			
		||||
#
 | 
			
		||||
# * iterm2:
 | 
			
		||||
#   Preview images in full color using iTerm2 image previews
 | 
			
		||||
#   (http://iterm2.com/images.html). This requires using iTerm2 compiled
 | 
			
		||||
#   with image preview support.
 | 
			
		||||
#
 | 
			
		||||
#   This feature relies on the dimensions of the terminal's font.  By default, a
 | 
			
		||||
#   width of 8 and height of 11 are used.  To use other values, set the options
 | 
			
		||||
#   iterm2_font_width and iterm2_font_height to the desired values.
 | 
			
		||||
#
 | 
			
		||||
# * terminology:
 | 
			
		||||
#   Previews images in full color in the terminology terminal emulator.
 | 
			
		||||
#   Supports a wide variety of formats, even vector graphics like svg.
 | 
			
		||||
#
 | 
			
		||||
# * urxvt:
 | 
			
		||||
#   Preview images in full color using urxvt image backgrounds. This
 | 
			
		||||
#   requires using urxvt compiled with pixbuf support.
 | 
			
		||||
#
 | 
			
		||||
# * urxvt-full:
 | 
			
		||||
#   The same as urxvt but utilizing not only the preview pane but the
 | 
			
		||||
#   whole terminal window.
 | 
			
		||||
#
 | 
			
		||||
# * kitty:
 | 
			
		||||
#   Preview images in full color using kitty image protocol.
 | 
			
		||||
#   Requires python PIL or pillow library.
 | 
			
		||||
#   If ranger does not share the local filesystem with kitty
 | 
			
		||||
#   the transfer method is changed to encode the whole image;
 | 
			
		||||
#   while slower, this allows remote previews,
 | 
			
		||||
#   for example during an ssh session.
 | 
			
		||||
#   Tmux is unsupported.
 | 
			
		||||
#
 | 
			
		||||
# * ueberzug:
 | 
			
		||||
#   Preview images in full color with the external command "ueberzug".
 | 
			
		||||
#   Images are shown by using a child window.
 | 
			
		||||
#   Only for users who run X11 in GNU/Linux.
 | 
			
		||||
set preview_images_method ueberzug
 | 
			
		||||
 | 
			
		||||
# Delay in seconds before displaying an image with the w3m method.
 | 
			
		||||
# Increase it in case of experiencing display corruption.
 | 
			
		||||
set w3m_delay 0.02
 | 
			
		||||
 | 
			
		||||
# Manually adjust the w3mimg offset when using a terminal which needs this
 | 
			
		||||
set w3m_offset 0
 | 
			
		||||
 | 
			
		||||
# Default iTerm2 font size (see: preview_images_method: iterm2)
 | 
			
		||||
set iterm2_font_width 8
 | 
			
		||||
set iterm2_font_height 11
 | 
			
		||||
 | 
			
		||||
# Use a unicode "..." character to mark cut-off filenames?
 | 
			
		||||
set unicode_ellipsis false
 | 
			
		||||
 | 
			
		||||
# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic).
 | 
			
		||||
# Requires the python-bidi pip package
 | 
			
		||||
set bidi_support false
 | 
			
		||||
 | 
			
		||||
# Show dotfiles in the bookmark preview box?
 | 
			
		||||
set show_hidden_bookmarks true
 | 
			
		||||
 | 
			
		||||
# Which colorscheme to use?  These colorschemes are available by default:
 | 
			
		||||
# default, jungle, snow, solarized
 | 
			
		||||
set colorscheme default
 | 
			
		||||
 | 
			
		||||
# Preview files on the rightmost column?
 | 
			
		||||
# And collapse (shrink) the last column if there is nothing to preview?
 | 
			
		||||
set preview_files true
 | 
			
		||||
set preview_directories true
 | 
			
		||||
set collapse_preview true
 | 
			
		||||
 | 
			
		||||
# Wrap long lines in plain text previews?
 | 
			
		||||
set wrap_plaintext_previews false
 | 
			
		||||
 | 
			
		||||
# Save the console history on exit?
 | 
			
		||||
set save_console_history true
 | 
			
		||||
 | 
			
		||||
# Draw the status bar on top of the browser window (default: bottom)
 | 
			
		||||
set status_bar_on_top false
 | 
			
		||||
 | 
			
		||||
# Draw a progress bar in the status bar which displays the average state of all
 | 
			
		||||
# currently running tasks which support progress bars?
 | 
			
		||||
set draw_progress_bar_in_status_bar true
 | 
			
		||||
 | 
			
		||||
# Draw borders around columns? (separators, outline, both, or none)
 | 
			
		||||
# Separators are vertical lines between columns.
 | 
			
		||||
# Outline draws a box around all the columns.
 | 
			
		||||
# Both combines the two.
 | 
			
		||||
set draw_borders none
 | 
			
		||||
 | 
			
		||||
# Display the directory name in tabs?
 | 
			
		||||
set dirname_in_tabs false
 | 
			
		||||
 | 
			
		||||
# Enable the mouse support?
 | 
			
		||||
set mouse_enabled true
 | 
			
		||||
 | 
			
		||||
# Display the file size in the main column or status bar?
 | 
			
		||||
set display_size_in_main_column true
 | 
			
		||||
set display_size_in_status_bar true
 | 
			
		||||
 | 
			
		||||
# Display the free disk space in the status bar?
 | 
			
		||||
set display_free_space_in_status_bar true
 | 
			
		||||
 | 
			
		||||
# Display files tags in all columns or only in main column?
 | 
			
		||||
set display_tags_in_all_columns true
 | 
			
		||||
 | 
			
		||||
# Set a title for the window? Updates both `WM_NAME` and `WM_ICON_NAME`
 | 
			
		||||
set update_title false
 | 
			
		||||
 | 
			
		||||
# Set the tmux/screen window-name to "ranger"?
 | 
			
		||||
set update_tmux_title true
 | 
			
		||||
 | 
			
		||||
# Shorten the title if it gets long?  The number defines how many
 | 
			
		||||
# directories are displayed at once, 0 turns off this feature.
 | 
			
		||||
set shorten_title 3
 | 
			
		||||
 | 
			
		||||
# Show hostname in titlebar?
 | 
			
		||||
set hostname_in_titlebar true
 | 
			
		||||
 | 
			
		||||
# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
 | 
			
		||||
set tilde_in_titlebar false
 | 
			
		||||
 | 
			
		||||
# How many directory-changes or console-commands should be kept in history?
 | 
			
		||||
set max_history_size 20
 | 
			
		||||
set max_console_history_size 50
 | 
			
		||||
 | 
			
		||||
# Try to keep so much space between the top/bottom border when scrolling:
 | 
			
		||||
set scroll_offset 8
 | 
			
		||||
 | 
			
		||||
# Flush the input after each key hit?  (Noticeable when ranger lags)
 | 
			
		||||
set flushinput true
 | 
			
		||||
 | 
			
		||||
# Padding on the right when there's no preview?
 | 
			
		||||
# This allows you to click into the space to run the file.
 | 
			
		||||
set padding_right true
 | 
			
		||||
 | 
			
		||||
# Save bookmarks (used with mX and `X) instantly?
 | 
			
		||||
# This helps to synchronize bookmarks between multiple ranger
 | 
			
		||||
# instances but leads to *slight* performance loss.
 | 
			
		||||
# When false, bookmarks are saved when ranger is exited.
 | 
			
		||||
set autosave_bookmarks true
 | 
			
		||||
 | 
			
		||||
# Save the "`" bookmark to disk.  This can be used to switch to the last
 | 
			
		||||
# directory by typing "``".
 | 
			
		||||
set save_backtick_bookmark true
 | 
			
		||||
 | 
			
		||||
# You can display the "real" cumulative size of directories by using the
 | 
			
		||||
# command :get_cumulative_size or typing "dc".  The size is expensive to
 | 
			
		||||
# calculate and will not be updated automatically.  You can choose
 | 
			
		||||
# to update it automatically though by turning on this option:
 | 
			
		||||
set autoupdate_cumulative_size false
 | 
			
		||||
 | 
			
		||||
# Turning this on makes sense for screen readers:
 | 
			
		||||
set show_cursor false
 | 
			
		||||
 | 
			
		||||
# One of: size, natural, basename, atime, ctime, mtime, type, random
 | 
			
		||||
set sort natural
 | 
			
		||||
 | 
			
		||||
# Additional sorting options
 | 
			
		||||
set sort_reverse false
 | 
			
		||||
set sort_case_insensitive true
 | 
			
		||||
set sort_directories_first true
 | 
			
		||||
set sort_unicode false
 | 
			
		||||
 | 
			
		||||
# Enable this if key combinations with the Alt Key don't work for you.
 | 
			
		||||
# (Especially on xterm)
 | 
			
		||||
set xterm_alt_key false
 | 
			
		||||
 | 
			
		||||
# Whether to include bookmarks in cd command
 | 
			
		||||
set cd_bookmarks true
 | 
			
		||||
 | 
			
		||||
# Changes case sensitivity for the cd command tab completion
 | 
			
		||||
set cd_tab_case sensitive
 | 
			
		||||
 | 
			
		||||
# Use fuzzy tab completion with the "cd" command. For example,
 | 
			
		||||
# ":cd /u/lo/b<tab>" expands to ":cd /usr/local/bin".
 | 
			
		||||
set cd_tab_fuzzy false
 | 
			
		||||
 | 
			
		||||
# Avoid previewing files larger than this size, in bytes.  Use a value of 0 to
 | 
			
		||||
# disable this feature.
 | 
			
		||||
set preview_max_size 0
 | 
			
		||||
 | 
			
		||||
# The key hint lists up to this size have their sublists expanded.
 | 
			
		||||
# Otherwise the submaps are replaced with "...".
 | 
			
		||||
set hint_collapse_threshold 10
 | 
			
		||||
 | 
			
		||||
# Add the highlighted file to the path in the titlebar
 | 
			
		||||
set show_selection_in_titlebar true
 | 
			
		||||
 | 
			
		||||
# The delay that ranger idly waits for user input, in milliseconds, with a
 | 
			
		||||
# resolution of 100ms.  Lower delay reduces lag between directory updates but
 | 
			
		||||
# increases CPU load.
 | 
			
		||||
set idle_delay 2000
 | 
			
		||||
 | 
			
		||||
# When the metadata manager module looks for metadata, should it only look for
 | 
			
		||||
# a ".metadata.json" file in the current directory, or do a deep search and
 | 
			
		||||
# check all directories above the current one as well?
 | 
			
		||||
set metadata_deep_search false
 | 
			
		||||
 | 
			
		||||
# Clear all existing filters when leaving a directory
 | 
			
		||||
set clear_filters_on_dir_change false
 | 
			
		||||
 | 
			
		||||
# Disable displaying line numbers in main column.
 | 
			
		||||
# Possible values: false, absolute, relative.
 | 
			
		||||
set line_numbers false
 | 
			
		||||
 | 
			
		||||
# When line_numbers=relative show the absolute line number in the
 | 
			
		||||
# current line.
 | 
			
		||||
set relative_current_zero false
 | 
			
		||||
 | 
			
		||||
# Start line numbers from 1 instead of 0
 | 
			
		||||
set one_indexed false
 | 
			
		||||
 | 
			
		||||
# Save tabs on exit
 | 
			
		||||
set save_tabs_on_exit false
 | 
			
		||||
 | 
			
		||||
# Enable scroll wrapping - moving down while on the last item will wrap around to
 | 
			
		||||
# the top and vice versa.
 | 
			
		||||
set wrap_scroll false
 | 
			
		||||
 | 
			
		||||
# Set the global_inode_type_filter to nothing.  Possible options: d, f and l for
 | 
			
		||||
# directories, files and symlinks respectively.
 | 
			
		||||
set global_inode_type_filter
 | 
			
		||||
 | 
			
		||||
# This setting allows to freeze the list of files to save I/O bandwidth.  It
 | 
			
		||||
# should be 'false' during start-up, but you can toggle it by pressing F.
 | 
			
		||||
set freeze_files false
 | 
			
		||||
 | 
			
		||||
# Print file sizes in bytes instead of the default human-readable format.
 | 
			
		||||
set size_in_bytes false
 | 
			
		||||
 | 
			
		||||
# Warn at startup if RANGER_LEVEL env var is greater than 0, in other words
 | 
			
		||||
# give a warning when you nest ranger in a subshell started by ranger.
 | 
			
		||||
# Special value "error" makes the warning more visible.
 | 
			
		||||
set nested_ranger_warning true
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Local Options
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# You can set local options that only affect a single directory.
 | 
			
		||||
 | 
			
		||||
# Examples:
 | 
			
		||||
# setlocal path=~/downloads sort mtime
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Command Aliases in the Console
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
alias e     edit
 | 
			
		||||
alias q     quit
 | 
			
		||||
alias q!    quit!
 | 
			
		||||
alias qa    quitall
 | 
			
		||||
alias qa!   quitall!
 | 
			
		||||
alias qall  quitall
 | 
			
		||||
alias qall! quitall!
 | 
			
		||||
alias setl  setlocal
 | 
			
		||||
 | 
			
		||||
alias filter     scout -prts
 | 
			
		||||
alias hide       scout -prtsv
 | 
			
		||||
alias find       scout -aets
 | 
			
		||||
alias mark       scout -mr
 | 
			
		||||
alias unmark     scout -Mr
 | 
			
		||||
alias search     scout -rs
 | 
			
		||||
alias search_inc scout -rts
 | 
			
		||||
alias travel     scout -aefklst
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Define keys for the browser
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
# Basic
 | 
			
		||||
map     Q quitall
 | 
			
		||||
map     q quit
 | 
			
		||||
copymap q ZZ ZQ
 | 
			
		||||
 | 
			
		||||
map R     reload_cwd
 | 
			
		||||
map F     set freeze_files!
 | 
			
		||||
map <C-r> reset
 | 
			
		||||
map <C-l> redraw_window
 | 
			
		||||
map <C-c> abort
 | 
			
		||||
map <esc> change_mode normal
 | 
			
		||||
map ~ set viewmode!
 | 
			
		||||
 | 
			
		||||
map i display_file
 | 
			
		||||
map <A-j> scroll_preview 1
 | 
			
		||||
map <A-k> scroll_preview -1
 | 
			
		||||
map ? help
 | 
			
		||||
map W display_log
 | 
			
		||||
map w taskview_open
 | 
			
		||||
map S shell $SHELL
 | 
			
		||||
 | 
			
		||||
map :  console
 | 
			
		||||
map ;  console
 | 
			
		||||
map !  console shell%space
 | 
			
		||||
map @  console -p6 shell  %%s
 | 
			
		||||
map #  console shell -p%space
 | 
			
		||||
map s  console shell%space
 | 
			
		||||
map r  chain draw_possible_programs; console open_with%space
 | 
			
		||||
map f  console find%space
 | 
			
		||||
map cd console cd%space
 | 
			
		||||
 | 
			
		||||
map <C-p> chain console; eval fm.ui.console.history_move(-1)
 | 
			
		||||
 | 
			
		||||
# Change the line mode
 | 
			
		||||
map Mf linemode filename
 | 
			
		||||
map Mi linemode fileinfo
 | 
			
		||||
map Mm linemode mtime
 | 
			
		||||
map Mh linemode humanreadablemtime
 | 
			
		||||
map Mp linemode permissions
 | 
			
		||||
map Ms linemode sizemtime
 | 
			
		||||
map MH linemode sizehumanreadablemtime
 | 
			
		||||
map Mt linemode metatitle
 | 
			
		||||
 | 
			
		||||
# Tagging / Marking
 | 
			
		||||
map t       tag_toggle
 | 
			
		||||
map ut      tag_remove
 | 
			
		||||
map "<any>  tag_toggle tag=%any
 | 
			
		||||
map <Space> mark_files toggle=True
 | 
			
		||||
map v       mark_files all=True toggle=True
 | 
			
		||||
map uv      mark_files all=True val=False
 | 
			
		||||
map V       toggle_visual_mode
 | 
			
		||||
map uV      toggle_visual_mode reverse=True
 | 
			
		||||
 | 
			
		||||
# For the nostalgics: Midnight Commander bindings
 | 
			
		||||
map <F1> help
 | 
			
		||||
map <F2> rename_append
 | 
			
		||||
map <F3> display_file
 | 
			
		||||
map <F4> edit
 | 
			
		||||
map <F5> copy
 | 
			
		||||
map <F6> cut
 | 
			
		||||
map <F7> console mkdir%space
 | 
			
		||||
map <F8> console delete
 | 
			
		||||
#map <F8> console trash
 | 
			
		||||
map <F10> exit
 | 
			
		||||
 | 
			
		||||
# In case you work on a keyboard with dvorak layout
 | 
			
		||||
map <UP>       move up=1
 | 
			
		||||
map <DOWN>     move down=1
 | 
			
		||||
map <LEFT>     move left=1
 | 
			
		||||
map <RIGHT>    move right=1
 | 
			
		||||
map <HOME>     move to=0
 | 
			
		||||
map <END>      move to=-1
 | 
			
		||||
map <PAGEDOWN> move down=1   pages=True
 | 
			
		||||
map <PAGEUP>   move up=1     pages=True
 | 
			
		||||
map <CR>       move right=1
 | 
			
		||||
#map <DELETE>   console delete
 | 
			
		||||
map <INSERT>   console touch%space
 | 
			
		||||
 | 
			
		||||
# VIM-like
 | 
			
		||||
copymap <UP>       k
 | 
			
		||||
copymap <DOWN>     j
 | 
			
		||||
copymap <LEFT>     h
 | 
			
		||||
copymap <RIGHT>    l
 | 
			
		||||
copymap <HOME>     gg
 | 
			
		||||
copymap <END>      G
 | 
			
		||||
copymap <PAGEDOWN> <C-F>
 | 
			
		||||
copymap <PAGEUP>   <C-B>
 | 
			
		||||
 | 
			
		||||
map J  move down=0.5  pages=True
 | 
			
		||||
map K  move up=0.5    pages=True
 | 
			
		||||
copymap J <C-D>
 | 
			
		||||
copymap K <C-U>
 | 
			
		||||
 | 
			
		||||
# Jumping around
 | 
			
		||||
map H     history_go -1
 | 
			
		||||
map L     history_go 1
 | 
			
		||||
map ]     move_parent 1
 | 
			
		||||
map [     move_parent -1
 | 
			
		||||
map }     traverse
 | 
			
		||||
map {     traverse_backwards
 | 
			
		||||
map )     jump_non
 | 
			
		||||
 | 
			
		||||
map gh cd ~
 | 
			
		||||
map ge cd /etc
 | 
			
		||||
map gu cd /usr
 | 
			
		||||
map gd cd /dev
 | 
			
		||||
map gl cd -r .
 | 
			
		||||
map gL cd -r %f
 | 
			
		||||
map go cd /opt
 | 
			
		||||
map gv cd /var
 | 
			
		||||
map gm cd /media
 | 
			
		||||
map gi eval fm.cd('/run/media/' + os.getenv('USER'))
 | 
			
		||||
map gM cd /mnt
 | 
			
		||||
map gs cd /srv
 | 
			
		||||
map gp cd /tmp
 | 
			
		||||
map gr cd /
 | 
			
		||||
map gR eval fm.cd(ranger.RANGERDIR)
 | 
			
		||||
map g/ cd /
 | 
			
		||||
map g? cd /usr/share/doc/ranger
 | 
			
		||||
 | 
			
		||||
# External Programs
 | 
			
		||||
map E  edit
 | 
			
		||||
map du shell -p du --max-depth=1 -h --apparent-size
 | 
			
		||||
map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh
 | 
			
		||||
map yp yank path
 | 
			
		||||
map yd yank dir
 | 
			
		||||
map yn yank name
 | 
			
		||||
map y. yank name_without_extension
 | 
			
		||||
 | 
			
		||||
# Filesystem Operations
 | 
			
		||||
map =  chmod
 | 
			
		||||
 | 
			
		||||
map cw console rename%space
 | 
			
		||||
map a  rename_append
 | 
			
		||||
map A  eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"))
 | 
			
		||||
map I  eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7)
 | 
			
		||||
 | 
			
		||||
map pp paste
 | 
			
		||||
map po paste overwrite=True
 | 
			
		||||
map pP paste append=True
 | 
			
		||||
map pO paste overwrite=True append=True
 | 
			
		||||
map pl paste_symlink relative=False
 | 
			
		||||
map pL paste_symlink relative=True
 | 
			
		||||
map phl paste_hardlink
 | 
			
		||||
map pht paste_hardlinked_subtree
 | 
			
		||||
map pd console paste dest=
 | 
			
		||||
map p`<any> paste dest=%any_path
 | 
			
		||||
map p'<any> paste dest=%any_path
 | 
			
		||||
 | 
			
		||||
map dD console delete
 | 
			
		||||
map dT console trash
 | 
			
		||||
 | 
			
		||||
map dd cut
 | 
			
		||||
map ud uncut
 | 
			
		||||
map da cut mode=add
 | 
			
		||||
map dr cut mode=remove
 | 
			
		||||
map dt cut mode=toggle
 | 
			
		||||
 | 
			
		||||
map yy copy
 | 
			
		||||
map uy uncut
 | 
			
		||||
map ya copy mode=add
 | 
			
		||||
map yr copy mode=remove
 | 
			
		||||
map yt copy mode=toggle
 | 
			
		||||
 | 
			
		||||
# Temporary workarounds
 | 
			
		||||
map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier)
 | 
			
		||||
map dG  eval fm.cut(dirarg=dict(to=-1), narg=quantifier)
 | 
			
		||||
map dj  eval fm.cut(dirarg=dict(down=1), narg=quantifier)
 | 
			
		||||
map dk  eval fm.cut(dirarg=dict(up=1), narg=quantifier)
 | 
			
		||||
map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier)
 | 
			
		||||
map yG  eval fm.copy(dirarg=dict(to=-1), narg=quantifier)
 | 
			
		||||
map yj  eval fm.copy(dirarg=dict(down=1), narg=quantifier)
 | 
			
		||||
map yk  eval fm.copy(dirarg=dict(up=1), narg=quantifier)
 | 
			
		||||
 | 
			
		||||
# Searching
 | 
			
		||||
map /  console search%space
 | 
			
		||||
map n  search_next
 | 
			
		||||
map N  search_next forward=False
 | 
			
		||||
map ct search_next order=tag
 | 
			
		||||
map cs search_next order=size
 | 
			
		||||
map ci search_next order=mimetype
 | 
			
		||||
map cc search_next order=ctime
 | 
			
		||||
map cm search_next order=mtime
 | 
			
		||||
map ca search_next order=atime
 | 
			
		||||
 | 
			
		||||
# Tabs
 | 
			
		||||
map <C-n>     tab_new
 | 
			
		||||
map <C-w>     tab_close
 | 
			
		||||
map <TAB>     tab_move 1
 | 
			
		||||
map <S-TAB>   tab_move -1
 | 
			
		||||
map <A-Right> tab_move 1
 | 
			
		||||
map <A-Left>  tab_move -1
 | 
			
		||||
map gt        tab_move 1
 | 
			
		||||
map gT        tab_move -1
 | 
			
		||||
map gn        tab_new
 | 
			
		||||
map gc        tab_close
 | 
			
		||||
map uq        tab_restore
 | 
			
		||||
map <a-1>     tab_open 1
 | 
			
		||||
map <a-2>     tab_open 2
 | 
			
		||||
map <a-3>     tab_open 3
 | 
			
		||||
map <a-4>     tab_open 4
 | 
			
		||||
map <a-5>     tab_open 5
 | 
			
		||||
map <a-6>     tab_open 6
 | 
			
		||||
map <a-7>     tab_open 7
 | 
			
		||||
map <a-8>     tab_open 8
 | 
			
		||||
map <a-9>     tab_open 9
 | 
			
		||||
map <a-r>     tab_shift 1
 | 
			
		||||
map <a-l>     tab_shift -1
 | 
			
		||||
 | 
			
		||||
# Sorting
 | 
			
		||||
map or set sort_reverse!
 | 
			
		||||
map oz set sort=random
 | 
			
		||||
map os chain set sort=size;      set sort_reverse=False
 | 
			
		||||
map ob chain set sort=basename;  set sort_reverse=False
 | 
			
		||||
map on chain set sort=natural;   set sort_reverse=False
 | 
			
		||||
map om chain set sort=mtime;     set sort_reverse=False
 | 
			
		||||
map oc chain set sort=ctime;     set sort_reverse=False
 | 
			
		||||
map oa chain set sort=atime;     set sort_reverse=False
 | 
			
		||||
map ot chain set sort=type;      set sort_reverse=False
 | 
			
		||||
map oe chain set sort=extension; set sort_reverse=False
 | 
			
		||||
 | 
			
		||||
map oS chain set sort=size;      set sort_reverse=True
 | 
			
		||||
map oB chain set sort=basename;  set sort_reverse=True
 | 
			
		||||
map oN chain set sort=natural;   set sort_reverse=True
 | 
			
		||||
map oM chain set sort=mtime;     set sort_reverse=True
 | 
			
		||||
map oC chain set sort=ctime;     set sort_reverse=True
 | 
			
		||||
map oA chain set sort=atime;     set sort_reverse=True
 | 
			
		||||
map oT chain set sort=type;      set sort_reverse=True
 | 
			
		||||
map oE chain set sort=extension; set sort_reverse=True
 | 
			
		||||
 | 
			
		||||
map dc get_cumulative_size
 | 
			
		||||
 | 
			
		||||
# Settings
 | 
			
		||||
map zc    set collapse_preview!
 | 
			
		||||
map zd    set sort_directories_first!
 | 
			
		||||
map zh    set show_hidden!
 | 
			
		||||
map <C-h> set show_hidden!
 | 
			
		||||
copymap <C-h> <backspace>
 | 
			
		||||
copymap <backspace> <backspace2>
 | 
			
		||||
map zI    set flushinput!
 | 
			
		||||
map zi    set preview_images!
 | 
			
		||||
map zm    set mouse_enabled!
 | 
			
		||||
map zp    set preview_files!
 | 
			
		||||
map zP    set preview_directories!
 | 
			
		||||
map zs    set sort_case_insensitive!
 | 
			
		||||
map zu    set autoupdate_cumulative_size!
 | 
			
		||||
map zv    set use_preview_script!
 | 
			
		||||
map zf    console filter%space
 | 
			
		||||
copymap zf zz
 | 
			
		||||
 | 
			
		||||
# Filter stack
 | 
			
		||||
map .d filter_stack add type d
 | 
			
		||||
map .f filter_stack add type f
 | 
			
		||||
map .l filter_stack add type l
 | 
			
		||||
map .m console filter_stack add mime%space
 | 
			
		||||
map .n console filter_stack add name%space
 | 
			
		||||
map .# console filter_stack add hash%space
 | 
			
		||||
map ." filter_stack add duplicate
 | 
			
		||||
map .' filter_stack add unique
 | 
			
		||||
map .| filter_stack add or
 | 
			
		||||
map .& filter_stack add and
 | 
			
		||||
map .! filter_stack add not
 | 
			
		||||
map .r filter_stack rotate
 | 
			
		||||
map .c filter_stack clear
 | 
			
		||||
map .* filter_stack decompose
 | 
			
		||||
map .p filter_stack pop
 | 
			
		||||
map .. filter_stack show
 | 
			
		||||
 | 
			
		||||
# Bookmarks
 | 
			
		||||
map `<any>  enter_bookmark %any
 | 
			
		||||
map '<any>  enter_bookmark %any
 | 
			
		||||
map m<any>  set_bookmark %any
 | 
			
		||||
map um<any> unset_bookmark %any
 | 
			
		||||
 | 
			
		||||
map m<bg>   draw_bookmarks
 | 
			
		||||
copymap m<bg>  um<bg> `<bg> '<bg> p`<bg> p'<bg>
 | 
			
		||||
 | 
			
		||||
# Generate all the chmod bindings with some python help:
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map +{0}  shell -f chmod +{0} %s".format(arg))
 | 
			
		||||
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg))
 | 
			
		||||
eval for arg in "rwxXst": cmd("map -{0}  shell -f chmod -{0} %s".format(arg))
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Define keys for the console
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# Note: Unmapped keys are passed directly to the console.
 | 
			
		||||
 | 
			
		||||
# Basic
 | 
			
		||||
cmap <tab>   eval fm.ui.console.tab()
 | 
			
		||||
cmap <s-tab> eval fm.ui.console.tab(-1)
 | 
			
		||||
cmap <ESC>   eval fm.ui.console.close()
 | 
			
		||||
cmap <CR>    eval fm.ui.console.execute()
 | 
			
		||||
cmap <C-l>   redraw_window
 | 
			
		||||
 | 
			
		||||
copycmap <ESC> <C-c>
 | 
			
		||||
copycmap <CR>  <C-j>
 | 
			
		||||
 | 
			
		||||
# Move around
 | 
			
		||||
cmap <up>    eval fm.ui.console.history_move(-1)
 | 
			
		||||
cmap <down>  eval fm.ui.console.history_move(1)
 | 
			
		||||
cmap <left>  eval fm.ui.console.move(left=1)
 | 
			
		||||
cmap <right> eval fm.ui.console.move(right=1)
 | 
			
		||||
cmap <home>  eval fm.ui.console.move(right=0, absolute=True)
 | 
			
		||||
cmap <end>   eval fm.ui.console.move(right=-1, absolute=True)
 | 
			
		||||
cmap <a-b> eval fm.ui.console.move_word(left=1)
 | 
			
		||||
cmap <a-f> eval fm.ui.console.move_word(right=1)
 | 
			
		||||
 | 
			
		||||
copycmap <a-b> <a-left>
 | 
			
		||||
copycmap <a-f> <a-right>
 | 
			
		||||
 | 
			
		||||
# Line Editing
 | 
			
		||||
cmap <backspace>  eval fm.ui.console.delete(-1)
 | 
			
		||||
cmap <delete>     eval fm.ui.console.delete(0)
 | 
			
		||||
cmap <C-w>        eval fm.ui.console.delete_word()
 | 
			
		||||
cmap <A-d>        eval fm.ui.console.delete_word(backward=False)
 | 
			
		||||
cmap <C-k>        eval fm.ui.console.delete_rest(1)
 | 
			
		||||
cmap <C-u>        eval fm.ui.console.delete_rest(-1)
 | 
			
		||||
cmap <C-y>        eval fm.ui.console.paste()
 | 
			
		||||
 | 
			
		||||
# And of course the emacs way
 | 
			
		||||
copycmap <ESC>       <C-g>
 | 
			
		||||
copycmap <up>        <C-p>
 | 
			
		||||
copycmap <down>      <C-n>
 | 
			
		||||
copycmap <left>      <C-b>
 | 
			
		||||
copycmap <right>     <C-f>
 | 
			
		||||
copycmap <home>      <C-a>
 | 
			
		||||
copycmap <end>       <C-e>
 | 
			
		||||
copycmap <delete>    <C-d>
 | 
			
		||||
copycmap <backspace> <C-h>
 | 
			
		||||
 | 
			
		||||
# Note: There are multiple ways to express backspaces.  <backspace> (code 263)
 | 
			
		||||
# and <backspace2> (code 127).  To be sure, use both.
 | 
			
		||||
copycmap <backspace> <backspace2>
 | 
			
		||||
 | 
			
		||||
# This special expression allows typing in numerals:
 | 
			
		||||
cmap <allow_quantifiers> false
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Pager Keybindings
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
# Movement
 | 
			
		||||
pmap  <down>      pager_move  down=1
 | 
			
		||||
pmap  <up>        pager_move  up=1
 | 
			
		||||
pmap  <left>      pager_move  left=4
 | 
			
		||||
pmap  <right>     pager_move  right=4
 | 
			
		||||
pmap  <home>      pager_move  to=0
 | 
			
		||||
pmap  <end>       pager_move  to=-1
 | 
			
		||||
pmap  <pagedown>  pager_move  down=1.0  pages=True
 | 
			
		||||
pmap  <pageup>    pager_move  up=1.0    pages=True
 | 
			
		||||
pmap  <C-d>       pager_move  down=0.5  pages=True
 | 
			
		||||
pmap  <C-u>       pager_move  up=0.5    pages=True
 | 
			
		||||
 | 
			
		||||
copypmap <UP>       k  <C-p>
 | 
			
		||||
copypmap <DOWN>     j  <C-n> <CR>
 | 
			
		||||
copypmap <LEFT>     h
 | 
			
		||||
copypmap <RIGHT>    l
 | 
			
		||||
copypmap <HOME>     g
 | 
			
		||||
copypmap <END>      G
 | 
			
		||||
copypmap <C-d>      d
 | 
			
		||||
copypmap <C-u>      u
 | 
			
		||||
copypmap <PAGEDOWN> n  f  <C-F>  <Space>
 | 
			
		||||
copypmap <PAGEUP>   p  b  <C-B>
 | 
			
		||||
 | 
			
		||||
# Basic
 | 
			
		||||
pmap     <C-l> redraw_window
 | 
			
		||||
pmap     <ESC> pager_close
 | 
			
		||||
copypmap <ESC> q Q i <F3>
 | 
			
		||||
pmap E      edit_file
 | 
			
		||||
 | 
			
		||||
# ===================================================================
 | 
			
		||||
# == Taskview Keybindings
 | 
			
		||||
# ===================================================================
 | 
			
		||||
 | 
			
		||||
# Movement
 | 
			
		||||
tmap <up>        taskview_move up=1
 | 
			
		||||
tmap <down>      taskview_move down=1
 | 
			
		||||
tmap <home>      taskview_move to=0
 | 
			
		||||
tmap <end>       taskview_move to=-1
 | 
			
		||||
tmap <pagedown>  taskview_move down=1.0  pages=True
 | 
			
		||||
tmap <pageup>    taskview_move up=1.0    pages=True
 | 
			
		||||
tmap <C-d>       taskview_move down=0.5  pages=True
 | 
			
		||||
tmap <C-u>       taskview_move up=0.5    pages=True
 | 
			
		||||
 | 
			
		||||
copytmap <UP>       k  <C-p>
 | 
			
		||||
copytmap <DOWN>     j  <C-n> <CR>
 | 
			
		||||
copytmap <HOME>     g
 | 
			
		||||
copytmap <END>      G
 | 
			
		||||
copytmap <C-u>      u
 | 
			
		||||
copytmap <PAGEDOWN> n  f  <C-F>  <Space>
 | 
			
		||||
copytmap <PAGEUP>   p  b  <C-B>
 | 
			
		||||
 | 
			
		||||
# Changing priority and deleting tasks
 | 
			
		||||
tmap J          eval -q fm.ui.taskview.task_move(-1)
 | 
			
		||||
tmap K          eval -q fm.ui.taskview.task_move(0)
 | 
			
		||||
tmap dd         eval -q fm.ui.taskview.task_remove()
 | 
			
		||||
tmap <pagedown> eval -q fm.ui.taskview.task_move(-1)
 | 
			
		||||
tmap <pageup>   eval -q fm.ui.taskview.task_move(0)
 | 
			
		||||
tmap <delete>   eval -q fm.ui.taskview.task_remove()
 | 
			
		||||
 | 
			
		||||
# Basic
 | 
			
		||||
tmap <C-l> redraw_window
 | 
			
		||||
tmap <ESC> taskview_close
 | 
			
		||||
copytmap <ESC> q Q w <C-c>
 | 
			
		||||
							
								
								
									
										291
									
								
								ranger/rifle.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										291
									
								
								ranger/rifle.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,291 @@
 | 
			
		||||
# vim: ft=cfg
 | 
			
		||||
#
 | 
			
		||||
# This is the configuration file of "rifle", ranger's file executor/opener.
 | 
			
		||||
# Each line consists of conditions and a command.  For each line the conditions
 | 
			
		||||
# are checked and if they are met, the respective command is run.
 | 
			
		||||
#
 | 
			
		||||
# Syntax:
 | 
			
		||||
#   <condition1> , <condition2> , ... = command
 | 
			
		||||
#
 | 
			
		||||
# The command can contain these environment variables:
 | 
			
		||||
#   $1-$9 | The n-th selected file
 | 
			
		||||
#   $@    | All selected files
 | 
			
		||||
#
 | 
			
		||||
# If you use the special command "ask", rifle will ask you what program to run.
 | 
			
		||||
#
 | 
			
		||||
# Prefixing a condition with "!" will negate its result.
 | 
			
		||||
# These conditions are currently supported:
 | 
			
		||||
#   match <regexp> | The regexp matches $1
 | 
			
		||||
#   ext <regexp>   | The regexp matches the extension of $1
 | 
			
		||||
#   mime <regexp>  | The regexp matches the mime type of $1
 | 
			
		||||
#   name <regexp>  | The regexp matches the basename of $1
 | 
			
		||||
#   path <regexp>  | The regexp matches the absolute path of $1
 | 
			
		||||
#   has <program>  | The program is installed (i.e. located in $PATH)
 | 
			
		||||
#   env <variable> | The environment variable "variable" is non-empty
 | 
			
		||||
#   file           | $1 is a file
 | 
			
		||||
#   directory      | $1 is a directory
 | 
			
		||||
#   number <n>     | change the number of this command to n
 | 
			
		||||
#   terminal       | stdin, stderr and stdout are connected to a terminal
 | 
			
		||||
#   X              | A graphical environment is available (darwin, Xorg, or Wayland)
 | 
			
		||||
#
 | 
			
		||||
# There are also pseudo-conditions which have a "side effect":
 | 
			
		||||
#   flag <flags>  | Change how the program is run. See below.
 | 
			
		||||
#   label <label> | Assign a label or name to the command so it can
 | 
			
		||||
#                 | be started with :open_with <label> in ranger
 | 
			
		||||
#                 | or `rifle -p <label>` in the standalone executable.
 | 
			
		||||
#   else          | Always true.
 | 
			
		||||
#
 | 
			
		||||
# Flags are single characters which slightly transform the command:
 | 
			
		||||
#   f | Fork the program, make it run in the background.
 | 
			
		||||
#     |   New command = setsid $command >& /dev/null &
 | 
			
		||||
#   r | Execute the command with root permissions
 | 
			
		||||
#     |   New command = sudo $command
 | 
			
		||||
#   t | Run the program in a new terminal.  If $TERMCMD is not defined,
 | 
			
		||||
#     | rifle will attempt to extract it from $TERM.
 | 
			
		||||
#     |   New command = $TERMCMD -e $command
 | 
			
		||||
# Note: The "New command" serves only as an illustration, the exact
 | 
			
		||||
# implementation may differ.
 | 
			
		||||
# Note: When using rifle in ranger, there is an additional flag "c" for
 | 
			
		||||
# only running the current file even if you have marked multiple files.
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Websites
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Rarely installed browsers get higher priority; It is assumed that if you
 | 
			
		||||
# install a rare browser, you probably use it.  Firefox/konqueror/w3m on the
 | 
			
		||||
# other hand are often only installed as fallback browsers.
 | 
			
		||||
ext x?html?, has surf,             X, flag f = surf -- file://"$1"
 | 
			
		||||
ext x?html?, has vimprobable,      X, flag f = vimprobable -- "$@"
 | 
			
		||||
ext x?html?, has vimprobable2,     X, flag f = vimprobable2 -- "$@"
 | 
			
		||||
ext x?html?, has qutebrowser,      X, flag f = qutebrowser -- "$@"
 | 
			
		||||
ext x?html?, has dwb,              X, flag f = dwb -- "$@"
 | 
			
		||||
ext x?html?, has jumanji,          X, flag f = jumanji -- "$@"
 | 
			
		||||
ext x?html?, has luakit,           X, flag f = luakit -- "$@"
 | 
			
		||||
ext x?html?, has uzbl,             X, flag f = uzbl -- "$@"
 | 
			
		||||
ext x?html?, has uzbl-tabbed,      X, flag f = uzbl-tabbed -- "$@"
 | 
			
		||||
ext x?html?, has uzbl-browser,     X, flag f = uzbl-browser -- "$@"
 | 
			
		||||
ext x?html?, has uzbl-core,        X, flag f = uzbl-core -- "$@"
 | 
			
		||||
ext x?html?, has midori,           X, flag f = midori -- "$@"
 | 
			
		||||
ext x?html?, has opera,            X, flag f = opera -- "$@"
 | 
			
		||||
ext x?html?, has firefox,          X, flag f = firefox -- "$@"
 | 
			
		||||
ext x?html?, has seamonkey,        X, flag f = seamonkey -- "$@"
 | 
			
		||||
ext x?html?, has iceweasel,        X, flag f = iceweasel -- "$@"
 | 
			
		||||
ext x?html?, has chromium-browser, X, flag f = chromium-browser -- "$@"
 | 
			
		||||
ext x?html?, has chromium,         X, flag f = chromium -- "$@"
 | 
			
		||||
ext x?html?, has google-chrome,    X, flag f = google-chrome -- "$@"
 | 
			
		||||
ext x?html?, has epiphany,         X, flag f = epiphany -- "$@"
 | 
			
		||||
ext x?html?, has konqueror,        X, flag f = konqueror -- "$@"
 | 
			
		||||
ext x?html?, has elinks,            terminal = elinks "$@"
 | 
			
		||||
ext x?html?, has links2,            terminal = links2 "$@"
 | 
			
		||||
ext x?html?, has links,             terminal = links "$@"
 | 
			
		||||
ext x?html?, has lynx,              terminal = lynx -- "$@"
 | 
			
		||||
ext x?html?, has w3m,               terminal = w3m "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Misc
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Define the "editor" for text files as first action
 | 
			
		||||
mime ^text,  label editor = ${VISUAL:-$EDITOR} -- "$@"
 | 
			
		||||
mime ^text,  label pager  = $PAGER -- "$@"
 | 
			
		||||
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
 | 
			
		||||
!mime ^text, label pager,  ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php = $PAGER -- "$@"
 | 
			
		||||
 | 
			
		||||
ext 1                         = man "$1"
 | 
			
		||||
ext s[wmf]c, has zsnes, X     = zsnes "$1"
 | 
			
		||||
ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1"
 | 
			
		||||
ext nes, has fceux, X         = fceux "$1"
 | 
			
		||||
ext exe, has wine             = wine "$1"
 | 
			
		||||
name ^[mM]akefile$            = make
 | 
			
		||||
 | 
			
		||||
#--------------------------------------------
 | 
			
		||||
# Scripts
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
ext py  = python -- "$1"
 | 
			
		||||
ext pl  = perl -- "$1"
 | 
			
		||||
ext rb  = ruby -- "$1"
 | 
			
		||||
ext js  = node -- "$1"
 | 
			
		||||
ext sh  = sh -- "$1"
 | 
			
		||||
ext php = php -- "$1"
 | 
			
		||||
 | 
			
		||||
#--------------------------------------------
 | 
			
		||||
# Audio without X
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^audio|ogg$, terminal, has mpv      = mpv -- "$@"
 | 
			
		||||
mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@"
 | 
			
		||||
mime ^audio|ogg$, terminal, has mplayer  = mplayer -- "$@"
 | 
			
		||||
ext midi?,        terminal, has wildmidi = wildmidi -- "$@"
 | 
			
		||||
 | 
			
		||||
#--------------------------------------------
 | 
			
		||||
# Video/Audio with a GUI
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^video|^audio, has gmplayer, X, flag f = gmplayer -- "$@"
 | 
			
		||||
mime ^video|^audio, has smplayer, X, flag f = smplayer "$@"
 | 
			
		||||
mime ^video,        has mpv,      X, flag f = mpv -- "$@"
 | 
			
		||||
mime ^video,        has mpv,      X, flag f = mpv --fs -- "$@"
 | 
			
		||||
mime ^video,        has mplayer2, X, flag f = mplayer2 -- "$@"
 | 
			
		||||
mime ^video,        has mplayer2, X, flag f = mplayer2 -fs -- "$@"
 | 
			
		||||
mime ^video,        has mplayer,  X, flag f = mplayer -- "$@"
 | 
			
		||||
mime ^video,        has mplayer,  X, flag f = mplayer -fs -- "$@"
 | 
			
		||||
mime ^video|^audio, has vlc,      X, flag f = vlc -- "$@"
 | 
			
		||||
mime ^video|^audio, has totem,    X, flag f = totem -- "$@"
 | 
			
		||||
mime ^video|^audio, has totem,    X, flag f = totem --fullscreen -- "$@"
 | 
			
		||||
mime ^audio,        has audacity, X, flag f = audacity -- "$@"
 | 
			
		||||
ext aup,            has audacity, X, flag f = audacity -- "$@"
 | 
			
		||||
 | 
			
		||||
#--------------------------------------------
 | 
			
		||||
# Video without X
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^video, terminal, !X, has mpv       = mpv -- "$@"
 | 
			
		||||
mime ^video, terminal, !X, has mplayer2  = mplayer2 -- "$@"
 | 
			
		||||
mime ^video, terminal, !X, has mplayer   = mplayer -- "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Documents
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
ext pdf, has llpp,     X, flag f = llpp "$@"
 | 
			
		||||
ext pdf, has zathura,  X, flag f = zathura -- "$@"
 | 
			
		||||
ext pdf, has mupdf,    X, flag f = mupdf "$@"
 | 
			
		||||
ext pdf, has mupdf-x11,X, flag f = mupdf-x11 "$@"
 | 
			
		||||
ext pdf, has apvlv,    X, flag f = apvlv -- "$@"
 | 
			
		||||
ext pdf, has xpdf,     X, flag f = xpdf -- "$@"
 | 
			
		||||
ext pdf, has evince,   X, flag f = evince -- "$@"
 | 
			
		||||
ext pdf, has atril,    X, flag f = atril -- "$@"
 | 
			
		||||
ext pdf, has okular,   X, flag f = okular -- "$@"
 | 
			
		||||
ext pdf, has epdfview, X, flag f = epdfview -- "$@"
 | 
			
		||||
ext pdf, has qpdfview, X, flag f = qpdfview "$@"
 | 
			
		||||
ext pdf, has open,     X, flag f = open "$@"
 | 
			
		||||
 | 
			
		||||
ext sc,    has sc,                    = sc -- "$@"
 | 
			
		||||
ext docx?, has catdoc,       terminal = catdoc -- "$@" | $PAGER
 | 
			
		||||
 | 
			
		||||
ext                        sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric,    X, flag f = gnumeric -- "$@"
 | 
			
		||||
ext                        sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread,     X, flag f = kspread -- "$@"
 | 
			
		||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@"
 | 
			
		||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice,     X, flag f = soffice "$@"
 | 
			
		||||
ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice,     X, flag f = ooffice "$@"
 | 
			
		||||
 | 
			
		||||
ext djvu, has zathura,X, flag f = zathura -- "$@"
 | 
			
		||||
ext djvu, has evince, X, flag f = evince -- "$@"
 | 
			
		||||
ext djvu, has atril,  X, flag f = atril -- "$@"
 | 
			
		||||
ext djvu, has djview, X, flag f = djview -- "$@"
 | 
			
		||||
 | 
			
		||||
ext epub, has ebook-viewer, X, flag f = ebook-viewer -- "$@"
 | 
			
		||||
ext epub, has zathura,      X, flag f = zathura -- "$@"
 | 
			
		||||
ext epub, has mupdf,        X, flag f = mupdf -- "$@"
 | 
			
		||||
ext mobi, has ebook-viewer, X, flag f = ebook-viewer -- "$@"
 | 
			
		||||
 | 
			
		||||
ext cbr,  has zathura,      X, flag f = zathura -- "$@"
 | 
			
		||||
ext cbz,  has zathura,      X, flag f = zathura -- "$@"
 | 
			
		||||
 | 
			
		||||
ext sla,  has scribus,      X, flag f = scribus -- "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Images
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@"
 | 
			
		||||
mime ^image/svg, has display,  X, flag f = display -- "$@"
 | 
			
		||||
 | 
			
		||||
mime ^image, has imv,       X, flag f = imv -- "$@"
 | 
			
		||||
mime ^image, has pqiv,      X, flag f = pqiv -- "$@"
 | 
			
		||||
mime ^image, has sxiv,      X, flag f = sxiv -- "$@"
 | 
			
		||||
mime ^image, has feh,       X, flag f, !ext gif = feh -- "$@"
 | 
			
		||||
mime ^image, has mirage,    X, flag f = mirage -- "$@"
 | 
			
		||||
mime ^image, has ristretto, X, flag f = ristretto "$@"
 | 
			
		||||
mime ^image, has eog,       X, flag f = eog -- "$@"
 | 
			
		||||
mime ^image, has eom,       X, flag f = eom -- "$@"
 | 
			
		||||
mime ^image, has nomacs,    X, flag f = nomacs -- "$@"
 | 
			
		||||
mime ^image, has geeqie,    X, flag f = geeqie -- "$@"
 | 
			
		||||
mime ^image, has gpicview,  X, flag f = gpicview -- "$@"
 | 
			
		||||
mime ^image, has gwenview,  X, flag f = gwenview -- "$@"
 | 
			
		||||
mime ^image, has gimp,      X, flag f = gimp -- "$@"
 | 
			
		||||
mime ^image, has krita,     X, flag f = krita -- "$@"
 | 
			
		||||
ext kra,     has krita,     X, flag f = krita -- "$@"
 | 
			
		||||
ext xcf,                    X, flag f = gimp -- "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Archives
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
 | 
			
		||||
# avoid password prompt by providing empty password
 | 
			
		||||
ext 7z, has 7z = 7z -p l "$@" | $PAGER
 | 
			
		||||
# This requires atool
 | 
			
		||||
ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz,     has atool = atool --list --each -- "$@" | $PAGER
 | 
			
		||||
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --list --each -- "$@" | $PAGER
 | 
			
		||||
ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz,  has atool = atool --extract --each -- "$@"
 | 
			
		||||
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --extract --each -- "$@"
 | 
			
		||||
 | 
			
		||||
# Listing and extracting archives without atool:
 | 
			
		||||
ext tar|gz|bz2|xz, has tar = tar vvtf "$1" | $PAGER
 | 
			
		||||
ext tar|gz|bz2|xz, has tar = for file in "$@"; do tar vvxf "$file"; done
 | 
			
		||||
ext bz2, has bzip2 = for file in "$@"; do bzip2 -dk "$file"; done
 | 
			
		||||
ext zip, has unzip = unzip -l "$1" | less
 | 
			
		||||
ext zip, has unzip = for file in "$@"; do unzip -d "${file%.*}" "$file"; done
 | 
			
		||||
ext ace, has unace = unace l "$1" | less
 | 
			
		||||
ext ace, has unace = for file in "$@"; do unace e "$file"; done
 | 
			
		||||
ext rar, has unrar = unrar l "$1" | less
 | 
			
		||||
ext rar, has unrar = for file in "$@"; do unrar x "$file"; done
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Fonts
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
mime ^font, has fontforge, X, flag f = fontforge "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Flag t fallback terminals
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Rarely installed terminal emulators get higher priority; It is assumed that
 | 
			
		||||
# if you install a rare terminal emulator, you probably use it.
 | 
			
		||||
# gnome-terminal/konsole/xterm on the other hand are often installed as part of
 | 
			
		||||
# a desktop environment or as fallback terminal emulators.
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has terminology = terminology -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has kitty = kitty -- "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has alacritty = alacritty -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has sakura = sakura -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has lilyterm = lilyterm -e "$@"
 | 
			
		||||
#mime ^ranger/x-terminal-emulator, has cool-retro-term = cool-retro-term -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has termite = termite -x '"$@"'
 | 
			
		||||
#mime ^ranger/x-terminal-emulator, has yakuake = yakuake -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has guake = guake -ne "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has tilda = tilda -c "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has st = st -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has terminator = terminator -x "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has urxvt = urxvt -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has pantheon-terminal = pantheon-terminal -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has lxterminal = lxterminal -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has mate-terminal = mate-terminal -x "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has xfce4-terminal = xfce4-terminal -x "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has konsole = konsole -e "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has gnome-terminal = gnome-terminal -- "$@"
 | 
			
		||||
mime ^ranger/x-terminal-emulator, has xterm = xterm -e "$@"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Misc
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1"
 | 
			
		||||
label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1"
 | 
			
		||||
label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1"
 | 
			
		||||
label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1"
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Generic file openers
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
label open, has xdg-open = xdg-open "$@"
 | 
			
		||||
label open, has open     = open -- "$@"
 | 
			
		||||
 | 
			
		||||
# Define the editor for non-text files + pager as last action
 | 
			
		||||
              !mime ^text, !ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php  = ask
 | 
			
		||||
label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php  = ${VISUAL:-$EDITOR} -- "$@"
 | 
			
		||||
label pager,  !mime ^text, !ext xml|json|csv|tex|py|pl|rb|rs|js|sh|php  = $PAGER -- "$@"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
######################################################################
 | 
			
		||||
# The actions below are left so low down in this file on purpose, so #
 | 
			
		||||
# they are never triggered accidentally.                             #
 | 
			
		||||
######################################################################
 | 
			
		||||
 | 
			
		||||
# Execute a file as program/script.
 | 
			
		||||
mime application/x-executable = "$1"
 | 
			
		||||
 | 
			
		||||
# Move the file to trash using trash-cli.
 | 
			
		||||
label trash, has trash-put = trash-put -- "$@"
 | 
			
		||||
label trash = mkdir -p -- "${XDG_DATA_HOME:-$HOME/.local/share}/ranger/trash"; mv -- "$@" "${XDG_DATA_HOME:-$HOME/.local/share}/ranger/trash"
 | 
			
		||||
							
								
								
									
										350
									
								
								ranger/scope.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										350
									
								
								ranger/scope.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,350 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -o noclobber -o noglob -o nounset -o pipefail
 | 
			
		||||
IFS=$'\n'
 | 
			
		||||
 | 
			
		||||
## If the option `use_preview_script` is set to `true`,
 | 
			
		||||
## then this script will be called and its output will be displayed in ranger.
 | 
			
		||||
## ANSI color codes are supported.
 | 
			
		||||
## STDIN is disabled, so interactive scripts won't work properly
 | 
			
		||||
 | 
			
		||||
## This script is considered a configuration file and must be updated manually.
 | 
			
		||||
## It will be left untouched if you upgrade ranger.
 | 
			
		||||
 | 
			
		||||
## Because of some automated testing we do on the script #'s for comments need
 | 
			
		||||
## to be doubled up. Code that is commented out, because it's an alternative for
 | 
			
		||||
## example, gets only one #.
 | 
			
		||||
 | 
			
		||||
## Meanings of exit codes:
 | 
			
		||||
## code | meaning    | action of ranger
 | 
			
		||||
## -----+------------+-------------------------------------------
 | 
			
		||||
## 0    | success    | Display stdout as preview
 | 
			
		||||
## 1    | no preview | Display no preview at all
 | 
			
		||||
## 2    | plain text | Display the plain content of the file
 | 
			
		||||
## 3    | fix width  | Don't reload when width changes
 | 
			
		||||
## 4    | fix height | Don't reload when height changes
 | 
			
		||||
## 5    | fix both   | Don't ever reload
 | 
			
		||||
## 6    | image      | Display the image `$IMAGE_CACHE_PATH` points to as an image preview
 | 
			
		||||
## 7    | image      | Display the file directly as an image
 | 
			
		||||
 | 
			
		||||
## Script arguments
 | 
			
		||||
FILE_PATH="${1}"         # Full path of the highlighted file
 | 
			
		||||
PV_WIDTH="${2}"          # Width of the preview pane (number of fitting characters)
 | 
			
		||||
## shellcheck disable=SC2034 # PV_HEIGHT is provided for convenience and unused
 | 
			
		||||
PV_HEIGHT="${3}"         # Height of the preview pane (number of fitting characters)
 | 
			
		||||
IMAGE_CACHE_PATH="${4}"  # Full path that should be used to cache image preview
 | 
			
		||||
PV_IMAGE_ENABLED="${5}"  # 'True' if image previews are enabled, 'False' otherwise.
 | 
			
		||||
 | 
			
		||||
FILE_EXTENSION="${FILE_PATH##*.}"
 | 
			
		||||
FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')"
 | 
			
		||||
 | 
			
		||||
## Settings
 | 
			
		||||
HIGHLIGHT_SIZE_MAX=262143  # 256KiB
 | 
			
		||||
HIGHLIGHT_TABWIDTH=${HIGHLIGHT_TABWIDTH:-8}
 | 
			
		||||
HIGHLIGHT_STYLE=${HIGHLIGHT_STYLE:-pablo}
 | 
			
		||||
HIGHLIGHT_OPTIONS="--replace-tabs=${HIGHLIGHT_TABWIDTH} --style=${HIGHLIGHT_STYLE} ${HIGHLIGHT_OPTIONS:-}"
 | 
			
		||||
PYGMENTIZE_STYLE=${PYGMENTIZE_STYLE:-autumn}
 | 
			
		||||
OPENSCAD_IMGSIZE=${RNGR_OPENSCAD_IMGSIZE:-1000,1000}
 | 
			
		||||
OPENSCAD_COLORSCHEME=${RNGR_OPENSCAD_COLORSCHEME:-Tomorrow Night}
 | 
			
		||||
 | 
			
		||||
handle_extension() {
 | 
			
		||||
    case "${FILE_EXTENSION_LOWER}" in
 | 
			
		||||
        ## Archive
 | 
			
		||||
        a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
 | 
			
		||||
        rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
 | 
			
		||||
            atool --list -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            bsdtar --list --file "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
        rar)
 | 
			
		||||
            ## Avoid password prompt by providing empty password
 | 
			
		||||
            unrar lt -p- -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
        7z)
 | 
			
		||||
            ## Avoid password prompt by providing empty password
 | 
			
		||||
            7z l -p -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## PDF
 | 
			
		||||
        pdf)
 | 
			
		||||
            ## Preview as text conversion
 | 
			
		||||
            pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
 | 
			
		||||
              fmt -w "${PV_WIDTH}" && exit 5
 | 
			
		||||
            mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
 | 
			
		||||
              fmt -w "${PV_WIDTH}" && exit 5
 | 
			
		||||
            exiftool "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## BitTorrent
 | 
			
		||||
        torrent)
 | 
			
		||||
            transmission-show -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## OpenDocument
 | 
			
		||||
        odt|ods|odp|sxw)
 | 
			
		||||
            ## Preview as text conversion
 | 
			
		||||
            odt2txt "${FILE_PATH}" && exit 5
 | 
			
		||||
            ## Preview as markdown conversion
 | 
			
		||||
            pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## XLSX
 | 
			
		||||
        xlsx)
 | 
			
		||||
            ## Preview as csv conversion
 | 
			
		||||
            ## Uses: https://github.com/dilshod/xlsx2csv
 | 
			
		||||
            xlsx2csv -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## HTML
 | 
			
		||||
        htm|html|xhtml)
 | 
			
		||||
            ## Preview as text conversion
 | 
			
		||||
            w3m -dump "${FILE_PATH}" && exit 5
 | 
			
		||||
            lynx -dump -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            elinks -dump "${FILE_PATH}" && exit 5
 | 
			
		||||
            pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            ;;
 | 
			
		||||
 | 
			
		||||
        ## JSON
 | 
			
		||||
        json)
 | 
			
		||||
            jq --color-output . "${FILE_PATH}" && exit 5
 | 
			
		||||
            python -m json.tool -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            ;;
 | 
			
		||||
 | 
			
		||||
        ## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected
 | 
			
		||||
        ## by file(1).
 | 
			
		||||
        dff|dsf|wv|wvc)
 | 
			
		||||
            mediainfo "${FILE_PATH}" && exit 5
 | 
			
		||||
            exiftool "${FILE_PATH}" && exit 5
 | 
			
		||||
            ;; # Continue with next handler on failure
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
handle_image() {
 | 
			
		||||
    ## Size of the preview if there are multiple options or it has to be
 | 
			
		||||
    ## rendered from vector graphics. If the conversion program allows
 | 
			
		||||
    ## specifying only one dimension while keeping the aspect ratio, the width
 | 
			
		||||
    ## will be used.
 | 
			
		||||
    local DEFAULT_SIZE="1920x1080"
 | 
			
		||||
 | 
			
		||||
    local mimetype="${1}"
 | 
			
		||||
    case "${mimetype}" in
 | 
			
		||||
        ## SVG
 | 
			
		||||
        # image/svg+xml|image/svg)
 | 
			
		||||
        #     convert -- "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6
 | 
			
		||||
        #     exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## DjVu
 | 
			
		||||
        # image/vnd.djvu)
 | 
			
		||||
        #     ddjvu -format=tiff -quality=90 -page=1 -size="${DEFAULT_SIZE}" \
 | 
			
		||||
        #           - "${IMAGE_CACHE_PATH}" < "${FILE_PATH}" \
 | 
			
		||||
        #           && exit 6 || exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## Image
 | 
			
		||||
        image/*)
 | 
			
		||||
            local orientation
 | 
			
		||||
            orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )"
 | 
			
		||||
            ## If orientation data is present and the image actually
 | 
			
		||||
            ## needs rotating ("1" means no rotation)...
 | 
			
		||||
            if [[ -n "$orientation" && "$orientation" != 1 ]]; then
 | 
			
		||||
                ## ...auto-rotate the image according to the EXIF data.
 | 
			
		||||
                convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            ## `w3mimgdisplay` will be called for all images (unless overriden
 | 
			
		||||
            ## as above), but might fail for unsupported types.
 | 
			
		||||
            exit 7;;
 | 
			
		||||
 | 
			
		||||
        ## Video
 | 
			
		||||
        # video/*)
 | 
			
		||||
        #     # Thumbnail
 | 
			
		||||
        #     ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6
 | 
			
		||||
        #     exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## PDF
 | 
			
		||||
        # application/pdf)
 | 
			
		||||
        #     pdftoppm -f 1 -l 1 \
 | 
			
		||||
        #              -scale-to-x "${DEFAULT_SIZE%x*}" \
 | 
			
		||||
        #              -scale-to-y -1 \
 | 
			
		||||
        #              -singlefile \
 | 
			
		||||
        #              -jpeg -tiffcompression jpeg \
 | 
			
		||||
        #              -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \
 | 
			
		||||
        #         && exit 6 || exit 1;;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        ## ePub, MOBI, FB2 (using Calibre)
 | 
			
		||||
        # application/epub+zip|application/x-mobipocket-ebook|\
 | 
			
		||||
        # application/x-fictionbook+xml)
 | 
			
		||||
        #     # ePub (using https://github.com/marianosimone/epub-thumbnailer)
 | 
			
		||||
        #     epub-thumbnailer "${FILE_PATH}" "${IMAGE_CACHE_PATH}" \
 | 
			
		||||
        #         "${DEFAULT_SIZE%x*}" && exit 6
 | 
			
		||||
        #     ebook-meta --get-cover="${IMAGE_CACHE_PATH}" -- "${FILE_PATH}" \
 | 
			
		||||
        #         >/dev/null && exit 6
 | 
			
		||||
        #     exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## Font
 | 
			
		||||
        application/font*|application/*opentype)
 | 
			
		||||
            preview_png="/tmp/$(basename "${IMAGE_CACHE_PATH%.*}").png"
 | 
			
		||||
            if fontimage -o "${preview_png}" \
 | 
			
		||||
                         --pixelsize "120" \
 | 
			
		||||
                         --fontname \
 | 
			
		||||
                         --pixelsize "80" \
 | 
			
		||||
                         --text "  ABCDEFGHIJKLMNOPQRSTUVWXYZ  " \
 | 
			
		||||
                         --text "  abcdefghijklmnopqrstuvwxyz  " \
 | 
			
		||||
                         --text "  0123456789.:,;(*!?') ff fl fi ffi ffl  " \
 | 
			
		||||
                         --text "  The quick brown fox jumps over the lazy dog.  " \
 | 
			
		||||
                         "${FILE_PATH}";
 | 
			
		||||
            then
 | 
			
		||||
                convert -- "${preview_png}" "${IMAGE_CACHE_PATH}" \
 | 
			
		||||
                    && rm "${preview_png}" \
 | 
			
		||||
                    && exit 6
 | 
			
		||||
            else
 | 
			
		||||
                exit 1
 | 
			
		||||
            fi
 | 
			
		||||
            ;;
 | 
			
		||||
 | 
			
		||||
        ## Preview archives using the first image inside.
 | 
			
		||||
        ## (Very useful for comic book collections for example.)
 | 
			
		||||
        # application/zip|application/x-rar|application/x-7z-compressed|\
 | 
			
		||||
        #     application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar)
 | 
			
		||||
        #     local fn=""; local fe=""
 | 
			
		||||
        #     local zip=""; local rar=""; local tar=""; local bsd=""
 | 
			
		||||
        #     case "${mimetype}" in
 | 
			
		||||
        #         application/zip) zip=1 ;;
 | 
			
		||||
        #         application/x-rar) rar=1 ;;
 | 
			
		||||
        #         application/x-7z-compressed) ;;
 | 
			
		||||
        #         *) tar=1 ;;
 | 
			
		||||
        #     esac
 | 
			
		||||
        #     { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \
 | 
			
		||||
        #     { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \
 | 
			
		||||
        #     { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \
 | 
			
		||||
        #     { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return
 | 
			
		||||
        #
 | 
			
		||||
        #     fn=$(echo "$fn" | python -c "import sys; import mimetypes as m; \
 | 
			
		||||
        #             [ print(l, end='') for l in sys.stdin if \
 | 
			
		||||
        #               (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\
 | 
			
		||||
        #         sort -V | head -n 1)
 | 
			
		||||
        #     [ "$fn" = "" ] && return
 | 
			
		||||
        #     [ "$bsd" ] && fn=$(printf '%b' "$fn")
 | 
			
		||||
        #
 | 
			
		||||
        #     [ "$tar" ] && tar --extract --to-stdout \
 | 
			
		||||
        #         --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6
 | 
			
		||||
        #     fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g')
 | 
			
		||||
        #     [ "$bsd" ] && bsdtar --extract --to-stdout \
 | 
			
		||||
        #         --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6
 | 
			
		||||
        #     [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}"
 | 
			
		||||
        #     [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \
 | 
			
		||||
        #         "${IMAGE_CACHE_PATH}" && exit 6
 | 
			
		||||
        #     [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \
 | 
			
		||||
        #         "${IMAGE_CACHE_PATH}" && exit 6
 | 
			
		||||
        #     [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}"
 | 
			
		||||
        #     ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    # openscad_image() {
 | 
			
		||||
    #     TMPPNG="$(mktemp -t XXXXXX.png)"
 | 
			
		||||
    #     openscad --colorscheme="${OPENSCAD_COLORSCHEME}" \
 | 
			
		||||
    #         --imgsize="${OPENSCAD_IMGSIZE/x/,}" \
 | 
			
		||||
    #         -o "${TMPPNG}" "${1}"
 | 
			
		||||
    #     mv "${TMPPNG}" "${IMAGE_CACHE_PATH}"
 | 
			
		||||
    # }
 | 
			
		||||
 | 
			
		||||
    # case "${FILE_EXTENSION_LOWER}" in
 | 
			
		||||
    #     ## 3D models
 | 
			
		||||
    #     ## OpenSCAD only supports png image output, and ${IMAGE_CACHE_PATH}
 | 
			
		||||
    #     ## is hardcoded as jpeg. So we make a tempfile.png and just
 | 
			
		||||
    #     ## move/rename it to jpg. This works because image libraries are
 | 
			
		||||
    #     ## smart enough to handle it.
 | 
			
		||||
    #     csg|scad)
 | 
			
		||||
    #         openscad_image "${FILE_PATH}" && exit 6
 | 
			
		||||
    #         ;;
 | 
			
		||||
    #     3mf|amf|dxf|off|stl)
 | 
			
		||||
    #         openscad_image <(echo "import(\"${FILE_PATH}\");") && exit 6
 | 
			
		||||
    #         ;;
 | 
			
		||||
    # esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
handle_mime() {
 | 
			
		||||
    local mimetype="${1}"
 | 
			
		||||
    case "${mimetype}" in
 | 
			
		||||
        ## RTF and DOC
 | 
			
		||||
        text/rtf|*msword)
 | 
			
		||||
            ## Preview as text conversion
 | 
			
		||||
            ## note: catdoc does not always work for .doc files
 | 
			
		||||
            ## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/
 | 
			
		||||
            catdoc -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## DOCX, ePub, FB2 (using markdown)
 | 
			
		||||
        ## You might want to remove "|epub" and/or "|fb2" below if you have
 | 
			
		||||
        ## uncommented other methods to preview those formats
 | 
			
		||||
        *wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml)
 | 
			
		||||
            ## Preview as markdown conversion
 | 
			
		||||
            pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## XLS
 | 
			
		||||
        *ms-excel)
 | 
			
		||||
            ## Preview as csv conversion
 | 
			
		||||
            ## xls2csv comes with catdoc:
 | 
			
		||||
            ##   http://www.wagner.pp.ru/~vitus/software/catdoc/
 | 
			
		||||
            xls2csv -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## Text
 | 
			
		||||
        text/* | */xml)
 | 
			
		||||
            ## Syntax highlight
 | 
			
		||||
            if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then
 | 
			
		||||
                exit 2
 | 
			
		||||
            fi
 | 
			
		||||
            if [[ "$( tput colors )" -ge 256 ]]; then
 | 
			
		||||
                local pygmentize_format='terminal256'
 | 
			
		||||
                local highlight_format='xterm256'
 | 
			
		||||
            else
 | 
			
		||||
                local pygmentize_format='terminal'
 | 
			
		||||
                local highlight_format='ansi'
 | 
			
		||||
            fi
 | 
			
		||||
            env HIGHLIGHT_OPTIONS="${HIGHLIGHT_OPTIONS}" highlight \
 | 
			
		||||
                --out-format="${highlight_format}" \
 | 
			
		||||
                --force -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            env COLORTERM=8bit bat --color=always --style="plain" \
 | 
			
		||||
                -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}"\
 | 
			
		||||
                -- "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 2;;
 | 
			
		||||
 | 
			
		||||
        ## DjVu
 | 
			
		||||
        image/vnd.djvu)
 | 
			
		||||
            ## Preview as text conversion (requires djvulibre)
 | 
			
		||||
            djvutxt "${FILE_PATH}" | fmt -w "${PV_WIDTH}" && exit 5
 | 
			
		||||
            exiftool "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## Image
 | 
			
		||||
        image/*)
 | 
			
		||||
            ## Preview as text conversion
 | 
			
		||||
            # img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4
 | 
			
		||||
            exiftool "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
 | 
			
		||||
        ## Video and audio
 | 
			
		||||
        video/* | audio/*)
 | 
			
		||||
            mediainfo "${FILE_PATH}" && exit 5
 | 
			
		||||
            exiftool "${FILE_PATH}" && exit 5
 | 
			
		||||
            exit 1;;
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
handle_fallback() {
 | 
			
		||||
    echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
 | 
			
		||||
if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then
 | 
			
		||||
    handle_image "${MIMETYPE}"
 | 
			
		||||
fi
 | 
			
		||||
handle_extension
 | 
			
		||||
handle_mime "${MIMETYPE}"
 | 
			
		||||
handle_fallback
 | 
			
		||||
 | 
			
		||||
exit 1
 | 
			
		||||
							
								
								
									
										70
									
								
								redshift.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								redshift.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
			
		||||
; Global settings for redshift
 | 
			
		||||
[redshift]
 | 
			
		||||
; Set the day and night screen temperatures
 | 
			
		||||
temp-day=2600
 | 
			
		||||
temp-night=2400
 | 
			
		||||
 | 
			
		||||
; Disable the smooth fade between temperatures when Redshift starts and stops.
 | 
			
		||||
; 0 will cause an immediate change between screen temperatures.
 | 
			
		||||
; 1 will gradually apply the new screen temperature over a couple of seconds.
 | 
			
		||||
fade=1
 | 
			
		||||
 | 
			
		||||
; Solar elevation thresholds.
 | 
			
		||||
; By default, Redshift will use the current elevation of the sun to determine
 | 
			
		||||
; whether it is daytime, night or in transition (dawn/dusk). When the sun is
 | 
			
		||||
; above the degrees specified with elevation-high it is considered daytime and
 | 
			
		||||
; below elevation-low it is considered night.
 | 
			
		||||
;elevation-high=3
 | 
			
		||||
;elevation-low=-6
 | 
			
		||||
 | 
			
		||||
; Custom dawn/dusk intervals.
 | 
			
		||||
; Instead of using the solar elevation, the time intervals of dawn and dusk
 | 
			
		||||
; can be specified manually. The times must be specified as HH:MM in 24-hour
 | 
			
		||||
; format.
 | 
			
		||||
;dawn-time=6:00-7:45
 | 
			
		||||
;dusk-time=18:35-20:15
 | 
			
		||||
 | 
			
		||||
; Set the screen brightness. Default is 1.0.
 | 
			
		||||
;brightness=0.9
 | 
			
		||||
; It is also possible to use different settings for day and night
 | 
			
		||||
; since version 1.8.
 | 
			
		||||
;brightness-day=0.7
 | 
			
		||||
;brightness-night=0.4
 | 
			
		||||
; Set the screen gamma (for all colors, or each color channel
 | 
			
		||||
; individually)
 | 
			
		||||
gamma=0.9
 | 
			
		||||
;gamma=0.8:0.7:0.8
 | 
			
		||||
; This can also be set individually for day and night since
 | 
			
		||||
; version 1.10.
 | 
			
		||||
;gamma-day=0.8:0.7:0.8
 | 
			
		||||
;gamma-night=0.6
 | 
			
		||||
 | 
			
		||||
; Set the location-provider: 'geoclue2', 'manual'
 | 
			
		||||
; type 'redshift -l list' to see possible values.
 | 
			
		||||
; The location provider settings are in a different section.
 | 
			
		||||
location-provider=manual
 | 
			
		||||
 | 
			
		||||
; Set the adjustment-method: 'randr', 'vidmode'
 | 
			
		||||
; type 'redshift -m list' to see all possible values.
 | 
			
		||||
; 'randr' is the preferred method, 'vidmode' is an older API.
 | 
			
		||||
; but works in some cases when 'randr' does not.
 | 
			
		||||
; The adjustment method settings are in a different section.
 | 
			
		||||
adjustment-method=randr
 | 
			
		||||
 | 
			
		||||
; Configuration of the location-provider:
 | 
			
		||||
; type 'redshift -l PROVIDER:help' to see the settings.
 | 
			
		||||
; ex: 'redshift -l manual:help'
 | 
			
		||||
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
 | 
			
		||||
; are negative numbers.
 | 
			
		||||
[manual]
 | 
			
		||||
lat=48.1
 | 
			
		||||
lon=11.6
 | 
			
		||||
 | 
			
		||||
; Configuration of the adjustment-method
 | 
			
		||||
; type 'redshift -m METHOD:help' to see the settings.
 | 
			
		||||
; ex: 'redshift -m randr:help'
 | 
			
		||||
; In this example, randr is configured to adjust only screen 0.
 | 
			
		||||
; Note that the numbering starts from 0, so this is actually the first screen.
 | 
			
		||||
; If this option is not specified, Redshift will try to adjust _all_ screens.
 | 
			
		||||
[randr]
 | 
			
		||||
screen=0
 | 
			
		||||
							
								
								
									
										70
									
								
								redshift/redshift.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								redshift/redshift.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
			
		||||
; Global settings for redshift
 | 
			
		||||
[redshift]
 | 
			
		||||
; Set the day and night screen temperatures
 | 
			
		||||
temp-day=2600
 | 
			
		||||
temp-night=2400
 | 
			
		||||
 | 
			
		||||
; Disable the smooth fade between temperatures when Redshift starts and stops.
 | 
			
		||||
; 0 will cause an immediate change between screen temperatures.
 | 
			
		||||
; 1 will gradually apply the new screen temperature over a couple of seconds.
 | 
			
		||||
fade=1
 | 
			
		||||
 | 
			
		||||
; Solar elevation thresholds.
 | 
			
		||||
; By default, Redshift will use the current elevation of the sun to determine
 | 
			
		||||
; whether it is daytime, night or in transition (dawn/dusk). When the sun is
 | 
			
		||||
; above the degrees specified with elevation-high it is considered daytime and
 | 
			
		||||
; below elevation-low it is considered night.
 | 
			
		||||
;elevation-high=3
 | 
			
		||||
;elevation-low=-6
 | 
			
		||||
 | 
			
		||||
; Custom dawn/dusk intervals.
 | 
			
		||||
; Instead of using the solar elevation, the time intervals of dawn and dusk
 | 
			
		||||
; can be specified manually. The times must be specified as HH:MM in 24-hour
 | 
			
		||||
; format.
 | 
			
		||||
;dawn-time=6:00-7:45
 | 
			
		||||
;dusk-time=18:35-20:15
 | 
			
		||||
 | 
			
		||||
; Set the screen brightness. Default is 1.0.
 | 
			
		||||
;brightness=0.9
 | 
			
		||||
; It is also possible to use different settings for day and night
 | 
			
		||||
; since version 1.8.
 | 
			
		||||
;brightness-day=0.7
 | 
			
		||||
;brightness-night=0.4
 | 
			
		||||
; Set the screen gamma (for all colors, or each color channel
 | 
			
		||||
; individually)
 | 
			
		||||
gamma=0.9
 | 
			
		||||
;gamma=0.8:0.7:0.8
 | 
			
		||||
; This can also be set individually for day and night since
 | 
			
		||||
; version 1.10.
 | 
			
		||||
;gamma-day=0.8:0.7:0.8
 | 
			
		||||
;gamma-night=0.6
 | 
			
		||||
 | 
			
		||||
; Set the location-provider: 'geoclue2', 'manual'
 | 
			
		||||
; type 'redshift -l list' to see possible values.
 | 
			
		||||
; The location provider settings are in a different section.
 | 
			
		||||
location-provider=manual
 | 
			
		||||
 | 
			
		||||
; Set the adjustment-method: 'randr', 'vidmode'
 | 
			
		||||
; type 'redshift -m list' to see all possible values.
 | 
			
		||||
; 'randr' is the preferred method, 'vidmode' is an older API.
 | 
			
		||||
; but works in some cases when 'randr' does not.
 | 
			
		||||
; The adjustment method settings are in a different section.
 | 
			
		||||
adjustment-method=randr
 | 
			
		||||
 | 
			
		||||
; Configuration of the location-provider:
 | 
			
		||||
; type 'redshift -l PROVIDER:help' to see the settings.
 | 
			
		||||
; ex: 'redshift -l manual:help'
 | 
			
		||||
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
 | 
			
		||||
; are negative numbers.
 | 
			
		||||
[manual]
 | 
			
		||||
lat=48.1
 | 
			
		||||
lon=11.6
 | 
			
		||||
 | 
			
		||||
; Configuration of the adjustment-method
 | 
			
		||||
; type 'redshift -m METHOD:help' to see the settings.
 | 
			
		||||
; ex: 'redshift -m randr:help'
 | 
			
		||||
; In this example, randr is configured to adjust only screen 0.
 | 
			
		||||
; Note that the numbering starts from 0, so this is actually the first screen.
 | 
			
		||||
; If this option is not specified, Redshift will try to adjust _all_ screens.
 | 
			
		||||
[randr]
 | 
			
		||||
screen=0
 | 
			
		||||
							
								
								
									
										27
									
								
								rofi/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								rofi/config
									
									
									
									
									
										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
 | 
			
		||||
							
								
								
									
										0
									
								
								rofi/config.bak
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								rofi/config.bak
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										122
									
								
								sxhkd/sxhkdrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								sxhkd/sxhkdrc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,122 @@
 | 
			
		||||
#
 | 
			
		||||
# wm independent hotkeys
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# terminal emulator
 | 
			
		||||
super + Return
 | 
			
		||||
	urxvt
 | 
			
		||||
 | 
			
		||||
# program launcher
 | 
			
		||||
super + d
 | 
			
		||||
	rofi -show run
 | 
			
		||||
super + shift + d
 | 
			
		||||
	rofi -show drun
 | 
			
		||||
# make sxhkd reload its configuration files:
 | 
			
		||||
super + Escape
 | 
			
		||||
	pkill -USR1 -x sxhkd
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# bspwm hotkeys
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# quit/restart bspwm
 | 
			
		||||
super + alt + {q,r}
 | 
			
		||||
	bspc {quit,wm -r}
 | 
			
		||||
 | 
			
		||||
# close and kill
 | 
			
		||||
super + {_,shift + }w
 | 
			
		||||
	bspc node -{c,k}
 | 
			
		||||
 | 
			
		||||
# alternate between the tiled and monocle layout
 | 
			
		||||
super + m
 | 
			
		||||
	bspc desktop -l next
 | 
			
		||||
 | 
			
		||||
# send the newest marked node to the newest preselected node
 | 
			
		||||
super + y
 | 
			
		||||
	bspc node newest.marked.local -n newest.!automatic.local
 | 
			
		||||
 | 
			
		||||
# swap the current node and the biggest window
 | 
			
		||||
super + g
 | 
			
		||||
	bspc node -s biggest.window
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# state/flags
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# set the window state
 | 
			
		||||
super + {t,shift + t,s,f}
 | 
			
		||||
	bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
 | 
			
		||||
 | 
			
		||||
# set the node flags
 | 
			
		||||
super + ctrl + {m,x,y,z}
 | 
			
		||||
	bspc node -g {marked,locked,sticky,private}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# focus/swap
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# focus the node in the given direction
 | 
			
		||||
super + {_,shift + }{h,j,k,l}
 | 
			
		||||
	bspc node -{f,s} {west,south,north,east}
 | 
			
		||||
 | 
			
		||||
# focus the node for the given path jump
 | 
			
		||||
super + {p,b,comma,period}
 | 
			
		||||
	bspc node -f @{parent,brother,first,second}
 | 
			
		||||
 | 
			
		||||
# focus the next/previous window in the current desktop
 | 
			
		||||
super + {_,shift + }c
 | 
			
		||||
	bspc node -f {next,prev}.local.!hidden.window
 | 
			
		||||
 | 
			
		||||
# focus the next/previous desktop in the current monitor
 | 
			
		||||
super + bracket{left,right}
 | 
			
		||||
	bspc desktop -f {prev,next}.local
 | 
			
		||||
 | 
			
		||||
# focus the last node/desktop
 | 
			
		||||
super + {grave,Tab}
 | 
			
		||||
	bspc {node,desktop} -f last
 | 
			
		||||
 | 
			
		||||
# focus the older or newer node in the focus history
 | 
			
		||||
super + {o,i}
 | 
			
		||||
	bspc wm -h off; \
 | 
			
		||||
	bspc node {older,newer} -f; \
 | 
			
		||||
	bspc wm -h on
 | 
			
		||||
 | 
			
		||||
# focus or send to the given desktop
 | 
			
		||||
super + {_,shift + }{1-9,0}
 | 
			
		||||
	bspc {desktop -f,node -d} '^{1-9,10}'
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# preselect
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# preselect the direction
 | 
			
		||||
super + ctrl + {h,j,k,l}
 | 
			
		||||
	bspc node -p {west,south,north,east}
 | 
			
		||||
 | 
			
		||||
# preselect the ratio
 | 
			
		||||
super + ctrl + {1-9}
 | 
			
		||||
	bspc node -o 0.{1-9}
 | 
			
		||||
 | 
			
		||||
# cancel the preselection for the focused node
 | 
			
		||||
super + ctrl + space
 | 
			
		||||
	bspc node -p cancel
 | 
			
		||||
 | 
			
		||||
# cancel the preselection for the focused desktop
 | 
			
		||||
super + ctrl + shift + space
 | 
			
		||||
	bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# move/resize
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# expand a window by moving one of its side outward
 | 
			
		||||
super + alt + {h,j,k,l}
 | 
			
		||||
	bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
 | 
			
		||||
 | 
			
		||||
# contract a window by moving one of its side inward
 | 
			
		||||
super + alt + shift + {h,j,k,l}
 | 
			
		||||
	bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
 | 
			
		||||
 | 
			
		||||
# move a floating window
 | 
			
		||||
super + {Left,Down,Up,Right}
 | 
			
		||||
	bspc node -v {-20 0,0 20,0 -20,20 0}
 | 
			
		||||
							
								
								
									
										33
									
								
								sxiv/exec/key-handler
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								sxiv/exec/key-handler
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,33 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
while read file
 | 
			
		||||
do
 | 
			
		||||
        case "$1" in
 | 
			
		||||
        "w") setbg "$file" & ;;
 | 
			
		||||
        "c")
 | 
			
		||||
		[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")"
 | 
			
		||||
		[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
 | 
			
		||||
		cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." &
 | 
			
		||||
		;;
 | 
			
		||||
        "m")
 | 
			
		||||
		[ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | awk '{print $2}' | dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")"
 | 
			
		||||
		[ ! -d "$destdir" ] && notify-send "$destdir is not a directory, cancelled." && exit
 | 
			
		||||
		mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." &
 | 
			
		||||
		;;
 | 
			
		||||
	"r")
 | 
			
		||||
		convert -rotate 90 "$file" "$file" ;;
 | 
			
		||||
	"R")
 | 
			
		||||
		convert -rotate -90 "$file" "$file" ;;
 | 
			
		||||
	"f")
 | 
			
		||||
		convert -flop "$file" "$file" ;;
 | 
			
		||||
	"y")
 | 
			
		||||
		echo -n "$file" | tr -d '\n' | xclip -selection clipboard &&
 | 
			
		||||
		notify-send "$file copied to clipboard" & ;;
 | 
			
		||||
	"Y")
 | 
			
		||||
		readlink -f "$file" | tr -d '\n' | xclip -selection clipboard &&
 | 
			
		||||
			notify-send "$(readlink -f "$file") copied to clipboard" & ;;
 | 
			
		||||
	"d")
 | 
			
		||||
		[ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;;
 | 
			
		||||
	"g")	ifinstalled gimp && setsid -f gimp "$file" ;;
 | 
			
		||||
	"i")	notify-send "File information" "$(mediainfo "$file")" ;;
 | 
			
		||||
        esac
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										15
									
								
								zathura/zathurarc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								zathura/zathurarc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
set sandbox none
 | 
			
		||||
set statusbar-h-padding 0
 | 
			
		||||
set statusbar-v-padding 0
 | 
			
		||||
set page-padding 1
 | 
			
		||||
set selection-clipboard clipboard
 | 
			
		||||
map u scroll half-up
 | 
			
		||||
map d scroll half-down
 | 
			
		||||
map D toggle_page_mode
 | 
			
		||||
map r reload
 | 
			
		||||
map R rotate
 | 
			
		||||
map K zoom in
 | 
			
		||||
map J zoom out
 | 
			
		||||
map i recolor
 | 
			
		||||
map p print
 | 
			
		||||
map g goto top
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user