diff --git a/.gitignore b/.gitignore index f0c7ae4..a66ea59 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ repos/ +cacheDir/ diff --git a/cli/basic.sh b/cli/basic.sh index 73b81f3..67d3b02 100755 --- a/cli/basic.sh +++ b/cli/basic.sh @@ -30,3 +30,4 @@ case "$PM" in fi ;; esac + diff --git a/cli/fish.sh b/cli/fish.sh index 2575fdf..aab536b 100755 --- a/cli/fish.sh +++ b/cli/fish.sh @@ -6,8 +6,8 @@ DIR=$(dirname "$(readlink -f "$0")") log 'Setting up shell' -case "$PM" in - apt) +case "$UNAMEA" in + *Ubuntu*) if ! has_cmd fish; then sudo add-apt-repository ppa:fish-shell/release-3 -y -n pm_update @@ -24,8 +24,8 @@ case "$PM" in ./install --all exitrepo ;; - pacman) - sudo pacman -S --noconfirm --needed fish the_silver_searcher dash bat fzf + *artix*) + sudo pacman -S --noconfirm --needed fish dash fzf bat the_silver_searcher # prevent bash upgradation relink /bin/sh sudo mkdir -p /etc/pacman.d/hooks echo " @@ -98,9 +98,9 @@ set -U fish_pager_color_progress brwhite --background=cyan ' > /dev/null # only for local machine with gui -if [ -z "$SSH_CLIENT" ] && [ -n "$DISPLAY" ] && has_cmd dash; then +if [ -z "$SSH_CLIENT" ] && has_cmd dash; then log 'Setting up dash as default shell' - sudo /usr/bin/ln -sfT dash /usr/bin/sh + sudo /usr/bin/ln -sfT $(command -v dash) /usr/bin/sh if [ "$(awk -F':' '/^'"$USER"'/{print $7}' /etc/passwd)" != "/bin/sh" ]; then chsh -s /bin/sh diff --git a/cli/mirrors.sh b/cli/mirrors.sh index ed3ae56..052c09b 100755 --- a/cli/mirrors.sh +++ b/cli/mirrors.sh @@ -11,9 +11,36 @@ if ! in_china; then return fi + +pacman_china_mirror() { + MIRRORLIST=${1:-/etc/pacman.d/mirrorlist} + MIRRORLIST_BAK=$MIRRORLIST.bak + COUNTRY=${2:-China} + if [ ! -f "$MIRRORLIST_BAK" ]; then + sudo cp "$MIRRORLIST" "$MIRRORLIST_BAK" + fi + awk ' + { + if (NR < 7) { + print + } else if ($0 == "## '$COUNTRY'") { + print + matched = 1 + } else if (matched == 1) { + print + matched = 0 + } else { + buffer = buffer "\n" $0 + } + } + END { print buffer } + ' "$MIRRORLIST_BAK" | sudo tee "$MIRRORLIST" >/dev/null +} + + # setup package mirror for CHINA -case "$PM" in - apt) +case "$UNAMEA" in + *Ubuntu*) # backup original sources.list if [ ! -f /etc/apt/sources.list.bak ]; then sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak @@ -22,33 +49,22 @@ case "$PM" in awk '$0 ~ /^deb/ {$2="https://mirrors.aliyun.com/ubuntu/"; print}' /etc/apt/sources.list.bak \ | sudo tee /etc/apt/sources.list ;; - pacman) - COUNTRY=China - if [ ! -f /etc/pacman.d/mirrorlist.bak ]; then - sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak + *artix*) + # enable arch repo + sudo pacman -S --needed --noconfirm artix-archlinux-support + if ! grep -qF "mirrorlist-arch" /etc/pacman.conf; then + echo "# Arch" >> sudo tee -a /etc/pacman + echo "[extra]" >> sudo tee -a /etc/pacman + echo "Include = /etc/pacman.d/mirrorlist-arch" >> sudo tee -a /etc/pacman + echo "" >> sudo tee -a /etc/pacman + echo "[community]" >> sudo tee -a /etc/pacman + echo "Include = /etc/pacman.d/mirrorlist-arch" >> sudo tee -a /etc/pacman + echo "" >> sudo tee -a /etc/pacman + echo "[multilib]" >> sudo tee -a /etc/pacman + echo "Include = /etc/pacman.d/mirrorlist-arch" >> sudo tee -a /etc/pacman fi - awk ' - { - if (NR < 7) { - print - } else if ($0 == "## '$COUNTRY'") { - print - matched = 1 - } else if (matched == 1) { - print - matched = 0 - } else { - buffer = buffer "\n" $0 - } - } - END { print buffer } - ' /etc/pacman.d/mirrorlist.bak | sudo tee /etc/pacman.d/mirrorlist >/dev/null - ;; - xbps) - mkdir -p /etc/xbps.d - cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/ - sed -i 's|https://alpha.de.repo.voidlinux.org|https://mirrors.tuna.tsinghua.edu.cn/voidlinux|g' /etc/xbps.d/*-repository-*.conf ;; + pacman_china_mirror /etc/pacman.d/mirrorlist Asia + pacman_china_mirror /etc/pacman.d/mirrorlist-arch + sudo pacman -Sy esac - - diff --git a/cli/nnn.sh b/cli/nnn.sh index 38451da..cb8dffd 100755 --- a/cli/nnn.sh +++ b/cli/nnn.sh @@ -32,10 +32,6 @@ case "$PM" in sudo pacman -S --noconfirm --needed nnn cp -r /usr/share/nnn/plugins/. "$NNN_CONFIG_DIR" ;; - xbps) - sudo xbps-install -y nnn ueberzug dragon - download_nnn_plugins - ;; esac # configuration diff --git a/cli/vim.sh b/cli/vim.sh index 79452b0..b7b770a 100755 --- a/cli/vim.sh +++ b/cli/vim.sh @@ -7,48 +7,47 @@ DIR=$(dirname "$(readlink -f "$0")") log 'Setting up vim' # check dependencies -if [ "$VIM_MODE" = "enhanced" ]; then - if ! has_cmd node; then - "$PDIR/devel/nodejs.sh" - fi - if ! has_cmd python; then - "$PDIR/devel/python.sh" - fi -fi +#if [ "$VIM_MODE" = "enhanced" ]; then + #if ! has_cmd node; then + #"$PDIR/devel/nodejs.sh" + #fi + #if ! has_cmd python; then + #"$PDIR/devel/python.sh" + #fi +#fi # install vim export VIM=vim -if ! has_cmd "$VIM"; then - case "$PM" in - apt) - # nvim not very compatible with CJK characters and ranger - #sudo add-apt-repository ppa:neovim-ppa/stable -y - #sudo apt update - #sudo apt install -y neovim - #if enhance_vim; then - #sudo pip3 install pyvim neovim - #fi +case "$PM" in + apt) + # nvim not very compatible with CJK characters and ranger + #sudo add-apt-repository ppa:neovim-ppa/stable -y + #sudo apt update + #sudo apt install -y neovim + #if enhance_vim; then + #sudo pip3 install pyvim neovim + #fi - # gui-common is required for clipboard integration - sudo add-apt-repository ppa:jonathonf/vim -y -n - pm_update - sudo apt install -y vim vim-gui-common - if enhance_vim; then - sudo pip3 install pyvim - fi - ;; - pacman) - #sudo pacman -S --noconfirm --needed neovim - #if enhance_vim; then - #sudo pip install pyvim neovim - #fi - sudo pacman -S --noconfirm --needed vim - if enhance_vim; then - sudo pip install pyvim - fi - ;; - esac -fi + # gui-common is required for clipboard integration + sudo add-apt-repository ppa:jonathonf/vim -y -n + pm_update + sudo apt install -y vim vim-gui-common + if enhance_vim; then + sudo pip3 install pyvim + fi + ;; + pacman) + #sudo pacman -S --noconfirm --needed neovim + #if enhance_vim; then + #sudo pip install pyvim neovim + #fi + sudo pacman -S --noconfirm --needed nodejs npm yarn vim + if enhance_vim; then + $PDIR/devel/nodejs.sh config + sudo pip install pyvim + fi + ;; +esac # symlink configuration #sudo ln -sf "$(command -v vim)" /usr/bin/v diff --git a/gui/alacritty/alacritty.yml b/gui/alacritty/alacritty.yml new file mode 100644 index 0000000..327bb31 --- /dev/null +++ b/gui/alacritty/alacritty.yml @@ -0,0 +1,878 @@ +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# Import additional configuration files +# +# Imports are loaded in order, skipping all missing files, with the importing +# file being loaded last. If a field is already present in a previous import, it +# will be replaced. +# +# All imports must either be absolute paths starting with `/`, or paths relative +# to the user's home directory starting with `~/`. +#import: +# - /path/to/alacritty.yml + +# Any items in the `env` entry below will be added as +# environment variables. Some entries may override variables +# set by alacritty itself. +#env: + # TERM variable + # + # This value is used to set the `$TERM` environment variable for + # each instance of Alacritty. If it is not present, alacritty will + # check the local terminfo database and use `alacritty` if it is + # available, otherwise `xterm-256color` is used. + #TERM: alacritty + +window: + # Window dimensions (changes require restart) + # + # Number of lines/columns (not pixels) in the terminal. The number of columns + # must be at least `2`, while using a value of `0` for columns and lines will + # fall back to the window manager's recommended size. + #dimensions: + # columns: 0 + # lines: 0 + + # Window position (changes require restart) + # + # Specified in number of pixels. + # If the position is not set, the window manager will handle the placement. + #position: + # x: 0 + # y: 0 + + # Window padding (changes require restart) + # + # Blank space added around the window in pixels. This padding is scaled + # by DPI and the specified value is always added at both opposing sides. + #padding: + # x: 0 + # y: 0 + + # Spread additional padding evenly around the terminal content. + #dynamic_padding: false + + # Window decorations + # + # Values for `decorations`: + # - full: Borders and title bar + # - none: Neither borders nor title bar + # + # Values for `decorations` (macOS only): + # - transparent: Title bar, transparent background and title bar buttons + # - buttonless: Title bar, transparent background and no title bar buttons + #decorations: full + + # 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. + opacity: 0.8 + + # 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: 13.0 + + # Offset is the extra space around each character. `offset.y` can be thought + # of as modifying the line spacing, and `offset.x` as modifying the letter + # spacing. + #offset: + # x: 0 + # y: 0 + + # Glyph offset determines the locations of the glyphs within their cells with + # the default being at the bottom. Increasing `x` moves the glyph to the + # right, increasing `y` moves the glyph 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 + + # Use built-in font for box drawing characters. + # + # If `true`, Alacritty will use a custom built-in font for box drawing + # characters (Unicode points 2500 - 259f). + # + #builtin_box_drawing: 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/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/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #vi_mode_cursor: + # text: CellBackground + # cursor: CellForeground + + # Search colors + # + # Colors used for the search bar and match highlighting. + #search: + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #matches: + # foreground: '#000000' + # background: '#ffffff' + #focused_match: + # foreground: '#ffffff' + # background: '#000000' + + #bar: + # background: '#c5c8c6' + # foreground: '#1d1f21' + + # Keyboard regex hints + #hints: + # First character in the hint label + # + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #start: + # foreground: '#1d1f21' + # background: '#e9ff5e' + + # All characters after the first one in the hint label + # + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #end: + # foreground: '#e9ff5e' + # background: '#1d1f21' + + # Line indicator + # + # Color used for the indicator displaying the position in history during + # search and vi mode. + # + # By default, these will use the opposing primary color. + #line_indicator: + # foreground: None + # background: None + + # Selection colors + # + # Colors which should be used to draw the selection area. + # + # Allowed values are CellForeground/CellBackground, which reference the + # affected cell, or hexadecimal colors like #ff00ff. + #selection: + # text: CellBackground + # background: CellForeground + + # Normal colors + #normal: + # black: '#1d1f21' + # red: '#cc6666' + # green: '#b5bd68' + # yellow: '#f0c674' + # blue: '#81a2be' + # magenta: '#b294bb' + # cyan: '#8abeb7' + # white: '#c5c8c6' + + # Bright colors + #bright: + # black: '#666666' + # red: '#d54e53' + # green: '#b9ca4a' + # yellow: '#e7c547' + # blue: '#7aa6da' + # magenta: '#c397d8' + # cyan: '#70c0b1' + # white: '#eaeaea' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + #dim: + # black: '#131415' + # red: '#864343' + # green: '#777c44' + # yellow: '#9e824c' + # blue: '#556a7d' + # magenta: '#75617b' + # cyan: '#5b7d78' + # white: '#828482' + + # Indexed Colors + # + # The indexed colors include all colors from 16 to 256. + # When these are not set, they're filled with sensible defaults. + # + # Example: + # `- { index: 16, color: '#ff00ff' }` + # + #indexed_colors: [] + + # Transparent cell backgrounds + # + # Whether or not `window.opacity` applies to all cell backgrounds or only to + # the default background. When set to `true` all cells will be transparent + # regardless of their background color. + #transparent_background_colors: false + +# 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 + +#selection: + # This string contains all characters that are used as separators for + # "semantic words" in Alacritty. + #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" + + # When set to `true`, selected text will be copied to the primary clipboard. + #save_to_clipboard: false + +#cursor: + # Cursor style + #style: + # Cursor shape + # + # Values for `shape`: + # - ▇ Block + # - _ Underline + # - | Beam + #shape: Block + + # Cursor blinking state + # + # Values for `blinking`: + # - Never: Prevent the cursor from ever blinking + # - Off: Disable blinking by default + # - On: Enable blinking by default + # - Always: Force the cursor to always blink + #blinking: Off + + # Vi mode cursor style + # + # If the vi mode cursor style is `None` or not specified, it will fall back to + # the style of the active value of the normal cursor. + # + # See `cursor.style` for available options. + #vi_mode_style: None + + # Cursor blinking interval in milliseconds. + #blink_interval: 750 + + # If this is `true`, the cursor will be rendered as a hollow box when the + # window is not focused. + #unfocused_hollow: true + + # Thickness of the cursor relative to the cell width as floating point number + # from `0.0` to `1.0`. + #thickness: 0.15 + +# Live config reload (changes require restart) +#live_config_reload: true + +# Shell +# +# You can set `shell.program` to the path of your favorite shell, e.g. +# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the +# shell. +# +# Default: +# - (macOS) /bin/bash --login +# - (Linux/BSD) user login shell +# - (Windows) powershell +#shell: +# program: /bin/bash +# args: +# - --login + +# Startup directory +# +# Directory the shell is started in. If this is unset, or `None`, the working +# directory of the parent process will be used. +#working_directory: None + +# Send ESC (\x1b) before characters when alt is pressed. +#alt_send_esc: true + +# Offer IPC using `alacritty msg` (unix only) +#ipc_socket: 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 + +# Regex hints +# +# Terminal hints can be used to find text in the visible part of the terminal +# and pipe it to other applications. +#hints: + # Keys used for the hint labels. + #alphabet: "jfkdls;ahgurieowpq" + + # List with all available hints + # + # Each hint must have a `regex` and either an `action` or a `command` field. + # The fields `mouse`, `binding` and `post_processing` are optional. + # + # The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and + # `mouse.mods` accept the same values as they do in the `key_bindings` section. + # + # The `mouse.enabled` field controls if the hint should be underlined while + # the mouse with all `mouse.mods` keys held or the vi mode cursor is above it. + # + # If the `post_processing` field is set to `true`, heuristics will be used to + # shorten the match if there are characters likely not to be part of the hint + # (e.g. a trailing `.`). This is most useful for URIs. + # + # Values for `action`: + # - Copy + # Copy the hint's text to the clipboard. + # - Paste + # Paste the hint's text to the terminal or search. + # - Select + # Select the hint's text. + # - MoveViModeCursor + # Move the vi mode cursor to the beginning of the hint. + #enabled: + # - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\ + # [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" + # command: xdg-open + # post_processing: true + # mouse: + # enabled: true + # mods: None + # binding: + # key: U + # mods: Control|Shift + +# 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 for actions not exclusive to mouse mode) +# +# - Mouse exclusive actions: +# +# - ExpandSelection +# Expand the selection to the current mouse cursor location. +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Right, action: ExpandSelection } +# - { mouse: Right, mods: Control, action: ExpandSelection } +# - { mouse: Middle, mode: ~Vi, 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. +# - CreateNewWindow +# Create a new Alacritty window from the current process. +# - ClearLogNotice +# Clear Alacritty's UI warning and error notice. +# - ClearSelection +# Remove the active selection. +# - ReceiveChar +# - None +# +# - Vi mode exclusive actions: +# +# - Open +# Perform the action of the first matching hint under the vi mode cursor +# with `mouse.enabled` set to `true`. +# - ToggleNormalSelection +# - ToggleLineSelection +# - ToggleBlockSelection +# - ToggleSemanticSelection +# Toggle semantic selection based on `selection.semantic_escape_chars`. +# +# - Vi mode exclusive cursor motion actions: +# +# - Up +# One line up. +# - Down +# One line down. +# - Left +# One character left. +# - Right +# One character right. +# - First +# First column, or beginning of the line when already at the first column. +# - Last +# Last column, or beginning of the line when already at the last column. +# - FirstOccupied +# First non-empty cell in this terminal row, or first non-empty cell of +# the line when already at the first cell of the row. +# - High +# Top of the screen. +# - Middle +# Center of the screen. +# - Low +# Bottom of the screen. +# - SemanticLeft +# Start of the previous semantically separated word. +# - SemanticRight +# Start of the next semantically separated word. +# - SemanticLeftEnd +# End of the previous semantically separated word. +# - SemanticRightEnd +# End of the next semantically separated word. +# - WordLeft +# Start of the previous whitespace separated word. +# - WordRight +# Start of the next whitespace separated word. +# - WordLeftEnd +# End of the previous whitespace separated word. +# - WordRightEnd +# End of the next whitespace separated word. +# - Bracket +# Character matching the bracket at the cursor's location. +# - SearchNext +# Beginning of the next match. +# - SearchPrevious +# Beginning of the previous match. +# - SearchStart +# Start of the match to the left of the vi mode cursor. +# - SearchEnd +# End of the match to the right of the vi mode cursor. +# +# - Search mode exclusive actions: +# - SearchFocusNext +# Move the focus to the next search match. +# - SearchFocusPrevious +# Move the focus to the previous search match. +# - SearchConfirm +# - SearchCancel +# - SearchClear +# Reset the search regex. +# - SearchDeleteWord +# Delete the last word in the search regex. +# - SearchHistoryPrevious +# Go to the previous regex in the search history. +# - SearchHistoryNext +# Go to the next regex in the search history. +# +# - macOS exclusive actions: +# - ToggleSimpleFullscreen +# Enter fullscreen without occupying another space. +# +# - Linux/BSD exclusive actions: +# +# - CopySelection +# Copy from the selection buffer. +# - PasteSelection +# Paste from the selection buffer. +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - Search +# - Alt +# - Vi +# +# A `~` operator can be used before a mode to apply the binding whenever +# the mode is *not* active, e.g. `~Alt`. +# +# Bindings are always filled by default, but will be replaced when a new +# binding with the same triggers is defined. To unset a default binding, it can +# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for +# a no-op if you do not wish to receive input characters for that binding. +# +# If the same trigger is assigned to multiple actions, all of them are executed +# in the order they were defined in. +#key_bindings: + #- { key: Paste, action: Paste } + #- { key: Copy, action: Copy } + #- { key: L, mods: Control, action: ClearLogNotice } + #- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } + #- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, } + #- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } + #- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, } + #- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } + + # Vi Mode + #- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } + #- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } + #- { key: Escape, mode: Vi|~Search, action: ClearSelection } + #- { key: I, mode: Vi|~Search, action: ToggleViMode } + #- { key: I, mode: Vi|~Search, action: ScrollToBottom } + #- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode } + #- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp } + #- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown } + #- { key: G, mode: Vi|~Search, action: ScrollToTop } + #- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom } + #- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp } + #- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown } + #- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp } + #- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown } + #- { key: Y, mode: Vi|~Search, action: Copy } + #- { key: Y, mode: Vi|~Search, action: ClearSelection } + #- { key: Copy, mode: Vi|~Search, action: ClearSelection } + #- { key: V, mode: Vi|~Search, action: ToggleNormalSelection } + #- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection } + #- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection } + #- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection } + #- { key: Return, mode: Vi|~Search, action: Open } + #- { key: K, mode: Vi|~Search, action: Up } + #- { key: J, mode: Vi|~Search, action: Down } + #- { key: H, mode: Vi|~Search, action: Left } + #- { key: L, mode: Vi|~Search, action: Right } + #- { key: Up, mode: Vi|~Search, action: Up } + #- { key: Down, mode: Vi|~Search, action: Down } + #- { key: Left, mode: Vi|~Search, action: Left } + #- { key: Right, mode: Vi|~Search, action: Right } + #- { key: Key0, mode: Vi|~Search, action: First } + #- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last } + #- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied } + #- { key: H, mods: Shift, mode: Vi|~Search, action: High } + #- { key: M, mods: Shift, mode: Vi|~Search, action: Middle } + #- { key: L, mods: Shift, mode: Vi|~Search, action: Low } + #- { key: B, mode: Vi|~Search, action: SemanticLeft } + #- { key: W, mode: Vi|~Search, action: SemanticRight } + #- { key: E, mode: Vi|~Search, action: SemanticRightEnd } + #- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft } + #- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight } + #- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd } + #- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket } + #- { key: Slash, mode: Vi|~Search, action: SearchForward } + #- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward } + #- { key: N, mode: Vi|~Search, action: SearchNext } + #- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious } + + # Search Mode + #- { key: Return, mode: Search|Vi, action: SearchConfirm } + #- { key: Escape, mode: Search, action: SearchCancel } + #- { key: C, mods: Control, mode: Search, action: SearchCancel } + #- { key: U, mods: Control, mode: Search, action: SearchClear } + #- { key: W, mods: Control, mode: Search, action: SearchDeleteWord } + #- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious } + #- { key: N, mods: Control, mode: Search, action: SearchHistoryNext } + #- { key: Up, mode: Search, action: SearchHistoryPrevious } + #- { key: Down, mode: Search, action: SearchHistoryNext } + #- { key: Return, mode: Search|~Vi, action: SearchFocusNext } + #- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } + + # (Windows, Linux, and BSD only) + #- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } + #- { key: C, mods: Control|Shift, action: Copy } + #- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } + #- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } + #- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } + #- { key: Insert, mods: Shift, action: PasteSelection } + #- { key: Key0, mods: Control, action: ResetFontSize } + #- { key: Equals, mods: Control, action: IncreaseFontSize } + #- { key: Plus, mods: Control, action: IncreaseFontSize } + #- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } + #- { key: Minus, mods: Control, action: DecreaseFontSize } + #- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } + + # (Windows only) + #- { key: Return, mods: Alt, action: ToggleFullscreen } + + # (macOS only) + #- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } + #- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory } + #- { key: Key0, mods: Command, action: ResetFontSize } + #- { key: Equals, mods: Command, action: IncreaseFontSize } + #- { key: Plus, mods: Command, action: IncreaseFontSize } + #- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } + #- { key: Minus, mods: Command, action: DecreaseFontSize } + #- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } + #- { key: V, mods: Command, action: Paste } + #- { key: C, mods: Command, action: Copy } + #- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection } + #- { key: H, mods: Command, action: Hide } + #- { key: H, mods: Command|Alt, action: HideOtherApplications } + #- { key: M, mods: Command, action: Minimize } + #- { key: Q, mods: Command, action: Quit } + #- { key: W, mods: Command, action: Quit } + #- { key: N, mods: Command, action: SpawnNewInstance } + #- { key: F, mods: Command|Control, action: ToggleFullscreen } + #- { key: F, mods: Command, mode: ~Search, action: SearchForward } + #- { key: B, mods: Command, mode: ~Search, action: SearchBackward } + +#debug: + # Display the time it takes to redraw each frame. + #render_timer: false + + # Keep the log file after quitting Alacritty. + #persistent_logging: false + + # Log level + # + # Values for `log_level`: + # - Off + # - Error + # - Warn + # - Info + # - Debug + # - Trace + #log_level: Warn + + # Print all received window events. + #print_events: false diff --git a/gui/autologin.sh b/gui/autologin.sh index f96b41a..dc6dc63 100755 --- a/gui/autologin.sh +++ b/gui/autologin.sh @@ -11,9 +11,16 @@ if [ -z "$LOGIN" ]; then return fi -sudo mkdir -p /etc/systemd/system/getty@tty1.service.d -echo " -[Service] -ExecStart= -ExecStart=-/sbin/agetty --autologin $LOGIN --noclear %I \$TERM -" | sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf > /dev/null +case "$UNAMEA" in + *Ubuntu*) + sudo mkdir -p /etc/systemd/system/getty@tty1.service.d + echo " + [Service] + ExecStart= + ExecStart=-/sbin/agetty --autologin $LOGIN --noclear %I \$TERM + " | sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf > /dev/null + ;; + *artix*) + sudo sed -i 's/"--noclear"/"--noclear --autologin '$LOGIN'"' + ;; +esace diff --git a/gui/awesome.sh b/gui/awesome.sh index ed6d23b..82c973e 100755 --- a/gui/awesome.sh +++ b/gui/awesome.sh @@ -4,33 +4,36 @@ DIR=$(dirname "$(readlink -f "$0")") log 'Setting up awesome' -case "$PM" in - apt) - ;; - pacman) - ;; - xbps) - sudo xbps-install -y awesome +case "$UNAMER" in + *artix*) + sudo pacman -S --noconfirm --needed awesome rofi ;; esac # necessary tools -$DIR/dmenu.sh -$DIR/slock.sh +#$DIR/dmenu.sh +#$DIR/slock.sh $DRI/dict.sh # install widgets -HTTPS_PROXY=$GITHUB_PROXY git clone https://github.com/klesh/awesome-wm-widgets.git "$XDG_CONFIG_HOME/awesome/awesome-wm-widgets" +if [ ! -d "$XDG_CONFIG_HOME/awesome/awesome-wm-widgets" ]; then + echo cloning awesome widget + git clone https://gitee.com/klesh/awesome-wm-widgets.git "$XDG_CONFIG_HOME/awesome/awesome-wm-widgets" +fi # ~/.xinitrc cat <<'EOT' > ~/.xinitrc +export BOOKMARK_SEARCHER="rofi -dmenu" +export D_SELECTOR="rofi -dmenu" + +export QT_QPA_PLATFORMTHEME="qt5ct" +export GTK2_RC_FILES="$HOME/.gtkrc-2.0" + export XMODIFIERS="@im=ibus" export QT_IM_MODULE=ibus export GTK_IM_MODULE=xim export VIM_MODE=enhanced -export DMENU_DEFAULT_OPTS='-i -c -fn monospace:13 -nb #222222 -nf #bbbbbb -sb #5b97f7 -sf #eeeeee -l 20' -export TMUX_SHELL=/usr/bin/fish export XDG_RUNTIME_DIR=/tmp/runtime-klesh mkdir -p $XDG_RUNTIME_DIR @@ -40,7 +43,10 @@ EOT # ~/.profile cat <<'EOT' | sed "s|__PDIR__|$PDIR|g" > ~/.profile -export WINIP=localhost +export PROXY_HOST=localhost +export PROXY_PORT=4780 +export PROXY_PROTO=http +export TMUX_SHELL=/usr/bin/fish export PATH=~/dotfiles/bin:~/.local/bin:$PATH # startx Automatically @@ -52,3 +58,5 @@ EOT # configuration lnsf "$DIR/awesome/rc.lua" "$XDG_CONFIG_HOME/awesome/rc.lua" +lnsf "$DIR/rofi/config.rasi" "$XDG_CONFIG_HOME/rofi/config.rasi" +lnsf "$DIR/rofi/catppuccin.rasi" "$XDG_CONFIG_HOME/rofi/catppuccin.rasi" diff --git a/gui/awesome/rc.lua b/gui/awesome/rc.lua index d082e45..183b802 100644 --- a/gui/awesome/rc.lua +++ b/gui/awesome/rc.lua @@ -20,10 +20,13 @@ local cpu_widget = require("awesome-wm-widgets.cpu-widget.cpu-widget") local calendar_widget = require("awesome-wm-widgets.calendar-widget.calendar") local logout_menu_widget = require("awesome-wm-widgets.logout-menu-widget.logout-menu") local mpdarc_widget = require("awesome-wm-widgets.mpdarc-widget.mpdarc") +local batteryarc_widget = require("awesome-wm-widgets.batteryarc-widget.batteryarc") -awful.spawn.with_shell("pipewire") -awful.spawn.with_shell("pipewire-pulse") ---pipewire-media-session & +awful.spawn.once("pipewire") +awful.spawn.once("pipewire-pulse") +awful.spawn.with_shell("killall pipewire-media-session; sleep 2 && pipewire-media-session") +--awful.spawn("wireplumber") +-- & -- Enable hotkeys help widget for VIM and other apps -- when client with a matching name is opened: @@ -66,7 +69,7 @@ beautiful.useless_gap = 5 beautiful.border_width = 3 beautiful.border_focus = "#5b97f7" beautiful.font_name = "agave Nerd Font Mono" -beautiful.wallpaper = "/home/klesh/Nextcloud/wallpapers/仙湖植物园3440x1440.jpg" +beautiful.wallpaper = "/home/klesh/Nextcloud/wallpapers/great-pretender.jpg" beautiful.font = "agave Nerd Font 12" beautiful.notification_width = 400 beautiful.notification_shape = rrect @@ -330,6 +333,7 @@ awful.screen.connect_for_each_screen(function(s) step_spacing = 0, color = '#434c5e' }), + batteryarc_widget(), wibox.widget.systray(), mytextclock, logout_menu_widget{ @@ -394,6 +398,10 @@ globalkeys = gears.table.join( { description = 'toggle play', group = 'hotkeys'} ), awful.key({}, 'XF86AudioPrev', function() awful.spawn.with_shell("mpc prev") end, { description = 'toggle play', group = 'hotkeys'} ), + awful.key({}, 'XF86MonBrightnessUp', function() awful.spawn.with_shell("sudo light -A 5") end, + { description = 'increase backlight', group = 'control'} ), + awful.key({}, 'XF86MonBrightnessDown', function() awful.spawn.with_shell("sudo light -U 5") end, + { description = 'decrease backlight', group = 'control'} ), awful.key({}, 'F1', function () awful.spawn.with_shell("flameshot gui") end, { description = 'toggle mute', group = 'hotkeys'} ), --awful.key({ modkey, }, "s", hotkeys_popup.show_help, @@ -506,14 +514,13 @@ globalkeys = gears.table.join( end, {description = "lua execute prompt", group = "awesome"}), -- Launcher - awful.key({ modkey }, "p", function() awful.spawn.with_shell("dmenu_launcher") end, - {description = "dmenu launcher", group = "launcher"}), - -- Window switcher - awful.key({ modkey }, "w", function() awful.spawn.with_shell("rofi -show window") end, - {description = "window switcher", group = "launcher"}), + --awful.key({ modkey }, "p", function() awful.spawn.with_shell("dmenu_launcher") end, + -- {description = "dmenu launcher", group = "launcher"}), + awful.key({ modkey }, "p", function() awful.spawn.with_shell("rofi -show combi") end, + {description = "rofi", group = "launcher"}), -- Bookmark - awful.key({ modkey }, "b", function() awful.spawn.with_shell('BOOKMARK_SEARCHER="dmenu $DMENU_DEFAULT_OPTS" bm') end, + awful.key({ modkey }, "b", function() awful.spawn.with_shell('bm') end, {description = "bookmark", group = "launcher"}), -- Dict.sh @@ -829,5 +836,7 @@ awful.spawn.with_shell("! /bin/pgrep nextcloud && nextcloud") awful.spawn.with_shell("ibus-daemon -drx") awful.spawn.with_shell("flameshot") awful.spawn.with_shell("mpd") +awful.spawn.with_shell("blueman-applet") +awful.spawn.with_shell("nm-applet") -- }}} diff --git a/gui/basic.sh b/gui/basic.sh index 66fca71..c4122ba 100755 --- a/gui/basic.sh +++ b/gui/basic.sh @@ -79,11 +79,11 @@ case "$UNAMEA" in if is_laptop; then sudo pacman -S --noconfirm --needed \ acpi acpilight python-pip - yay -S auto-cpufreq-git + yay -S --needed --noconfirm auto-cpufreq-git sudo mkdir -p /etc/runit/sv/auto-cpufreq - sudo cp ./auto-cpufreq/auto-cpufreq-runit /etc/runit/sv/auto-cpufreq/run + sudo cp $DIR/auto-cpufreq/auto-cpufreq-runit /etc/runit/sv/auto-cpufreq/run sudo chmod +x /etc/runit/sv/auto-cpufreq/run - sudo ln -s /etc/runit/sv/auto-cpufreq/ /run/runit/service/ + sudo ln -sf /etc/runit/sv/auto-cpufreq/ /run/runit/service/ fi ;; esac diff --git a/gui/font.sh b/gui/font.sh index ac3c588..cf82430 100755 --- a/gui/font.sh +++ b/gui/font.sh @@ -17,8 +17,8 @@ install_wqy_microhei() { ar p "/tmp/$DEB_PKG_NAME" data.tar.xz | sudo tar Jxv -C / } -case "$PM" in - apt) +case "$UNAMEA" in + *Ubuntu*) # fonts sudo apt install -y \ fonts-urw-base35 \ @@ -28,27 +28,11 @@ case "$PM" in fonts-dejavu-core \ gucharmap ;; - pacman) - # fonts + *artix*) sudo pacman -S --noconfirm --needed \ - freetype2 \ - gsfonts \ - ttf-cascadia-code \ - ttf-dejavu \ - noto-fonts-emoji \ - gucharmap - install_wqy_microhei - # install symbola for plain emojis(no-color) for st - if ! fc-list | grep -qi symbola; then - yay -S --noconfirm --needed ttf-symbola-free - fi - ;; - xbps) - sudo xbps-install noto-fonts-emoji - install_wqy_microhei + noto-fonts noto-fonts-cjk noto-fonts-emoji esac - # install hermit nerd font install_nerdfont () { grep -F "$*" /usr/local/share/fonts/nerdfont && return @@ -60,6 +44,7 @@ install_nerdfont () { # shortcircuit if font already in system fc-list | grep -F "$PATCHED_PAT" | grep -i nerd && return # clone single branch from gitee + rm -rf "$LOCAL_REPO_PATH" git clone --single-branch --branch "$ORIGIN_NAME" --depth 1 \ https://gitee.com/klesh/nerd-fonts.git \ "$LOCAL_REPO_PATH" @@ -69,7 +54,7 @@ install_nerdfont () { rm -rf "$LOCAL_REPO_PATH" } -#install_nerdfont Agave agave v2.1.0 +install_nerdfont Agave agave v2.1.0 #install_nerdfont Hermit Hurmit v2.1.0 #install_nerdfont CascadiaCode Caskaydia v2.1.0 #install_nerdfont DaddyTimeMono DaddyTimeMono v2.1.0 @@ -79,3 +64,20 @@ install_nerdfont () { #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 #sudo cp "$DIR/font/freetype2.sh" "/etc/profile.d/freetype2.sh" + + +install_googlefont() { + NAME=$1 + PATT=$2 + FONTS=~/.local/share/fonts + mkdir "$FONTS" + wget -O "/tmp/$NAME.zip" "$URL" + unzip -d "$FONTS" "/tmp/$NAME.zip" "$PATT" + rm "/tmp/$NAME.zip" +} + +install_googlefont lato "https://fonts.google.com/download?family=Lato" +install_googlefont besley "https://fonts.google.com/download?family=Besley" "static/*" + +# configuration +lnsf "$DIR/font/fonts.conf" "$XDG_CONFIG_HOME/fontconfig/fonts.conf" diff --git a/gui/font/fonts.conf b/gui/font/fonts.conf index 432c6d4..92de252 100644 --- a/gui/font/fonts.conf +++ b/gui/font/fonts.conf @@ -34,17 +34,17 @@ Helvetica - - - Lato - - - - - arial - - - Lato - - - + + + Lato + + + + + arial + + + Lato + + + diff --git a/gui/pass.sh b/gui/pass.sh index 0d0acb7..c68b448 100755 --- a/gui/pass.sh +++ b/gui/pass.sh @@ -29,7 +29,7 @@ case "$PM" in pacman) sudo pacman -S --noconfirm --needed \ go \ - browserpass pinentry-qt + browserpass pass pinentry PINENTRY=$(command -v pinentry-qt) ;; xbps) @@ -64,7 +64,7 @@ fi # chrome extension: https://chrome.google.com/webstore/detail/browserpass/naepdomgkenhinolocfifgehidddafch # enable browserpass for browsers -if [ -f /usr/lib/browserpass ]; then +if [ -d /usr/lib/browserpass ]; then cd /usr/lib/browserpass has_cmd chromium && make hosts-chromium-user has_cmd firefox && make hosts-firefox-user diff --git a/gui/picom.sh b/gui/picom.sh index ac555ec..db0ff03 100755 --- a/gui/picom.sh +++ b/gui/picom.sh @@ -19,7 +19,8 @@ case "$PM" in sudo apt install -y ninja-build libxext-dev libxcb1-dev libxcb-damage0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-render-util0-dev libxcb-render0-dev libxcb-randr0-dev libxcb-composite0-dev libxcb-image0-dev libxcb-present-dev libxcb-xinerama0-dev libxcb-glx0-dev libpixman-1-dev libdbus-1-dev libconfig-dev libgl1-mesa-dev libpcre3-dev libevdev-dev uthash-dev libev-dev libx11-xcb-dev ;; pacman) - sudo pacman -S --noconfirm --needed uthash ninja meson libev libconfig + #sudo pacman -S --noconfirm --needed uthash ninja meson libev libconfig picom + sudo pacman -S --noconfirm --needed picom ;; xbps) sudo xbps-install -y uthash ninja meson libev libev-devel libconfig \ @@ -28,16 +29,20 @@ case "$PM" in ;; esac -# build and install picom -#intorepo https://github.com/klesh/picom.git "$DIR/repos/picom" -intorepo https://github.com/yshui/picom.git "$DIR/repos/picom" -#intorepo https://github.com/ibhagwan/picom.git "$DIR/repos/picom" -meson --buildtype=release . build -sudo ninja -C build install -exitrepo sudo cp -f "$DIR/picom/picomdaemon" "$PREFIX/bin" -sudo chmod +x "$PREFIX/bin/picomdaemon" -echo 'picom installed' + +# build and install picom +picom_from_src() { + #intorepo https://github.com/klesh/picom.git "$DIR/repos/picom" + intorepo https://github.com/yshui/picom.git "$DIR/repos/picom" + #intorepo https://github.com/ibhagwan/picom.git "$DIR/repos/picom" + meson --buildtype=release . build + sudo ninja -C build install + exitrepo + sudo cp -f "$DIR/picom/picomdaemon" "$PREFIX/bin" + sudo chmod +x "$PREFIX/bin/picomdaemon" + echo 'picom installed' +} # configuration lnsf "$DIR/picom/picom.conf" "$XDG_CONFIG_HOME/picom/picom.conf" diff --git a/gui/pipewire/media-session.d/bluez-monitor.conf b/gui/pipewire/media-session.d/bluez-monitor.conf new file mode 100644 index 0000000..adcb6fc --- /dev/null +++ b/gui/pipewire/media-session.d/bluez-monitor.conf @@ -0,0 +1,130 @@ +# Bluez monitor config file for PipeWire version "0.3.33" # +# +# Copy and edit this file in /etc/pipewire/media-session.d/ +# for systemwide changes or in +# ~/.config/pipewire/media-session.d/ for local changes. + +properties = { + # These features do not work on all headsets, so they are enabled + # by default based on the hardware database. They can also be + # forced on/off for all devices by the following options: + + #bluez5.enable-sbc-xq = true + #bluez5.enable-msbc = true + #bluez5.enable-hw-volume = true + + # See bluez-hardware.conf for the hardware database. + + # Enabled headset roles (default: [ hsp_hs hfp_ag ]), this + # property only applies to native backend. Currently some headsets + # (Sony WH-1000XM3) are not working with both hsp_ag and hfp_ag + # enabled, disable either hsp_ag or hfp_ag to work around it. + # + # Supported headset roles: hsp_hs (HSP Headset), + # hsp_ag (HSP Audio Gateway), + # hfp_hf (HFP Hands-Free), + # hfp_ag (HFP Audio Gateway) + #bluez5.headset-roles = [ hsp_hs hsp_ag hfp_hf hfp_ag ] + + # Enabled A2DP codecs (default: all). + #bluez5.codecs = [ sbc aac ldac aptx aptx_hd ] + + # Properties for the A2DP codec configuration + #bluez5.default.rate = 48000 + #bluez5.default.channels = 2 +} + +rules = [ + # An array of matches/actions to evaluate. + { + # Rules for matching a device or node. It is an array of + # properties that all need to match the regexp. If any of the + # matches work, the actions are executed for the object. + matches = [ + { + # This matches all cards. + device.name = "~bluez_card.*" + } + ] + actions = { + # Actions can update properties on the matched object. + update-props = { + + # Auto-connect device profiles on start up or when only partial + # profiles have connected. Disabled by default if the property + # is not specified. + #bluez5.auto-connect = [ + # hfp_hf + # hsp_hs + # a2dp_sink + # hfp_ag + # hsp_ag + # a2dp_source + #] + bluez5.auto-connect = [ hfp_hf hsp_hs a2dp_sink ] + + # Hardware volume control (default: all) + #bluez5.hw-volume = [ + # hfp_hf + # hsp_hs + # a2dp_sink + # hfp_ag + # hsp_ag + # a2dp_source + #] + + # LDAC encoding quality + # Available values: auto (Adaptive Bitrate, default) + # hq (High Quality, 990/909kbps) + # sq (Standard Quality, 660/606kbps) + # mq (Mobile use Quality, 330/303kbps) + #bluez5.a2dp.ldac.quality = auto + + # AAC variable bitrate mode + # Available values: 0 (cbr, default), 1-5 (quality level) + #bluez5.a2dp.aac.bitratemode = 0 + + # Profile connected first + # Available values: a2dp-sink (default), headset-head-unit + #device.profile = a2dp-sink + + # A2DP HFP profile auto-switching (when device is default output) + # Available values: false, role (default), true + # 'role' will switch the profile if the recording application + # specifies Communication (or "phone" in PA) as the stream role. + bluez5.autoswitch-profile = true + } + } + } + { + matches = [ + { + # Matches all sources. + node.name = "~bluez_input.*" + } + { + # Matches all sinks. + node.name = "~bluez_output.*" + } + ] + actions = { + update-props = { + #node.nick = "My Node" + #node.nick = null + #priority.driver = 100 + #priority.session = 100 + node.pause-on-idle = false + #resample.quality = 4 + #channelmix.normalize = false + #channelmix.mix-lfe = false + #session.suspend-timeout-seconds = 5 # 0 disables suspend + #monitor.channel-volumes = false + + # A2DP source role, "input" or "playback" + # Defaults to "playback", playing stream to speakers + # Set to "input" to use as an input for apps + #bluez5.a2dp-source-role = input + } + } + } +] diff --git a/gui/rofi/catppuccin.rasi b/gui/rofi/catppuccin.rasi new file mode 100644 index 0000000..a996149 --- /dev/null +++ b/gui/rofi/catppuccin.rasi @@ -0,0 +1,12 @@ +* { + bg-col: #1E1D2F; + bg-col-light: #1E1D2F; + border-col: #1E1D2F; + selected-col: #1E1D2F; + blue: #7aa2f7; + fg-col: #D9E0EE; + fg-col2: #F28FAD; + grey: #D9E0EE; + width: 600; +} + diff --git a/gui/rofi/config.rasi b/gui/rofi/config.rasi new file mode 100644 index 0000000..13f1c6b --- /dev/null +++ b/gui/rofi/config.rasi @@ -0,0 +1,102 @@ +configuration{ + modi: "run,drun,window"; + lines: 5; + font: "JetBrainsMono Nerd Font 14"; + show-icons: true; + icon-theme: "Oranchelo"; + terminal: "st"; + drun-display-format: "{icon} {name}"; + location: 0; + disable-history: false; + hide-scrollbar: true; + display-drun: "  Apps "; + display-run: "  Run "; + display-window: " 﩯 window"; + display-Network: " 󰤨 Network"; + sidebar-mode: true; +} + +@theme "catppuccin" + +element-text, element-icon , mode-switcher { + background-color: inherit; + text-color: inherit; +} + +window { + height: 360px; + border: 3px; + border-color: @border-col; + background-color: @bg-col; +} + +mainbox { + background-color: @bg-col; +} + +inputbar { + children: [prompt,entry]; + background-color: @bg-col; + border-radius: 5px; + padding: 2px; +} + +prompt { + background-color: @blue; + padding: 6px; + text-color: @bg-col; + border-radius: 3px; + margin: 20px 0px 0px 20px; +} + +textbox-prompt-colon { + expand: false; + str: ":"; +} + +entry { + padding: 6px; + margin: 20px 0px 0px 10px; + text-color: @fg-col; + background-color: @bg-col; +} + +listview { + border: 0px 0px 0px; + padding: 6px 0px 0px; + margin: 10px 0px 0px 20px; + columns: 2; + background-color: @bg-col; +} + +element { + padding: 5px; + background-color: @bg-col; + text-color: @fg-col ; +} + +element-icon { + size: 25px; +} + +element selected { + background-color: @selected-col ; + text-color: @fg-col2 ; +} + +mode-switcher { + spacing: 0; + } + +button { + padding: 10px; + background-color: @bg-col-light; + text-color: @grey; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +button selected { + background-color: @bg-col; + text-color: @blue; +} diff --git a/gui/st.sh b/gui/st.sh new file mode 100755 index 0000000..9b879da --- /dev/null +++ b/gui/st.sh @@ -0,0 +1,7 @@ +#!/bin/sh +DIR=$(dirname "$(readlink -f "$0")") +. "$DIR/../env.sh" + + +makeinstallrepo https://gitee.com/klesh/st.git st + diff --git a/gui/suckless.sh b/gui/suckless.sh index 6921bcc..e349164 100755 --- a/gui/suckless.sh +++ b/gui/suckless.sh @@ -7,12 +7,14 @@ log 'Setting up suckless' case "$PM" in apt) sudo apt install \ + dunst \ trayer sudo apt remove gdm3 ;; pacman) sudo pacman -S --noconfirm --needed \ trayer \ + dunst \ xorg-xsetroot ;; esac @@ -23,7 +25,6 @@ esac $DIR/dmenu.sh $DIR/slock.sh $DRI/dict.sh -makeinstallrepo https://gitee.com/klesh/st.git st makeinstallrepo https://gitee.com/klesh/dwm.git dwm # config xinit to start for dwm