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