commit d8a925cdc7339b0c4a982d90b032b8548e1c13a6 Author: Emma Nora Theuer Date: Sun May 26 22:45:08 2024 +0200 Initial commit diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..33f1b0e --- /dev/null +++ b/.bashrc @@ -0,0 +1,103 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything + +[[ $- != *i* ]] && return + + +# Terminal Startup +neofetch + +# VI-Mode +set -o vi +bind -m vi-command 'Control-l: clear-screen' +bind -m vi-insert 'Control-l: clear-screen' + +# Extracting archives +function ex () { + if [ -f $1 ]; then + case $1 in + *.tar.bz2) tar xjf $1 ;; + *.tar.gz) tar xzf $1 ;; + *.tar.xz) tar xf $1 ;; + *.bz2) bunzip2 $1 ;; + *.rar) unrar x $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar xf $1 ;; + *.tbz2) tar xjf $1 ;; + *.tgz) tar xzf $1 ;; + *.zip) unzip $1 ;; + *.Z) uncompress $1 ;; + *.7z) 7z x $1 ;; + *) echo "'$1' cannot be extracted via ex()" ;; + esac + else + echo "'$1' is not a valid file" + fi +} + +# Boop a website +function boop() { + ping $@ | sed -E 's/PING/BOOP/;s/[^0-9]*.bytes/ beeps/' +} + +# Exports +export PAGER=bat +export EDITOR=nvim +export VISUAL="emacsclient -c -a 'emacs'" +export MAKEFLAGS="-j32" +export -f ex +export -f boop +export PATH=$PATH:/home/emma/.emacs.d/bin/ +export PATH=$PATH:/home/emma/.local/bin/ + +# Shopt +shopt -s autocd + + +# Listing stuff +alias ls='eza --color=always --group-directories-first' +alias la='eza -a --color=always --group-directories-first' +alias ll='eza -lah --color=always --group-directories-first' +alias l.='eza -a | grep "^\."' + +#Make things readable +alias top=htop +alias df='df -h' +alias grep='grep --color=always' + +# Memes +alias meow='cat' +alias wanna-fuck-me-now='echo "I use Gentoo btw" | cowsay | lolcat' +alias rr='curl -s -L https://raw.githubusercontent.com/keroserene/rickrollrc/master/roll.sh | bash' + +# Typo correctors +alias eixt=exit +alias exti=exit +alias xeit=exit +alias exot=exit +alias exir=exit +alias exut=exit +alias rxit=exit +alias exto=exit +alias :q=exit +alias :q!=exit +alias :wq=exit +alias oiweriff=poweroff + + +# Package Management aliases +alias fullsys='doas emerge --sync && doas emerge -auDN @world && doas emerge --depclean' # Updates everything on the system +alias remorph='doas emerge --depclean' # Removes orphaned packages +alias checkfetch='doas tail -f /var/log/emerge-fetch.log' + +# Emacs Aliases +alias emacs='emacsclient -c -a "emacs"' +alias emanw='emacs -nw' +alias vim=nvim + +# Prompt +PROMPT_COMMAND="mommy -1 -s \$?; $PROMPT_COMMAND" +eval "$(starship init bash)" diff --git a/.config/alacritty/alacritty.toml b/.config/alacritty/alacritty.toml new file mode 100644 index 0000000..589d2bf --- /dev/null +++ b/.config/alacritty/alacritty.toml @@ -0,0 +1,23 @@ +[colors.primary] +background = "#282c34" + +[cursor] +style = "Beam" + +[font] +size = 12.0 + +[font.bold] +family = "Comic Code Ligatures" + +[font.bold_italic] +family = "Comic Code Ligatures" + +[font.italic] +family = "Comic Code Ligatures" + +[font.normal] +family = "Comic Code Ligatures" + +[window] +opacity = 0.7 diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml new file mode 100644 index 0000000..2bd1b7b --- /dev/null +++ b/.config/alacritty/alacritty.yml @@ -0,0 +1,693 @@ +# 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: alacritty + +window: + opacity: 0.7 + # 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/BSD only): + #class: + # Application instance name + #instance: Alacritty + # General application class + #general: Alacritty + + # GTK theme variant (Linux/BSD only) + # + # Override the variant of the GTK theme. Commonly supported values are `dark` and `light`. + # Set this to `None` to use the default theme variant. + #gtk_theme_variant: None + +#scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + #history: 10000 + + # Scrolling distance multiplier. + #multiplier: 3 + +# Font configuration +font: + # Normal (roman) font face + normal: + # Font family + # + # Default: + # - (macOS) Menlo + # - (Linux/BSD) monospace + # - (Windows) Consolas + family: Comic Code Ligatures + + # The `style` can be specified to pick a specific face. + #style: Regular + + # Bold font face + bold: + # Font family + # + # If the bold family is not specified, it will fall back to the + # value specified for the normal font. + family: Comic Code Ligatures + + # The `style` can be specified to pick a specific face. + #style: Bold + + # Italic font face + italic: + # Font family + # + # If the italic family is not specified, it will fall back to the + # value specified for the normal font. + family: Comic Code Ligatures + + # The `style` can be specified to pick a specific face. + #style: Italic + + # Bold italic font face + bold_italic: + # Font family + # + # If the bold italic family is not specified, it will fall back to the + # value specified for the normal font. + family: Comic Code Ligatures + + # The `style` can be specified to pick a specific face. + #style: Bold Italic + + # Point size + size: 11.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 upward. + #glyph_offset: + # x: 0 + # y: 0 + + # Thin stroke font rendering (macOS only) + # + # Thin strokes are suitable for retina displays, but for non-retina screens + # it is recommended to set `use_thin_strokes` to `false`. + #use_thin_strokes: true + +# If `true`, bold text is drawn using the bright color variants. +#draw_bold_text_with_bright_colors: false + + #Colors (Tomorrow Night) +colors: + # Default colors + primary: + background: '#282c34' + #foreground: '#000000' + + # Bright and dim foreground colors + # + # The dimmed foreground color is calculated automatically if it is not present. + # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors` + # is `false`, the normal foreground color will be used. + #dim_foreground: '#828482' + #bright_foreground: '#eaeaea' + + # Cursor colors + # + # Colors which should be used to draw the terminal cursor. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #cursor: + # text: CellBackground + # cursor: CellForeground + + # Vi mode cursor colors + # + # Colors for the cursor when the vi mode is active. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #vi_mode_cursor: + # text: CellBackground + # cursor: CellForeground + + # Selection colors + # + # Colors which should be used to draw the selection area. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #selection: + # text: CellBackground + # background: CellForeground + + # Search colors + # + # Colors used for the search bar and match highlighting. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #search: + # matches: + # foreground: '#000000' + # background: '#ffffff' + # + # bar: + # background: CellForeground + # foreground: CellBackground + + # Normal colors + #normal: + # black: '#1d1f21' + # red: '#cc6666' + # green: '#b5bd68' + # yellow: '#f0c674' + # blue: '#81a2be' + # magenta: '#b294bb' + # cyan: '#8abeb7' + # white: '#c5c8c6' + + # Bright colors + #bright: + # black: '#666666' + # red: '#d54e53' + # green: '#b9ca4a' + # yellow: '#e7c547' + # blue: '#7aa6da' + # magenta: '#c397d8' + # cyan: '#70c0b1' + # white: '#eaeaea' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + #dim: + # black: '#131415' + # red: '#864343' + # green: '#777c44' + # yellow: '#9e824c' + # blue: '#556a7d' + # magenta: '#75617b' + # cyan: '#5b7d78' + # white: '#828482' + + # Indexed Colors + # + # The indexed colors include all colors from 16 to 256. + # When these are not set, they're filled with sensible defaults. + # + # Example: + # `- { index: 16, color: '#ff00ff' }` + # + #indexed_colors: [] + +# Bell +# +# The bell is rung every time the BEL control character is received. +#bell: + # Visual Bell Animation + # + # Animation effect for flashing the screen when the visual bell is rung. + # + # Values for `animation`: + # - Ease + # - EaseOut + # - EaseOutSine + # - EaseOutQuad + # - EaseOutCubic + # - EaseOutQuart + # - EaseOutQuint + # - EaseOutExpo + # - EaseOutCirc + # - Linear + #animation: EaseOutExpo + + # Duration of the visual bell flash. A `duration` of `0` will disable the + # visual bell animation. + #duration: 0 + + # Visual bell animation color. + #color: '#ffffff' + + # Bell Command + # + # This program is executed whenever the bell is rung. + # + # When set to `command: None`, no command will be executed. + # + # Example: + # command: + # program: notify-send + # args: ["Hello, World!"] + # + #command: None + +#selection: + #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" + + # 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: Beam + + # Vi mode cursor style + # + # If the vi mode cursor style is `None` or not specified, it will fall back to + # the style of the active value of the normal cursor. + # + # See `cursor.style` for available options. + #vi_mode_style: None + + # If this is `true`, the cursor will be rendered as a hollow box when the + # window is not focused. + #unfocused_hollow: true + + # Thickness of the cursor relative to the cell width as floating point number + # from `0.0` to `1.0`. + #thickness: 0.15 + +# Live config reload (changes require restart) +#live_config_reload: true + +# Shell +# +# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`. +# Entries in `shell.args` are passed unmodified as arguments to the shell. +# +# Default: +# - (macOS) /bin/bash --login +# - (Linux/BSD) user login shell +# - (Windows) powershell +#shell: +# program: /bin/bash +# args: +# - --login + +# Startup directory +# +# Directory the shell is started in. If this is unset, or `None`, the working +# directory of the parent process will be used. +#working_directory: None + +# WinPTY backend (Windows only) +# +# Alacritty defaults to using the newer ConPTY backend if it is available, +# since it resolves a lot of bugs and is quite a bit faster. If it is not +# available, the WinPTY backend will be used instead. +# +# Setting this option to `true` makes Alacritty use the legacy WinPTY backend, +# even if the ConPTY backend is available. +#winpty_backend: false + +# Send ESC (\x1b) before characters when alt is pressed. +#alt_send_esc: true + +#mouse: + # Click settings + # + # The `double_click` and `triple_click` settings control the time + # alacritty should wait for accepting multiple clicks as one double + # or triple click. + #double_click: { threshold: 300 } + #triple_click: { threshold: 300 } + + # If this is `true`, the cursor is temporarily hidden when typing. + #hide_when_typing: false + + #url: + # URL launcher + # + # This program is executed when clicking on a text which is recognized as a URL. + # The URL is always added to the command as the last parameter. + # + # When set to `launcher: None`, URL launching will be disabled completely. + # + # Default: + # - (macOS) open + # - (Linux/BSD) xdg-open + # - (Windows) explorer + #launcher: + # program: xdg-open + # args: [] + + # URL modifiers + # + # These are the modifiers that need to be held down for opening URLs when clicking + # on them. The available modifiers are documented in the key binding section. + #modifiers: None + +# Mouse bindings +# +# Mouse bindings are specified as a list of objects, much like the key +# bindings further below. +# +# To trigger mouse bindings when an application running within Alacritty captures the mouse, the +# `Shift` modifier is automatically added as a requirement. +# +# Each mouse binding will specify a: +# +# - `mouse`: +# +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# - `action` (see key bindings) +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Middle, action: PasteSelection } + +# Key bindings +# +# Key bindings are specified as a list of objects. For example, this is the +# default paste binding: +# +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Each key binding will specify a: +# +# - `key`: Identifier of the key pressed +# +# - A-Z +# - F1-F24 +# - Key0-Key9 +# +# A full list with available key codes can be found here: +# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants +# +# Instead of using the name of the keys, the `key` field also supports using +# the scancode of the desired key. Scancodes have to be specified as a +# decimal number. This command will allow you to display the hex scancodes +# for certain keys: +# +# `showkey --scancodes`. +# +# Then exactly one of: +# +# - `chars`: Send a byte sequence to the running application +# +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. To find escape codes for bindings +# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside +# of tmux. Note that applications use terminfo to map escape sequences back +# to keys. It is therefore required to update the terminfo when changing an +# escape sequence. +# +# - `action`: Execute a predefined action +# +# - ToggleViMode +# - SearchForward +# - SearchBackward +# - Copy +# - Paste +# - PasteSelection +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollHalfPageUp +# - ScrollHalfPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# - Hide +# - Minimize +# - Quit +# - ToggleFullscreen +# - SpawnNewInstance +# - ClearLogNotice +# - ClearSelection +# - ReceiveChar +# - None +# +# (`mode: Vi` only): +# - Open +# - Up +# - Down +# - Left +# - Right +# - First +# - Last +# - FirstOccupied +# - High +# - Middle +# - Low +# - SemanticLeft +# - SemanticRight +# - SemanticLeftEnd +# - SemanticRightEnd +# - WordRight +# - WordLeft +# - WordRightEnd +# - WordLeftEnd +# - Bracket +# - ToggleNormalSelection +# - ToggleLineSelection +# - ToggleBlockSelection +# - ToggleSemanticSelection +# - SearchNext +# - SearchPrevious +# - SearchStart +# - SearchEnd +# +# (macOS only): +# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space +# +# (Linux/BSD only): +# - CopySelection: Copies into selection buffer +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - 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. +# +# If the same trigger is assigned to multiple actions, all of them are executed +# in the order they were defined in. +#key_bindings: + #- { key: Paste, action: Paste } + #- { key: Copy, action: Copy } + #- { key: L, mods: Control, action: ClearLogNotice } + #- { key: L, mods: Control, mode: ~Vi, chars: "\x0c" } + #- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, } + #- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } + #- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, } + #- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } + + # Vi Mode + #- { key: Space, mods: Shift|Control, mode: Vi, action: ScrollToBottom } + #- { key: Space, mods: Shift|Control, action: ToggleViMode } + #- { key: Escape, mode: Vi, action: ClearSelection } + #- { key: I, mode: Vi, action: ScrollToBottom } + #- { key: I, mode: Vi, action: ToggleViMode } + #- { key: Y, mods: Control, mode: Vi, action: ScrollLineUp } + #- { key: E, mods: Control, mode: Vi, action: ScrollLineDown } + #- { key: G, mode: Vi, action: ScrollToTop } + #- { key: G, mods: Shift, mode: Vi, action: ScrollToBottom } + #- { key: B, mods: Control, mode: Vi, action: ScrollPageUp } + #- { key: F, mods: Control, mode: Vi, action: ScrollPageDown } + #- { key: U, mods: Control, mode: Vi, action: ScrollHalfPageUp } + #- { key: D, mods: Control, mode: Vi, action: ScrollHalfPageDown } + #- { key: Y, mode: Vi, action: Copy } + #- { key: Y, mode: Vi, action: ClearSelection } + #- { key: Copy, mode: Vi, action: ClearSelection } + #- { key: V, mode: Vi, action: ToggleNormalSelection } + #- { key: V, mods: Shift, mode: Vi, action: ToggleLineSelection } + #- { key: V, mods: Control, mode: Vi, action: ToggleBlockSelection } + #- { key: V, mods: Alt, mode: Vi, action: ToggleSemanticSelection } + #- { key: Return, mode: Vi, action: Open } + #- { key: K, mode: Vi, action: Up } + #- { key: J, mode: Vi, action: Down } + #- { key: H, mode: Vi, action: Left } + #- { key: L, mode: Vi, action: Right } + #- { key: Up, mode: Vi, action: Up } + #- { key: Down, mode: Vi, action: Down } + #- { key: Left, mode: Vi, action: Left } + #- { key: Right, mode: Vi, action: Right } + #- { key: Key0, mode: Vi, action: First } + #- { key: Key4, mods: Shift, mode: Vi, action: Last } + #- { key: Key6, mods: Shift, mode: Vi, action: FirstOccupied } + #- { key: H, mods: Shift, mode: Vi, action: High } + #- { key: M, mods: Shift, mode: Vi, action: Middle } + #- { key: L, mods: Shift, mode: Vi, action: Low } + #- { key: B, mode: Vi, action: SemanticLeft } + #- { key: W, mode: Vi, action: SemanticRight } + #- { key: E, mode: Vi, action: SemanticRightEnd } + #- { key: B, mods: Shift, mode: Vi, action: WordLeft } + #- { key: W, mods: Shift, mode: Vi, action: WordRight } + #- { key: E, mods: Shift, mode: Vi, action: WordRightEnd } + #- { key: Key5, mods: Shift, mode: Vi, action: Bracket } + #- { key: Slash, mode: Vi, action: SearchForward } + #- { key: Slash, mods: Shift, mode: Vi, action: SearchBackward } + #- { key: N, mode: Vi, action: SearchNext } + #- { key: N, mods: Shift, mode: Vi, action: SearchPrevious } + + # (Windows, Linux, and BSD only) + #- { key: V, mods: Control|Shift, action: Paste } + #- { key: C, mods: Control|Shift, action: Copy } + #- { key: F, mods: Control|Shift, action: SearchForward } + #- { key: B, mods: Control|Shift, action: SearchBackward } + #- { key: C, mods: Control|Shift, mode: Vi, action: ClearSelection } + #- { 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 } + + # (Windows only) + #- { key: Return, mods: Alt, action: ToggleFullscreen } + + # (macOS only) + #- { key: K, mods: Command, mode: ~Vi, chars: "\x0c" } + #- { 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: V, mods: Command, action: Paste } + #- { key: C, mods: Command, action: Copy } + #- { key: C, mods: Command, mode: Vi, action: ClearSelection } + #- { key: H, mods: Command, action: Hide } + #- { key: M, mods: Command, action: Minimize } + #- { key: Q, mods: Command, action: Quit } + #- { key: W, mods: Command, action: Quit } + #- { key: N, mods: Command, action: SpawnNewInstance } + #- { key: F, mods: Command|Control, action: ToggleFullscreen } + #- { key: F, mods: Command, action: SearchForward } + #- { key: B, mods: Command, action: SearchBackward } + +#debug: + # Display the time it takes to redraw each frame. + #render_timer: false + + # Keep the log file after quitting Alacritty. + #persistent_logging: false + + # Log level + # + # Values for `log_level`: + # - None + # - Error + # - Warn + # - Info + # - Debug + # - Trace + #log_level: Warn + + # Print all received window events. + #print_events: false diff --git a/.config/mpv/ATD_EN.ods b/.config/mpv/ATD_EN.ods new file mode 100644 index 0000000..8f233b6 Binary files /dev/null and b/.config/mpv/ATD_EN.ods differ diff --git a/.config/mpv/input.conf b/.config/mpv/input.conf new file mode 100644 index 0000000..92e354d --- /dev/null +++ b/.config/mpv/input.conf @@ -0,0 +1,38 @@ +UP add volume +5 +DOWN add volume -5 +c cycle sub +j seek -10 +l seek 10 +k cycle pause +C cycle sub +F cycle fullscreen +J seek -10 +L seek 10 +K cycle pause +MBTN_LEFT cycle pause +HOME seek 00 absolute-percent +0 seek 00 absolute-percent +1 seek 10 absolute-percent +2 seek 20 absolute-percent +3 seek 30 absolute-percent +4 seek 40 absolute-percent +5 seek 50 absolute-percent +6 seek 60 absolute-percent +7 seek 70 absolute-percent +8 seek 80 absolute-percent +9 seek 90 absolute-percent +END seek 100 absolute-percent +> add speed 0.25 +< add speed -0.25 +P playlist-prev +N playlist-next +#this shit doesn't work and it's sad +- add sub-font-size -1 += add sub-font-size 1 +CTRL+1 no-osd change-list glsl-shaders set "/usr/share/anime4k/Anime4K_Clamp_Highlights.glsl:/usr/share/anime4k/Anime4K_Restore_CNN_M.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_M.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x2.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x4.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode A (Fast)" +CTRL+2 no-osd change-list glsl-shaders set "/usr/share/anime4k/Anime4K_Clamp_Highlights.glsl:/usr/share/anime4k/Anime4K_Restore_CNN_Soft_M.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_M.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x2.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x4.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode B (Fast)" +CTRL+3 no-osd change-list glsl-shaders set "/usr/share/anime4k/Anime4K_Clamp_Highlights.glsl:/usr/share/anime4k/Anime4K_Upscale_Denoise_CNN_x2_M.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x2.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x4.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode C (Fast)" +CTRL+4 no-osd change-list glsl-shaders set "/usr/share/anime4k/Anime4K_Clamp_Highlights.glsl:/usr/share/anime4k/Anime4K_Restore_CNN_M.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_M.glsl:/usr/share/anime4k/Anime4K_Restore_CNN_S.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x2.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x4.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode A+A (Fast)" +CTRL+5 no-osd change-list glsl-shaders set "/usr/share/anime4k/Anime4K_Clamp_Highlights.glsl:/usr/share/anime4k/Anime4K_Restore_CNN_Soft_M.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_M.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x2.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x4.glsl:/usr/share/anime4k/Anime4K_Restore_CNN_Soft_S.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode B+B (Fast)" +CTRL+6 no-osd change-list glsl-shaders set "/usr/share/anime4k/Anime4K_Clamp_Highlights.glsl:/usr/share/anime4k/Anime4K_Upscale_Denoise_CNN_x2_M.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x2.glsl:/usr/share/anime4k/Anime4K_AutoDownscalePre_x4.glsl:/usr/share/anime4k/Anime4K_Restore_CNN_S.glsl:/usr/share/anime4k/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode C+A (Fast)" +CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared" diff --git a/.config/picom/picom.conf b/.config/picom/picom.conf new file mode 100644 index 0000000..b858d80 --- /dev/null +++ b/.config/picom/picom.conf @@ -0,0 +1,120 @@ +# vim: filetype=conf +# +####################################### +# _ _ +# _ __ | |__ (_) ___ ___ _ __ ___ +#| '_ \| '_ \| |/ __/ _ \| '_ ` _ \ +#| |_) | | | | | (_| (_) | | | | | | +#| .__/|_| |_|_|\___\___/|_| |_| |_| +#|_| +####################################### + + +backend = "glx"; +glx-no-stencil = true; +glx-no-rebind-pixmap = true; +xrender-sync-fence = true; +use-damage = true; +#unredir-if-possible = true; +#resize-damage = 7; +vsync = true; + +corner-radius = 12.0; +round-borders = 1; +rounded-corners-exclude = [ + "class_g = 'dunst'", + "class_g = 'Polybar'", + "class_g = 'Rofi'", + "window_type = 'dock'", + "QTILE_INTERNAL:32c = 1" + #"! name~=''", +]; +rounded-borders-exclude = [ + "class_g = 'dunst'", + "class_g = 'Polybar'", + "class_g = 'Rofi'", + #"QTILE_INTERNAL:32c = 1" + #"! name~=''", +] + + #Shadow +shadow = true; # Enabled client-side shadows on windows. +shadow-radius = 40; # The blur radius for shadows. (default 12) +shadow-offset-x = -40; # The left offset for shadows. (default -15) +shadow-offset-y = -20; # The top offset for shadows. (default -15) +shadow-opacity = 0.45; +shadow-exclude = [ + "class_g = 'Plank'", + "! name~=''", + "class_g = 'conky'", + "name = 'cpt_frame_window'", + "class_g = 'slop'", + "name = 'lead'", + "name = 'Eww - border1'", + "name = 'Eww - border2'", + #"name = 'Eww - border'", + "class_g = 'firefox' && argb", + "QTILE_INTERNAL:32c = 1", + "class_g = 'i3lock'", + "class_g = 'stalonetray'", + #"name = 'polybar-bar_DP-4'", + "name = 'Polybar tray window'", + "name = 'polybar-tray_DP-4'" +]; + +# Fading +fading = true; # Fade windows during opacity changes. +fade-delta = 5; # The time between steps in a fade in milliseconds. (default 10). +fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028). +fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03). +#no-fading-openclose = true; # Fade windows in/out when opening/closing + +## Opacity +#inactive-opacity = 0.90; +#active-opacity = 1; +#frame-opacity = 1; +#inactive-opacity-override = false; +#inactive-dim = 0.2; +#inactive-dim-fixed = true; +## Opacity rules, do "xprop | grep WM_CLASS" to find class name +#opacity-rule = ["100:class_g = 'firefox'", "100:class_g = 'Chromium'", "100:class_g = 'Polybar'", "100:class_g = 'Thunderbird'", "100:name *? = 'i3lock'", "90:class_i = 'urxvt'", "100:class_i = 'cmatrixterm'", "90:class_i = 'dropdown'", "100:class_g = 'Zathura'", "100:class_g = 'Emacs'", "100:class_g = 'mpv'", "100:class_g = 'Joplin'", "90:class_i = 'applauncher'", "90:class_i = 'greenclip'", "90:class_i = 'bsphidwins'", "90:class_i = 'findFiles'", "90:class_i = 'sxhkdhelp'", "90:class_i = 'splatmoji'", "90:class_i = 'powermenu'", "90:class_i = 'fzfnotes'", "90:class_i = 'google'", "90:class_i = 'Spotify'", "90:class_g *? = 'xob'", "90:class_i = 'notifHistory'"]; + +detect-client-opacity = true; # This prevents opacity being ignored for some apps. For example without this enabled my xfce4-notifyd is 100% opacity no matter what. + +opacity-rule = [ + #"0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'", + #"40:class_g = 'Bspwm' && + "40:class_i = 'presel_feedback'", +]; + +# Blur +blur-method = "dual_kawase"; +blur-strength = 10; +blur-background = true; +#blur-background-frame = true; +blur-background-fixed = true; +blur-background-exclude = [ + #"class_g = 'Plank'", + "class_g = 'slop'", + #"class_g != 'i3lock'", + #"name != 'rofi - ' && + "class_i != 'presel_feedback'", +] + +# Animation settings +transition-length = 300; +transition-pow-x = 0.99; +transition-pow-y = 0.99; +transition-pow-w = 0.99; +transition-pow-h = 0.99; +size-transition = true; + +# Window type settings +wintypes: +{ + tooltip = { fade = true; full-shadow = true; opacity = 1; }; + dock = { full-shadow = true;}; + popup_menu = { opacity = 1; full-shadow = true; }; + normal = {full-shadow = true;}; + dropdown_menu = { opacity = 1; full-shadow = true; } +}; diff --git a/.config/qtile/autostart.sh b/.config/qtile/autostart.sh new file mode 100755 index 0000000..05b4b03 --- /dev/null +++ b/.config/qtile/autostart.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +/home/emma/.screenlayout/Standardlayout.sh & +setxkbmap -layout us -variant altgr-intl & +otd-daemon & +udiskie & +pipewire & pipewire-pulse & wireplumber & +/usr/bin/lxpolkit & +/usr/bin/emacs --daemon & +/usr/lib/kdeconnectd & +#adb start-server & +flameshot & +/usr/lib/notification-daemon-1.0/notification-daemon & +dunst & +picom & +ping -c 1 10.21.37.1 +xinput set-prop "Logitech ERGO M575" 296 1 & +solaar -w hide & +python /home/emma/.config/qtile/Wallpapers.py & diff --git a/.config/qtile/config.org b/.config/qtile/config.org new file mode 100755 index 0000000..bc07fcb --- /dev/null +++ b/.config/qtile/config.org @@ -0,0 +1,584 @@ +#+TITLE: Qtile Config +#+PROPERTY: header-args :tangle config.py + +* What is this? +This is my configuration for the Qtile Window Manager written and configured in Python. + +* Table of contents + +* Basic stuff +In the following points, stuff is defined, which is needed to be done for a properly working config, without directly influencing the UX in any way. + +** Imports +Imports are needed for the Window Manager to work properly. They grab the needed libraries so we can do cool stuff inside the window manager. + +#+BEGIN_SRC python +import os +import re +import subprocess +from libqtile.config import KeyChord, Key, Screen, Group, Drag, Click +from libqtile.command import lazy +from libqtile import layout, bar, widget, hook +from libqtile.lazy import lazy +from typing import List # noqa: F401 +#+END_SRC + +** Variables +Variables in a Programming language can contain a string or a number. While configuring a Window Manager, this is useful, if you want to repeat the same string a lot of times. +If, for example, I used my terminal a lot of times in the config and I were to change my default terminal, I would have to replace every occurence of the Terminal name in the config. In this case, where I only have to change that string once, that is when defining the string. + +#+BEGIN_SRC python +mod = "mod4" # Sets mod key to SUPER/WINDOWS +myTerm = "alacritty" # My terminal of choice +#+END_SRC + +* Keybindings +The Keybindings are the core point in using a tiling Window Manager. In Qtile, you can have both normal hotkey-like keybindings, as well as 'Keychords'. + +** Normal Keybindings +These are normal Keybindings, accessed by pressing the mod key (together with shift, in some cases) plus the corresponding key to each binding. + +#+BEGIN_SRC python +keys = [ +#+END_SRC + +*** Essentials and WM Controls +In this area of the config, basic programs (like Terminal and Run launcher) as well as Window Manger controls are located. I follow a simple rule there: +- ~Mod + Shift + [Key]~ for Window Manager controls like +- ~Mod + [Key]~ for a normal program + + #+BEGIN_SRC python + Key([mod], "Return", + lazy.spawn(myTerm), + desc='Launches My Terminal' + ), + Key([mod], "r", + lazy.spawn("rofi -show drun"), + desc='Rofi Run Launcher' + ), + Key([mod], "Tab", + lazy.next_layout(), + desc='Toggle through layouts' + ), + Key([mod], "x", + lazy.window.kill(), + desc='Kill active window' + ), + Key([mod, "shift"], "r", + lazy.restart(), + desc='Restart Qtile' + ), + Key([mod, "shift"], "q", + lazy.shutdown(), + desc='Shutdown Qtile' + ), + ### Window controls + Key([mod], "k", + lazy.layout.down(), + desc='Move focus down in current stack pane' + ), + Key([mod], "j", + lazy.layout.up(), + desc='Move focus up in current stack pane' + ), + Key([mod, "shift"], "k", + lazy.layout.shuffle_down(), + desc='Move windows down in current stack' + ), + Key([mod, "shift"], "j", + lazy.layout.shuffle_up(), + desc='Move windows up in current stack' + ), + Key([mod], "h", + lazy.layout.grow(), + lazy.layout.increase_nmaster(), + desc='Expand window (MonadTall), increase number in master pane (Tile)' + ), + Key([mod], "l", + lazy.layout.shrink(), + lazy.layout.decrease_nmaster(), + desc='Shrink window (MonadTall), decrease number in master pane (Tile)' + ), + Key([mod], "y", + lazy.layout.normalize(), + desc='normalize window size ratios' + ), + Key([mod, "shift"], "f", + lazy.window.toggle_floating(), + desc='toggle floating' + ), + Key([mod, "shift"], "w", + lazy.to_screen(0), + desc='Move focus to monitor one' + ), + Key([mod, "shift"], "e", + lazy.to_screen(1), + desc='Move focus to monitor two' + ), + #+END_SRC + +*** Other Programs +Here are the most programms that I used listed. They are all launched by using Mod + [Key] + +#+BEGIN_SRC python + Key([mod], "f", + lazy.spawn("firefox"), + desc='Firefox' + ), + Key([mod], "n", + lazy.spawn("/home/emma/AppImages/Vesktop.AppImage"), + desc='Vesktop' + ), + Key([mod, "shift"], "n", + lazy.spawn("discord"), + desc='Standard Discord Client' + ), + Key([mod], "w", + lazy.spawn("lowriter"), + desc='Libre Office Writer' + ), + Key([mod], "p", + lazy.spawn("pcmanfm"), + desc='PCmanFM' + ), + Key([mod], "v", + lazy.spawn("vlc"), + desc='VLC Media Player' + ), + Key([mod], "d", + lazy.spawn("deadbeef"), + desc='The DeaDBeeF Music Player' + ), + Key([mod], "m", + lazy.spawn("mailspring --password-store='gnome-libsecret'"), + desc='My Email Client of Choice' + ), + #+END_SRC + +** KeyChords +KeyChords are a special kind of keybindings, which require a keycombination (like Mod + E) pressed, which is then followed up by another key. This is common behaviour in Emacs and useful if you want a program to be launched with different arguments. + +#+BEGIN_SRC python + # Gscreenshot + KeyChord([mod], "g", [ + Key([], "s", lazy.spawn("flameshot gui")), + Key([], "g", lazy.spawn("flameshot full -c -p /home/emma/Bilder/flameshots")) + ]), + + # Emacs + KeyChord([mod], "e", [ + Key([], "e", lazy.spawn("emacsclient -c -a 'emacs'")), + Key([], "p", lazy.spawn("emacsclient -c -a 'emacs' ~/Projektordner/Hauptprojekt.org")), + Key([], "q", lazy.spawn("emacsclient -c -a 'emacs' ~/.config/qtile/config.org")) + ]), + + # Switching Keyboard Layouts + KeyChord([mod], "space", [ + Key([], "e", lazy.spawn("setxkbmap -layout us -variant altgr-intl")), + Key([], "p", lazy.spawn("setxkbmap -layout pl")), + Key([], "g", lazy.spawn("setxkbmap -layout gr")), + ]), + + # Steam + KeyChord([mod], "z", [ + ### Steam Runtime + Key([], "z", lazy.spawn("steam")), + + ### Hollow Knight + Key([], "h", lazy.spawn("steam steam://rungameid/367520")), + + #### Code Vein + Key([], "c", lazy.spawn("steam steam://rungameid/678960")), + + ### Red Dead Redemption + Key([], "r", lazy.spawn("steam steam://rungameid/1174180")), + + ### Souls Series + KeyChord([], "d", [ + Key([], "1", lazy.spawn("steam steam://rungameid/570940")), + Key([], "3", lazy.spawn("steam steam://rungameid/374320")) + ]), + + ### SAO Series + KeyChord([], "s", [ + Key([], "1", lazy.spawn("steam steam://rungameid/607890")), + Key([], "2", lazy.spawn("steam steam://rungameid/626690")) + ]), + + ### Outlast Series + KeyChord([], "o", [ + Key([], "1", lazy.spawn("steam steam://rungameid/238320")), + Key([], "2", lazy.spawn("steam steam://rungameid/414700")) + ]), + + + ### Tomb Raider Series + KeyChord([], "t", [ + Key([], "1", lazy.spawn("steam steam://rungameid/203160")), + Key([], "2", lazy.spawn("steam steam://rungameid/391220")), + Key([], "3", lazy.spawn("steam steam://rungameid/750920")) + ]) + ]) +] +#+END_SRC + +#+RESULTS: + + +* Layouts and Workspaces +Layouts, or 'groups' in Qtile are basically a set of rules how a Windows behave when on a workspace with a certain layout. They are on of the most important features when using a tiling WM, so this is a pretty big Deal + +** Workspaces and their default layouts +When the WM is started, each Workspace gets a default layout, which is the one they get started with. +In this Code Block, the Names of the Workspaces are defined and their default layout gets assigned. +There is a rule in my head, based on which the default layout gets assigned: +- Normal Windows: Pretty much every window (except the ones discussed later) fall under this category. Workspaces on which I intend to only open normal windows get assigned with the 'Monadtall' layout. It's the default layout in most tiling WMs and tends to be the most useful one, as well. +- Floating Windows: Some Windows should behave in a more "traditional" way, where they aren't automatically sized, but float over each other. This includes the Steam runtime. which tends to open up quite a few other windows, as well as programs like GIMP which behave similar. + +#+BEGIN_SRC python +group_names = [("Term", {'layout': 'monadtall'}), + ("Web", {'layout': 'monadtall'}), + ("Chat", {'layout': 'monadtall'}), + ("Dev", {'layout': 'monadtall'}), + ("Game", {'layout': 'floating'}), + ("Text", {'layout': 'monadtall'}), + ("Music", {'layout': 'monadtall'}), + ("Misc", {'layout': 'floating'}), + ("Qbit", {'layout': 'monadtall'})] + +groups = [Group(name, **kwargs) for name, kwargs in group_names] +#+END_SRC + +** Numbering Workspaces +In Qtile's dafault behaviour, each workspace has the name of a letter, and by pressing mod + [workspace letter] the Workspace can be accessed. This does not work anymore, if we want to give our workspace more meaningful names (as defined above), because the string-comparisson does not work anymore. Also, if we want our letters to open programs, this is not very practical, since many of the letters were already used by basic Window Manager controls. +If you want your workspaces to have meaningful names, as well as being accessed by using a number (Which is defalt behaviour in many other tiling Window Managers), a little work is needed. + +#+BEGIN_SRC python +for i, (name, kwargs) in enumerate(group_names, 1): + keys.append(Key([mod], str(i), lazy.group[name].toscreen())) # Switch to another group + keys.append(Key([mod, "shift"], str(i), lazy.window.togroup(name))) # Send current window to another group +#+END_SRC + +** Layout theming +The Layout theme is an additional set of rules of a layout, like defining Window Margin or the border color. Since we want to have a unison look in all our layout, it makes sense to define the theme in a list (like a variable with multiple entries), which is then just called, when the workspaces are being set up on startup. + +#+BEGIN_SRC python +layout_theme = {"border_width": 2, + "margin": 6, + "border_focus": "e1acff", + "border_normal": "1D2330" + } +#+END_SRC + +** Layouts +In the following list, the layouts to be used in the session are defined. The layouts which are commented out will not be able to be used, while the others will. + +#+BEGIN_SRC python +layouts = [ + # layout.MonadWide(**layout_theme), + # layout.Bsp(**layout_theme), + # layout.Stack(stacks=2, **layout_theme), + # layout.Columns(**layout_theme), + # layout.Tile(shift_windows=True, **layout_theme), + # layout.RatioTile(**layout_theme), + # layout.VerticalTile(**layout_theme), + # layout.Zoomy(**layout_theme), + # layout.Matrix(**layout_theme), + # layout.Max(**layout_theme), + # layout.Stack(**layout_theme, num_stacks=2), + layout.MonadTall(**layout_theme), + layout.Floating(**layout_theme) +] +#+END_SRC + +* The Bar +The Bar is displayed on the top and displays useful information or just looking nice. In the following area, everything concerning the bar is configured. +Note: This is NOT a traditional Taskbar, but a rather minimalist one, which displays basic information, in a way which is very riceable. + +** Colors +If you want your colors to be consistant and your config to be readable, just defining a list with every color meant to be used is the best way: + +#+BEGIN_SRC python +colors = [["#282c34", "#282c34"], # panel background + ["#434758", "#434758"], # background for current screen tab + ["#ffffff", "#ffffff"], # font color for group names + ["#ff5555", "#ff5555"], # border line color for current tab + ["#74438f", "#74438f"], # border line color for other tab and odd widgets + ["#4f76c7", "#4f76c7"], # color for the even widgets + ["#e1acff", "#e1acff"]] # window name + +# Sets the format for Qtile's run prompt. The config doesn't work if this isn't set but I didn't want to make a new Source Block and a literrate explanation for this, since it's only a thing that makes stuff work +prompt = "{0}@{1}: ".format(os.environ["USER"], os.uname()[1]) +#+END_SRC + + +** Widgets +Widgets are what actually gets displayed in the bar. Loke with every design thing, having a list with the default settings is a good practice. + +#+BEGIN_SRC python +widget_defaults = dict( + font="Mononoki Nerd Font", + fontsize = 12, + padding = 2, + background=colors[2] +) + +extension_defaults = widget_defaults.copy() +#+END_SRC + +** Initializing the bar +A function is created here, which will later be called at the startup. This basically just is an amalgamation of different Widgets spammed after one another. + +#+BEGIN_SRC python +def init_widgets_list(): + widgets_list = [ + widget.Sep( + linewidth = 0, + padding = 6, + foreground = colors[2], + background = colors[0] + ), + widget.GroupBox( + font = "Mononoki Nerd Font", + fontsize = 9, + margin_y = 3, + margin_x = 0, + padding_y = 5, + padding_x = 3, + borderwidth = 3, + active = colors[2], + inactive = colors[2], + rounded = False, + highlight_color = colors[1], + highlight_method = "line", + this_current_screen_border = colors[3], + this_screen_border = colors [4], + other_current_screen_border = colors[0], + other_screen_border = colors[0], + foreground = colors[2], + background = colors[0] + ), + widget.Prompt( + prompt = prompt, + font = "Mononoki Nerd Font", + padding = 10, + foreground = colors[3], + background = colors[1] + ), + widget.Sep( + linewidth = 0, + padding = 40, + foreground = colors[2], + background = colors[0] + ), + widget.WindowName( + foreground = colors[6], + background = colors[0], + padding = 0 + ), + widget.TextBox( + text='', + background = colors[0], + foreground = colors[4], + padding = -5, + fontsize = 37 + ), + widget.CPU( + foreground = colors[2], + background = colors[4], + padding = 3 + ), + widget.TextBox( + text = '', + background = colors[4], + foreground = colors[5], + padding = -5, + fontsize = 37 + ), + widget.Memory( + foreground = colors[2], + background = colors[5], + padding = 5 + ), + widget.TextBox( + text = '', + background = colors[5], + foreground = colors[4], + padding = -5, + fontsize = 37 + ), + widget.Net( + foreground = colors[2], + background = colors[4], + padding = 5 + ), + widget.TextBox( + text='', + background = colors[4], + foreground = colors[5], + padding = -5, + fontsize = 37 + ), + widget.TextBox( + text = " ⟳", + padding = 2, + foreground = colors[2], + background = colors[5], + fontsize = 14 + ), + widget.CheckUpdates( + update_interval = 1800, + distro = "Arch", + display_format = "{updates} Updates", + foreground = colors[2], + execute = 'alacritty -e doas pacman -Syu', + background = colors[5] + ), + widget.TextBox( + text = '', + background = colors[5], + foreground = colors[4], + padding = -5, + fontsize = 37 + ), + widget.CurrentLayout( + foreground = colors[2], + background = colors[4], + padding = 5 + ), + widget.TextBox( + text = '', + background = colors[4], + foreground = colors[5], + padding = -5, + fontsize = 37 + ), + widget.Clock( + foreground = colors[2], + background = colors[5], + execute = 'gnome-calendar', + format = "%A, %B %d [ %H:%M:%S ]" + ), + widget.Sep( + linewidth = 0, + padding = 10, + foreground = colors[0], + background = colors[5] + ), + widget.TextBox( + text = '', + background = colors[5], + foreground = colors[4], + padding = -5, + fontsize = 37 + ), + widget.Systray( + background = colors[4], + padding = 2 + ), + widget.Sep( + linewidth = 0, + padding = 5, + foreground = colors[2], + background = colors[4] + ), + ] + return widgets_list + #+END_SRC + +* Setting everything up +Here are a couple of functions defined, which will be called once the Window manager starts + +** Initializing the screen +Everything we got configured earkier will now be out on the screens, when the Window Manager starts. + +#+BEGIN_SRC python +def init_widgets_screen1(): + widgets_screen1 = init_widgets_list() + return widgets_screen1 + +def init_widgets_screen2(): + widgets_screen2 = init_widgets_list() + widgets_screen2 = widgets_screen2[:-3] + widgets_screen2[-1:] + return widgets_screen2 + +def init_screens(): + return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), opacity=1.0, size=20)), + Screen(top=bar.Bar(widgets=init_widgets_screen2(), opacity=1.0, size=20))] + +if __name__ in ["config", "__main__"]: + screens = init_screens() +#+END_SRC + +** Making Windows movable +If we want to move windows between groups, we need to have it in our config. + +#+BEGIN_SRC python +def window_to_prev_group(qtile): + if qtile.currentWindow is not None: + i = qtile.groups.index(qtile.currentGroup) + qtile.currentWindow.togroup(qtile.groups[i - 1].name) + +def window_to_next_group(qtile): + if qtile.currentWindow is not None: + i = qtile.groups.index(qtile.currentGroup) + qtile.currentWindow.togroup(qtile.groups[i + 1].name) +#+END_SRC + +** The Mouse +While a Tiling Window Manager is mostly navigated by using the Keyboard, having mouse functionality for Window controls can be very useful, especially in floating mode. +To get our mouse to do Window Controlling Stuff, we have need to define a few rules- + +#+BEGIN_SRC python +# A list, which tells the mouse what to do when which button is pressed together with the mod key. +mouse = [ + Drag([mod], "Button1", lazy.window.set_position_floating(), + start=lazy.window.get_position()), + Drag([mod], "Button3", lazy.window.set_size_floating(), + start=lazy.window.get_size()), + Click([mod], "Button2", lazy.window.bring_to_front()) +] + +dgroups_key_binder = None +dgroups_app_rules = [] # type: List +main = None +follow_mouse_focus = False +bring_front_click = True +cursor_warp = False +#+END_SRC + +** Automatic floating +Some windows (like Splashscreens) are not meant to be displayed in a fullscreen way. By default, qtile does it anyway. By giving it these rules, it will let these windows float, no matter which layout the workspace has, the window is currently on. + +#+BEGIN_SRC python +floating_layout = layout.Floating(float_rules=[ + *layout.Floating.default_float_rules +]) +#+END_SRC + +** Additional Window rules +If you want the window manager to do stuff (which doesn't directly has anything to do with one of the earlier things in this config), it's time to define these rules: + +#+Begin_SRC python +auto_fullscreen = True +focus_on_window_activation = "smart" +auto_minimize = False +#+END_SRC + +** Autostart +Programs like Daemons or the ones that set wallpapers should automatically be started when the window manager starts. The easiest way is to write a bash script (with execute permissions) that just does all the things for us. This will be called at startup and we're gut to go. + +#+BEGIN_SRC python +@hook.subscribe.startup_once +def start_once(): + home = os.path.expanduser('~') + subprocess.Popen([home + '/.config/qtile/autostart.sh']) + +#+END_SRC + +** The Window Manager +The config gets finished by defining thesystem internal name of the Window Manager. In my case, just using 'qtile' is fine for me, but if you are running into trubble with some Java-GUIs, you might want to consider changing it to 'LG3D'. + +#+BEGIN_SRC python +wmname = "qtile" +#+END_SRC diff --git a/.config/qtile/config.py b/.config/qtile/config.py new file mode 100644 index 0000000..1af866c --- /dev/null +++ b/.config/qtile/config.py @@ -0,0 +1,446 @@ +import os +import re +import subprocess +from libqtile.config import KeyChord, Key, Screen, Group, Drag, Click +from libqtile.command import lazy +from libqtile import layout, bar, widget, hook +from libqtile.lazy import lazy +from typing import List # noqa: F401 + +mod = "mod4" # Sets mod key to SUPER/WINDOWS +myTerm = "alacritty" # My terminal of choice + +keys = [ + + Key([mod], "Return", + lazy.spawn(myTerm), + desc='Launches My Terminal' + ), + Key([mod], "r", + lazy.spawn("rofi -show drun"), + desc='Rofi Run Launcher' + ), + Key([mod], "Tab", + lazy.next_layout(), + desc='Toggle through layouts' + ), + Key([mod], "x", + lazy.window.kill(), + desc='Kill active window' + ), + Key([mod, "shift"], "r", + lazy.restart(), + desc='Restart Qtile' + ), + Key([mod, "shift"], "q", + lazy.shutdown(), + desc='Shutdown Qtile' + ), + ### Window controls + Key([mod], "k", + lazy.layout.down(), + desc='Move focus down in current stack pane' + ), + Key([mod], "j", + lazy.layout.up(), + desc='Move focus up in current stack pane' + ), + Key([mod, "shift"], "k", + lazy.layout.shuffle_down(), + desc='Move windows down in current stack' + ), + Key([mod, "shift"], "j", + lazy.layout.shuffle_up(), + desc='Move windows up in current stack' + ), + Key([mod], "h", + lazy.layout.grow(), + lazy.layout.increase_nmaster(), + desc='Expand window (MonadTall), increase number in master pane (Tile)' + ), + Key([mod], "l", + lazy.layout.shrink(), + lazy.layout.decrease_nmaster(), + desc='Shrink window (MonadTall), decrease number in master pane (Tile)' + ), + Key([mod], "y", + lazy.layout.normalize(), + desc='normalize window size ratios' + ), + Key([mod, "shift"], "f", + lazy.window.toggle_floating(), + desc='toggle floating' + ), + Key([mod, "shift"], "w", + lazy.to_screen(0), + desc='Move focus to monitor one' + ), + Key([mod, "shift"], "e", + lazy.to_screen(1), + desc='Move focus to monitor two' + ), + + Key([mod], "f", + lazy.spawn("firefox"), + desc='Firefox' + ), + Key([mod], "n", + lazy.spawn("/home/emma/AppImages/Vesktop.AppImage"), + desc='Vesktop' + ), + Key([mod, "shift"], "n", + lazy.spawn("discord"), + desc='Standard Discord Client' + ), + Key([mod], "w", + lazy.spawn("lowriter"), + desc='Libre Office Writer' + ), + Key([mod], "p", + lazy.spawn("pcmanfm"), + desc='PCmanFM' + ), + Key([mod], "v", + lazy.spawn("vlc"), + desc='VLC Media Player' + ), + Key([mod], "d", + lazy.spawn("deadbeef"), + desc='The DeaDBeeF Music Player' + ), + Key([mod], "m", + lazy.spawn("mailspring --password-store='gnome-libsecret'"), + desc='My Email Client of Choice' + ), + + # Gscreenshot + KeyChord([mod], "g", [ + Key([], "s", lazy.spawn("flameshot gui")), + Key([], "g", lazy.spawn("flameshot full -c -p /home/emma/Bilder/flameshots")) + ]), + + # Emacs + KeyChord([mod], "e", [ + Key([], "e", lazy.spawn("emacsclient -c -a 'emacs'")), + Key([], "p", lazy.spawn("emacsclient -c -a 'emacs' ~/Projektordner/Hauptprojekt.org")), + Key([], "q", lazy.spawn("emacsclient -c -a 'emacs' ~/.config/qtile/config.org")) + ]), + + # Switching Keyboard Layouts + KeyChord([mod], "space", [ + Key([], "e", lazy.spawn("setxkbmap -layout us -variant altgr-intl")), + Key([], "p", lazy.spawn("setxkbmap -layout pl")), + Key([], "g", lazy.spawn("setxkbmap -layout gr")), + ]), + + # Steam + KeyChord([mod], "z", [ + ### Steam Runtime + Key([], "z", lazy.spawn("steam")), + + ### Hollow Knight + Key([], "h", lazy.spawn("steam steam://rungameid/367520")), + + #### Code Vein + Key([], "c", lazy.spawn("steam steam://rungameid/678960")), + + ### Red Dead Redemption + Key([], "r", lazy.spawn("steam steam://rungameid/1174180")), + + ### Souls Series + KeyChord([], "d", [ + Key([], "1", lazy.spawn("steam steam://rungameid/570940")), + Key([], "3", lazy.spawn("steam steam://rungameid/374320")) + ]), + + ### SAO Series + KeyChord([], "s", [ + Key([], "1", lazy.spawn("steam steam://rungameid/607890")), + Key([], "2", lazy.spawn("steam steam://rungameid/626690")) + ]), + + ### Outlast Series + KeyChord([], "o", [ + Key([], "1", lazy.spawn("steam steam://rungameid/238320")), + Key([], "2", lazy.spawn("steam steam://rungameid/414700")) + ]), + + + ### Tomb Raider Series + KeyChord([], "t", [ + Key([], "1", lazy.spawn("steam steam://rungameid/203160")), + Key([], "2", lazy.spawn("steam steam://rungameid/391220")), + Key([], "3", lazy.spawn("steam steam://rungameid/750920")) + ]) + ]) +] + +group_names = [("Term", {'layout': 'monadtall'}), + ("Web", {'layout': 'monadtall'}), + ("Chat", {'layout': 'monadtall'}), + ("Dev", {'layout': 'monadtall'}), + ("Game", {'layout': 'floating'}), + ("Text", {'layout': 'monadtall'}), + ("Music", {'layout': 'monadtall'}), + ("Misc", {'layout': 'floating'}), + ("Qbit", {'layout': 'monadtall'})] + +groups = [Group(name, **kwargs) for name, kwargs in group_names] + +for i, (name, kwargs) in enumerate(group_names, 1): + keys.append(Key([mod], str(i), lazy.group[name].toscreen())) # Switch to another group + keys.append(Key([mod, "shift"], str(i), lazy.window.togroup(name))) # Send current window to another group + +layout_theme = {"border_width": 2, + "margin": 6, + "border_focus": "e1acff", + "border_normal": "1D2330" + } + +layouts = [ + # layout.MonadWide(**layout_theme), + # layout.Bsp(**layout_theme), + # layout.Stack(stacks=2, **layout_theme), + # layout.Columns(**layout_theme), + # layout.Tile(shift_windows=True, **layout_theme), + # layout.RatioTile(**layout_theme), + # layout.VerticalTile(**layout_theme), + # layout.Zoomy(**layout_theme), + # layout.Matrix(**layout_theme), + # layout.Max(**layout_theme), + # layout.Stack(**layout_theme, num_stacks=2), + layout.MonadTall(**layout_theme), + layout.Floating(**layout_theme) +] + +colors = [["#282c34", "#282c34"], # panel background + ["#434758", "#434758"], # background for current screen tab + ["#ffffff", "#ffffff"], # font color for group names + ["#ff5555", "#ff5555"], # border line color for current tab + ["#74438f", "#74438f"], # border line color for other tab and odd widgets + ["#4f76c7", "#4f76c7"], # color for the even widgets + ["#e1acff", "#e1acff"]] # window name + +# Sets the format for Qtile's run prompt. The config doesn't work if this isn't set but I didn't want to make a new Source Block and a literrate explanation for this, since it's only a thing that makes stuff work +prompt = "{0}@{1}: ".format(os.environ["USER"], os.uname()[1]) + +widget_defaults = dict( + font="Mononoki Nerd Font", + fontsize = 12, + padding = 2, + background=colors[2] +) + +extension_defaults = widget_defaults.copy() + +def init_widgets_list(): + widgets_list = [ + widget.Sep( + linewidth = 0, + padding = 6, + foreground = colors[2], + background = colors[0] + ), + widget.GroupBox( + font = "Mononoki Nerd Font", + fontsize = 9, + margin_y = 3, + margin_x = 0, + padding_y = 5, + padding_x = 3, + borderwidth = 3, + active = colors[2], + inactive = colors[2], + rounded = False, + highlight_color = colors[1], + highlight_method = "line", + this_current_screen_border = colors[3], + this_screen_border = colors [4], + other_current_screen_border = colors[0], + other_screen_border = colors[0], + foreground = colors[2], + background = colors[0] + ), + widget.Prompt( + prompt = prompt, + font = "Mononoki Nerd Font", + padding = 10, + foreground = colors[3], + background = colors[1] + ), + widget.Sep( + linewidth = 0, + padding = 40, + foreground = colors[2], + background = colors[0] + ), + widget.WindowName( + foreground = colors[6], + background = colors[0], + padding = 0 + ), + widget.TextBox( + text='', + background = colors[0], + foreground = colors[4], + padding = -5, + fontsize = 37 + ), + widget.CPU( + foreground = colors[2], + background = colors[4], + padding = 3 + ), + widget.TextBox( + text = '', + background = colors[4], + foreground = colors[5], + padding = -5, + fontsize = 37 + ), + widget.Memory( + foreground = colors[2], + background = colors[5], + padding = 5 + ), + widget.TextBox( + text = '', + background = colors[5], + foreground = colors[4], + padding = -5, + fontsize = 37 + ), + widget.Net( + foreground = colors[2], + background = colors[4], + padding = 5 + ), + widget.TextBox( + text='', + background = colors[4], + foreground = colors[5], + padding = -5, + fontsize = 37 + ), + widget.TextBox( + text = " ⟳", + padding = 2, + foreground = colors[2], + background = colors[5], + fontsize = 14 + ), + widget.CheckUpdates( + update_interval = 1800, + distro = "Arch", + display_format = "{updates} Updates", + foreground = colors[2], + execute = 'alacritty -e doas pacman -Syu', + background = colors[5] + ), + widget.TextBox( + text = '', + background = colors[5], + foreground = colors[4], + padding = -5, + fontsize = 37 + ), + widget.CurrentLayout( + foreground = colors[2], + background = colors[4], + padding = 5 + ), + widget.TextBox( + text = '', + background = colors[4], + foreground = colors[5], + padding = -5, + fontsize = 37 + ), + widget.Clock( + foreground = colors[2], + background = colors[5], + execute = 'gnome-calendar', + format = "%A, %B %d [ %H:%M:%S ]" + ), + widget.Sep( + linewidth = 0, + padding = 10, + foreground = colors[0], + background = colors[5] + ), + widget.TextBox( + text = '', + background = colors[5], + foreground = colors[4], + padding = -5, + fontsize = 37 + ), + widget.Systray( + background = colors[4], + padding = 2 + ), + widget.Sep( + linewidth = 0, + padding = 5, + foreground = colors[2], + background = colors[4] + ), + ] + return widgets_list + +def init_widgets_screen1(): + widgets_screen1 = init_widgets_list() + return widgets_screen1 + +def init_widgets_screen2(): + widgets_screen2 = init_widgets_list() + widgets_screen2 = widgets_screen2[:-3] + widgets_screen2[-1:] + return widgets_screen2 + +def init_screens(): + return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), opacity=1.0, size=20)), + Screen(top=bar.Bar(widgets=init_widgets_screen2(), opacity=1.0, size=20))] + +if __name__ in ["config", "__main__"]: + screens = init_screens() + +def window_to_prev_group(qtile): + if qtile.currentWindow is not None: + i = qtile.groups.index(qtile.currentGroup) + qtile.currentWindow.togroup(qtile.groups[i - 1].name) + +def window_to_next_group(qtile): + if qtile.currentWindow is not None: + i = qtile.groups.index(qtile.currentGroup) + qtile.currentWindow.togroup(qtile.groups[i + 1].name) + +# A list, which tells the mouse what to do when which button is pressed together with the mod key. +mouse = [ + Drag([mod], "Button1", lazy.window.set_position_floating(), + start=lazy.window.get_position()), + Drag([mod], "Button3", lazy.window.set_size_floating(), + start=lazy.window.get_size()), + Click([mod], "Button2", lazy.window.bring_to_front()) +] + +dgroups_key_binder = None +dgroups_app_rules = [] # type: List +main = None +follow_mouse_focus = False +bring_front_click = True +cursor_warp = False + +floating_layout = layout.Floating(float_rules=[ + *layout.Floating.default_float_rules +]) + +auto_fullscreen = True +focus_on_window_activation = "smart" +auto_minimize = False + +@hook.subscribe.startup_once +def start_once(): + home = os.path.expanduser('~') + subprocess.Popen([home + '/.config/qtile/autostart.sh']) + +wmname = "qtile" diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi new file mode 100644 index 0000000..e4ce718 --- /dev/null +++ b/.config/rofi/config.rasi @@ -0,0 +1,85 @@ +/** + * ROFI Color theme + * NAME: dt-center.rasi + * DESCRIPTION: This is a centered prompt. + * AUTHOR: Derek Taylor (DT) + */ + +* { + background-color: #282c34; + border-color: #282c34; + text-color: #bbc2cf; + font: "SauceCodePro Nerd Font Mono 9"; + prompt-font: "Ubuntu Bold 9"; + prompt-background: #4f76c7; + prompt-foreground: #282c34; + prompt-padding: 4px; + alternate-normal-background: #1c1f24; + alternate-normal-foreground: @text-color; + selected-normal-background: #ae3f3e; + selected-normal-foreground: #ffffff; + spacing: 3; +} +#window { + border: 1; + padding: 5; +} +#mainbox { + border: 0; + padding: 0; +} +#message { + border: 1px dash 0px 0px ; + padding: 1px ; +} +#listview { + fixed-height: 0; + border: 2px dash 0px 0px ; + spacing: 2px ; + scrollbar: true; + padding: 2px 0px 0px ; +} +#element { + border: 0; + padding: 1px ; +} +#element.selected.normal { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +#element.alternate.normal { + background-color: @alternate-normal-background; + text-color: @alternate-normal-foreground; +} +#scrollbar { + width: 0px ; + border: 0; + handle-width: 0px ; + padding: 0; +} +#sidebar { + border: 2px dash 0px 0px ; +} +#button.selected { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +#inputbar { + spacing: 0; + padding: 1px ; +} +#case-indicator { + spacing: 0; +} +#entry { + padding: 4px 4px; + expand: false; + width: 10em; +} +#prompt { + padding: @prompt-padding; + background-color: @prompt-background; + text-color: @prompt-foreground; + font: @prompt-font; + border-radius: 2px; +} diff --git a/.config/rofi/themes/dt-center.rasi b/.config/rofi/themes/dt-center.rasi new file mode 100644 index 0000000..e61bfcb --- /dev/null +++ b/.config/rofi/themes/dt-center.rasi @@ -0,0 +1,85 @@ +/** + * ROFI Color theme + * NAME: dt-center.rasi + * DESCRIPTION: This is a centered prompt. + * AUTHOR: Derek Taylor (DT) + */ + +* { + background-color: #282c34; + border-color: #282c34; + text-color: #bbc2cf; + font: "SauceCodePro Nerd Font Mono 9"; + prompt-font: "Ubuntu Bold 9"; + prompt-background: #51afef; + prompt-foreground: #282c34; + prompt-padding: 4px; + alternate-normal-background: #1c1f24; + alternate-normal-foreground: @text-color; + selected-normal-background: #ae3f3e; + selected-normal-foreground: #ffffff; + spacing: 3; +} +#window { + border: 1; + padding: 5; +} +#mainbox { + border: 0; + padding: 0; +} +#message { + border: 1px dash 0px 0px ; + padding: 1px ; +} +#listview { + fixed-height: 0; + border: 2px dash 0px 0px ; + spacing: 2px ; + scrollbar: true; + padding: 2px 0px 0px ; +} +#element { + border: 0; + padding: 1px ; +} +#element.selected.normal { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +#element.alternate.normal { + background-color: @alternate-normal-background; + text-color: @alternate-normal-foreground; +} +#scrollbar { + width: 0px ; + border: 0; + handle-width: 0px ; + padding: 0; +} +#sidebar { + border: 2px dash 0px 0px ; +} +#button.selected { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +#inputbar { + spacing: 0; + padding: 1px ; +} +#case-indicator { + spacing: 0; +} +#entry { + padding: 4px 4px; + expand: false; + width: 10em; +} +#prompt { + padding: @prompt-padding; + background-color: @prompt-background; + text-color: @prompt-foreground; + font: @prompt-font; + border-radius: 2px; +} diff --git a/.config/rofi/themes/dt-dmenu.rasi b/.config/rofi/themes/dt-dmenu.rasi new file mode 100644 index 0000000..32e9374 --- /dev/null +++ b/.config/rofi/themes/dt-dmenu.rasi @@ -0,0 +1,53 @@ +/** + * ROFI Color theme + * NAME: dt-dmenu.rasi + * DESCRIPTION: This is a horizontal prompt similar to dmenu. + * AUTHOR: Derek Taylor (DT) + */ + +* { + background-color: #282c34; + border-color: #282c34; + text-color: #bbc2cf; + height: 20px; + font: "Mononoki Nerd Font 9"; + prompt-font: "Mononoki Nerd Font 9"; + prompt-background: #51afef; + prompt-foreground: #282c34; + prompt-padding: 2px; + selected-normal-background: #ae3f3e; + selected-normal-foreground: #ffffff; +} +#window { + anchor: north; + location: north; + width: 100%; + padding: 0px; + children: [ horibox ]; +} +#horibox { + orientation: horizontal; + children: [ prompt, entry, listview ]; +} +#prompt { + padding: @prompt-padding; + background-color: @prompt-background; + text-color: @prompt-foreground; + font: @prompt-font; +} +#listview { + layout: horizontal; + lines: 100; +} +#entry { + padding: 2px; + expand: false; + width: 10em; +} +#element { + padding: 2px 8px; +} +#element selected { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} diff --git a/.config/starship.toml b/.config/starship.toml new file mode 100644 index 0000000..f411b90 --- /dev/null +++ b/.config/starship.toml @@ -0,0 +1,20 @@ +# Don't print a new line at the start of the prompt +add_newline = false + +# Make prompt a single line instead of two lines +[line_break] +disabled = true + +# Replace the "❯" symbol in the prompt with "➜" +# [character] # The name of the module we are configuring is "character" +# success_symbol = "[➜](bold green)" # The "success_symbol" is set to "➜" with color "bold green" + +# Use custom format +# format = """ +# [┌───────────────────>](bold green) +# [│](bold green)$directory$rust$package +# [└─>](bold green) """ + +# Disable the package module, hiding it from the prompt completely +[package] +disabled = true diff --git a/.config/syncplay.ini b/.config/syncplay.ini new file mode 100644 index 0000000..834564d --- /dev/null +++ b/.config/syncplay.ini @@ -0,0 +1,73 @@ +[server_data] +host = syncplay.pl +port = 8997 +password = None + +[client_settings] +name = Happiness +room = optical +roomlist = ['optical', 'vpopmail'] +playerpath = /usr/bin/mpv +perplayerarguments = {} +slowdownthreshold = 1.5 +rewindthreshold = 4.0 +fastforwardthreshold = 5.0 +slowondesync = True +rewindondesync = True +fastforwardondesync = True +dontslowdownwithme = False +forceguiprompt = True +filenameprivacymode = SendRaw +filesizeprivacymode = SendRaw +unpauseaction = IfOthersReady +pauseonleave = False +readyatstart = False +autoplayminusers = -1.0 +autoplayinitialstate = None +mediasearchdirectories = [] +sharedplaylistenabled = True +loopatendofplaylist = False +loopsinglefiles = False +autoplayrequiresamefilenames = True +onlyswitchtotrusteddomains = True +trusteddomains = ['youtube.com', 'youtu.be', 'makoto.sakamoto.pl', 'vk.com', 'dailymotion.com'] +publicservers = ['syncplay.pl:8995', 'syncplay.pl:8996', 'syncplay.pl:8997', 'syncplay.pl:8998', 'syncplay.pl:8999'] + +[gui] +autosavejoinstolist = True +showosd = True +showosdwarnings = True +showslowdownosd = True +showdifferentroomosd = False +showsameroomosd = True +shownoncontrollerosd = False +showdurationnotification = True +chatinputenabled = True +chatinputfontunderline = False +chatinputfontfamily = sans-serif +chatinputrelativefontsize = 24.0 +chatinputfontweight = 1.0 +chatinputfontcolor = #FFFF00 +chatinputposition = Top +chatdirectinput = False +chatoutputfontfamily = sans-serif +chatoutputrelativefontsize = 24.0 +chatoutputfontweight = 1.0 +chatoutputfontunderline = False +chatoutputmode = Chatroom +chatmaxlines = 7.0 +chattopmargin = 25.0 +chatleftmargin = 20.0 +chatbottommargin = 30.0 +chatmoveosd = True +chatosdmargin = 110.0 +notificationtimeout = 3.0 +alerttimeout = 5.0 +chattimeout = 7.0 +chatoutputenabled = True + +[general] +language = +checkforupdatesautomatically = True +lastcheckedforupdates = 2023-11-26 18:27:21.777 + diff --git a/.config/wallman/wallman.toml b/.config/wallman/wallman.toml new file mode 100644 index 0000000..2603dcb --- /dev/null +++ b/.config/wallman/wallman.toml @@ -0,0 +1,32 @@ +# Here, define if you want to use different sets of wallpapers, and if yes, +# what those sets are called and how many wallpapers are included per set. +[wallpaper_sets] +enabled = true +used_sets = ["anime", "nature"] +wallpapers_per_set = 5 + +# Enter the hours at which you want the wallpaper to change. +# If the script is called between one of this times, it will go back to the previous time. +[changing_times] +first = "01:00:00" +second = "06:00:00" +third = "10:00:00" +fourth = "17:00:00" +fifth = "21:00:00" + +# The first set in your list of used wallpaper sets. +# Pay attention that the name used here must equal to that used above. +[anime] +pap0 = "/home/emma/Bilder/Hintergründe/Anime Wallpaper/wideSniperNight.jpg" +pap1 = "/home/emma/Bilder/Hintergründe/Anime Wallpaper/wideDepressionMorning" +pap2 = "/home/emma/Bilder/Hintergründe/Anime Wallpaper/WideStreetDay.jpg" +pap3 = "/home/emma/Bilder/Hintergründe/Anime Wallpaper/WideDualityEvening.jpg" +pap4 = "/home/emma/Bilder/Hintergründe/Anime Wallpaper/wideNameNight.png" + +# The second set in your list of wallpaper sets. See above. +[nature] +pap0 = "/home/emma/Bilder/Hintergründe/wideAuroraNight.jpg" +pap1 = "/home/emmma/Bilder/Hintergründe/widePeninsulasMorning.jpg" +pap2 = "/home/emma/Bilder/Hintergründe/wideMountainDay.jpg" +pap3 = "/home/emma/Bilder/Hintergründe/wideLakeEvening.jpg" +pap4 = "/home/emma/Bilder/Hintergründe/wideMountainEveningNight.jpg" diff --git a/.doom.d/config.el b/.doom.d/config.el new file mode 100644 index 0000000..7d62325 --- /dev/null +++ b/.doom.d/config.el @@ -0,0 +1,94 @@ +;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- + +;; Place your private configuration here! Remember, you do not need to run 'doom +;; sync' after modifying this file! + + +;; Some functionality uses this to identify you, e.g. GPG configuration, email +;; clients, file templates and snippets. It is optional. +(setq user-full-name "Emma Nora Theuer" + user-mail-address "kontakt@entheuer.de") + +;; Doom exposes five (optional) variables for controlling fonts in Doom: +;; +;; - `doom-font' -- the primary font to use +;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable) +;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for +;; presentations or streaming. +;; - `doom-unicode-font' -- for unicode glyphs +;; - `doom-serif-font' -- for the `fixed-pitch-serif' face +;; +;; See 'C-h v doom-font' for documentation and more examples of what they +;; accept. For example: +;; +;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light) +;; doom-variable-pitch-font (font-spec :family "Fira Code" :size 13)) +;; +;; If you or Emacs can't find your font, use 'M-x describe-font' to look them +;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to +;; refresh your font settings. If Emacs still can't find your font, it likely +;; wasn't installed correctly. Font issues are rarely Doom issues! + +;; There are two ways to load a theme. Both assume the theme is installed and +;; available. You can either set `doom-theme' or manually load a theme with the +;; `load-theme' function. This is the default: +(setq doom-theme 'doom-one + doom-font (font-spec :family "Comic Code Ligatures" :size 14)) + + +;; This determines the style of line numbers in effect. If set to `nil', line +;; numbers are disabled. For relative line numbers, set this to `relative'. +(setq display-line-numbers-type t) + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/org/") + + +;; Whenever you reconfigure a package, make sure to wrap your config in an +;; `after!' block, otherwise Doom's defaults may override your settings. E.g. +;; +;; (after! PACKAGE +;; (setq x y)) +;; +;; The exceptions to this rule: +;; +;; - Setting file/directory variables (like `org-directory') +;; - Setting variables which explicitly tell you to set them before their +;; package is loaded (see 'C-h v VARIABLE' to look up their documentation). +;; - Setting doom variables (which start with 'doom-' or '+'). +;; +;; Here are some additional functions/macros that will help you configure Doom. +;; +;; - `load!' for loading external *.el files relative to this one +;; - `use-package!' for configuring packages +;; - `after!' for running code after a package has loaded +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces, +;; etc). +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; they are implemented. + +;; This defines the audio backend for eradio and the list of available channels +(use-package eradio + :init + (setq eradio-player '("mpv" "--no-video" "--no-terminal")) + :config + (setq eradio-channels '( + ("R/a/dio" . "https://relay0.r-a-d.io/main.mp3") + ) + ) +) + +;; This defines Keybinds for eradio +(map! :leader (:prefix ("r" . "eradio") :desc "Play a radio channel" "p" 'eradio-play)) +(map! :leader (:prefix ("r" . "eradio") :desc "Stop the radio player" "s" 'eradio-stop)) +(map! :leader (:prefix ("r" . "eradio") :desc "Toggle the radio player" "t" 'eradio-toggle)) diff --git a/.doom.d/init.el b/.doom.d/init.el new file mode 100644 index 0000000..179aec5 --- /dev/null +++ b/.doom.d/init.el @@ -0,0 +1,194 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a link to Doom's Module Index where all +;; of our modules are listed, including what flags they support. + +;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on +;; flags as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + +(doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + company ; the ultimate code completion backend + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + doom-dashboard ; a nifty splash screen for Emacs + ;;doom-quit ; DOOM quit-message prompts when you quit Emacs + (emoji +unicode) ; 🙂 + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + ;;hydra + indent-guides ; highlighted indent columns + ligatures ; ligatures and symbols to make your code pretty again + ;;minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + ;;nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + ;;tabs ; a tab bar for Emacs + ;;treemacs ; a project drawer, like neotree but cooler + unicode ; extended unicode support for various languages + (vc-gutter +pretty) ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + ;;window-select ; visually switch windows + workspaces ; tab emulation, persistence & separate workspaces + ;;zen ; distraction-free coding or writing + + :editor + (evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + ;;(format +onsave) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + ;;multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + ;;word-wrap ; soft wrapping with language-aware indent + + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;ibuffer ; interactive buffer management + undo ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + eshell ; the elisp shell that works everywhere + ;;shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + vterm ; the best terminal emulation in Emacs + + :checkers + syntax ; tasing you for every semicolon you forget + (spell +flyspell) ; tasing you for misspelling mispelling + grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;debugger ; FIXME stepping through code, to help you add bugs + ;;direnv + ;;docker + ;;editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + ;;gist ; interacting with github gists + lookup ; navigate your code and its documentation + lsp ; M-x vscode + magit ; a git porcelain for Emacs + make ; run make tasks from Emacs + ;;pass ; password manager for nerds + pdf ; pdf enhancements + ;;prodigy ; FIXME managing external services & code builders + rgb ; creating color strings + ;;taskrunner ; taskrunner for all your projects + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + ;;tree-sitter ; syntax and parsing, sitting in a tree... + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if IS-MAC macos) ; improve compatibility with macOS + ;;tty ; improve the terminal Emacs experience + + :lang + ;;agda ; types of types of types of types... + ;;beancount ; mind the GAAP + (cc +lsp) ; C > C++ == 1 + ;;clojure ; java with a lisp + ;;common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + csharp ; unity, .NET, and mono shenanigans + ;;data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + ;;gdscript ; the language you waited for + ;;(go +lsp) ; the hipster dialect + ;;(graphql +lsp) ; Give queries a REST + (haskell +lsp) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + json ; At least it ain't XML + (java +lsp) ; the poster child for carpal tunnel syndrome + ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) + ;;julia ; a better, faster MATLAB + kotlin ; a better, slicker Java(Script) + (latex +cdlatex) ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + ;;nix ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + (org +pretty +roam2 +journal) ; organize your plain life in plain text + ;;php ; perl's insecure younger brother + ;;plantuml ; diagrams for confusing people more + ;;purescript ; javascript, but functional + (python +lsp +pyright) ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + ;;raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + (rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + web ; the tubes + yaml ; JSON, but readable + ;;zig ; C, but simpler + + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + ;;calendar + emms + ;;everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + ;;(rss +org) ; emacs as an RSS reader + ;;twitter ; twitter client https://twitter.com/vnought + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/.doom.d/packages.el b/.doom.d/packages.el new file mode 100644 index 0000000..940c541 --- /dev/null +++ b/.doom.d/packages.el @@ -0,0 +1,52 @@ +;; -*- no-byte-compile: t; -*- +;;; $DOOMDIR/packages.el + +;; To install a package with Doom you must declare them here and run 'doom sync' +;; on the command line, then restart Emacs for the changes to take effect -- or +;; use 'M-x doom/reload'. + + +;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: +;(package! some-package) + +;; To install a package directly from a remote git repo, you must specify a +;; `:recipe'. You'll find documentation on what `:recipe' accepts here: +;; https://github.com/radian-software/straight.el#the-recipe-format +;(package! another-package +; :recipe (:host github :repo "username/repo")) + +;; If the package you are trying to install does not contain a PACKAGENAME.el +;; file, or is located in a subdirectory of the repo, you'll need to specify +;; `:files' in the `:recipe': +;(package! this-package +; :recipe (:host github :repo "username/repo" +; :files ("some-file.el" "src/lisp/*.el"))) + +;; If you'd like to disable a package included with Doom, you can do so here +;; with the `:disable' property: +;(package! builtin-package :disable t) + +;; You can override the recipe of a built in package without having to specify +;; all the properties for `:recipe'. These will inherit the rest of its recipe +;; from Doom or MELPA/ELPA/Emacsmirror: +;(package! builtin-package :recipe (:nonrecursive t)) +;(package! builtin-package-2 :recipe (:repo "myfork/package")) + +;; Specify a `:branch' to install a package from a particular branch or tag. +;; This is required for some packages whose default branch isn't 'master' (which +;; our package manager can't deal with; see radian-software/straight.el#279) +;(package! builtin-package :recipe (:branch "develop")) + +;; Use `:pin' to specify a particular commit to install. +;(package! builtin-package :pin "1a2b3c4d5e") + + +;; Doom's packages are pinned to a specific commit and updated from release to +;; release. The `unpin!' macro allows you to unpin single packages... +;(unpin! pinned-package) +;; ...or multiple packages +;(unpin! pinned-package another-pinned-package) +;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) +;(unpin! t) +(package! eradio) +