diff --git a/configure-parts/05-update b/configure-parts/05-update new file mode 100755 index 0000000..aac8022 --- /dev/null +++ b/configure-parts/05-update @@ -0,0 +1,7 @@ +#!/bin/bash + +echo "Updating system" + +if [[ -n "$LINUXCONFIG_PACMAN" ]]; then + sudo pacman -Syu --noconfirm +fi diff --git a/configure-parts/10-required-packages b/configure-parts/10-required-packages new file mode 100755 index 0000000..4e71251 --- /dev/null +++ b/configure-parts/10-required-packages @@ -0,0 +1,7 @@ +#!/bin/bash + +source "${LINUXCONFIG_BASEPATH}/utils/pacman" + +if [[ -n "$LINUXCONFIG_PACMAN" ]]; then + pacman_sinstall gettext vim +fi diff --git a/configure-parts/15-yay b/configure-parts/15-yay new file mode 100755 index 0000000..e90f83b --- /dev/null +++ b/configure-parts/15-yay @@ -0,0 +1,13 @@ +#!/bin/bash + +source "${LINUXCONFIG_BASEPATH}/utils/git_clone_or_pull" +source "${LINUXCONFIG_BASEPATH}/utils/which_silent" +source "${LINUXCONFIG_BASEPATH}/utils/pacman" + +if [[ -n "$LINUXCONFIG_PACMAN" ]]; then + pacman_sinstall git base-devel + git_clone_or_pull_shallow https://aur.archlinux.org/yay.git /tmp/yay-aur + cd /tmp/yay-aur + makepkg -si --noconfirm + cd - +fi diff --git a/configure-parts/30-dotfiles b/configure-parts/30-dotfiles new file mode 100755 index 0000000..cc61516 --- /dev/null +++ b/configure-parts/30-dotfiles @@ -0,0 +1,15 @@ +#!/bin/bash + +echo "Copying dotfiles" +cd "${LINUXCONFIG_BASEPATH}/dotfiles/copies/" +cp -r -n . "$HOME" +cd - + +echo "Linking dotfiles" +cd "${LINUXCONFIG_BASEPATH}/dotfiles/links/" + +links_dir=$(pwd) +find . -type d -printf "%P\n" | awk 'NF' | xargs -n1 -I{} mkdir -p "${HOME}/{}" +find . -type f -printf "%P\n" | xargs -n1 -I{} ln -sf "${links_dir}/{}" "${HOME}/{}" +cd - + diff --git a/configure-parts/50-gui b/configure-parts/50-gui new file mode 100755 index 0000000..a37ac86 --- /dev/null +++ b/configure-parts/50-gui @@ -0,0 +1,11 @@ +#!/bin/bash + +if [[ -z "$LINUXCONFIG_GUI" ]]; then + echo "Skipping gui config because LINUXCONFIG_GUI not set" + exit +fi + +if [[ -n "$LINUXCONFIG_PACMAN" ]]; then + source "${LINUXCONFIG_BASEPATH}/utils/pacman" + pacman_sinstall sway gdm alacritty wofi waybar +fi diff --git a/configure-parts/55-fonts b/configure-parts/55-fonts new file mode 100755 index 0000000..b50670a --- /dev/null +++ b/configure-parts/55-fonts @@ -0,0 +1,13 @@ +#!/bin/bash + +if [[ -z "$LINUXCONFIG_GUI" ]]; then + echo "Skipping font config because LINUXCONFIG_GUI not set" + exit +fi + +if [[ -n "$LINUXCONFIG_PACMAN" ]]; then + yay -S --noconfirm --needed tex-gyre-fonts otf-libertinus noto-fonts-emoji otf-font-awesome ttf-dejavu ttf-liberation noto-fonts + sudo ln -sf /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d + sudo ln -sf /etc/fonts/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d + sudo ln -sf /etc/fonts/conf.avail/11-lcdfilter-default.conf /etc/fonts/conf.d +fi diff --git a/configure-parts/60-systemconfig b/configure-parts/60-systemconfig new file mode 100755 index 0000000..f17fed5 --- /dev/null +++ b/configure-parts/60-systemconfig @@ -0,0 +1,17 @@ +#!/bin/bash + +echo "Copying system-configs" +cd "${LINUXCONFIG_BASEPATH}/system-configs/" + +staging_dir=~/.cache/systemconfigs +rm -rf $staging_dir +mkdir -p $staging_dir + +find . -type d -printf "%P\n" | awk 'NF' | envsubst | xargs -n1 -I{} mkdir -p "${staging_dir}/{}" +find . -type f -printf "%P\n" | xargs -n1 -I{} bash -c "cat '{}' | envsubst > ${staging_dir}/$(echo '{}' | envsubst )" + +cd - + +cd $staging_dir +find . -type f -printf "%P\n" | sudo xargs -n1 -I{} install -m 644 ./{} /{} +cd - diff --git a/configure.sh b/configure.sh new file mode 100755 index 0000000..d26da4d --- /dev/null +++ b/configure.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +set -e + +cd "$(dirname "$0")" +export LINUXCONFIG_BASEPATH="$(pwd)" + +source "${LINUXCONFIG_BASEPATH}/utils/which_silent" + +export LINUXCONFIG_USER=$USER + +# detect gui +if [[ -n "$DISPLAY" || -n "$WAYLAND_DISPLAY" ]]; then + LINUXCONFIG_GUI='yes' +fi +export LINUXCONFIG_GUI + +# detect package manager +if which_silent pacman; then + export LINUXCONFIG_PACMAN='yes' +elif which_silent apt; then + export LINUXCONFIG_APT='yes' +elif which_silent yum; then + export LINUXCONFIG_YUM='yes' +fi + +# configure overrides here +unset LINUXCONFIG_GUI + +run-parts configure-parts diff --git a/dotfiles/copies/.zshrc b/dotfiles/copies/.zshrc new file mode 100644 index 0000000..c03703a --- /dev/null +++ b/dotfiles/copies/.zshrc @@ -0,0 +1,3 @@ +source "$HOME/.linux-config/files/zsh.sh" + + diff --git a/dotfiles/links/.config/alacritty/alacritty.yml b/dotfiles/links/.config/alacritty/alacritty.yml new file mode 100644 index 0000000..8a8d770 --- /dev/null +++ b/dotfiles/links/.config/alacritty/alacritty.yml @@ -0,0 +1,765 @@ +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# Import additional configuration files +# +# These configuration files will be loaded in order, replacing values in files +# loaded earlier with those loaded later in the chain. The file itself will +# always be loaded last. +#import: +# - /path/to/alacritty.yml + +# Any items in the `env` entry below will be added as +# environment variables. Some entries may override variables +# set by alacritty itself. +#env: + # TERM variable + # + # This value is used to set the `$TERM` environment variable for + # each instance of Alacritty. If it is not present, alacritty will + # check the local terminfo database and use `alacritty` if it is + # available, otherwise `xterm-256color` is used. + #TERM: alacritty + +#window: + # Window dimensions (changes require restart) + # + # Number of lines/columns (not pixels) in the terminal. The number of columns + # must be at least `2`, while using a value of `0` for columns and lines will + # fall back to the window manager's recommended size. + #dimensions: + # columns: 0 + # lines: 0 + + # Window position (changes require restart) + # + # Specified in number of pixels. + # If the position is not set, the window manager will handle the placement. + #position: + # x: 0 + # y: 0 + + # Window padding (changes require restart) + # + # Blank space added around the window in pixels. This padding is scaled + # by DPI and the specified value is always added at both opposing sides. + #padding: + # x: 0 + # y: 0 + + # Spread additional padding evenly around the terminal content. + #dynamic_padding: false + + # Window decorations + # + # Values for `decorations`: + # - full: Borders and title bar + # - none: Neither borders nor title bar + # + # Values for `decorations` (macOS only): + # - transparent: Title bar, transparent background and title bar buttons + # - buttonless: Title bar, transparent background and no title bar buttons + #decorations: full + + # Startup Mode (changes require restart) + # + # Values for `startup_mode`: + # - Windowed + # - Maximized + # - Fullscreen + # + # Values for `startup_mode` (macOS only): + # - SimpleFullscreen + #startup_mode: Windowed + + # Window title + #title: Alacritty + + # Allow terminal applications to change Alacritty's window title. + #dynamic_title: true + + # Window class (Linux/BSD only): + #class: + # Application instance name + #instance: Alacritty + # General application class + #general: Alacritty + + # GTK theme variant (Linux/BSD only) + # + # Override the variant of the GTK theme. Commonly supported values are `dark` + # and `light`. Set this to `None` to use the default theme variant. + #gtk_theme_variant: None + +#scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + #history: 10000 + + # Scrolling distance multiplier. + #multiplier: 3 + +# Font configuration +#font: + # Normal (roman) font face + #normal: + # Font family + # + # Default: + # - (macOS) Menlo + # - (Linux/BSD) monospace + # - (Windows) Consolas + #family: monospace + + # The `style` can be specified to pick a specific face. + #style: Regular + + # Bold font face + #bold: + # Font family + # + # If the bold family is not specified, it will fall back to the + # value specified for the normal font. + #family: monospace + + # The `style` can be specified to pick a specific face. + #style: Bold + + # Italic font face + #italic: + # Font family + # + # If the italic family is not specified, it will fall back to the + # value specified for the normal font. + #family: monospace + + # The `style` can be specified to pick a specific face. + #style: Italic + + # Bold italic font face + #bold_italic: + # Font family + # + # If the bold italic family is not specified, it will fall back to the + # value specified for the normal font. + #family: monospace + + # The `style` can be specified to pick a specific face. + #style: Bold Italic + + # Point size + #size: 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: '#1d1f21' + # foreground: '#c5c8c6' + + # Bright and dim foreground colors + # + # The dimmed foreground color is calculated automatically if it is not + # present. If the bright foreground color is not set, or + # `draw_bold_text_with_bright_colors` is `false`, the normal foreground + # color will be used. + #dim_foreground: '#828482' + #bright_foreground: '#eaeaea' + + # Cursor colors + # + # Colors which should be used to draw the terminal cursor. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #cursor: + # text: CellBackground + # cursor: CellForeground + + # Vi mode cursor colors + # + # Colors for the cursor when the vi mode is active. + # + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #vi_mode_cursor: + # text: CellBackground + # cursor: CellForeground + + # 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. + #search: + # Allowed values are CellForeground and CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #matches: + # foreground: '#000000' + # background: '#ffffff' + #focused_match: + # foreground: CellBackground + # background: CellForeground + + #bar: + # background: '#c5c8c6' + # foreground: '#1d1f21' + + # Normal colors + #normal: + # black: '#1d1f21' + # red: '#cc6666' + # green: '#b5bd68' + # yellow: '#f0c674' + # blue: '#81a2be' + # magenta: '#b294bb' + # cyan: '#8abeb7' + # white: '#c5c8c6' + + # Bright colors + #bright: + # black: '#666666' + # red: '#d54e53' + # green: '#b9ca4a' + # yellow: '#e7c547' + # blue: '#7aa6da' + # magenta: '#c397d8' + # cyan: '#70c0b1' + # white: '#eaeaea' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + #dim: + # black: '#131415' + # red: '#864343' + # green: '#777c44' + # yellow: '#9e824c' + # blue: '#556a7d' + # magenta: '#75617b' + # cyan: '#5b7d78' + # white: '#828482' + + # Indexed Colors + # + # The indexed colors include all colors from 16 to 256. + # When these are not set, they're filled with sensible defaults. + # + # Example: + # `- { index: 16, color: '#ff00ff' }` + # + #indexed_colors: [] + +# Bell +# +# The bell is rung every time the BEL control character is received. +#bell: + # Visual Bell Animation + # + # Animation effect for flashing the screen when the visual bell is rung. + # + # Values for `animation`: + # - Ease + # - EaseOut + # - EaseOutSine + # - EaseOutQuad + # - EaseOutCubic + # - EaseOutQuart + # - EaseOutQuint + # - EaseOutExpo + # - EaseOutCirc + # - Linear + #animation: EaseOutExpo + + # Duration of the visual bell flash in milliseconds. A `duration` of `0` will + # disable the visual bell animation. + #duration: 0 + + # Visual bell animation color. + #color: '#ffffff' + + # Bell Command + # + # This program is executed whenever the bell is rung. + # + # When set to `command: None`, no command will be executed. + # + # Example: + # command: + # program: notify-send + # args: ["Hello, World!"] + # + #command: None + +# Background opacity +# +# Window opacity as a floating point number from `0.0` to `1.0`. +# The value `0.0` is completely transparent and `1.0` is opaque. +#background_opacity: 1.0 + +selection: + # This string contains all characters that are used as separators for + # "semantic words" in Alacritty. + semantic_escape_chars: ",│`|\"' ()[]{}<>\t" + + # When set to `true`, selected text will be copied to the primary clipboard. + #save_to_clipboard: false + +#cursor: + # Cursor style + # + # Values for `style`: + # - ▇ Block + # - _ Underline + # - | Beam + #style: Block + + # 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: Control + +# Mouse bindings +# +# Mouse bindings are specified as a list of objects, much like the key +# bindings further below. +# +# To trigger mouse bindings when an application running within Alacritty +# captures the mouse, the `Shift` modifier is automatically added as a +# requirement. +# +# Each mouse binding will specify a: +# +# - `mouse`: +# +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# - `action` (see key bindings) +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Middle, action: PasteSelection } + +# Key bindings +# +# Key bindings are specified as a list of objects. For example, this is the +# default paste binding: +# +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Each key binding will specify a: +# +# - `key`: Identifier of the key pressed +# +# - A-Z +# - F1-F24 +# - Key0-Key9 +# +# A full list with available key codes can be found here: +# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants +# +# Instead of using the name of the keys, the `key` field also supports using +# the scancode of the desired key. Scancodes have to be specified as a +# decimal number. This command will allow you to display the hex scancodes +# for certain keys: +# +# `showkey --scancodes`. +# +# Then exactly one of: +# +# - `chars`: Send a byte sequence to the running application +# +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. To find escape codes for bindings +# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside +# of tmux. Note that applications use terminfo to map escape sequences back +# to keys. It is therefore required to update the terminfo when changing an +# escape sequence. +# +# - `action`: Execute a predefined action +# +# - ToggleViMode +# - SearchForward +# Start searching toward the right of the search origin. +# - SearchBackward +# Start searching toward the left of the search origin. +# - Copy +# - Paste +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollHalfPageUp +# - ScrollHalfPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# Remove the terminal's scrollback history. +# - Hide +# Hide the Alacritty window. +# - Minimize +# Minimize the Alacritty window. +# - Quit +# Quit Alacritty. +# - ToggleFullscreen +# - SpawnNewInstance +# Spawn a new instance of Alacritty. +# - ClearLogNotice +# Clear Alacritty's UI warning and error notice. +# - ClearSelection +# Remove the active selection. +# - ReceiveChar +# - None +# +# - Vi mode exclusive actions: +# +# - Open +# Open URLs at the cursor location with the launcher configured in +# `url.launcher`. +# - ToggleNormalSelection +# - ToggleLineSelection +# - ToggleBlockSelection +# - ToggleSemanticSelection +# Toggle semantic selection based on `selection.semantic_escape_chars`. +# +# - Vi mode exclusive cursor motion actions: +# +# - Up +# One line up. +# - Down +# One line down. +# - Left +# One character left. +# - Right +# One character right. +# - First +# First column, or beginning of the line when already at the first column. +# - Last +# Last column, or beginning of the line when already at the last column. +# - FirstOccupied +# First non-empty cell in this terminal row, or first non-empty cell of +# the line when already at the first cell of the row. +# - High +# Top of the screen. +# - Middle +# Center of the screen. +# - Low +# Bottom of the screen. +# - SemanticLeft +# Start of the previous semantically separated word. +# - SemanticRight +# Start of the next semantically separated word. +# - SemanticLeftEnd +# End of the previous semantically separated word. +# - SemanticRightEnd +# End of the next semantically separated word. +# - WordLeft +# Start of the previous whitespace separated word. +# - WordRight +# Start of the next whitespace separated word. +# - WordLeftEnd +# End of the previous whitespace separated word. +# - WordRightEnd +# End of the next whitespace separated word. +# - Bracket +# Character matching the bracket at the cursor's location. +# - SearchNext +# Beginning of the next match. +# - SearchPrevious +# Beginning of the previous match. +# - SearchStart +# Start of the match to the left of the vi mode cursor. +# - SearchEnd +# End of the match to the right of the vi mode cursor. +# +# - macOS exclusive actions: +# - ToggleSimpleFullscreen +# Enter fullscreen without occupying another space. +# +# - Linux/BSD exclusive actions: +# +# - CopySelection +# Copy from the selection buffer. +# - PasteSelection +# Paste from the selection buffer. +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - Alt +# - Vi +# +# A `~` operator can be used before a mode to apply the binding whenever +# the mode is *not* active, e.g. `~Alt`. +# +# Bindings are always filled by default, but will be replaced when a new +# binding with the same triggers is defined. To unset a default binding, it can +# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for +# a no-op if you do not wish to receive input characters for that binding. +# +# If the same trigger is assigned to multiple actions, all of them are executed +# in the order they were defined in. +#key_bindings: + #- { key: Paste, action: Paste } + #- { key: Copy, action: Copy } + #- { key: L, mods: Control, action: ClearLogNotice } + #- { key: L, mods: Control, mode: ~Vi, 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: C, mods: Control, 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: Plus, mods: Control, action: IncreaseFontSize } + #- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } + #- { key: Minus, mods: Control, action: DecreaseFontSize } + #- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } + + # (Windows only) + #- { key: Return, mods: Alt, action: ToggleFullscreen } + + # (macOS only) + #- { key: K, mods: Command, mode: ~Vi, chars: "\x0c" } + #- { key: Key0, mods: Command, action: ResetFontSize } + #- { key: Equals, mods: Command, action: IncreaseFontSize } + #- { key: Plus, mods: Command, action: IncreaseFontSize } + #- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } + #- { key: Minus, mods: Command, action: DecreaseFontSize } + #- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } + #- { key: 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/dotfiles/links/.config/environment.d/10-path.conf b/dotfiles/links/.config/environment.d/10-path.conf new file mode 100644 index 0000000..f87e17b --- /dev/null +++ b/dotfiles/links/.config/environment.d/10-path.conf @@ -0,0 +1 @@ +PATH=${HOME}/bin:${HOME}/.linux-config/scripts-bin:${PATH} diff --git a/dotfiles/links/.config/gtk-2.0/gtkfilechooser.ini b/dotfiles/links/.config/gtk-2.0/gtkfilechooser.ini new file mode 100644 index 0000000..c58e97a --- /dev/null +++ b/dotfiles/links/.config/gtk-2.0/gtkfilechooser.ini @@ -0,0 +1,11 @@ +[Filechooser Settings] +LocationMode=path-bar +ShowHidden=false +ShowSizeColumn=true +GeometryX=4096 +GeometryY=0 +GeometryWidth=996 +GeometryHeight=738 +SortColumn=name +SortOrder=ascending +StartupMode=recent diff --git a/dotfiles/links/.config/gtk-3.0/settings.ini b/dotfiles/links/.config/gtk-3.0/settings.ini new file mode 100644 index 0000000..7c6461a --- /dev/null +++ b/dotfiles/links/.config/gtk-3.0/settings.ini @@ -0,0 +1,2 @@ +[Settings] +gtk-application-prefer-dark-theme=0 diff --git a/dotfiles/links/.config/gtk-4.0/settings.ini b/dotfiles/links/.config/gtk-4.0/settings.ini new file mode 100644 index 0000000..7c6461a --- /dev/null +++ b/dotfiles/links/.config/gtk-4.0/settings.ini @@ -0,0 +1,2 @@ +[Settings] +gtk-application-prefer-dark-theme=0 diff --git a/dotfiles/links/.config/kanshi/config b/dotfiles/links/.config/kanshi/config new file mode 100644 index 0000000..f0b01c7 --- /dev/null +++ b/dotfiles/links/.config/kanshi/config @@ -0,0 +1,15 @@ +profile desk { + output eDP-1 disable + output "Dell Inc. DELL P2418D 29J0P92D00TT" enable position 0,0 scale 1.25 + output "Dell Inc. Dell S2417DG YNY1D71K0PFU" enable mode 2560x1440@60Hz position 2048,0 scale 1.25 +} + +profile new-desk { + output eDP-1 disable + output "Goldstar Company Ltd LG ULTRAGEAR 010NTEPJQ724" enable mode 2560x1440@60Hz position 747,0 transform 90 scale 1.5 + output "Goldstar Company Ltd LG ULTRAGEAR 010NTBKJQ757" enable mode 2560x1440@60Hz position 1707,350 scale 1.5 +} + +profile mobile { + output eDP-1 enable scale 1.5 +} diff --git a/dotfiles/links/.config/kanshi/config.bak b/dotfiles/links/.config/kanshi/config.bak new file mode 100644 index 0000000..b03a0b0 --- /dev/null +++ b/dotfiles/links/.config/kanshi/config.bak @@ -0,0 +1,9 @@ +{ + output eDP-1 disable + output DP-3 position 0,0 + output DP-5 position 2560,0 +} + +{ + output eDP-1 enable +} diff --git a/dotfiles/links/.config/sway/config b/dotfiles/links/.config/sway/config new file mode 100644 index 0000000..17b2268 --- /dev/null +++ b/dotfiles/links/.config/sway/config @@ -0,0 +1,268 @@ +# Default config for sway +# +# Copy this to ~/.config/sway/config and edit it to your liking. +# +# Read `man 5 sway` for a complete reference. + +### Variables +# +# Logo key. Use Mod1 for Alt. +set $mod Mod4 +# Home row direction keys, like vim +set $left h +set $down j +set $up k +set $right l +# Your preferred terminal emulator +set $term alacritty +# Your preferred application launcher +# Note: pass the final command to swaymsg so that the resulting window can be opened +# on the original workspace that the command was run on. +set $menu wofi --show run --normal-window | xargs swaymsg exec -- + +set $lock swaylock -c 000000 --indicator-idle-visible -f +set $sleep systemctl suspend + +bindsym $mod+Shift+s exec "$lock; $sleep" +bindsym $mod+Ctrl+l exec "$lock" + +### Output configuration +# +# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) +output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill +# +# Example configuration: +# +# output HDMI-A-1 resolution 1920x1080 position 1920,0 +# +# You can get the names of your outputs by running: swaymsg -t get_outputs + +### Idle configuration +# +# Example configuration: +# +# exec swayidle -w \ +# timeout 300 'swaylock -f -c 000000' \ +# timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \ +# before-sleep 'swaylock -f -c 000000' +# +# This will lock your screen after 300 seconds of inactivity, then turn off +# your displays after another 300 seconds, and turn your screens back on when +# resumed. It will also lock your screen before your computer goes to sleep. + +### Input configuration +# +# Example configuration: +# +# input "2:14:SynPS/2_Synaptics_TouchPad" { +# dwt enabled +# tap enabled +# natural_scroll enabled +# middle_emulation enabled +# } +# +# You can get the names of your inputs by running: swaymsg -t get_inputs +# Read `man 5 sway-input` for more information about this section. + +### Key bindings +# +# Basics: +# + # Start a terminal + bindsym $mod+Return exec $term + + # Kill focused window + bindsym $mod+Shift+q kill + + # Start your launcher + bindsym $mod+d exec $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 exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' +# +# 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] + bindsym $mod+Left focus left + bindsym $mod+Down focus down + bindsym $mod+Up focus up + bindsym $mod+Right focus 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 + # Ditto, with arrow keys + bindsym $mod+Shift+Left move left + bindsym $mod+Shift+Down move down + bindsym $mod+Shift+Up move up + bindsym $mod+Shift+Right move right +# +# Workspaces: +# + # Switch to workspace + bindsym $mod+1 workspace number 1 + bindsym $mod+2 workspace number 2 + bindsym $mod+3 workspace number 3 + bindsym $mod+4 workspace number 4 + bindsym $mod+5 workspace number 5 + bindsym $mod+6 workspace number 6 + bindsym $mod+7 workspace number 7 + bindsym $mod+8 workspace number 8 + bindsym $mod+9 workspace number 9 + bindsym $mod+0 workspace number 10 + # Move focused container to workspace + bindsym $mod+Shift+1 move container to workspace number 1 + bindsym $mod+Shift+2 move container to workspace number 2 + bindsym $mod+Shift+3 move container to workspace number 3 + bindsym $mod+Shift+4 move container to workspace number 4 + bindsym $mod+Shift+5 move container to workspace number 5 + bindsym $mod+Shift+6 move container to workspace number 6 + bindsym $mod+Shift+7 move container to workspace number 7 + bindsym $mod+Shift+8 move container to workspace number 8 + bindsym $mod+Shift+9 move container to workspace number 9 + bindsym $mod+Shift+0 move container to workspace number 10 + # Note: workspaces can have any name you want, not just numbers. + # We just use 1-10 as the default. +# +# Layout stuff: +# + # You can "split" the current object of your focus with + # $mod+b or $mod+v, for horizontal and vertical splits + # respectively. + bindsym $mod+b splith + bindsym $mod+v splitv + + # Switch the current container between different layout styles + bindsym $mod+s layout stacking + bindsym $mod+w layout tabbed + bindsym $mod+e layout toggle split + + # Make the current focus fullscreen + bindsym $mod+f fullscreen + + # Toggle the current focus between tiling and floating mode + bindsym $mod+Shift+space floating toggle + + # Swap focus between the tiling area and the floating area + bindsym $mod+space focus mode_toggle + + # Move focus to the parent container + bindsym $mod+a focus parent +# +# Scratchpad: +# + # Sway has a "scratchpad", which is a bag of holding for windows. + # You can send windows there and get them back later. + + # Move the currently focused window to the scratchpad + bindsym $mod+Shift+minus move scratchpad + + # Show the next scratchpad window or hide the focused scratchpad window. + # If there are multiple scratchpad windows, this command cycles through them. + bindsym $mod+minus scratchpad show +# +# Resizing containers: +# +mode "resize" { + # left will shrink the containers width + # right will grow the containers width + # up will shrink the containers height + # down will grow the containers height + bindsym $left resize shrink width 10px + bindsym $down resize grow height 10px + bindsym $up resize shrink height 10px + bindsym $right resize grow width 10px + + # Ditto, with arrow keys + bindsym Left resize shrink width 10px + bindsym Down resize grow height 10px + bindsym Up resize shrink height 10px + bindsym Right resize grow width 10px + + # Return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+r mode "resize" + +# desktop settings +#output HDMI-A-1 scale 1.5 +#output DP-1 scale 1.5 res 2560x1440@144Hz +#output "Dell Inc. DELL P2418D 29J0P92D00TT" scale 1.5 +#output "Dell Inc. Dell S2417DG #ASNB3mfWMnbd" scale 1.5 res 2560x1440@144Hz +# +# Status Bar: +# +# Read `man 5 sway-bar` for more information about this section. +bar { + #position top + + # When the status_command prints a new line to stdout, swaybar updates. + # The default just shows the current date and time. + #status_command while date +'%Y-%m-%d %l:%M:%S %p'; do sleep 1; done + swaybar_command waybar + + colors { + statusline #ffffff + background #323232 + inactive_workspace #32323200 #32323200 #5c5c5c + } +} + +font "Noto Sans Mono 10" + +input "type:keyboard" { + xkb_options "caps:escape,altwin:swap_alt_win" +} + +input "1267:32:Elan_Touchpad" { + tap enabled +} + +bindsym Ctrl+Alt+Right workspace next_on_output +bindsym Ctrl+Alt+Left workspace prev_on_output +bindsym --whole-window $mod+button9 focus left +bindsym --whole-window $mod+button8 focus right + +for_window [title=".* - Chromium"] border none + +mouse_warping container + +bindsym $mod+Shift+bracketleft move workspace to output left +bindsym $mod+Shift+bracketright move workspace to output right + +bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% +bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% +bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle +bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle +bindsym XF86MonBrightnessDown exec brightnessctl set 5%- +bindsym XF86MonBrightnessUp exec brightnessctl set +5% +bindsym XF86AudioPlay exec playerctl play-pause +bindsym XF86AudioNext exec playerctl next +bindsym XF86AudioPrev exec playerctl previous + +exec kanshi +exec mako + +# xwayland settings +exec xsettingsd +xwayland force scale 2 + +include /etc/sway/config.d/* diff --git a/dotfiles/links/.config/waybar/config b/dotfiles/links/.config/waybar/config new file mode 100644 index 0000000..b9992c8 --- /dev/null +++ b/dotfiles/links/.config/waybar/config @@ -0,0 +1,123 @@ +// -*- mode: json -*- + +{ + "layer": "top", + "position": "top", + + "modules-left": [ + "sway/workspaces", + "custom/right-arrow-dark" + ], + "modules-center": [ + "custom/left-arrow-dark", + "clock#1", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "clock#2", + "custom/right-arrow-dark", + "custom/right-arrow-light", + "clock#3", + "custom/right-arrow-dark" + ], + "modules-right": [ + "custom/left-arrow-dark", + "pulseaudio", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "memory", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "cpu", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "battery", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "disk", + "custom/left-arrow-light", + "custom/left-arrow-dark", + "tray" + ], + + "custom/left-arrow-dark": { + "format": "", + "tooltip": false + }, + "custom/left-arrow-light": { + "format": "", + "tooltip": false + }, + "custom/right-arrow-dark": { + "format": "", + "tooltip": false + }, + "custom/right-arrow-light": { + "format": "", + "tooltip": false + }, + + "sway/workspaces": { + "disable-scroll": true, + "format": "{name}" + }, + + "clock#1": { + "format": "{:%a}", + "tooltip": false + }, + "clock#2": { + "format": "{:%H:%M}", + "tooltip": false + }, + "clock#3": { + "format": "{:%m-%d}", + "tooltip": false + }, + + "pulseaudio": { + "format": "{icon} {volume:2}%", + "format-bluetooth": "{icon} {volume}%", + "format-muted": "MUTE", + "format-icons": { + "headphones": "", + "default": [ + "", + "" + ] + }, + "scroll-step": 5, + "on-click": "pamixer -t", + "on-click-right": "pavucontrol" + }, + "memory": { + "interval": 5, + "format": "Mem {}%" + }, + "cpu": { + "interval": 5, + "format": "CPU {usage:2}%" + }, + "disk": { + "interval": 5, + "format": "Disk {percentage_used:2}%", + "path": "/" + }, + "battery": { + "states": { + "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-icons": [ + "", + "", + "", + "", + "" + ] + }, + "tray": { + "icon-size": 20 + } +} diff --git a/dotfiles/links/.config/waybar/config.bak b/dotfiles/links/.config/waybar/config.bak new file mode 100644 index 0000000..f036fe1 --- /dev/null +++ b/dotfiles/links/.config/waybar/config.bak @@ -0,0 +1,147 @@ +{ + "layer": "top", // Waybar at top layer + // "position": "bottom", // Waybar position (top|bottom|left|right) + "height": 20, // Waybar height (to be removed for auto height) + // "width": 1280, // Waybar width + // Choose the order of the modules + "modules-left": ["sway/workspaces", "sway/mode", "custom/media"], + //"modules-center": ["sway/window"], + "modules-right": ["mpd", "idle_inhibitor", "pulseaudio", "network", "cpu", "memory", "temperature", "backlight", "sway/language", "battery", "battery#bat2", "clock", "tray"], + // Modules configuration + // "sway/workspaces": { + // "disable-scroll": true, + // "all-outputs": true, + // "format": "{name}: {icon}", + // "format-icons": { + // "1": "", + // "2": "", + // "3": "", + // "4": "", + // "5": "", + // "urgent": "", + // "focused": "", + // "default": "" + // } + // }, + "sway/mode": { + "format": "{}" + }, + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ ", + "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)" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + // "icon-size": 21, + "spacing": 10 + }, + "clock": { + // "timezone": "America/New_York", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + "memory": { + "format": "{}% " + }, + "temperature": { + // "thermal-zone": 2, + // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", + "critical-threshold": 80, + // "format-critical": "{temperatureC}°C {icon}", + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""] + }, + "backlight": { + // "device": "acpi_video1", + "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-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat2": { + "bat": "BAT2" + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ifname}: {ipaddr}/{cidr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/media": { + "format": "{icon} {}", + "return-type": "json", + "max-length": 40, + "format-icons": { + "spotify": "", + "default": "🎜" + }, + "escape": true, + "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder + // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name + } +} diff --git a/dotfiles/links/.config/waybar/style.css b/dotfiles/links/.config/waybar/style.css new file mode 100644 index 0000000..a2ce30c --- /dev/null +++ b/dotfiles/links/.config/waybar/style.css @@ -0,0 +1,74 @@ +* { + font-size: 12px; + font-family: monospace; +} + +window#waybar { + background: #292b2e; + color: #fdf6e3; +} + +#custom-right-arrow-dark, +#custom-left-arrow-dark { + color: #1a1a1a; +} +#custom-right-arrow-light, +#custom-left-arrow-light { + color: #292b2e; + background: #1a1a1a; +} + +#workspaces, +#clock.1, +#clock.2, +#clock.3, +#pulseaudio, +#memory, +#cpu, +#battery, +#disk, +#tray { + background: #1a1a1a; +} + +#workspaces button { + padding: 0 2px; + color: #fdf6e3; +} +#workspaces button.focused { + color: #268bd2; +} +#workspaces button:hover { + box-shadow: inherit; + text-shadow: inherit; +} +#workspaces button:hover { + background: #1a1a1a; + border: #1a1a1a; + padding: 0 3px; +} + +#pulseaudio { + color: #268bd2; +} +#memory { + color: #2aa198; +} +#cpu { + color: #6c71c4; +} +#battery { + color: #859900; +} +#disk { + color: #b58900; +} + +#clock, +#pulseaudio, +#memory, +#cpu, +#battery, +#disk { + padding: 0 6px; +} diff --git a/dotfiles/links/.config/wofi/config b/dotfiles/links/.config/wofi/config new file mode 100644 index 0000000..9474b16 --- /dev/null +++ b/dotfiles/links/.config/wofi/config @@ -0,0 +1 @@ +run-always_parse_args=true diff --git a/dotfiles/links/.gitconfig b/dotfiles/links/.gitconfig new file mode 100644 index 0000000..ce7ad6b --- /dev/null +++ b/dotfiles/links/.gitconfig @@ -0,0 +1,11 @@ +[user] + email = git@agartner.com + name = Alex Gartner + +[push] + default = current +[pull] + ff = only + +[includeIf "gitdir:~/workspace/github.com/braincorp/"] + path = ~/.gitconfig.work diff --git a/dotfiles/links/.gitconfig.work b/dotfiles/links/.gitconfig.work new file mode 100644 index 0000000..3c93eaf --- /dev/null +++ b/dotfiles/links/.gitconfig.work @@ -0,0 +1,2 @@ +[user] + email = alex.gartner@braincorp.com diff --git a/dotfiles/links/.pam_environment b/dotfiles/links/.pam_environment new file mode 100644 index 0000000..2621385 --- /dev/null +++ b/dotfiles/links/.pam_environment @@ -0,0 +1 @@ +PATH DEFAULT=${HOME}/bin:${HOME}/.linux-config/scripts-bin:${PATH} diff --git a/dotfiles/links/.tmux.conf b/dotfiles/links/.tmux.conf new file mode 100644 index 0000000..336925f --- /dev/null +++ b/dotfiles/links/.tmux.conf @@ -0,0 +1 @@ +set -g default-terminal "screen-256color" diff --git a/files/zsh.sh b/files/zsh.sh new file mode 100644 index 0000000..fb0628f --- /dev/null +++ b/files/zsh.sh @@ -0,0 +1,33 @@ +export ZSH="$HOME/.oh-my-zsh" +ZSH_THEME="robbyrussell" +plugins=(git) +source "$ZSH/oh-my-zsh.sh" + +export PATH="${PATH}:${HOME}/bin:${HOME}/.linux-config/scripts-bin/" + +bindkey '^r' history-incremental-pattern-search-backward + +alias ssh="env TERM=xterm-256color ssh" + +SSH_ENV="$HOME/.ssh/agent-environment" + +function start_agent { + echo "Initialising new SSH agent..." + /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" + echo succeeded + chmod 600 "${SSH_ENV}" + . "${SSH_ENV}" > /dev/null + /usr/bin/ssh-add; +} + +# Source SSH settings, if applicable + +if [ -f "${SSH_ENV}" ]; then + . "${SSH_ENV}" > /dev/null + #ps ${SSH_AGENT_PID} doesn't work under cywgin + ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { + start_agent; + } +else + start_agent; +fi diff --git a/scripts-bin/capp b/scripts-bin/capp new file mode 100755 index 0000000..69d5753 --- /dev/null +++ b/scripts-bin/capp @@ -0,0 +1,7 @@ +#!/bin/bash +url="http://captive.apple.com" +if [[ -n $1 ]]; then + url=$1 +fi + +chrome --app="$url" diff --git a/scripts-bin/chrome b/scripts-bin/chrome new file mode 100755 index 0000000..98e620e --- /dev/null +++ b/scripts-bin/chrome @@ -0,0 +1,3 @@ +#!/bin/bash +set -x +chromium -enable-features=UseOzonePlatform -ozone-platform=wayland $@ diff --git a/scripts-bin/chrome-app b/scripts-bin/chrome-app new file mode 100755 index 0000000..69d5753 --- /dev/null +++ b/scripts-bin/chrome-app @@ -0,0 +1,7 @@ +#!/bin/bash +url="http://captive.apple.com" +if [[ -n $1 ]]; then + url=$1 +fi + +chrome --app="$url" diff --git a/scripts-bin/code-server b/scripts-bin/code-server new file mode 100755 index 0000000..2b9f97b --- /dev/null +++ b/scripts-bin/code-server @@ -0,0 +1,10 @@ +#!/bin/bash + +PORT=6008 +if [[ -n $1 ]]; then + PORT=$1 +fi + +nohup /usr/bin/code-server --bind-addr=localhost:$PORT --auth=none $PWD >/dev/null 2>&1 & +sleep .5 +chrome-app http://localhost:$PORT diff --git a/scripts-bin/gcal b/scripts-bin/gcal new file mode 100755 index 0000000..7d689de --- /dev/null +++ b/scripts-bin/gcal @@ -0,0 +1,2 @@ +#!/bin/bash +chrome --app="https://calendar.google.com" diff --git a/scripts-bin/gmail b/scripts-bin/gmail new file mode 100755 index 0000000..d297175 --- /dev/null +++ b/scripts-bin/gmail @@ -0,0 +1,2 @@ +#!/bin/bash +chrome --app="https://mail.google.com" diff --git a/scripts-bin/playerctl-fast b/scripts-bin/playerctl-fast new file mode 100755 index 0000000..397aac4 --- /dev/null +++ b/scripts-bin/playerctl-fast @@ -0,0 +1,38 @@ +#!/bin/bash + +set -euo pipefail + +case "${1:-}" in + next) + MEMBER=Next + ;; + + previous) + MEMBER=Previous + ;; + + play) + MEMBER=Play + ;; + + pause) + MEMBER=Pause + ;; + + play-pause) + MEMBER=PlayPause + ;; + + *) + echo "Usage: $0 next|previous|play|pause|play-pause" + exit 1 + ;; + +esac + + #--dest="org.mpris.MediaPlayer2.$(playerctl -l | head -n 1)" +exec dbus-send \ + --print-reply \ + --dest="org.mpris.MediaPlayer2.spotifyd" \ + /org/mpris/MediaPlayer2 \ + "org.mpris.MediaPlayer2.Player.$MEMBER" diff --git a/scripts-bin/slack b/scripts-bin/slack new file mode 100755 index 0000000..477eec4 --- /dev/null +++ b/scripts-bin/slack @@ -0,0 +1,2 @@ +#!/bin/bash +chrome --app="https://app.slack.com/client/" diff --git a/scripts-bin/spotifyd b/scripts-bin/spotifyd new file mode 100755 index 0000000..1cb9290 --- /dev/null +++ b/scripts-bin/spotifyd @@ -0,0 +1,3 @@ +#!/bin/bash + +/usr/bin/spotifyd --no-daemon -b pulseaudio diff --git a/scripts-bin/spt-web b/scripts-bin/spt-web new file mode 100755 index 0000000..c3da0ae --- /dev/null +++ b/scripts-bin/spt-web @@ -0,0 +1,3 @@ +#!/bin/bash + +chrome-app https://open.spotify.com diff --git a/scripts-bin/sptg b/scripts-bin/sptg new file mode 100755 index 0000000..e645b3b --- /dev/null +++ b/scripts-bin/sptg @@ -0,0 +1,3 @@ +#!/bin/bash + +alacritty -e spt diff --git a/scripts-bin/switch-audio-sink b/scripts-bin/switch-audio-sink new file mode 100755 index 0000000..8c43958 --- /dev/null +++ b/scripts-bin/switch-audio-sink @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +# Prompts user to select an audio device (output sink) to be used +# as default output and set it for all active applications (input sinks). +# (requires `pactl` and `dmenu`) + +set -o errexit +set -o pipefail + +LANG="en_US.utf-8" + +while getopts ndt opts; do + case "$opts" in + n) notify=true;; + d) default=true;; + t) toggle=true;; + [?]) echo >&2 "Usage: $0 [-n] [-d|-t] [searchpattern]" + exit 1;; + esac +done +shift $((OPTIND-1)) +sink_search_pattern="$@" + +# get all output devices and all active applications +SINK_OUTPUTS=$(pactl list sinks \ + | grep -Po '(?<=Description: ).*') +SINK_INPUT_INDICES=$(pactl list sink-inputs \ + | grep '^Sink Input #' |sed 's/.*#//' || true) +CURRENT_DEFAULT_SINK_OUTPUT="$(pactl info |grep -Po '(?<=Default Sink: ).*')" +CURRENT_DEFAULT_SINK_OUTPUT=$(pactl list sinks \ + | grep -ie 'Description:' -e "Name: $CURRENT_DEFAULT_SINK_OUTPUT" \ + | grep -FA1 'Name:' \ + | grep -Po '(?<=Description: ).*') +CURRENT_DEFAULT_SINK_OUTPUT_INDEX=$(pactl list sinks \ + | grep -Fe 'Sink #' -e "Description: $CURRENT_DEFAULT_SINK_OUTPUT" \ + | grep -FB1 'Description:' \ + | grep -Po '(?<=Sink #).*' || true) + +# remove default sink if not explicitly wanted +if [ "$default" != "true" -a "$toggle" != "true" ]; then + SINK_OUTPUTS=$(grep -vF "$CURRENT_DEFAULT_SINK_OUTPUT" <<<"$SINK_OUTPUTS") +fi + +# filter for search pattern +sink_output_index=$(pactl list sinks \ + | grep -iEe 'Sink #' -e "Description: .*${sink_search_pattern}" \ + | grep -FB1 'Description:' \ + | grep -Po '(?<=Sink #).*' || true) +SINK_OUTPUTS=$(pactl list sinks \ + | grep -iEe "Description: .*${sink_search_pattern}" \ + | grep -Po '(?<=Description: ).*' || true) +match_count=$(grep '^' -c <<<"$sink_output_index") + +if [ $match_count -eq 1 ]; then + # select sink output + sink_output_index=$sink_output_index + selected_sink_output=$(pactl list sinks \ + | grep -e "^Sink #$sink_output_index" -e "Description:" \ + | grep -FA1 "Sink #$sink_output_index" \ + | grep -Po '(?<=Description: ).*') + +elif [ $match_count -lt 1 ]; then + echo >&2 "No matches for sink pattern" + exit 1 + +elif [ "$toggle" == "true" ]; then + # toggle through selected + new_output_sink_index="" + for output_index in $sink_output_index; do + if [ $output_index -gt $CURRENT_DEFAULT_SINK_OUTPUT_INDEX ]; then + new_output_sink_index=$output_index + break + fi + done + # fallback to first match if no output sink was found + if [ -z "$new_output_sink_index" ]; then + new_output_sink_index=$(head -1 <<<"$sink_output_index") + fi + + sink_output_index=$new_output_sink_index + selected_sink_output=$(pactl list sinks \ + | grep -e "^Sink #$sink_output_index" -e "Description:" \ + | grep -FA1 "Sink #$sink_output_index" \ + | grep -Po '(?<=Description: ).*') + +else + # fall back to interactive select and prompt user to select an audio device + selected_sink_output=$(printf "$SINK_OUTPUTS" \ + | wofi -d -i -p "Select sink:") + sink_output_index=$(pactl list sinks \ + | grep -Fe 'Sink #' -e "Description: $selected_sink_output" \ + | grep -FB1 'Description:' \ + | grep -Po '(?<=Sink #).*') +fi + +# set new default sink for new applications +pactl set-default-sink $sink_output_index + +# set new sink for every application +while read sink_input_index; do + pactl move-sink-input $sink_input_index $sink_output_index 2>/dev/null || true +done <<<$SINK_INPUT_INDICES + +[ "$notify" == "true" ] \ + && notify-send -u normal "Sink Changed" "New Sink: $selected_sink_output" diff --git a/scripts-bin/wtfutilg b/scripts-bin/wtfutilg new file mode 100755 index 0000000..d031588 --- /dev/null +++ b/scripts-bin/wtfutilg @@ -0,0 +1,3 @@ +#!/bin/bash + +alacritty -e wtfutil diff --git a/system-configs/etc/gdm/custom.conf b/system-configs/etc/gdm/custom.conf new file mode 100644 index 0000000..816a812 --- /dev/null +++ b/system-configs/etc/gdm/custom.conf @@ -0,0 +1,12 @@ +[daemon] +AutomaticLogin=${LINUXCONFIG_USERNAME} +AutomaticLoginEnable=True + +[security] + +[xdmcp] + +[chooser] + +[debug] + diff --git a/system-configs/var/lib/AccountsService/users/${LINUXCONFIG_USERNAME} b/system-configs/var/lib/AccountsService/users/${LINUXCONFIG_USERNAME} new file mode 100644 index 0000000..d236915 --- /dev/null +++ b/system-configs/var/lib/AccountsService/users/${LINUXCONFIG_USERNAME} @@ -0,0 +1,6 @@ +[User] +Language= +Session= +XSession=sway +Icon=/home/${LINUXCONFIG_USERNAME}/.face +SystemAccount=false diff --git a/utils/git_clone_or_pull b/utils/git_clone_or_pull new file mode 100644 index 0000000..75bd28d --- /dev/null +++ b/utils/git_clone_or_pull @@ -0,0 +1,18 @@ +#!/bin/bash + +git_clone_or_pull() { + repo="$1" + target="$2" + args="$3" + if [[ -d "$target" ]]; then + cd "$target" + git pull $args + cd - + else + git clone $args $repo $target + fi +} + +git_clone_or_pull_shallow() { + git_clone_or_pull "$1" "$2" --depth=1 +} diff --git a/utils/pacman b/utils/pacman new file mode 100644 index 0000000..a9bd134 --- /dev/null +++ b/utils/pacman @@ -0,0 +1,5 @@ +#!/bin/bash + +pacman_sinstall() { + sudo pacman -S --noconfirm --needed $1 +} diff --git a/utils/which_silent b/utils/which_silent new file mode 100644 index 0000000..04122a7 --- /dev/null +++ b/utils/which_silent @@ -0,0 +1,5 @@ +#!/bin/bash + +which_silent() { + which $1 3>&2 >/dev/null +}