diff options
Diffstat (limited to '.config')
38 files changed, 2981 insertions, 0 deletions
diff --git a/.config/aerc/aerc.conf b/.config/aerc/aerc.conf new file mode 100644 index 0000000..855ce3d --- /dev/null +++ b/.config/aerc/aerc.conf @@ -0,0 +1,148 @@ +# +# aerc main configuration + +[ui] +# +# Describes the format for each row in a mailbox view. This field is compatible +# with mutt's printf-like syntax. +# +# Default: +index-format=%D %-40.40n %s + +# +# See time.Time#Format at https://godoc.org/time#Time.Format +# +# Default: 2006-01-02 03:04 PM (ISO 8601 + 12 hour time) +timestamp-format=2006-01-02 03:04 PM + +# +# Width of the sidebar, including the border. +# +# Default: 20 +sidebar-width=25 + +# +# Message to display when viewing an empty folder. +# +# Default: (no messages) +empty-message=(no messages) + +# Message to display when no folders exists or are all filtered +# +# Default: (no folders) +empty-dirlist=(no folders) + +# Enable mouse events in the ui, e.g. clicking and scrolling with the mousewheel +# +# Default: false +mouse-enabled=false + +# +# Ring the bell when new messages are received +# +# Default: yes +new-message-bell=true + +# Describes the format string to use for the directory list +# +# Default: %n %>r +dirlist-format=%n %>r + +[viewer] +# +# Specifies the pager to use when displaying emails. Note that some filters +# may add ANSI codes to add color to rendered emails, so you may want to use a +# pager which supports ANSI codes. +# +# Default: less -R +pager=less -g -i -M -R -w -X -s + +# +# If an email offers several versions (multipart), you can configure which +# mimetype to prefer. For example, this can be used to prefer plaintext over +# html emails. +# +# Default: text/plain,text/html +alternatives=text/plain,text/html + +# +# Default setting to determine whether to show full headers or only parsed +# ones in message viewer. +# +# Default: false +show-headers=false + +# +# Layout of headers when viewing a message. To display multiple headers in the +# same row, separate them with a pipe, e.g. "From|To". Rows will be hidden if +# none of their specified headers are present in the message. +# +# Default: From|To,Cc|Bcc,Date,Subject +header-layout=From|To,Cc|Bcc,Date,Subject + +# Whether to always show the mimetype of an email, even when it is just a single part +# +# Default: false +always-show-mime=true + +[compose] +# +# Specifies the command to run the editor with. It will be shown in an embedded +# terminal, though it may also launch a graphical window if the environment +# supports it. Defaults to $EDITOR, or vi. +editor= + +# +# Default header fields to display when composing a message. To display +# multiple headers in the same row, separate them with a pipe, e.g. "To|From". +# +# Default: To|From,Subject +header-layout=To|From,Subject + +[filters] +# +# Filters allow you to pipe an email body through a shell command to render +# certain emails differently, e.g. highlighting them with ANSI escape codes. +# +# The first filter which matches the email's mimetype will be used, so order +# them from most to least specific. +# +# You can also match on non-mimetypes, by prefixing with the header to match +# against (non-case-sensitive) and a comma, e.g. subject,text will match a +# subject which contains "text". Use header,~regex to match against a regex. +subject,~^\[PATCH=awk -f /usr/share/aerc/filters/hldiff +text/html=/usr/share/aerc/filters/html +text/*=awk -f /usr/share/aerc/filters/plaintext +#image/*=catimg -w $(tput cols) - +application/pdf=/usr/share/aerc/filters/pdf + +[triggers] +# +# Triggers specify commands to execute when certain events occur. +# +# Example: +# new-email=exec notify-send "New email from %n" "%s"<Enter> + +# +# Executed when a new email arrives in the selected folder +new-email=exec notify-send -a aerc -i mail-client "New mail from %n" "%s"<Enter> + +[templates] +# Templates are used to populate email bodies automatically. +# + +# The directories where the templates are stored. It takes a colon-separated +# list of directories. +# +# default: /usr/share/aerc/templates/ +template-dirs=/usr/share/aerc/templates/:/home/robert/.config/aerc/templates + +# The template to be used for quoted replies. +# +# default: quoted_reply +quoted-reply=quoted_reply + +# The template to be used for forward as body. +# +# default: forward_as_body +forwards=forward_as_body diff --git a/.config/aerc/binds.conf b/.config/aerc/binds.conf new file mode 100644 index 0000000..6037267 --- /dev/null +++ b/.config/aerc/binds.conf @@ -0,0 +1,101 @@ +# Binds are of the form <key sequence> = <command to run> +# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>" +# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit +<C-p> = :prev-tab<Enter> +<C-n> = :next-tab<Enter> +<C-t> = :term<Enter> + +[messages] +q = :quit<Enter> + +j = :next<Enter> +<Down> = :next<Enter> +<C-d> = :next 50%<Enter> +<C-f> = :next 100%<Enter> +<PgDn> = :next -s 100%<Enter> + +k = :prev<Enter> +<Up> = :prev<Enter> +<C-u> = :prev 50%<Enter> +<C-b> = :prev 100%<Enter> +<PgUp> = :prev -s 100%<Enter> +g = :select 0<Enter> +G = :select -1<Enter> + +J = :next-folder<Enter> +K = :prev-folder<Enter> + +<Enter> = :view<Enter> +# d = :confirm 'Really delete this message?' ':delete-message<Enter>'<Enter> +d = :mv Trash<Enter> +D = :delete<Enter> +a = :archive year<Enter> + +C = :compose<Enter> + +rr = :reply -a<Enter> +rq = :reply -aq<Enter> +Rr = :reply<Enter> +Rq = :reply -q<Enter> + +c = :cf<space> +$ = :term<space> +! = :term<space> +| = :pipe<space> + +/ = :search<space> +\ = :filter<space> +n = :next-result<Enter> +N = :prev-result<Enter> + +[view] +q = :close<Enter> +| = :pipe<space> +D = :delete<Enter> +S = :save<space> +A = :archive year<Enter> + +f = :forward<Enter> +rr = :reply -a<Enter> +rq = :reply -aq<Enter> +Rr = :reply<Enter> +Rq = :reply -q<Enter> + +H = :toggle-headers<Enter> +<C-k> = :prev-part<Enter> +<C-j> = :next-part<Enter> +J = :next<Enter> +K = :prev<Enter> + +[compose] +# Keybindings used when the embedded terminal is not selected in the compose +# view +$ex = <C-x> +<C-k> = :prev-field<Enter> +<C-j> = :next-field<Enter> +<tab> = :next-field<Enter> + +[compose::editor] +# Keybindings used when the embedded terminal is selected in the compose view +$noinherit = true +$ex = <C-x> +<C-k> = :prev-field<Enter> +<C-j> = :next-field<Enter> +<C-p> = :prev-tab<Enter> +<C-n> = :next-tab<Enter> + +[compose::review] +# Keybindings used when reviewing a message to be sent +y = :send<Enter> +n = :abort<Enter> +q = :abort<Enter> +e = :edit<Enter> +a = :attach<Enter> +d = :save-draft<Enter> + +[terminal] +$noinherit = true +$ex = <C-x> + +<C-p> = :prev-tab<Enter> +<C-n> = :next-tab<Enter> diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml new file mode 100644 index 0000000..4d826d2 --- /dev/null +++ b/.config/alacritty/alacritty.yml @@ -0,0 +1,539 @@ +# 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 + TERM: alacritty + # COLORTERM: truecolor + +window: + # Window dimensions (changes require restart) + # + # Specified in number of columns/lines, not pixels. + # If both are `0`, this setting is ignored. + dimensions: + columns: 80 + lines: 24 + + # Window 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 + 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: + # Application instance name + instance: Alacritty + # General application class + general: Alacritty + + # GTK theme variant (Linux only) + # + # Override the variant of the GTK theme. Commonly supported values are `dark` and `light`. + # Set this to `None` to use the default theme variant. + gtk_theme_variant: None + +#scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + #history: 10000 + + # Number of lines the viewport will move for every line scrolled when + # scrollback is enabled (history > 0). + #multiplier: 3 + + # Scroll to the bottom when new text is written to the terminal. + auto_scroll: true + +# Spaces per Tab (changes require restart) +# +# This setting defines the width of a tab in cells. +# +# Some applications, like Emacs, rely on knowing about the width of a tab. +# To prevent unexpected behavior in these applications, it's also required to +# change the `it` value in terminfo when altering this setting. +tabspaces: 8 + +# Font configuration (changes require restart) +# +# Important font attributes like antialiasing, subpixel aa, and hinting can be +# controlled through fontconfig. Specifically, the following attributes should +# have an effect: +# - hintstyle +# - antialias +# - lcdfilter +# - rgba +# +# For instance, if you wish to disable subpixel antialiasing, you might set the +# rgba property to `none`. If you wish to completely disable antialiasing, you +# can set antialias to `false`. +# +# Please see these resources for more information on how to use fontconfig: +# - https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration +# - file:///usr/share/doc/fontconfig/fontconfig-user.html +font: + # Normal (roman) font face + normal: + family: Iosevka + + # The `style` can be specified to pick a specific face. + style: Slim + + # Bold font face + bold: + style: Bold + + # Italic font face + italic: + style: Italic + + bold_italic: + style: Bold Italic + + # Point size + size: 13.0 + + # Offset is the extra space around each character. `offset.y` can be thought of + # as modifying the line spacing, and `offset.x` as modifying the letter spacing. + #offset: + # x: 0 + # y: 0 + + # Glyph offset determines the locations of the glyphs within their cells with + # the default being at the bottom. Increasing `x` moves the glyph to the right, + # increasing `y` moves the glyph upwards. + #glyph_offset: + # x: 0 + # y: 0 + + # 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: false + +# Colors (Papercolor) +colors: + # Default colors + primary: + background: &bg '#1c1c1c' + foreground: &fg '#d0d0d0' + + # Bright and dim foreground colors + # + # The dimmed foreground color is calculated automatically if it is not present. + # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors` + # is `false`, the normal foreground color will be used. + # dim_foreground: '#BDC0BA' + # bright_foreground: '#ffffff' # just white ;) + + # Cursor colors + # + # Colors which should be used to draw the terminal cursor. If these are unset, + # the cursor color will be the inverse of the cell color. + cursor: + text: *bg + cursor: *fg + + # Selection colors + # + # Colors which should be used to draw the selection area. If selection + # background is unset, selection color will be the inverse of the cell colors. + # If only text is unset the cell text color will remain the same. + selection: + text: '#251c16' + background: '#fffffc' + + # Normal colors + normal: + black: '#1c1c1c' + red: '#af005f' + green: '#5faf00' + yellow: '#d7af5f' + blue: '#5fafd7' + magenta: '#808080' + cyan: '#d7875f' + white: '#d0d0d0' + + # Bright colors + bright: + black: '#585858' + red: '#5faf5f' + green: '#afd700' + yellow: '#af87d7' + blue: '#ffaf00' + magenta: '#00afaf' + cyan: '#5f8787' + white: '#fffffc' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + #dim: + # black: '0x000000' + # red: '0x8c3336' + # green: '0x7a8530' + # yellow: '0x97822e' + # blue: '0x506d8f' + # magenta: '0x80638e' + # cyan: '0x497e7a' + # white: '0x9a9a9a' + + # Indexed Colors + # + # The indexed colors include all colors from 16 to 256. + # When these are not set, they're filled with sensible defaults. + # + # Example: + # - { index: 16, color: '0x000000' } + indexed_colors: [] + +# 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: + duration: 0 + color: '#af005f' + # bell_command: { program: "mpv", args: ["--no-config", "--no-idle", "/usr/share/sounds/gnome/default/alerts/glass.ogg"] } + +# 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.99 + +selection: + semantic_escape_chars: ",│`|:\"' ()[]{}<>" + + # When set to `true`, selected text will be copied to both the primary and + # the selection clipboard. Otherwise, it will only be copied to the selection + # clipboard. + save_to_clipboard: false + +dynamic_title: true + +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 + +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: true + + 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: url-launcher + 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: Control + +# Mouse bindings +# +# Mouse bindings are specified as a list of objects, much like the key +# bindings further below. +# +# Each mouse binding will specify a: +# +# - `mouse`: +# +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# - `action` (see key bindings) +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Middle, action: PasteSelection } + +# Key bindings +# +# Key bindings are specified as a list of objects. For example, this is the +# default paste binding: +# +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Each key binding will specify a: +# +# - `key`: Identifier of the key pressed +# +# - A-Z +# - F1-F24 +# - Key0-Key9 +# +# A full list with available key codes can be found here: +# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants +# +# Instead of using the name of the keys, the `key` field also supports using +# the scancode of the desired key. Scancodes have to be specified as a +# decimal number. This command will allow you to display the hex scancodes +# for certain keys: +# +# `showkey --scancodes`. +# +# Then exactly one of: +# +# - `chars`: Send a byte sequence to the running application +# +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. To find escape codes for bindings +# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside +# of tmux. Note that applications use terminfo to map escape sequences back +# to keys. It is therefore required to update the terminfo when changing an +# escape sequence. +# +# - `action`: Execute a predefined action +# +# - Copy +# - Paste +# - PasteSelection +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# - Hide +# - Quit +# - ToggleFullscreen +# - SpawnNewInstance +# - ClearLogNotice +# - ReceiveChar +# - None +# +# (macOS only): +# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - Alt +# +# A `~` operator can be used before a mode to apply the binding whenever +# the mode is *not* active, e.g. `~Alt`. +# +# Bindings are always filled by default, but will be replaced when a new +# binding with the same triggers is defined. To unset a default binding, it can +# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for +# a no-op if you do not wish to receive input characters for that binding. +key_bindings: + - { key: V, mods: Super, action: Paste } + - { key: C, mods: Super, 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 } + + - { key: W, mods: Super|Shift, action: Quit } + - { key: N, mods: Super|Shift, action: SpawnNewInstance } + + - { key: Paste, action: Paste } + - { key: Copy, action: Copy } + - { key: L, mods: Control, action: ClearLogNotice } + - { key: L, mods: Control, chars: "\x0c" } + - { key: PageUp, mods: Alt, action: ScrollPageUp } + - { key: PageDown, mods: Alt, action: ScrollPageDown } diff --git a/.config/alacritty/launcher.yml b/.config/alacritty/launcher.yml new file mode 100644 index 0000000..70f3c45 --- /dev/null +++ b/.config/alacritty/launcher.yml @@ -0,0 +1,55 @@ +env: + TERM: alacritty + GUICALL: '1' + +window: + padding: + x: 8 + y: 8 + dynamic_padding: true + decorations: none + +font: + normal: + family: Iosevka + style: Medium + bold: + style: Bold + italic: + style: Italic + size: 13.0 + +colors: + primary: + background: '#221e1d' + foreground: '#fffefe' + dim_foreground: '#BDC0BA' + bright_foreground: '#ffffff' # just white ;) + cursor: + text: '#221e1d' + cursor: '#fffefe' + normal: + black: '#221e1d' + red: '#b76868' + green: '#bfbd90' + yellow: '#ae9892' + blue: '#b5c1c0' + magenta: '#76a3b0' + cyan: '#4777aa' + white: '#c7c6c6' + bright: + black: '#3d3533' + red: '#ff7474' + green: '#ffffa5' + yellow: '#f6b9a9' + blue: '#d3ffff' + magenta: '#86def7' + cyan: '#4c9aec' + white: '#fffefe' + +background_opacity: 0.95 +# shell: +# program: /usr/bin/env +# args: +# - LD_LIBRARY_PATH=/usr/local/lib64 +# - mrsh diff --git a/.config/evdoublebind/config b/.config/evdoublebind/config new file mode 100644 index 0000000..b5feede --- /dev/null +++ b/.config/evdoublebind/config @@ -0,0 +1,3 @@ +unused : <ESC> +kbd: /dev/input/by-path/platform-i8042-serio-0-event-kbd +<CAPS> : void | void diff --git a/.config/git/config b/.config/git/config new file mode 100644 index 0000000..a689381 --- /dev/null +++ b/.config/git/config @@ -0,0 +1,219 @@ +[user] + name = Robert Günzler + email = r@gnzler.io + +[sendemail] + smtpserver = /usr/bin/msmtp + smtpserveroption=-a + smtpserveroption=gnzler + annotate = true + confirm = always + +[core] + excludesfile = ~/.git/ignore + # Treat spaces before tabs and all kinds of trailing whitespace as an error + # [default] trailing-space: looks for spaces at the end of a line + # [default] space-before-tab: looks for spaces before tabs at the beginning of a line + whitespace = space-before-tab,-indent-with-non-tab,trailing-space + + # Make `git rebase` safer on OS X + # More info: <http://www.git-tower.com/blog/make-git-rebase-safe-on-osx/> + trustctime = false + + # Prevent showing files whose names contain non-ASCII symbols as unversioned. + # http://michael-kuehnel.de/git/2014/11/21/git-mac-osx-and-german-umlaute.html + precomposeunicode = false + filemode = false + +[init] + # templateDir = ~/.dotfiles/git/templates + +[commit] + # template = ~/.gitmessage + +[alias] + stp = status --porcelain --branch + sti = status --porcelain --branch --ignored + st = status -sb + stl = ls-files -m -o --exclude-standard + ci = commit + br = branch + co = checkout + cp = cherry-pick + cr = clone --recursive + df = diff --word-diff + d = "!f() { local a=${1:-HEAD}; local b=${2:-master}; if [[ $a == '-' ]]; then a=HEAD; fi; printf ' %s is %s commits ahead and %s commits behind %s\n' `git rev-parse --short=7 $a` `git rev-list --count $b..$a` `git rev-list --count $a..$b` $b; printf ' last common commit (merge-base): %s\n' `git merge-base $a $b`; git diff --shortstat $a..$b; }; f" + unstage = reset --hard HEAD + l = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit + ll = log --pretty=oneline --graph --abbrev-commit + lm = log --pretty=format:'* %s (%h)' + lg = log -p + g = grep --break --heading --line-number + amend = commit --amend --reuse-message=HEAD --edit + contrib = shortlog --summary --numbered + show-ignored = "! git clean -ndX | perl -pe 's/Would remove/Ignored:/'" + # usage: change-date [rev] [date] [...additional filter-branch flags] + # rewrites the commit/author date of <rev> to be <date> + # if <rev> is empty HEAD is used + # if <date> is empty the current time is used + change-date = "!f() { now=\"$(date +'%a %b %d %H:%M:%S %Y %z')\"; head=\"$(git rev-parse HEAD)\"; git filter-branch $3 --env-filter 'if [[ $GIT_COMMIT = ${1-$head} ]]; then export GIT_AUTHOR_DATE=${2:-$now}; export GIT_COMMITTER_DATE=${2:-$now}; fi'; }; f" + # usage: ld <n> + # prints out the `git log` for the n last days + log-since = "!sh -c \"git log --since '${1:-1} days ago' --oneline --author $(git config user.email)\" -" + # usage: pr <num> [<remote>] + # creates local branch pr/<num> from origin or <remote> and checks it out + pr = "!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f" + total-lines = "! git ls-tree -r master --name-only | xargs -I {} git blame --line-porcelain {} | sed -n 's/^author //p' | sort | uniq -c | sort -rn" + fixup = "!f() { git commit --fixup=${1}; }; f" + rbi = rebase --autosquash -i + rbi-pr = !bash -c 'git rebase --autosquash -i `git merge-base HEAD ${1:-origin/master}`' + pushf = push --force-with-lease + root = "rev-parse --show-toplevel" + trailer = "!f() { msg=$(git rev-parse --show-toplevel)/LAST_COMMIT_MSG; git log -1 --format=%B > $msg; git interpret-trailers --in-place --trailer $@ $msg; git commit --allow-empty --no-verify --amend --only --edit --file $msg; rm $msg; }; f" + a = add --patch + edit = !bash -c 'set -x && git rbi "${1:-HEAD}"^' - + oldest-ancestor = !bash -c 'diff -u <(git rev-list --first-parent ${1:-master}) <(git rev-list --first-parent ${2:-HEAD}) | sed -ne \"s/^ //p\" | head -1' + rebase-onto = !bash -c 'git rebase --onto ${1} `git oldest-ancestor ${2} ${3}` ${3}' - + find-by-subject = "!f() { set -ex; s=`git log -1 --format=%s ${1}`; git --no-pager log -1 --grep=\"^${s}$\" --no-merges ${2}; }; f" + tig = !tig + + +[pager] + diff = less + +[apply] + # Detect whitespace errors when applying a patch + whitespace = fix + +[color] + # Use colors in Git commands that are capable of colored output when + # outputting to the terminal. (This is the default setting in Git ≥ 1.8.4.) + ui = auto + +[color "branch"] + current = yellow reverse + local = yellow + remote = green + +[color "diff"] + meta = yellow bold + frag = magenta bold # line info + old = red # deletions + new = green # additions + +[color "status"] + added = yellow + changed = green + untracked = cyan + +[credential] + # helper = osxkeychain + +[diff] + # Detect copies as well as renames + renames = copies + renameLimit = 3210 + +[diff "bin"] + # Use `hexdump` to diff binary files + textconv = hexdump -v -C + renames = copies + tool = vimdiff +[difftool] + prompt = false + +[fetch] + prune = true + +[grep] + lineNumber = true + +[help] + # Automatically correct and execute mistyped commands + autocorrect = 10 + +[merge] + # Include summaries of merged commits in newly created merge commit messages + log = true + defaultToUpstream = true + tool = vimdiff +[mergetool "vimdiff"] + path = /usr/bin/nvim + conflictstyle = diff3 + prompt = false + +[rebase] + ; instructionFormat = "%aI %an <%ae> | %s" + +[rerere] + enabled = false + +[push] + # Use the Git 1.x.x default to avoid errors on machines with old Git + # installations. To use `simple` instead, add this to your `~/.extra` file: + # `git config --global push.default simple`. See http://git.io/mMah-w. + default = simple + # Make `git push` push relevant annotated tags when pushing branches out. + followTags = true + +# URL shorthands +[url "git@github.com:"] + insteadOf = "gh:" + insteadOf = "https://github.com/" + pushInsteadOf = "github:" + pushInsteadOf = "git://github.com/" + +[url "git@bitbucket.org:"] + insteadOf = "bb:" + insteadOf = "https://bitbucket.org/" + pushInsteadOf = "bitbucket:" + pushInsteadOf = "git://bitbucket.org/" + +[url "git@gitlab.com:"] + insteadOf = "gl:" + insteadOf = "https://gitlab.com/" + pushInsteadOf = "gitlab:" + pushInsteadOf = "git://gitlab.com/" + +[url "git@git.sr.ht:"] + insteadOf = "srht:" + insteadOf = "https://git.sr.ht/" + pushInsteadOf = "srht:" + pushInsteadOf = "git://git.sr.ht/" + +[url "git://github.com/"] + insteadOf = "github:" + +[url "git@gist.github.com:"] + insteadOf = "gst:" + insteadOf = "gist:" + pushInsteadOf = "gist:" + pushInsteadOf = "git://gist.github.com/" + +[http] + sslverify = true + cookiefile = /home/robert/.gitcookies + +[trailer "sign"] + key = "Signed-off-by" + ifmissing = add + ; command = bash -c 'echo \"$(git config user.name) <${$(git config user.signemail):-$(git config user.email)}>\"' + command = echo \"`git config user.name` <`git config user.signemail || git config user.email`>\" + where = end +[trailer "changetype"] + key = "Change-type" + ifmissing = add + ifexists = doNothing + where = start +[trailer "connects"] + key = "Connects-to" + ifmissing = add + where = start +[trailer "depends"] + key = "Depends-on" + ifmissing = add + where = start +[trailer "changelog"] + key = "Changelog-entry" + ifmissing = add + where = start diff --git a/.config/git/ignore b/.config/git/ignore new file mode 100644 index 0000000..9a4c0d2 --- /dev/null +++ b/.config/git/ignore @@ -0,0 +1,49 @@ +# Random +*~ +._* +Thumbs.db +.DS_Store* +Desktop.ini +.idea +ehthumbs.db +Icon* +Session.vim + +# external +.Spotlight-V100 +.Trashes + +# compiled +*.o +*.out +*.pyc +*.so +*.exe +*.class +*.dll +bin/ +tags + +# logs and db +*.log +*.sql +*.sqlite +*.db + +# packages +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# web stuff +node_modules +bower_components + +# personal stuff +.todo.md +.org.md diff --git a/.config/imv/config b/.config/imv/config new file mode 100644 index 0000000..64b2d1f --- /dev/null +++ b/.config/imv/config @@ -0,0 +1,10 @@ +[options] +overlay = true +overlay_font = Iosevka Sparkle:14 + +[binds] +n = next +p = prev +e = exec echo $imv_current_file +u = scaling none +y = scaling full diff --git a/.config/kanshi/config b/.config/kanshi/config new file mode 100644 index 0000000..2688b66 --- /dev/null +++ b/.config/kanshi/config @@ -0,0 +1,13 @@ +laptop{ + output eDP-1 mode 2560x1440 scale 1 position 0,0 enable +} + +desk{ + output "Dell Inc. DELL U2518D 3C4YP87AAK3L" mode 2560x1440 position 0,0 enable + output eDP-1 mode 2560x1440 scale 1 position 2560,0 enable +} + +tv{ + output HDMI-A-1 position 2560,0 enable + output eDP-1 mode 2560x1440 scale 1 position 0,0 enable +} diff --git a/.config/mako/config b/.config/mako/config new file mode 100644 index 0000000..567c2ba --- /dev/null +++ b/.config/mako/config @@ -0,0 +1,24 @@ +# vim: ft=config + +layer=top +anchor=top-right + +# font=Fira Sans +font=Iosevka Sparkle +padding=10 +width=500 +height=300 +background-color=#1C1C1Cee +text-color=#FCFAF2ff +border-color=#0B346Edd +border-radius=3 +progress-color=source #0B346Edd + +group-by=app-name +default-timeout=3000 + +[urgency=high] +border-color=#db4d6ddd + +[app-name="kp-cli"] +border-color=#26a65bdd diff --git a/.config/mpv/config b/.config/mpv/config new file mode 100644 index 0000000..23e9637 --- /dev/null +++ b/.config/mpv/config @@ -0,0 +1,97 @@ +# MPV Configuration +# clean up input config (helps with iina, gnome-mpv etc.) +# no-input-default-bindings +autoload-files=no +input-ipc-server=/var/run/user/1000/mpv + +# +# Video +# +framedrop=vo +video-sync=display-resample +gpu-context=wayland + +# +# Audio +# +alang=jpn,ja,eng,en,ger,de +volume-max=200 +audio-channels=auto-safe +# bs2b filter +# af-add=lavfi=[bs2b=profile=jmeier] #default,cmoy + +# +# Subtitles +# +slang=eng,en,ger,de +sub-font="Rosario" +sub-bold=yes +sub-ass-force-style=Kerning=yes + +# +# OSD +# +#osc=no +keep-open=yes +stop-screensaver=yes +cursor-autohide-fs-only +osd-font="Iosevka Sparkle" +# osd-font=monospace +osd-font-size=14 +osd-scale-by-window=yes +osd-fractions=yes +geometry=50%:50% +hidpi-window-scale +load-stats-overlay=yes +load-osd-console=yes + +# +# Misc. +# +screenshot-directory=~/Pictures/screenshots/mpv +screenshot-template='%tY%tm%td-%tH%tM%tS-%F-%p' +# screenshot-format=png +# screenshot-jpeg-quality=100 +# user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:42.0) Gecko/20100101 Firefox/42.0" +# ytdl-format=bestvideo+bestaudio,best + +# +# PROFILES +# + +[anime] +profile-desc="Optimized for watching anime with ASS subtitles" +sub-auto=fuzzy +# deband=yes +# sub-border-size=2 +# sub-font-size=45 +# sub-margin-y=50 +# sub-spacing=1 + +[cache] +profile-desc="Optimized for streaming web video" +cache=yes +cache-secs=36000 +script=~/.config/mpv/scripts/mpv-plugin-streamcache/streamcache.lua +ytdl-format='bestvideo[ext=mp4]+bestaudio' + +[3d] +profile-desc="Convert 3d to 2d" +hwdec=no +vf-add=stereo3d=sbs2l:mono + +[webcam] +profile-desc="Optimized for showing internal webcam feed" +osc=no +profile=low-latency +video-sync=display-desync # needed or external audio will fail +pulse-latency-hacks=yes +demuxer-lavf-o=input_format=mjpeg,video_size=848x480 +framedrop=no +# no-demuxer-thread +opengl-glfinish=yes +opengl-swapinterval=0 +vf=hflip + +[sharp] +glsl-shaders="~/.config/mpv/shaders/finesharp/FineSharp.glsl" diff --git a/.config/mpv/input.conf b/.config/mpv/input.conf new file mode 100644 index 0000000..3323ca0 --- /dev/null +++ b/.config/mpv/input.conf @@ -0,0 +1,101 @@ +# MPV INPUT CONFIG + +# taken from the default config +ESC set fullscreen no +f cycle fullscreen +SPACE cycle pause +m cycle mute + +# ARROW KEY BINDINGS +RIGHT seek 10 # skip ahead +LEFT seek -10 # skip back +UP seek 60 +DOWN seek -60 + +HOME seek 0 absolute-percent +END seek 100 absolute-percent + +Shift+RIGHT playlist-next +Shift+LEFT playlist-prev +Alt+RIGHT frame-step +Alt+LEFT frame-back-step + +Shift+UP add volume 10 +Shift+DOWN add volume -10 +Alt+UP add volume 5 +Alt+DOWN add volume -5 + +PGUP add chapter 1 # Fn-UP; skip to next chapter +PGDWN add chapter -1 # Fn-DOWN; skip to previous chapter +# Meta+UP add chapter 1 +# Meta+DOWN add chapter -1 +Shift+PGUP seek 600 +Shift+PGDWN seek -600 +Alt+PGUP add sub-pos -1 +Alt+PGDWN add sub-pos +1 + +C script_binding autocrop # crop black bars from movies (should be activated on scenes with max. contrast to the black bars) +Ctrl+c script_binding slicing/slicing_mark +Ctrl+a script_binding slicing/slicing_audio +W ignore +Ctrl+W script_binding webm/display-webm-encoder + +# A/V/S BINDINGS +a cycle audio +v cycle video +Y cycle-values vf stereo3d=sbs2l:mono stereo3d=ab2l:mono "" # cycle methods to display 3d movie as 2d +D cycle deinterlace + +s cycle sub +S cycle sub down +e add sub-scale +0.1 # increase subtitle font size +w add sub-scale -0.1 # decrease subtitle font size +t add sub-pos -1 +r add sub-pos +1 + +z add sub-delay -0.1 +Z add audio-delay -0.100 +x add sub-delay +0.1 +X add audio-delay 0.100 + +u cycle-values sub-ass-override "force" "strip" "no" +U cycle sub-visibility +Meta+s cycle sub-ass-force-margins + +# PLAYER BINDINGS +O cycle osc +i script-binding stats/display-stats-toggle +g screenshot # take a screenshot +G screenshot video # ...without subtitles + +T cycle ontop +H cycle-values hwdec auto no +A cycle-values video-aspect "16:9" "4:3" "21:9" "2.35:1" "-1" +c cycle-values audio-channels "auto-safe" "auto" "stereo" + +q quit +Q quit-watch-later # saves playback position to resume later + += add volume 10 +Shift+= add volume 5 +- add volume -10 +Shift+- add volume -5 + +> frame-step +< frame-back-step + +# VAPOURSYNTH/FILTER BINDINGS +# banding +b cycle deband +B vf toggle gradfun +# interpolation +P vf toggle format=yuv420p,vapoursynth=~/.dotfiles/scripts/motioninterpolation.vpy:4:4 +# binaural correction +h cycle-values af lavfi=[bs2b=profile=default] lavfi=[bs2b=profile=jmeier] lavfi=[bs2b=profile=cmoy] lavfi=[earwax] "" + +WHEEL_UP seek -5 +WHEEL_DOWN seek 5 + +0 script_binding mouse_coords +# 8 script_binding mouse_coords/set +# 9 script_binding mouse_coords/measure diff --git a/.config/mpv/script-opts/console.conf b/.config/mpv/script-opts/console.conf new file mode 100644 index 0000000..26581d1 --- /dev/null +++ b/.config/mpv/script-opts/console.conf @@ -0,0 +1,2 @@ +font="Iosevka Sparkle" +font_size=18 diff --git a/.config/mpv/script-opts/osc.conf b/.config/mpv/script-opts/osc.conf new file mode 100644 index 0000000..c99b867 --- /dev/null +++ b/.config/mpv/script-opts/osc.conf @@ -0,0 +1,23 @@ +# +# MPV LUA SETTINGS +# + +layout=bottombar +# layout=topbar +# layout=slimbox +# layout=box + +boxalpha=90 +# valign=-1 +# hidetimeout=1000 +# fadeduration=100 +seekbarstyle=bar +# seekbarstyle=slider +# seekbarstyle=knob + +# use native mpv values and disable OSC internal track list management (and some functions that depend on it) +iamaprogrammer=yes +# display total time instead of remaining time? +# timetotal=no +# display timecodes with milliseconds +# timems=yes diff --git a/.config/mpv/script-opts/stats.conf b/.config/mpv/script-opts/stats.conf new file mode 100644 index 0000000..d9f699f --- /dev/null +++ b/.config/mpv/script-opts/stats.conf @@ -0,0 +1,4 @@ +font="Iosevka Sparkle" +font_mono="Iosevka Sparkle" +font_size=8 +border_size=0.6 diff --git a/.config/mpv/scripts/mouse_coords.lua b/.config/mpv/scripts/mouse_coords.lua new file mode 100644 index 0000000..dae6239 --- /dev/null +++ b/.config/mpv/scripts/mouse_coords.lua @@ -0,0 +1,31 @@ +local msg = require('mp.msg') + +-- local x, y = 0, 0 + +-- function set_marker() +-- x, y = mp.get_mouse_pos() +-- end + +-- function measure() +-- x2, y2 = mp.get_mouse_pos() +-- w = x2-x +-- h = y2-y + +-- pos = "x: " .. x .. ", y:" .. y +-- dimensions = "w: " .. h .. ", h:" .. h +-- output = pos .. " | " .. dimensions + +-- mp.msg.warn(output) +-- mp.osd_message(output) +-- end + +function print_pos() + x, y = mp.get_mouse_pos() + pos = "x: " .. x .. ", y: " .. y + mp.msg.warn(pos) + mp.osd_message(pos) +end + +mp.add_key_binding("0", mp.get_script_name(), print_pos) +-- mp.add_key_binding("8", mp.get_script_name().."/set", set_marker) +-- mp.add_key_binding("9", mp.get_script_name().."/measure", measure) diff --git a/.config/sway/auto.conf b/.config/sway/auto.conf new file mode 100644 index 0000000..725900c --- /dev/null +++ b/.config/sway/auto.conf @@ -0,0 +1,60 @@ +# vim: ft=i3 +# NOTE: never use assign, it crashes sway for some reason... + + +for_window [class="nnn"] border pixel +for_window [app_id="mpv"] floating enable; border pixel; inhibit_idle open +for_window [app_id="Alacritty"] border pixel +for_window [app_id="^__floating-.*"] floating enable +for_window [class="pinentry"] floating enable; border normal +for_window [class="zoom" title="Zoom - Free Account"] floating enable +for_window [class="zoom" title="Settings"] floating enable +for_window [class="zoom"] move workspace 9; move workspace to output eDP-1 +for_window [title="tridactyledit"] floating enable +for_window [class="feh"] floating enable; urgent enable +for_window [class="Sxiv"] floating enable; urgent enable +for_window [title="Volume Control"] floating enable +for_window [title="Calculator"] floating enable +for_window [title="wpgtk 6.0.1"] floating enable; border normal +for_window [app_id="launcher"] floating enable; border pixel +for_window [app_id="nm-connection-editor"] floating enable; border normal +for_window [class="balena-etcher-electron"] floating enable; border normal +for_window [app_id="imv"] border pixel +for_window [app_id="firefox" title="Picture-in-Picture"] \ + floating enable, sticky enable, border none + +# Tag windows +for_window [class="zoom"] mark work + +for_window [app_id="firefox"] mark browser +for_window [class="Nightly"] mark browser +for_window [class="Chromium-browser"] mark work; mark browser +for_window [class="Mail"] mark mail +for_window [class="Thunderbird"] mark mail +for_window [class="discord"] mark mail +for_window [class="TelegramDesktop"] mark mail +for_window [app_id="firefox" title="^web.whatsapp.com"] mark mail + +for_window [con_mark="browser"] \ + border pixel, inhibit_idle fullscreen + +# Move around + +set $outputSide eDP-1 +set $wsWork 3 +set $wsMail 2 +for_window [con_mark="work"] move workspace $wsWork +for_window [con_mark="mail"] move workspace $wsMail, move workspace to output $outputSide, layout tabbed + +for_window [class="Spotify"] \ + move workspace $wsMusic, move workspace to output $outputSide, layout tabbed, inhibit_idle open + +for_window [app_id="spotify-tui"] \ + move workspace $wsMusic, move workspace to output $outputSide, layout tabbed, inhibit_idle open + +# for_window [class="osu!"] \ +# move workspace $wsGame, layout tabbed +# for_window [class="^.inecraft.*"] \ +# move workspace $wsGame, layout tabbed + +for_window [class="KeePassXC"] move scratchpad; scratchpad show diff --git a/.config/sway/binds.conf b/.config/sway/binds.conf new file mode 100644 index 0000000..4ee9ce0 --- /dev/null +++ b/.config/sway/binds.conf @@ -0,0 +1,215 @@ +# vim: ft=i3 + +# Basics {{{ +# start a terminal +bindsym $mod+Return exec $term +bindsym $mod+Shift+Return exec $floating_term + +# kill focused window +bindsym $mod+Shift+q kill + +# start your launcher +bindsym $mod+d exec $menu +bindsym $mod+o exec $run_menu + +# Drag floating windows by holding down $mod and left mouse button. +# Resize them with right mouse button + $mod. +# Despite the name, also works for non-floating windows. +# Change normal to inverse to use left mouse button for resizing and right +# mouse button for dragging. +floating_modifier $mod normal + +# reload the configuration file +bindsym $mod+Shift+c reload + +# exit sway (logs you out of your wayland session) +bindsym $mod+Shift+e exit +bindsym $mod+Shift+p exec $HOME/.dotfiles/bin/lock + +bindsym $mod+Shift+s mode "screengrab" +mode "screengrab" { +bindsym f exec grimshot save screen; mode "default" +bindsym s exec grimshot save area; mode "default" +bindsym c exec grimshot copy area; mode "default" +bindsym r exec grimshot rec screen; mode "default" +bindsym p exec colorpick; mode "default" +bindsym Shift+r exec grimshot rec area; mode "default" +bindsym Escape mode "default" +} + +bindsym $mod+Shift+b border toggle + +bindsym $mod+a exec soundswitch_dmenu +bindsym $mod+Shift+a exec soundswitch_dmenu global +bindsym $mod+n exec networkmanager_dmenu +# }}} + +# Moving around {{{ +# Move your focus around +bindsym $mod+$left focus left +bindsym $mod+$down focus down +bindsym $mod+$up focus up +bindsym $mod+$right focus right +# or use $mod+[up|down|left|right] + +# _move_ the focused window with the same, but add Shift +bindsym $mod+Shift+$left move left +bindsym $mod+Shift+$down move down +bindsym $mod+Shift+$up move up +bindsym $mod+Shift+$right move right + +bindsym $mod+Next focus child +bindsym $mod+Prior focus parent + +bindsym $mod+Escape [urgent="latest"] focus +# }}} + +# Workspaces {{{ +# Note: workspaces can have any name you want, not just numbers. +# We just use 1-10 as the default. +bindsym $mod+Shift+comma workspace prev +bindsym $mod+Shift+period workspace next +# 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+Ctrl+m workspace $wsMusic +bindsym $mod+Ctrl+v workspace $wsVideo +bindsym $mod+Ctrl+g workspace $wsGame +bindsym $mod+Tab workspace back_and_forth + +# 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 + +# move focused workspce to output +bindsym $mod+Ctrl+$left move workspace to output left +bindsym $mod+Ctrl+$down move workspace to output down +bindsym $mod+Ctrl+$up move workspace to output up +bindsym $mod+Ctrl+$right move workspace to output right +# }}} + +# Layout stuff {{{ +bindsym $mod+Alt+v splith +bindsym $mod+Alt+h splitv + +# Make the current focus fullscreen +bindsym $mod+f fullscreen +# Hide the topbar (also gets you more space) +bindsym $mod+Shift+t bar mode toggle topbar; default_border pixel + +# Swap focus between the tiling area and the floating area +bindsym $mod+space focus mode_toggle +# Toggle the current focus between tiling and floating mode +bindsym $mod+Ctrl+space floating toggle + +mode "layout" { + # Switch the current container between different layout styles + bindsym s layout stacking; mode "default" + bindsym w layout tabbed; mode "default" + bindsym e layout toggle split; mode "default" + + # move focus to the parent container + bindsym p focus parent + bindsym Shift+p focus child + + # make a sticky container + bindsym t sticky toggle; mode "default"; exec notify-send "container sticky'd" + + # return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+y mode "layout" +# }}} + +# 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+Ctrl+backspace 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+backspace scratchpad show +# }}} + +# Resizing containers {{{ +mode "resize" { + # 1x + set $resizeRate1x 50 + bindsym $left resize shrink width $resizeRate1x px + bindsym $down resize grow height $resizeRate1x px + bindsym $up resize shrink height $resizeRate1x px + bindsym $right resize grow width $resizeRate1x px + bindsym Shift+$down resize shrink width $resizeRate1x px ; resize shrink height $resizeRate1x px + bindsym Shift+$up resize grow width $resizeRate1x px ; resize grow height $resizeRate1x px + + # 2x + set $resizeRate2x 100 + bindsym Left resize shrink width $resizeRate1x px + bindsym Down resize grow height $resizeRate1x px + bindsym Up resize shrink height $resizeRate1x px + bindsym Right resize grow width $resizeRate1x px + bindsym Shift+Down resize shrink width $resizeRate2x px ; resize shrink height $resizeRate2x px + bindsym Shift+Up resize grow width $resizeRate2x px ; resize grow height $resizeRate2x px + + # return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+r mode "resize" +# }}} + +# Gaps {{{ +mode "gaps" { + bindsym r gaps outer all set 0; gaps inner all set 0 + + set $gapRate 5 + bindsym $up gaps inner all plus $gapRate + bindsym $down gaps inner all minus $gapRate + + # return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+Alt+g mode "gaps" +# }}} + +# Misc {{{ +bindsym $mod+Shift+x mark --toggle "x" +bindsym $mod+x [con_mark="x"] focus +bindsym $mod+Ctrl+x swap container with mark "x" + +# Media volume controls +bindsym XF86AudioMute exec pactl set-sink-mute '@DEFAULT_SINK@' toggle +bindsym XF86AudioMicMute exec pactl set-input-mute '@DEFAULT_INPUT@' toggle +bindsym XF86AudioLowerVolume exec pactl set-sink-volume '@DEFAULT_SINK@' -5% +bindsym XF86AudioRaiseVolume exec pactl set-sink-volume '@DEFAULT_SINK@' +5% + +# Sreen brightness controls +bindsym XF86MonBrightnessUp exec light -A 5 +bindsym XF86MonBrightnessDown exec light -U 5 + +# Media player controls +bindsym XF86AudioPlay exec playerctl play-pause +# bindsym XF86AudioForward exec playerctl next +# bindsym XF86AudioRewind exec playerctl previous +bindsym XF86AudioNext exec playerctl next +bindsym XF86AudioPrev exec playerctl previous +# }}} diff --git a/.config/sway/config b/.config/sway/config new file mode 100644 index 0000000..97424b1 --- /dev/null +++ b/.config/sway/config @@ -0,0 +1,71 @@ +# vim: ft=i3 fdm=marker + +set $mod Mod4 +set $alt Mod1 + +set $left h +set $down j +set $up k +set $right l + +set $term alacritty +set $floating_term $term --config-file $HOME/.config/alacritty/launcher.yml --class '__floating-Alacritty' +set $menu wofi -k /dev/null --terminal $term --show drun +set $run_menu menu -run + +# workspaces {{{ +set $ws1 1 +set $ws2 2 +set $ws3 3 +set $ws4 4 +set $ws5 5 +set $ws6 6 +set $ws7 7 +set $ws8 8 +set $ws9 9 +set $wsMusic m +set $wsVideo v +set $wsGame g +# }}} + +# gaps inner 5 +show_marks yes + +# default keyboard +input * { + xkb_layout us + xkb_variant mac + xkb_options 'caps:hyper,lvl3:ralt_switch_multikey' + repeat_rate 70 +} + +# default pointer +input * { + accel_profile adaptive +} + +# TODO +include input.conf +include binds.conf +include auto.conf + +# style {{{ +set $text #FCFAF2 +set $text2 #BDC0BA +set $bg #1C1C1C +set $bg2 #434343 +set $main #0B346F +set $main2 #005CAF +set $urgent #DB4D6D +set $urgent2 #CB1B45 +set $indicator #FAD689 +set $indicator2 #C18A26 + +client.focused $main2 $main $text $indicator $main +client.focused_inactive $bg2 $bg $text2 $indicator2 $bg +client.unfocused $bg2 $bg $text2 $indicator2 $bg +client.urgent $urgent2 $urgent $text $indicator $urgent +# }}} + +include config.d/* +include "`uname -n`" diff --git a/.config/sway/contrib/swayidle.confd b/.config/sway/contrib/swayidle.confd new file mode 100644 index 0000000..405cdbe --- /dev/null +++ b/.config/sway/contrib/swayidle.confd @@ -0,0 +1,8 @@ + +SWAYIDLE_COMMAND=<<EOF +timeout 540 'notify-send swayidle "screen off in 60s"' +timeout 600 'sway output * dpms off' + resume 'sway output * dpms on' +timeout 800 suspend +before-sleep lock +EOF diff --git a/.config/sway/contrib/swayidle.initd b/.config/sway/contrib/swayidle.initd new file mode 100755 index 0000000..169e5cf --- /dev/null +++ b/.config/sway/contrib/swayidle.initd @@ -0,0 +1,6 @@ +#!/sbin/openrc-run + +command=swayidle +command_args="${SWAYIDLE_COMMAND}" + +pidfile=/var/run/swayidle.pid diff --git a/.config/sway/env b/.config/sway/env new file mode 100644 index 0000000..c7eb252 --- /dev/null +++ b/.config/sway/env @@ -0,0 +1,22 @@ +#!/bin/sh + +# export XDG_RUNTIME_DIR=/run/user/1000 + +export DESKTOP_SESSION=gnome +export GDK_BACKEND=wayland +export CLUTTER_BACKEND=wayland + +# export QT_QPA_PLATFORM=wayland-egl +export QT_QPA_PLATFORM= +# export QT_AUTO_SCREEN_SCALE_FACTOR=0 +# export QT_SCREEN_SCALE_FACTORS='1.5;1' +export QT_QPA_PLATFORMTHEME=qgnomeplatform +export QT_STYLE_OVERRIDE=adwaita + +export _JAVA_AWT_WM_NONREPARENTING=1 + +export XMODIFIERS=@im=ibus +export QT_IM_MODULE=ibus +export GTK_IM_MODULE=xim + +export TERM=alacritty diff --git a/.config/sway/hibiki b/.config/sway/hibiki new file mode 100644 index 0000000..033ba39 --- /dev/null +++ b/.config/sway/hibiki @@ -0,0 +1,39 @@ +# vim: ft=i3 + +output * scale 1 +output * bg $HOME/.background fill + +font pango:Iosevka Sparkle 12 + +output * max_render_time 1 +# for_window [app_id=Alacritty] max_render_time 2 +for_window [app_id=firefox] max_render_time 3 + +input "1:1:AT_Translated_Set_2_keyboard" { + xkb_options 'caps:hyper,lvl3:ralt_switch_multikey,grp:alt_space_toggle,eurosign:5' +} +input "2:7:SynPS/2_Synaptics_TouchPad" { + natural_scroll enabled + dwt enabled + tap enabled + click_method clickfinger + scroll_method two_finger + # pointer_accel 1 +} +input "2:10:TPPS/2_Elan_TrackPoint" { + dwt enabled + natural_scroll enabled +} + +bar { + swaybar_command waybar +} + +exec mako +exec kanshi +exec swayidle \ + timeout 540 'notify-send swayidle "screen off in 60s"' \ + timeout 600 'sway output * dpms off' \ + resume 'sway output * dpms on' \ + timeout 800 suspend \ + before-sleep lock diff --git a/.config/sway/input.conf b/.config/sway/input.conf new file mode 100644 index 0000000..42b959b --- /dev/null +++ b/.config/sway/input.conf @@ -0,0 +1,35 @@ +# vim: ft=i3 + +# input club kbd +input "65261:25700:Input_Club_Infinity_keyboard/QMK" { + # intentionally left blank +} + +# planck ez +input "65261:24672:OLKB_Planck" { + xkb_options 'eurosign:5,lvl3:ralt_switch_multikey' +} + +# trackball +input "1149:8264:Primax_Kensington_Eagle_Trackball" { + # intentionally left blank +} + +# pen + tablet +input "10429:148:XP-PEN_STAR_G640_Pen" { + click_method clickfinger + middle_emulation disabled + accel_profile flat + drag enabled + tap enabled + + # 331 lower pen button + # 332 upper pen button + scroll_method on_button_down + scroll_button 274 + + map_to_output HDMI-A-1 + map_from_region 0.0x0.0 0.3x0.3 +} +input "10429:148:XP-PEN_STAR_G640_Mouse" events disabled +input "10429:148:XP-PEN_STAR_G640_Keyboard" events disabled diff --git a/.config/sway/simple.conf b/.config/sway/simple.conf new file mode 100644 index 0000000..435f235 --- /dev/null +++ b/.config/sway/simple.conf @@ -0,0 +1,26 @@ +set $mod Mod4 +set $left h +set $right l +set $up k +set $down j +set $term alacritty +set $menu wofi -terminal $term -show drun + +bindsym $mod+Return exec $term +bindsym $mod+Shift+q kill +bindsym $mod+d exec $menu +bindsym $mod+Shift+c reload +bindsym $mod+Shift+e exit +bindsym $mod+$left focus left +bindsym $mod+$down focus down +bindsym $mod+$up focus up +bindsym $mod+$right focus right +bindsym $mod+Shift+$left move left +bindsym $mod+Shift+$down move down +bindsym $mod+Shift+$up move up +bindsym $mod+Shift+$right move right +bindsym $mod+f fullscreen +bindsym $mod+Backspace seat - pointer_constraint disable +bindsym $mod+0 seat - pointer_constraint escape + +exec swaynag -m $(sway --get-socketpath) diff --git a/.config/tridactyl/themes/r.css b/.config/tridactyl/themes/r.css new file mode 100644 index 0000000..9017468 --- /dev/null +++ b/.config/tridactyl/themes/r.css @@ -0,0 +1,59 @@ +:root.TridactylThemeR { + --tridactyl-bg: #1c1c1c; + --tridactyl-bg-second: #38383d; + --tridactyl-fg: #f9f9fa; + --tridactyl-of-bg: #005CAF; + /* --tridactyl-of-fg: ; */ + /* --tridactyl-hightlight-box-bg: ; */ + /* --tridactyl-hightlight-box-fg: ; */ + --tridactyl-font-family: "Iosevka Sparkle", monospace; + --tridactyl-font-family-sans: sans-serif; + --tridactyl-font-size: 12pt !important; + --tridactyl-small-font-size: 12pt; + --tridactyl-cmdl-bg: #1c1c1c; + --tridactyl-cmdl-small-font-size: 12pt; + --tridactyl-cmplt-bg: #1c1c1c; + --tridactyl-cmplt-small-font-size: 12pt; +} + +/* :root.TridactylThemeR body { */ +/* } */ + +:root.TridactylThemeR #command-line-holder { + order: 1; +} + +:root.TridactylThemeR #completions { + order: 2; + border-top: 1px solid var(--tridactyl-complt-bg); +} + +:root.TridactylThemeR #completions .sectionHeader { + display: none; +} + +/* :root.TridactylThemeR #tridactyl-colon { */ +/* margin-left: 2px; */ +/* } */ +:root.TridactylThemeR #tridactyl-colon::before { + content: " > "; +} + +/* :root.TridactylThemeR #completions .focused, */ +/* :root.TridactylThemeR #completions .focused .url { */ +/* background: var(--tridactyl-bg-second); */ +/* text-decoration: italic; */ +/* } */ + +:root.TridactylThemeR #cmdline_iframe { + position: fixed !important; + bottom: unset; + top: -1px !important; + left: 0% !important; + box-shadow: rgba(0, 0, 0, 0.5) 0px 0px 15px !important; + /* opacity: 0.9; */ +} + +/* :root.TridactylThemeR #changelog { */ +/* background: var(--tridactyl-bg-second); */ +/* } */ diff --git a/.config/tridactyl/tridactylrc b/.config/tridactyl/tridactylrc new file mode 100644 index 0000000..5ea41a0 --- /dev/null +++ b/.config/tridactyl/tridactylrc @@ -0,0 +1,105 @@ +" vim: ft=vim +" sanitise tridactyllocal tridactylsync + +set browser firefox-nightly +set allowautofocus false +set searchengine duckduckgo +set tabopencontaineraware true +set editorcmd alacritty -t tridactyledit -e nvim +set historyresults 50 +set newtabfocus page +set allowautofocus false + +colors r + +" remove annoying binds +unbind s +unbind <C-f> +unbind <C-a> +unbind <F1> + +bind <Space>tw fillcmdline tabopen -c wee +bind <Space>tp fillcmdline tabopen -c pers +bind <Space>tb fillcmdline tabopen -c bank +bind <Space>ts fillcmdline tabopen -c shop + +bind <space>s fillcmdline tabopen search +bind <space>n fillcmdline nativeopen + +bind / fillcmdline find +bind n findnext 1 +bind N findnext -1 +bind <Space>, nohlsearch + +bind <Space>l fillcmdline urlmodify -g + +" select all in cmdline +unbind --mode=ex <C-a> + +bindurl news.ycombinator.com ;c hint -fr \d+\scomments +bindurl news.ycombinator.com f hint -c [class*="storylink"] + +" better result hinting on ddg +bindurl duckduckgo.com f hint -c [class*="result__url"] +bindurl duckduckgo.com F hint -b -c [class*="result__url"] + +" hint: mpv/video +bind gv composite get_current_url | !s mpv --profile=cache +bind yv composite js navigator.clipboard.readText() | !s mpv --profile=cache +bind ;v hint -W !s mpv --profile=cache + +" hint: other +bind ;i hint -W !s imv +bind ;e hint -W !s alacritty --class '__floating-tridactyledit' -e nvim + +bind gp fillcmdline winopen -popup +bind g1 tab 2 +bind g2 tab 3 +bind g3 tab 4 +bind g4 tab 5 + +" some autocommands that rewrite URLs +" autocmd DocStart www.amazon.co.uk js tri.excmds.urlmodify("-t", "www", "smile") +" autocmd DocStart *.solus-project.com js tri.excmds.urlmodify("-t", "solus-project.com", "getsol.us") +" autocmd DocStart golang.org/pkg js tri.excmds.urlmodify("-t", "golang.org/pkg", "godoc.org") +" autocmd DocStart typeform.com mode ignore + +" autocontainers +" aucon meetup.com personal +" aucon trello.com personal +" aucon reddit.com weeb +" aucon kitsu.io weeb +" aucon youtube.com weeb +" aucon shanaproject.com weeb +" aucon kum4.cf weeb +" aucon nyaa.si weeb +" aucon amazon.(com|de|co.jp|co.uk) shopping +" aucon flowdock.com work +" aucon calamari.io work + +seturl overleaf.com mode ignore + +" fix youtube +seturl youtube.com noiframe true +unbindurl youtube.com f +bindurl youtube.com h hint +bindurl youtube.com T tabopen ddg.gg + +" fix reddit +seturl reddit.com allowautofocus true +unbindurl reddit.com <Escape> +unbindurl reddit.com j +unbindurl reddit.com k +unbindurl reddit.com n +unbindurl reddit.com p +unbindurl reddit.com a +unbindurl reddit.com z +unbindurl reddit.com c +" unbindurl reddit.com r +unbindurl reddit.com s +unbindurl reddit.com h +unbindurl reddit.com x +unbindurl reddit.com l + +set leavegithubalone false +set blacklistkeys ["/","<Space>",";"] diff --git a/.config/vifm/colors/papercolor_dark.vifm b/.config/vifm/colors/papercolor_dark.vifm new file mode 100644 index 0000000..9f79ae4 --- /dev/null +++ b/.config/vifm/colors/papercolor_dark.vifm @@ -0,0 +1,52 @@ +" Available attributes (some of them can be combined): +" bold +" underline +" reverse or inverse +" standout +" none + +" let s:palette = { +" \ 'color00' : ['#1c1c1c', '234'], +" \ 'color01' : ['#af005f', '125'], +" \ 'color02' : ['#5faf00', '70'], +" \ 'color03' : ['#d7af5f', '179'], +" \ 'color04' : ['#5fafd7', '74'], +" \ 'color05' : ['#808080', '244'], +" \ 'color06' : ['#d7875f', '173'], +" \ 'color07' : ['#d0d0d0', '252'], +" \ 'color08' : ['#585858', '240'], +" \ 'color09' : ['#5faf5f', '71'], +" \ 'color10' : ['#afd700', '148'], +" \ 'color11' : ['#af87d7', '140'], +" \ 'color12' : ['#ffaf00', '214'], +" \ 'color13' : ['#ff5faf', '205'], +" \ 'color14' : ['#00afaf', '37'], +" \ 'color15' : ['#5f8787', '66'], +" \ 'color16' : ['#5fafd7', '74'], +" \ 'color17' : ['#d7af00', '178'], +" \ } + +highlight clear + +highlight Win cterm=none ctermfg=252 ctermbg=234 +highlight Directory cterm=bold ctermfg=74 ctermbg=default +highlight Link cterm=bold ctermfg=173 ctermbg=default +highlight BrokenLink cterm=bold ctermfg=240 ctermbg=default +highlight Socket cterm=bold ctermfg=205 ctermbg=default +highlight Device cterm=bold ctermfg=125 ctermbg=default +highlight Fifo cterm=bold ctermfg=148 ctermbg=default +highlight Executable cterm=bold ctermfg=70 ctermbg=default +highlight Selected cterm=standout ctermfg=140 ctermbg=default +highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default + +highlight TopLine cterm=none ctermfg=default ctermbg=default +highlight TopLineSel cterm=bold ctermfg=default ctermbg=default +highlight StatusLine cterm=bold ctermfg=234 ctermbg=74 +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=default ctermbg=default +highlight ErrorMsg cterm=none ctermfg=125 ctermbg=default +highlight Border cterm=none ctermfg=default ctermbg=default +highlight JobLine cterm=bold,reverse ctermfg=default ctermbg=default +highlight SuggestBox cterm=bold ctermfg=default ctermbg=default +highlight CmpMismatch cterm=bold ctermfg=252 ctermbg=125 +highlight AuxWin cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc new file mode 100644 index 0000000..6af0b3f --- /dev/null +++ b/.config/vifm/vifmrc @@ -0,0 +1,216 @@ +" vim: filetype=vifm : + +colorscheme papercolor_dark + +set vicmd=nvim +set trash +set history=100 +set nofollowlinks +set sortnumbers +set undolevels=100 +set vimhelp +set norunexec +set timefmt=%m/%d\ %H:%M +set wildmenu +set wildstyle=popup +set suggestoptions=normal,visual,view,otherpane,keys,marks,registers +set ignorecase +set smartcase +set nohlsearch +set incsearch +set scrolloff=4 + +" Don't do too many requests to slow file systems +if !has('win') + set slowfs=curlftpfs +endif + +set statusline=" Hint: %z%= %A %10u:%-7g %15s %20d " + +" ------------------------------------------------------------------------------ + +mark b ~/bin/ +mark h ~/ + +" ------------------------------------------------------------------------------ + +" :com[mand][!] command_name action +" The following macros can be used in a command +" %a is replaced with the user arguments. +" %c the current file under the cursor. +" %C the current file under the cursor in the other directory. +" %f the current selected file, or files. +" %F the current selected file, or files in the other directory. +" %b same as %f %F. +" %d the current directory name. +" %D the other window directory name. +" %m run the command in a menu window + +command! df df -h %m 2> /dev/null +command! diff vi -d %f %F +command! zip zip -r %f.zip %f +command! run !! ./%f +command! make !!make %a +command! mkcd :mkdir %a | cd %a +command! vgrep vi "+grep %a" +command! reload :write | restart + +command ssh +\ : let $SSH_FILE = system('mktemp /tmp/vifm-XXXX.ssh') +\ | execute '!echo ''%a'' > $SSH_FILE; ls $SSH_FILE %%U' +\ | execute 'normal l' +\ | execute '!rm $SSH_FILE' + +" ------------------------------------------------------------------------------ + +" Pdf +filextype *.pdf + \ {View in mupdf} + \ mupdf %c &, + \ {View in zathura} + \ zathura %c %i &, +fileviewer *.pdf pdftotext -nopgbrk %c - +" PostScript +filextype *.ps,*.eps,*.ps.gz + \ {View in zathura} + \ zathura %f, +" Djvu +filextype *.djvu + \ {View in zathura} + \ zathura %f, + +" Audio +filetype *.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus + \ {Play using mpv} + \ mpv --no-video %c, + \ {Play using ffplay} + \ ffplay -nodisp %c, + \ {Enqueue using xap} + \ xap add %c:p, +fileviewer *.mp3 mp3info + +" Video +filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob, + \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx, + \*.as[fx] + \ {View using mpv} + \ mpv %f, + \ {View using ffplay} + \ ffplay -fs %f, +fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob, + \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx, + \*.as[fx] + \ ffprobe -pretty %c 2>&1 + +" Web +filextype *.html,*.htm + \ {Open with w3m} + \ w3m %f %i &, + \ {Open with firefox} + \ firefox %f &, + +" Object +filetype *.o nm %f | less + +" Man page +filetype *.[1-8] man ./%c +fileviewer *.[1-8] man ./%c | col -b + +" Images +filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm + \ {View in imv} + \ imv -n %c %d 2>/dev/null &, +fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm + \ convert -identify %f -verbose /dev/null + +" MD5 +filetype *.md5 + \ {Check MD5 hash sum} + \ md5sum -c %f %S, +" SHA1 +filetype *.sha1 + \ {Check SHA1 hash sum} + \ sha1sum -c %f %S, +" SHA256 +filetype *.sha256 + \ {Check SHA256 hash sum} + \ sha256sum -c %f %S, +" SHA512 +filetype *.sha512 + \ {Check SHA512 hash sum} + \ sha512sum -c %f %S, +" GPG signature +filetype *.asc + \ {Check signature} + \ !!gpg --verify %c, + +filetype *.zip,*.jar,*.war,*.ear,*.oxt,*.apkg + \ {View contents} + \ zip -sf %c | less, + \ {Extract here} + \ tar -xf %c, +filetype *.zip + \ {Extract ZIP} + \ unzip %c +fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c + +" ArchiveMount +fileviewer *.tgz,*.tar.gz tar -tzf %c +fileviewer *.tar.bz2,*.tbz2 tar -tjf %c +fileviewer *.tar.txz,*.txz xz --list %c +fileviewer *.tar tar -tf %c + +" ------------------------------------------------------------------------------ + +" What should be saved automatically between vifm runs +" Like in previous versions of vifm +" set vifminfo=options,filetypes,commands,bookmarks,dhistory,state,cs +" Like in vi +set vifminfo=dhistory,savedirs,chistory,state,tui,shistory, + \phistory,fhistory,dirstack,registers,bookmarks,bmarks + +" ------------------------------------------------------------------------------ + +" Examples of configuring both panels + +" Customize view columns a bit (enable ellipsis for truncated file names) +" +" set viewcolumns=-{name}..,6{}. + +" Filter-out build and temporary files +" +" filter! /^.*\.(lo|o|d|class|py[co])$|.*~$/ + +" ------------------------------------------------------------------------------ + +" Start shell in current directory +nnoremap s :shell<cr> +" Display sorting dialog +nnoremap S :sort<cr> + +" Toggle visibility of preview window +nnoremap w :view<cr> +vnoremap w :view<cr>gv + +" Open file in the background using its default program +nnoremap gb :file &<cr>l + +" Yanking... +nnoremap yf :!echo -n %c:p | wl-copy %i<cr> +nnoremap yn :!echo -n %c | wl-copy %i<cr> +nnoremap yd :!echo -n %d | wl-copy %i<cr> +nnoremap yff :!cat -n %c:p | wl-copy %i<cr> + +" Mappings for faster renaming +nnoremap I cw<c-a> +nnoremap cc cw<c-u> +nnoremap A cw + +" Open console in current directory +nnoremap ,t :!alacritty &<cr> +" Open editor to edit vifmrc and apply settings after returning to vifm +nnoremap ,c :write | edit $MYVIFMRC | restart<cr> +" Toggle wrap setting on ,w key +nnoremap ,w :set wrap!<cr> + +nnoremap q :quit<cr> diff --git a/.config/waybar/config b/.config/waybar/config new file mode 100644 index 0000000..6f29e7e --- /dev/null +++ b/.config/waybar/config @@ -0,0 +1,168 @@ +// vim: commentstring=//\ %s +{ + "layer": "top", + "position": "top", + "height": 30, + + "modules-left": ["sway/mode", "sway/workspaces", "sway/window", "custom/media", "custom/toggl"], + // "modules-center": ["sway/window"], + "modules-right": ["cpu", "memory", "temperature", "idle_inhibitor", "backlight", "pulseaudio", "network", "battery", "clock#local", "clock#utc", "tray"], + "sway/workspaces": { + "disable-scroll": true, + "all-outputs": false, + "format": "{icon}", + "format-icons": { + // "urgent": "", + // "focused": "", + // "default": "", + // "1": "", + // "2": "", + // "3": "", + // "4": "", + // "5": "", + // "6": "", + // "7": "", + // "8": "", + // "9": "", + "m": "", + "v": "", + "g": "" + } + }, + "sway/window": { + "format": "{}", + "max-length": 50, + "tooltip": false + }, + "sway/mode": { + "format": "{}", + "tooltip": false + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + "spacing": 10 + }, + "clock#local": { + "tooltip": false, + "format": "{:<i>%a</i> %d %b %H:%M}", + "timezone": "Europe/Berlin" + }, + "clock#utc": { + "tooltip": false, + "format": "(UTC {:%H:%M})", + "timezone": "UTC" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": true + }, + "memory": { + "format": "{}% " + }, + "temperature": { + "critical-threshold": 90, + "format": "{temperatureC}℃ {icon}", + "format-icons": ["", "", ""] + }, + "backlight": { + "format": "{percent}% {icon}", + "format-icons": [""] + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-charging": "{capacity}% ", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + "format-full": "{icon}", + "format-icons": ["", "", "", "", ""], + "tooltip": false + }, + "network": { + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ifname}: {ipaddr}/{cidr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ", + "format-alt": "{ifname}: {ipaddr}/{cidr}", + "tooltip": false + }, + "network#vpn": { + "interface": "tun0", + "format-wifi": " {ifname}", + "format-ethernet": " {ifname}", + "format-disconnected": "", + "tooltip": false + }, + "pulseaudio": { + "format": "{volume}% {icon}", + "format-bluetooth": "{volume}% {icon}", + "format-muted": "{volume}% ", + "format-source": "{volume}% ", + "format-source-muted": "{volume}% ", + "format-icons": { + "headphones": "", + "handsfree": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "tooltip": false, + "on-click-right": "pactl set-sink-mute @DEFAULT_SINK@ toggle", + "on-click": "pavucontrol" + }, + "custom/media": { + "format": "{icon} {}", + "return-type": "json", + "max-length": 80, + "format-icons": { + "spotify": "", + "mpv": "", + "default": "" + }, + "on-click": "sway [workspace=$wsMusic] focus", + "escape": false, + "exec": "$HOME/.config/waybar/mediaplayer.py -I chromium 2> /dev/null" + }, + "custom/toggl": { + "exec": "$HOME/.config/waybar/toggl.lua 2>/dev/null", + "interval": 30 + }, + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ", + "format-disconnected": "Disconnected", + "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped", + "unknown-tag": "N/A", + "interval": 2, + "consume-icons": { + "on": " " + }, + "random-icons": { + "off": "", + "on": " " + }, + "repeat-icons": { + "on": " " + }, + "single-icons": { + "on": "1 " + }, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)" + } +} diff --git a/.config/waybar/mediaplayer.py b/.config/waybar/mediaplayer.py new file mode 100755 index 0000000..ce2314d --- /dev/null +++ b/.config/waybar/mediaplayer.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python3 + +import argparse +import json +import logging +import signal +import sys +from datetime import timedelta +from math import floor + +# yapf: disable +import gi +gi.require_version('Playerctl', '2.0') +from gi.repository import GLib, Playerctl +# yapf: enable + +logger = logging.getLogger(__name__) + + +def write_output(text, player): + logger.info('Writing output') + + output = { + 'text': text, + 'class': 'custom-' + player.props.player_name, + 'alt': player.props.player_name + } + + sys.stdout.write(json.dumps(output) + '\n') + sys.stdout.flush() + + +def on_play(player, status, manager): + logger.info('Received new playback status') + on_metadata(player, player.props.metadata, manager) + + +def on_metadata(player, metadata, manager): + logger.info('Received new metadata') + track_info = '' + + if player.props.player_name == 'spotify' and \ + 'mpris:trackid' in metadata.keys() and \ + ':ad:' in player.props.metadata['mpris:trackid']: + track_info = 'AD PLAYING' + + if player.get_title() and player.get_title() != '': + track_info = f"{player.get_title()}" + if player.get_artist() and player.get_artist() != '': + track_info = f"{player.get_artist()} - {track_info}" + + if 'mpris:length' in player.props.metadata.keys(): + dur_td = timedelta(microseconds=player.props.metadata['mpris:length']) + dur_h, remainder = divmod(dur_td.total_seconds(), 3600) + dur_m, dur_s = divmod(remainder, 60) + dur = f"{floor(dur_m)}:{floor(dur_s):02}" + if dur_h > 0: + dur = f"{floor(dur_h)}:{dur}" + track_info = '{} ({})'.format(track_info, str(dur)) + + if player.props.status == 'Paused' and track_info: + track_info = ' ' + track_info + + if player.props.status == 'Stopped': + return + + if track_info == '': + logger.warning('TrackInfo was empty after parsing') + return + + write_output(track_info, player) + + +def on_player_appeared(manager, player, selected_player=None): + if player is not None and (selected_player is None + or player.name == selected_player): + init_player(manager, player) + else: + logger.debug( + "New player appeared, but it's not the selected player, skipping") + + +def on_player_vanished(manager, player): + logger.info('Player has vanished') + sys.stdout.write('\n') + sys.stdout.flush() + + +def init_player(manager, name): + logger.debug('Initialize player: {player}'.format(player=name.name)) + player = Playerctl.Player.new_from_name(name) + player.connect('playback-status', on_play, manager) + player.connect('metadata', on_metadata, manager) + manager.manage_player(player) + on_metadata(player, player.props.metadata, manager) + + +def signal_handler(sig, frame): + logger.debug('Received signal to stop, exiting') + sys.stdout.write('\n') + sys.stdout.flush() + # loop.quit() + sys.exit(0) + + +def parse_arguments(): + parser = argparse.ArgumentParser() + + # Increase verbosity with every occurance of -v + parser.add_argument('-v', '--verbose', action='count', default=0) + + # Define for which player we're listening + parser.add_argument('--player', + help='player to listen for') + + # Define which players to ignore entirely + parser.add_argument('-I', '--ignore', + action='append', + help='players to ignore') + + return parser.parse_args() + + +def main(): + arguments = parse_arguments() + + # Initialize logging + logging.basicConfig(stream=sys.stderr, + level=logging.DEBUG, + format='%(name)s %(levelname)s %(message)s') + + # Logging is set by default to WARN and higher. + # With every occurrence of -v it's lowered by one + logger.setLevel(max((3 - arguments.verbose) * 10, 0)) + + # Log the sent command line arguments + logger.debug('Arguments received {}'.format(vars(arguments))) + + manager = Playerctl.PlayerManager() + loop = GLib.MainLoop() + + manager.connect('name-appeared', + lambda *args: on_player_appeared(*args, arguments.player)) + manager.connect('player-vanished', on_player_vanished) + + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) + + for player in manager.props.player_names: + if arguments.player is not None and arguments.player != player.name: + logger.debug( + '{player} is not the filtered player, skipping it'.format( + player=player.name)) + continue + + if arguments.ignore is not None and player.name in arguments.ignore: + logger.debug( + '{player} is ignored, skipping it'.format( + player=player.name)) + continue + + init_player(manager, player) + + loop.run() + + +if __name__ == '__main__': + main() diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..f832fd6 --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,194 @@ +@define-color foreground #fffefe; +@define-color background #221e1d; +@define-color accent #005CAF; +@define-color accentdarker #0B346F; +@define-color dimmed #777777; +@define-color dimmeddarker #302a29; +@define-color urgent #db4d6d; + +* { + border: none; + border-radius: 0; + font-family: Iosevka Medium, Noto Sans, Font Awesome, monospace; + font-size: 12pt; + min-height: 0; +} + +window#waybar { + background: @background; + /* opacity: 0.98; */ + /* border-bottom: 3px solid rgba(100, 114, 125, 0.5); */ + color: @foreground; + transition-property: background-color; + transition-duration: 0.1s; +} + +window#waybar.hidden { + opacity: 0.2; +} +/* window#waybar.empty {} */ +/* window#waybar.solo {} */ +/* window#waybar.<appid> {} */ + +#workspaces button { + padding: 0 5px; + /* background-color: transparent; */ + background: transparent; + color: @dimmed; + /* border-bottom: 3px solid transparent; */ +} + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +#workspaces button:hover { + background: @dimmeddarker; + box-shadow: inherit; + text-shadow: inherit; +} + +#workspaces button.focused { + color: @foreground; + background: @accentdarker; +} +#workspaces button.focused:hover { + background: @accent; +} + +#workspaces button.urgent { + color: @background; + background-color: @urgent; +} + +#window { + color: @foreground; + border-top: 2px solid @accent; +} + +#mode { + font-style: italic; + background-color: #64727d; + border-top: 2px solid @foreground; +} + +#clock, +#battery, +#cpu, +#memory, +#temperature, +#backlight, +#network, +#pulseaudio, +#custom-media, +#custom-toggl, +#tray, +#mode, +#window, +#idle_inhibitor { + padding: 0 0.3rem; + margin: 0 0.25rem; + color: @foreground; + border-top: 2px solid @dimmeddarker; +} + +#clock { + /* background-color: #64727d; */ +} +#clock.local { + margin-right: 0; + padding-right: 0; +} +#clock.utc { + margin: 0; + padding: 0; + padding-left: 0.3rem; + color: @dimmed; +} + +#battery { +} +#battery.charging { + color: @foreground; + background-color: #26a65b; +} + +@keyframes blink { + to { + background-color: @foreground; + color: @background; + } +} + +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: @foreground; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +label:focus { + background-color: @background; +} + +#cpu { +} +#memory { +} +#backlight { +} +#network { +} +#network.disconnected { + color: @dimmed; +} +#pulseaudio { +} +#pulseaudio.muted { + color: @dimmed; +} + +#custom-media { + min-width: 100px; + color: @foreground; + border-top: 2px solid #628aaa; +} +#custom-media.custom-spotify, +#custom-media.custom-spotifyd { + border-top: 2px solid #1DB954; +} +#custom-media.custom-mpv { + border-top: 2px solid #520053; +} + +#custom-toggl { + color: @foreground; + /* background-color: #DB4D6D; */ + border-top: 2px solid #DB4D60; +} + +#temperature { +} + +#temperature.critical { + background-color: #eb4d4b; +} + +#tray { +} + +#idle_inhibitor { + color: @dimmed; +} +#idle_inhibitor.activated { + color: unset; +} + +#mpd { +} +#mpd.disconnected { +} +#mpd.stopped { +} +#mpd.paused { +} diff --git a/.config/waybar/toggl.lua b/.config/waybar/toggl.lua new file mode 100755 index 0000000..e44fce2 --- /dev/null +++ b/.config/waybar/toggl.lua @@ -0,0 +1,28 @@ +#!/usr/bin/env luajit + +TOKEN = os.getenv("TOGGL_TOKEN") +if not TOKEN then + io.stderr:write("need TOGGL_TOKEN\n") + os.exit(1) +end + +function timer_duration() + cmd = string.format('toggl -t %s -j timer ls | jq -r ".[0].duration"', TOKEN) + local f = assert(io.popen(cmd, 'r')) + local s = assert(f:read('*a')) + f:close() + if not (s == '') then + return tonumber(s) + end +end + +unix_time = os.time() + +diff = timer_duration() +if not diff then + os.exit(0) +end + +d = unix_time + diff + +print(string.format(' %dh %.2dm', d/(60*60), d/60%60)) diff --git a/.config/wofi/config b/.config/wofi/config new file mode 100644 index 0000000..35e18a7 --- /dev/null +++ b/.config/wofi/config @@ -0,0 +1,2 @@ +allow_images=true +# allow_markup=true diff --git a/.config/wofi/style.css b/.config/wofi/style.css new file mode 100644 index 0000000..38f811b --- /dev/null +++ b/.config/wofi/style.css @@ -0,0 +1,16 @@ +window { + font-family: Iosevka; + font-size: large; +} + +#input { + margin: .5em; +} + +#text { + margin: .2em .5em; +} + +#img { + -gtk-icon-transform: scale(.6); +} diff --git a/.config/yamlfs/balena.yml b/.config/yamlfs/balena.yml new file mode 100644 index 0000000..5fccdd2 --- /dev/null +++ b/.config/yamlfs/balena.yml @@ -0,0 +1,18 @@ +docker-compose.yml: |- + version: '2.1' + + services: + build: ./container + + volumes: + ctr-data: + +container: + Dockerfile.template: |- + # vim: ft=dockerfile + FROM balenalib/%%BALENA_MACHINE_NAME%%-alpine:run + + # RUN apk add --no-cache + + # COPY ./start.sh /usr/local/bin/ + # CMD [ "start.sh" ] diff --git a/.config/yamlfs/go.yml b/.config/yamlfs/go.yml new file mode 100644 index 0000000..f7797be --- /dev/null +++ b/.config/yamlfs/go.yml @@ -0,0 +1,21 @@ +cmd: + app: + main.go: |- + package main + + func main() { + println("hello world") + } + +go.mod: |- + module example.com/app + + go 1.13 + +contrib: + data: {} + +README.md: |- + # app + + this is an app diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc new file mode 100644 index 0000000..80811d4 --- /dev/null +++ b/.config/zathura/zathurarc @@ -0,0 +1,33 @@ +set window-title-home-tilde true +set statusbar-basename true +set selection-clipboard clipboard +set recolor "true" + +set completion-bg "#1c1c1c" +set completion-fg "#d0d0d0" + +set completion-highlight-bg "#5faf00" +set completion-highlight-fg "#1c1c1c" + +set inputbar-bg "#1c1c1c" +set inputbar-fg "#d0d0d0" + +set statusbar-bg "#1c1c1c" +set statusbar-fg "#d0d0d0" + +set recolor-lightcolor "#1c1c1c" +set recolor-darkcolor "#d0d0d0" +set default-bg "#1c1c1c" + +set index-bg "#585858" +set index-fg "#d0d0d0" +set index-active-bg "#1c1c1c" +set index-active-fg "#d0d0d0" + +map P print +map c recolor +map R rotate rotate-ccw +map n zoom in +map p zoom out +map M mark_add +map m mark_evaluate |