commit d6d8a22ba0ba978cad7941958e0001d754108b33 Author: nnduc Date: Sat Feb 1 17:39:15 2025 +0700 2025 updates diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6d97251 --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2024 nnduc + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4539ddc --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# i3-stones + +## Dependencies + +### For i3 +- i3wm +- polybar + +### For sway +- wl-root +- sway +- waybar + +### Others (notifications and icons) +- A Nerd Font (for icons) +- tiramisu + +## For brightness and media control: +- brightnessctl (You have to add user to the following groups: video input) +- playerctl +## For screen tearing: +- Fix xorg config with appropriate driver. +![stones](./screenshots/Screenshot_20240503_095414.png) diff --git a/alacritty/alacritty.toml b/alacritty/alacritty.toml new file mode 100644 index 0000000..bb1510c --- /dev/null +++ b/alacritty/alacritty.toml @@ -0,0 +1,24 @@ +[[keyboard.bindings]] +action = "SpawnNewInstance" +key = "T" +mods = "Control|Shift" + +[font] +size = 13.0 + +[font.bold] +family = "MesloLGS NF" + +[font.bold_italic] +family = "MesloLGS NF" + +[font.italic] +family = "MesloLGS NF" + +[font.normal] +family = "MesloLGS NF" + +[window] +startup_mode = "Maximized" + +[keyboard] diff --git a/alacritty/alacritty.yml b/alacritty/alacritty.yml new file mode 100644 index 0000000..13e79aa --- /dev/null +++ b/alacritty/alacritty.yml @@ -0,0 +1,26 @@ +font: + normal: + family: MesloLGS NF + #style: Regular + + bold: + family: MesloLGS NF + #style: Bold + + # Italic font face + italic: + # value specified for the normal font. + family: MesloLGS NF + #style: Italic + + bold_italic: + family: MesloLGS NF + #style: Bold Italic + # Point size + size: 13.0 + +window: + startup_mode: Maximized +key_bindings: + - {key: T, mods: Control|Shift, action: SpawnNewInstance} + diff --git a/alacritty/alacritty_default.yml b/alacritty/alacritty_default.yml new file mode 100644 index 0000000..fa40e0b --- /dev/null +++ b/alacritty/alacritty_default.yml @@ -0,0 +1,566 @@ +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# Any items in the `env` entry below will be added as +# environment variables. Some entries may override variables +# set by alacritty itself. +#env: + # TERM variable + # + # This value is used to set the `$TERM` environment variable for + # each instance of Alacritty. If it is not present, alacritty will + # check the local terminfo database and use `alacritty` if it is + # available, otherwise `xterm-256color` is used. + #TERM: xterm-256color + +#window: + # Window dimensions (changes require restart) + # + # Specified in number of columns/lines, not pixels. + # If both are `0`, this setting is ignored. + #dimensions: + # columns: 0 + # lines: 0 + + # Window position (changes require restart) + # + # Specified in number of pixels. + # If the position is not set, the window manager will handle the placement. + #position: + # x: 0 + # y: 0 + + # Window padding (changes require restart) + # + # Blank space added around the window in pixels. This padding is scaled + # by DPI and the specified value is always added at both opposing sides. + #padding: + # x: 0 + # y: 0 + + # Spread additional padding evenly around the terminal content. + #dynamic_padding: false + + # Window decorations + # + # Values for `decorations`: + # - full: Borders and title bar + # - none: Neither borders nor title bar + # + # Values for `decorations` (macOS only): + # - transparent: Title bar, transparent background and title bar buttons + # - buttonless: Title bar, transparent background, but no title bar buttons + #decorations: full + + # Startup Mode (changes require restart) + # + # Values for `startup_mode`: + # - Windowed + # - Maximized + # - Fullscreen + # + # Values for `startup_mode` (macOS only): + # - SimpleFullscreen + #startup_mode: Windowed + + # Window title + #title: Alacritty + + # Window class (Linux only): + #class: + # Application instance name + #instance: Alacritty + # General application class + #general: Alacritty + + # GTK theme variant (Linux only) + # + # Override the variant of the GTK theme. Commonly supported values are `dark` and `light`. + # Set this to `None` to use the default theme variant. + #gtk_theme_variant: None + +#scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + #history: 10000 + + # Number of lines the viewport will move for every line scrolled when + # scrollback is enabled (history > 0). + #multiplier: 3 + + # Scroll to the bottom when new text is written to the terminal. + #auto_scroll: false + +# Spaces per Tab (changes require restart) +# +# This setting defines the width of a tab in cells. +# +# Some applications, like Emacs, rely on knowing about the width of a tab. +# To prevent unexpected behavior in these applications, it's also required to +# change the `it` value in terminfo when altering this setting. +#tabspaces: 8 + +# Font configuration +#font: + # Normal (roman) font face + #normal: + # Font family + # + # Default: + # - (macOS) Menlo + # - (Linux) 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 upwards. + #glyph_offset: + # x: 0 + # y: 0 + + # Thin stroke font rendering (macOS only) + # + # Thin strokes are suitable for retina displays, but for non-retina screens + # it is recommended to set `use_thin_strokes` to `false` + # + # macOS >= 10.14.x: + # + # If the font quality on non-retina display looks bad then set + # `use_thin_strokes` to `true` and enable font smoothing by running the + # following command: + # `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO` + # + # This is a global setting and will require a log out or restart to take + # effect. + #use_thin_strokes: true + +# If `true`, bold text is drawn using the bright color variants. +#draw_bold_text_with_bright_colors: true + +# Colors (Tomorrow Night Bright) +#colors: + # Default colors + #primary: + # background: '0x000000' + # foreground: '0xeaeaea' + + # 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: '0x9a9a9a' + #bright_foreground: '0xffffff' + + # Cursor colors + # + # Colors which should be used to draw the terminal cursor. If these are unset, + # the cursor color will be the inverse of the cell color. + #cursor: + # text: '0x000000' + # cursor: '0xffffff' + + # Selection colors + # + # Colors which should be used to draw the selection area. If selection + # background is unset, selection color will be the inverse of the cell colors. + # If only text is unset the cell text color will remain the same. + #selection: + # text: '0xeaeaea' + # background: '0x404040' + + # Normal colors + #normal: + # black: '0x000000' + # red: '0xd54e53' + # green: '0xb9ca4a' + # yellow: '0xe6c547' + # blue: '0x7aa6da' + # magenta: '0xc397d8' + # cyan: '0x70c0ba' + # white: '0xeaeaea' + + # Bright colors + #bright: + # black: '0x666666' + # red: '0xff3334' + # green: '0x9ec400' + # yellow: '0xe7c547' + # blue: '0x7aa6da' + # magenta: '0xb77ee0' + # cyan: '0x54ced6' + # white: '0xffffff' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + #dim: + # black: '0x000000' + # red: '0x8c3336' + # green: '0x7a8530' + # yellow: '0x97822e' + # blue: '0x506d8f' + # magenta: '0x80638e' + # cyan: '0x497e7a' + # white: '0x9a9a9a' + + # Indexed Colors + # + # The indexed colors include all colors from 16 to 256. + # When these are not set, they're filled with sensible defaults. + # + # Example: + # `- { index: 16, color: '0xff00ff' }` + # + #indexed_colors: [] + +# Visual Bell +# +# Any time the BEL code is received, Alacritty "rings" the visual bell. Once +# rung, the terminal background will be set to white and transition back to the +# default background color. You can control the rate of this transition by +# setting the `duration` property (represented in milliseconds). You can also +# configure the transition function by setting the `animation` property. +# +# Values for `animation`: +# - Ease +# - EaseOut +# - EaseOutSine +# - EaseOutQuad +# - EaseOutCubic +# - EaseOutQuart +# - EaseOutQuint +# - EaseOutExpo +# - EaseOutCirc +# - Linear +# +# Specifying a `duration` of `0` will disable the visual bell. +#visual_bell: +# animation: EaseOutExpo +# duration: 0 +# color: '0xffffff' + +# Background opacity +# +# Window opacity as a floating point number from `0.0` to `1.0`. +# The value `0.0` is completely transparent and `1.0` is opaque. +#background_opacity: 1.0 + +#selection: + #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" + + # When set to `true`, selected text will be copied to the primary clipboard. + #save_to_clipboard: false + +# Allow terminal applications to change Alacritty's window title. +#dynamic_title: true + +#cursor: + # Cursor style + # + # Values for `style`: + # - ▇ Block + # - _ Underline + # - | Beam + #style: Block + + # If this is `true`, the cursor will be rendered as a hollow box when the + # window is not focused. + #unfocused_hollow: true + +# Live config reload (changes require restart) +#live_config_reload: true + +# Shell +# +# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`. +# Entries in `shell.args` are passed unmodified as arguments to the shell. +# +# Default: +# - (macOS) /bin/bash --login +# - (Linux) user login shell +# - (Windows) powershell +#shell: +# program: /bin/bash +# args: +# - --login + +# Startup directory +# +# Directory the shell is started in. If this is unset, or `None`, the working +# directory of the parent process will be used. +#working_directory: None + +# Windows 10 ConPTY backend (Windows only) +# +# This will enable better color support and may resolve other issues, +# however this API and its implementation is still young and so is +# disabled by default, as stability may not be as good as the winpty +# backend. +# +# Alacritty will fall back to the WinPTY automatically if the ConPTY +# backend cannot be initialized. +#enable_experimental_conpty_backend: false + +# Send ESC (\x1b) before characters when alt is pressed. +#alt_send_esc: true + +#debug: + # Display the time it takes to redraw each frame. + #render_timer: false + + # Keep the log file after quitting Alacritty. + #persistent_logging: false + + # Log level + # + # Values for `log_level`: + # - None + # - Error + # - Warn + # - Info + # - Debug + # - Trace + #log_level: Warn + + # Print all received window events. + #print_events: false + + # Record all characters and escape sequences as test data. + #ref_test: false + +#mouse: + # Click settings + # + # The `double_click` and `triple_click` settings control the time + # alacritty should wait for accepting multiple clicks as one double + # or triple click. + #double_click: { threshold: 300 } + #triple_click: { threshold: 300 } + + # If this is `true`, the cursor is temporarily hidden when typing. + #hide_when_typing: false + + #url: + # URL launcher + # + # This program is executed when clicking on a text which is recognized as a URL. + # The URL is always added to the command as the last parameter. + # + # When set to `None`, URL launching will be disabled completely. + # + # Default: + # - (macOS) open + # - (Linux) xdg-open + # - (Windows) explorer + #launcher: + # program: xdg-open + # args: [] + + # URL modifiers + # + # These are the modifiers that need to be held down for opening URLs when clicking + # on them. The available modifiers are documented in the key binding section. + #modifiers: None + +# Mouse bindings +# +# Mouse bindings are specified as a list of objects, much like the key +# bindings further below. +# +# Each mouse binding will specify a: +# +# - `mouse`: +# +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# - `action` (see key bindings) +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Middle, action: PasteSelection } + +# Key bindings +# +# Key bindings are specified as a list of objects. For example, this is the +# default paste binding: +# +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Each key binding will specify a: +# +# - `key`: Identifier of the key pressed +# +# - A-Z +# - F1-F24 +# - Key0-Key9 +# +# A full list with available key codes can be found here: +# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants +# +# Instead of using the name of the keys, the `key` field also supports using +# the scancode of the desired key. Scancodes have to be specified as a +# decimal number. This command will allow you to display the hex scancodes +# for certain keys: +# +# `showkey --scancodes`. +# +# Then exactly one of: +# +# - `chars`: Send a byte sequence to the running application +# +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. To find escape codes for bindings +# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside +# of tmux. Note that applications use terminfo to map escape sequences back +# to keys. It is therefore required to update the terminfo when changing an +# escape sequence. +# +# - `action`: Execute a predefined action +# +# - Copy +# - Paste +# - PasteSelection +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# - Hide +# - Quit +# - ToggleFullscreen +# - SpawnNewInstance +# - ClearLogNotice +# - ReceiveChar +# - None +# +# (macOS only): +# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - Alt +# +# A `~` operator can be used before a mode to apply the binding whenever +# the mode is *not* active, e.g. `~Alt`. +# +# Bindings are always filled by default, but will be replaced when a new +# binding with the same triggers is defined. To unset a default binding, it can +# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for +# a no-op if you do not wish to receive input characters for that binding. +#key_bindings: + # (Windows/Linux only) + #- { key: V, mods: Control|Shift, action: Paste } + #- { key: C, mods: Control|Shift, action: Copy } + #- { key: Insert, mods: Shift, action: PasteSelection } + #- { key: Key0, mods: Control, action: ResetFontSize } + #- { key: Equals, mods: Control, action: IncreaseFontSize } + #- { key: Add, mods: Control, action: IncreaseFontSize } + #- { key: Subtract, mods: Control, action: DecreaseFontSize } + #- { key: Minus, mods: Control, action: DecreaseFontSize } + #- { key: Return, mods: Alt, action: ToggleFullscreen } + + # (macOS only) + #- { key: Key0, mods: Command, action: ResetFontSize } + #- { key: Equals, mods: Command, action: IncreaseFontSize } + #- { key: Add, mods: Command, action: IncreaseFontSize } + #- { key: Minus, mods: Command, action: DecreaseFontSize } + #- { key: K, mods: Command, action: ClearHistory } + #- { key: K, mods: Command, chars: "\x0c" } + #- { key: V, mods: Command, action: Paste } + #- { key: C, mods: Command, action: Copy } + #- { key: H, mods: Command, action: Hide } + #- { key: Q, mods: Command, action: Quit } + #- { key: W, mods: Command, action: Quit } + #- { key: F, mods: Command|Control, action: ToggleFullscreen } + + #- { key: Paste, action: Paste } + #- { key: Copy, action: Copy } + #- { key: L, mods: Control, action: ClearLogNotice } + #- { key: L, mods: Control, chars: "\x0c" } + #- { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt } + #- { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt } + #- { key: Home, mods: Shift, action: ScrollToTop, mode: ~Alt } + #- { key: End, mods: Shift, action: ScrollToBottom, mode: ~Alt } diff --git a/i3/config b/i3/config new file mode 100644 index 0000000..c06c8b1 --- /dev/null +++ b/i3/config @@ -0,0 +1,242 @@ +# This file has been auto-generated by i3-config-wizard(1). +# It will not be overwritten, so edit it as you like. +# +# Should you change your keyboard layout some time, delete +# this file and re-run i3-config-wizard(1). +# + +# i3 config file (v4) +# +# Please see https://i3wm.org/docs/userguide.html for a complete reference! + +set $mod Mod1 + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:NotoSans 12 + +# This font is widely installed, provides lots of unicode glyphs, right-to-left +# text rendering and scalability on retina/hidpi displays (thanks to pango). +#font pango:DejaVu Sans Mono 8 + +# Start XDG autostart .desktop files using dex. See also +# https://wiki.archlinux.org/index.php/XDG_Autostart +exec --no-startup-id dex --autostart --environment i3 + +# The combination of xss-lock, nm-applet and pactl is a popular choice, so +# they are included here as an example. Modify as you see fit. +exec --no-startup-id /usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh +# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the +# screen before suspend. Use loginctl lock-session to lock your screen. +exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork --ignore-empty-password -i /data/sync/images/wallpapers/stonebeach.png +exec --no-startup-id xrand --output HDMI-0 --mode 1920x1080 --rate 120 +bindsym $mod+l exec i3lock --ignore-empty-password -i /data/sync/images/wallpapers/stonebeach.png + +bindsym $mod+Shift+p exec systemctl poweroff +bindsym Print exec flameshot gui -c +# NetworkManager is the most popular way to manage wireless networks on Linux, +# and nm-applet is a desktop environment-independent system tray GUI for it. + +# applets +exec --no-startup-id fcitx5 +exec --no-startup-id nm-applet +exec --no-startup-id blueman-applet +exec --no-startup-id feh --bg-fill '/data/sync/images/wallpapers/stonebeach.jpg' +exec --no-startup-id owncloud +exec --no-startup-id pasystray +exec --no-startup-id polybar +exec --no-startup-id xset m 1/1 0 +bindsym $mod+t exec --no-startup-id xinput disable 11 +bindsym $mod+Shift+t exec --no-startup-id xinput enable 11 + +set $refresh_i3status killall -SIGUSR1 i3status + +# Use pactl to adjust volume in PulseAudio. +bindsym XF86AudioRaiseVolume exec --no-startup-id wpctl set-volume @DEFAULT_SINK@ 0.02+ --limit 1 && $refresh_i3status +bindsym XF86AudioLowerVolume exec --no-startup-id wpctl set-volume @DEFAULT_SINK@ 0.02- --limit 0 && $refresh_i3status +bindsym XF86AudioMute exec --no-startup-id wpctl set-mute @DEFAULT_SINK@ toggle && $refresh_i3status +bindsym XF86AudioMicMute exec --no-startup-id wpctl set-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status + +# Media player key bindings (need media-sound/playerctl for playerctl.) +bindsym XF86AudioPlay exec playerctl play +bindsym XF86AudioPause exec playerctl pause +bindsym XF86AudioNext exec playerctl next +bindsym XF86AudioPrev exec playerctl previous +bindcode $mod+61 exec playerctl play-pause +bindcode $mod+60 exec --no-startup-id wpctl set-volume @DEFAULT_SINK@ 0.02+ --limit 1 && $refresh_i3status +bindcode $mod+59 exec --no-startup-id wpctl set-volume @DEFAULT_SINK@ 0.02- --limit 0 && $refresh_i3status + +# Brightness key bindings +bindsym XF86MonBrightnessUp exec brightnessctl set +5% +bindsym XF86MonBrightnessDown exec brightnessctl set 5%- + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# move tiling windows via drag & drop by left-clicking into the title bar, +# or left-clicking anywhere into the window while holding the floating modifier. +#tiling_drag modifier titlebar +#xrandr --output HDMI-2 --auto --right-of eDP1 + +# start a 3terminal +#bindsym $mod+Return exec i3-sensible-terminal +bindsym $mod+Return exec alacritty + +# kill focused window +bindsym $mod+Shift+q kill + +# start dmenu (a program launcher) +#bindsym $mod+d exec --no-startup-id j4-dmenu-desktop +#bindsym $mod+d exec --no-startup-id dmenu + +# A more modern dmenu replacement is rofi: +# bindcode $mod+40 exec "rofi -modi drun,run -show drun" +bindcode $mod+40 exec "rofi -modi drun,run -show drun" +# There also is i3-dmenu-desktop which only displays applications shipping a +# .desktop file. It is a wrapper around dmenu, so you need that installed. +# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop + +# change focus +#bindsym $mod+j focus left +#bindsym $mod+k focus down +#bindsym $mod+l focus up +#bindsym $mod+semicolon focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window +bindsym $mod+Shift+j move left +bindsym $mod+Shift+k move down +bindsym $mod+Shift+l move up +bindsym $mod+Shift+semicolon move right + +# alternatively, you can use the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# split in horizontal orientation +bindsym $mod+h split h + +# split in vertical orientation +bindsym $mod+v split v + +# enter fullscreen mode for the focused container +bindsym $mod+f floating toggle +bindsym $mod+Shift+space fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +# toggle tiling / floating + +# change focus between tiling / floating windows +bindsym $mod+space focus mode_toggle + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +#bindsym $mod+d focus child + +# Define names for default workspaces for which we configure key bindings later on. +# We use variables to avoid repeating the names in multiple places. +set $ws1 "1" +set $ws2 "2" +set $ws3 "3" +set $ws4 "4" +set $ws5 "5" +set $ws6 "6" +set $ws7 "7" +set $ws8 "8" +set $ws9 "9" +set $ws10 "10" + +# switch to workspace +bindsym $mod+1 workspace number $ws1 +bindsym $mod+2 workspace number $ws2 +bindsym $mod+3 workspace number $ws3 +bindsym $mod+4 workspace number $ws4 +bindsym $mod+5 workspace number $ws5 +bindsym $mod+6 workspace number $ws6 +bindsym $mod+7 workspace number $ws7 +bindsym $mod+8 workspace number $ws8 +bindsym $mod+9 workspace number $ws9 +bindsym $mod+0 workspace number $ws10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace number $ws1 +bindsym $mod+Shift+2 move container to workspace number $ws2 +bindsym $mod+Shift+3 move container to workspace number $ws3 +bindsym $mod+Shift+4 move container to workspace number $ws4 +bindsym $mod+Shift+5 move container to workspace number $ws5 +bindsym $mod+Shift+6 move container to workspace number $ws6 +bindsym $mod+Shift+7 move container to workspace number $ws7 +bindsym $mod+Shift+8 move container to workspace number $ws8 +bindsym $mod+Shift+9 move container to workspace number $ws9 +bindsym $mod+Shift+0 move container to workspace number $ws10 + +# reload the configuration file +bindsym $mod+Shift+c reload +# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart +# exit i3 (logs you out of your X session) +bindsym $mod+Shift+e exec i3-msg exit +#bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" + +# resize window (you can also use the mouse for that) +mode "resize" { +# These bindings trigger as soon as you enter the resize mode + +# Pressing left will shrink the window’s width. +# Pressing right will grow the window’s width. +# Pressing up will shrink the window’s height. +# Pressing down will grow the window’s height. + bindsym j resize shrink width 10 px or 10 ppt + bindsym k resize grow height 10 px or 10 ppt + bindsym l resize shrink height 10 px or 10 ppt + bindsym semicolon resize grow width 10 px or 10 ppt + +# same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + +# back to normal: Enter or Escape or $mod+r + bindsym Return mode "default" + bindsym Escape mode "default" + bindsym $mod+r mode "default" +} + +bindsym $mod+r mode "resize" +# Start i3bar to display a workspace bar (plus the system information i3status +bindsym $mod+Shift+minus move scratchpad + +# Show the first scratchpad window +bindsym $mod+minus scratchpad show + + +# jump to last used workspace +bindsym $mod+Tab workspace back_and_forth + +# class border bground text indicator child_border +client.focused #000000 #c8c9c9 #0D100F #8A7564 #00FFF4 +client.placeholder #000000 #7A858D #FFFFFF #000000 #0d100f +client.unfocused #000000 #7A858D #FFFFFF #000000 #0d100f +client.focused_inactive #333333 #C8C9C9 #7A858D #484E50 #5F676A +#focused_workspace #4c7899 #285577 #ffff +# (No) Title Bars + +for_window [class="^.*"] border pixel 1 + +#floating +for_window [class="Signal"] floating enable +for_window [class="Gajim"] floating enable diff --git a/nvim/coc-settings.json b/nvim/coc-settings.json new file mode 100644 index 0000000..3ba2825 --- /dev/null +++ b/nvim/coc-settings.json @@ -0,0 +1,2 @@ +{"coc.preferences.diagnostic.displayByAle":1 +} diff --git a/nvim/init (conflicted copy 2024-03-23 100014).vim b/nvim/init (conflicted copy 2024-03-23 100014).vim new file mode 100644 index 0000000..e180073 --- /dev/null +++ b/nvim/init (conflicted copy 2024-03-23 100014).vim @@ -0,0 +1,168 @@ +syntax on +set number +set cursorline +set expandtab tabstop=4 shiftwidth=4 softtabstop=4 +set autoindent +set spelllang=vi,en + + +" Fold +set foldmethod=syntax +set foldlevel=1 +set foldnestmax=1 +set encoding=utf8 + +" Search +set hlsearch +nnoremap i :nohlsi + +" Plugin +call plug#begin() +Plug 'neoclide/coc.nvim', {'branch': 'release'} +Plug 'dense-analysis/ale' +Plug 'preservim/nerdtree' +Plug 'preservim/nerdcommenter' +Plug 'lervag/vimtex' +Plug 'JuliaEditorSupport/julia-vim' +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } +Plug 'junegunn/fzf.vim' +Plug 'honza/vim-snippets' +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +Plug 'kevinhwang91/nvim-bqf' +Plug 'morhetz/gruvbox' +Plug 'tpope/vim-fugitive' +Plug 'ynkdir/vim-diff' +call plug#end() + +"Color scheme +"colorscheme iceberg +"set background=light +colorscheme gruvbox +let g:gruvbox_contrast_light = 'hard' + + + +"Open NERDTree +:nnoremap g:NERDTree.IsOpen() ? "\:NERDTreeClose" : bufexists(expand('%')) ? "\:NERDTreeFind" : "\:NERDTree" + +"Coc.nvim +inoremap + \ coc#pum#visible() ? coc#_select_confirm() : + \ coc#expandableOrJumpable() ? "\=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\" : + \ CheckBackSpace() ? "\" : + \ coc#refresh() +inoremap pumvisible() ? coc#_select_confirm() + \: "\u\\=coc#on_enter()\" + +function! CheckBackSpace() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction + +let g:coc_snippet_next = '' +inoremap coc#pum#visible() ? coc#pum#confirm() + \: "\u\\=coc#on_enter()\" + +" Comments +let mapleader = "," + +" remap save +nnoremap :w + +" moving between windows +nnoremap h +nnoremap j +nnoremap k +nnoremap l +nnoremap h +nnoremap j +nnoremap k +nnoremap l +nnoremap to :tabonly +nnoremap o :only +nnoremap :tabn +nnoremap :tabp + +"set clipboard+=unnamedplus +" " Copy to clipboard +vnoremap y "+y +nnoremap Y "+yg_ +nnoremap y "+y +nnoremap yy "+yy + +" " Paste from clipboard +nnoremap p "+p +nnoremap P "+P + + +" FZF key mapping +nnoremap b :Buffers +nnoremap r :Rg +nnoremap f :Files +nnoremap g :GFiles +nnoremap w :Rg + +filetype plugin on +set splitright +set splitbelow + + +function! IBusOff() + " Lưu engine hiện tại + let g:ibus_prev_engine = system('ibus engine') + " Chuyển sang engine tiếng Anh + " Nếu bạn thấy cái cờ ở đây + " khả năng là font của bạn đang renderemoji lung tung... + " xkb : us :: eng (không có dấu cách) + silent! execute '!ibus engine xkb🇺🇸:eng' +endfunction + + + +function! IBusOn() + let l:current_engine = system('ibus engine') + " nếu engine được set trong normal mode thì + " lúc vào insert mode duùn luôn engine đó + if l:current_engine !~? 'xkb🇺🇸:eng' + let g:ibus_prev_engine = l:current_engine + endif + " Khôi phục lại engine + silent! execute '!ibus engine ' . g:ibus_prev_engine +endfunction + +augroup IBusHandler + " Khôi phục ibus engine khi tìm kiếm + autocmd CmdLineEnter [/?] silent call IBusOn() + autocmd CmdLineLeave [/?] silent call IBusOff() + autocmd CmdLineEnter \? silent call IBusOn() + autocmd CmdLineLeave \? silent call IBusOff() + " Khôi phục ibus engine khi vào insert mode + autocmd InsertEnter * silent call IBusOn() + " Tắt ibus engine khi vào normal mode + autocmd InsertLeave * silent call IBusOff() +augroup END + +silent call IBusOff() + +let g:vimtex_view_general_viewer = 'okular' + +"Language tool +map :ALEToggle + + +"Use 24-bit (true-color) mode in Vim/Neovim when outside tmux. +"If you're using tmux version 2.2 or later, you can remove the outermost $TMUX check and use tmux's 24-bit color support +"(see < http://sunaku.github.io/tmux-24bit-color.html#usage > for more information.) +if (empty($TMUX)) + if (has("nvim")) + "For Neovim 0.1.3 and 0.1.4 < https://github.com/neovim/neovim/pull/2198 > + let $NVIM_TUI_ENABLE_TRUE_COLOR=1 + endif + "For Neovim > 0.1.5 and Vim > patch 7.4.1799 < https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162 > + "Based on Vim patch 7.4.1770 (`guicolors` option) < https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd > + " < https://github.com/neovim/neovim/wiki/Following-HEAD#20160511 > + if (has("termguicolors")) + set termguicolors + endif +endif diff --git a/nvim/init.vim b/nvim/init.vim new file mode 100644 index 0000000..40c3e59 --- /dev/null +++ b/nvim/init.vim @@ -0,0 +1,196 @@ +syntax on +set number +set cursorline +set expandtab tabstop=4 shiftwidth=4 softtabstop=4 +set autoindent +set spelllang=vi,en + + +" Fold +set foldmethod=syntax +set foldlevel=1 +set foldnestmax=1 +set encoding=utf8 + +" Search +set hlsearch +nnoremap i :nohlsi + +" Plugin +call plug#begin() +Plug 'neoclide/coc.nvim', {'branch': 'release'} +Plug 'dense-analysis/ale' +Plug 'preservim/nerdtree' +Plug 'preservim/nerdcommenter' +Plug 'lervag/vimtex' +Plug 'JuliaEditorSupport/julia-vim' +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } +Plug 'junegunn/fzf.vim' +Plug 'honza/vim-snippets' +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +Plug 'kevinhwang91/nvim-bqf' +Plug 'morhetz/gruvbox' +Plug 'tpope/vim-fugitive' +Plug 'ynkdir/vim-diff' +call plug#end() + +"Color scheme +"colorscheme iceberg +"set background=light +colorscheme gruvbox +let g:gruvbox_contrast_light = 'hard' + + + +"Open NERDTree +:nnoremap g:NERDTree.IsOpen() ? "\:NERDTreeClose" : bufexists(expand('%')) ? "\:NERDTreeFind" : "\:NERDTree" + +"Coc.nvim +inoremap + \ coc#pum#visible() ? coc#_select_confirm() : + \ coc#expandableOrJumpable() ? "\=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\" : + \ CheckBackSpace() ? "\" : + \ coc#refresh() +inoremap pumvisible() ? coc#_select_confirm() + \: "\u\\=coc#on_enter()\" + +function! CheckBackSpace() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction + +let g:coc_snippet_next = '' +inoremap coc#pum#visible() ? coc#pum#confirm() + \: "\u\\=coc#on_enter()\" + +" Comments +let mapleader = "," + +" remap save +nnoremap :w + +" moving between windows +nnoremap h +nnoremap j +nnoremap k +nnoremap l +nnoremap h +nnoremap j +nnoremap k +nnoremap l +nnoremap to :tabonly +nnoremap o :only +nnoremap :tabn +nnoremap :tabp + +"set clipboard+=unnamedplus +" " Copy to clipboard +vnoremap y "+y +nnoremap Y "+yg_ +nnoremap y "+y +nnoremap yy "+yy + +" " Paste from clipboard +nnoremap p "+p +nnoremap P "+P + + +" FZF key mapping +nnoremap b :Buffers +nnoremap r :Rg +nnoremap f :Files +nnoremap g :GFiles +nnoremap w :Rg + +filetype plugin on +set splitright +set splitbelow + + +let g:input_lang = system('fcitx5-remote') +function! FcitxOff() + let l:input_status = system('fcitx5-remote') + let g:input_lang = l:input_status + if l:input_status == 2 "second input method + silent! execute '!fcitx5-remote -c' + endif +endfunction + +function! FcitxOn() + let l:input_status = system('fcitx5-remote') + if l:input_status == 1 + if g:input_lang == 2 + silent! execute '!fcitx5-remote -o' + endif + endif +endfunction + + +augroup fcitxHandler + autocmd CmdLineEnter [/?] silent call FcitxOn() + autocmd CmdLineLeave [/?] silent call FcitxOff() + autocmd CmdLineEnter \? silent call FcitxOn() + autocmd CmdLineLeave \? silent call FcitxOff() + autocmd InsertEnter * silent call FcitxOn() + autocmd InsertLeave * silent call FcitxOff() +augroup END + +"function! IBusOff() + "" Lưu engine hiện tại + "let g:ibus_prev_engine = system('ibus engine') + "" Chuyển sang engine tiếng Anh + "" Nếu bạn thấy cái cờ ở đây + "" khả năng là font của bạn đang renderemoji lung tung... + "" xkb : us :: eng (không có dấu cách) + "silent! execute '!ibus engine xkb🇺🇸:eng' +"endfunction + + + +"function! IBusOn() + "let l:current_engine = system('ibus engine') + "" nếu engine được set trong normal mode thì + "" lúc vào insert mode duùn luôn engine đó + "if l:current_engine !~? 'xkb🇺🇸:eng' + "let g:ibus_prev_engine = l:current_engine + "endif + "" Khôi phục lại engine + "silent! execute '!ibus engine ' . g:ibus_prev_engine +"endfunction + +"augroup IBusHandler + "" Khôi phục ibus engine khi tìm kiếm + "autocmd CmdLineEnter [/?] silent call IBusOn() + "autocmd CmdLineLeave [/?] silent call IBusOff() + "autocmd CmdLineEnter \? silent call IBusOn() + "autocmd CmdLineLeave \? silent call IBusOff() + "" Khôi phục ibus engine khi vào insert mode + "autocmd InsertEnter * silent call IBusOn() + "" Tắt ibus engine khi vào normal mode + "autocmd InsertLeave * silent call IBusOff() +"augroup END + +"silent call IBusOff() + +let g:vimtex_view_method= 'zathura' + +"Language tool +map :ALEToggle + + +"Use 24-bit (true-color) mode in Vim/Neovim when outside tmux. +"If you're using tmux version 2.2 or later, you can remove the outermost $TMUX check and use tmux's 24-bit color support +"(see < http://sunaku.github.io/tmux-24bit-color.html#usage > for more information.) +if (empty($TMUX)) + if (has("nvim")) + "For Neovim 0.1.3 and 0.1.4 < https://github.com/neovim/neovim/pull/2198 > + let $NVIM_TUI_ENABLE_TRUE_COLOR=1 + endif + "For Neovim > 0.1.5 and Vim > patch 7.4.1799 < https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162 > + "Based on Vim patch 7.4.1770 (`guicolors` option) < https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd > + " < https://github.com/neovim/neovim/wiki/Following-HEAD#20160511 > + if (has("termguicolors")) + set termguicolors + endif +endif diff --git a/nvim/init.vim(server) b/nvim/init.vim(server) new file mode 100644 index 0000000..b9fc9b1 --- /dev/null +++ b/nvim/init.vim(server) @@ -0,0 +1,101 @@ +syntax on +set number +set cursorline +set expandtab tabstop=4 shiftwidth=4 softtabstop=4 +set autoindent +set spelllang=vi,en + +" Fold +set foldmethod=syntax +set foldlevel=1 +set foldnestmax=1 +set encoding=utf8 + +" Search +set hlsearch +nnoremap i :nohlsi + +" Plugin +call plug#begin() +Plug 'neoclide/coc.nvim', {'branch': 'release'} +Plug 'preservim/nerdtree' +Plug 'preservim/nerdcommenter' +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } +Plug 'junegunn/fzf.vim' +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +Plug 'kevinhwang91/nvim-bqf' +Plug 'morhetz/gruvbox' +Plug 'tpope/vim-fugitive' +Plug 'ynkdir/vim-diff' +call plug#end() + +"Color scheme + +colorscheme gruvbox +let g:gruvbox_contrast_light = 'hard' + +set background=dark + +" Comments +let mapleader = "," + +"Open NERDTree +:nnoremap g:NERDTree.IsOpen() ? "\:NERDTreeClose" : bufexists(expand('%')) ? "\:NERDTreeFind" : "\:NERDTree" + + +"Coc.nvim +inoremap + \ coc#pum#visible() ? coc#_select_confirm() : + \ coc#expandableOrJumpable() ? "\=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\" : + \ CheckBackSpace() ? "\" : + \ coc#refresh() + +inoremap coc#pum#visible() ? coc#_select_confirm() : coc#refresh() + +function! CheckBackSpace() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction + +let g:coc_snippet_next = '' +" remap save +nnoremap :w + +" moving between windows +nnoremap h +nnoremap j +nnoremap k +nnoremap l +nnoremap h +nnoremap j +nnoremap k +nnoremap l +nnoremap to :tabonly +nnoremap o :only +nnoremap :tabn +nnoremap :tabp + +"set clipboard+=unnamedplus +" " Copy to clipboard +vnoremap y "+y +nnoremap Y "+yg_ +nnoremap y "+y +nnoremap yy "+yy + +" " Paste from clipboard +nnoremap p "+p +nnoremap P "+P + + +" FZF key mapping +nnoremap b :Buffers +nnoremap r :Rg +nnoremap f :Files +nnoremap g :GFiles +nnoremap w :Rg + +filetype plugin on +set splitright +set splitbelow + diff --git a/nvim/latexmk.vim b/nvim/latexmk.vim new file mode 100644 index 0000000..d244df6 --- /dev/null +++ b/nvim/latexmk.vim @@ -0,0 +1,227 @@ +" VimTeX - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email: karl.yngve@gmail.com +" + +function! vimtex#compiler#latexmk#init(options) abort " {{{1 + return s:compiler.new(a:options) +endfunction + +" }}}1 + +function! vimtex#compiler#latexmk#get_rc_opt(root, opt, type, default) abort " {{{1 + " + " Parse option from .latexmkrc. + " + " Arguments: + " root Root of LaTeX project + " opt Name of options + " type 0 if string, 1 if integer, 2 if list + " default Value to return if option not found in latexmkrc file + " + " Output: + " [value, location] + " + " value Option value (integer or string) + " location An integer that indicates where option was found + " -1: not found (default value returned) + " 0: global latexmkrc file + " 1: local latexmkrc file + " + + if a:type == 0 + let l:pattern = '^\s*\$' . a:opt . '\s*=\s*[''"]\(.\+\)[''"]' + elseif a:type == 1 + let l:pattern = '^\s*\$' . a:opt . '\s*=\s*\(\d\+\)' + elseif a:type == 2 + let l:pattern = '^\s*@' . a:opt . '\s*=\s*(\(.*\))' + else + throw 'VimTeX: Argument error' + endif + + " Candidate files + " - each element is a pair [path_to_file, is_local_rc_file]. + let l:files = [ + \ [a:root . '/latexmkrc', 1], + \ [a:root . '/.latexmkrc', 1], + \ [fnamemodify('~/.latexmkrc', ':p'), 0], + \ [fnamemodify( + \ !empty($XDG_CONFIG_HOME) ? $XDG_CONFIG_HOME : '~/.config', ':p') + \ . '/latexmk/latexmkrc', 0] + \] + + let l:result = [a:default, -1] + + for [l:file, l:is_local] in l:files + if filereadable(l:file) + let l:match = matchlist(readfile(l:file), l:pattern) + if len(l:match) > 1 + let l:result = [l:match[1], l:is_local] + break + end + endif + endfor + + " Parse the list + if a:type == 2 && l:result[1] > -1 + let l:array = split(l:result[0], ',') + let l:result[0] = [] + for l:x in l:array + let l:x = substitute(l:x, "^'", '', '') + let l:x = substitute(l:x, "'$", '', '') + let l:result[0] += [l:x] + endfor + endif + + return l:result +endfunction + +" }}}1 + + +let s:compiler = vimtex#compiler#_template#new({ + \ 'name' : 'latexmk', + \ 'callback' : 1, + \ 'continuous': 1, + \ 'executable' : 'latexmk', + \ 'options' : [ + \ '-verbose', + \ '-file-line-error', + \ '-synctex=1', + \ '-interaction=nonstopmode', + \ '-shell-escape', + \ '-output-directory=./output', + \ '-aux-directory=./', + \ ], + \}) + +function! s:compiler.__check_requirements() abort dict " {{{1 + if !executable(self.executable) + call vimtex#log#warning(self.executable . ' is not executable') + throw 'VimTeX: Requirements not met' + endif +endfunction + +" }}}1 +function! s:compiler.__init() abort dict " {{{1 + " Check if .latexmkrc sets the build_dir - if so this should be respected + let l:out_dir = + \ vimtex#compiler#latexmk#get_rc_opt(self.state.root, 'out_dir', 0, '')[0] + if !empty(l:out_dir) + if !empty(self.build_dir) && (self.build_dir !=# l:out_dir) + call vimtex#log#warning( + \ 'Setting out_dir from latexmkrc overrides build_dir!', + \ 'Changed build_dir from: ' . self.build_dir, + \ 'Changed build_dir to: ' . l:out_dir) + endif + let self.build_dir = l:out_dir + endif +endfunction + +" }}}1 +function! s:compiler.__build_cmd() abort dict " {{{1 + let l:cmd = (has('win32') + \ ? 'set max_print_line=2000 & ' + \ : 'max_print_line=2000 ') . self.executable + + let l:cmd .= ' ' . join(self.options) + let l:cmd .= ' ' . self.get_engine() + + if !empty(self.build_dir) + let l:cmd .= ' -outdir=' . fnameescape(self.build_dir) + endif + + if self.continuous + let l:cmd .= ' -pvc -view=none' + + if self.callback + for [l:opt, l:val] in [ + \ ['compiling_cmd', 'vimtex_compiler_callback_compiling'], + \ ['success_cmd', 'vimtex_compiler_callback_success'], + \ ['failure_cmd', 'vimtex_compiler_callback_failure'], + \] + let l:cmd .= s:wrap_option_appendcmd(l:opt, 'echo ' . l:val) + endfor + endif + endif + + return l:cmd . ' ' . vimtex#util#shellescape(self.state.base) +endfunction + +" }}}1 +function! s:compiler.__pprint_append() abort dict " {{{1 + return [ + \ ['callback', self.callback], + \ ['continuous', self.continuous], + \ ['executable', self.executable], + \] +endfunction + +" }}}1 + +function! s:compiler.clean(full) abort dict " {{{1 + let l:cmd = self.executable . ' ' . (a:full ? '-C ' : '-c ') + if !empty(self.build_dir) + let l:cmd .= printf(' -outdir=%s ', fnameescape(self.build_dir)) + endif + let l:cmd .= vimtex#util#shellescape(self.state.base) + + call vimtex#jobs#run(l:cmd, {'cwd': self.state.root}) +endfunction + +" }}}1 +function! s:compiler.get_engine() abort dict " {{{1 + " Parse tex_program from TeX directive + let l:tex_program_directive = self.state.get_tex_program() + let l:tex_program = l:tex_program_directive + + + " Parse tex_program from from pdf_mode option in .latexmkrc + let [l:pdf_mode, l:is_local] = + \ vimtex#compiler#latexmk#get_rc_opt(self.state.root, 'pdf_mode', 1, -1) + + if l:pdf_mode >= 1 && l:pdf_mode <= 5 + let l:tex_program_pdfmode = [ + \ 'pdflatex', + \ 'pdfps', + \ 'pdfdvi', + \ 'lualatex', + \ 'xelatex', + \][l:pdf_mode-1] + + " Use pdf_mode if there is no TeX directive + if l:tex_program_directive ==# '_' + let l:tex_program = l:tex_program_pdfmode + elseif l:is_local && l:tex_program_directive !=# l:tex_program_pdfmode + " Give warning when there may be a confusing conflict + call vimtex#log#warning( + \ 'Value of pdf_mode from latexmkrc is inconsistent with ' . + \ 'TeX program directive!', + \ 'TeX program: ' . l:tex_program_directive, + \ 'pdf_mode: ' . l:tex_program_pdfmode, + \ 'The value of pdf_mode will be ignored.') + endif + endif + + return get(g:vimtex_compiler_latexmk_engines, + \ l:tex_program, + \ g:vimtex_compiler_latexmk_engines._) +endfunction + +" }}}1 + + +function! s:wrap_option_appendcmd(name, value) abort " {{{1 + " Note: On Linux, we use double quoted perl strings; these interpolate + " variables. One should therefore NOT pass values that contain `$`. + let l:win_cmd_sep = has('nvim') ? '^&' : '&' + let l:common = printf('$%s = ($%s ? $%s', a:name, a:name, a:name) + return has('win32') + \ ? printf(' -e "%s . '' %s '' : '''') . ''%s''"', + \ l:common, l:win_cmd_sep, a:value) + \ : printf(' -e ''%s . " ; " : "") . "%s"''', + \ l:common, a:value) +endfunction + +"}}}1 diff --git a/nvim/site/vi.utf-8.spl b/nvim/site/vi.utf-8.spl new file mode 100644 index 0000000..19d9453 Binary files /dev/null and b/nvim/site/vi.utf-8.spl differ diff --git a/nvim/vi.aff b/nvim/vi.aff new file mode 100644 index 0000000..bb3fa19 --- /dev/null +++ b/nvim/vi.aff @@ -0,0 +1,66 @@ +SET UTF-8 +TRY naohiugtcedmylrbvskpxqfjwzNAOHIUGTCEDMYLRBVSKPXQFJWZ- + +MAP 40 +MAP ảã +MAP ẩẫ +MAP ẳẵ +MAP ẻẽ +MAP ểễ +MAP ỉĩ +MAP ỏõ +MAP ổỗ +MAP ởỡ +MAP ủũ +MAP ửữ +MAP ỷỹ +MAP (iêu)(iu)(ưu) +MAP (iếu)(íu)(ứu) +MAP (iều)(ìu)(ừu) +MAP (iểu)(ỉu)(ửu) +MAP (iễu)(ĩu)(ữu) +MAP (iệu)(ịu)(ựu) +MAP (ịc)(ịch) +MAP (íc)(ích) +MAP aàảãáạ +MAP ăằẳẵắặ +MAP âầẩẫấậ +MAP eèẻẽéẹ +MAP êềểễếệ +MAP iìỉĩíị +MAP oòỏõóọ +MAP ôồổỗốộ +MAP ơờởỡớợ +MAP uùủũúụ +MAP ưừửữứự +MAP yỳỷỹýỵ +MAP aàảãáạăằẳẵắặâầẩẫấậ +MAP eèẻẽéẹêềểễếệ +MAP oòỏõóọôồổỗốộơờởỡớợ +MAP uùủũúụưừửữứự +MAP óòỏaàáả +MAP óóỏeèéẻ +MAP úùủụyýỳỷỵ +MAP uưoờớỡởợ + +REP 20 +REP dz d +REP ch tr +REP d đ +REP đ d +REP d gi +REP f ph +REP g gh +REP gh g +REP gi d +REP j g +REP ng ngh +REP ngh ng +REP ou uo +REP ou ươ +REP uo ươ +REP s x +REP tr ch +REP x s +REP w qu +REP z d diff --git a/nvim/vi.dic b/nvim/vi.dic new file mode 100644 index 0000000..12b5818 --- /dev/null +++ b/nvim/vi.dic @@ -0,0 +1,6642 @@ +6641 +ABC +ASCII +GIF +HCM +HK +HTML +Huế +HĐND +JPEG +LHQ +Lắk +Nguơn +Nguyễn +Nẵng +PDF +PNG +Phan +RAM +TCVN +TV +TW +Telex +Tp +UBND +URL +Unicode +VIQR +VISCII +VN +VNI +Đắk +a +ai +am +an +ang +anh +ao +au +ba +bai +ban +bang +banh +bao +basoi +bay +be +bem +ben +beng +beo +bi +bia +bin +binh +biên +biêng +biếc +biếm +biến +biếng +biết +biếu +biền +biển +biểu +biện +biệt +bo +bom +bon +bong +boong +boóng +bu +bua +bung +buôn +buông +buýt +buốt +buồi +buồm +buồn +buồng +buổi +buộc +buột +bà +bài +bàm +bàn +bàng +bành +bào +bàu +bày +bá +bác +bách +bái +bám +bán +báng +bánh +báo +bát +báu +bân +bâng +bâu +bây +bã +bãi +bão +bè +bèm +bèn +bèo +bé +béc +bén +béng +béo +bép +bét +bê +bên +bênh +bêu +bì +bìa +bìm +bình +bìu +bí +bích +bím +bính +bít +bíu +bò +bòi +bòm +bòn +bòng +bó +bóc +bói +bón +bóng +bóp +bót +bô +bôi +bôm +bôn +bông +bõ +bõm +bõng +bù +bùa +bùi +bùm +bùn +bùng +bú +búa +búi +bún +búng +búp +bút +băm +băn +băng +bĩ +bĩnh +bĩu +bũm +bơ +bơi +bơm +bơn +bư +bưa +bưng +bưu +bươi +bươm +bươn +bương +bươu +bước +bướm +bướng +bướp +bướu +bưởi +bượt +bạ +bạc +bạch +bại +bạn +bạnh +bạo +bạp +bạt +bạu +bả +bải +bản +bảng +bảnh +bảo +bảu +bảy +bấc +bấm +bấn +bấp +bất +bấu +bấy +bầm +bần +bầng +bầu +bầy +bẩm +bẩn +bẩy +bẫm +bẫy +bậc +bậm +bận +bập +bật +bậu +bậy +bắc +bắn +bắng +bắp +bắt +bằm +bằn +bằng +bẳn +bẵng +bặm +bặn +bặng +bặp +bặt +bẹ +bẹn +bẹo +bẹp +bẹt +bẻ +bẻm +bẻo +bẽ +bẽn +bẽo +bế +bến +bếp +bết +bề +bền +bềnh +bều +bể +bễ +bệ +bệch +bện +bệnh +bệt +bệu +bỉ +bỉm +bỉnh +bỉu +bị +bịa +bịch +bịn +bịnh +bịp +bịt +bịu +bọ +bọc +bọn +bọng +bọp +bọt +bỏ +bỏi +bỏm +bỏng +bố +bốc +bối +bốn +bống +bốp +bốt +bồ +bồi +bồm +bồn +bồng +bổ +bổi +bổn +bổng +bỗ +bỗng +bộ +bộc +bội +bộn +bộng +bộp +bột +bớ +bới +bớp +bớt +bờ +bời +bờm +bờn +bở +bởi +bỡ +bỡn +bợ +bợm +bợn +bợp +bợt +bụ +bụa +bục +bụi +bụm +bụng +bụp +bụt +bủ +bủa +bủm +bủn +bủng +bứ +bức +bứng +bứt +bừa +bừng +bửa +bửng +bửu +bữa +bự +bựa +bực +bựt +ca +cai +cam +can +canh +cao +cau +cay +cha +chai +chan +chang +chanh +chao +chau +chay +che +chem +chen +cheng +cheo +chi +chia +chim +chinh +chiu +chiêm +chiên +chiêng +chiêu +chiếc +chiếm +chiến +chiếng +chiếp +chiết +chiếu +chiền +chiềng +chiều +chiểu +chiện +cho +choang +choi +chong +choài +choàng +choá +choái +choán +choáng +choãi +choèn +choé +choòng +choăn +choạc +choạng +choạp +choảng +choắt +choẹ +choẹt +chu +chua +chui +chum +chun +chung +chuyên +chuyến +chuyền +chuyển +chuyện +chuôi +chuôm +chuông +chuẩn +chuếch +chuệch +chuốc +chuối +chuốt +chuồi +chuồn +chuồng +chuỗi +chuộc +chuội +chuộng +chuột +chuỳ +chà +chài +chàm +chàng +chành +chào +chày +chá +chác +chái +chán +cháng +chánh +cháo +chát +cháu +cháy +châm +chân +châu +chây +chã +chãi +chão +chè +chèn +chèo +ché +chém +chén +chéo +chép +chét +chê +chêm +chênh +chì +chìa +chìm +chình +chìu +chí +chích +chím +chín +chính +chíp +chít +chíu +chò +chòi +chòm +chòng +chó +chóc +chói +chóng +chóp +chót +chôm +chôn +chông +chõ +chõm +chõng +chù +chùa +chùi +chùm +chùn +chùng +chú +chúa +chúc +chúi +chúm +chúng +chút +chăm +chăn +chăng +chĩa +chĩn +chĩnh +chũi +chũm +chũn +chơ +chơi +chơm +chơn +chư +chưa +chưn +chưng +chương +chước +chướng +chườm +chường +chưởi +chưởng +chưỡng +chược +chượp +chạ +chạc +chạch +chạm +chạn +chạng +chạnh +chạo +chạp +chạt +chạy +chả +chải +chảnh +chảo +chảu +chảy +chấm +chấn +chấp +chất +chấu +chấy +chầm +chần +chầu +chầy +chẩm +chẩn +chẫu +chậc +chậm +chận +chập +chật +chậu +chắc +chắm +chắn +chắp +chắt +chằm +chằn +chằng +chẳng +chẵn +chặc +chặm +chặn +chặng +chặp +chặt +chẹn +chẹo +chẹp +chẹt +chẻ +chẻm +chẻn +chẻo +chẽ +chẽn +chế +chếch +chếnh +chết +chề +chềm +chềnh +chểnh +chễm +chễnh +chệ +chệch +chện +chệnh +chỉ +chỉn +chỉnh +chị +chịa +chịt +chịu +chọ +chọc +chọi +chọn +chọt +chỏ +chỏm +chỏn +chỏng +chốc +chối +chốn +chống +chốp +chốt +chồ +chồi +chồm +chồn +chồng +chổi +chổng +chỗ +chỗm +chộ +chội +chộn +chộp +chột +chớ +chới +chớm +chớp +chớt +chờ +chờm +chờn +chở +chởm +chợ +chợn +chợp +chợt +chục +chụm +chụp +chụt +chủ +chủn +chủng +chứ +chứa +chức +chứng +chừ +chừa +chừng +chửa +chửi +chửng +chữ +chữa +chững +chực +co +coi +com +con +cong +coong +coóc +cu +cua +cui +cum +cun +cung +cuốc +cuối +cuốn +cuống +cuồn +cuồng +cuỗm +cuộc +cuội +cuộn +cuộng +cà +cài +càn +càng +cành +cào +càu +cày +cá +các +cách +cái +cám +cán +cáng +cánh +cáo +cáp +cát +cáu +cáy +câm +cân +câng +câu +cây +cãi +cò +còi +còm +còn +còng +có +cóc +cói +cóng +cóp +cót +cô +côi +côm +côn +công +cõi +cõng +cù +cùi +cùm +cùn +cùng +cú +cúa +cúc +cúi +cúm +cúng +cúp +cút +căm +căn +căng +cũ +cũi +cũn +cũng +cơ +cơi +cơm +cơn +cư +cưa +cưng +cưu +cương +cước +cưới +cướp +cười +cườm +cường +cưỡi +cưỡng +cạ +cạc +cạch +cạm +cạn +cạnh +cạo +cạp +cạu +cạy +cả +cải +cảm +cản +cảng +cảnh +cảo +cảu +cảy +cấc +cấm +cấn +cấp +cất +cấu +cấy +cầm +cần +cầu +cầy +cẩm +cẩn +cẩu +cẩy +cẫm +cẫn +cẫng +cận +cập +cật +cậu +cậy +cắc +cắm +cắn +cắp +cắt +cằm +cằn +cẳn +cẳng +cẵng +cặc +cặm +cặn +cặp +cặt +cọ +cọc +cọm +cọn +cọng +cọp +cọt +cỏ +cỏi +cỏm +cỏn +cỏng +cố +cốc +cối +cốm +cốn +cống +cốp +cốt +cồ +cồm +cồn +cồng +cổ +cổi +cổn +cổng +cỗ +cỗi +cộ +cộc +cội +cộm +cộn +cộng +cộp +cột +cớ +cớm +cớn +cớt +cờ +cời +cờn +cởi +cỡ +cỡi +cỡm +cỡn +cợn +cợt +cụ +cục +cụi +cụm +cụng +cụp +cụt +củ +của +củi +củn +củng +cứ +cứa +cức +cứng +cứt +cứu +cừ +cừu +cử +cửa +cửi +cửng +cửu +cữ +cữu +cự +cựa +cực +cựu +da +dai +dam +dan +dang +danh +dao +day +de +deo +di +dim +dinh +diêm +diên +diêu +diếc +diếp +diết +diếu +diềm +diều +diễm +diễn +diễu +diệc +diện +diệp +diệt +diệu +do +doa +doan +doanh +doi +dom +don +dong +doành +doá +doãi +doãn +doãng +doạ +du +dua +dun +dung +duy +duyên +duyệt +duềnh +duệ +duốc +duỗi +dà +dài +dàn +dàng +dành +dào +dàu +dày +dá +dác +dái +dám +dán +dáng +dát +dáy +dâm +dân +dâng +dâu +dây +dã +dãi +dãy +dè +dèn +dé +dép +dê +dênh +dì +dìa +dìm +dìu +dí +dích +dím +dính +díp +díu +dò +dòi +dòm +dòng +dó +dóc +dóm +dón +dót +dô +dôi +dông +dõi +dõng +dù +dùa +dùi +dùn +dùng +dúa +dúi +dúm +dún +dúng +dút +dăm +dăn +dăng +dĩ +dĩa +dĩnh +dũ +dũi +dũng +dơ +dơi +dư +dưa +dưng +dương +dưới +dướng +dường +dưỡng +dược +dượng +dượt +dạ +dạc +dại +dạm +dạn +dạng +dạo +dạt +dạy +dả +dải +dảy +dấm +dấn +dấp +dấu +dấy +dầm +dần +dầu +dẩn +dẫm +dẫn +dẫu +dẫy +dậm +dận +dập +dật +dậu +dậy +dắng +dắt +dằm +dằn +dằng +dẳng +dặc +dặm +dặn +dặng +dặt +dẹp +dẹt +dẻ +dẻo +dẽ +dế +dề +dềnh +dể +dễ +dện +dệt +dị +dịch +dịp +dịt +dịu +dọc +dọi +dọn +dọng +dọp +dỏ +dỏm +dỏng +dốc +dối +dốt +dồi +dồn +dỗ +dỗi +dội +dộng +dột +dớ +dớp +dờ +dời +dở +dởm +dỡ +dợ +dụ +dục +dụm +dụng +dứ +dứa +dức +dứt +dừ +dừa +dừng +dử +dửng +dữ +dự +dựa +dực +dựng +e +em +email +en +eng +eo +ga +gai +gam +gan +gang +ganh +gao +gau +gay +gen +ghe +ghen +ghi +ghim +ghiếc +ghiền +ghè +ghèn +ghé +ghém +ghép +ghét +ghê +ghì +ghìm +ghẹ +ghẹn +ghẹo +ghẻ +ghẽ +ghế +ghếch +ghề +ghềnh +ghểnh +ghệt +gi +gia +giai +giam +gian +giang +gianh +giao +gieo +gio +gioi +gion +giong +gip +giu +giua +giun +giuộc +già +giàn +giàng +giành +giào +giàu +giày +giá +giác +giám +gián +giáng +giáo +giáp +giát +giâm +giâu +giây +giã +giãi +giãn +giãy +gièm +gié +giéo +giê +giêng +giò +giòi +giòn +gió +gióc +giói +gión +gióng +giô +giôn +giông +giùi +giùm +giú +giúi +giúp +giăm +giăng +giũ +giũa +giơ +giương +giướng +giường +giượng +giạ +giại +giạng +giạt +giả +giải +giảm +giản +giảng +giảnh +giảo +giảu +giấc +giấm +giấp +giấu +giấy +giầm +giần +giầu +giầy +giẫm +giẫy +giậm +giận +giập +giật +giậu +giắn +giắt +giằm +giằn +giằng +giặc +giặm +giặn +giặt +giẹo +giẹp +giẻ +giếc +giếm +giếng +giết +giề +giền +giềng +giễu +giọ +giọc +giọi +giọng +giọt +giỏ +giỏi +giỏn +giỏng +giối +giống +giốt +giồ +giồi +giồng +giổi +giỗ +giộ +giội +giộp +giới +giờ +giời +giờn +giở +giỡn +giụa +giục +giụi +giủi +giừ +giữ +giữa +giựt +go +gom +gon +goá +goòng +gram +gu +guốc +guồi +guồng +guộc +gà +gài +gàn +gàng +gành +gào +gàu +gá +gác +gái +gán +gánh +gáo +gáp +gáu +gáy +gâm +gân +gâu +gây +gã +gãi +gãy +gì +gìm +gìn +gí +gích +gíp +gò +gòn +góc +gói +góp +gót +gô +gôm +gôn +gông +gõ +gù +gùi +gùn +gùng +gút +găm +găn +găng +gũi +gơ +gươm +gương +gườm +gường +gưỡng +gượm +gượng +gạ +gạc +gạch +gạn +gạnh +gạo +gạt +gả +gảy +gấc +gấm +gấp +gấu +gấy +gầm +gần +gầu +gầy +gẩm +gẫm +gẫu +gậm +gập +gật +gậy +gắm +gắn +gắng +gắp +gắt +gằm +gằn +gặc +gặm +gặn +gặng +gặp +gặt +gỉ +gọi +gọn +gọng +gọt +gỏi +gỏng +gốc +gối +gốm +gồ +gồi +gồm +gồng +gổ +gỗ +gộ +gộc +gội +gộp +gột +gớm +gờ +gờm +gờn +gở +gởi +gỡ +gợi +gợn +gợt +gụ +gục +gụi +gụt +gừ +gừng +gửi +gỵa +ha +hai +ham +han +hang +hanh +hao +hau +hay +he +hem +hen +heo +hi +hia +him +hiu +hiên +hiêng +hiếm +hiến +hiếng +hiếp +hiếu +hiềm +hiền +hiểm +hiển +hiểu +hiện +hiệp +hiệu +ho +hoa +hoan +hoang +hoay +hoe +hoen +hoi +hom +hon +hong +hoà +hoài +hoàn +hoàng +hoành +hoá +hoác +hoán +hoáy +hoãn +hoè +hoét +hoăm +hoăng +hoạ +hoạch +hoại +hoạn +hoạnh +hoạt +hoả +hoải +hoảng +hoảnh +hoắc +hoắm +hoắt +hoẳn +hoẵng +hoặc +hoẹ +hoẹt +hoẻn +hu +hua +hum +hun +hung +huy +huynh +huyên +huyết +huyền +huyễn +huyện +huyệt +huân +huê +huênh +huý +huých +huýt +huơ +huấn +huếch +huề +huệ +huống +huỳnh +huỵch +huỷ +hy +hà +hài +hàm +hàn +hàng +hành +hào +hàu +há +hác +hách +hái +hám +hán +háng +hánh +háo +hát +háu +háy +hâm +hân +hâu +hây +hãi +hãm +hãn +hãng +hãnh +hão +hãy +hè +hèm +hèn +hèo +hé +héc +héo +hét +hê +hên +hênh +hì +hình +hí +hích +híp +hít +hò +hòi +hòm +hòn +hòng +hóc +hói +hóm +hóng +hóp +hót +hô +hôi +hôm +hôn +hông +hõm +hù +hùa +hùm +hùn +hùng +hú +húc +húi +húng +húp +hút +hăm +hăng +hĩm +hĩnh +hũ +hũm +hơ +hơi +hơn +hư +hưng +hưu +hương +hươu +hước +hướm +hướng +hường +hưởng +hượm +hạ +hạc +hạch +hại +hạm +hạn +hạng +hạnh +hạo +hạp +hạt +hả +hải +hảm +hảng +hảo +hấn +hấng +hấp +hất +hấu +hấy +hầm +hầu +hầy +hẩm +hẩng +hẩu +hẩy +hẫng +hẫu +hậm +hận +hập +hậu +hắc +hắn +hắng +hắt +hằm +hằn +hằng +hẳn +hẵng +hặc +hẹ +hẹm +hẹn +hẹp +hẻm +hẻo +hếch +hến +hết +hếu +hề +hềnh +hể +hển +hểnh +hệ +hệch +hệt +hỉ +hỉnh +hịch +họ +học +họng +họp +hỏi +hỏm +hỏn +hỏng +hố +hốc +hối +hống +hốt +hồ +hồi +hồn +hồng +hổ +hổi +hổm +hổn +hổng +hỗ +hỗn +hỗng +hộ +hộc +hội +hộn +hộp +hột +hớ +hớm +hớn +hớp +hớt +hờ +hời +hờn +hở +hởi +hỡi +hợi +hợm +hợp +hợt +hục +hụi +hụm +hụp +hụt +hủ +hủi +hủn +hứa +hức +hứng +hừ +hừm +hừng +hử +hửng +hữ +hững +hữu +hự +hực +hựu +i +im +in +inh +internet +intranet +iu +ka +ke +kem +ken +keng +keo +kha +khai +kham +khan +khang +khanh +khao +khau +khay +khe +khem +khen +kheo +khi +khin +khinh +khiu +khiêm +khiên +khiêng +khiêu +khiếm +khiến +khiếp +khiết +khiếu +khiền +khiển +khiễng +kho +khoa +khoai +khoan +khoang +khoanh +khoe +khoeo +khom +khoào +khoá +khoác +khoái +khoán +khoáng +khoát +khoáy +khoèo +khoé +khoét +khoăm +khoăn +khoả +khoải +khoản +khoảng +khoảnh +khoắm +khoắn +khoắng +khoắt +khoằm +khoẻ +khu +khua +khui +khum +khung +khuy +khuya +khuynh +khuyên +khuyến +khuyết +khuyển +khuân +khuâng +khuây +khuê +khuôn +khuông +khuơ +khuất +khuấy +khuẩn +khuếch +khuỳnh +khuỵu +khuỷu +khà +khàn +khàng +khá +khác +khách +khái +khám +khán +kháng +khánh +kháo +kháp +khát +kháu +kháy +khâm +khân +khâu +khè +khèn +khèo +khé +khén +khéo +khép +khét +khê +khênh +khêu +khì +khìn +khí +khía +khích +khít +khíu +khò +khòm +khòng +khó +khóc +khói +khóm +khô +khôi +khôn +không +khù +khùng +khú +khúc +khúm +khăm +khăn +khăng +khĩnh +khơ +khơi +khư +khươi +khươm +khươn +khương +khước +khướt +khướu +khạc +khạng +khạo +khả +khải +khảm +khản +khảng +khảnh +khảo +khảy +khấc +khấm +khấn +khấp +khất +khấu +khẩn +khẩu +khẩy +khập +khật +khắc +khắm +khắng +khắp +khắt +khằng +khẳm +khẳn +khẳng +khặc +khẹc +khẻ +khẻo +khẽ +khế +khề +khều +khểnh +khệ +khệnh +khỉ +khỉnh +khịa +khịt +khọm +khỏi +khỏng +khố +khốc +khối +khốn +khống +khổ +khổn +khổng +khớ +khớp +khờ +khởi +khụ +khục +khụt +khủ +khủng +khứ +khứa +khứng +khứu +khừ +khừng +khử +khựng +ki +kia +kim +kinh +kiêm +kiên +kiêng +kiêu +kiếm +kiến +kiếp +kiết +kiếu +kiềm +kiền +kiềng +kiều +kiểm +kiểng +kiểu +kiễng +kiệm +kiện +kiệt +kiệu +kè +kèm +kèn +kèo +ké +kéc +kém +kén +kéo +kép +két +kê +kênh +kêu +kì +kìa +kìm +kình +kí +kích +kín +kính +kíp +kít +ký +kĩ +kẹ +kẹn +kẹo +kẹp +kẹt +kẻ +kẻng +kẻo +kẽ +kẽm +kẽo +kế +kếch +kếp +kết +kề +kềm +kền +kềnh +kều +kể +kệ +kệch +kệnh +kỉ +kỉnh +kị +kịch +kịp +kịt +kỳ +kỵ +kỷ +kỹ +la +lai +lam +lan +lang +lanh +lao +lau +lay +le +lem +len +leng +leo +li +lia +lim +lin +linh +liu +liêm +liên +liêng +liêu +liếc +liếm +liến +liếng +liếp +liềm +liền +liều +liểng +liễm +liễn +liễu +liệm +liệng +liệp +liệt +liệu +lo +loa +loan +loang +loanh +loay +loe +loen +loi +lom +lon +long +loong +loà +loài +loàn +loàng +loáng +loát +loãng +loè +loé +loét +loăng +loạc +loại +loạn +loạng +loạt +loảng +loắt +loằng +loẹt +lu +lua +lui +lum +lung +luya +luyến +luyện +luân +luôm +luôn +luông +luýnh +luấn +luẩn +luận +luật +luốc +luống +luốt +luồn +luồng +luỗng +luộc +luộm +luỵ +luỹ +ly +là +lài +làm +làn +làng +lành +lào +làu +lá +lác +lách +lái +lán +láng +lánh +láo +láp +lát +láu +láy +lâm +lân +lâng +lâu +lây +lã +lãi +lãm +lãn +lãng +lãnh +lão +lè +lèm +lèn +lèo +lé +léc +lém +lén +léng +léo +lép +lét +lê +lên +lênh +lêu +lì +lìa +lìm +lình +lìu +lí +lính +líp +lít +líu +lò +lòi +lòm +lòn +lòng +ló +lóc +lói +lóm +lóng +lóp +lót +lô +lôi +lôm +lông +lõ +lõi +lõm +lõng +lù +lùa +lùi +lùm +lùn +lùng +lú +lúa +lúc +lúi +lúm +lún +lúng +lúp +lút +lý +lăm +lăn +lăng +lĩnh +lũ +lũi +lũm +lũn +lũng +lơ +lơi +lơn +lư +lưng +lưu +lươm +lươn +lương +lưới +lướng +lướt +lười +lườm +lườn +lường +lưỡi +lưỡng +lược +lượm +lượn +lượng +lượt +lạ +lạc +lạch +lại +lạm +lạn +lạng +lạnh +lạo +lạp +lạt +lạu +lạy +lả +lải +lảm +lảng +lảnh +lảo +lảu +lảy +lấc +lấm +lấn +lấp +lất +lấy +lầm +lần +lầu +lầy +lẩm +lẩn +lẩu +lẩy +lẫm +lẫn +lẫy +lận +lập +lật +lậu +lắc +lắm +lắng +lắp +lắt +lằm +lằn +lằng +lẳm +lẳn +lẳng +lẵng +lặc +lặm +lặn +lặng +lặp +lặt +lẹ +lẹm +lẹn +lẹo +lẹp +lẹt +lẻ +lẻm +lẻn +lẻng +lẻo +lẽ +lẽn +lẽo +lếch +lết +lếu +lề +lềnh +lều +lể +lểu +lễ +lễu +lệ +lệch +lệnh +lỉm +lỉnh +lị +lịa +lịch +lịm +lịnh +lịu +lọ +lọc +lọi +lọm +lọn +lọng +lọt +lỏi +lỏm +lỏn +lỏng +lố +lốc +lối +lốm +lốn +lốp +lốt +lồ +lồi +lồm +lồn +lồng +lổ +lổm +lổn +lổng +lỗ +lỗi +lộ +lộc +lội +lộm +lộn +lộng +lộp +lột +lớ +lới +lớn +lớp +lớt +lờ +lời +lờm +lờn +lở +lởi +lởm +lởn +lỡ +lỡm +lợ +lợi +lợm +lợn +lợp +lợt +lụ +lụa +lục +lụi +lụn +lụng +lụp +lụt +lủ +lủi +lủm +lủn +lủng +lứa +lức +lứt +lừ +lừa +lừng +lử +lửa +lửng +lữ +lữa +lững +lự +lựa +lực +lựng +lựu +lỵ +ma +mai +man +mang +manh +mao +mau +may +me +mem +men +meo +mi +mia +mim +min +minh +miên +miêu +miến +miếng +miết +miếu +miền +miều +miễn +miễu +miện +miệng +miệt +mo +moay +moi +mom +mon +mong +moóc +mu +mua +mui +mum +mun +mung +muôi +muôn +muông +muối +muốn +muống +muốt +muồi +muỗi +muỗm +muỗng +muội +muộn +mà +mài +màn +màng +mành +mào +màu +mày +má +mác +mách +mái +mán +máng +mánh +máo +mát +máu +máy +mâm +mân +mâng +mâu +mây +mã +mãi +mãn +mãng +mãnh +mão +mè +mèm +mèn +mèng +mèo +mé +mém +mén +méo +mép +mét +mê +mên +mênh +mì +mìn +mình +mí +mía +mích +mím +míp +mít +míu +mò +mòi +mòm +mòn +mòng +mó +móc +mói +móm +món +móng +móp +mót +mô +môi +môm +môn +mông +mõ +mõm +mù +mùa +mùi +mùn +mùng +mú +múa +múc +múi +múm +mún +múp +mút +măm +măn +măng +mĩ +mĩm +mũ +mũi +mũm +mơ +mơi +mơn +mưa +mưu +mươi +mương +mướn +mướp +mướt +mười +mường +mượn +mượt +mạ +mạc +mạch +mại +mạn +mạng +mạnh +mạo +mạp +mạt +mạy +mả +mải +mảng +mảnh +mảy +mấn +mấp +mất +mấu +mấy +mầm +mần +mầng +mầu +mẩm +mẩn +mẩy +mẫm +mẫn +mẫu +mận +mập +mật +mậu +mắc +mắm +mắn +mắng +mắt +mằn +mẳn +mặc +mặn +mặt +mẹ +mẹo +mẹp +mẹt +mẻ +mẻo +mẽ +mế +mếch +mến +mếu +mề +mềm +mền +mễ +mệ +mệnh +mệt +mỉ +mỉa +mỉm +mị +mịch +mịn +mịnh +mịt +mọc +mọi +mọn +mọng +mọt +mỏ +mỏi +mỏm +mỏng +mố +mốc +mối +mống +mốt +mồ +mồi +mồm +mồn +mồng +mổ +mổng +mỗ +mỗi +mộ +mộc +mộng +một +mớ +mới +mớm +mớp +mờ +mời +mờm +mở +mởn +mỡ +mợ +mụ +mục +mụi +mụn +mụp +mủ +mủi +mủm +mủn +mủng +mứa +mức +mứt +mứu +mừng +mửa +mự +mựa +mực +mỹ +na +nai +nam +nan +nang +nanh +nao +nau +nay +ne +nem +nen +neo +nga +ngai +ngam +ngan +ngang +ngao +ngau +ngay +nghe +nghi +nghinh +nghiu +nghiêm +nghiên +nghiêng +nghiêu +nghiến +nghiền +nghiễm +nghiệm +nghiện +nghiệp +nghiệt +nghè +nghèn +nghèo +nghé +nghén +nghét +nghê +nghênh +nghêu +nghì +nghìn +nghí +nghít +nghĩ +nghĩa +nghẹn +nghẹo +nghẹt +nghẻo +nghẽn +nghẽo +nghếch +nghề +nghều +nghển +nghểnh +nghễ +nghễnh +nghễu +nghệ +nghệch +nghện +nghỉ +nghỉm +nghỉn +nghỉnh +nghỉu +nghị +nghịch +nghịt +nghịu +ngoa +ngoan +ngoang +ngoao +ngoay +ngoe +ngoi +ngon +ngong +ngoài +ngoàm +ngoác +ngoách +ngoái +ngoáo +ngoáy +ngoã +ngoãn +ngoèo +ngoé +ngoéo +ngoét +ngoại +ngoạm +ngoạn +ngoải +ngoảng +ngoảnh +ngoảy +ngoắc +ngoắt +ngoằn +ngoằng +ngoẵng +ngoặc +ngoặt +ngoẻn +ngu +nguy +nguyên +nguyền +nguyện +nguyệt +nguýt +nguẩy +nguồi +nguồn +nguội +nguỵ +nguỷu +ngà +ngài +ngàm +ngàn +ngàng +ngành +ngào +ngàu +ngày +ngác +ngách +ngái +ngám +ngán +ngáng +ngáo +ngáp +ngát +ngáu +ngáy +ngâm +ngân +ngâu +ngây +ngã +ngãi +ngãng +ngão +ngò +ngòi +ngòm +ngòn +ngòng +ngó +ngóc +ngói +ngóm +ngón +ngóng +ngóp +ngót +ngô +ngôi +ngôn +ngông +ngõ +ngõi +ngõng +ngùi +ngùng +ngú +ngúc +ngúng +ngút +ngăm +ngăn +ngũ +ngơ +ngơi +ngơm +ngơn +ngư +ngưa +ngưng +ngưu +ngươi +ngước +người +ngường +ngưởng +ngưỡng +ngược +ngượng +ngạc +ngạch +ngại +ngạn +ngạnh +ngạo +ngạt +ngả +ngải +ngảnh +ngấc +ngấm +ngấn +ngấp +ngất +ngấu +ngấy +ngầm +ngần +ngầu +ngầy +ngẩm +ngẩn +ngẩng +ngẫm +ngẫn +ngẫu +ngậm +ngận +ngập +ngật +ngậu +ngậy +ngắc +ngắm +ngắn +ngắt +ngằn +ngẳng +ngẵng +ngặt +ngọ +ngọc +ngọn +ngọng +ngọt +ngỏ +ngỏm +ngỏn +ngỏng +ngố +ngốc +ngốn +ngốt +ngồi +ngồm +ngồn +ngồng +ngổ +ngổm +ngổn +ngỗ +ngỗng +ngộ +ngộc +ngộn +ngột +ngớ +ngớn +ngớp +ngớt +ngờ +ngời +ngờm +ngỡ +ngợ +ngợi +ngợm +ngợp +ngụ +ngụa +ngục +ngụm +ngụp +ngủ +ngủi +ngủn +ngứ +ngứa +ngứt +ngừ +ngừa +ngừng +ngửa +ngửi +ngửng +ngữ +ngự +ngựa +ngực +nha +nhai +nham +nhan +nhang +nhanh +nhao +nhau +nhay +nhe +nhem +nhen +nheo +nhi +nhinh +nhiu +nhiên +nhiêu +nhiếc +nhiếp +nhiều +nhiễm +nhiễn +nhiễu +nhiệm +nhiệt +nho +nhoai +nhoang +nhoay +nhoe +nhoen +nhoi +nhom +nhong +nhoà +nhoài +nhoàm +nhoá +nhoáng +nhoáy +nhoè +nhoèn +nhoé +nhoét +nhoạng +nhoẹt +nhoẻn +nhu +nhui +nhung +nhuyễn +nhuôm +nhuần +nhuận +nhuế +nhuệ +nhuốc +nhuốm +nhuộm +nhuỵ +nhà +nhài +nhàm +nhàn +nhàng +nhành +nhào +nhàu +nhày +nhá +nhác +nhách +nhái +nhám +nháng +nhánh +nháo +nháp +nhát +nháy +nhâm +nhân +nhâng +nhâu +nhây +nhã +nhãi +nhãn +nhãng +nhão +nhè +nhèm +nhèo +nhé +nhén +nhéo +nhép +nhét +nhênh +nhì +nhìn +nhí +nhía +nhích +nhím +nhín +nhíp +nhít +nhíu +nhò +nhòm +nhó +nhóc +nhói +nhóm +nhón +nhóng +nhóp +nhót +nhô +nhôi +nhôm +nhôn +nhông +nhõ +nhõm +nhõn +nhù +nhùi +nhùn +nhùng +nhú +nhúa +nhúc +nhúm +nhún +nhúng +nhút +nhăm +nhăn +nhăng +nhĩ +nhũ +nhũn +nhũng +nhơ +nhơi +nhơm +nhơn +như +nhưng +nhương +nhướng +nhường +nhưỡng +nhược +nhượng +nhạc +nhạn +nhạnh +nhạo +nhạp +nhạt +nhạy +nhả +nhải +nhảm +nhản +nhảnh +nhảu +nhảy +nhấc +nhấm +nhấn +nhấp +nhất +nhầm +nhần +nhầy +nhẩm +nhẫn +nhẫy +nhậm +nhận +nhập +nhật +nhậu +nhậy +nhắc +nhắm +nhắn +nhắng +nhắp +nhắt +nhằm +nhằn +nhằng +nhẳn +nhẳng +nhẵn +nhẵng +nhặm +nhặn +nhặng +nhặt +nhẹ +nhẹm +nhẹn +nhẹo +nhẹp +nhẹt +nhẻ +nhẻm +nhẽ +nhẽo +nhện +nhệu +nhỉ +nhỉnh +nhị +nhịn +nhịp +nhịt +nhịu +nhọ +nhọc +nhọn +nhọt +nhỏ +nhỏm +nhỏng +nhố +nhốc +nhối +nhốn +nhốt +nhồi +nhồm +nhồn +nhồng +nhổ +nhổm +nhổn +nhộn +nhộng +nhột +nhớ +nhớm +nhớn +nhớp +nhớt +nhờ +nhời +nhờn +nhở +nhởn +nhỡ +nhợ +nhợt +nhụ +nhụa +nhục +nhụi +nhụng +nhụt +nhủ +nhủi +nhủn +nhứ +nhức +nhứt +nhừ +nhử +nhửng +những +nhự +nhựa +nhựt +ni +nia +nin +ninh +niu +niêm +niên +niêu +niết +niềm +niền +niềng +niễng +niệm +niệt +niệu +no +noa +noi +nom +non +nong +noãn +nua +nung +nuôi +nuông +nuốc +nuối +nuốm +nuốt +nuộc +nuột +nà +nài +nàn +nàng +nành +nào +này +ná +nác +nách +nái +nám +nán +náng +nánh +náo +nát +náu +náy +nân +nâng +nâu +nây +nã +não +nãy +nè +nèo +né +ném +nén +néo +nép +nét +nê +nêm +nên +nêu +nì +nình +ních +nín +nính +níp +nít +níu +nò +nòi +nó +nóc +nói +nón +nóng +nót +nô +nôi +nôm +nôn +nông +nõ +nõn +nùi +nùn +nùng +núc +núi +núm +núng +núp +nút +năm +năn +năng +nĩa +nũng +nơ +nơi +nơm +nư +nưa +nưng +nương +nước +nướng +nườm +nường +nược +nượp +nạ +nạc +nại +nạm +nạn +nạng +nạnh +nạo +nạp +nạt +nạy +nả +nải +nản +nảy +nấc +nấm +nấng +nấp +nấu +nấy +nầm +nần +nầy +nẩy +nẫng +nẫu +nậm +nậng +nập +nậu +nậy +nắc +nắm +nắn +nắng +nắp +nằm +nằn +nằng +nặc +nặn +nặng +nẹp +nẹt +nẻ +nẻo +nếm +nến +nếp +nết +nếu +nề +nền +nể +nệ +nệm +nện +nỉ +nịch +nịnh +nịt +nịu +nọ +nọc +nọn +nọng +nọt +nỏ +nỏi +nố +nốc +nối +nống +nốt +nồ +nồi +nồm +nồng +nổ +nổi +nỗ +nỗi +nỗng +nộ +nội +nộm +nộn +nộp +nột +nớ +nới +nớp +nớt +nờ +nờm +nở +nỡ +nỡm +nợ +nợp +nụ +nục +nủa +nứa +nức +nứt +nừng +nửa +nữ +nữa +nự +nực +nựng +o +oa +oai +oan +oang +oanh +oe +oi +om +ong +oà +oàm +oàng +oành +oác +oách +oái +oán +oát +oé +oăm +oăng +oạch +oại +oạp +oải +oản +oắt +oằn +oẳn +oẳng +oặt +oẹ +oẻ +pa +palăng +pan +pao +pe +pha +phai +phang +phanh +phao +phau +phay +phe +phen +pheo +phi +phim +phin +phinh +phiu +phiên +phiêu +phiếm +phiến +phiết +phiếu +phiền +phiện +phiệt +pho +phoi +phom +phong +phu +phui +phun +phung +phuy +phà +phàm +phàn +phàng +phành +phào +phá +phác +phách +phái +phán +pháo +pháp +phát +phân +phây +phè +phèn +phèng +phèo +phéng +phép +phét +phê +phên +phì +phìa +phình +phí +phía +phích +phím +phính +phò +phòi +phòng +phó +phóc +phóng +phót +phô +phôi +phôm +phông +phù +phùn +phùng +phú +phúc +phún +phúng +phút +phăm +phăn +phăng +phĩnh +phũ +phơ +phơi +phơn +phưng +phương +phước +phướn +phướng +phường +phưỡn +phượng +phượu +phạch +phạm +phạn +phạng +phạt +phả +phải +phản +phảng +phảy +phấn +phấp +phất +phầm +phần +phẩm +phẩn +phẩy +phẫn +phẫu +phận +phập +phật +phắc +phắn +phắp +phắt +phẳng +phẹt +phế +phếch +phết +phề +phềnh +phều +phễn +phễu +phệ +phệnh +phệt +phỉ +phỉnh +phị +phịa +phịch +phịt +phịu +phọng +phọt +phỏng +phố +phốc +phối +phốp +phồ +phồm +phồn +phồng +phổ +phổi +phổng +phỗng +phộng +phới +phớt +phờ +phở +phỡn +phụ +phục +phụng +phụt +phủ +phủi +phứa +phức +phứt +phừng +phựa +phựt +pi +pin +ping +pom +pu +pác +páp +pê +pô +pông +pơ +qua +quai +quan +quang +quanh +quao +quau +quay +que +quen +queo +quoàng +quoạng +quoắt +quy +quyên +quyến +quyết +quyền +quyển +quyện +quyệt +quà +quài +quàn +quàng +quành +quào +quàu +quày +quá +quác +quách +quái +quán +quáng +quánh +quáo +quát +quáu +quân +quây +quãng +què +quèn +quèo +qué +quén +quéo +quét +quê +quên +quít +quý +quýnh +quýt +quăm +quăn +quăng +quơ +quạ +quạc +quạch +quại +quạng +quạnh +quạt +quạu +quạy +quả +quải +quản +quảng +quảy +quấc +quấn +quất +quấy +quần +quầng +quầy +quẩn +quẩng +quẩy +quẫn +quẫy +quận +quật +quậy +quắc +quắm +quắn +quắp +quắt +quằn +quẳm +quẳng +quặc +quặm +quặn +quặng +quặp +quặt +quẹo +quẹt +quẻ +quẽ +quế +quết +quếu +quềnh +quều +quệ +quệch +quện +quệnh +quệt +quịt +quốc +quớ +quờ +quở +quởn +quỳ +quỳnh +quỵ +quỵt +quỷ +quỷnh +quỹ +ra +rai +ram +ran +rang +ranh +rao +rau +ray +re +ren +reng +reo +ri +ria +rim +rin +rinh +riu +riêng +riêu +riết +riếu +riềm +riềng +riệt +ro +roa +roi +rom +rong +ru +rua +rum +run +rung +ruốc +ruối +ruồi +ruồng +ruổi +ruỗng +ruộm +ruộng +ruột +rà +rài +ràn +ràng +rành +rào +rày +rá +rác +rách +rái +rám +rán +ráng +ráo +ráp +rát +ráy +râm +rân +râu +rây +rã +rãi +rãnh +rão +rãy +rè +rèm +rèn +rèo +ré +rén +réo +rét +rê +rên +rêu +rì +rìa +rình +rìu +rí +rích +rít +ríu +rò +ròi +ròm +ròng +ró +róc +rói +róm +rón +róng +rót +rô +rôm +rông +rõ +rõi +rù +rùa +rùm +rùn +rùng +rú +rúc +rúi +rúm +rún +rúng +rúp +rút +răm +răn +răng +rĩ +rũ +rũa +rơ +rơi +rơm +rơn +rư +rưa +rưng +rươi +rươm +rương +rước +rưới +rướm +rướn +rười +rườm +rườn +rường +rưởi +rưỡi +rượi +rượn +rượt +rượu +rạ +rạc +rạch +rạn +rạng +rạo +rạp +rạt +rạy +rả +rải +rảnh +rảo +rảy +rấm +rấn +rấp +rất +rầm +rần +rầu +rầy +rẩm +rẩy +rẫm +rẫy +rậm +rận +rập +rật +rắc +rắm +rắn +rắp +rắt +rằm +rằn +rằng +rặng +rặt +rẹo +rẹt +rẻ +rẻng +rẻo +rẽ +rế +rếch +rến +rếp +rết +rề +rền +rều +rể +rểnh +rễ +rệ +rệch +rện +rệp +rệt +rệu +rỉ +rỉa +rỉnh +rịa +rịch +rịn +rịt +rọ +rọc +rọi +rọm +rọt +rỏ +rỏm +rỏn +rốc +rối +rốn +rống +rốp +rốt +rồ +rồi +rồm +rồng +rổ +rổi +rổng +rỗ +rỗi +rỗng +rộ +rộc +rộm +rộn +rộng +rộp +rớ +rớm +rớt +rờ +rời +rờm +rờn +rở +rởm +rởn +rỡ +rỡn +rợ +rợi +rợm +rợn +rợp +rợt +rục +rụi +rụng +rụt +rủ +rủa +rủi +rủn +rủng +rứa +rức +rứt +rừng +rửa +rửng +rữa +rựa +rực +sa +sai +sam +san +sang +sanh +sao +sau +say +se +sen +seo +si +sim +sin +sinh +siu +siêng +siêu +siết +siểm +siểng +siễn +so +soa +soi +son +song +soong +soà +soài +soái +soán +soát +soóc +soạn +soạng +soạt +su +sui +sum +sun +sung +suy +suyển +suyễn +suê +suôn +suông +suý +suýt +suất +suối +suốt +suồng +suỵt +sà +sài +sàm +sàn +sàng +sành +sào +sá +sác +sách +sái +sám +sán +sáng +sánh +sáo +sáp +sát +sáu +sâm +sân +sâu +sây +sã +sãi +sè +sèo +séc +sém +sét +sê +sên +sênh +sêu +sì +sình +sính +sít +sò +sòi +sòm +sòng +sóc +sói +sóm +són +sóng +sót +sô +sôi +sông +sõi +sõng +sù +sùi +sùm +sùng +sú +súc +sún +súng +súp +sút +săm +săn +săng +sĩ +sũng +sơ +sơm +sơn +sư +sưa +sưng +sưu +sương +sướng +sướt +sườn +sường +sưởi +sượng +sượt +sạ +sạch +sạm +sạn +sạo +sạp +sạt +sả +sải +sản +sảng +sảnh +sảo +sảy +sấm +sấn +sấp +sất +sấu +sấy +sầm +sần +sầu +sầy +sẩm +sẩn +sẩy +sẫm +sậm +sập +sật +sậu +sậy +sắc +sắm +sắn +sắng +sắp +sắt +sằng +sẵn +sặc +sặm +sặt +sẹ +sẹm +sẹo +sẻ +sẻn +sẽ +sến +sếp +sếu +sề +sền +sể +sểnh +sễ +sệ +sệt +sỉ +sỉa +sỉnh +sị +sịa +sịch +sịt +sọ +sọc +sọm +sọt +sỏ +sỏi +số +sốc +sống +sốp +sốt +sồ +sồi +sồn +sồng +sổ +sổi +sổng +sỗ +sộ +sộp +sột +sớ +sới +sớm +sớn +sớt +sờ +sờm +sờn +sở +sởi +sởn +sỡ +sợ +sợi +sụ +sụa +sục +sụm +sụn +sụp +sụt +sủa +sủi +sủng +sứ +sứa +sức +sứt +sừn +sừng +sử +sửa +sửng +sửu +sữa +sững +sự +sực +sựng +sựt +ta +tai +tam +tan +tang +tanh +tao +tay +te +tem +ten +teng +teo +tha +thai +tham +than +thang +thanh +thao +thau +thay +the +then +theo +thi +thia +thin +thinh +thiu +thiêm +thiên +thiêng +thiêu +thiếc +thiến +thiếp +thiết +thiếu +thiềm +thiền +thiềng +thiều +thiểm +thiển +thiểu +thiện +thiệp +thiệt +thiệu +tho +thoa +thoai +thoang +thoi +thom +thon +thong +thoà +thoàn +thoá +thoái +thoán +thoáng +thoát +thoăn +thoại +thoạt +thoả +thoải +thoảng +thoắng +thoắt +thu +thua +thui +thum +thun +thung +thuyên +thuyết +thuyền +thuê +thuôn +thuý +thuần +thuẫn +thuận +thuật +thuế +thuể +thuốc +thuốn +thuồn +thuồng +thuổng +thuỗn +thuộc +thuộm +thuở +thuỳ +thuỵ +thuỷ +thà +thài +thàm +thành +thào +thày +thá +thác +thách +thái +thám +thán +tháng +thánh +tháo +tháp +tháu +tháy +thâm +thân +thâu +thây +thãi +thè +thèm +thèn +thèo +thé +thép +thét +thê +thêm +thênh +thêu +thì +thìa +thìn +thình +thìu +thí +thía +thích +thím +thín +thính +thíp +thít +thò +thòi +thòm +thòng +thó +thóc +thói +thóp +thót +thô +thôi +thôn +thông +thõng +thù +thùa +thùi +thùm +thùng +thú +thúc +thúi +thúng +thút +thăm +thăn +thăng +thũng +thơ +thơi +thơm +thơn +thư +thưa +thưng +thương +thước +thướt +thườn +thường +thưởng +thưỡi +thưỡn +thược +thượng +thượt +thạc +thạch +thạnh +thạo +thạp +thả +thải +thảm +thản +thảng +thảnh +thảo +thảy +thấm +thấp +thất +thấu +thấy +thầm +thần +thầu +thầy +thẩm +thẩn +thẩu +thẫm +thẫn +thậm +thận +thập +thật +thắc +thắm +thắn +thắng +thắp +thắt +thằn +thằng +thẳm +thẳng +thặng +thẹn +thẹo +thẹp +thẻ +thẻo +thẽ +thế +thếch +thếp +thết +thề +thềm +thều +thể +thểu +thệ +thện +thỉ +thỉnh +thỉu +thị +thịch +thịnh +thịt +thịu +thọ +thọc +thọt +thỏ +thỏi +thỏm +thố +thốc +thối +thốn +thống +thốt +thồ +thồi +thồm +thồn +thổ +thổi +thổn +thộc +thộn +thộp +thớ +thớt +thờ +thời +thờn +thở +thợ +thợt +thụ +thục +thụi +thụng +thụp +thụt +thủ +thủa +thủi +thủm +thủng +thứ +thức +thừ +thừa +thừng +thử +thửa +thững +thự +thực +ti +tia +tim +tin +tinh +tiu +tivi +tiêm +tiên +tiêng +tiêu +tiếc +tiếm +tiến +tiếng +tiếp +tiết +tiếu +tiềm +tiền +tiều +tiểu +tiễn +tiễu +tiệc +tiệm +tiện +tiệp +tiệt +to +toa +toan +toang +toanh +toe +toen +toi +tom +ton +tong +toong +tout +toà +toài +toàn +toàng +toác +toái +toán +toáng +toát +toáy +toè +toèn +toé +toét +toòng +toạ +toạc +toại +toả +toản +toẹt +toẻ +toẽ +tra +trai +tram +tran +trang +tranh +trao +trau +tre +treo +tri +trinh +triêng +triêu +triến +triết +triền +triềng +triều +triển +triện +triệng +triệt +triệu +tro +troi +tron +trong +tru +trui +trun +trung +truy +truyền +truyện +truân +truông +truất +truật +truồng +truột +truỵ +trà +trài +tràm +tràn +tràng +trành +trào +tràu +trày +trá +trác +trách +trái +trám +trán +tráng +tránh +tráo +tráp +trát +trâm +trân +trâng +trâu +trây +trã +trãi +trè +trèm +trèn +trèo +trém +tréo +trét +trê +trên +trêu +trì +trình +trìu +trí +trích +trít +trò +tròi +tròm +tròn +tròng +tróc +trói +tróm +tróng +trót +trô +trôi +trôm +trôn +trông +trõm +trõn +trù +trùi +trùm +trùn +trùng +trú +trúc +trúm +trúng +trút +trăm +trăn +trăng +trĩ +trĩnh +trĩu +trũi +trũng +trơ +trơi +trơn +trưa +trưng +trương +trước +trướng +trườn +trường +trưởng +trưỡng +trượng +trượt +trạc +trạch +trại +trạm +trạng +trạo +trạy +trả +trải +trảm +trảng +trảo +trảu +trảy +trấn +trấp +trấu +trầm +trần +trầu +trầy +trẩn +trẩu +trẩy +trẫm +trậm +trận +trập +trật +trắc +trắm +trắng +trắt +trằm +trằn +trặc +trặn +trẹ +trẹo +trẹt +trẻ +trẻo +trẽ +trẽn +trếch +trết +trề +trễ +trệ +trệch +trệt +trệu +trỉa +trị +trịa +trịch +trịnh +trịt +trọ +trọc +trọi +trọn +trọng +trọt +trỏ +trỏi +trỏng +trố +trốc +trối +trốn +trống +trồ +trồi +trồng +trổ +trổi +trổng +trỗ +trộ +trộc +trội +trộm +trộn +trớ +trớn +trớp +trớt +trờ +trời +trờn +trở +trợ +trợn +trợt +trụ +trụa +trục +trụi +trụm +trụn +trụng +trụp +trụt +trủ +trứ +trứng +trừ +trừa +trừng +trửng +trữ +trự +trực +tu +tua +tui +tum +tun +tung +tuy +tuyn +tuyên +tuyến +tuyết +tuyền +tuyển +tuyệt +tuân +tuôn +tuông +tuý +tuấn +tuất +tuần +tuế +tuếch +tuệ +tuệch +tuốt +tuồn +tuồng +tuổi +tuộc +tuột +tuỳ +tuỵ +tuỷ +ty +tà +tài +tàn +tàng +tành +tào +tàu +tày +tá +tác +tách +tái +tám +tán +táng +tánh +táo +táp +tát +táu +táy +tâm +tân +tâng +tâu +tây +tã +tãi +tè +tèm +tèn +tèo +té +téc +tém +tép +tét +tê +têm +tên +tênh +têt +têu +tì +tìm +tình +tí +tía +tích +tím +tín +tính +típ +tít +tíu +tò +tòi +tòm +tòn +tòng +tó +tóc +tói +tóm +tóp +tót +tô +tôi +tôm +tôn +tông +tõm +tù +tùm +tùng +tú +túc +túi +túm +túng +túp +tút +tăm +tăn +tăng +tĩ +tĩnh +tĩu +tũm +tơ +tơi +tư +tưa +tưng +tươi +tươm +tương +tước +tưới +tướn +tướng +tướp +tướt +tườm +tường +tườu +tưởi +tưởng +tược +tượng +tượp +tượt +tạ +tạc +tạch +tại +tạm +tạng +tạnh +tạo +tạp +tạt +tả +tải +tản +tảng +tảo +tấc +tấm +tấn +tấp +tất +tấu +tấy +tầm +tần +tầng +tầy +tẩm +tẩn +tẩu +tẩy +tận +tập +tật +tậu +tắc +tắm +tắn +tắp +tắt +tằm +tằn +tằng +tẳn +tặc +tặn +tặng +tẹo +tẹp +tẹt +tẻ +tẻm +tẻo +tẽ +tẽn +tế +tếch +tết +tếu +tề +tềnh +tể +tểnh +tễ +tễnh +tệ +tệp +tỉ +tỉa +tỉm +tỉnh +tị +tịch +tịnh +tịt +tịu +tọc +tọng +tọp +tọt +tỏ +tỏi +tỏm +tỏng +tố +tốc +tối +tốn +tống +tốp +tốt +tồ +tồi +tồn +tồng +tổ +tổn +tổng +tộ +tộc +tội +tột +tớ +tới +tớn +tớp +tớt +tờ +tời +tởm +tợ +tợn +tợp +tụ +tục +tụi +tụm +tụng +tụt +tủ +tủa +tủi +tủm +tủn +tứ +tứa +tức +từ +từng +tử +tửa +tửng +tửu +tự +tựa +tựu +tỵ +tỷ +u +um +un +ung +uy +uyên +uyển +uôm +uý +uất +uẩn +uẩy +uế +uể +uốn +uống +uổng +uột +uở +uỳnh +uỵch +uỷ +v +va +vai +van +vang +vanh +vao +vay +ve +ven +veo +vi +vinh +viêm +viên +viếng +viết +viền +viển +viễn +việc +viện +việt +vo +voan +voi +von +vong +vu +vua +vui +vun +vung +vuông +vuốt +vuột +và +vài +vàm +vàn +vàng +vành +vào +vày +vá +vác +vách +vái +ván +váng +vánh +váo +váp +vát +váy +vâm +vân +vâng +vây +vã +vãi +vãn +vãng +vãnh +vè +vèo +vé +véc +vén +véo +vét +vê +vên +vênh +vêu +vì +ví +vía +vích +vít +víu +vò +vòi +vòm +vòn +vòng +vó +vóc +vói +vón +vóng +vót +vô +vôi +vôn +vông +võ +võng +vù +vùa +vùi +vùn +vùng +vú +vúc +vút +văn +văng +vĩ +vĩnh +vũ +vũm +vũng +vơ +vơi +vưng +vưu +vươn +vương +vướng +vườn +vưởng +vược +vượn +vượng +vượt +vạ +vạc +vạch +vại +vạm +vạn +vạng +vạnh +vạp +vạt +vạy +vả +vải +vảng +vảy +vấn +vấp +vất +vấu +vấy +vần +vầng +vầu +vầy +vẩn +vẩu +vẩy +vẫn +vẫy +vậm +vận +vập +vật +vậy +vắc +vắn +vắng +vắt +vằm +vằn +vằng +vẳng +vặc +vặn +vặt +vẹm +vẹn +vẹo +vẹt +vẻ +vẻn +vẻo +vẽ +vế +vếch +vết +vếu +về +vền +vều +vểnh +vệ +vện +vệt +vỉ +vỉa +vị +vịm +vịn +vịnh +vịt +vọ +vọc +vọi +vọng +vọp +vọt +vỏ +vỏn +vỏng +vố +vốc +vối +vốn +vống +vồ +vồi +vồn +vồng +vổ +vổng +vỗ +vội +vớ +với +vớt +vờ +vời +vờn +vở +vởn +vỡ +vợ +vợi +vợt +vụ +vục +vụn +vụng +vụt +vức +vứt +vừa +vừng +vửng +vữa +vững +vựa +vực +vựng +web +xa +xam +xan +xang +xanh +xao +xay +xe +xem +xen +xeo +xi +xia +xim +xin +xinh +xit +xiêm +xiên +xiêu +xiếc +xiết +xiềng +xiểm +xiển +xiểng +xo +xoa +xoan +xoang +xoay +xoe +xoen +xoi +xom +xon +xong +xoong +xoà +xoài +xoàm +xoàn +xoàng +xoành +xoá +xoác +xoát +xoáy +xoã +xoè +xoèn +xoét +xoăn +xoạc +xoạch +xoạng +xoả +xoải +xoảng +xoắn +xoẹ +xoẹt +xu +xua +xui +xum +xung +xuy +xuya +xuynh +xuyên +xuyến +xuyết +xuân +xuây +xuê +xuôi +xuý +xuýt +xuất +xuẩn +xuề +xuềnh +xuể +xuệch +xuống +xuồng +xuổng +xuỳ +xuỵt +xà +xài +xàm +xàng +xành +xào +xàu +xá +xác +xách +xái +xám +xán +xáo +xáp +xát +xáy +xâm +xâu +xây +xã +xè +xèn +xèng +xèo +xé +xéc +xén +xéo +xép +xét +xê +xên +xênh +xêu +xì +xình +xìu +xí +xía +xích +xính +xít +xíu +xòm +xòng +xó +xóc +xói +xóm +xón +xóp +xót +xô +xôi +xôm +xôn +xông +xõm +xõng +xù +xùi +xùm +xùng +xú +xúc +xúi +xúm +xúng +xúp +xút +xăm +xăn +xăng +xĩnh +xũ +xơ +xơi +xơm +xơn +xưa +xưng +xương +xước +xướng +xười +xưởng +xược +xạ +xạc +xạch +xạo +xạp +xạu +xả +xảm +xảnh +xảo +xảu +xảy +xấc +xấp +xấu +xầm +xẩm +xẩn +xẩu +xẩy +xập +xắc +xắm +xắn +xắp +xằng +xẵng +xẹc +xẹo +xẹp +xẹt +xẻ +xẻn +xẻng +xẻo +xẽo +xế +xếch +xếp +xềm +xềnh +xều +xể +xệ +xệch +xệp +xệu +xỉ +xỉa +xỉn +xỉnh +xỉu +xị +xịch +xịt +xịu +xọ +xọc +xọp +xỏ +xỏng +xố +xốc +xối +xốn +xống +xốp +xốt +xồ +xồm +xồn +xồng +xổ +xổi +xổm +xổng +xộc +xộn +xộp +xớ +xới +xớp +xớt +xờ +xờm +xở +xởi +xởn +xỡ +xợp +xợt +xụ +xục +xụi +xụp +xủng +xứ +xức +xứng +xừ +xử +xửa +xửng +xực +y +yên +yêng +yêu +yếm +yến +yết +yếu +yểm +yểng +yểu +à +ào +á +ác +ách +ái +ám +án +áng +ánh +áo +áp +át +áy +âm +ân +âu +ã +è +èo +é +éc +ém +én +éo +ép +ét +ê +êm +êu +ì +ìn +ình +í +ích +ín +ít +ò +òi +òm +òng +ó +óc +ói +óng +óp +ót +ô +ôi +ôm +ôn +ông +ù +ùa +ùm +ùn +ùng +ú +úa +úi +úm +úng +úp +út +ý +ăm +ăn +ăng +đa +đai +đam +đan +đang +đanh +đao +đau +đay +đe +đem +đen +đeo +đi +đin +đinh +điên +điêu +điếc +điếm +điếng +điếu +điền +điều +điểm +điển +điểu +điệm +điện +điệp +điệu +đo +đoan +đoi +đom +đon +đong +đoài +đoàn +đoàng +đoành +đoá +đoái +đoán +đoãng +đoạ +đoạn +đoạt +đoản +đoảng +đu +đua +đui +đum +đun +đung +đuôi +đuốc +đuối +đuổi +đuỗn +đuột +đà +đài +đàm +đàn +đàng +đành +đào +đày +đá +đác +đách +đái +đám +đán +đáng +đánh +đáo +đáp +đát +đáy +đâm +đâu +đây +đã +đãi +đãng +đãy +đè +đèm +đèn +đèo +đéc +đéo +đét +đê +đêm +đên +đênh +đêu +đì +đìa +đình +đìu +đía +đích +đính +đít +đò +đòi +đòm +đòn +đòng +đó +đóc +đói +đóm +đón +đóng +đót +đô +đôi +đôm +đôn +đông +đõ +đù +đùa +đùi +đùm +đùn +đùng +đú +đúc +đúm +đún +đúng +đúp +đút +đăm +đăng +đĩ +đĩa +đĩnh +đũa +đũng +đơ +đơm +đơn +đưa +đưng +đương +đước +đười +đườn +đường +đưỡn +được +đượm +đạc +đạch +đại +đạm +đạn +đạo +đạp +đạt +đả +đảm +đản +đảng +đảo +đảy +đấm +đấng +đất +đấu +đấy +đầm +đần +đầu +đầy +đẩu +đẩy +đẫm +đẫn +đẫy +đậm +đận +đập +đật +đậu +đậy +đắc +đắm +đắn +đắng +đắp +đắt +đằm +đằn +đằng +đẳng +đẵm +đẵn +đẵng +đặc +đặn +đặng +đặt +đẹn +đẹp +đẹt +đẻ +đẽ +đẽo +đế +đếch +đếm +đến +đề +đềm +đền +đềnh +đều +để +đểnh +đểu +đễ +đễnh +đệ +đệm +đệp +đỉa +đỉnh +địa +địch +định +địt +địu +đọ +đọc +đọi +đọn +đọng +đọp +đọt +đỏ +đỏi +đỏm +đố +đốc +đối +đốm +đốn +đống +đốp +đốt +đồ +đồi +đồm +đồn +đồng +đổ +đổi +đổng +đỗ +đỗi +độ +độc +đội +độn +động +độp +đột +đớ +đới +đớn +đớp +đớt +đờ +đời +đờm +đờn +đởm +đởn +đỡ +đợ +đợi +đợp +đợt +đụ +đục +đụn +đụng +đụp +đụt +đủ +đủi +đủng +đứ +đứa +đức +đứng +đứt +đừ +đừa +đừng +đử +đực +đựng +ĩ +ĩnh +ơ +ơi +ơn +ư +ưa +ưng +ưu +ươi +ươm +ươn +ương +ước +ướm +ướp +ướt +ườn +ưỡn +ạ +ạch +ạnh +ạo +ạt +ả +ải +ảm +ảng +ảnh +ảo +ấm +ấn +ấp +ất +ấu +ấy +ầm +ầy +ẩm +ẩn +ẩu +ẩy +ậc +ậm +ập +ắc +ắng +ắp +ắt +ằng +ẳng +ẵm +ặc +ặp +ẹ +ẹo +ẹp +ẹt +ẻn +ẻo +ẽo +ế +ếch +ếm +ề +ềnh +ễnh +ệ +ệch +ện +ệnh +ỉ +ỉa +ỉm +ỉn +ỉu +ị +ịch +ịt +ọ +ọc +ọi +ọp +ọt +ỏi +ỏm +ỏn +ỏng +ố +ốc +ối +ốm +ống +ốp +ốt +ồ +ồm +ồn +ồng +ổ +ổi +ổn +ổng +ộ +ộc +ộn +ộp +ớ +ới +ớm +ớn +ớt +ờ +ờn +ở +ỡm +ợ +ợt +ụ +ụa +ục +ụp +ụt +ủ +ủa +ủi +ủn +ủng +ứ +ứa +ức +ứng +ừ +ừng +ửng +ựa +ực +ỷ diff --git a/nvim/vi.dic.utf-8.spl b/nvim/vi.dic.utf-8.spl new file mode 100644 index 0000000..19d9453 Binary files /dev/null and b/nvim/vi.dic.utf-8.spl differ diff --git a/pipewire/minimal.conf b/pipewire/minimal.conf new file mode 100644 index 0000000..537d950 --- /dev/null +++ b/pipewire/minimal.conf @@ -0,0 +1,476 @@ +# Simple daemon config file for PipeWire version "1.2.3" # +# +# Copy and edit this file in /etc/pipewire for system-wide changes +# or in ~/.config/pipewire for local changes. +# +# It is also possible to place a file with an updated section in +# /etc/pipewire/minimal.conf.d/ for system-wide changes or in +# ~/.config/pipewire/minimal.conf.d/ for local changes. +# + +context.properties = { + ## Configure properties in the system. + #library.name.system = support/libspa-support + #context.data-loop.library.name.system = support/libspa-support + #support.dbus = true + #link.max-buffers = 64 + link.max-buffers = 16 # version < 3 clients can't handle more + #mem.warn-mlock = false + #mem.allow-mlock = true + #mem.mlock-all = false + #clock.power-of-two-quantum = true + #log.level = 2 + #cpu.zero.denormals = false + + core.daemon = true # listening for socket connections + core.name = pipewire-0 # core name and socket name + + ## Properties for the DSP configuration. + #default.clock.rate = 48000 + #default.clock.allowed-rates = [ 48000 ] + #default.clock.quantum = 1024 + #default.clock.min-quantum = 32 + #default.clock.max-quantum = 2048 + #default.clock.quantum-limit = 8192 + #default.clock.quantum-floor = 4 + #default.video.width = 640 + #default.video.height = 480 + #default.video.rate.num = 25 + #default.video.rate.denom = 1 + # + settings.check-quantum = true + settings.check-rate = true + + # This config can use udev or hardcoded ALSA devices. Make sure to + # change the alsa device below when disabling udev + minimal.use-udev = true + + # Load the pulseaudio emulation daemon + minimal.use-pulse = true +} + +context.properties.rules = [ + { matches = [ { cpu.vm.name = !null } ] + actions = { + update-props = { + # These overrides are only applied when running in a vm. + default.clock.min-quantum = 1024 + } + } + } +] + +context.spa-libs = { + # = + # + # Used to find spa factory names. It maps an spa factory name + # regular expression to a library name that should contain + # that factory. + # + audio.convert.* = audioconvert/libspa-audioconvert + audio.adapt = audioconvert/libspa-audioconvert + api.alsa.* = alsa/libspa-alsa + support.* = support/libspa-support +} + +context.modules = [ + #{ name = + # ( args = { = ... } ) + # ( flags = [ ( ifexists ) ( nofail ) ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Loads a module with the given parameters. + # If ifexists is given, the module is ignored when it is not found. + # If nofail is given, module initialization failures are ignored. + # + + # Uses realtime scheduling to boost the audio thread priorities. This uses + # RTKit if the user doesn't have permission to use regular realtime + # scheduling. + { name = libpipewire-module-rt + args = { + nice.level = -11 + rt.prio = 88 + #rt.time.soft = -1 + #rt.time.hard = -1 + } + flags = [ ifexists nofail ] + } + + # The native communication protocol. + { name = libpipewire-module-protocol-native } + + # The profile module. Allows application to access profiler + # and performance data. It provides an interface that is used + # by pw-top and pw-profiler. + { name = libpipewire-module-profiler } + + # Allows applications to create metadata objects. It creates + # a factory for Metadata objects. + { name = libpipewire-module-metadata } + + # Creates a factory for making nodes that run in the + # context of the PipeWire server. + { name = libpipewire-module-spa-node-factory } + + { name = libpipewire-module-spa-device-factory } + + # Allows creating nodes that run in the context of the + # client. Is used by all clients that want to provide + # data to PipeWire. + { name = libpipewire-module-client-node } + + # The access module can perform access checks and block + # new clients. + { name = libpipewire-module-access + args = { + # access.allowed to list an array of paths of allowed + # apps. + #access.allowed = [ + # /usr/bin/pipewire-media-session + #] + + # An array of rejected paths. + #access.rejected = [ ] + + # An array of paths with restricted access. + #access.restricted = [ ] + + # Anything not in the above lists gets assigned the + # access.force permission. + #access.force = flatpak + } + } + + # Makes a factory for wrapping nodes in an adapter with a + # converter and resampler. + { name = libpipewire-module-adapter } + + # Makes a factory for creating links between ports. + { name = libpipewire-module-link-factory } + + { name = libpipewire-module-protocol-pulse + condition = [ { minimal.use-pulse = true } ] + } +] + +pulse.properties = { + # the addresses this server listens on + server.address = [ + "unix:native" + ] +} + +stream.properties = { + adapter.auto-port-config = { mode = dsp } +} + +context.objects = [ + #{ factory = + # ( args = { = ... } ) + # ( flags = [ ( nofail ) ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Creates an object from a PipeWire factory with the given parameters. + # If nofail is given, errors are ignored (and no object is created). + # + #{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc node.description = videotestsrc "Spa:Pod:Object:Param:Props:patternType" = 1 } } + #{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] } + #{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } } + #{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } } + #{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test node.description = audiotestsrc } } + #{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } } + + # Make a default metadata store + { factory = metadata + args = { + metadata.name = default + # metadata.values = [ + # { key = default.audio.sink value = { name = somesink } } + # { key = default.audio.source value = { name = somesource } } + # ] + } + } + + # A default dummy driver. This handles nodes marked with the "node.always-process" + # property when no other driver is currently active. JACK clients need this. + { factory = spa-node-factory + args = { + factory.name = support.node.driver + node.name = Dummy-Driver + node.group = pipewire.dummy + priority.driver = 20000 + } + } + { factory = spa-node-factory + args = { + factory.name = support.node.driver + node.name = Freewheel-Driver + priority.driver = 19000 + node.group = pipewire.freewheel + node.freewheel = true + #freewheel.wait = 10 + } + } + + # This creates a ALSA udev device that will enumerate all + # ALSA devices. Because it is using ACP and has the auto-profile + # property set, this will enable a profile and create associated + # nodes, which will be automatically configured to their best + # configuration with the auto-port-config settings. + # Extra node and device params can be given with node.param and + # device.param prefixes. + { factory = spa-device-factory + args = { + factory.name = api.alsa.enum.udev + alsa.use-acp = true + device.object.properties = { + api.acp.auto-profile = true + api.acp.auto-port = true + device.object.properties = { + node.adapter = audio.adapt + resample.disable = false + adapter.auto-port-config = { + mode = dsp + monitor = false + control = false + position = preserve # unknown, aux + } + #node.param.Props = { + # channelVolumes = [ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.6 ] + #} + } + #device.param.Profile = { + # #idx = 0 + # name = pro-audio + #} + } + } + condition = [ { minimal.use-udev = true } ] + } + + # This creates a single PCM source device for the given + # alsa device path hw:0. You can change source to sink + # to make a sink in the same way. + { factory = adapter + args = { + factory.name = api.alsa.pcm.source + node.name = "system" + node.description = "system" + media.class = "Audio/Source" + api.alsa.path = "hw:4" + #api.alsa.period-size = 0 + #api.alsa.period-num = 0 + #api.alsa.headroom = 0 + #api.alsa.start-delay = 0 + #api.alsa.disable-mmap = false + #api.alsa.disable-batch = false + #api.alsa.use-chmap = false + #api.alsa.multirate = true + #latency.internal.rate = 0 + #latency.internal.ns = 0 + #clock.name = api.alsa.0 + node.suspend-on-idle = false + #audio.format = "S32" + #audio.rate = 48000 + #audio.allowed-rates = [ ] + #audio.channels = 4 + #audio.position = [ FL FR RL RR ] + #resample.quality = 4 + resample.disable = true + #monitor.channel-volumes = false + #channelmix.normalize = false + #channelmix.mix-lfe = true + #channelmix.upmix = true + #channelmix.upmix-method = psd # none, simple + #channelmix.lfe-cutoff = 150 + #channelmix.fc-cutoff = 12000 + #channelmix.rear-delay = 12.0 + #channelmix.stereo-widen = 0.0 + #channelmix.hilbert-taps = 0 + #channelmix.disable = false + #dither.noise = 0 + #node.param.Props = { + # params = [ + # audio.channels 6 + # ] + #} + adapter.auto-port-config = { + mode = dsp + monitor = false + control = false + position = unknown # aux, preserve + } + #node.param.PortConfig = { + # direction = Output + # mode = dsp + # format = { + # mediaType = audio + # mediaSubtype = raw + # format = F32 + # rate = 48000 + # channels = 4 + # position = [ FL FR RL RR ] + # } + #} + #node.param.Props = { + # channelVolumes = [ 0.5 0.4 0.3 0.5 ] + #} + } + condition = [ { minimal.use-udev = false } ] + } + { factory = adapter + args = { + factory.name = api.alsa.pcm.sink + node.name = "system" + node.description = "system" + media.class = "Audio/Sink" + api.alsa.path = "hw:4" + #api.alsa.period-size = 0 + #api.alsa.period-num = 0 + #api.alsa.headroom = 0 + #api.alsa.start-delay = 0 + #api.alsa.disable-mmap = false + #api.alsa.disable-batch = false + #api.alsa.use-chmap = false + #api.alsa.multirate = true + #latency.internal.rate = 0 + #latency.internal.ns = 0 + #clock.name = api.alsa.0 + node.suspend-on-idle = false + #audio.format = "S32" + #audio.rate = 48000 + #audio.allowed-rates = [ ] + #audio.channels = 2 + #audio.position = "FL,FR" + #resample.quality = 4 + resample.disable = true + #channelmix.normalize = false + #channelmix.mix-lfe = true + #channelmix.upmix = true + #channelmix.upmix-method = psd # none, simple + #channelmix.lfe-cutoff = 150 + #channelmix.fc-cutoff = 12000 + #channelmix.rear-delay = 12.0 + #channelmix.stereo-widen = 0.0 + #channelmix.hilbert-taps = 0 + #channelmix.disable = false + #dither.noise = 0 + #node.param.Props = { + # params = [ + # audio.format S16 + # ] + #} + adapter.auto-port-config = { + mode = dsp + monitor = false + control = false + position = unknown # aux, preserve + } + #node.param.PortConfig = { + # direction = Input + # mode = dsp + # monitor = true + # format = { + # mediaType = audio + # mediaSubtype = raw + # format = F32 + # rate = 48000 + # channels = 4 + # } + #} + #node.param.Props = { + # channelVolumes = [ 0.5 0.4 0.3 0.5 ] + #} + } + condition = [ { minimal.use-udev = false } ] + } + # This creates a new Source node. It will have input ports + # that you can link, to provide audio for this source. + #{ factory = adapter + # args = { + # factory.name = support.null-audio-sink + # node.name = "my-mic" + # node.description = "Microphone" + # media.class = "Audio/Source/Virtual" + # audio.position = "FL,FR" + # monitor.passthrough = true + # adapter.auto-port-config = { + # mode = dsp + # monitor = true + # position = preserve # unknown, aux, preserve + # } + # } + #} + # This creates a new link between the source and the virtual + # source ports. + #{ factory = link-factory + # args = { + # link.output.node = system + # link.output.port = capture_1 + # link.input.node = my-mic + # link.input.port = input_FL + # } + #} + #{ factory = link-factory + # args = { + # link.output.node = system + # link.output.port = capture_2 + # link.input.node = my-mic + # link.input.port = input_FR + # } + #} +] + +context.exec = [ + #{ path = + # ( args = "" | [ ... ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Execute the given program with arguments. + # + # You can optionally start the pulseaudio-server here as well + # but it is better to start it as a systemd service. + # It can be interesting to start another daemon here that listens + # on another address with the -a option (eg. -a tcp:4713). + # + ##{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" } +] + +node.rules = [ + { matches = [ + { + # all keys must match the value. ! negates. ~ starts regex. + #alsa.card_name = "ICUSBAUDIO7D" + #api.alsa.pcm.stream = "playback" + } + ] + actions = { + update-props = { + #node.name = "alsa_playback.ICUSBAUDIO7D" + } + } + } +] +device.rules = [ + { matches = [ + { + #alsa.card_name = "ICUSBAUDIO7D" + } + ] + actions = { + update-props = { + #device.name = "alsa_card.ICUSBAUDIO7D" + #api.acp.auto-profile = false + #api.acp.auto-port = false + #device.param.Profile = { + # #idx = 0 + # name = off + #} + } + } + } +] diff --git a/pipewire/pipewire.conf b/pipewire/pipewire.conf new file mode 100644 index 0000000..3c56154 --- /dev/null +++ b/pipewire/pipewire.conf @@ -0,0 +1,345 @@ +# Daemon config file for PipeWire version "1.2.3" # +# +# Copy and edit this file in /etc/pipewire for system-wide changes +# or in ~/.config/pipewire for local changes. +# +# It is also possible to place a file with an updated section in +# /etc/pipewire/pipewire.conf.d/ for system-wide changes or in +# ~/.config/pipewire/pipewire.conf.d/ for local changes. +# + +context.properties = { + ## Configure properties in the system. + #library.name.system = support/libspa-support + #context.data-loop.library.name.system = support/libspa-support + #support.dbus = true + #link.max-buffers = 64 + link.max-buffers = 16 # version < 3 clients can't handle more + mem.warn-mlock = true # Gentoo should have good RLIMITs now + #mem.allow-mlock = true + #mem.mlock-all = false + #clock.power-of-two-quantum = true + #log.level = 2 + #cpu.zero.denormals = false + + #loop.rt-prio = -1 # -1 = use module-rt prio, 0 disable rt + #loop.class = data.rt + #thread.affinity = [ 0 1 ] # optional array of CPUs + #context.num-data-loops = 1 # -1 = num-cpus, 0 = no data loops + # + #context.data-loops = [ + # { loop.rt-prio = -1 + # loop.class = [ data.rt audio.rt ] + # #library.name.system = support/libspa-support + # thread.name = data-loop.0 + # #thread.affinity = [ 0 1 ] # optional array of CPUs + # } + #] + + core.daemon = true # listening for socket connections + core.name = pipewire-0 # core name and socket name + + ## Properties for the DSP configuration. + #default.clock.rate = 48000 + default.clock.rates = [ 44100 48000 96000 192000] + default.clock.allowed-rates = [ 44100 48000 96000 192000] + #default.clock.quantum = 1024 + #default.clock.min-quantum = 32 + #default.clock.max-quantum = 2048 + #default.clock.quantum-limit = 8192 + #default.clock.quantum-floor = 4 + #default.video.width = 640 + #default.video.height = 480 + #default.video.rate.num = 25 + #default.video.rate.denom = 1 + # + #settings.check-quantum = false + #settings.check-rate = false + + # keys checked below to disable module loading + module.x11.bell = true + # enables autoloading of access module, when disabled an alternative + # access module needs to be loaded. + module.access = true + # enables autoloading of module-jackdbus-detect + module.jackdbus-detect = true +} + +context.properties.rules = [ + { matches = [ { cpu.vm.name = !null } ] + actions = { + update-props = { + # These overrides are only applied when running in a vm. + default.clock.min-quantum = 1024 + } + } + } +] + +context.spa-libs = { + # = + # + # Used to find spa factory names. It maps an spa factory name + # regular expression to a library name that should contain + # that factory. + # + audio.convert.* = audioconvert/libspa-audioconvert + avb.* = avb/libspa-avb + api.alsa.* = alsa/libspa-alsa + api.v4l2.* = v4l2/libspa-v4l2 + api.libcamera.* = libcamera/libspa-libcamera + api.bluez5.* = bluez5/libspa-bluez5 + api.vulkan.* = vulkan/libspa-vulkan + api.jack.* = jack/libspa-jack + support.* = support/libspa-support + video.convert.* = videoconvert/libspa-videoconvert + #videotestsrc = videotestsrc/libspa-videotestsrc + #audiotestsrc = audiotestsrc/libspa-audiotestsrc +} + +context.modules = [ + #{ name = + # ( args = { = ... } ) + # ( flags = [ ( ifexists ) ( nofail ) ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Loads a module with the given parameters. + # If ifexists is given, the module is ignored when it is not found. + # If nofail is given, module initialization failures are ignored. + # If condition is given, the module is loaded only when the context + # properties all match the match rules. + # + + # Uses realtime scheduling to boost the audio thread priorities. This uses + # RTKit if the user doesn't have permission to use regular realtime + # scheduling. You can also clamp utilisation values to improve scheduling + # on embedded and heterogeneous systems, e.g. Arm big.LITTLE devices. + { name = libpipewire-module-rt + args = { + nice.level = -11 + rt.prio = 88 + #rt.time.soft = -1 + #rt.time.hard = -1 + #uclamp.min = 0 + #uclamp.max = 1024 + } + flags = [ ifexists nofail ] + } + + # The native communication protocol. + { name = libpipewire-module-protocol-native + args = { + # List of server Unix sockets, and optionally permissions + #sockets = [ { name = "pipewire-0" }, { name = "pipewire-0-manager" } ] + } + } + + # The profile module. Allows application to access profiler + # and performance data. It provides an interface that is used + # by pw-top and pw-profiler. + { name = libpipewire-module-profiler } + + # Allows applications to create metadata objects. It creates + # a factory for Metadata objects. + { name = libpipewire-module-metadata } + + # Creates a factory for making devices that run in the + # context of the PipeWire server. + { name = libpipewire-module-spa-device-factory } + + # Creates a factory for making nodes that run in the + # context of the PipeWire server. + { name = libpipewire-module-spa-node-factory } + + # Allows creating nodes that run in the context of the + # client. Is used by all clients that want to provide + # data to PipeWire. + { name = libpipewire-module-client-node } + + # Allows creating devices that run in the context of the + # client. Is used by the session manager. + { name = libpipewire-module-client-device } + + # The portal module monitors the PID of the portal process + # and tags connections with the same PID as portal + # connections. + { name = libpipewire-module-portal + flags = [ ifexists nofail ] + } + + # The access module can perform access checks and block + # new clients. + { name = libpipewire-module-access + args = { + # Socket-specific access permissions + #access.socket = { pipewire-0 = "default", pipewire-0-manager = "unrestricted" } + + # Deprecated legacy mode (not socket-based), + # for now enabled by default if access.socket is not specified + #access.legacy = true + } + condition = [ { module.access = true } ] + } + + # Makes a factory for wrapping nodes in an adapter with a + # converter and resampler. + { name = libpipewire-module-adapter } + + # Makes a factory for creating links between ports. + { name = libpipewire-module-link-factory } + + # Provides factories to make session manager objects. + { name = libpipewire-module-session-manager } + + # Use libcanberra to play X11 Bell + { name = libpipewire-module-x11-bell + args = { + #sink.name = "@DEFAULT_SINK@" + #sample.name = "bell-window-system" + #x11.display = null + #x11.xauthority = null + } + flags = [ ifexists nofail ] + condition = [ { module.x11.bell = true } ] + } + { name = libpipewire-module-jackdbus-detect + args = { + #jack.library = libjack.so.0 + #jack.server = null + #jack.client-name = PipeWire + #jack.connect = true + #tunnel.mode = duplex # source|sink|duplex + source.props = { + #audio.channels = 2 + #midi.ports = 1 + #audio.position = [ FL FR ] + # extra sink properties + } + sink.props = { + #audio.channels = 2 + #midi.ports = 1 + #audio.position = [ FL FR ] + # extra sink properties + } + } + flags = [ ifexists nofail ] + condition = [ { module.jackdbus-detect = true } ] + } +] + +context.objects = [ + #{ factory = + # ( args = { = ... } ) + # ( flags = [ ( nofail ) ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Creates an object from a PipeWire factory with the given parameters. + # If nofail is given, errors are ignored (and no object is created). + # If condition is given, the object is created only when the context properties + # all match the match rules. + # + #{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc node.description = videotestsrc "Spa:Pod:Object:Param:Props:patternType" = 1 } } + #{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] } + #{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } } + #{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } } + #{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test node.description = audiotestsrc } } + #{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } } + + # A default dummy driver. This handles nodes marked with the "node.always-process" + # property when no other driver is currently active. JACK clients need this. + { factory = spa-node-factory + args = { + factory.name = support.node.driver + node.name = Dummy-Driver + node.group = pipewire.dummy + node.sync-group = sync.dummy + priority.driver = 200000 + #clock.id = monotonic # realtime | tai | monotonic-raw | boottime + #clock.name = "clock.system.monotonic" + } + } + { factory = spa-node-factory + args = { + factory.name = support.node.driver + node.name = Freewheel-Driver + priority.driver = 190000 + node.group = pipewire.freewheel + node.sync-group = sync.dummy + node.freewheel = true + #freewheel.wait = 10 + } + } + + # This creates a new Source node. It will have input ports + # that you can link, to provide audio for this source. + #{ factory = adapter + # args = { + # factory.name = support.null-audio-sink + # node.name = "my-mic" + # node.description = "Microphone" + # media.class = "Audio/Source/Virtual" + # audio.position = "FL,FR" + # monitor.passthrough = true + # } + #} + + # This creates a single PCM source device for the given + # alsa device path hw:0. You can change source to sink + # to make a sink in the same way. + #{ factory = adapter + # args = { + # factory.name = api.alsa.pcm.source + # node.name = "alsa-source" + # node.description = "PCM Source" + # media.class = "Audio/Source" + # api.alsa.path = "hw:0" + # api.alsa.period-size = 1024 + # api.alsa.headroom = 0 + # api.alsa.disable-mmap = false + # api.alsa.disable-batch = false + # audio.format = "S16LE" + # audio.rate = 48000 + # audio.channels = 2 + # audio.position = "FL,FR" + # } + #} + + # Use the metadata factory to create metadata and some default values. + #{ factory = metadata + # args = { + # metadata.name = my-metadata + # metadata.values = [ + # { key = default.audio.sink value = { name = somesink } } + # { key = default.audio.source value = { name = somesource } } + # ] + # } + #} +] + +context.exec = [ + #{ path = + # ( args = "" | [ ... ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Execute the given program with arguments. + # If condition is given, the program is executed only when the context + # properties all match the match rules. + # + # You can optionally start the session manager here, + # but it is better to start it as a systemd service. + # Run the session manager with -h for options. + # + #{ path = "/usr/bin/pipewire-media-session" args = "" + # condition = [ { exec.session-manager = null } { exec.session-manager = true } ] } + # + # You can optionally start the pulseaudio-server here as well + # but it is better to start it as a systemd service. + # It can be interesting to start another daemon here that listens + # on another address with the -a option (eg. -a tcp:4713). + # + #{ path = "/usr/bin/pipewire" args = [ "-c" "pipewire-pulse.conf" ] + # condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] } +] diff --git a/polybar/config.ini b/polybar/config.ini new file mode 100644 index 0000000..6d5d30b --- /dev/null +++ b/polybar/config.ini @@ -0,0 +1,185 @@ +;========================================================== +; +; +; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗ +; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗ +; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝ +; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗ +; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║ +; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +; +; +; To learn more about how to configure Polybar +; go to https://github.com/polybar/polybar +; +; The README contains a lot of information +; +;========================================================== + +[colors] +background-alt = #00000000 +foreground = #1f3641 +primary = #0d100f +altprime = #0D100F +secondary = #0D100F +altsecondary = #BEABA7EF +alert = #A54242 +disabled = #707880 + +[bar/example] +bottom = false +width = 100% +height = 20pt +radius = 8 + +; dpi = 96 + +background = #80c8c9c9 +foreground = ${colors.foreground} + +tray-position = right +line-size = 2pt + +border-size = 2.5pt +border-color = #00000000 + +padding-left = 1 +padding-right = 1 + +module-margin = 1 + +separator = | +separator-foreground = ${colors.disabled} + +font-0 = 0xProto Nerd Font:pixelsize=14;3 + +modules-left = xworkspaces xwindow +modules-right = polytiramisu memory cpu date battery + +cursor-click = pointer +cursor-scroll = ns-resize + +enable-ipc = true + +; tray-position = right + +; wm-restack = generic +; wm-restack = bspwm +; wm-restack = i3 + +; override-redirect = true + +[module/xworkspaces] +type = internal/xworkspaces + +label-active = %name% +label-active-background = ${colors.background-alt} +label-active-underline= ${colors.primary} +label-active-padding = 1 + +label-occupied = %name% +label-occupied-padding = 1 + +label-urgent = %name% +label-urgent-background = ${colors.alert} +label-urgent-padding = 1 + +label-empty = %name% +label-empty-foreground = ${colors.disabled} +label-empty-padding = 1 + +[module/xwindow] +type = internal/xwindow +label = %title:0:60:...% + + +[module/memory] +type = internal/memory +interval = 2 +format-prefix = "RAM " +format-prefix-foreground = ${colors.altprime} +label = %percentage_used:2%% + +[module/cpu] +type = internal/cpu +interval = 2 +format-prefix = "CPU " +format-prefix-foreground = ${colors.altprime} +label = %percentage:2%% + +[module/date] +type = internal/date +interval = 1 + +date = %H:%M +date-alt = %Y-%m-%d %H:%M:%S + +label = %date% +label-foreground = ${colors.altprime} +[module/battery] +type = internal/battery +full-at = 99 +low-at = 5 +; Use the following command to list batteries and adapters: +; $ ls -1 /sys/class/power_supply/ +battery = BAT0 +;adapter = ucsi-source-psy-USBC000:001 +adapter = AC +time-format = %H:%M +;label-charging = Charging %percentage%% +label-charging = %percentage%% +;label-discharging = Discharging %percentage%% +label-discharging = %percentage%% +format-charging = +format-discharging = + +label-full = %percentage%% +format-full = +label-low = BATTERY LOW + +; Only applies if is used +ramp-capacity-0 =  +ramp-capacity-1 =  +ramp-capacity-2 =  +ramp-capacity-3 =  +ramp-capacity-4 =  + +; Only applies if is used +bar-capacity-width = 10 + +; Only applies if is used +animation-charging-0 =  +animation-charging-1 =  +animation-charging-2 =  +animation-charging-3 =  +animation-charging-4 =  +; Framerate in milliseconds +animation-charging-framerate = 750 + +; Only applies if is used +animation-discharging-0 =  +animation-discharging-1 =  +animation-discharging-2 =  +animation-discharging-3 =  +animation-discharging-4 =  +; Framerate in milliseconds +animation-discharging-framerate = 500 + +animation-low-0 = ! +animation-low-1 = +animation-low-framerate = 200 + +poll-interval = 5 + +[module/polytiramisu] +type = custom/script +# Path to where you put polytiramisu.sh: +exec = ~/.config/polybar/scripts/polytiramisu.sh +format =