diff options
Diffstat (limited to '.config')
36 files changed, 5053 insertions, 0 deletions
diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml new file mode 100644 index 0000000..4dc90e5 --- /dev/null +++ b/.config/alacritty/alacritty.yml @@ -0,0 +1,577 @@ +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# Any items in the `env` entry below will be added as +# environment variables. Some entries may override variables +# set by alacritty itself. +#env: + # TERM variable + # + # This value is used to set the `$TERM` environment variable for + # each instance of Alacritty. If it is not present, alacritty will + # check the local terminfo database and use `alacritty` if it is + # available, otherwise `xterm-256color` is used. + #TERM: xterm-256color + +window: + # Window dimensions (changes require restart) + # + # Specified in number of columns/lines, not pixels. + # If both are `0`, this setting is ignored. + dimensions: + columns: 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, but 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 + + # Window class (Linux only): + #class: Alacritty + +scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + history: 10000 + + # Number of lines the viewport will move for every line scrolled when + # scrollback is enabled (history > 0). + multiplier: 3 + + # Faux Scrolling + # + # The `faux_multiplier` setting controls the number of lines the terminal + # should scroll when the alternate screen buffer is active. This is used + # to allow mouse scrolling for applications like `man`. + # + # Specifying `0` will disable faux scrolling. + #faux_multiplier: 3 + + # Scroll to the bottom when new text is written to the terminal. + auto_scroll: false + +# Spaces per Tab (changes require restart) +# +# This setting defines the width of a tab in cells. +# +# Some applications, like Emacs, rely on knowing about the width of a tab. +# To prevent unexpected behavior in these applications, it's also required to +# change the `it` value in terminfo when altering this setting. +tabspaces: 4 + +# Font configuration (changes require restart) +font: + # The normal (roman) font face to use. + normal: + family: Inconsolata # should be "Menlo" or something on macOS. + # Style can be specified to pick a specific face. + # style: Regular + + # The bold font face + bold: + family: Inconsolata # should be "Menlo" or something on macOS. + # Style can be specified to pick a specific face. + # style: Bold + + # The italic font face + italic: + family: Inconsolata # should be "Menlo" or something on macOS. + # Style can be specified to pick a specific face. + # style: Italic + + # Point size of the font + #size: 10.0 + size: 15 + + # Offset is the extra space around each character. `offset.y` can be thought of + # as modifying the line spacing, and `offset.x` as modifying the letter spacing. + offset: + x: 0 + y: 0 + + # Glyph offset determines the locations of the glyphs within their cells with + # the default being at the bottom. Increasing `x` moves the glyph to the right, + # increasing `y` moves the glyph upwards. + glyph_offset: + x: 0 + y: 0 + + # 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` + # + # macOS >= 10.14.x: + # + # If the font quality on non-retina display looks bad then set + # `use_thin_strokes` to `true` and enable font smoothing by running the + # following command: + # `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO` + # + # This is a global setting and will require a log out or restart to take + # effect. + use_thin_strokes: true + +# If `true`, bold text is drawn using the bright color variants. +draw_bold_text_with_bright_colors: true + +# Colors (Solarized Dark) +# Colors (Solarized Dark) +colors: + # Default colors + primary: + background: '0x002b36' + foreground: '0x839496' + + # Normal colors + normal: + black: '0x073642' + red: '0xdc322f' + green: '0x859900' + yellow: '0xb58900' + blue: '0x268bd2' + magenta: '0xd33682' + cyan: '0x2aa198' + white: '0xeee8d5' + + # Bright colors + bright: + black: '0x002b36' + red: '0xcb4b16' + green: '0x586e75' + yellow: '0x657b83' + blue: '0x839496' + magenta: '0x6c71c4' + cyan: '0x93a1a1' + white: '0xfdf6e3' + +# Visual Bell +# +# Any time the BEL code is received, Alacritty "rings" the visual bell. Once +# rung, the terminal background will be set to white and transition back to the +# default background color. You can control the rate of this transition by +# setting the `duration` property (represented in milliseconds). You can also +# configure the transition function by setting the `animation` property. +# +# Values for `animation`: +# - Ease +# - EaseOut +# - EaseOutSine +# - EaseOutQuad +# - EaseOutCubic +# - EaseOutQuart +# - EaseOutQuint +# - EaseOutExpo +# - EaseOutCirc +# - Linear +# +# Specifying a `duration` of `0` will disable the visual bell. +visual_bell: + animation: EaseOutExpo + duration: 0 + color: '0xffffff' + +# Background opacity +# +# Window opacity as a floating point number from `0.0` to `1.0`. +# The value `0.0` is completely transparent and `1.0` is opaque. +background_opacity: 0.8 + +# Mouse bindings +# +# Available fields: +# - mouse +# - action +# - mods (optional) +# +# Values for `mouse`: +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# All available `mods` and `action` values are documented in the key binding +# section. +mouse_bindings: + - { mouse: Middle, action: PasteSelection } + +mouse: + # Click settings + # + # The `double_click` and `triple_click` settings control the time + # alacritty should wait for accepting multiple clicks as one double + # or triple click. + double_click: { threshold: 300 } + triple_click: { threshold: 300 } + + # 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 `None`, URL launching will be disabled completely. + # + # Default: + # - (macOS) open + # - (Linux) 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 + +selection: + semantic_escape_chars: ",│`|:\"' ()[]{}<>" + + # When set to `true`, selected text will be copied to the primary clipboard. + save_to_clipboard: false + +# Allow terminal applications to change Alacritty's window title. +dynamic_title: true + +cursor: + # Cursor style + # + # Values for `style`: + # - ▇ Block + # - _ Underline + # - | Beam + style: Block + + # If this is `true`, the cursor will be rendered as a hollow box when the + # window is not focused. + unfocused_hollow: true + +# Live config reload (changes require restart) +live_config_reload: true + +# Shell +# +# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`. +# Entries in `shell.args` are passed unmodified as arguments to the shell. +# +# Default: +# - (macOS) /bin/bash --login +# - (Linux) 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 + +# Windows 10 ConPTY backend (Windows only) +# +# This will enable better color support and may resolve other issues, +# however this API and its implementation is still young and so is +# disabled by default, as stability may not be as good as the winpty +# backend. +# +# Alacritty will fall back to the WinPTY automatically if the ConPTY +# backend cannot be initialized. +enable_experimental_conpty_backend: false + +# Send ESC (\x1b) before characters when alt is pressed. +alt_send_esc: true + +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`: + # - None + # - Error + # - Warn + # - Info + # - Debug + # - Trace + log_level: Warn + + # Print all received window events. + print_events: false + + # Record all characters and escape sequences as test data. + ref_test: false + +# Key bindings +# +# Key bindings are specified as a list of objects. Each binding will specify a +# key and modifiers required to trigger it, terminal modes where the binding is +# applicable, and what should be done when the key binding fires. It can either +# send a byte sequence to the running application (`chars`), execute a +# predefined action (`action`) or fork and execute a specified command plus +# arguments (`command`). +# +# 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 `None` action. +# +# Example: +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Available fields: +# - key +# - mods (optional) +# - chars | action | command (exactly one required) +# - mode (optional) +# +# Values for `key`: +# - `A` -> `Z` +# - `F1` -> `F12` +# - `Key1` -> `Key0` +# +# A full list with available key codes can be found here: +# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants +# +# 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` +# +# Values for `mods`: +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: `mods: Control|Shift`. +# Whitespace and capitalization is relevant and must match the example. +# +# Values for `chars`: +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. +# To find escape codes for bindings like `PageUp` ("\x1b[5~"), you can run +# the command `showkey -a` outside of tmux. +# Note that applications use terminfo to map escape sequences back to +# keys. It is therefore required to update the terminfo when +# changing an escape sequence. +# +# Values for `action`: +# - Paste +# - PasteSelection +# - Copy +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# - Hide +# - Quit +# - ClearLogNotice +# - SpawnNewInstance +# - ToggleFullscreen +# - None +# +# Values for `action` (macOS only): +# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space +# +# Values for `command`: +# The `command` field must be a map containing a `program` string and +# an `args` array of command line parameter strings. +# +# Example: +# `command: { program: "alacritty", args: ["-e", "vttest"] }` +# +# Values for `mode`: +# - ~AppCursor +# - AppCursor +# - ~AppKeypad +# - AppKeypad +key_bindings: + # (Windows/Linux only) + #- { key: v, mods: Control|Alt, action: Paste } + #- { key: C, mods: Control|Shift, action: Copy } + #- { key: Insert, mods: Shift, action: PasteSelection } + #- { key: Key0, mods: Control, action: ResetFontSize } + #- { key: Equals, mods: Control, action: IncreaseFontSize } + #- { key: Add, mods: Control, action: IncreaseFontSize } + #- { key: Subtract, mods: Control, action: DecreaseFontSize } + #- { key: Minus, mods: Control, action: DecreaseFontSize } + #- { key: Return, mods: Alt, action: ToggleFullscreen } + + # (macOS only) + #- { key: Key0, mods: Command, action: ResetFontSize } + #- { key: Equals, mods: Command, action: IncreaseFontSize } + #- { key: Add, mods: Command, action: IncreaseFontSize } + #- { key: Minus, mods: Command, action: DecreaseFontSize } + #- { key: K, mods: Command, action: ClearHistory } + #- { key: K, mods: Command, chars: "\x0c" } + - { key: V, mods: Control|Shift, action: Paste } + #- { key: C, mods: Command, action: Copy } + #- { key: H, mods: Command, action: Hide } + #- { key: Q, mods: Command, action: Quit } + #- { key: W, mods: Command, action: Quit } + #- { key: F, mods: Command|Control, action: ToggleFullscreen } + + - { key: Paste, action: Paste } + - { key: Copy, action: Copy } + - { key: L, mods: Control, action: ClearLogNotice } + - { key: L, mods: Control, chars: "\x0c" } + - { key: Home, mods: Alt, chars: "\x1b[1;3H" } + - { key: Home, chars: "\x1bOH", mode: AppCursor } + - { key: Home, chars: "\x1b[H", mode: ~AppCursor } + - { key: End, mods: Alt, chars: "\x1b[1;3F" } + - { key: End, chars: "\x1bOF", mode: AppCursor } + - { key: End, chars: "\x1b[F", mode: ~AppCursor } + - { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt } + - { key: PageUp, mods: Shift, chars: "\x1b[5;2~", mode: Alt } + - { key: PageUp, mods: Control, chars: "\x1b[5;5~" } + - { key: PageUp, mods: Alt, chars: "\x1b[5;3~" } + - { key: PageUp, chars: "\x1b[5~" } + - { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt } + - { key: PageDown, mods: Shift, chars: "\x1b[6;2~", mode: Alt } + - { key: PageDown, mods: Control, chars: "\x1b[6;5~" } + - { key: PageDown, mods: Alt, chars: "\x1b[6;3~" } + - { key: PageDown, chars: "\x1b[6~" } + - { key: Tab, mods: Shift, chars: "\x1b[Z" } + - { key: Back, chars: "\x7f" } + - { key: Back, mods: Alt, chars: "\x1b\x7f" } + - { key: Insert, chars: "\x1b[2~" } + - { key: Delete, chars: "\x1b[3~" } + - { key: Left, mods: Shift, chars: "\x1b[1;2D" } + - { key: Left, mods: Control, chars: "\x1b[1;5D" } + - { key: Left, mods: Alt, chars: "\x1b[1;3D" } + - { key: Left, chars: "\x1b[D", mode: ~AppCursor } + - { key: Left, chars: "\x1bOD", mode: AppCursor } + - { key: Right, mods: Shift, chars: "\x1b[1;2C" } + - { key: Right, mods: Control, chars: "\x1b[1;5C" } + - { key: Right, mods: Alt, chars: "\x1b[1;3C" } + - { key: Right, chars: "\x1b[C", mode: ~AppCursor } + - { key: Right, chars: "\x1bOC", mode: AppCursor } + - { key: Up, mods: Shift, chars: "\x1b[1;2A" } + - { key: Up, mods: Control, chars: "\x1b[1;5A" } + - { key: Up, mods: Alt, chars: "\x1b[1;3A" } + - { key: Up, chars: "\x1b[A", mode: ~AppCursor } + - { key: Up, chars: "\x1bOA", mode: AppCursor } + - { key: Down, mods: Shift, chars: "\x1b[1;2B" } + - { key: Down, mods: Control, chars: "\x1b[1;5B" } + - { key: Down, mods: Alt, chars: "\x1b[1;3B" } + - { key: Down, chars: "\x1b[B", mode: ~AppCursor } + - { key: Down, chars: "\x1bOB", mode: AppCursor } + - { key: F1, chars: "\x1bOP" } + - { key: F2, chars: "\x1bOQ" } + - { key: F3, chars: "\x1bOR" } + - { key: F4, chars: "\x1bOS" } + - { key: F5, chars: "\x1b[15~" } + - { key: F6, chars: "\x1b[17~" } + - { key: F7, chars: "\x1b[18~" } + - { key: F8, chars: "\x1b[19~" } + - { key: F9, chars: "\x1b[20~" } + - { key: F10, chars: "\x1b[21~" } + - { key: F11, chars: "\x1b[23~" } + - { key: F12, chars: "\x1b[24~" } + - { key: F1, mods: Shift, chars: "\x1b[1;2P" } + - { key: F2, mods: Shift, chars: "\x1b[1;2Q" } + - { key: F3, mods: Shift, chars: "\x1b[1;2R" } + - { key: F4, mods: Shift, chars: "\x1b[1;2S" } + - { key: F5, mods: Shift, chars: "\x1b[15;2~" } + - { key: F6, mods: Shift, chars: "\x1b[17;2~" } + - { key: F7, mods: Shift, chars: "\x1b[18;2~" } + - { key: F8, mods: Shift, chars: "\x1b[19;2~" } + - { key: F9, mods: Shift, chars: "\x1b[20;2~" } + - { key: F10, mods: Shift, chars: "\x1b[21;2~" } + - { key: F11, mods: Shift, chars: "\x1b[23;2~" } + - { key: F12, mods: Shift, chars: "\x1b[24;2~" } + - { key: F1, mods: Control, chars: "\x1b[1;5P" } + - { key: F2, mods: Control, chars: "\x1b[1;5Q" } + - { key: F3, mods: Control, chars: "\x1b[1;5R" } + - { key: F4, mods: Control, chars: "\x1b[1;5S" } + - { key: F5, mods: Control, chars: "\x1b[15;5~" } + - { key: F6, mods: Control, chars: "\x1b[17;5~" } + - { key: F7, mods: Control, chars: "\x1b[18;5~" } + - { key: F8, mods: Control, chars: "\x1b[19;5~" } + - { key: F9, mods: Control, chars: "\x1b[20;5~" } + - { key: F10, mods: Control, chars: "\x1b[21;5~" } + - { key: F11, mods: Control, chars: "\x1b[23;5~" } + - { key: F12, mods: Control, chars: "\x1b[24;5~" } + - { key: F1, mods: Alt, chars: "\x1b[1;6P" } + - { key: F2, mods: Alt, chars: "\x1b[1;6Q" } + - { key: F3, mods: Alt, chars: "\x1b[1;6R" } + - { key: F4, mods: Alt, chars: "\x1b[1;6S" } + - { key: F5, mods: Alt, chars: "\x1b[15;6~" } + - { key: F6, mods: Alt, chars: "\x1b[17;6~" } + - { key: F7, mods: Alt, chars: "\x1b[18;6~" } + - { key: F8, mods: Alt, chars: "\x1b[19;6~" } + - { key: F9, mods: Alt, chars: "\x1b[20;6~" } + - { key: F10, mods: Alt, chars: "\x1b[21;6~" } + - { key: F11, mods: Alt, chars: "\x1b[23;6~" } + - { key: F12, mods: Alt, chars: "\x1b[24;6~" } + - { key: F1, mods: Super, chars: "\x1b[1;3P" } + - { key: F2, mods: Super, chars: "\x1b[1;3Q" } + - { key: F3, mods: Super, chars: "\x1b[1;3R" } + - { key: F4, mods: Super, chars: "\x1b[1;3S" } + - { key: F5, mods: Super, chars: "\x1b[15;3~" } + - { key: F6, mods: Super, chars: "\x1b[17;3~" } + - { key: F7, mods: Super, chars: "\x1b[18;3~" } + - { key: F8, mods: Super, chars: "\x1b[19;3~" } + - { key: F9, mods: Super, chars: "\x1b[20;3~" } + - { key: F10, mods: Super, chars: "\x1b[21;3~" } + - { key: F11, mods: Super, chars: "\x1b[23;3~" } + - { key: F12, mods: Super, chars: "\x1b[24;3~" } + - { key: NumpadEnter, chars: "\n" } diff --git a/.config/i3/config b/.config/i3/config new file mode 100644 index 0000000..e5fa285 --- /dev/null +++ b/.config/i3/config @@ -0,0 +1,233 @@ +# $mod1 is right alt +# $mod2 is left alt +set $mod Mod1 +set $mod2 Mod4 + +font pango:Inconsolata, Icons 13 + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# kill focused window +bindsym $mod+q kill + +# Mouse behaviour wrt windows. +focus_follows_mouse no + +# start dmenu (a program launcher) +#bindsym $mod+d exec dmenu_run +# 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+j focus left +bindsym $mod+k focus right +bindsym $mod+l focus up +bindsym $mod+semicolon focus down + +# 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 right +bindsym $mod+Shift+l move up +bindsym $mod+Shift+semicolon move down + +# 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+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 +# +#set $ws1 "1 " +set $ws1 "1" +#set $ws2 "2 " +set $ws2 "2" +#set $ws3 "3 " +set $ws3 "3" +#set $ws4 "4 " +set $ws4 "4" +#set $ws5 "5 " +set $ws5 "5" +#set $ws6 "6 " +set $ws6 "6" +set $ws7 "7" +set $ws8 "8" + + +# switch to workspace +bindsym $mod2+1 workspace $ws1 +bindsym $mod2+2 workspace $ws2 +bindsym $mod2+3 workspace $ws3 +bindsym $mod2+4 workspace $ws4 +bindsym $mod2+5 workspace $ws5 +bindsym $mod2+6 workspace $ws6 +bindsym $mod2+7 workspace $ws7 +bindsym $mod2+8 workspace $ws8 +bindsym $mod2+9 workspace $ws9 +bindsym $mod2+0 workspace $ws10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $ws1 +bindsym $mod+Shift+2 move container to workspace $ws2 +bindsym $mod+Shift+3 move container to workspace $ws3 +bindsym $mod+Shift+4 move container to workspace $ws4 +bindsym $mod+Shift+5 move container to workspace $ws5 +bindsym $mod+Shift+6 move container to workspace $ws6 +bindsym $mod+Shift+7 move container to workspace $ws7 +bindsym $mod+Shift+8 move container to workspace $ws8 +bindsym $mod+Shift+9 move container to workspace $ws9 +bindsym $mod+Shift+0 move container to workspace $ws10 + +for_window [class="^Chromium$"] border none +for_window [title="Oracle VM VirtualBox Manager"] floating enable +for_window [class="^Pcmanfm"] floating enable +for_window [class="^lxf$"] floating enable +for_window [class="^Corebird$"] floating enable +for_window [class="^Kdenlive$"] floating enable +for_window [class="^Darktable$"] border none +for_window [class="^Mate-terminal$"] border none +for_window [class="^Termite$"] border none +for_window [class="^URxvt"] border none +for_window [class="^firefoxdeveloperedition"] border none +for_window [class="^Vivaldi"] border none +for_window [class="^qutebrowser"] border none +for_window [class="Pavucontrol"] floating enable +for_window [class="*Virtualbox*"] floating enable border none +for_window [class="Pinentry"] floating enable +for_window [window_role="pop-up"] floating enable +for_window [class="Yad"] floating enable +for_window [class="feh"] floating enable +for_window [class="QtPass"] floating enable +for_window [class="hangouts.google.com"] floating disable +for_window [class="hangouts.google.com"] border normal + +assign [class="URxvt"] $ws1 +assign [class="qutebrowser"] $ws2 +assign [class="Darktable"] $ws3 +assign [class="Firefox Developer"] $ws4 +assign [class="Vivaldi"] $ws4 +assign [class="Slack"] $ws6 + +#workspace switching +bindsym $mod2+k workspace next +bindsym $mod2+j workspace prev +bindsym $mod2+space exec dmenu_run + +#Volume and brightness +bindsym XF86AudioRaiseVolume exec /usr/bin/pulseaudio-ctl up && killall -SIGRTMIN+10 i3status +bindsym XF86AudioLowerVolume exec /usr/bin/pulseaudio-ctl down && killall -SIGUSR1 i3status +bindsym XF86AudioMute exec /usr/bin/pulseaudio-ctl mute && killall -SIGUSR1 i3status +bindsym XF86AudioMicMute exec --no-startup-id amixer set Capture toggle && killall -SIGUSR1 i3status +bindsym XF86MonBrightnessUp exec --no-startup-id light -A 10 +bindsym XF86MonBrightnessDown exec --no-startup-id light -U 10 + +# 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 + bindsym Return mode "default" + bindsym Escape 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 SCRIPT_DIR=/home/lxf/.i3blocks/blocklets i3blocks + colors { + background #222222 + statusline $mgrey + separator $grey + #separator $lgrey + # border background text + focused_workspace #222222 #444444 $white + active_workspace #222222 #222222 $white + inactive_workspace #222222 #222222 $mgrey + urgent_workspace $blue #222222 $white + } +} + + +exec --no-startup-id xcompmgr -n +# set desktop wallpaper +exec --no-startup-id sh ~/.fehbg +# clipboard manager +exec --no-startup-id clipit --no-icon +#start up automation +#exec --no-startup-id autokey-gtk +# bluetooth +exec --no-startup-id blueman-applet +# network +exec --no-startup-id nm-applet +# backup +exec --no-startup-id nextcloud +#exec --no-startup-id dropbox +# Vistual and typing +exec --no-startup-id redshift-gtk -l 33.951935:-83.357567 -m randr -t 5700:3600 & +exec --no-startup-id xinput set-prop 12 "libinput Natural Scrolling Enabled" 1 & +exec --no-startup-id xset r rate 250 25 & +exec --no-startup-id xset -b +exec --no-startup-id xautolock -time 10 -locker 'i3lock -i pictures/desktops/escribano-blur.png' +exec --no-startup-id xcape -e 'Control_L=Escape' + + +# set up a basic environment +#exec --no-startup-id i3-msg 'exec --no-startup-id urxvt; exec --no-startup-id vivaldi-stable;' + diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf new file mode 100644 index 0000000..41bb8e1 --- /dev/null +++ b/.config/kitty/kitty.conf @@ -0,0 +1,83 @@ +# The foreground color +foreground #839496 + +# The background color +background #002b36 + +# The opacity of the background. A number between 0 and 1, where 1 is opaque and 0 is fully transparent. +# This will only work if supported by the OS (for instance, when using a compositor under X11). Note +# that it only sets the default background color's opacity. This is so that +# things like the status bar in vim, powerline prompts, etc. still look good. +# But it means that if you use a color theme with a background color in your +# editor, it will not be rendered as transparent. Instead you should change the +# default background color in your kitty config and not use a background color +# in the editor color scheme. Or use the escape codes to set the terminals +# default colors in a shell script to launch your editor. +# Be aware that using a value less than 1.0 is a (possibly significant) performance hit. +background_opacity .9 + +# The foreground for selections +selection_foreground #002b36 + +# The background for selections +selection_background #586e75 + +# The 16 terminal colors. There are 8 basic colors, each color has a dull and +# bright version. + +# solarized dark +color0 #073642 +color8 #002b36 + +color1 #dc322f +color9 #cb4b16 + +color2 #859900 +color10 #586e75 + +color3 #b58900 +color11 #657b83 + +color4 #268bd2 +color12 #839496 + +color5 #d33682 +color13 #6c71c4 + +color6 #2aa198 +color14 #93a1a1 + +color7 #eee8d5 +color15 #fdf6e3 + +## black +#color0 #000000 +#color8 #4d4d4d +# +## red +#color1 #cc0403 +#color9 #f2201f +# +## green +#color2 #19cb00 +#color10 #23fd00 +# +## yellow +#color3 #cecb00 +#color11 #fffd00 +# +## blue +#color4 #0d73cc +#color12 #1a8fff +# +## magenta +#color5 #cb1ed1 +#color13 #fd28ff +# +## cyan +#color6 #0dcdcd +#color14 #14ffff +# +## white +#color7 #dddddd +#color15 #ffffff diff --git a/.config/mako/config b/.config/mako/config new file mode 100644 index 0000000..b8e8442 --- /dev/null +++ b/.config/mako/config @@ -0,0 +1 @@ +default-timeout=5000 diff --git a/.config/mpd/.mpd/mpd.log b/.config/mpd/.mpd/mpd.log new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/mpd/.mpd/mpd.log diff --git a/.config/mpd/mpd.conf b/.config/mpd/mpd.conf new file mode 120000 index 0000000..fb28bca --- /dev/null +++ b/.config/mpd/mpd.conf @@ -0,0 +1 @@ +/home/lxf/.dotfiles/mpdconf
\ No newline at end of file diff --git a/.config/nvim/.netrwhist b/.config/nvim/.netrwhist new file mode 100644 index 0000000..5ec24b9 --- /dev/null +++ b/.config/nvim/.netrwhist @@ -0,0 +1,4 @@ +let g:netrw_dirhistmax =10 +let g:netrw_dirhistcnt =2 +let g:netrw_dirhist_2='/home/lxf/.config/autokey/data/My Phrases' +let g:netrw_dirhist_1='/home/lxf' diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim new file mode 100644 index 0000000..f182e5b --- /dev/null +++ b/.config/nvim/init.vim @@ -0,0 +1,3 @@ +set runtimepath^=~/.vim runtimepath+=~/.vim/after +let &packpath = &runtimepath +source ~/.vimrc diff --git a/.config/pianobar/config b/.config/pianobar/config new file mode 100644 index 0000000..bb2930c --- /dev/null +++ b/.config/pianobar/config @@ -0,0 +1,4 @@ +audio_quality = high + +password = translinguis +user = luxagraf@gmail.com diff --git a/.config/pianobar/state b/.config/pianobar/state new file mode 100644 index 0000000..913c7c3 --- /dev/null +++ b/.config/pianobar/state @@ -0,0 +1,3 @@ +# do not edit this file +volume = 0 +autostart_station = 167147796329277779 diff --git a/.config/qutebrowser-cookiecleaner.list b/.config/qutebrowser-cookiecleaner.list new file mode 100644 index 0000000..a694e55 --- /dev/null +++ b/.config/qutebrowser-cookiecleaner.list @@ -0,0 +1,2 @@ +live.luxagraf.net +127.0.0.1 diff --git a/.config/qutebrowser/autoconfig.yml b/.config/qutebrowser/autoconfig.yml new file mode 100644 index 0000000..3feafb4 --- /dev/null +++ b/.config/qutebrowser/autoconfig.yml @@ -0,0 +1,14 @@ +# 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.javascript.enabled: + global: true + content.notifications: + https://www.reddit.com: false + content.register_protocol_handler: + https://mail.google.com?extsrc=mailto&url=%25s: false diff --git a/.config/qutebrowser/bisc b/.config/qutebrowser/bisc new file mode 160000 +Subproject b16ef6790d1672232b5accbf82efa64b1fecb5b diff --git a/.config/qutebrowser/bookmarks/urls b/.config/qutebrowser/bookmarks/urls new file mode 100644 index 0000000..6a06095 --- /dev/null +++ b/.config/qutebrowser/bookmarks/urls @@ -0,0 +1,137 @@ +https://awstats.luxagraf.net/cgi-bin/awstats.pl?config=luxagraf.net Statistics for luxagraf.net (2019-03) - main +https://start.duckduckgo.com/ DuckDuckGo — Privacy, simplified. +https://western-aspen-alliance.org/media Media - Western Aspen Alliance +https://www.npr.org/sections/goatsandsoda/2019/03/13/685533353/a-playful-way-to-teach-kids-to-control-their-anger How Inuit Parents Raise Kids Without Yelling — And Teach Them To Control Anger : Goats and Soda : NPR +https://www.skyscanner.com/ Cheap Flights: Find Cheap Airline Tickets & Flight Deals | Skyscanner +https://www.bookbaby.com/bookbaby-vs-ingram-spark/ BookBaby vs IngramSpark | Ingram | Ingram Books +https://www.rvupgradestore.com/RV-Water-Pump-Silencing-Kit-p/86-8349.htm Shurflo 94-591-01 RV Water Pump Silencing Kit +http://www.ultimatecampgrounds.com/index.php/products/full-map US AND CANADA CAMPGROUNDS - FORMAL AND DISPERSED PUBLIC CAMPING LOCATIONS - Website Map +http://www.boondocking.org/poi/search.aspx Boondocking - Search for a free camping location +https://www.freecampgrounds.com/ Free Campgrounds – Advice about free and cheap RV camping +https://www.ebay.com/itm/57-67-Dodge-Pickup-Truck-Park-Light-Lenses-NEW-Amber-Sweptline-/4615032392 57-67 Dodge Pickup Truck Park Light Lenses-NEW-Amber Sweptline | eBay +https://gitlab.com/jgkamat/jblock# Jay Kamat / jblock · GitLab +https://www.archlinux.org/news/ Arch Linux - News +https://www.jupiterbroadcasting.com/ Jupiter Broadcasting +https://www.goodreads.com/book/show/722003.Where_the_Sea_Breaks_Its_Back www.goodreads.com +https://www.goodreads.com/list/show/1742.Nautical_Tales www.goodreads.com +https://www.adventure-journal.com/2018/10/recommended-reading-siberia-vast-melancholic-hilarious/ www.adventure-journal.com +https://www.goodreads.com/list/show/23858.Books_About_Birds Books About Birds (350 books) +https://www.goodreads.com/book/show/1825697.Ornithology Ornithology by Frank B. Gill +https://www.goodreads.com/book/show/15925874-the-global-pigeon The Global Pigeon by Colin Jerolmack +https://www.goodreads.com/book/show/15701987-of-birds-and-birdsong Of Birds and Birdsong by M. Krishnan +https://www.goodreads.com/book/show/751584.Mockingbird_Song Mockingbird Song: Ecological Landscapes of the South by Jack Temple Kirby +https://www.goodreads.com/book/show/11484718-the-art-of-bird-finding The Art of Bird Finding by Pete Dunne +https://www.goodreads.com/book/show/18399847-an-eye-on-the-sparrow An Eye on the Sparrow: The Bird Lover's Bible by Sally Roth +https://www.goodreads.com/book/show/592020.All_Things_Reconsidered All Things Reconsidered: My Birding Adventures by Roger Tory Peterson +https://www.goodreads.com/book/show/26597286-better-birding Better Birding: Tips, Tools, and Concepts for the Field by George L. Armistead +https://www.goodreads.com/book/show/42777.Hope_is_the_Thing_with_Feathers Hope is the Thing with Feathers: A Personal Chronicle of Vanished Birds by Christopher Cokinos +https://www.ritmanlibrary.com/hermetically-open/# Hermetically Open Project +https://aoda.org/publications/articles-on-druidry/arsmemorativapt1/ Ars Memorativa: The Art of Memory (Part 1) – Ancient Order of Druids in America +https://artofmemory.com/forums/do-you-reuse-journeys-multiple-times-for-long-term-information Do You Reuse Journeys Multiple Times for Long-term Information? | Art of Memory Forum +https://www.goldenageofpiracy.org/pirate-ships/bermudian-sloop.php Pirate Ships | Bermudian Sloop +https://howtosail.wordpress.com/wind/ Wind | Beginner's Guide to Sailing +http://www.photographers1.com/Sailing/NauticalTerms&Nomenclature.html Nautical (Sailing) Terms (Words & Phrases), Nomenclature and Illustrations for Sailboating and Sailboarding (Windsurfing) +https://en.wikipedia.org/wiki/Bermuda_sloop Bermuda sloop - Wikipedia +https://maritimealoft.weebly.com/the-marks-of-a-sailor.html maritimealoft.weebly.com +http://www.photographers1.com/Sailing/WarshipNomenclature.jpg WarshipNomenclature.jpg (2860×2664) +https://en.wikipedia.org/wiki/Currach FloatingCurraghBedford - Currach - Wikipedia +https://en.wikipedia.org/wiki/Birlinn Birlinn - Wikipedia +https://www.asiatimes.com/ Asia Times | Covering geo-political news and current affairs across Asia | Homepage +https://pubs.ext.vt.edu/content/dam/pubs_ext_vt_edu/465/465-312/465-312_pdf.pdf 465-312_pdf.pdf +http://www.highstead.net/pdfs/2014-72-2-american-chestnut.pdf 2014-72-2-american-chestnut.pdf +https://en.wikipedia.org/wiki/Pink_House_(Charleston,_South_Carolina) Pink House (Charleston, South Carolina) - Wikipedia +https://books.google.com.mx/books?id=JFVosXwJ4wIC&printsec=frontcover#v=onepage&q&f=false Shout Because You're Free: The African American Ring Shout Tradition in ... - Art Rosenbaum - Google Libros +https://www.amazon.com/Early-American-Hurricanes-1492-1870-Ludlum/dp/B000RB6C4A Early American Hurricanes 1492-1870: David M. Ludlum: Amazon.com: Books +https://www.wpc.ncep.noaa.gov/research/roth/va18hur.htm Eighteenth Century Virginia Hurricanes +https://en.wikipedia.org/wiki/List_of_Atlantic_hurricanes_in_the_18th_century#cite_note-18 List of Atlantic hurricanes in the 18th century - Wikipedia +https://www.startpage.com/rvd/search?query=Early%20American%20hurricanes%201492-1870%2C%20David%20Ludlum&language=auto Early American hurricanes 1492-1870 David Ludlum - Startpage Search +https://www.genealogybank.com/newsletter-archives/201109/hurricanes-have-been-news-very-long-time Discoveries: Hurricanes Have Been in the News for a Very Long Time - Newsletter Archives - GenealogyBank +https://books.google.com.mx/books?id=Qi_VecDTnS4C&redir_esc=y Blackbeard's Cup and Stories of the Outer Banks - Charles Harry Whedbee - Google Libros +https://en.wikipedia.org/wiki/Blackbeard#/media/File:Edward_Teach_Commonly_Call'd_Black_Beard_(bw).jpg Blackbeard - Wikipedia +http://goldenageofpiracy.org/golden-age-of-piracy/ethics-and-morals-of-piracy.php Golden Age of Piracy | Ethics and Morals of Piracy +http://www.madehow.com/Volume-1/Chewing-Gum.html How chewing gum is made - manufacture, making, history, used, procedure, industry, machine, Raw Materials +https://www.google.com/search?hl=en&q=history%20of%20gum%20making%20in%20south%20carolina history of gum making in south carolina - Google Search +https://cpa.ds.npr.org/wltr/audio/2017/11/nature_notes_11-02-17.mp3 gum trees in south carolina +https://www.smithsonianmag.com/arts-culture/a-brief-history-of-chewing-gum-61020195/ A Brief History of Chewing Gum | Arts & Culture | Smithsonian +http://www.latinamericanstudies.org/slavery/AS-1952.pdf Slave Names in Colonial South Carolina +https://glc.yale.edu/sites/default/files/files/Gullah%20Language.pdf Gullah Language.pdf +http://gullahtours.com/gullah/gullah-words Gullah Words +https://wego.here.com/?map=20.89436,-100.6967,11,normal San Miguel Map +https://www.google.com/maps/d/viewer?mid=1tfonf3iKLlO0m5C7ml7tSjcKwTE&ll=20.910356021260842%2C-100.73865654786925&z=14 RUTAS URBANAS EN SAN MIGUEL DE ALLENDE - Google My Maps +https://www.acdphoto.com/contact-us www.acdphoto.com +https://wikitravel.org/en/San_Miguel_de_Allende San Miguel de Allende - Wikitravel +http://www.audubonmex.org/rl_pdf/Rio_Laja_Section_1_%20with_pics.pdf Rio_Laja_Section_1_ with_pics.pdf +https://www.alltrails.com/explore/recording/rio-laja-presa-allende-to-ex-hacienda-tirado Explore Rio Laja - Presa Allende to Ex-hacienda Tirado | AllTrails +http://www.audubonmex.org/riolaja.html Rio Laja +http://www.birdingpal.org/Mexico.htm Birding Pal Mexico +https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation +https://www.startpage.com/do/metasearch.pl?query=python%20split%20markdown%20file%20into%20smaller%20files python split markdown file into smaller files - Startpage Web Search +https://github.com/goetzf/Split-Markdown-for-Ulysses/blob/master/split_md_05.py https://github.com/goetzf/Split-Markdown-for-Ulysses/blob/master/split_md_05.py +https://stackoverflow.com/questions/9644110/difference-between-parsing-a-text-file-in-r-and-rb-mode python - Difference between parsing a text file in r and rb mode - Stack Overflow +http://themes.rockbox.org/index.php?target=sansafuze Rockbox Themes - Themes for Sandisk Sansa Fuze +https://en.wikipedia.org/wiki/SanDisk_Sansa SanDisk Sansa - Wikipedia +https://www.vqronline.org/about-vqr/submissions Submissions | VQR Online +https://lwn.net/op/AuthorGuide.lwn Writing for LWN [LWN.net] +https://themorningnews.org/ The Morning News +https://orionmagazine.org/guidelines-for-article-submissions/ Orion Magazine | Guidelines for Submissions +https://bhreview.org/general-submissions-guidelines/ General Submissions Guidelines | Bellingham Review +http://www.nereview.com/ner-submissions/ www.nereview.com/ner-submissions/ +https://thesunmagazine.org/issues/519/ways-to-take-your-coffee Ways To Take Your Coffee - The Sun Magazine +https://www.eventmagazine.ca/submit/ Submit - EVENTEVENT +https://www.narrativemagazine.com/ Narrative Magazine | Writers, Fiction, Poetry, Storytelling, Nonfiction, Art +https://www.hcn.org/about/submissions#writing Submission Guidelines — High Country News +https://www.counterpointpress.com/ Counterpoint Press: We are an author-driven publishing house that devotes all energy to the fresh, cutting-edge, and literary voices of our authors +https://undark.org/what-is-undark-looking-for/ What Is Undark Looking For? - Undark +https://thriftynomads.com/booking-cheapest-flight-possible-anywhere/ How to Book the Cheapest Flight Possible to Anywhere - Thrifty Nomads +https://sivers.org/exex Monthly self-expansion project | Derek Sivers +https://maps.usgs.gov/padus/ Protected Areas Viewer +https://translate.google.com/ Google Translate +https://www.discountramps.com/hitch-cargo-carrier-bike-rack/p/BCCB-BDX/ Apex Blue Devil Steel Hitch Bike Racks with Basket Cargo Carrier | Discount Ramps +https://www.thelinguist.com/about/#method Learn languages online from The Linguist, Steve Kaufmann +http://www.manlyphall.info/a-monthly-letter/ Manly P. Hall - Letters to Students - Complete +https://www.smdservers.net/SLWebSiteTemplate_V2/login.aspx?sCorpCode=plusXQfEYzAbflsUBpKVG9Q3w==&sLocationCode=hqFZTTuWsckQxgIDaX4ymw==&1=1 Login +https://lovelovething.com/cell-salts-easy-homeopathy/ Cell Salts: The Easy Homeopathy - it's a love/love thing +https://www.biddytarot.com/tarot-card-meanings/major-arcana/lovers/ Lovers Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/ace-of-pentacles/ Ace of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/king-of-pentacles/ King of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.schoolsfirstfcu.org/VirtualCapture/Screen/Load?OwnerId=756109&ApplicationScreenId=12292269&ScreenId=2012589 https://www.schoolsfirstfcu.org/VirtualCapture/Screen/Load?OwnerId=756109&ApplicationScreenId=12292269&ScreenId=2012589 +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/queen-of-cups/ Queen of Cups Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/sun/ Sun Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/eight-of-pentacles/ Eight of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/page-of-swords/ Page of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/two-of-cups/ Two of Cups Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/five-of-pentacles/ Five of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/ten-of-wands/ Ten of Wands Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/high-priestess/ High Priestess Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/empress/ Empress Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/page-of-pentacles/ Page of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/seven-of-pentacles/ Seven of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/world/ World Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/tower/ Tower Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/star/ Star Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/nine-of-pentacles/ Nine of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/emperor/ Emperor Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/ten-of-cups/ Ten of Cups Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/knight-of-pentacles/ Knight of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/devil/ Devil Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/page-of-wands/ Page of Wands Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/seven-of-swords/ Seven of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/queen-of-pentacles/ Queen of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/five-of-wands/ Five of Wands Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/hanged-man/ Hanged Man Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/justice/ Justice Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/queen-of-wands/ Queen of Wands Tarot Card Meanings | Biddy Tarot +https://en.m.wikipedia.org/wiki/After_Virtue After Virtue - Wikipedia +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/six-of-swords/ Six of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/five-of-swords/ Five of Swords Tarot Card Meanings | Biddy Tarot +https://duckduckgo.com/?q=ten+of+swords&t=vivaldi&ia=about ten of swords at DuckDuckGo +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/knight-of-wands/ Knight of Wands Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/eight-of-swords/ Eight of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/two-of-swords/ Two of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/two-of-pentacles/ Two of Pentacles Tarot Card Meanings | Biddy Tarot +https://redpocket.com/international-calling Red Pocket Mobile +https://www.smdservers.net/SLWebSiteTemplate_V2/login.aspx?sCorpCode=plusXQfEYzAbflsUBpKVG9Q3w%3D%3D&sLocationCode=hqFZTTuWsckQxgIDaX4ymw%3D%3D&1=1 Storage Unit +https://reviewmeta.com/ ReviewMeta.com - Amazon Review Checker +https://www.theenergyblueprint.com/causes-of-mitochondrial-dysfunction/ The Most Common Causes of Mitochondrial Dysfunction and 9 Tips to Improve Mitochondrial Health with Michael Chang, MD - The Energy Blueprint +https://amazingribs.com/tested-recipes/vegetables-and-salads/simple-creamy-southern-coleslaw-recipe The Best Basic Creamy Southern Coleslaw Ever +https://amazingribs.com/tested-recipes/spice-rubs-and-pastes/meatheads-memphis-dust-rub-recipe Meathead's World Famous Memphis Dust Rub diff --git a/.config/qutebrowser/bookmarks/urls.bak b/.config/qutebrowser/bookmarks/urls.bak new file mode 100644 index 0000000..8d98bf1 --- /dev/null +++ b/.config/qutebrowser/bookmarks/urls.bak @@ -0,0 +1,133 @@ +https://awstats.luxagraf.net/cgi-bin/awstats.pl?config=luxagraf.net Statistics for luxagraf.net (2019-03) - main +https://start.duckduckgo.com/ DuckDuckGo — Privacy, simplified. +https://western-aspen-alliance.org/media Media - Western Aspen Alliance +https://www.npr.org/sections/goatsandsoda/2019/03/13/685533353/a-playful-way-to-teach-kids-to-control-their-anger How Inuit Parents Raise Kids Without Yelling — And Teach Them To Control Anger : Goats and Soda : NPR +https://www.skyscanner.com/ Cheap Flights: Find Cheap Airline Tickets & Flight Deals | Skyscanner +https://www.bookbaby.com/bookbaby-vs-ingram-spark/ BookBaby vs IngramSpark | Ingram | Ingram Books +https://www.rvupgradestore.com/RV-Water-Pump-Silencing-Kit-p/86-8349.htm Shurflo 94-591-01 RV Water Pump Silencing Kit +http://www.ultimatecampgrounds.com/index.php/products/full-map US AND CANADA CAMPGROUNDS - FORMAL AND DISPERSED PUBLIC CAMPING LOCATIONS - Website Map +http://www.boondocking.org/poi/search.aspx Boondocking - Search for a free camping location +https://www.freecampgrounds.com/ Free Campgrounds – Advice about free and cheap RV camping +https://www.ebay.com/itm/57-67-Dodge-Pickup-Truck-Park-Light-Lenses-NEW-Amber-Sweptline-/4615032392 57-67 Dodge Pickup Truck Park Light Lenses-NEW-Amber Sweptline | eBay +https://gitlab.com/jgkamat/jblock# Jay Kamat / jblock · GitLab +Arch Linux - News https://www.archlinux.org/news/ +Jupiter Broadcasting https://www.jupiterbroadcasting.com/ +LINUX Unplugged https://linuxunplugged.com/ +earth :: a global map of wind, weather, and ocean conditions https://earth.nullschool.net/ +Ars Technica https://arstechnica.com/ +https://www.goodreads.com/book/show/722003.Where_the_Sea_Breaks_Its_Back www.goodreads.com +www.goodreads.com https://www.goodreads.com/list/show/1742.Nautical_Tales +www.adventure-journal.com https://www.adventure-journal.com/2018/10/recommended-reading-siberia-vast-melancholic-hilarious/ +Books About Birds (350 books) https://www.goodreads.com/list/show/23858.Books_About_Birds +Ornithology by Frank B. Gill https://www.goodreads.com/book/show/1825697.Ornithology +The Global Pigeon by Colin Jerolmack https://www.goodreads.com/book/show/15925874-the-global-pigeon +Of Birds and Birdsong by M. Krishnan https://www.goodreads.com/book/show/15701987-of-birds-and-birdsong +Mockingbird Song: Ecological Landscapes of the South by Jack Temple Kirby https://www.goodreads.com/book/show/751584.Mockingbird_Song +The Art of Bird Finding by Pete Dunne https://www.goodreads.com/book/show/11484718-the-art-of-bird-finding +An Eye on the Sparrow: The Bird Lover's Bible by Sally Roth https://www.goodreads.com/book/show/18399847-an-eye-on-the-sparrow +All Things Reconsidered: My Birding Adventures by Roger Tory Peterson https://www.goodreads.com/book/show/592020.All_Things_Reconsidered +Better Birding: Tips, Tools, and Concepts for the Field by George L. Armistead https://www.goodreads.com/book/show/26597286-better-birding +Hope is the Thing with Feathers: A Personal Chronicle of Vanished Birds by Christopher Cokinos https://www.goodreads.com/book/show/42777.Hope_is_the_Thing_with_Feathers +Hermetically Open Project https://www.ritmanlibrary.com/hermetically-open/# +Ars Memorativa: The Art of Memory (Part 1) – Ancient Order of Druids in America https://aoda.org/publications/articles-on-druidry/arsmemorativapt1/ +Do You Reuse Journeys Multiple Times for Long-term Information? | Art of Memory Forum https://artofmemory.com/forums/do-you-reuse-journeys-multiple-times-for-long-term-information +Pirate Ships | Bermudian Sloop https://www.goldenageofpiracy.org/pirate-ships/bermudian-sloop.php +Wind | Beginner's Guide to Sailing https://howtosail.wordpress.com/wind/ +Nautical (Sailing) Terms (Words & Phrases), Nomenclature and Illustrations for Sailboating and Sailboarding (Windsurfing) http://www.photographers1.com/Sailing/NauticalTerms&Nomenclature.html +Bermuda sloop - Wikipedia https://en.wikipedia.org/wiki/Bermuda_sloop +maritimealoft.weebly.com https://maritimealoft.weebly.com/the-marks-of-a-sailor.html +WarshipNomenclature.jpg (2860×2664) http://www.photographers1.com/Sailing/WarshipNomenclature.jpg +FloatingCurraghBedford - Currach - Wikipedia https://en.wikipedia.org/wiki/Currach +Birlinn - Wikipedia https://en.wikipedia.org/wiki/Birlinn +Asia Times | Covering geo-political news and current affairs across Asia | Homepage https://www.asiatimes.com/ +465-312_pdf.pdf https://pubs.ext.vt.edu/content/dam/pubs_ext_vt_edu/465/465-312/465-312_pdf.pdf +2014-72-2-american-chestnut.pdf http://www.highstead.net/pdfs/2014-72-2-american-chestnut.pdf +Pink House (Charleston, South Carolina) - Wikipedia https://en.wikipedia.org/wiki/Pink_House_(Charleston,_South_Carolina) +Shout Because You're Free: The African American Ring Shout Tradition in ... - Art Rosenbaum - Google Libros https://books.google.com.mx/books?id=JFVosXwJ4wIC&printsec=frontcover#v=onepage&q&f=false +Early American Hurricanes 1492-1870: David M. Ludlum: Amazon.com: Books https://www.amazon.com/Early-American-Hurricanes-1492-1870-Ludlum/dp/B000RB6C4A +Eighteenth Century Virginia Hurricanes https://www.wpc.ncep.noaa.gov/research/roth/va18hur.htm +List of Atlantic hurricanes in the 18th century - Wikipedia https://en.wikipedia.org/wiki/List_of_Atlantic_hurricanes_in_the_18th_century#cite_note-18 +Early American hurricanes 1492-1870 David Ludlum - Startpage Search https://www.startpage.com/rvd/search?query=Early%20American%20hurricanes%201492-1870%2C%20David%20Ludlum&language=auto +Discoveries: Hurricanes Have Been in the News for a Very Long Time - Newsletter Archives - GenealogyBank https://www.genealogybank.com/newsletter-archives/201109/hurricanes-have-been-news-very-long-time +Blackbeard's Cup and Stories of the Outer Banks - Charles Harry Whedbee - Google Libros https://books.google.com.mx/books?id=Qi_VecDTnS4C&redir_esc=y +Blackbeard - Wikipedia https://en.wikipedia.org/wiki/Blackbeard#/media/File:Edward_Teach_Commonly_Call'd_Black_Beard_(bw).jpg +Golden Age of Piracy | Ethics and Morals of Piracy http://goldenageofpiracy.org/golden-age-of-piracy/ethics-and-morals-of-piracy.php +How chewing gum is made - manufacture, making, history, used, procedure, industry, machine, Raw Materials http://www.madehow.com/Volume-1/Chewing-Gum.html +history of gum making in south carolina - Google Search https://www.google.com/search?hl=en&q=history%20of%20gum%20making%20in%20south%20carolina +gum trees in south carolina https://cpa.ds.npr.org/wltr/audio/2017/11/nature_notes_11-02-17.mp3 +A Brief History of Chewing Gum | Arts & Culture | Smithsonian https://www.smithsonianmag.com/arts-culture/a-brief-history-of-chewing-gum-61020195/ +Slave Names in Colonial South Carolina http://www.latinamericanstudies.org/slavery/AS-1952.pdf +Gullah Language.pdf https://glc.yale.edu/sites/default/files/files/Gullah%20Language.pdf +Gullah Words http://gullahtours.com/gullah/gullah-words +San Miguel Map https://wego.here.com/?map=20.89436,-100.6967,11,normal +RUTAS URBANAS EN SAN MIGUEL DE ALLENDE - Google My Maps https://www.google.com/maps/d/viewer?mid=1tfonf3iKLlO0m5C7ml7tSjcKwTE&ll=20.910356021260842%2C-100.73865654786925&z=14 +python split markdown file into smaller files - Startpage Web Search https://www.startpage.com/do/metasearch.pl?query=python%20split%20markdown%20file%20into%20smaller%20files +https://github.com/goetzf/Split-Markdown-for-Ulysses/blob/master/split_md_05.py https://github.com/goetzf/Split-Markdown-for-Ulysses/blob/master/split_md_05.py +python - Difference between parsing a text file in r and rb mode - Stack Overflow https://stackoverflow.com/questions/9644110/difference-between-parsing-a-text-file-in-r-and-rb-mode +Democracy at Work Institute https://institute.coop/ +Rockbox Themes - Themes for Sandisk Sansa Fuze http://themes.rockbox.org/index.php?target=sansafuze +SanDisk Sansa - Wikipedia https://en.wikipedia.org/wiki/SanDisk_Sansa +Submissions | VQR Online https://www.vqronline.org/about-vqr/submissions +The Morning News https://themorningnews.org/ +Orion Magazine | Guidelines for Submissions https://orionmagazine.org/guidelines-for-article-submissions/ +General Submissions Guidelines | Bellingham Review https://bhreview.org/general-submissions-guidelines/ +www.nereview.com/ner-submissions/ http://www.nereview.com/ner-submissions/ +Ways To Take Your Coffee - The Sun Magazine https://thesunmagazine.org/issues/519/ways-to-take-your-coffee +Submit - EVENTEVENT https://www.eventmagazine.ca/submit/ +Narrative Magazine | Writers, Fiction, Poetry, Storytelling, Nonfiction, Art https://www.narrativemagazine.com/ +Submission Guidelines — High Country News https://www.hcn.org/about/submissions#writing +Counterpoint Press: We are an author-driven publishing house that devotes all energy to the fresh, cutting-edge, and literary voices of our authors https://www.counterpointpress.com/ +What Is Undark Looking For? - Undark https://undark.org/what-is-undark-looking-for/ +How to Book the Cheapest Flight Possible to Anywhere - Thrifty Nomads https://thriftynomads.com/booking-cheapest-flight-possible-anywhere/ +57-67 Dodge Pickup Truck Park Light Lenses-NEW-Amber Sweptline | eBay https://www.ebay.com/itm/57-67-Dodge-Pickup-Truck-Park-Light-Lenses-NEW-Amber-Sweptline-/4615032392 +Monthly self-expansion project | Derek Sivers https://sivers.org/exex +save page javascript:if(document.getSelection){s=document.getSelection();}else{s='';};document.location='https://live.luxagraf.net/admin/links/link/add?&url='+encodeURIComponent(location.href)+'&description='+encodeURIComponent(s)+'&title='+encodeURIComponent(document.title) +Site administration | Django site admin https://live.luxagraf.net/admin/ +lux stats https://awstats.luxagraf.net/cgi-bin/awstats.pl?config=luxagraf.net +Luxagraf https://luxagraf.net/ +Real-Time U.S. Satellite Weather http://www.ssec.wisc.edu/data/us_comp/large +Protected Areas Viewer https://maps.usgs.gov/padus/ +Google Translate https://translate.google.com/ +Apex Blue Devil Steel Hitch Bike Racks with Basket Cargo Carrier | Discount Ramps https://www.discountramps.com/hitch-cargo-carrier-bike-rack/p/BCCB-BDX/ +Manly P. Hall - Letters to Students - Complete http://www.manlyphall.info/a-monthly-letter/ +luxagraf google search tool https://search.google.com/search-console/links?resource_id=https%3A%2F%2Fluxagraf.net%2F +Stats https://awstats.luxagraf.net/cgi-bin/awstats.pl?config=luxagraf.net +Login https://www.smdservers.net/SLWebSiteTemplate_V2/login.aspx?sCorpCode=plusXQfEYzAbflsUBpKVG9Q3w==&sLocationCode=hqFZTTuWsckQxgIDaX4ymw==&1=1 +Cell Salts: The Easy Homeopathy - it's a love/love thing https://lovelovething.com/cell-salts-easy-homeopathy/ +Lovers Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/lovers/ +Ace of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/ace-of-pentacles/ +King of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/king-of-pentacles/ +Queen of Cups Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/queen-of-cups/ +Sun Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/sun/ +Eight of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/eight-of-pentacles/ +Page of Swords Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/page-of-swords/ +Two of Cups Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/two-of-cups/ +Five of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/five-of-pentacles/ +Ten of Wands Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/ten-of-wands/ +High Priestess Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/high-priestess/ +Empress Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/empress/ +Page of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/page-of-pentacles/ +Seven of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/seven-of-pentacles/ +World Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/world/ +Tower Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/tower/ +Star Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/star/ +Nine of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/nine-of-pentacles/ +Emperor Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/emperor/ +Ten of Cups Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/ten-of-cups/ +Knight of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/knight-of-pentacles/ +Devil Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/devil/ +Page of Wands Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/page-of-wands/ +Seven of Swords Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/seven-of-swords/ +Queen of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/queen-of-pentacles/ +Five of Wands Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/five-of-wands/ +Hanged Man Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/hanged-man/ +Justice Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/major-arcana/justice/ +Queen of Wands Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/queen-of-wands/ +After Virtue - Wikipedia https://en.m.wikipedia.org/wiki/After_Virtue +Six of Swords Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/six-of-swords/ +Five of Swords Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/five-of-swords/ +ten of swords at DuckDuckGo https://duckduckgo.com/?q=ten+of+swords&t=vivaldi&ia=about +Knight of Wands Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/knight-of-wands/ +Eight of Swords Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/eight-of-swords/ +Two of Swords Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/two-of-swords/ +Two of Pentacles Tarot Card Meanings | Biddy Tarot https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/two-of-pentacles/ diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py new file mode 100644 index 0000000..a87d434 --- /dev/null +++ b/.config/qutebrowser/config.py @@ -0,0 +1,478 @@ +import os + +c.content.cookies.accept = "no-3rdparty" +c.content.cookies.store = True + +c.downloads.location.directory = '/home/lxf/temp/' +c.downloads.location.suggestion = "both" +c.downloads.remove_finished = 20 + +c.spellcheck.languages = ["en-US"] + +c.auto_save.session = True + +c.content.pdfjs = True + +c.session.lazy_restore = True + +c.tabs.background = True +c.tabs.position = "bottom" + +c.content.autoplay = False +c.editor.command = ['alacritty', '-e', 'nvim', '{}'] + +c.url.default_page = "about:blank" +# searches +c.url.searchengines['DEFAULT'] = 'https://duckduckgo.com/?q={}' +c.url.searchengines['s'] = 'https://www.startpage.com/rvd/search?query={}&language=auto' +c.url.searchengines['g'] = 'http://www.google.com/search?hl=en&source=hp&ie=ISO-8859-l&q={}' +c.url.searchengines['a'] = 'https://wiki.archlinux.org/?search={}' +c.url.searchengines['y'] = 'https://www.youtube.com/results?search_query={}' +c.url.searchengines['w'] = 'https://secure.wikimedia.org/wikipedia/en/w/index.php?title=Special%%3ASearch&search={}' +c.url.searchengines['ap'] = 'https://www.archlinux.org/packages/?sort=&q={}' +c.url.searchengines['aw'] = 'https://www.amazon.com/s?k={}' +c.url.searchengines['w'] = 'https://www.google.com/search?q={}+site%3Awired.com' + +# aliases +c.aliases['lux'] = 'open -t https://live.luxagraf.net/admin/' +c.aliases['aws'] = 'open -t https://console.aws.amazon.com/' +c.aliases['dri'] = 'open -t https://drive.google.com/drive/folders/1Rbbmkz5_Oi9bFzzoNbGtju_RbDMnv2Ul' +c.aliases['co'] = 'open -t https://copilot.condenast.io/wrd/dashboard' +c.aliases['air'] = 'open -t https://airtable.com/tblV9JHwZkvs5aHRR/viwGZg2OuVNR8BUiO?blocks=hide' +c.aliases['gma'] = 'open -t https://mail.google.com/mail/u/0/' + +# toggle JS +config.bind("xjt", "set content.javascript.enabled true") +config.bind("xjf", "set content.javascript.enabled false") + +# block JS out of the box: +c.content.javascript.enabled = False +js_whitelist = [ + "*://localhost/*", + "*://127.0.0.1/*", + "*://github.com/*", + "*://gitlab.com/*", + "*://duckduckgo.com/*", + "*://*.youtube.com/*", + "*://*.luxagraf.net/*" + "*://translate.google.com/*", +] +private_whitelist = os.path.expanduser("~/.config/qutebrowser/private-whitelist") +if os.path.exists(private_whitelist): + with open(private_whitelist) as f: + js_whitelist += filter(lambda l: bool(l), f.read().split("\n")) + +for site in js_whitelist: + with config.pattern(site) as p: + p.content.javascript.enabled = True + + +# keybinds +config.unbind('J', mode='normal') +config.unbind('K', mode='normal') +config.bind('J', 'tab-prev', mode='normal') +config.bind('K', 'tab-next', mode='normal') + +# Userscripts +# search history/bookmarks in dmenu +config.bind (',m', 'spawn --userscript dmenu-open ', mode='normal') +config.bind (',o', 'spawn --userscript dmenu-open ', mode='normal') +config.bind (',O', 'spawn --userscript dmenu-open --tab', mode='normal') + +# call readability on page +config.bind (',r', 'spawn --userscript readability', mode='normal') + +#download current or hinted video +config.bind(';y', 'spawn --userscript youtube-dl') +config.bind(';yh', 'hint links --userscript youtube-dl') + +# watch current or hinted video +config.bind(',yl', 'hint links spawn --detach mpv --force-window yes {hint-url}') +config.bind(',yv', 'spawn --detach mpv --force-window yes {url}') + +# open selected text in tab +config.bind (',f', 'open {primary}') +config.bind (',F', 'open --tab {primary}') + +config.bind (',e', 'open-editor') + +# save bookmark to luxagraf +config.bind(',s', "jseval --quiet if(document.getSelection){s=document.getSelection();}else{s='';};document.location='https://live.luxagraf.net/admin/links/link/add?&url='+encodeURIComponent(location.href)+'&description='+encodeURIComponent(s)+'&title='+encodeURIComponent(document.title);") + +import sys, os + +sys.path.append(os.path.join(sys.path[0], "jblock")) +config.source("jblock/jblock/integrations/qutebrowser.py") +config.set( + "content.host_blocking.lists", + [ + "https://easylist.to/easylist/easylist.txt", + "https://easylist.to/easylist/easyprivacy.txt", + "https://easylist.to/easylist/fanboy-annoyance.txt", + "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt", + "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/annoyances.txt", + "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badware.txt", + "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/privacy.txt", + "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/resource-abuse.txt", + "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/unbreak.txt", + "https://www.malwaredomainlist.com/hostslist/hosts.txt", + ], +) + +solarized = { + 'base03': '#002b36', + 'base02': '#073642', + 'base01': '#586e75', + 'base00': '#657b83', + 'base0': '#839496', + 'base1': '#93a1a1', + 'base2': '#eee8d5', + 'base3': '#fdf6e3', + 'yellow': '#b58900', + 'orange': '#cb4b16', + 'red': '#dc322f', + 'magenta': '#d33682', + 'violet': '#6c71c4', + 'blue': '#268bd2', + 'cyan': '#2aa198', + 'green': '#859900' +} + +## This is here so configs done via the GUI are still loaded. +## Remove it to not load settings done via the GUI. +config.load_autoconfig() + +## Background color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.bg = solarized['base03'] + +## Bottom border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.border.bottom = solarized['base03'] + +## Top border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.border.top = solarized['base03'] + +## Foreground color of completion widget category headers. +## Type: QtColor +c.colors.completion.category.fg = solarized['base3'] + +## Background color of the completion widget for even rows. +## Type: QssColor +c.colors.completion.even.bg = solarized['base02'] + +## Text color of the completion widget. +## Type: QtColor +c.colors.completion.fg = solarized['base1'] + +## Background color of the selected completion item. +## Type: QssColor +c.colors.completion.item.selected.bg = solarized['violet'] + +## Bottom border color of the selected completion item. +## Type: QssColor +c.colors.completion.item.selected.border.bottom = solarized['violet'] + +## Top border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.item.selected.border.top = solarized['violet'] + +## Foreground color of the selected completion item. +## Type: QtColor +c.colors.completion.item.selected.fg = solarized['base3'] + +## Foreground color of the matched text in the completion. +## Type: QssColor +c.colors.completion.match.fg = solarized['base2'] + +## Background color of the completion widget for odd rows. +## Type: QssColor +c.colors.completion.odd.bg = solarized['base02'] + +## Color of the scrollbar in completion view +## Type: QssColor +c.colors.completion.scrollbar.bg = solarized['base1'] + +## Color of the scrollbar handle in completion view. +## Type: QssColor +c.colors.completion.scrollbar.fg = solarized['base2'] + +## Background color for the download bar. +## Type: QssColor +c.colors.downloads.bar.bg = solarized['base03'] + +## Background color for downloads with errors. +## Type: QtColor +c.colors.downloads.error.bg = solarized['red'] + +## Foreground color for downloads with errors. +## Type: QtColor +c.colors.downloads.error.fg = solarized['base3'] + +## Color gradient start for download backgrounds. +## Type: QtColor +# c.colors.downloads.start.bg = '#0000aa' + +## Color gradient start for download text. +## Type: QtColor +c.colors.downloads.start.fg = solarized['base3'] + +## Color gradient stop for download backgrounds. +## Type: QtColor +# c.colors.downloads.stop.bg = '#00aa00' + +## Color gradient end for download text. +## Type: QtColor +# c.colors.downloads.stop.fg = solarized['base3'] + +## Color gradient interpolation system for download backgrounds. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.bg = 'rgb' + +## Color gradient interpolation system for download text. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.fg = 'rgb' + +## Background color for hints. Note that you can use a `rgba(...)` value +## for transparency. +## Type: QssColor +c.colors.hints.bg = solarized['violet'] + +## Font color for hints. +## Type: QssColor +c.colors.hints.fg = solarized['base3'] + +## Font color for the matched part of hints. +## Type: QssColor +c.colors.hints.match.fg = solarized['base1'] + +## Background color of the keyhint widget. +## Type: QssColor +# c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)' + +## Text color for the keyhint widget. +## Type: QssColor +c.colors.keyhint.fg = solarized['base3'] + +## Highlight color for keys to complete the current keychain. +## Type: QssColor +c.colors.keyhint.suffix.fg = solarized['yellow'] + +## Background color of an error message. +## Type: QssColor +c.colors.messages.error.bg = solarized['red'] + +## Border color of an error message. +## Type: QssColor +c.colors.messages.error.border = solarized['red'] + +## Foreground color of an error message. +## Type: QssColor +c.colors.messages.error.fg = solarized['base3'] + +## Background color of an info message. +## Type: QssColor +c.colors.messages.info.bg = solarized['base03'] + +## Border color of an info message. +## Type: QssColor +c.colors.messages.info.border = solarized['base03'] + +## Foreground color an info message. +## Type: QssColor +c.colors.messages.info.fg = solarized['base3'] + +## Background color of a warning message. +## Type: QssColor +c.colors.messages.warning.bg = solarized['orange'] + +## Border color of a warning message. +## Type: QssColor +c.colors.messages.warning.border = solarized['orange'] + +## Foreground color a warning message. +## Type: QssColor +c.colors.messages.warning.fg = solarized['base3'] + +## Background color for prompts. +## Type: QssColor +c.colors.prompts.bg = solarized['base02'] + +## Border used around UI elements in prompts. +## Type: String +c.colors.prompts.border = '1px solid ' + solarized['base3'] + +## Foreground color for prompts. +## Type: QssColor +c.colors.prompts.fg = solarized['base3'] + +## Background color for the selected item in filename prompts. +## Type: QssColor +c.colors.prompts.selected.bg = solarized['base01'] + +## Background color of the statusbar in caret mode. +## Type: QssColor +c.colors.statusbar.caret.bg = solarized['blue'] + +## Foreground color of the statusbar in caret mode. +## Type: QssColor +c.colors.statusbar.caret.fg = solarized['base1'] + +## Background color of the statusbar in caret mode with a selection. +## Type: QssColor +c.colors.statusbar.caret.selection.bg = solarized['violet'] + +## Foreground color of the statusbar in caret mode with a selection. +## Type: QssColor +c.colors.statusbar.caret.selection.fg = solarized['base1'] + +## Background color of the statusbar in command mode. +## Type: QssColor +c.colors.statusbar.command.bg = solarized['base03'] + +## Foreground color of the statusbar in command mode. +## Type: QssColor +c.colors.statusbar.command.fg = solarized['base1'] + +## Background color of the statusbar in private browsing + command mode. +## Type: QssColor +c.colors.statusbar.command.private.bg = solarized['base01'] + +## Foreground color of the statusbar in private browsing + command mode. +## Type: QssColor +c.colors.statusbar.command.private.fg = solarized['base3'] + +## Background color of the statusbar in insert mode. +## Type: QssColor +c.colors.statusbar.insert.bg = solarized['base02'] + +## Foreground color of the statusbar in insert mode. +## Type: QssColor +c.colors.statusbar.insert.fg = solarized['base1'] + +## Background color of the statusbar. +## Type: QssColor +c.colors.statusbar.normal.bg = solarized['base03'] + +## Foreground color of the statusbar. +## Type: QssColor +c.colors.statusbar.normal.fg = solarized['base1'] + +## Background color of the statusbar in passthrough mode. +## Type: QssColor +c.colors.statusbar.passthrough.bg = solarized['base02'] + +## Foreground color of the statusbar in passthrough mode. +## Type: QssColor +c.colors.statusbar.passthrough.fg = solarized['base1'] + +## Background color of the statusbar in private browsing mode. +## Type: QssColor +c.colors.statusbar.private.bg = solarized['base01'] + +## Foreground color of the statusbar in private browsing mode. +## Type: QssColor +c.colors.statusbar.private.fg = solarized['base3'] + +## Background color of the progress bar. +## Type: QssColor +c.colors.statusbar.progress.bg = solarized['base1'] + +## Foreground color of the URL in the statusbar on error. +## Type: QssColor +c.colors.statusbar.url.error.fg = solarized['red'] + +## Default foreground color of the URL in the statusbar. +## Type: QssColor +c.colors.statusbar.url.fg = solarized['base1'] + +## Foreground color of the URL in the statusbar for hovered links. +## Type: QssColor +c.colors.statusbar.url.hover.fg = solarized['base2'] + +## Foreground color of the URL in the statusbar on successful load +## (http). +## Type: QssColor +c.colors.statusbar.url.success.http.fg = solarized['base1'] + +## Foreground color of the URL in the statusbar on successful load +## (https). +## Type: QssColor +c.colors.statusbar.url.success.https.fg = solarized['base1'] + +## Foreground color of the URL in the statusbar when there's a warning. +## Type: QssColor +c.colors.statusbar.url.warn.fg = solarized['yellow'] + +## Background color of the tab bar. +## Type: QtColor +# c.colors.tabs.bar.bg = '#555555' + +## Background color of unselected even tabs. +## Type: QtColor +c.colors.tabs.even.bg = solarized['base02'] + +## Foreground color of unselected even tabs. +## Type: QtColor +c.colors.tabs.even.fg = solarized['base1'] + +## Color for the tab indicator on errors. +## Type: QtColor +c.colors.tabs.indicator.error = solarized['red'] + +## Color gradient start for the tab indicator. +## Type: QtColor +c.colors.tabs.indicator.start = solarized['violet'] + +## Color gradient end for the tab indicator. +## Type: QtColor +c.colors.tabs.indicator.stop = solarized['orange'] + +## Color gradient interpolation system for the tab indicator. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.tabs.indicator.system = 'rgb' + +## Background color of unselected odd tabs. +## Type: QtColor +c.colors.tabs.odd.bg = solarized['base03'] + +## Foreground color of unselected odd tabs. +## Type: QtColor +c.colors.tabs.odd.fg = solarized['base1'] + +## Background color of selected even tabs. +## Type: QtColor +c.colors.tabs.selected.even.bg = solarized['violet'] + +## Foreground color of selected even tabs. +## Type: QtColor +c.colors.tabs.selected.even.fg = solarized['base2'] + +## Background color of selected odd tabs. +## Type: QtColor +c.colors.tabs.selected.odd.bg = solarized['violet'] + +## Foreground color of selected odd tabs. +## Type: QtColor +c.colors.tabs.selected.odd.fg = solarized['base2'] + +## Background color for webpages if unset (or empty to use the theme's +## color) +## Type: QtColor +# c.colors.webpage.bg = 'white' diff --git a/.config/qutebrowser/keys.conf b/.config/qutebrowser/keys.conf new file mode 100644 index 0000000..b8cd8d0 --- /dev/null +++ b/.config/qutebrowser/keys.conf @@ -0,0 +1,2 @@ +bind J tab-prev +bind K tab-next diff --git a/.config/qutebrowser/private-whitelist b/.config/qutebrowser/private-whitelist new file mode 100644 index 0000000..29351e6 --- /dev/null +++ b/.config/qutebrowser/private-whitelist @@ -0,0 +1,10 @@ +*://airtable.com/*, +*://auth.condenast.io/*, +*://docs.google.com/*, +*://condenast-hub.okta-emea.com/*, +*://mail.google.com/*, +*://condenast.okta.com/*, +*://copilot.condenast.io/*, +*://wd5.myworkday.com/*, +*://bumfuzzle.com/*, +*://pmags.com/*, diff --git a/.config/qutebrowser/quickmarks b/.config/qutebrowser/quickmarks new file mode 100644 index 0000000..983c56a --- /dev/null +++ b/.config/qutebrowser/quickmarks @@ -0,0 +1,13 @@ +ad https://live.luxagraf.net/admin/ +li https://live.luxagraf.net/ +lux https://luxagraf.net/ +dev http://10.171.188.84:8000/ +stats https://awstats.luxagraf.net/cgi-bin/awstats.pl?config=luxagraf.net +arch https://www.archlinux.org/news/ +wind https://earth.nullschool.net/ +weather http://www.ssec.wisc.edu/data/us_comp/large +map https://maps.usgs.gov/padus/ +trans https://translate.google.com/ +salts https://lovelovething.com/cell-salts-easy-homeopathy/ +sch https://www.schoolsfirstfcu.org/ +sw http://schwab.com/ diff --git a/.config/qutebrowser/urls_0 b/.config/qutebrowser/urls_0 new file mode 100644 index 0000000..53db6e9 --- /dev/null +++ b/.config/qutebrowser/urls_0 @@ -0,0 +1,132 @@ +https://awstats.luxagraf.net/cgi-bin/awstats.pl?config=luxagraf.net Statistics for luxagraf.net (2019-03) - main +https://start.duckduckgo.com/ DuckDuckGo — Privacy, simplified. +https://western-aspen-alliance.org/media Media - Western Aspen Alliance +https://www.npr.org/sections/goatsandsoda/2019/03/13/685533353/a-playful-way-to-teach-kids-to-control-their-anger How Inuit Parents Raise Kids Without Yelling — And Teach Them To Control Anger : Goats and Soda : NPR +https://www.skyscanner.com/ Cheap Flights: Find Cheap Airline Tickets & Flight Deals | Skyscanner +https://www.bookbaby.com/bookbaby-vs-ingram-spark/ BookBaby vs IngramSpark | Ingram | Ingram Books +https://www.rvupgradestore.com/RV-Water-Pump-Silencing-Kit-p/86-8349.htm Shurflo 94-591-01 RV Water Pump Silencing Kit +http://www.ultimatecampgrounds.com/index.php/products/full-map US AND CANADA CAMPGROUNDS - FORMAL AND DISPERSED PUBLIC CAMPING LOCATIONS - Website Map +http://www.boondocking.org/poi/search.aspx Boondocking - Search for a free camping location +https://www.freecampgrounds.com/ Free Campgrounds – Advice about free and cheap RV camping +https://www.ebay.com/itm/57-67-Dodge-Pickup-Truck-Park-Light-Lenses-NEW-Amber-Sweptline-/4615032392 57-67 Dodge Pickup Truck Park Light Lenses-NEW-Amber Sweptline | eBay +https://gitlab.com/jgkamat/jblock# Jay Kamat / jblock · GitLab +https://www.archlinux.org/news/ Arch Linux - News +https://www.jupiterbroadcasting.com/ Jupiter Broadcasting +https://www.goodreads.com/book/show/722003.Where_the_Sea_Breaks_Its_Back www.goodreads.com +https://www.goodreads.com/list/show/1742.Nautical_Tales www.goodreads.com +https://www.adventure-journal.com/2018/10/recommended-reading-siberia-vast-melancholic-hilarious/ www.adventure-journal.com +https://www.goodreads.com/list/show/23858.Books_About_Birds Books About Birds (350 books) +https://www.goodreads.com/book/show/1825697.Ornithology Ornithology by Frank B. Gill +https://www.goodreads.com/book/show/15925874-the-global-pigeon The Global Pigeon by Colin Jerolmack +https://www.goodreads.com/book/show/15701987-of-birds-and-birdsong Of Birds and Birdsong by M. Krishnan +https://www.goodreads.com/book/show/751584.Mockingbird_Song Mockingbird Song: Ecological Landscapes of the South by Jack Temple Kirby +https://www.goodreads.com/book/show/11484718-the-art-of-bird-finding The Art of Bird Finding by Pete Dunne +https://www.goodreads.com/book/show/18399847-an-eye-on-the-sparrow An Eye on the Sparrow: The Bird Lover's Bible by Sally Roth +https://www.goodreads.com/book/show/592020.All_Things_Reconsidered All Things Reconsidered: My Birding Adventures by Roger Tory Peterson +https://www.goodreads.com/book/show/26597286-better-birding Better Birding: Tips, Tools, and Concepts for the Field by George L. Armistead +https://www.goodreads.com/book/show/42777.Hope_is_the_Thing_with_Feathers Hope is the Thing with Feathers: A Personal Chronicle of Vanished Birds by Christopher Cokinos +https://www.ritmanlibrary.com/hermetically-open/# Hermetically Open Project +https://aoda.org/publications/articles-on-druidry/arsmemorativapt1/ Ars Memorativa: The Art of Memory (Part 1) – Ancient Order of Druids in America +https://artofmemory.com/forums/do-you-reuse-journeys-multiple-times-for-long-term-information Do You Reuse Journeys Multiple Times for Long-term Information? | Art of Memory Forum +https://www.goldenageofpiracy.org/pirate-ships/bermudian-sloop.php Pirate Ships | Bermudian Sloop +https://howtosail.wordpress.com/wind/ Wind | Beginner's Guide to Sailing +http://www.photographers1.com/Sailing/NauticalTerms&Nomenclature.html Nautical (Sailing) Terms (Words & Phrases), Nomenclature and Illustrations for Sailboating and Sailboarding (Windsurfing) +https://en.wikipedia.org/wiki/Bermuda_sloop Bermuda sloop - Wikipedia +https://maritimealoft.weebly.com/the-marks-of-a-sailor.html maritimealoft.weebly.com +http://www.photographers1.com/Sailing/WarshipNomenclature.jpg WarshipNomenclature.jpg (2860×2664) +https://en.wikipedia.org/wiki/Currach FloatingCurraghBedford - Currach - Wikipedia +https://en.wikipedia.org/wiki/Birlinn Birlinn - Wikipedia +https://www.asiatimes.com/ Asia Times | Covering geo-political news and current affairs across Asia | Homepage +https://pubs.ext.vt.edu/content/dam/pubs_ext_vt_edu/465/465-312/465-312_pdf.pdf 465-312_pdf.pdf +http://www.highstead.net/pdfs/2014-72-2-american-chestnut.pdf 2014-72-2-american-chestnut.pdf +https://en.wikipedia.org/wiki/Pink_House_(Charleston,_South_Carolina) Pink House (Charleston, South Carolina) - Wikipedia +https://books.google.com.mx/books?id=JFVosXwJ4wIC&printsec=frontcover#v=onepage&q&f=false Shout Because You're Free: The African American Ring Shout Tradition in ... - Art Rosenbaum - Google Libros +https://www.amazon.com/Early-American-Hurricanes-1492-1870-Ludlum/dp/B000RB6C4A Early American Hurricanes 1492-1870: David M. Ludlum: Amazon.com: Books +https://www.wpc.ncep.noaa.gov/research/roth/va18hur.htm Eighteenth Century Virginia Hurricanes +https://en.wikipedia.org/wiki/List_of_Atlantic_hurricanes_in_the_18th_century#cite_note-18 List of Atlantic hurricanes in the 18th century - Wikipedia +https://www.startpage.com/rvd/search?query=Early%20American%20hurricanes%201492-1870%2C%20David%20Ludlum&language=auto Early American hurricanes 1492-1870 David Ludlum - Startpage Search +https://www.genealogybank.com/newsletter-archives/201109/hurricanes-have-been-news-very-long-time Discoveries: Hurricanes Have Been in the News for a Very Long Time - Newsletter Archives - GenealogyBank +https://books.google.com.mx/books?id=Qi_VecDTnS4C&redir_esc=y Blackbeard's Cup and Stories of the Outer Banks - Charles Harry Whedbee - Google Libros +https://en.wikipedia.org/wiki/Blackbeard#/media/File:Edward_Teach_Commonly_Call'd_Black_Beard_(bw).jpg Blackbeard - Wikipedia +http://goldenageofpiracy.org/golden-age-of-piracy/ethics-and-morals-of-piracy.php Golden Age of Piracy | Ethics and Morals of Piracy +http://www.madehow.com/Volume-1/Chewing-Gum.html How chewing gum is made - manufacture, making, history, used, procedure, industry, machine, Raw Materials +https://www.google.com/search?hl=en&q=history%20of%20gum%20making%20in%20south%20carolina history of gum making in south carolina - Google Search +https://cpa.ds.npr.org/wltr/audio/2017/11/nature_notes_11-02-17.mp3 gum trees in south carolina +https://www.smithsonianmag.com/arts-culture/a-brief-history-of-chewing-gum-61020195/ A Brief History of Chewing Gum | Arts & Culture | Smithsonian +http://www.latinamericanstudies.org/slavery/AS-1952.pdf Slave Names in Colonial South Carolina +https://glc.yale.edu/sites/default/files/files/Gullah%20Language.pdf Gullah Language.pdf +http://gullahtours.com/gullah/gullah-words Gullah Words +https://wego.here.com/?map=20.89436,-100.6967,11,normal San Miguel Map +https://www.google.com/maps/d/viewer?mid=1tfonf3iKLlO0m5C7ml7tSjcKwTE&ll=20.910356021260842%2C-100.73865654786925&z=14 RUTAS URBANAS EN SAN MIGUEL DE ALLENDE - Google My Maps +https://www.acdphoto.com/contact-us www.acdphoto.com +https://wikitravel.org/en/San_Miguel_de_Allende San Miguel de Allende - Wikitravel +http://www.audubonmex.org/rl_pdf/Rio_Laja_Section_1_%20with_pics.pdf Rio_Laja_Section_1_ with_pics.pdf +https://www.alltrails.com/explore/recording/rio-laja-presa-allende-to-ex-hacienda-tirado Explore Rio Laja - Presa Allende to Ex-hacienda Tirado | AllTrails +http://www.audubonmex.org/riolaja.html Rio Laja +http://www.birdingpal.org/Mexico.htm Birding Pal Mexico +https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation +https://www.startpage.com/do/metasearch.pl?query=python%20split%20markdown%20file%20into%20smaller%20files python split markdown file into smaller files - Startpage Web Search +https://github.com/goetzf/Split-Markdown-for-Ulysses/blob/master/split_md_05.py https://github.com/goetzf/Split-Markdown-for-Ulysses/blob/master/split_md_05.py +https://stackoverflow.com/questions/9644110/difference-between-parsing-a-text-file-in-r-and-rb-mode python - Difference between parsing a text file in r and rb mode - Stack Overflow +http://themes.rockbox.org/index.php?target=sansafuze Rockbox Themes - Themes for Sandisk Sansa Fuze +https://en.wikipedia.org/wiki/SanDisk_Sansa SanDisk Sansa - Wikipedia +https://www.vqronline.org/about-vqr/submissions Submissions | VQR Online +https://lwn.net/op/AuthorGuide.lwn Writing for LWN [LWN.net] +https://themorningnews.org/ The Morning News +https://orionmagazine.org/guidelines-for-article-submissions/ Orion Magazine | Guidelines for Submissions +https://bhreview.org/general-submissions-guidelines/ General Submissions Guidelines | Bellingham Review +http://www.nereview.com/ner-submissions/ www.nereview.com/ner-submissions/ +https://thesunmagazine.org/issues/519/ways-to-take-your-coffee Ways To Take Your Coffee - The Sun Magazine +https://www.eventmagazine.ca/submit/ Submit - EVENTEVENT +https://www.narrativemagazine.com/ Narrative Magazine | Writers, Fiction, Poetry, Storytelling, Nonfiction, Art +https://www.hcn.org/about/submissions#writing Submission Guidelines — High Country News +https://www.counterpointpress.com/ Counterpoint Press: We are an author-driven publishing house that devotes all energy to the fresh, cutting-edge, and literary voices of our authors +https://undark.org/what-is-undark-looking-for/ What Is Undark Looking For? - Undark +https://thriftynomads.com/booking-cheapest-flight-possible-anywhere/ How to Book the Cheapest Flight Possible to Anywhere - Thrifty Nomads +https://www.ebay.com/itm/57-67-Dodge-Pickup-Truck-Park-Light-Lenses-NEW-Amber-Sweptline-/4615032392 57-67 Dodge Pickup Truck Park Light Lenses-NEW-Amber Sweptline | eBay +https://sivers.org/exex Monthly self-expansion project | Derek Sivers +https://maps.usgs.gov/padus/ Protected Areas Viewer +https://translate.google.com/ Google Translate +https://www.discountramps.com/hitch-cargo-carrier-bike-rack/p/BCCB-BDX/ Apex Blue Devil Steel Hitch Bike Racks with Basket Cargo Carrier | Discount Ramps +https://www.thelinguist.com/about/#method Learn languages online from The Linguist, Steve Kaufmann +http://www.manlyphall.info/a-monthly-letter/ Manly P. Hall - Letters to Students - Complete +https://www.smdservers.net/SLWebSiteTemplate_V2/login.aspx?sCorpCode=plusXQfEYzAbflsUBpKVG9Q3w==&sLocationCode=hqFZTTuWsckQxgIDaX4ymw==&1=1 Login +https://lovelovething.com/cell-salts-easy-homeopathy/ Cell Salts: The Easy Homeopathy - it's a love/love thing +https://www.biddytarot.com/tarot-card-meanings/major-arcana/lovers/ Lovers Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/ace-of-pentacles/ Ace of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/king-of-pentacles/ King of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.schoolsfirstfcu.org/VirtualCapture/Screen/Load?OwnerId=756109&ApplicationScreenId=12292269&ScreenId=2012589 https://www.schoolsfirstfcu.org/VirtualCapture/Screen/Load?OwnerId=756109&ApplicationScreenId=12292269&ScreenId=2012589 +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/queen-of-cups/ Queen of Cups Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/sun/ Sun Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/eight-of-pentacles/ Eight of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/page-of-swords/ Page of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/two-of-cups/ Two of Cups Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/five-of-pentacles/ Five of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/ten-of-wands/ Ten of Wands Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/high-priestess/ High Priestess Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/empress/ Empress Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/page-of-pentacles/ Page of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/seven-of-pentacles/ Seven of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/world/ World Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/tower/ Tower Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/star/ Star Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/nine-of-pentacles/ Nine of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/emperor/ Emperor Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-cups/ten-of-cups/ Ten of Cups Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/knight-of-pentacles/ Knight of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/devil/ Devil Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/page-of-wands/ Page of Wands Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/seven-of-swords/ Seven of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/queen-of-pentacles/ Queen of Pentacles Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/five-of-wands/ Five of Wands Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/hanged-man/ Hanged Man Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/major-arcana/justice/ Justice Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/queen-of-wands/ Queen of Wands Tarot Card Meanings | Biddy Tarot +https://en.m.wikipedia.org/wiki/After_Virtue After Virtue - Wikipedia +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/six-of-swords/ Six of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/five-of-swords/ Five of Swords Tarot Card Meanings | Biddy Tarot +https://duckduckgo.com/?q=ten+of+swords&t=vivaldi&ia=about ten of swords at DuckDuckGo +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-wands/knight-of-wands/ Knight of Wands Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/eight-of-swords/ Eight of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-swords/two-of-swords/ Two of Swords Tarot Card Meanings | Biddy Tarot +https://www.biddytarot.com/tarot-card-meanings/minor-arcana/suit-of-pentacles/two-of-pentacles/ Two of Pentacles Tarot Card Meanings | Biddy Tarot diff --git a/.config/qutebrowser/whitelists/cookies b/.config/qutebrowser/whitelists/cookies new file mode 100644 index 0000000..35b04c6 --- /dev/null +++ b/.config/qutebrowser/whitelists/cookies @@ -0,0 +1 @@ +google.com diff --git a/.config/ranger/bookmarks b/.config/ranger/bookmarks new file mode 100644 index 0000000..44402c2 --- /dev/null +++ b/.config/ranger/bookmarks @@ -0,0 +1,15 @@ +':/home/lxf/newdotfiles/.newsboat +d:/home/lxf/documents +p:/home/lxf/business/freelance writing +u:/home/lxf/sites/usedbarcode.net +l:/home/lxf/writing/luxagraf +k:/home/lxf/pictures/inbox +e:/home/lxf/documents/recipes +w:/home/lxf/writing/wired +q:/home/lxf/sites/libregraf.net +n:/home/lxf/notes +r:/home/lxf/documents/recipes +a:/home/lxf/writing/ars-technica +s:/home/lxf/sites/luxagraf.net +i:/home/lxf/temp/darktable_exported +c:/home/lxf/pictures/nextcloud-ccg-phone diff --git a/.config/ranger/commands.py b/.config/ranger/commands.py new file mode 100644 index 0000000..4ed6c78 --- /dev/null +++ b/.config/ranger/commands.py @@ -0,0 +1,70 @@ +# 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. + +# You always need to import ranger.api.commands here to get the Command class: +from ranger.api.commands import * + +# A simple command for demonstration purposes follows. +# ----------------------------------------------------------------------------- + +# You can import any python module as needed. +import os + +# 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() + +class empty(Command): + """:empty + + Empties the trash directory ~/.Trash + """ + + def execute(self): + self.fm.run("rm -rf /home/myname/.Trash/{*,.[^.]*}") diff --git a/.config/ranger/commands_full.py b/.config/ranger/commands_full.py new file mode 100644 index 0000000..a384f42 --- /dev/null +++ b/.config/ranger/commands_full.py @@ -0,0 +1,1486 @@ +# -*- coding: utf-8 -*- +# This file is part of ranger, the console file manager. +# This configuration file is licensed under the same terms as ranger. +# =================================================================== +# +# NOTE: If you copied this file to ~/.config/ranger/commands_full.py, +# then it will NOT be loaded by ranger, and only serve as a reference. +# +# =================================================================== +# This file contains ranger's commands. +# It's all in python; lines beginning with # are comments. +# +# Note that additional commands are automatically generated from the methods +# of the class ranger.core.actions.Actions. +# +# You can customize commands in the file ~/.config/ranger/commands.py. +# It has the same syntax as this file. In fact, you can just copy this +# file there with `ranger --copy-config=commands' and make your modifications. +# But make sure you update your configs when you update ranger. +# +# =================================================================== +# Every class defined here which is a subclass of `Command' will be used as a +# command in ranger. Several methods are defined to interface with ranger: +# execute(): called when the command is executed. +# cancel(): called when closing the console. +# tab(tabnum): called when <TAB> is pressed. +# quick(): called after each keypress. +# +# tab() argument tabnum is 1 for <TAB> and -1 for <S-TAB> by default +# +# The return values for tab() can be either: +# None: There is no tab completion +# A string: Change the console to this string +# A list/tuple/generator: cycle through every item in it +# +# The return value for quick() can be: +# False: Nothing happens +# True: Execute the command afterwards +# +# The return value for execute() and cancel() doesn't matter. +# +# =================================================================== +# Commands have certain attributes and methods that facilitate parsing of +# the arguments: +# +# self.line: The whole line that was written in the console. +# self.args: A list of all (space-separated) arguments to the command. +# self.quantifier: If this command was mapped to the key "X" and +# the user pressed 6X, self.quantifier will be 6. +# self.arg(n): The n-th argument, or an empty string if it doesn't exist. +# self.rest(n): The n-th argument plus everything that followed. For example, +# if the command was "search foo bar a b c", rest(2) will be "bar a b c" +# self.start(n): Anything before the n-th argument. For example, if the +# command was "search foo bar a b c", start(2) will be "search foo" +# +# =================================================================== +# And this is a little reference for common ranger functions and objects: +# +# self.fm: A reference to the "fm" object which contains most information +# about ranger. +# self.fm.notify(string): Print the given string on the screen. +# self.fm.notify(string, bad=True): Print the given string in RED. +# self.fm.reload_cwd(): Reload the current working directory. +# self.fm.thisdir: The current working directory. (A File object.) +# self.fm.thisfile: The current file. (A File object too.) +# self.fm.thistab.get_selection(): A list of all selected files. +# self.fm.execute_console(string): Execute the string as a ranger command. +# self.fm.open_console(string): Open the console with the given string +# already typed in for you. +# self.fm.move(direction): Moves the cursor in the given direction, which +# can be something like down=3, up=5, right=1, left=1, to=6, ... +# +# File objects (for example self.fm.thisfile) have these useful attributes and +# methods: +# +# cf.path: The path to the file. +# cf.basename: The base name only. +# cf.load_content(): Force a loading of the directories content (which +# obviously works with directories only) +# cf.is_directory: True/False depending on whether it's a directory. +# +# For advanced commands it is unavoidable to dive a bit into the source code +# of ranger. +# =================================================================== + +from ranger.api.commands import * + + +class alias(Command): + """:alias <newcommand> <oldcommand> + + Copies the oldcommand as newcommand. + """ + + context = 'browser' + resolve_macros = False + + def execute(self): + if not self.arg(1) or not self.arg(2): + self.fm.notify('Syntax: alias <newcommand> <oldcommand>', bad=True) + else: + self.fm.commands.alias(self.arg(1), self.rest(2)) + + +class echo(Command): + """:echo <text> + + Display the text in the statusbar. + """ + def execute(self): + self.fm.notify(self.rest(1)) + + +class cd(Command): + """:cd [-r] <dirname> + + The cd command changes the directory. + The command 'cd -' is equivalent to typing ``. + Using the option "-r" will get you to the real path. + """ + + def execute(self): + import os.path + if self.arg(1) == '-r': + self.shift() + destination = os.path.realpath(self.rest(1)) + if os.path.isfile(destination): + self.fm.select_file(destination) + return + else: + destination = self.rest(1) + + if not destination: + destination = '~' + + if destination == '-': + self.fm.enter_bookmark('`') + else: + self.fm.cd(destination) + + def tab(self, tabnum): + import os + from os.path import dirname, basename, expanduser, join + + cwd = self.fm.thisdir.path + rel_dest = self.rest(1) + + bookmarks = [v.path for v in self.fm.bookmarks.dct.values() + if rel_dest in v.path] + + # expand the tilde into the user directory + if rel_dest.startswith('~'): + rel_dest = expanduser(rel_dest) + + # define some shortcuts + abs_dest = join(cwd, rel_dest) + abs_dirname = dirname(abs_dest) + rel_basename = basename(rel_dest) + rel_dirname = dirname(rel_dest) + + try: + # are we at the end of a directory? + if rel_dest.endswith('/') or rel_dest == '': + _, dirnames, _ = next(os.walk(abs_dest)) + + # are we in the middle of the filename? + else: + _, dirnames, _ = next(os.walk(abs_dirname)) + dirnames = [dn for dn in dirnames + if dn.startswith(rel_basename)] + except (OSError, StopIteration): + # os.walk found nothing + pass + else: + dirnames.sort() + if self.fm.settings.cd_bookmarks: + dirnames = bookmarks + dirnames + + # no results, return None + if len(dirnames) == 0: + return + + # one result. since it must be a directory, append a slash. + if len(dirnames) == 1: + return self.start(1) + join(rel_dirname, dirnames[0]) + '/' + + # more than one result. append no slash, so the user can + # manually type in the slash to advance into that directory + return (self.start(1) + join(rel_dirname, dirname) for dirname in dirnames) + + +class chain(Command): + """:chain <command1>; <command2>; ... + + Calls multiple commands at once, separated by semicolons. + """ + def execute(self): + for command in [s.strip() for s in self.rest(1).split(";")]: + self.fm.execute_console(command) + + +class shell(Command): + escape_macros_for_shell = True + + def execute(self): + if self.arg(1) and self.arg(1)[0] == '-': + flags = self.arg(1)[1:] + command = self.rest(2) + else: + flags = '' + command = self.rest(1) + + if command: + self.fm.execute_command(command, flags=flags) + + def tab(self, tabnum): + from ranger.ext.get_executables import get_executables + if self.arg(1) and self.arg(1)[0] == '-': + command = self.rest(2) + else: + command = self.rest(1) + start = self.line[0:len(self.line) - len(command)] + + try: + position_of_last_space = command.rindex(" ") + except ValueError: + return (start + program + ' ' for program + in get_executables() if program.startswith(command)) + if position_of_last_space == len(command) - 1: + selection = self.fm.thistab.get_selection() + if len(selection) == 1: + return self.line + selection[0].shell_escaped_basename + ' ' + else: + return self.line + '%s ' + else: + before_word, start_of_word = self.line.rsplit(' ', 1) + return (before_word + ' ' + file.shell_escaped_basename + for file in self.fm.thisdir.files or [] + if file.shell_escaped_basename.startswith(start_of_word)) + + +class open_with(Command): + def execute(self): + app, flags, mode = self._get_app_flags_mode(self.rest(1)) + self.fm.execute_file( + files=[f for f in self.fm.thistab.get_selection()], + app=app, + flags=flags, + mode=mode) + + def tab(self, tabnum): + return self._tab_through_executables() + + def _get_app_flags_mode(self, string): + """Extracts the application, flags and mode from a string. + + examples: + "mplayer f 1" => ("mplayer", "f", 1) + "aunpack 4" => ("aunpack", "", 4) + "p" => ("", "p", 0) + "" => None + """ + + app = '' + flags = '' + mode = 0 + split = string.split() + + if len(split) == 0: + pass + + elif len(split) == 1: + part = split[0] + if self._is_app(part): + app = part + elif self._is_flags(part): + flags = part + elif self._is_mode(part): + mode = part + + elif len(split) == 2: + part0 = split[0] + part1 = split[1] + + if self._is_app(part0): + app = part0 + if self._is_flags(part1): + flags = part1 + elif self._is_mode(part1): + mode = part1 + elif self._is_flags(part0): + flags = part0 + if self._is_mode(part1): + mode = part1 + elif self._is_mode(part0): + mode = part0 + if self._is_flags(part1): + flags = part1 + + elif len(split) >= 3: + part0 = split[0] + part1 = split[1] + part2 = split[2] + + if self._is_app(part0): + app = part0 + if self._is_flags(part1): + flags = part1 + if self._is_mode(part2): + mode = part2 + elif self._is_mode(part1): + mode = part1 + if self._is_flags(part2): + flags = part2 + elif self._is_flags(part0): + flags = part0 + if self._is_mode(part1): + mode = part1 + elif self._is_mode(part0): + mode = part0 + if self._is_flags(part1): + flags = part1 + + return app, flags, int(mode) + + def _is_app(self, arg): + return not self._is_flags(arg) and not arg.isdigit() + + def _is_flags(self, arg): + from ranger.core.runner import ALLOWED_FLAGS + return all(x in ALLOWED_FLAGS for x in arg) + + def _is_mode(self, arg): + return all(x in '0123456789' for x in arg) + + +class set_(Command): + """:set <option name>=<python expression> + + Gives an option a new value. + + Use `:set <option>!` to toggle or cycle it, e.g. `:set flush_input!` + """ + name = 'set' # don't override the builtin set class + + def execute(self): + name = self.arg(1) + name, value, _, toggle = self.parse_setting_line_v2() + if toggle: + self.fm.toggle_option(name) + else: + self.fm.set_option_from_string(name, value) + + def tab(self, tabnum): + from ranger.gui.colorscheme import get_all_colorschemes + name, value, name_done = self.parse_setting_line() + settings = self.fm.settings + if not name: + return sorted(self.firstpart + setting for setting in settings) + if not value and not name_done: + return sorted(self.firstpart + setting for setting in settings + if setting.startswith(name)) + if not value: + # Cycle through colorschemes when name, but no value is specified + if name == "colorscheme": + return sorted(self.firstpart + colorscheme for colorscheme + in get_all_colorschemes()) + return self.firstpart + str(settings[name]) + if bool in settings.types_of(name): + if 'true'.startswith(value.lower()): + return self.firstpart + 'True' + if 'false'.startswith(value.lower()): + return self.firstpart + 'False' + # Tab complete colorscheme values if incomplete value is present + if name == "colorscheme": + return sorted(self.firstpart + colorscheme for colorscheme + in get_all_colorschemes() if colorscheme.startswith(value)) + + +class setlocal(set_): + """:setlocal path=<regular expression> <option name>=<python expression> + + Gives an option a new value. + """ + PATH_RE = re.compile(r'^\s*path="?(.*?)"?\s*$') + + def execute(self): + import os.path + match = self.PATH_RE.match(self.arg(1)) + if match: + path = os.path.normpath(os.path.expanduser(match.group(1))) + self.shift() + elif self.fm.thisdir: + path = self.fm.thisdir.path + else: + path = None + + if path: + name = self.arg(1) + name, value, _ = self.parse_setting_line() + self.fm.set_option_from_string(name, value, localpath=path) + + +class setintag(setlocal): + """:setintag <tag or tags> <option name>=<option value> + + Sets an option for directories that are tagged with a specific tag. + """ + def execute(self): + tags = self.arg(1) + self.shift() + name, value, _ = self.parse_setting_line() + self.fm.set_option_from_string(name, value, tags=tags) + + +class default_linemode(Command): + def execute(self): + import re + from ranger.container.fsobject import FileSystemObject + + if len(self.args) < 2: + self.fm.notify("Usage: default_linemode [path=<regexp> | tag=<tag(s)>] <linemode>", bad=True) + + # Extract options like "path=..." or "tag=..." from the command line + arg1 = self.arg(1) + method = "always" + argument = None + if arg1.startswith("path="): + method = "path" + argument = re.compile(arg1[5:]) + self.shift() + elif arg1.startswith("tag="): + method = "tag" + argument = arg1[4:] + self.shift() + + # Extract and validate the line mode from the command line + linemode = self.rest(1) + if linemode not in FileSystemObject.linemode_dict: + self.fm.notify("Invalid linemode: %s; should be %s" % + (linemode, "/".join(FileSystemObject.linemode_dict)), bad=True) + + # Add the prepared entry to the fm.default_linemodes + entry = [method, argument, linemode] + self.fm.default_linemodes.appendleft(entry) + + # Redraw the columns + if hasattr(self.fm.ui, "browser"): + for col in self.fm.ui.browser.columns: + col.need_redraw = True + + def tab(self, tabnum): + mode = self.arg(1) + return (self.arg(0) + " " + linemode + for linemode in self.fm.thisfile.linemode_dict.keys() + if linemode.startswith(self.arg(1))) + + +class quit(Command): + """:quit + + Closes the current tab. If there is only one tab, quit the program. + """ + + def execute(self): + if len(self.fm.tabs) <= 1: + self.fm.exit() + self.fm.tab_close() + + +class quitall(Command): + """:quitall + + Quits the program immediately. + """ + + def execute(self): + self.fm.exit() + + +class quit_bang(quitall): + """:quit! + + Quits the program immediately. + """ + name = 'quit!' + allow_abbrev = False + + +class terminal(Command): + """:terminal + + Spawns an "x-terminal-emulator" starting in the current directory. + """ + def execute(self): + from ranger.ext.get_executables import get_term + self.fm.run(get_term(), flags='f') + + +class delete(Command): + """:delete + + Tries to delete the selection or the files passed in arguments (if any). + The arguments use a shell-like escaping. + + "Selection" is defined as all the "marked files" (by default, you + can mark files with space or v). If there are no marked files, + use the "current file" (where the cursor is) + + When attempting to delete non-empty directories or multiple + marked files, it will require a confirmation. + """ + + allow_abbrev = False + escape_macros_for_shell = True + + def execute(self): + import os + import shlex + from functools import partial + from ranger.container.file import File + + def is_directory_with_files(f): + import os.path + return (os.path.isdir(f) and not os.path.islink(f) + and len(os.listdir(f)) > 0) + + if self.rest(1): + files = shlex.split(self.rest(1)) + many_files = (len(files) > 1 or is_directory_with_files(files[0])) + else: + cwd = self.fm.thisdir + cf = self.fm.thisfile + if not cwd or not cf: + self.fm.notify("Error: no file selected for deletion!", bad=True) + return + + # relative_path used for a user-friendly output in the confirmation. + files = [f.relative_path for f in self.fm.thistab.get_selection()] + many_files = (cwd.marked_items or is_directory_with_files(cf.path)) + + confirm = self.fm.settings.confirm_on_delete + if confirm != 'never' and (confirm != 'multiple' or many_files): + filename_list = files + self.fm.ui.console.ask("Confirm deletion of: %s (y/N)" % + ', '.join(files), + partial(self._question_callback, files), ('n', 'N', 'y', 'Y')) + else: + # no need for a confirmation, just delete + self.fm.delete(files) + + def tab(self, tabnum): + return self._tab_directory_content() + + def _question_callback(self, files, answer): + if answer == 'y' or answer == 'Y': + self.fm.delete(files) + + +class mark_tag(Command): + """:mark_tag [<tags>] + + Mark all tags that are tagged with either of the given tags. + When leaving out the tag argument, all tagged files are marked. + """ + do_mark = True + + def execute(self): + cwd = self.fm.thisdir + tags = self.rest(1).replace(" ", "") + if not self.fm.tags or not cwd.files: + return + for fileobj in cwd.files: + try: + tag = self.fm.tags.tags[fileobj.realpath] + except KeyError: + continue + if not tags or tag in tags: + cwd.mark_item(fileobj, val=self.do_mark) + self.fm.ui.status.need_redraw = True + self.fm.ui.need_redraw = True + + +class console(Command): + """:console <command> + + Open the console with the given command. + """ + def execute(self): + position = None + if self.arg(1)[0:2] == '-p': + try: + position = int(self.arg(1)[2:]) + self.shift() + except Exception: + pass + self.fm.open_console(self.rest(1), position=position) + + +class load_copy_buffer(Command): + """:load_copy_buffer + + Load the copy buffer from confdir/copy_buffer + """ + copy_buffer_filename = 'copy_buffer' + + def execute(self): + from ranger.container.file import File + from os.path import exists + try: + fname = self.fm.confpath(self.copy_buffer_filename) + f = open(fname, 'r') + except Exception: + return self.fm.notify("Cannot open %s" % + (fname or self.copy_buffer_filename), bad=True) + self.fm.copy_buffer = set(File(g) + for g in f.read().split("\n") if exists(g)) + f.close() + self.fm.ui.redraw_main_column() + + +class save_copy_buffer(Command): + """:save_copy_buffer + + Save the copy buffer to confdir/copy_buffer + """ + copy_buffer_filename = 'copy_buffer' + + def execute(self): + fname = None + try: + fname = self.fm.confpath(self.copy_buffer_filename) + f = open(fname, 'w') + except Exception: + return self.fm.notify("Cannot open %s" % + (fname or self.copy_buffer_filename), bad=True) + f.write("\n".join(f.path for f in self.fm.copy_buffer)) + f.close() + + +class unmark_tag(mark_tag): + """:unmark_tag [<tags>] + + Unmark all tags that are tagged with either of the given tags. + When leaving out the tag argument, all tagged files are unmarked. + """ + do_mark = False + + +class mkdir(Command): + """:mkdir <dirname> + + Creates a directory with the name <dirname>. + """ + + def execute(self): + from os.path import join, expanduser, lexists + from os import makedirs + + dirname = join(self.fm.thisdir.path, expanduser(self.rest(1))) + if not lexists(dirname): + makedirs(dirname) + else: + self.fm.notify("file/directory exists!", bad=True) + + def tab(self, tabnum): + return self._tab_directory_content() + + +class touch(Command): + """:touch <fname> + + Creates a file with the name <fname>. + """ + + def execute(self): + from os.path import join, expanduser, lexists + + fname = join(self.fm.thisdir.path, expanduser(self.rest(1))) + if not lexists(fname): + open(fname, 'a').close() + else: + self.fm.notify("file/directory exists!", bad=True) + + def tab(self, tabnum): + return self._tab_directory_content() + + +class edit(Command): + """:edit <filename> + + Opens the specified file in vim + """ + + def execute(self): + if not self.arg(1): + self.fm.edit_file(self.fm.thisfile.path) + else: + self.fm.edit_file(self.rest(1)) + + def tab(self, tabnum): + return self._tab_directory_content() + + +class eval_(Command): + """:eval [-q] <python code> + + Evaluates the python code. + `fm' is a reference to the FM instance. + To display text, use the function `p'. + + Examples: + :eval fm + :eval len(fm.directories) + :eval p("Hello World!") + """ + name = 'eval' + resolve_macros = False + + def execute(self): + if self.arg(1) == '-q': + code = self.rest(2) + quiet = True + else: + code = self.rest(1) + quiet = False + import ranger + global cmd, fm, p, quantifier + fm = self.fm + cmd = self.fm.execute_console + p = fm.notify + quantifier = self.quantifier + try: + try: + result = eval(code) + except SyntaxError: + exec(code) + else: + if result and not quiet: + p(result) + except Exception as err: + p(err) + + +class rename(Command): + """:rename <newname> + + Changes the name of the currently highlighted file to <newname> + """ + + def execute(self): + from ranger.container.file import File + from os import access + + new_name = self.rest(1) + + tagged = {} + old_name = self.fm.thisfile.relative_path + for f in self.fm.tags.tags: + if str(f).startswith(self.fm.thisfile.path): + tagged[f] = self.fm.tags.tags[f] + self.fm.tags.remove(f) + + if not new_name: + return self.fm.notify('Syntax: rename <newname>', bad=True) + + if new_name == old_name: + return + + if access(new_name, os.F_OK): + return self.fm.notify("Can't rename: file already exists!", bad=True) + + if self.fm.rename(self.fm.thisfile, new_name): + f = File(new_name) + # Update bookmarks that were pointing on the previous name + obsoletebookmarks = [b for b in self.fm.bookmarks + if b[1].path == self.fm.thisfile] + if obsoletebookmarks: + for key, _ in obsoletebookmarks: + self.fm.bookmarks[key] = f + self.fm.bookmarks.update_if_outdated() + + self.fm.thisdir.pointed_obj = f + self.fm.thisfile = f + for t in tagged: + self.fm.tags.tags[t.replace(old_name, new_name)] = tagged[t] + self.fm.tags.dump() + + def tab(self, tabnum): + return self._tab_directory_content() + + +class rename_append(Command): + """:rename_append + + Creates an open_console for the rename command, automatically placing the cursor before the file extension. + """ + + def execute(self): + cf = self.fm.thisfile + path = cf.relative_path.replace("%", "%%") + if path.find('.') != 0 and path.rfind('.') != -1 and not cf.is_directory: + self.fm.open_console('rename ' + path, position=(7 + path.rfind('.'))) + else: + self.fm.open_console('rename ' + path) + + +class chmod(Command): + """:chmod <octal number> + + Sets the permissions of the selection to the octal number. + + The octal number is between 0 and 777. The digits specify the + permissions for the user, the group and others. + + A 1 permits execution, a 2 permits writing, a 4 permits reading. + Add those numbers to combine them. So a 7 permits everything. + """ + + def execute(self): + mode = self.rest(1) + if not mode: + mode = str(self.quantifier) + + try: + mode = int(mode, 8) + if mode < 0 or mode > 0o777: + raise ValueError + except ValueError: + self.fm.notify("Need an octal number between 0 and 777!", bad=True) + return + + for file in self.fm.thistab.get_selection(): + try: + os.chmod(file.path, mode) + except Exception as ex: + self.fm.notify(ex) + + try: + # reloading directory. maybe its better to reload the selected + # files only. + self.fm.thisdir.load_content() + except Exception: + pass + + +class bulkrename(Command): + """:bulkrename + + This command opens a list of selected files in an external editor. + After you edit and save the file, it will generate a shell script + which does bulk renaming according to the changes you did in the file. + + This shell script is opened in an editor for you to review. + After you close it, it will be executed. + """ + def execute(self): + import sys + import tempfile + from ranger.container.file import File + from ranger.ext.shell_escape import shell_escape as esc + py3 = sys.version_info[0] >= 3 + + # Create and edit the file list + filenames = [f.relative_path for f in self.fm.thistab.get_selection()] + listfile = tempfile.NamedTemporaryFile(delete=False) + listpath = listfile.name + + if py3: + listfile.write("\n".join(filenames).encode("utf-8")) + else: + listfile.write("\n".join(filenames)) + listfile.close() + self.fm.execute_file([File(listpath)], app='editor') + listfile = open(listpath, 'r') + new_filenames = listfile.read().split("\n") + listfile.close() + os.unlink(listpath) + if all(a == b for a, b in zip(filenames, new_filenames)): + self.fm.notify("No renaming to be done!") + return + + # Generate script + cmdfile = tempfile.NamedTemporaryFile() + script_lines = [] + script_lines.append("# This file will be executed when you close the editor.\n") + script_lines.append("# Please double-check everything, clear the file to abort.\n") + script_lines.extend("mv -vi -- %s %s\n" % (esc(old), esc(new)) + for old, new in zip(filenames, new_filenames) if old != new) + script_content = "".join(script_lines) + if py3: + cmdfile.write(script_content.encode("utf-8")) + else: + cmdfile.write(script_content) + cmdfile.flush() + + # Open the script and let the user review it, then check if the script + # was modified by the user + self.fm.execute_file([File(cmdfile.name)], app='editor') + cmdfile.seek(0) + script_was_edited = (script_content != cmdfile.read()) + + # Do the renaming + self.fm.run(['/bin/sh', cmdfile.name], flags='w') + cmdfile.close() + + # Retag the files, but only if the script wasn't changed during review, + # because only then we know which are the source and destination files. + if not script_was_edited: + tags_changed = False + for old, new in zip(filenames, new_filenames): + if old != new: + oldpath = self.fm.thisdir.path + '/' + old + newpath = self.fm.thisdir.path + '/' + new + if oldpath in self.fm.tags: + old_tag = self.fm.tags.tags[oldpath] + self.fm.tags.remove(oldpath) + self.fm.tags.tags[newpath] = old_tag + tags_changed = True + if tags_changed: + self.fm.tags.dump() + else: + fm.notify("files have not been retagged") + + +class relink(Command): + """:relink <newpath> + + Changes the linked path of the currently highlighted symlink to <newpath> + """ + + def execute(self): + from ranger.container.file import File + + new_path = self.rest(1) + cf = self.fm.thisfile + + if not new_path: + return self.fm.notify('Syntax: relink <newpath>', bad=True) + + if not cf.is_link: + return self.fm.notify('%s is not a symlink!' % cf.relative_path, bad=True) + + if new_path == os.readlink(cf.path): + return + + try: + os.remove(cf.path) + os.symlink(new_path, cf.path) + except OSError as err: + self.fm.notify(err) + + self.fm.reset() + self.fm.thisdir.pointed_obj = cf + self.fm.thisfile = cf + + def tab(self, tabnum): + if not self.rest(1): + return self.line + os.readlink(self.fm.thisfile.path) + else: + return self._tab_directory_content() + + +class help_(Command): + """:help + + Display ranger's manual page. + """ + name = 'help' + + def execute(self): + def callback(answer): + if answer == "q": + return + elif answer == "m": + self.fm.display_help() + elif answer == "c": + self.fm.dump_commands() + elif answer == "k": + self.fm.dump_keybindings() + elif answer == "s": + self.fm.dump_settings() + + c = self.fm.ui.console.ask("View [m]an page, [k]ey bindings," + " [c]ommands or [s]ettings? (press q to abort)", callback, list("mkcsq") + [chr(27)]) + + +class copymap(Command): + """:copymap <keys> <newkeys1> [<newkeys2>...] + + Copies a "browser" keybinding from <keys> to <newkeys> + """ + context = 'browser' + + def execute(self): + if not self.arg(1) or not self.arg(2): + return self.fm.notify("Not enough arguments", bad=True) + + for arg in self.args[2:]: + self.fm.ui.keymaps.copy(self.context, self.arg(1), arg) + + +class copypmap(copymap): + """:copypmap <keys> <newkeys1> [<newkeys2>...] + + Copies a "pager" keybinding from <keys> to <newkeys> + """ + context = 'pager' + + +class copycmap(copymap): + """:copycmap <keys> <newkeys1> [<newkeys2>...] + + Copies a "console" keybinding from <keys> to <newkeys> + """ + context = 'console' + + +class copytmap(copymap): + """:copycmap <keys> <newkeys1> [<newkeys2>...] + + Copies a "taskview" keybinding from <keys> to <newkeys> + """ + context = 'taskview' + + +class unmap(Command): + """:unmap <keys> [<keys2>, ...] + + Remove the given "browser" mappings + """ + context = 'browser' + + def execute(self): + for arg in self.args[1:]: + self.fm.ui.keymaps.unbind(self.context, arg) + + +class cunmap(unmap): + """:cunmap <keys> [<keys2>, ...] + + Remove the given "console" mappings + """ + context = 'browser' + + +class punmap(unmap): + """:punmap <keys> [<keys2>, ...] + + Remove the given "pager" mappings + """ + context = 'pager' + + +class tunmap(unmap): + """:tunmap <keys> [<keys2>, ...] + + Remove the given "taskview" mappings + """ + context = 'taskview' + + +class map_(Command): + """:map <keysequence> <command> + + Maps a command to a keysequence in the "browser" context. + + Example: + map j move down + map J move down 10 + """ + name = 'map' + context = 'browser' + resolve_macros = False + + def execute(self): + if not self.arg(1) or not self.arg(2): + return self.fm.notify("Not enough arguments", bad=True) + + self.fm.ui.keymaps.bind(self.context, self.arg(1), self.rest(2)) + + +class cmap(map_): + """:cmap <keysequence> <command> + + Maps a command to a keysequence in the "console" context. + + Example: + cmap <ESC> console_close + cmap <C-x> console_type test + """ + context = 'console' + + +class tmap(map_): + """:tmap <keysequence> <command> + + Maps a command to a keysequence in the "taskview" context. + """ + context = 'taskview' + + +class pmap(map_): + """:pmap <keysequence> <command> + + Maps a command to a keysequence in the "pager" context. + """ + context = 'pager' + + +class scout(Command): + """:scout [-FLAGS] <pattern> + + Swiss army knife command for searching, traveling and filtering files. + The command takes various flags as arguments which can be used to + influence its behaviour: + + -a = automatically open a file on unambiguous match + -e = open the selected file when pressing enter + -f = filter files that match the current search pattern + -g = interpret pattern as a glob pattern + -i = ignore the letter case of the files + -k = keep the console open when changing a directory with the command + -l = letter skipping; e.g. allow "rdme" to match the file "readme" + -m = mark the matching files after pressing enter + -M = unmark the matching files after pressing enter + -p = permanent filter: hide non-matching files after pressing enter + -r = interpret pattern as a regular expression pattern + -s = smart case; like -i unless pattern contains upper case letters + -t = apply filter and search pattern as you type + -v = inverts the match + + Multiple flags can be combined. For example, ":scout -gpt" would create + a :filter-like command using globbing. + """ + AUTO_OPEN = 'a' + OPEN_ON_ENTER = 'e' + FILTER = 'f' + SM_GLOB = 'g' + IGNORE_CASE = 'i' + KEEP_OPEN = 'k' + SM_LETTERSKIP = 'l' + MARK = 'm' + UNMARK = 'M' + PERM_FILTER = 'p' + SM_REGEX = 'r' + SMART_CASE = 's' + AS_YOU_TYPE = 't' + INVERT = 'v' + + def __init__(self, *args, **kws): + Command.__init__(self, *args, **kws) + self._regex = None + self.flags, self.pattern = self.parse_flags() + + def execute(self): + thisdir = self.fm.thisdir + flags = self.flags + pattern = self.pattern + regex = self._build_regex() + count = self._count(move=True) + + self.fm.thistab.last_search = regex + self.fm.set_search_method(order="search") + + if (self.MARK in flags or self.UNMARK in flags) and thisdir.files: + value = flags.find(self.MARK) > flags.find(self.UNMARK) + if self.FILTER in flags: + for f in thisdir.files: + thisdir.mark_item(f, value) + else: + for f in thisdir.files: + if regex.search(f.relative_path): + thisdir.mark_item(f, value) + + if self.PERM_FILTER in flags: + thisdir.filter = regex if pattern else None + + # clean up: + self.cancel() + + if self.OPEN_ON_ENTER in flags or \ + self.AUTO_OPEN in flags and count == 1: + if os.path.exists(pattern): + self.fm.cd(pattern) + else: + self.fm.move(right=1) + + if self.KEEP_OPEN in flags and thisdir != self.fm.thisdir: + # reopen the console: + if not pattern: + self.fm.open_console(self.line) + else: + self.fm.open_console(self.line[0:-len(pattern)]) + + if self.quickly_executed and thisdir != self.fm.thisdir and pattern != "..": + self.fm.block_input(0.5) + + def cancel(self): + self.fm.thisdir.temporary_filter = None + self.fm.thisdir.refilter() + + def quick(self): + asyoutype = self.AS_YOU_TYPE in self.flags + if self.FILTER in self.flags: + self.fm.thisdir.temporary_filter = self._build_regex() + if self.PERM_FILTER in self.flags and asyoutype: + self.fm.thisdir.filter = self._build_regex() + if self.FILTER in self.flags or self.PERM_FILTER in self.flags: + self.fm.thisdir.refilter() + if self._count(move=asyoutype) == 1 and self.AUTO_OPEN in self.flags: + return True + return False + + def tab(self, tabnum): + self._count(move=True, offset=tabnum) + + def _build_regex(self): + if self._regex is not None: + return self._regex + + frmat = "%s" + flags = self.flags + pattern = self.pattern + + if pattern == ".": + return re.compile("") + + # Handle carets at start and dollar signs at end separately + if pattern.startswith('^'): + pattern = pattern[1:] + frmat = "^" + frmat + if pattern.endswith('$'): + pattern = pattern[:-1] + frmat += "$" + + # Apply one of the search methods + if self.SM_REGEX in flags: + regex = pattern + elif self.SM_GLOB in flags: + regex = re.escape(pattern).replace("\\*", ".*").replace("\\?", ".") + elif self.SM_LETTERSKIP in flags: + regex = ".*".join(re.escape(c) for c in pattern) + else: + regex = re.escape(pattern) + + regex = frmat % regex + + # Invert regular expression if necessary + if self.INVERT in flags: + regex = "^(?:(?!%s).)*$" % regex + + # Compile Regular Expression + options = re.UNICODE + if self.IGNORE_CASE in flags or self.SMART_CASE in flags and \ + pattern.islower(): + options |= re.IGNORECASE + try: + self._regex = re.compile(regex, options) + except Exception: + self._regex = re.compile("") + return self._regex + + def _count(self, move=False, offset=0): + count = 0 + cwd = self.fm.thisdir + pattern = self.pattern + + if not pattern or not cwd.files: + return 0 + if pattern == '.': + return 0 + if pattern == '..': + return 1 + + deq = deque(cwd.files) + deq.rotate(-cwd.pointer - offset) + i = offset + regex = self._build_regex() + for fsobj in deq: + if regex.search(fsobj.relative_path): + count += 1 + if move and count == 1: + cwd.move(to=(cwd.pointer + i) % len(cwd.files)) + self.fm.thisfile = cwd.pointed_obj + if count > 1: + return count + i += 1 + + return count == 1 + + +class filter_inode_type(Command): + """ + :filter_inode_type [dfl] + + Displays only the files of specified inode type. Parameters + can be combined. + + d display directories + f display files + l display links + """ + + FILTER_DIRS = 'd' + FILTER_FILES = 'f' + FILTER_LINKS = 'l' + + def execute(self): + if not self.arg(1): + self.fm.thisdir.inode_type_filter = None + else: + self.fm.thisdir.inode_type_filter = lambda file: ( + True if ((self.FILTER_DIRS in self.arg(1) and file.is_directory) or + (self.FILTER_FILES in self.arg(1) and file.is_file and not file.is_link) or + (self.FILTER_LINKS in self.arg(1) and file.is_link)) else False) + self.fm.thisdir.refilter() + + +class grep(Command): + """:grep <string> + + Looks for a string in all marked files or directories + """ + + def execute(self): + if self.rest(1): + action = ['grep', '--line-number'] + action.extend(['-e', self.rest(1), '-r']) + action.extend(f.path for f in self.fm.thistab.get_selection()) + self.fm.execute_command(action, flags='p') + + +class flat(Command): + """ + :flat <level> + + Flattens the directory view up to the specified level. + + -1 fully flattened + 0 remove flattened view + """ + + def execute(self): + try: + level = self.rest(1) + level = int(level) + except ValueError: + level = self.quantifier + if level < -1: + self.fm.notify("Need an integer number (-1, 0, 1, ...)", bad=True) + self.fm.thisdir.unload() + self.fm.thisdir.flat = level + self.fm.thisdir.load_content() + +# Version control commands +# -------------------------------- + + +class stage(Command): + """ + :stage + + Stage selected files for the corresponding version control system + """ + def execute(self): + from ranger.ext.vcs import VcsError + + if self.fm.thisdir.vcs and self.fm.thisdir.vcs.track: + filelist = [f.path for f in self.fm.thistab.get_selection()] + try: + self.fm.thisdir.vcs.action_add(filelist) + except VcsError as error: + self.fm.notify('Unable to stage files: {0:s}'.format(str(error))) + self.fm.ui.vcsthread.process(self.fm.thisdir) + else: + self.fm.notify('Unable to stage files: Not in repository') + + +class unstage(Command): + """ + :unstage + + Unstage selected files for the corresponding version control system + """ + def execute(self): + from ranger.ext.vcs import VcsError + + if self.fm.thisdir.vcs and self.fm.thisdir.vcs.track: + filelist = [f.path for f in self.fm.thistab.get_selection()] + try: + self.fm.thisdir.vcs.action_reset(filelist) + except VcsError as error: + self.fm.notify('Unable to unstage files: {0:s}'.format(str(error))) + self.fm.ui.vcsthread.process(self.fm.thisdir) + else: + self.fm.notify('Unable to unstage files: Not in repository') + +# Metadata commands +# -------------------------------- + + +class prompt_metadata(Command): + """ + :prompt_metadata <key1> [<key2> [<key3> ...]] + + Prompt the user to input metadata for multiple keys in a row. + """ + + _command_name = "meta" + _console_chain = None + + def execute(self): + prompt_metadata._console_chain = self.args[1:] + self._process_command_stack() + + def _process_command_stack(self): + if prompt_metadata._console_chain: + key = prompt_metadata._console_chain.pop() + self._fill_console(key) + else: + for col in self.fm.ui.browser.columns: + col.need_redraw = True + + def _fill_console(self, key): + metadata = self.fm.metadata.get_metadata(self.fm.thisfile.path) + if key in metadata and metadata[key]: + existing_value = metadata[key] + else: + existing_value = "" + text = "%s %s %s" % (self._command_name, key, existing_value) + self.fm.open_console(text, position=len(text)) + + +class meta(prompt_metadata): + """ + :meta <key> [<value>] + + Change metadata of a file. Deletes the key if value is empty. + """ + + def execute(self): + key = self.arg(1) + value = self.rest(1) + update_dict = dict() + update_dict[key] = self.rest(2) + selection = self.fm.thistab.get_selection() + for f in selection: + self.fm.metadata.set_metadata(f.path, update_dict) + self._process_command_stack() + + def tab(self, tabnum): + key = self.arg(1) + metadata = self.fm.metadata.get_metadata(self.fm.thisfile.path) + if key in metadata and metadata[key]: + return [" ".join([self.arg(0), self.arg(1), metadata[key]])] + else: + return [self.arg(0) + " " + key for key in sorted(metadata) + if key.startswith(self.arg(1))] + + +class linemode(default_linemode): + """ + :linemode <mode> + + Change what is displayed as a filename. + + - "mode" may be any of the defined linemodes (see: ranger.core.linemode). + "normal" is mapped to "filename". + """ + + def execute(self): + mode = self.arg(1) + + if mode == "normal": + mode = DEFAULT_LINEMODE + + if mode not in self.fm.thisfile.linemode_dict: + self.fm.notify("Unhandled linemode: `%s'" % mode, bad=True) + return + + self.fm.thisdir._set_linemode_of_children(mode) + + # Ask the browsercolumns to redraw + for col in self.fm.ui.browser.columns: + col.need_redraw = True diff --git a/.config/ranger/history b/.config/ranger/history new file mode 100644 index 0000000..61e3673 --- /dev/null +++ b/.config/ranger/history @@ -0,0 +1,50 @@ +rename Toyota CEO and Bjarke Ingels CES 02 SOURCE Scott Gilbertson.jpg +rename .1.mp4 +rename .2.mp4 +mkdir screenshots +rename darktable-editing-moments-ep1-new-dynamic-range.mp4 +open_with +rename X-Pro3 back closed SOURCE Fujifilm.jpg +rename X-Pro3 back open SOURCE Fujifilm.jpg +rename X-Pro3 front SOURCE Fujifilm.jpg +rename _IMG3945c.DNG.xmp +mkdir opt +open_with 1 +rename walk_list.html +rename src +rename srcpost_list.html +rename srcpost_detail.html +mkdir books +rename book_detail.html +rename book_list.html +mkdir templates +mkdir pages +rename page_detail.html +rename page_detail.txt + +sh timg +default_linemode +rename abook +rename mpd +rename newsboat +rename ncmpcpp +rename .aliases +rename .bashrc +rename .darktablerc +rename .i3blocks.conf +rename .msmtprc +rename .offlineimaprc +rename .tmux.conf +rename .vimrc +rename .xinitrc +rename .Xmodmap +rename .Xresources +rename .rsync-exclude-weekly +rename .abook +rename .i3blocks +rename .mpd +rename .mutt +rename .ncmpcpp +rename .newsboat +delete +delete diff --git a/.config/ranger/rc.conf b/.config/ranger/rc.conf new file mode 100644 index 0000000..330ba3b --- /dev/null +++ b/.config/ranger/rc.conf @@ -0,0 +1,616 @@ +# =================================================================== +# This file contains the default startup commands for ranger. +# To change them, it is recommended to create the file +# ~/.config/ranger/rc.conf 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 +#set viewmode multipane + +# 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 + +# Which script is used to generate file previews? +# 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 three backends git, hg, bzr. 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 + +# 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. +# +# * 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. +set preview_images_method kitty + +# Use a unicode "..." character to mark cut-off filenames? +set unicode_ellipsis 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 + +# 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? +set draw_borders false + +# 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 files tags in all columns or only in main column? +set display_tags_in_all_columns true + +# Set a title for the window? +set update_title false + +# Set the title to "ranger" in the tmux program? +set update_tmux_title false + +# 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 + +# 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 + +# 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 + +# Avoid previewing files larger than this size, in bytes. Use a value of 0 to +# disable this feature. +set preview_max_size 0 + +# 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 +set line_numbers false + +# =================================================================== +# == 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! quitall +alias qa quitall +alias qall quitall +alias setl setlocal + +alias filter scout -prt +alias find scout -aeit +alias mark scout -mr +alias unmark scout -Mr +alias search scout -rs +alias search_inc scout -rts +alias travel scout -aefiklst + +# =================================================================== +# == Define keys for the browser +# =================================================================== + +# Basic +map Q quit! +map q quit +copymap q ZZ ZQ + +map R reload_cwd +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 ? 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 + +# Change the line mode +map Mf linemode filename +map Mi linemode fileinfo +map Mm linemode mtime +map Mp linemode permissions +map Ms linemode sizemtime +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 <F3> display_file +map <F4> edit +map <F5> copy +map <F6> cut +map <F7> console mkdir%space +map <F8> console delete +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 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 gM cd /mnt +map gs cd /srv +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 shell -f echo -n %d/%f | xsel -i; xsel -o | xsel -i -b +map yd shell -f echo -n %d | xsel -i; xsel -o | xsel -i -b +map yn shell -f echo -n %f | xsel -i; xsel -o | xsel -i -b + +# 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 dD console delete + +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 + +# 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! +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 + +# 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> + +# 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 u+{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 u-{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-left> eval fm.ui.console.move_word(left=1) +cmap <a-right> eval fm.ui.console.move_word(right=1) + +# 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 <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> + +map DD shell mv -t /home/${USER}/.Trash %s + + diff --git a/.config/ranger/rifle.conf b/.config/ranger/rifle.conf new file mode 100644 index 0000000..cac8768 --- /dev/null +++ b/.config/ranger/rifle.conf @@ -0,0 +1,217 @@ +# 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 | $DISPLAY is not empty (i.e. Xorg runs) +# +# 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 chromium, X, flag f = chromium -- "$@" +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 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 = $EDITOR -- "$@" +mime ^text, label pager = "$PAGER" -- "$@" +!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@" +!mime ^text, label pager, ext xml|json|csv|tex|py|pl|rb|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 = wine "$1" +name ^[mM]akefile$ = make + +#-------------------------------------------- +# Code +#------------------------------------------- +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 -- "$@" + +#-------------------------------------------- +# 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 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 -- "$@" + +#------------------------------------------- +# Image Viewing: +#------------------------------------------- +mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@" +mime ^image/svg, has display, X, flag f = display -- "$@" + +mime ^image, has pqiv, X, flag f = pqiv -- "$@" +mime ^image, has sxiv, X, flag f = sxiv -- "$@" +mime ^image, has feh, X, flag f = feh --auto-rotate -Fd --info "exiv2 %f|grep -i 'size\|time' " -- "$@" +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 gimp, X, flag f = gimp -- "$@" +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 als = als -- "$@" | "$PAGER" +ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has als = als -- "$@" | "$PAGER" +ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has aunpack = aunpack -- "$@" +ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has aunpack = aunpack -- "$@" + +# Fallback: +ext tar|gz, has tar = tar vvtf "$@" | "$PAGER" +ext tar|gz, has tar = tar vvxf "$@" + +ext MTS|mts = mpv "$@" + + +#------------------------------------------- +# 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" + +# Define the editor for non-text files + pager as last action + !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ask +label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@" +label pager, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@" + +# The very last action, so that it's never triggered accidentally, is to execute a program: +mime application/x-executable = "$1" +ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has aunpack = extract "$@" +ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has tar, ' flag f = extract "$@" +label extract, ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, = /bin/extract diff --git a/.config/ranger/scope.sh b/.config/ranger/scope.sh new file mode 100755 index 0000000..f684396 --- /dev/null +++ b/.config/ranger/scope.sh @@ -0,0 +1,203 @@ +#!/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. + +# 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) +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=$(echo ${FILE_EXTENSION} | tr '[:upper:]' '[:lower:]') + +# Settings +HIGHLIGHT_SIZE_MAX=262143 # 256KiB +HIGHLIGHT_TABWIDTH=8 +HIGHLIGHT_STYLE='pablo' +PYGMENTIZE_STYLE='autumn' + + +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 + 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 + ;; # Continue with next handler on failure + esac +} + +handle_image() { + local mimetype="${1}" + case "${mimetype}" in + # SVG + # image/svg+xml) + # convert "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6 + # exit 1;; + + # Image + + # 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 1920 \ + # -scale-to-y -1 \ + # -singlefile \ + # -jpeg -tiffcompression jpeg \ + # -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \ + # && exit 6 || exit 1;; + + # 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 +} + +handle_mime() { + local mimetype="${1}" + case "${mimetype}" in + # 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 + highlight --replace-tabs="${HIGHLIGHT_TABWIDTH}" --out-format="${highlight_format}" \ + --style="${HIGHLIGHT_STYLE}" --force -- "${FILE_PATH}" && exit 5 + # pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}" -- "${FILE_PATH}" && exit 5 + exit 2;; + + # 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 diff --git a/.config/ranger/scopeold.sh b/.config/ranger/scopeold.sh new file mode 100755 index 0000000..a0fb2ec --- /dev/null +++ b/.config/ranger/scopeold.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env sh +# ranger supports enhanced previews. If the option "use_preview_script" +# is set to True and this file exists, this script will be called and its +# output is displayed in ranger. ANSI color codes are supported. + +# NOTES: This script is considered a configuration file. If you upgrade +# ranger, it will be left untouched. (You must update it yourself.) +# Also, ranger disables STDIN here, so interactive scripts won't work properly + +# Meanings of exit codes: +# code | meaning | action of ranger +# -----+------------+------------------------------------------- +# 0 | success | success. display stdout as preview +# 1 | no preview | failure. display no preview at all +# 2 | plain text | display the plain content of the file +# 3 | fix width | success. Don't reload when width changes +# 4 | fix height | success. Don't reload when height changes +# 5 | fix both | success. Don't ever reload +# 6 | image | success. display the image $cached points to as an image preview +# 7 | image | success. display the file directly as an image + +# Meaningful aliases for arguments: +path="$1" # Full path of the selected file +width="$2" # Width of the preview pane (number of fitting characters) +height="$3" # Height of the preview pane (number of fitting characters) +cached="$4" # Path that should be used to cache image previews +preview_images="$5" # "True" if image previews are enabled, "False" otherwise. + +maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln + +# Find out something about the file: +mimetype=$(file --mime-type -Lb "$path") +extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}') + +# Functions: +# runs a command and saves its output into $output. Useful if you need +# the return value AND want to use the output in a pipe +try() { output=$(eval '"$@"'); } + +# writes the output of the previously used "try" command +dump() { /bin/echo "$output"; } + +# a common post-processing function used after most commands +trim() { head -n "$maxln"; } + +# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success +safepipe() { "$@"; test $? = 0 -o $? = 141; } + +# Image previews, if enabled in ranger. +if [ "$preview_images" = "True" ]; then + case "$mimetype" in + # Image previews for SVG files, disabled by default. + ###image/svg+xml) + ### convert "$path" "$cached" && exit 6 || exit 1;; + # Image previews for image files. w3mimgdisplay will be called for all + # image files (unless overriden as above), but might fail for + # unsupported types. + image/*) + exit 7;; + # Image preview for video, disabled by default.: + ###video/*) + ### ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;; + esac +fi + +case "$extension" in + # Archive extensions: + 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) + try als "$path" && { dump | trim; exit 0; } + try acat "$path" && { dump | trim; exit 3; } + try bsdtar -lf "$path" && { dump | trim; exit 0; } + exit 1;; + rar) + # avoid password prompt by providing empty password + try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;; + 7z) + # avoid password prompt by providing empty password + try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;; + # PDF documents: + pdf) + try pdftotext -l 10 -nopgbrk -q "$path" - && \ + { dump | trim | fmt -s -w $width; exit 0; } || exit 1;; + # BitTorrent Files + torrent) + try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;; + # ODT Files + odt|ods|odp|sxw) + try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;; + # HTML Pages: + htm|html|xhtml) + try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + ;; # fall back to highlight/cat if the text browsers fail +esac + +case "$mimetype" in + # Syntax highlight for text files: + text/* | */xml) + if [ "$(tput colors)" -ge 256 ]; then + pygmentize_format=terminal256 + highlight_format=xterm256 + else + pygmentize_format=terminal + highlight_format=ansi + fi + try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; } + try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; } + exit 2;; + # Ascii-previews of images: + image/*) + img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;; + # Display information about media files: + video/* | audio/*) + exiftool "$path" && exit 5 + # Use sed to remove spaces so the output fits into the narrow window + try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;; +esac + +exit 1 diff --git a/.config/ranger/tagged b/.config/ranger/tagged new file mode 100644 index 0000000..cdeacd7 --- /dev/null +++ b/.config/ranger/tagged @@ -0,0 +1,4 @@ +/home/lxf/sites/usedbarcode.net/usedbarcode/design/templates/staff/home.html +/home/lxf/sites/usedbarcode.net/usedbarcode/app/contracts/models.py +/home/lxf/sites/vanlife.tools/app/accounts/migrations +/home/lxf/writing/opera/opera-for-android-best-features.txt diff --git a/.config/sway/config b/.config/sway/config new file mode 100644 index 0000000..bcd235f --- /dev/null +++ b/.config/sway/config @@ -0,0 +1,219 @@ +set $mod Mod1 +set $term alacritty +set $background /mnt/storage/pictures/desktops/aspens1.jpg +set $screenshot grim ~/pictures/screenshots/scrn-$(date +"%Y-%m-%d-%H-%M-%S").png +set $screenclip slurp | grim -g - ~/pictures/screenshots/scrn-$(date +"%Y-%m-%d-%H-%M-%S").png + +font pango:Inconsolata, Icons 13 + +# kill focused window +bindsym $mod+Shift+q kill + +# Mouse behaviour wrt windows. +focus_follows_mouse no + +# sleep and lock +exec swayidle -w \ + timeout 300 'swaylock -f -c 000000' \ + timeout 600 'swaymsg "output * dpms off"' \ + resume 'swaymsg "output * dpms on"' \ + before-sleep 'swaylock -f -c 000000' + +# Shortcuts +bindsym $mod+Return exec $term +bindsym $mod+F11 exec $screenshot +bindsym $mod+F12 exec $screenclip + +# background +output * bg $background fill + +input "1739:0:Synaptics_TM3075-002" { + natural_scroll enabled +} +# change focus +#bindsym $mod+j focus left +#bindsym $mod+k focus right +#bindsym $mod+l focus up +#bindsym $mod+semicolon focus down + +# move focused window +bindsym $mod+Shift+j move left +bindsym $mod+Shift+k move right +bindsym $mod+Shift+l move up +bindsym $mod+Shift+semicolon move down + +# split in horizontal orientation +bindsym $mod+Shift+h split h + +# split in vertical orientation +bindsym $mod+v split v + +# enter fullscreen mode for the focused container +bindsym $mod+Shift+f fullscreen toggle +bindsym $mod+f floating toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+Shift+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +bindsym $mod+d focus child + +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" + + +# switch to workspace +bindsym $mod+1 workspace $ws1 +bindsym $mod+2 workspace $ws2 +bindsym $mod+3 workspace $ws3 +bindsym $mod+4 workspace $ws4 +bindsym $mod+5 workspace $ws5 +bindsym $mod+6 workspace $ws6 +bindsym $mod+7 workspace $ws7 +bindsym $mod+8 workspace $ws8 +bindsym $mod+9 workspace $ws9 +bindsym $mod+0 workspace $ws10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $ws1 +bindsym $mod+Shift+2 move container to workspace $ws2 +bindsym $mod+Shift+3 move container to workspace $ws3 +bindsym $mod+Shift+4 move container to workspace $ws4 +bindsym $mod+Shift+5 move container to workspace $ws5 +bindsym $mod+Shift+6 move container to workspace $ws6 +bindsym $mod+Shift+7 move container to workspace $ws7 +bindsym $mod+Shift+8 move container to workspace $ws8 +bindsym $mod+Shift+9 move container to workspace $ws9 +bindsym $mod+Shift+0 move container to workspace $ws10 + +# Scratchpad: +# +# Sway has a "scratchpad", which is a bag of holding for windows. +# You can send windows there and get them back later. + +# Move the currently focused window to the scratchpad +bindsym $mod+Shift+minus move scratchpad + +# Show the next scratchpad window or hide the focused scratchpad window. +# If there are multiple scratchpad windows, this command cycles through them. +bindsym $mod+minus scratchpad show + +for_window [class="^Chromium$"] border none +for_window [title="Oracle VM VirtualBox Manager"] floating enable +for_window [class="^Pcmanfm"] floating enable +for_window [class="^lxf$"] floating enable +for_window [class="^Darktable$"] border none +for_window [app_id="darktable"] border none +for_window [app_id="python3"] border none, floating enable +for_window [app_id="org.qutebrowser.qutebrowser"] border none +for_window [app_id="kitty"] border none +for_window [app_id="qutebrowser"] border none +for_window [class="^URxvt"] border none +for_window [class="^Firefox Developer"] border none +for_window [class="^Vivaldi"] border none +for_window [class="^qutebrowser"] border none +for_window [app_id="^Alacritty"] border none +for_window [class="Pavucontrol"] floating enable +for_window [window_role="pop-up"] floating enable +for_window [class="Yad"] floating enable +for_window [class="feh"] floating enable +for_window [class="QtPass"] floating enable +for_window [class="hangouts.google.com"] floating disable +for_window [class="hangouts.google.com"] border normal + +assign [class="qutebrowser"] $ws2 +assign [app_id="org.qutebrowser.qutebrowser"] $ws2 +assign [class="Firefox Developer"] $ws4 +assign [class="Slack"] $ws6 +assign [class="Vivaldi"] $ws4 +assign [class="Darktable"] $ws3 +assign [app_id="darktable"] $ws3 +assign [title="Oracle VM VirtualBox Manager"] $ws4 + +#workspace switching +bindsym $mod+k workspace next +bindsym $mod+j workspace prev +#bindsym $mod+space exec dmenu_run + +#Volumn and Brightness +bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% +bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% +bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle +bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle +bindsym --locked XF86MonBrightnessUp exec --no-startup-id light -A 10 +bindsym --locked XF86MonBrightnessDown exec --no-startup-id light -U 10 + +set $alsacard 1 + +bindsym $mod+Shift+c reload +bindsym $mod+Shift+r restart +bindsym $mod+Shift+e 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 + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+r mode "resize" + +# Input configuration +input * { + xkb_variant nodeadkeys + xkb_options ctrl:nocaps +} + +#exec --no-startup-id redshift-gtk -l 35.052234:-118.243685 -m randr -t 5700:3600 & +exec --no-startup-id qutebrowser & +exec --no-startup-id alacritty & +exec --no-startup-id nextcloud & +#exec --no-startup-id xset r rate 250 25 & +#exec --no-startup-id xset -b +#exec --no-startup-id xcape -e 'Control_L=Escape' + +# clipboard manager +exec wl-paste -t text --watch clipman store --max-items=60 --histpath="~/.local/share/clipman-primary.json" +bindsym $mod+h exec clipman pick --tool="wofi" --max-items=30 --histpath="~/.local/share/clipman-primary.json" + +bindsym $mod+Space exec alacritty --class 'launcher' --command bash -c 'compgen -c | sort -u | fzf | xargs -r swaymsg -t command exec' + +bindsym $mod+p exec alacritty --class 'launcher' --command bash -c 'pass clip --fzf | xargs -r swaymsg -t command exec' + +bindsym $mod+s exec alacritty --class 'launcher' --command bash -c 'pet exec | wl-copy | xargs -r swaymsg -t command exec' + +for_window [app_id="^launcher$"] floating enable, border none, resize set width 25 ppt height 20 ppt, move position 0 px 0 px + +bindsym $mod+b exec alacritty --class 'qutesearch' --command bash -c 'url=$(cat .config/qutebrowser/bookmarks/urls | fzf | cut -d \" \" -f 1) && qutebrowser "$url" | xargs -r swaymsg -t command exec' + +for_window [app_id="^qutesearch$"] floating enable, border none, resize set width 80 ppt height 60 ppt, move position 0 px 0 px + +exec_always ~/.config/waybar/waybar.sh diff --git a/.config/waybar/config b/.config/waybar/config new file mode 100644 index 0000000..7fc5a76 --- /dev/null +++ b/.config/waybar/config @@ -0,0 +1,115 @@ +{ + "layer": "bottom", + "position": "bottom", + "height": 24, + "modules-left": ["sway/workspaces", "sway/mode"], + "modules-center": [""], + "modules-right": ["mpd", "network", "idle_inhibitor", "battery", "memory", "tray", "clock"], + "sway/mode": { + "format": " {}" + }, + "sway/workspaces": { + "format": "{name}", + "disable-scroll": true + }, + "clock": { + "format": "{:%a %b %d %H:%M}", + "tooltip": false, + "on-click": "~/./bin/cal.sh" + }, + "battery": { + "format": "{capacity}% {icon} | ", + "format-alt": "{time} {icon}", + "format-icons": ["", "", "", "", ""], + "format-charging": "{capacity}% CHR", + "interval": 30, + "states": { + "warning": 25, + "critical": 10 + }, + "tooltip": false + }, + "network": { + "interface": "wlp3s0", + "format": "{ifname}", + "format-wifi": "{essid} ({signalStrength}%) | ", + "format-ethernet": "{ifname} ", + "format-disconnected": "", //An empty format will hide the module. + "tooltip-format": "{ifname}", + "tooltip-format-wifi": "{essid} ({signalStrength}%) ", + "tooltip-format-ethernet": "{ifname} ", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50, + "on-click": "alacritty -e nmtui", + "tooltip": false + }, + "pulseaudio": { + "format": "{icon}", + "format-alt": "{volume} {icon} | ", + "format-alt-click": "click-right", + "format-muted": "", + "format-icons": { + "phone": [" ", " ", " ", " "], + "default": ["", "", "", ""] + }, + "scroll-step": 10, + "on-click": "pavucontrol", + "tooltip": false + }, + "mpd": { + "format": "{stateIcon} {artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) | ", + "format-disconnected": "Disconnected ", + "format-stopped": "Stopped ", + "interval": 2, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip": false, + "on-click": "mpc toggle", + "on-click-right": "mpc next" + }, + "custom/storage": { + "format": "{} ", + "format-alt": "{percentage}% ", + "format-alt-click": "click-right", + "return-type": "json", + "interval": 60, + "exec": "~/.config/waybar/modules/storage.sh" + }, + "backlight": { + "format": "{icon}", + "format-alt": "{percent}% {icon} | ", + "format-alt-click": "click-right", + "format-icons": ["", ""], + "on-scroll-down": "light -A 1", + "on-scroll-up": "light -U 1" + }, + "custom/weather": { + "format": "{}", + "format-alt": "{alt}: {}", + "format-alt-click": "click-right", + "interval": 1800, + "return-type": "json", + "exec": "~/.config/waybar/modules/weather.sh", + "exec-if": "ping wttr.in -c1" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + }, + "tooltip": false + }, + "cpu": { + "format": "{usage}% | ", + "tooltip": false + }, + "memory": { + "format": "{used:0.1f}G/{total:0.1f}G | " + }, + "tray": { + "icon-size": 16 + } +} diff --git a/.config/waybar/modules/storage.sh b/.config/waybar/modules/storage.sh new file mode 100644 index 0000000..d495da4 --- /dev/null +++ b/.config/waybar/modules/storage.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +mount="/" +warning=20 +critical=10 + +df -h -P -l "$mount" | awk -v warning=$warning -v critical=$critical ' +/\/.*/ { + text=$4 + tooltip="Filesystem: "$1"\rSize: "$2"\rUsed: "$3"\rAvail: "$4"\rUse%: "$5"\rMounted on: "$6 + use=$5 + exit 0 +} +END { + class="" + gsub(/%$/,"",use) + if ((100 - use) < critical) { + class="critical" + } else if ((100 - use) < warning) { + class="warning" + } + print "{\"text\":\""text"\", \"percentage\":"use",\"tooltip\":\""tooltip"\", \"class\":\""class"\"}" +} + ' diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..d388c99 --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,71 @@ +* { + border: none; + border-radius: 0; + font-family: Sans; + font-size: 15px; + box-shadow: none; + text-shadow: none; + transition-duration: 0s; +} + +window { + color: rgba(217, 216, 216, 1); + background: rgba(35, 31, 32, 0.00); +} + +window#waybar.solo { + color: rgba(217, 216, 216, 1); + background: rgba(35, 31, 32, 0.85); +} + +#workspaces { + margin: 0 5px; +} + +#workspaces button { + padding: 0 5px; + color: rgba(217, 216, 216, 0.4); +} + +#workspaces button.visible { + color: rgba(217, 216, 216, 1); +} + +#workspaces button.focused { + border-top: 3px solid rgba(217, 216, 216, 1); + border-bottom: 3px solid rgba(217, 216, 216, 0); +} + +#workspaces button.urgent { + color: rgba(238, 46, 36, 1); +} + +#mode, #battery, #cpu, #memory, #network, #pulseaudio, #idle_inhibitor, #backlight, #custom-storage, #custom-spotify, #custom-weather, #custom-mail { + margin: 0px 6px 0px 10px; + min-width: 25px; +} + +#clock { + margin: 0px 16px 0px 10px; + min-width: 140px; +} + +#battery.warning { + color: rgba(255, 210, 4, 1); +} + +#battery.critical { + color: rgba(238, 46, 36, 1); +} + +#battery.charging { + color: rgba(217, 216, 216, 1); +} + +#custom-storage.warning { + color: rgba(255, 210, 4, 1); +} + +#custom-storage.critical { + color: rgba(238, 46, 36, 1); +} diff --git a/.config/waybar/waybar.sh b/.config/waybar/waybar.sh new file mode 100755 index 0000000..720620c --- /dev/null +++ b/.config/waybar/waybar.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +# Terminate already running bar instances +killall -q waybar + +# Wait until the processes have been shut down +while pgrep -x waybar >/dev/null; do sleep 1; done + +# Launch main +waybar diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc new file mode 100644 index 0000000..ea10740 --- /dev/null +++ b/.config/zathura/zathurarc @@ -0,0 +1 @@ +set selection-clipboard clipboard |