Compare commits
4 Commits
2027
..
94af5b761a
| Author | SHA1 | Date | |
|---|---|---|---|
| 94af5b761a | |||
| e4e6c4e7b1 | |||
| c5d7992af3 | |||
| 8a192fd4d2 |
@@ -36,22 +36,18 @@ EndSection
|
||||
```
|
||||

|
||||
|
||||
## Vim
|
||||
## Neovim
|
||||
|
||||
### Vimplug
|
||||
#### Neovim
|
||||
```
|
||||
```sh
|
||||
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
|
||||
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
|
||||
```
|
||||
#### Vim
|
||||
```sh
|
||||
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
|
||||
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||||
```
|
||||
### Conquer of Completion
|
||||
- Requirements:
|
||||
- Nodejs
|
||||
- nodejs is a requirement
|
||||
```
|
||||
curl -sL install-node.vercel.app/lts | bash
|
||||
```
|
||||
### coc.nvim
|
||||
```
|
||||
:CocInstall coc-pairs coc-json coc-tsserver coc-snippets
|
||||
|
||||
@@ -16,20 +16,9 @@ family = "MesloLGS NF"
|
||||
[font.normal]
|
||||
family = "MesloLGS NF"
|
||||
|
||||
[[keyboard.bindings]]
|
||||
key = "T"
|
||||
mods = "Control|Shift"
|
||||
action = "SpawnNewInstance"
|
||||
|
||||
[[keyboard.bindings]]
|
||||
key = "PageUp"
|
||||
action = "ScrollLineUp"
|
||||
|
||||
[[keyboard.bindings]]
|
||||
key = "PageDown"
|
||||
action = "ScrollLineDown"
|
||||
|
||||
[[keyboard.bindings]]
|
||||
key = "Return"
|
||||
mods = "Shift"
|
||||
chars = "\u001b\r"
|
||||
[keyboard]
|
||||
bindings = [
|
||||
{ key = "T", mods = "Control|Shift", action = "SpawnNewInstance" },
|
||||
{ key = "PageUp", action = "ScrollLineUp" },
|
||||
{ key = "PageDown", action = "ScrollLineDown" },
|
||||
]
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
[window]
|
||||
startup_mode = "Maximized"
|
||||
|
||||
[font]
|
||||
size = 14.0
|
||||
|
||||
[font.bold]
|
||||
family = "MesloLGS NF"
|
||||
|
||||
[font.bold_italic]
|
||||
family = "MesloLGS NF"
|
||||
|
||||
[font.italic]
|
||||
family = "MesloLGS NF"
|
||||
|
||||
[font.normal]
|
||||
family = "MesloLGS NF"
|
||||
|
||||
[keyboard]
|
||||
bindings = [
|
||||
{ key = "T", mods = "Control|Shift", action = "SpawnNewInstance" },
|
||||
{ key = "PageUp", action = "ScrollLineUp" },
|
||||
{ key = "PageDown", action = "ScrollLineDown" },
|
||||
]
|
||||
@@ -10,8 +10,7 @@
|
||||
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
|
||||
|
||||
set $mod Mod1
|
||||
set $wallpaper_dir /sync/images/wallpapers
|
||||
set $terminal 'wezterm'
|
||||
set $wallpaper '/data/sync/images/wallpapers/suse.png'
|
||||
# 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
|
||||
@@ -28,46 +27,34 @@ exec --no-startup-id dex --autostart --environment i3
|
||||
# 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 systemctl lock-session to lock your screen.
|
||||
exec --no-startup-id xrandr --output HDMI-0 --mode 1920x1080 --rate 120
|
||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||
exec --no-startup-id xrand --output HDMI-0 --mode 1920x1080 --rate 120
|
||||
bindsym $mod+l exec i3lock --ignore-empty-password -i $wallpaper
|
||||
|
||||
# burn-in prevention: blank after 5min, DPMS off after 10min, skip lock if fullscreen
|
||||
exec --no-startup-id xset b off
|
||||
exec --no-startup-id xset s 300 300
|
||||
exec --no-startup-id xset dpms 300 600 900
|
||||
exec --no-startup-id xss-lock -- ~/.config/i3/scripts/lock $wallpaper_dir
|
||||
|
||||
bindsym $mod+l exec ~/.config/i3/scripts/lock-now $wallpaper_dir
|
||||
bindsym $mod+Shift+o exec systemctl suspend
|
||||
bindsym $mod+Shift+p exec systemctl poweroff
|
||||
|
||||
bindsym Print exec --no-startup-id bash -c 'f="$(xdg-user-dir PICTURES)/$(date +%s_scrot.png)" && scrot -s "$f" && xclip -selection clipboard -t image/png -i "$f" && notify-send "Screenshot saved" "$f"'
|
||||
bindsym $mod+Print exec --no-startup-id bash -c 'f="$(xdg-user-dir PICTURES)/$(date +%s_scrot.png)" && scrot "$f" && xclip -selection clipboard -t image/png -i "$f" && notify-send "Screenshot saved" "$f"'
|
||||
bindsym $mod+Shift+p exec loginctl 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 picom --config ~/.config/picom/picom.conf
|
||||
exec --no-startup-id fcitx5 -d
|
||||
exec --no-startup-id nm-applet
|
||||
exec --no-startup-id blueman-applet
|
||||
exec --no-startup-id /usr/bin/gnome-keyring-daemon --start --components=ssh,pkcs11
|
||||
exec --no-startup-id ~/.config/i3/scripts/wallpaper-rotate $wallpaper_dir
|
||||
#exec --no-startup-id pasystray
|
||||
exec --no-startup-id feh --bg-fill $wallpaper
|
||||
exec --no-startup-id owncloud
|
||||
exec --no-startup-id pasystray
|
||||
exec --no-startup-id polybar
|
||||
exec --no-startup-id xset m 1/1 0
|
||||
exec xinput --set-prop "Razer Razer DeathAdder V2 X HyperSpeed Mouse" "Device Accel Constant Deceleration" 3
|
||||
exec --no-startup-id gentoo-pipewire-launcher restart &
|
||||
|
||||
set $refresh_i3status killall -SIGUSR1 i3status
|
||||
|
||||
# Software volume should not be lower than 80% unless you want to lose dynamic range.
|
||||
set $lower-volume wpctl set-volume @DEFAULT_SINK@ 0.01- && $refresh_i3status
|
||||
set $raise-volume wpctl set-volume @DEFAULT_SINK@ 0.01+ --limit 1 && $refresh_i3status
|
||||
set $mute-sink wpctl set-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
set $mute-source wpctl set-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
||||
|
||||
bindsym XF86AudioRaiseVolume exec --no-startup-id $raise-volume
|
||||
bindsym XF86AudioLowerVolume exec --no-startup-id $lower-volume
|
||||
bindsym XF86AudioMute exec --no-startup-id $mute-sink
|
||||
bindsym XF86AudioMicMute exec --no-startup-id $mute-source
|
||||
# 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
|
||||
@@ -79,9 +66,13 @@ bindsym $mod+Shift+comma exec playerctl previous
|
||||
bindsym $mod+Shift+period exec playerctl next
|
||||
bindsym $mod+Shift+slash exec playerctl play-pause
|
||||
|
||||
bindsym $mod+slash exec --no-startup-id $mute-sink
|
||||
bindsym $mod+period exec --no-startup-id $raise-volume
|
||||
bindsym $mod+comma exec --no-startup-id $lower-volume
|
||||
#bindcode $mod+Shift+58 exec --no-startup-id wpctl set-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
#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
|
||||
|
||||
bindsym $mod+slash exec --no-startup-id wpctl set-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
bindsym $mod+period exec --no-startup-id wpctl set-volume @DEFAULT_SINK@ 0.02+ --limit 1 && $refresh_i3status
|
||||
bindsym $mod+comma exec --no-startup-id wpctl set-volume @DEFAULT_SINK@ 0.02- --limit 0 && $refresh_i3status
|
||||
|
||||
# Brightness key bindings
|
||||
bindsym XF86MonBrightnessUp exec brightnessctl set +5%
|
||||
@@ -95,9 +86,9 @@ floating_modifier $mod
|
||||
#tiling_drag modifier titlebar
|
||||
#xrandr --output HDMI-2 --auto --right-of eDP1
|
||||
|
||||
# start a terminal
|
||||
# start a 3terminal
|
||||
#bindsym $mod+Return exec i3-sensible-terminal
|
||||
bindsym $mod+Return exec $terminal
|
||||
bindsym $mod+Return exec alacritty
|
||||
|
||||
# kill focused window
|
||||
bindsym $mod+Shift+q kill
|
||||
@@ -245,20 +236,22 @@ bindsym $mod+r mode "resize"
|
||||
bindsym $mod+Tab workspace back_and_forth
|
||||
|
||||
# class border bground text indicator child_border
|
||||
client.focused #3A7CA5 #3A7CA5 #E2EBF0 #0D1B27 #3A7CA5
|
||||
client.placeholder #0D1B27 #0D1B27 #BDD5E4 #0D1B27 #0D1B27
|
||||
client.unfocused #0D1B27 #152535 #6A8DA0 #0D1B27 #152535
|
||||
client.focused_inactive #1A3347 #1A3347 #6A8DA0 #1A3347 #1A3347
|
||||
client.focused #05707E #05707E #FFFFFF #000000 #05707E
|
||||
client.placeholder #000000 #F1E3D3 #FFFFFF #000000 #0d100f
|
||||
client.unfocused #000000 #1B4D3E #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="Signal"] floating enable
|
||||
for_window [class="Fluffychat"] floating enable
|
||||
for_window [class="Dino"] floating enable
|
||||
for_window [class="ownCloud"] floating enable
|
||||
for_window [class="firefox"] move container to workspace 1
|
||||
for_window [class="thunderbird"] move container to workspace 4
|
||||
for_window [class="Dolphin"] move container to workspace 3
|
||||
for_window [class="Thunar"] move container to workspace 3
|
||||
for_window [class="steam_app_1364781"] border none, fullscreen enable
|
||||
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
# i3blocks config file changed for EndeavourOS-i3 setup
|
||||
|
||||
# source is available here:
|
||||
# https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/main/etc/skel/.config/i3/i3blocks.conf
|
||||
# Maintainer: joekamprad [joekamprad //a_t// endeavouros.com]
|
||||
# Former Visual Designer: Florent Valetti [@FLVAL EndeavourOS]
|
||||
# created for i3wm setup on EndeavourOS
|
||||
# https://endeavouros.com
|
||||
|
||||
# cheatsheet for icon fonts used on the block-bar:
|
||||
# https://fontawesome.com/v4.7/cheatsheet/
|
||||
|
||||
# --> to update this run the following command:
|
||||
# wget --backups=1 https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/main/etc/skel/.config/i3/i3blocks.conf -P ~/.config/i3/
|
||||
|
||||
# Please see man i3blocks for a complete reference!
|
||||
# The man page is also hosted at http://vivien.github.io/i3blocks
|
||||
|
||||
|
||||
# List of valid properties:
|
||||
#
|
||||
# align
|
||||
# color
|
||||
# command
|
||||
# full_text
|
||||
# instance
|
||||
# interval
|
||||
# label
|
||||
# min_width
|
||||
# name
|
||||
# separator
|
||||
# separator_block_width
|
||||
# short_text
|
||||
# signal
|
||||
# urgent
|
||||
|
||||
# Global properties
|
||||
#
|
||||
# The top properties below are applied to every block, but can be overridden.
|
||||
separator=false
|
||||
markup=pango
|
||||
|
||||
#[Weather]
|
||||
#command=~/.config/i3/scripts/openweather
|
||||
#interval=1800
|
||||
#color=#7275b3
|
||||
|
||||
[terminal]
|
||||
full_text=
|
||||
color=#807dfe
|
||||
command=i3-msg -q exec xfce4-terminal
|
||||
|
||||
[browser]
|
||||
full_text=
|
||||
color=#ff7f81
|
||||
command=i3-msg -q exec firefox
|
||||
|
||||
[files]
|
||||
full_text=
|
||||
color=#7f3fbf
|
||||
command=i3-msg -q exec thunar ~/
|
||||
|
||||
#[mail]
|
||||
#full_text=
|
||||
#color=#dbcb75
|
||||
#command=i3-msg -q exec thunderbird
|
||||
|
||||
[simple-2]
|
||||
full_text=: :
|
||||
color=#717171
|
||||
|
||||
# Disk usage
|
||||
#
|
||||
# The directory defaults to $HOME if the instance is not specified.
|
||||
# The script may be called with a optional argument to set the alert
|
||||
# (defaults to 10 for 10%).
|
||||
[disk]
|
||||
label=
|
||||
instance=/
|
||||
command=~/.config/i3/scripts/disk
|
||||
interval=30
|
||||
|
||||
# Memory usage
|
||||
#
|
||||
# The type defaults to "mem" if the instance is not specified.
|
||||
[memory]
|
||||
label=
|
||||
command=~/.config/i3/scripts/memory
|
||||
interval=2
|
||||
|
||||
[cpu_usage]
|
||||
label=
|
||||
command=~/.config/i3/scripts/cpu_usage
|
||||
#min_width=CPU: 100.00%
|
||||
interval=2
|
||||
|
||||
[CPU-temperature]
|
||||
label=
|
||||
command=~/.config/i3/scripts/temperature
|
||||
interval=30
|
||||
#T_WARN=70
|
||||
#T_CRIT=90
|
||||
#SENSOR_CHIP=""
|
||||
# where SENSOR_CHIP can be find with sensors output
|
||||
# can be used also for GPU temperature or other temperature sensors lm-sensors detects.
|
||||
|
||||
# showing name of connected network (enable for wifi use)
|
||||
#[net]
|
||||
#label=
|
||||
#command=echo "$(LANG=C nmcli d | grep connected | awk '{print $4}')"
|
||||
#interval=30
|
||||
|
||||
[bandwidth]
|
||||
command=~/.config/i3/scripts/bandwidth2
|
||||
interval=persist
|
||||
|
||||
#[vpn]
|
||||
#command=~/.config/i3/scripts/vpn
|
||||
#init_color=#FFFF00
|
||||
#on_color=#00FF00
|
||||
#label=VPN:
|
||||
#interval=5
|
||||
|
||||
# Battery indicator
|
||||
[battery]
|
||||
command=~/.config/i3/scripts/battery
|
||||
# change this to battery-pinebook-pro if you are running on pinebook-pro
|
||||
label=
|
||||
interval=30
|
||||
|
||||
[simple-2]
|
||||
full_text=: :
|
||||
color=#717171
|
||||
|
||||
[pavucontrol]
|
||||
full_text=♪
|
||||
command=pavucontrol
|
||||
|
||||
[volume]
|
||||
command=~/.config/i3/scripts/volume
|
||||
interval=2
|
||||
|
||||
# display keyboard layout name
|
||||
# for keyboard layouts switcher
|
||||
# see i3 config file
|
||||
# this needs xkblayout-state installed from the AUR:
|
||||
# https://aur.archlinux.org/packages/xkblayout-state-git
|
||||
#[keyboard-layout]
|
||||
#command=~/.config/i3/scripts/keyboard-layout
|
||||
#interval=2
|
||||
|
||||
[keybindings]
|
||||
full_text=
|
||||
command=~/.config/i3/scripts/keyhint
|
||||
|
||||
# power-profiles-daemon implementation:
|
||||
# needs package power-profiles-daemon installed and the service running see here:
|
||||
# https://wiki.archlinux.org/title/CPU_frequency_scaling#power-profiles-daemon
|
||||
|
||||
#set power-profile
|
||||
[ppd_menu]
|
||||
full_text=
|
||||
command=~/.config/i3/scripts/power-profiles
|
||||
color=#407437
|
||||
|
||||
#Show the current power-profile
|
||||
[ppd-status]
|
||||
command=~/.config/i3/scripts/ppd-status
|
||||
interval=5
|
||||
|
||||
[time]
|
||||
#label=
|
||||
command=date '+%a %d %b %H:%M:%S'
|
||||
interval=1
|
||||
|
||||
[shutdown_menu]
|
||||
full_text=
|
||||
command=~/.config/i3/scripts/powermenu
|
||||
|
||||
[simple-2]
|
||||
full_text=: :
|
||||
color=#717171
|
||||
Executable → Regular
-106
@@ -1,106 +0,0 @@
|
||||
EndeavourOS i3wm Keybindings cheat sheet:
|
||||
|
||||
--> to update this run the following command:
|
||||
wget --backups=1 https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/main/.config/i3/keybindings -P ~/.config/i3/
|
||||
|
||||
All sources and updates are available at GitHub:
|
||||
https://github.com/endeavouros-team/endeavouros-i3wm-setup
|
||||
|
||||
For reference consult our WIKI:
|
||||
https://discovery.endeavouros.com/window-tiling-managers/i3-wm/
|
||||
|
||||
= windows key
|
||||
|
||||
# start xfce4-terminal
|
||||
+Return
|
||||
|
||||
# kill focused window
|
||||
+q
|
||||
|
||||
# Application menu search by typing (fancy Rofi menu):
|
||||
+d
|
||||
|
||||
# Window switcher menu (fancy Rofi menu):
|
||||
+t
|
||||
|
||||
# fancy exit-menu on bottom right:
|
||||
+Shift+e
|
||||
|
||||
# Lock the system
|
||||
# lock with a picture or blurring the screen (options in config)
|
||||
+l
|
||||
|
||||
# reload the configuration file
|
||||
+Shift+c
|
||||
|
||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||
+Shift+r
|
||||
|
||||
# keybinding in fancy rofi (automated)
|
||||
F1
|
||||
|
||||
# full keybinding list in editor:
|
||||
+F1
|
||||
|
||||
# change window focus
|
||||
+j focus left
|
||||
+k focus down
|
||||
+b focus up
|
||||
+o focus right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
+Left focus left
|
||||
+Down focus down
|
||||
+Up focus up
|
||||
+Right focus right
|
||||
|
||||
# move a focused window
|
||||
+Shift+j move left
|
||||
+Shift+k move down
|
||||
+Shift+b move up
|
||||
+Shift+o move right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
+Shift+Left move left
|
||||
+Shift+Down move down
|
||||
+Shift+Up move up
|
||||
+Shift+Right move right
|
||||
|
||||
# split in horizontal orientation
|
||||
+h split h
|
||||
|
||||
# split in vertical orientation
|
||||
+v split v
|
||||
|
||||
# enter fullscreen mode for the focused container
|
||||
+f fullscreen toggle
|
||||
|
||||
# change container layout (stacked, tabbed, toggle split)
|
||||
+s layout stacking
|
||||
+g layout tabbed
|
||||
+e layout toggle split
|
||||
|
||||
# toggle tiling / floating
|
||||
+Shift+space floating toggle
|
||||
|
||||
# change focus between tiling / floating windows
|
||||
+space focus mode_toggle
|
||||
|
||||
# focus the parent container
|
||||
+a focus parent
|
||||
|
||||
# focus the child container
|
||||
#+d focus child
|
||||
|
||||
# resize floating window
|
||||
+right mouse button
|
||||
|
||||
## Multimedia Keys
|
||||
|
||||
# Redirect sound to headphones
|
||||
+p
|
||||
|
||||
## App shortcuts
|
||||
+w starts Firefox
|
||||
+n starts Thunar
|
||||
Button screenshot
|
||||
@@ -1,100 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# audio-device-switch - audio device switch with a keybind
|
||||
# Adapted from this:
|
||||
# https://gist.githubusercontent.com/kbravh/1117a974f89cc53664e55823a55ac320/raw/9d04a10ae925074536047ae8100c6b0dbfc303d6/audio-device-switch.sh
|
||||
# Readme: https://gist.github.com/kbravh/1117a974f89cc53664e55823a55ac320
|
||||
# Creator: https://github.com/kbravh
|
||||
|
||||
# Audio Output Switcher
|
||||
# This script will cycle to the next available audio output device.
|
||||
# It can be tied to a hotkey to easily be triggered.
|
||||
# This is handy, for example, for swapping between speakers and headphones.
|
||||
# This script will work on systems running PulseAudio or Pipewire services.
|
||||
|
||||
|
||||
|
||||
# Check which sound server is running
|
||||
if pgrep pulseaudio >/dev/null; then
|
||||
sound_server="pulseaudio"
|
||||
elif pgrep pipewire >/dev/null; then
|
||||
sound_server="pipewire"
|
||||
else
|
||||
echo "Neither PulseAudio nor PipeWire is running."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Grab a count of how many audio sinks we have
|
||||
if [[ "$sound_server" == "pulseaudio" ]]; then
|
||||
sink_count=$(pacmd list-sinks | grep -c "index:[[:space:]][[:digit:]]")
|
||||
# Create an array of the actual sink IDs
|
||||
sinks=()
|
||||
mapfile -t sinks < <(pacmd list-sinks | grep 'index:[[:space:]][[:digit:]]' | sed -n -e 's/.*index:[[:space:]]\([[:digit:]]\)/\1/p')
|
||||
# Get the ID of the active sink
|
||||
active_sink=$(pacmd list-sinks | sed -n -e 's/[[:space:]]*\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p')
|
||||
|
||||
elif [[ "$sound_server" == "pipewire" ]]; then
|
||||
sink_count=$(pactl list sinks | grep -c "Sink #[[:digit:]]")
|
||||
# Create an array of the actual sink IDs
|
||||
sinks=()
|
||||
mapfile -t sinks < <(pactl list sinks | grep 'Sink #[[:digit:]]' | sed -n -e 's/.*Sink #\([[:digit:]]\)/\1/p')
|
||||
# Get the ID of the active sink
|
||||
active_sink_name=$(pactl info | grep 'Default Sink:' | sed -n -e 's/.*Default Sink:[[:space:]]\+\(.*\)/\1/p')
|
||||
active_sink=$(pactl list sinks | grep -B 2 "$active_sink_name" | sed -n -e 's/Sink #\([[:digit:]]\)/\1/p' | head -n 1)
|
||||
fi
|
||||
|
||||
# Get the ID of the last sink in the array
|
||||
final_sink=${sinks[$((sink_count - 1))]}
|
||||
|
||||
# Find the index of the active sink
|
||||
for index in "${!sinks[@]}"; do
|
||||
if [[ "${sinks[$index]}" == "$active_sink" ]]; then
|
||||
active_sink_index=$index
|
||||
fi
|
||||
done
|
||||
|
||||
# Default to the first sink in the list
|
||||
next_sink=${sinks[0]}
|
||||
next_sink_index=0
|
||||
|
||||
# If we're not at the end of the list, move up the list
|
||||
if [[ $active_sink -ne $final_sink ]]; then
|
||||
next_sink_index=$((active_sink_index + 1))
|
||||
next_sink=${sinks[$next_sink_index]}
|
||||
fi
|
||||
|
||||
#change the default sink
|
||||
if [[ "$sound_server" == "pulseaudio" ]]; then
|
||||
pacmd "set-default-sink ${next_sink}"
|
||||
elif [[ "$sound_server" == "pipewire" ]]; then
|
||||
# Get the name of the next sink
|
||||
next_sink_name=$(pactl list sinks | grep -C 2 "Sink #$next_sink" | sed -n -e 's/.*Name:[[:space:]]\+\(.*\)/\1/p' | head -n 1)
|
||||
pactl set-default-sink "$next_sink_name"
|
||||
fi
|
||||
|
||||
#move all inputs to the new sink
|
||||
if [[ "$sound_server" == "pulseaudio" ]]; then
|
||||
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p'); do
|
||||
pacmd "move-sink-input $app $next_sink"
|
||||
done
|
||||
elif [[ "$sound_server" == "pipewire" ]]; then
|
||||
for app in $(pactl list sink-inputs | sed -n -e 's/.*Sink Input #\([[:digit:]]\)/\1/p'); do
|
||||
pactl "move-sink-input $app $next_sink"
|
||||
done
|
||||
fi
|
||||
|
||||
# Create a list of the sink descriptions
|
||||
sink_descriptions=()
|
||||
if [[ "$sound_server" == "pulseaudio" ]]; then
|
||||
mapfile -t sink_descriptions < <(pacmd list-sinks | sed -n -e 's/.*alsa.name[[:space:]]=[[:space:]]"\(.*\)"/\1/p')
|
||||
elif [[ "$sound_server" == "pipewire" ]]; then
|
||||
mapfile -t sink_descriptions < <(pactl list sinks | sed -n -e 's/.*Description:[[:space:]]\+\(.*\)/\1/p')
|
||||
fi
|
||||
|
||||
# Find the index that matches our new active sink
|
||||
for sink_index in "${!sink_descriptions[@]}"; do
|
||||
if [[ "$sink_index" == "$next_sink_index" ]]; then
|
||||
notify-send -i audio-volume-high "Sound output switched to:" "${sink_descriptions[$sink_index]}"
|
||||
exit
|
||||
fi
|
||||
done
|
||||
@@ -1,109 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2015 James Murphy
|
||||
# Licensed under the terms of the GNU GPL v2 only.
|
||||
#
|
||||
# i3blocks blocklet script to monitor bandwidth usage
|
||||
# detecting active device device
|
||||
# option to set used unit
|
||||
|
||||
iface="${BLOCK_INSTANCE}"
|
||||
iface="${IFACE:-$iface}"
|
||||
dt="${DT:-3}"
|
||||
unit="${UNIT:-MB}"
|
||||
LABEL="${LABEL:-<span font='FontAwesome'>⇄ </span>}" # down arrow up arrow
|
||||
printf_command="${PRINTF_COMMAND:-"printf \"${LABEL}%1.0f/%1.0f %s/s\\n\", rx, wx, unit;"}"
|
||||
|
||||
function default_interface {
|
||||
ip route | awk '/^default via/ {print $5; exit}'
|
||||
}
|
||||
|
||||
function check_proc_net_dev {
|
||||
if [ ! -f "/proc/net/dev" ]; then
|
||||
echo "/proc/net/dev not found"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function list_interfaces {
|
||||
check_proc_net_dev
|
||||
echo "Interfaces in /proc/net/dev:"
|
||||
grep -o "^[^:]\\+:" /proc/net/dev | tr -d " :"
|
||||
}
|
||||
|
||||
while getopts i:t:u:p:lh opt; do
|
||||
case "$opt" in
|
||||
i) iface="$OPTARG" ;;
|
||||
t) dt="$OPTARG" ;;
|
||||
u) unit="$OPTARG" ;;
|
||||
p) printf_command="$OPTARG" ;;
|
||||
l) list_interfaces && exit 0 ;;
|
||||
h) printf \
|
||||
"Usage: bandwidth3 [-i interface] [-t time] [-u unit] [-p printf_command] [-l] [-h]
|
||||
Options:
|
||||
-i\tNetwork interface to measure. Default determined using \`ip route\`.
|
||||
-t\tTime interval in seconds between measurements. Default: 3
|
||||
-u\tUnits to measure bytes in. Default: Mb
|
||||
\tAllowed units: Kb, KB, Mb, MB, Gb, GB, Tb, TB
|
||||
\tUnits may have optional it/its/yte/ytes on the end, e.g. Mbits, KByte
|
||||
-p\tAwk command to be called after a measurement is made.
|
||||
\tDefault: printf \"<span font='FontAwesome'> </span>%%-5.1f/%%5.1f %%s/s\\\\n\", rx, wx, unit;
|
||||
\tExposed variables: rx, wx, tx, unit, iface
|
||||
-l\tList available interfaces in /proc/net/dev
|
||||
-h\tShow this help text
|
||||
" && exit 0;;
|
||||
esac
|
||||
done
|
||||
|
||||
check_proc_net_dev
|
||||
|
||||
iface="${iface:-$(default_interface)}"
|
||||
while [ -z "$iface" ]; do
|
||||
echo No default interface
|
||||
sleep "$dt"
|
||||
iface=$(default_interface)
|
||||
done
|
||||
|
||||
case "$unit" in
|
||||
Kb|Kbit|Kbits) bytes_per_unit=$((1024 / 8));;
|
||||
KB|KByte|KBytes) bytes_per_unit=$((1024));;
|
||||
Mb|Mbit|Mbits) bytes_per_unit=$((1024 * 1024 / 8));;
|
||||
MB|MByte|MBytes) bytes_per_unit=$((1024 * 1024));;
|
||||
Gb|Gbit|Gbits) bytes_per_unit=$((1024 * 1024 * 1024 / 8));;
|
||||
GB|GByte|GBytes) bytes_per_unit=$((1024 * 1024 * 1024));;
|
||||
Tb|Tbit|Tbits) bytes_per_unit=$((1024 * 1024 * 1024 * 1024 / 8));;
|
||||
TB|TByte|TBytes) bytes_per_unit=$((1024 * 1024 * 1024 * 1024));;
|
||||
*) echo Bad unit "$unit" && exit 1;;
|
||||
esac
|
||||
|
||||
scalar=$((bytes_per_unit * dt))
|
||||
init_line=$(cat /proc/net/dev | grep "^[ ]*$iface:")
|
||||
if [ -z "$init_line" ]; then
|
||||
echo Interface not found in /proc/net/dev: "$iface"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
init_received=$(awk '{print $2}' <<< $init_line)
|
||||
init_sent=$(awk '{print $10}' <<< $init_line)
|
||||
|
||||
(while true; do cat /proc/net/dev; sleep "$dt"; done) |\
|
||||
stdbuf -oL grep "^[ ]*$iface:" |\
|
||||
awk -v scalar="$scalar" -v unit="$unit" -v iface="$iface" '
|
||||
BEGIN {
|
||||
old_received='"$init_received"'
|
||||
old_sent='"$init_sent"'
|
||||
}
|
||||
{
|
||||
received=$2
|
||||
sent=$10
|
||||
rx=(received-old_received)/scalar
|
||||
wx=(sent-old_sent)/scalar
|
||||
tx=rx+wx
|
||||
old_received=received
|
||||
old_sent=sent
|
||||
if (rx >= 0 && wx >= 0) {
|
||||
'"$printf_command"'
|
||||
fflush(stdout)
|
||||
}
|
||||
}
|
||||
'
|
||||
@@ -1,106 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright (C) 2016 James Murphy
|
||||
# Licensed under the GPL version 2 only
|
||||
#
|
||||
# A battery indicator blocklet script for i3blocks
|
||||
|
||||
from subprocess import check_output
|
||||
import os
|
||||
import re
|
||||
|
||||
config = dict(os.environ)
|
||||
status = check_output(['acpi'], universal_newlines=True)
|
||||
|
||||
if not status:
|
||||
# stands for no battery found
|
||||
color = config.get("color_10", "red")
|
||||
fulltext = "<span color='{}'><span font='FontAwesome'>\uf00d \uf240</span></span>".format(color)
|
||||
percentleft = 100
|
||||
else:
|
||||
# if there is more than one battery in one laptop, the percentage left is
|
||||
# available for each battery separately, although state and remaining
|
||||
# time for overall block is shown in the status of the first battery
|
||||
batteries = status.split("\n")
|
||||
state_batteries=[]
|
||||
commasplitstatus_batteries=[]
|
||||
percentleft_batteries=[]
|
||||
time = ""
|
||||
for battery in batteries:
|
||||
if battery!='':
|
||||
state_batteries.append(battery.split(": ")[1].split(", ")[0])
|
||||
commasplitstatus = battery.split(", ")
|
||||
if not time:
|
||||
time = commasplitstatus[-1].strip()
|
||||
# check if it matches a time
|
||||
time = re.match(r"(\d+):(\d+)", time)
|
||||
if time:
|
||||
time = ":".join(time.groups())
|
||||
timeleft = " ({})".format(time)
|
||||
else:
|
||||
timeleft = ""
|
||||
|
||||
p = int(commasplitstatus[1].rstrip("%\n"))
|
||||
if p>0:
|
||||
percentleft_batteries.append(p)
|
||||
commasplitstatus_batteries.append(commasplitstatus)
|
||||
state = state_batteries[0]
|
||||
commasplitstatus = commasplitstatus_batteries[0]
|
||||
if percentleft_batteries:
|
||||
percentleft = int(sum(percentleft_batteries)/len(percentleft_batteries))
|
||||
else:
|
||||
percentleft = 0
|
||||
|
||||
# stands for charging
|
||||
color = config.get("color_charging", "yellow")
|
||||
FA_LIGHTNING = "<span color='{}'><span font='FontAwesome'>\uf0e7</span></span>".format(color)
|
||||
|
||||
# stands for plugged in
|
||||
FA_PLUG = "<span font='FontAwesome'>\uf1e6</span>"
|
||||
|
||||
# stands for using battery
|
||||
FA_BATTERY = "<span font='FontAwesome'>\uf240</span>"
|
||||
|
||||
# stands for unknown status of battery
|
||||
FA_QUESTION = "<span font='FontAwesome'>\uf128</span>"
|
||||
|
||||
|
||||
if state == "Discharging":
|
||||
fulltext = FA_BATTERY + " "
|
||||
elif state == "Full":
|
||||
fulltext = FA_PLUG + " "
|
||||
timeleft = ""
|
||||
elif state == "Unknown":
|
||||
fulltext = FA_QUESTION + " " + FA_BATTERY + " "
|
||||
timeleft = ""
|
||||
else:
|
||||
fulltext = FA_LIGHTNING + " " + FA_PLUG + " "
|
||||
|
||||
def color(percent):
|
||||
if percent < 10:
|
||||
# exit code 33 will turn background red
|
||||
return config.get("color_10", "#FFFFFF")
|
||||
if percent < 20:
|
||||
return config.get("color_20", "#FF3300")
|
||||
if percent < 30:
|
||||
return config.get("color_30", "#FF6600")
|
||||
if percent < 40:
|
||||
return config.get("color_40", "#FF9900")
|
||||
if percent < 50:
|
||||
return config.get("color_50", "#FFCC00")
|
||||
if percent < 60:
|
||||
return config.get("color_60", "#FFFF00")
|
||||
if percent < 70:
|
||||
return config.get("color_70", "#FFFF33")
|
||||
if percent < 80:
|
||||
return config.get("color_80", "#FFFF66")
|
||||
return config.get("color_full", "#FFFFFF")
|
||||
|
||||
form = '<span color="{}">{}%</span>'
|
||||
fulltext += form.format(color(percentleft), percentleft)
|
||||
#fulltext += timeleft
|
||||
|
||||
print(fulltext)
|
||||
print(fulltext)
|
||||
if percentleft < 10:
|
||||
exit(33)
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# simple Shellscript for i3blocks on Pinebook pro
|
||||
# 05012020 geri123 //at// gmx.net Gerhard S.
|
||||
# battery-symbols: you need the awesome-terminal-font package installed
|
||||
|
||||
PERCENT=$(cat /sys/class/power_supply/cw2015-battery/capacity)
|
||||
STATUS=$(cat /sys/class/power_supply/cw2015-battery/status)
|
||||
case $((
|
||||
$PERCENT >= 0 && $PERCENT <= 20 ? 1 :
|
||||
$PERCENT > 20 && $PERCENT <= 40 ? 2 :
|
||||
$PERCENT > 40 && $PERCENT <= 60 ? 3 :
|
||||
$PERCENT > 60 && $PERCENT <= 80 ? 4 : 5)) in
|
||||
#
|
||||
(1) echo $STATUS:"" :$PERCENT%;;
|
||||
(2) echo $STATUS:"" :$PERCENT%;;
|
||||
(3) echo $STATUS:"" :$PERCENT%;;
|
||||
(4) echo $STATUS:"" :$PERCENT%;;
|
||||
(5) echo $STATUS:"" :$PERCENT%;;
|
||||
esac
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# simple screenlocker using i3lock that creates ablurred screenshot to overlay
|
||||
|
||||
PICTURE=/tmp/i3lock.png
|
||||
SCREENSHOT="scrot -z $PICTURE"
|
||||
|
||||
BLUR="5x4"
|
||||
|
||||
$SCREENSHOT
|
||||
magick $PICTURE -blur $BLUR $PICTURE
|
||||
i3lock -i $PICTURE
|
||||
shred $PICTURE
|
||||
rm $PICTURE
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
|
||||
# Copyright 2014 Vivien Didelot <vivien@didelot.org>
|
||||
# Copyright 2014 Andreas Guldstrand <andreas.guldstrand@gmail.com>
|
||||
#
|
||||
# Licensed under the terms of the GNU GPL v3, or any later version.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use Getopt::Long;
|
||||
|
||||
# default values
|
||||
my $t_warn = $ENV{T_WARN} // 50;
|
||||
my $t_crit = $ENV{T_CRIT} // 80;
|
||||
my $cpu_usage = -1;
|
||||
my $decimals = $ENV{DECIMALS} // 0;
|
||||
my $label = $ENV{LABEL} // "";
|
||||
|
||||
sub help {
|
||||
print "Usage: cpu_usage [-w <warning>] [-c <critical>] [-d <decimals>]\n";
|
||||
print "-w <percent>: warning threshold to become yellow\n";
|
||||
print "-c <percent>: critical threshold to become red\n";
|
||||
print "-d <decimals>: Use <decimals> decimals for percentage (default is $decimals) \n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
GetOptions("help|h" => \&help,
|
||||
"w=i" => \$t_warn,
|
||||
"c=i" => \$t_crit,
|
||||
"d=i" => \$decimals,
|
||||
);
|
||||
|
||||
# Get CPU usage
|
||||
$ENV{LC_ALL}="en_US"; # if mpstat is not run under en_US locale, things may break, so make sure it is
|
||||
open (MPSTAT, 'mpstat 1 1 |') or die;
|
||||
while (<MPSTAT>) {
|
||||
if (/^.*\s+(\d+\.\d+)[\s\x00]?$/) {
|
||||
$cpu_usage = 100 - $1; # 100% - %idle
|
||||
last;
|
||||
}
|
||||
}
|
||||
close(MPSTAT);
|
||||
|
||||
$cpu_usage eq -1 and die 'Can\'t find CPU information';
|
||||
|
||||
# Print short_text, full_text
|
||||
print "${label}";
|
||||
printf "%02.${decimals}f%%\n", $cpu_usage;
|
||||
print "${label}";
|
||||
printf "%02.${decimals}f%%\n", $cpu_usage;
|
||||
|
||||
# Print color, if needed
|
||||
if ($cpu_usage >= $t_crit) {
|
||||
print "#FF0000\n";
|
||||
exit 33;
|
||||
} elsif ($cpu_usage >= $t_warn) {
|
||||
print "#FFFC00\n";
|
||||
}
|
||||
|
||||
exit 0;
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# script to monitor temperatures in waybar/i3blocks e.t.c.
|
||||
# example only use `sensors` to find your names to replace `Tdie|Tctl|Package`
|
||||
# example output part from sensors:
|
||||
# zenpower-pci-00c3
|
||||
# Adapter: PCI adapter
|
||||
# SVI2_Core: 1.03 V
|
||||
# SVI2_SoC: 994.00 mV
|
||||
# Tdie: +53.1°C
|
||||
# Tctl: +53.1°C
|
||||
# Tccd1: +42.5°C
|
||||
# Tccd2: +43.2°C
|
||||
|
||||
temp=$(sensors 2>/dev/null | grep -E 'Tdie|Tctl|Package id 0' | grep -oP '\+?[0-9]+\.\d+(?=°C)' | tr -d '+' | head -n1)
|
||||
|
||||
echo "${temp}°C"
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
DIR="${DIR:-$BLOCK_INSTANCE}"
|
||||
DIR="${DIR:-$HOME}"
|
||||
ALERT_LOW="${ALERT_LOW:-$1}"
|
||||
ALERT_LOW="${ALERT_LOW:-10}" # color will turn red under this value (default: 10%)
|
||||
|
||||
LOCAL_FLAG="-l"
|
||||
if [ "$1" = "-n" ] || [ "$2" = "-n" ]; then
|
||||
LOCAL_FLAG=""
|
||||
fi
|
||||
|
||||
df -h -P $LOCAL_FLAG "$DIR" | awk -v label="$LABEL" -v alert_low=$ALERT_LOW '
|
||||
/\/.*/ {
|
||||
# full text
|
||||
print label $4
|
||||
|
||||
# short text
|
||||
print label $4
|
||||
|
||||
use=$5
|
||||
|
||||
# no need to continue parsing
|
||||
exit 0
|
||||
}
|
||||
|
||||
END {
|
||||
gsub(/%$/,"",use)
|
||||
if (100 - use < alert_low) {
|
||||
# color
|
||||
print "#FF0000"
|
||||
}
|
||||
}
|
||||
'
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (C) 2025 Johannes Kamprad
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# empty_workspace - open a new workspace automatically named with next number on i3
|
||||
|
||||
|
||||
MAX_DESKTOPS=20
|
||||
|
||||
WORKSPACES=$(seq -s '\n' 1 1 ${MAX_DESKTOPS})
|
||||
|
||||
EMPTY_WORKSPACE=$( (i3-msg -t get_workspaces | tr ',' '\n' | grep num | awk -F: '{print int($2)}' ; \
|
||||
echo -e ${WORKSPACES} ) | sort -n | uniq -u | head -n 1)
|
||||
|
||||
i3-msg workspace ${EMPTY_WORKSPACE}
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# script to monitor temperatures in waybar/i3blocks e.t.c.
|
||||
# example only use `sensors` to find your sensor to replace `i915-pci-0600`
|
||||
# example output part from sensors:
|
||||
# i915-pci-0600
|
||||
# Adapter: PCI adapter
|
||||
# in0: 630.00 mV
|
||||
# fan1: 0 RPM
|
||||
# temp1: +55.0°C
|
||||
# energy1: 1.26 MJ
|
||||
|
||||
# examples using Nvidia tools:
|
||||
#echo "$(nvidia-smi --format=csv,noheader --query-gpu=temperature.gpu) °C"
|
||||
#echo "$(nvidia-settings -q gpucoretemp -t) °C"
|
||||
# example using sensor name:
|
||||
sensors 2>/dev/null | awk '/i915-pci-0600/{flag=1} flag && /temp1/ {gsub("\\+", "", $2); print $2, $3; exit}'
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# needed for nwg-looks
|
||||
# usage: import-gsettings
|
||||
config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini"
|
||||
if [ ! -f "$config" ]; then exit 1; fi
|
||||
|
||||
gnome_schema="org.gnome.desktop.interface"
|
||||
gtk_theme="$(grep 'gtk-theme-name' "$config" | cut -d'=' -f2)"
|
||||
icon_theme="$(grep 'gtk-icon-theme-name' "$config" | cut -d'=' -f2)"
|
||||
cursor_theme="$(grep 'gtk-cursor-theme-name' "$config" | cut -d'=' -f2)"
|
||||
font_name="$(grep 'gtk-font-name' "$config" | cut -d'=' -f2)"
|
||||
gsettings set "$gnome_schema" gtk-theme "$gtk_theme"
|
||||
gsettings set "$gnome_schema" icon-theme "$icon_theme"
|
||||
gsettings set "$gnome_schema" cursor-theme "$cursor_theme"
|
||||
gsettings set "$gnome_schema" font-name "$font_name"
|
||||
@@ -1,27 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# simple yad gui to show default keybindings
|
||||
|
||||
Main() {
|
||||
source /usr/share/endeavouros/scripts/eos-script-lib-yad || return 1
|
||||
|
||||
local command=(
|
||||
eos_yad --title="EndeavourOS i3-wm keybindings:" --no-buttons --geometry=400x345-15-400 --list
|
||||
--column=key: --column=description: --column=command:
|
||||
"ESC" "close this app" ""
|
||||
"=" "modkey" "(set mod Mod4)"
|
||||
"+enter" "open a terminal" ""
|
||||
"+Shift+n" "new empty workspace" ""
|
||||
"+w" "open Browser" ""
|
||||
"+n" "open Filebrowser" ""
|
||||
"+d" "app menu" ""
|
||||
"+q" "close focused app" ""
|
||||
"Print-key" "screenshot" ""
|
||||
"+Shift+e" "logout menu" ""
|
||||
"F1" "open keybinding helper" ""
|
||||
)
|
||||
|
||||
"${command[@]}"
|
||||
}
|
||||
|
||||
Main "$@"
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# keyhint rofi tool to search used keybindings in i3wm
|
||||
|
||||
I3_CONFIG=$HOME/.config/i3/config
|
||||
mod_key=$(sed -nre 's/^set \$mod (.*)/\1/p' ${I3_CONFIG})
|
||||
grep "^bindsym" ${I3_CONFIG} \
|
||||
| sed "s/-\(-\w\+\)\+//g;s/\$mod/${mod_key}/g;s/Mod1/Alt/g;s/exec //;s/bindsym //;s/^\s\+//;s/^\([^ ]\+\) \(.\+\)$/\2: \1/;s/^\s\+//" \
|
||||
| tr -s ' ' \
|
||||
| rofi -dmenu -theme ~/.config/rofi/rofikeyhint.rasi
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Skip lock if a fullscreen window is active (game, video, etc.)
|
||||
active=$(xprop -root _NET_ACTIVE_WINDOW 2>/dev/null | awk '{print $NF}')
|
||||
if [ -n "$active" ] && [ "$active" != "0x0" ]; then
|
||||
state=$(xprop -id "$active" _NET_WM_STATE 2>/dev/null)
|
||||
if echo "$state" | grep -q "_NET_WM_STATE_FULLSCREEN"; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
exec ~/.config/i3/scripts/lock-now "$1"
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/bash
|
||||
wall_dir="${1:?wallpaper directory required}"
|
||||
img=$(find "$wall_dir" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | shuf -n1)
|
||||
tmp=/tmp/lockscreen.png
|
||||
res=$(xrandr --current | awk '/ connected/ {getline; print $1; exit}')
|
||||
: "${res:=1920x1080}"
|
||||
if [ -n "$img" ] && convert "$img" -resize "${res}^" -gravity Center -extent "$res" "$tmp" 2>/dev/null; then
|
||||
exec i3lock -i "$tmp" --nofork
|
||||
else
|
||||
exec i3lock -c 000000 --nofork
|
||||
fi
|
||||
@@ -1,69 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
TYPE="${BLOCK_INSTANCE:-mem}"
|
||||
|
||||
awk -v type=$TYPE '
|
||||
/^MemTotal:/ {
|
||||
mem_total=$2
|
||||
}
|
||||
/^MemFree:/ {
|
||||
mem_free=$2
|
||||
}
|
||||
/^Buffers:/ {
|
||||
mem_free+=$2
|
||||
}
|
||||
/^Cached:/ {
|
||||
mem_free+=$2
|
||||
}
|
||||
/^SwapTotal:/ {
|
||||
swap_total=$2
|
||||
}
|
||||
/^SwapFree:/ {
|
||||
swap_free=$2
|
||||
}
|
||||
END {
|
||||
if (type == "swap") {
|
||||
free=swap_free/1024/1024
|
||||
used=(swap_total-swap_free)/1024/1024
|
||||
total=swap_total/1024/1024
|
||||
} else {
|
||||
free=mem_free/1024/1024
|
||||
used=(mem_total-mem_free)/1024/1024
|
||||
total=mem_total/1024/1024
|
||||
}
|
||||
|
||||
pct=0
|
||||
if (total > 0) {
|
||||
pct=used/total*100
|
||||
}
|
||||
|
||||
# full text
|
||||
# printf("%.1fG/%.1fG (%.f%%)\n", used, total, pct)
|
||||
|
||||
# short text
|
||||
printf("%02.f%%\n", pct)
|
||||
|
||||
# color
|
||||
if (pct > 90) {
|
||||
print("#FF0000")
|
||||
} else if (pct > 80) {
|
||||
print("#FFAE00")
|
||||
} else if (pct > 70) {
|
||||
print("#FFF600")
|
||||
}
|
||||
}
|
||||
' /proc/meminfo
|
||||
@@ -1,471 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# openweater - OpenWeatherMap Weather Fetcher for Waybar/Status Bars
|
||||
#
|
||||
# Copyright (C) 2025 Johannes Kamprad
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
# openweater - OpenWeatherMap Weather Fetcher for Waybar/Status Bars
|
||||
# Secure API key handling with configurable locations
|
||||
# including setup script and help
|
||||
# Options:
|
||||
# -h, --help Show this help message
|
||||
# -c, --city-id ID Override city ID (required if not in config)
|
||||
# -k, --api-key KEY Override API key (not recommended, use config file)
|
||||
# -u, --units UNITS Units: metric, imperial, kelvin (default: $DEFAULT_UNITS)
|
||||
# -f, --force-refresh Force refresh (ignore cache)
|
||||
# --setup Interactive setup wizard
|
||||
# --show-config Show current configuration
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Set C locale to avoid German decimal formatting issues
|
||||
export LC_NUMERIC=C
|
||||
export LC_ALL=C
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Default configuration (no default location)
|
||||
DEFAULT_UNITS="metric"
|
||||
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||
CONFIG_FILE="$CONFIG_DIR/openweather/config"
|
||||
CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/openweather"
|
||||
CACHE_FILE="$CACHE_DIR/weather_data"
|
||||
CACHE_DURATION=600 # 10 minutes
|
||||
|
||||
# Logging functions
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $*" >&2
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $*" >&2
|
||||
}
|
||||
|
||||
# Show help
|
||||
show_help() {
|
||||
cat << EOF
|
||||
Usage: $(basename "$0") [OPTIONS]
|
||||
|
||||
Secure OpenWeatherMap weather fetcher with configurable locations.
|
||||
|
||||
Options:
|
||||
-h, --help Show this help message
|
||||
-c, --city-id ID Override city ID (required if not in config)
|
||||
-k, --api-key KEY Override API key (not recommended, use config file)
|
||||
-u, --units UNITS Units: metric, imperial, kelvin (default: $DEFAULT_UNITS)
|
||||
-f, --force-refresh Force refresh (ignore cache)
|
||||
--setup Interactive setup wizard
|
||||
--show-config Show current configuration
|
||||
|
||||
Configuration:
|
||||
Config file: $CONFIG_FILE
|
||||
|
||||
Create config file with:
|
||||
OPENWEATHER_API_KEY="your_api_key_here"
|
||||
OPENWEATHER_CITY_ID="your_city_id" # Required
|
||||
OPENWEATHER_UNITS="metric" # Optional
|
||||
|
||||
Examples:
|
||||
$(basename "$0") # Use config file settings
|
||||
$(basename "$0") --city-id 5128581 # New York
|
||||
$(basename "$0") --units imperial # Fahrenheit
|
||||
$(basename "$0") --setup # Run setup wizard
|
||||
|
||||
Get your free API key at: https://openweathermap.org/api
|
||||
Find city IDs at: https://openweathermap.org/find
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Check dependencies
|
||||
check_dependencies() {
|
||||
local missing_deps=()
|
||||
|
||||
for cmd in jq curl; do
|
||||
if ! command -v "$cmd" >/dev/null 2>&1; then
|
||||
missing_deps+=("$cmd")
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#missing_deps[@]} -gt 0 ]]; then
|
||||
log_error "Missing required dependencies: ${missing_deps[*]}"
|
||||
echo "Install with: sudo pacman -S ${missing_deps[*]}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Load configuration
|
||||
load_config() {
|
||||
# Set defaults (no default city ID)
|
||||
OPENWEATHER_CITY_ID=""
|
||||
OPENWEATHER_UNITS="$DEFAULT_UNITS"
|
||||
|
||||
# Load from config file if it exists
|
||||
if [[ -f "$CONFIG_FILE" ]]; then
|
||||
source "$CONFIG_FILE"
|
||||
fi
|
||||
|
||||
# Override with environment variables if set
|
||||
OPENWEATHER_API_KEY="${OPENWEATHER_API_KEY:-}"
|
||||
OPENWEATHER_CITY_ID="${OPENWEATHER_CITY_ID:-}"
|
||||
OPENWEATHER_UNITS="${OPENWEATHER_UNITS:-$DEFAULT_UNITS}"
|
||||
}
|
||||
|
||||
# Validate API key
|
||||
validate_api_key() {
|
||||
if [[ -z "$OPENWEATHER_API_KEY" ]]; then
|
||||
log_error "No API key found!"
|
||||
echo
|
||||
echo "To fix this:"
|
||||
echo "1. Get free API key: https://openweathermap.org/api"
|
||||
echo "2. Run setup wizard: $0 --setup"
|
||||
echo "3. Or set environment variable: export OPENWEATHER_API_KEY=your_key"
|
||||
echo "4. Or create config file: $CONFIG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Basic validation (OpenWeatherMap keys are typically 32 chars)
|
||||
if [[ ${#OPENWEATHER_API_KEY} -ne 32 ]]; then
|
||||
log_warn "API key length seems incorrect (expected 32 characters, got ${#OPENWEATHER_API_KEY})"
|
||||
fi
|
||||
}
|
||||
|
||||
# Validate city ID
|
||||
validate_city_id() {
|
||||
if [[ -z "$OPENWEATHER_CITY_ID" ]]; then
|
||||
log_error "No city ID found!"
|
||||
echo
|
||||
echo "To fix this:"
|
||||
echo "1. Run setup wizard: $0 --setup"
|
||||
echo "2. Or set environment variable: export OPENWEATHER_CITY_ID=your_city_id"
|
||||
echo "3. Or add OPENWEATHER_CITY_ID=\"your_city_id\" to: $CONFIG_FILE"
|
||||
echo "4. Or provide city ID via command line: $0 --city-id your_city_id"
|
||||
echo
|
||||
echo "Find city IDs at: https://openweathermap.org/find"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Basic validation (city IDs are typically numeric)
|
||||
if [[ ! "$OPENWEATHER_CITY_ID" =~ ^[0-9]+$ ]]; then
|
||||
log_warn "City ID format seems incorrect (expected numeric, got: $OPENWEATHER_CITY_ID)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Setup wizard
|
||||
run_setup() {
|
||||
echo -e "${GREEN}=== OpenWeatherMap Setup Wizard ===${NC}"
|
||||
echo
|
||||
|
||||
# Create config directory
|
||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||
|
||||
# Get API key
|
||||
echo "Get your free API key at: https://openweathermap.org/api"
|
||||
echo
|
||||
echo -n "Enter your OpenWeatherMap API key: "
|
||||
read -r api_key
|
||||
|
||||
if [[ -z "$api_key" ]]; then
|
||||
log_error "API key cannot be empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get city ID (required)
|
||||
echo
|
||||
echo "Find your city ID at: https://openweathermap.org/find"
|
||||
echo -n "Enter city ID: "
|
||||
read -r city_id
|
||||
|
||||
if [[ -z "$city_id" ]]; then
|
||||
log_error "City ID cannot be empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get units (optional)
|
||||
echo
|
||||
echo "Available units: metric (°C), imperial (°F), kelvin (K)"
|
||||
echo -n "Enter units [metric]: "
|
||||
read -r units
|
||||
units="${units:-metric}"
|
||||
|
||||
# Write config file
|
||||
cat > "$CONFIG_FILE" << EOF
|
||||
# OpenWeatherMap Configuration
|
||||
# Generated by $(basename "$0") setup wizard on $(date)
|
||||
|
||||
# Your API key from https://openweathermap.org/api
|
||||
OPENWEATHER_API_KEY="$api_key"
|
||||
|
||||
# City ID from https://openweathermap.org/find
|
||||
OPENWEATHER_CITY_ID="$city_id"
|
||||
|
||||
# Units: metric, imperial, kelvin
|
||||
OPENWEATHER_UNITS="$units"
|
||||
EOF
|
||||
|
||||
# Set secure permissions
|
||||
chmod 600 "$CONFIG_FILE"
|
||||
|
||||
echo
|
||||
echo -e "${GREEN}✅ Configuration saved to: $CONFIG_FILE${NC}"
|
||||
echo -e "${GREEN}✅ File permissions set to 600 (user read/write only)${NC}"
|
||||
echo
|
||||
echo "Testing configuration..."
|
||||
|
||||
# Test the configuration
|
||||
OPENWEATHER_API_KEY="$api_key"
|
||||
OPENWEATHER_CITY_ID="$city_id"
|
||||
OPENWEATHER_UNITS="$units"
|
||||
|
||||
if fetch_weather_data; then
|
||||
echo -e "${GREEN}✅ Configuration test successful!${NC}"
|
||||
else
|
||||
log_error "Configuration test failed. Please check your API key and city ID."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Show current configuration
|
||||
show_config() {
|
||||
echo "=== Current Configuration ==="
|
||||
echo "Config file: $CONFIG_FILE"
|
||||
echo "Cache file: $CACHE_FILE"
|
||||
echo "Cache duration: ${CACHE_DURATION}s"
|
||||
echo
|
||||
|
||||
if [[ -f "$CONFIG_FILE" ]]; then
|
||||
echo "Configuration:"
|
||||
echo " API Key: ${OPENWEATHER_API_KEY:0:8}... (${#OPENWEATHER_API_KEY} chars)"
|
||||
echo " City ID: $OPENWEATHER_CITY_ID"
|
||||
echo " Units: $OPENWEATHER_UNITS"
|
||||
else
|
||||
echo "❌ No configuration file found at: $CONFIG_FILE"
|
||||
echo "Run: $0 --setup"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check cache validity
|
||||
is_cache_valid() {
|
||||
[[ -f "$CACHE_FILE" ]] && \
|
||||
[[ $(($(date +%s) - $(stat -c %Y "$CACHE_FILE" 2>/dev/null || echo 0))) -lt $CACHE_DURATION ]]
|
||||
}
|
||||
|
||||
# Fetch weather data from API
|
||||
fetch_weather_data() {
|
||||
local url="https://api.openweathermap.org/data/2.5/weather?id=${OPENWEATHER_CITY_ID}&units=${OPENWEATHER_UNITS}&appid=${OPENWEATHER_API_KEY}"
|
||||
|
||||
local response
|
||||
if ! response=$(curl -sf "$url" 2>/dev/null); then
|
||||
log_error "Failed to fetch weather data from API"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Validate JSON response
|
||||
if ! echo "$response" | jq . >/dev/null 2>&1; then
|
||||
log_error "Invalid JSON response from API"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check for API error
|
||||
local api_code
|
||||
api_code=$(echo "$response" | jq -r '.cod // empty')
|
||||
if [[ "$api_code" != "200" ]]; then
|
||||
local api_message
|
||||
api_message=$(echo "$response" | jq -r '.message // "Unknown API error"')
|
||||
log_error "API Error ($api_code): $api_message"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Cache the response
|
||||
mkdir -p "$CACHE_DIR"
|
||||
echo "$response" > "$CACHE_FILE"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Get weather data (from cache or API)
|
||||
get_weather_data() {
|
||||
local force_refresh="${1:-false}"
|
||||
|
||||
if [[ "$force_refresh" != "true" ]] && is_cache_valid; then
|
||||
cat "$CACHE_FILE"
|
||||
else
|
||||
if fetch_weather_data; then
|
||||
cat "$CACHE_FILE"
|
||||
else
|
||||
# Fallback to cache if available
|
||||
if [[ -f "$CACHE_FILE" ]]; then
|
||||
log_warn "Using stale cache data due to API failure"
|
||||
cat "$CACHE_FILE"
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Calculate wind direction
|
||||
get_wind_direction() {
|
||||
local degrees="$1"
|
||||
local directions=(N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW)
|
||||
local index
|
||||
index=$(awk "BEGIN {print int(($degrees % 360) / 22.5)}")
|
||||
echo "${directions[$index]}"
|
||||
}
|
||||
|
||||
# Get weather icon
|
||||
get_weather_icon() {
|
||||
local condition="$1"
|
||||
case "$condition" in
|
||||
'Clear') echo "☀" ;; # Clear sky
|
||||
'Clouds') echo "☁" ;; # Cloudy
|
||||
'Rain'|'Drizzle') echo "🌧" ;; # Rain
|
||||
'Snow') echo "❄" ;; # Snow
|
||||
'Thunderstorm') echo "⛈" ;; # Thunder
|
||||
'Mist'|'Fog') echo "🌫" ;; # Fog
|
||||
*) echo "🌤" ;; # Default
|
||||
esac
|
||||
}
|
||||
|
||||
# Safe number formatting (handles locale issues)
|
||||
safe_printf() {
|
||||
local format="$1"
|
||||
local number="$2"
|
||||
|
||||
# Validate number is actually numeric
|
||||
if [[ ! "$number" =~ ^-?[0-9]+(\.[0-9]+)?$ ]]; then
|
||||
echo "0.0"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Use awk for reliable formatting regardless of locale
|
||||
awk "BEGIN {printf \"$format\", $number}"
|
||||
}
|
||||
|
||||
# Format weather output
|
||||
format_weather() {
|
||||
local weather_data="$1"
|
||||
|
||||
# Parse weather data with error checking
|
||||
local condition temp wind_speed_ms wind_deg
|
||||
condition=$(echo "$weather_data" | jq -r '.weather[0].main // "Unknown"')
|
||||
temp=$(echo "$weather_data" | jq -r '.main.temp // "0"')
|
||||
wind_speed_ms=$(echo "$weather_data" | jq -r '.wind.speed // "0"')
|
||||
wind_deg=$(echo "$weather_data" | jq -r '.wind.deg // "0"')
|
||||
|
||||
# Validate parsed data
|
||||
[[ "$condition" == "null" ]] && condition="Unknown"
|
||||
[[ "$temp" == "null" ]] && temp="0"
|
||||
[[ "$wind_speed_ms" == "null" ]] && wind_speed_ms="0"
|
||||
[[ "$wind_deg" == "null" ]] && wind_deg="0"
|
||||
|
||||
# Format temperature with safe formatting
|
||||
local temp_formatted
|
||||
temp_formatted=$(safe_printf "%.1f" "$temp")
|
||||
|
||||
# Convert wind speed to km/h with safe formatting
|
||||
local wind_speed_kmh
|
||||
wind_speed_kmh=$(awk "BEGIN {printf \"%.1f\", ($wind_speed_ms + 0) * 3.6}")
|
||||
|
||||
# Get wind direction
|
||||
local wind_dir
|
||||
wind_dir=$(get_wind_direction "$wind_deg")
|
||||
|
||||
# Get weather icon
|
||||
local icon
|
||||
icon=$(get_weather_icon "$condition")
|
||||
|
||||
# Format unit symbol
|
||||
local unit_symbol
|
||||
case "$OPENWEATHER_UNITS" in
|
||||
"imperial") unit_symbol="°F" ;;
|
||||
"kelvin") unit_symbol="K" ;;
|
||||
*) unit_symbol="°C" ;;
|
||||
esac
|
||||
|
||||
# Output formatted weather
|
||||
echo "${icon} ${temp_formatted}${unit_symbol}, ${wind_speed_kmh} km/h ${wind_dir}"
|
||||
}
|
||||
|
||||
# Main function
|
||||
main() {
|
||||
local city_id_override=""
|
||||
local api_key_override=""
|
||||
local units_override=""
|
||||
local force_refresh="false"
|
||||
|
||||
# Parse command line arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
-c|--city-id)
|
||||
city_id_override="$2"
|
||||
shift 2
|
||||
;;
|
||||
-k|--api-key)
|
||||
api_key_override="$2"
|
||||
shift 2
|
||||
;;
|
||||
-u|--units)
|
||||
units_override="$2"
|
||||
shift 2
|
||||
;;
|
||||
-f|--force-refresh)
|
||||
force_refresh="true"
|
||||
shift
|
||||
;;
|
||||
--setup)
|
||||
check_dependencies
|
||||
run_setup
|
||||
exit 0
|
||||
;;
|
||||
--show-config)
|
||||
load_config
|
||||
show_config
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown option: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check dependencies
|
||||
check_dependencies
|
||||
|
||||
# Load configuration
|
||||
load_config
|
||||
|
||||
# Apply overrides
|
||||
[[ -n "$city_id_override" ]] && OPENWEATHER_CITY_ID="$city_id_override"
|
||||
[[ -n "$api_key_override" ]] && OPENWEATHER_API_KEY="$api_key_override"
|
||||
[[ -n "$units_override" ]] && OPENWEATHER_UNITS="$units_override"
|
||||
|
||||
# Validate configuration
|
||||
validate_api_key
|
||||
validate_city_id
|
||||
|
||||
# Get and format weather data
|
||||
local weather_data
|
||||
if weather_data=$(get_weather_data "$force_refresh"); then
|
||||
format_weather "$weather_data"
|
||||
else
|
||||
echo "⚠️ Weather data unavailable"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
@@ -1,64 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Simple power-profiles-daemon switcher using rofi and static theme, with notification
|
||||
#
|
||||
# Copyright (C) 2025 Johannes Kamprad
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# needs rofi config:
|
||||
# $HOME/.config/rofi/powermenu.rasi
|
||||
|
||||
ROFI_THEME="${HOME}/.config/rofi/power-profiles.rasi"
|
||||
|
||||
# Dependency checks
|
||||
command -v powerprofilesctl >/dev/null 2>&1 || { echo "powerprofilesctl not found"; exit 1; }
|
||||
command -v rofi >/dev/null 2>&1 || { echo "rofi not found"; exit 1; }
|
||||
if ! command -v notify-send >/dev/null 2>&1; then
|
||||
notify_send_missing=true
|
||||
fi
|
||||
|
||||
current_profile="$(powerprofilesctl get 2>/dev/null)"
|
||||
ROFI_ARGS=(-dmenu -i -theme "$ROFI_THEME" -p "Change Profile" -mesg "<b>Current used:</b> $current_profile" -markup-rows)
|
||||
|
||||
# Menu entries
|
||||
cancel=" Cancel"
|
||||
perf=" Performance"
|
||||
balanced=" Balanced"
|
||||
powersave=" Power Saver"
|
||||
# sets chancel to be on top
|
||||
options="$cancel"
|
||||
|
||||
if powerprofilesctl list | grep -q "performance"; then
|
||||
options="$options\n$perf"
|
||||
fi
|
||||
if powerprofilesctl list | grep -q "balanced"; then
|
||||
options="$options\n$balanced"
|
||||
fi
|
||||
if powerprofilesctl list | grep -q "power-saver"; then
|
||||
options="$options\n$powersave"
|
||||
fi
|
||||
|
||||
# Show menu
|
||||
chosen="$(echo -e "$options" | rofi "${ROFI_ARGS[@]}")"
|
||||
|
||||
# Run selection
|
||||
case $chosen in
|
||||
"$perf")
|
||||
powerprofilesctl set performance
|
||||
;;
|
||||
"$balanced")
|
||||
powerprofilesctl set balanced
|
||||
;;
|
||||
"$powersave")
|
||||
powerprofilesctl set power-saver
|
||||
;;
|
||||
"$cancel"|"")
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
# Send notification if available
|
||||
if [[ "$chosen" != "$cancel" && -z "${notify_send_missing}" ]]; then
|
||||
notify-send -i dialog-information "Power Profile Changed" "New profile: ${chosen}"
|
||||
fi
|
||||
@@ -1,81 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# powermenu - a very simple rofi powermenu
|
||||
#
|
||||
# Copyright (C) 2025 Johannes Kamprad
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# needs rofi config:
|
||||
# $HOME/.config/rofi/powermenu.rasi
|
||||
# set to be used in i3wm
|
||||
|
||||
ROFI_THEME="${HOME}/.config/rofi/powermenu.rasi"
|
||||
# Define possible lock scripts/commands (edit this list as you like)
|
||||
LOCK_SCRIPTS=("${HOME}/.config/i3/scripts/blur-lock" "i3lock")
|
||||
|
||||
# Find available lock script
|
||||
find_lock_script() {
|
||||
for script in "${LOCK_SCRIPTS[@]}"; do
|
||||
# Handle command names vs full paths
|
||||
if [[ "$script" =~ ^[a-zA-Z0-9_-]+$ ]]; then
|
||||
# It's a command name, check if available
|
||||
if command -v "$script" >/dev/null 2>&1; then
|
||||
echo "$script"
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
# It's a path, check if file exists and is executable
|
||||
if [[ -x "$script" ]]; then
|
||||
echo "$script"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
# Menu entries
|
||||
chancel=" Cancel"
|
||||
lock=" Lock"
|
||||
logout=" Logout"
|
||||
reboot=" Reboot"
|
||||
shutdown=" Shutdown"
|
||||
suspend=" Suspend"
|
||||
hibernate=" Hibernate"
|
||||
|
||||
|
||||
# Add lock only if script is found
|
||||
if lockcmd="$(find_lock_script)"; then
|
||||
options="$chancel\n$lock\n$logout\n$reboot\n$shutdown\n$suspend\n$hibernate"
|
||||
else
|
||||
options="$chancel\n$logout\n$reboot\n$shutdown\n$suspend\n$hibernate"
|
||||
fi
|
||||
|
||||
chosen="$(echo -e "$options" | rofi -dmenu -i -p "Power Menu" \
|
||||
-theme $ROFI_THEME)"
|
||||
|
||||
case $chosen in
|
||||
"$lock")
|
||||
$lockcmd
|
||||
;;
|
||||
"$cancel"|"")
|
||||
exit 0
|
||||
;;
|
||||
"$logout")
|
||||
i3-msg exit
|
||||
;;
|
||||
"$reboot")
|
||||
systemctl reboot
|
||||
;;
|
||||
"$shutdown")
|
||||
systemctl poweroff
|
||||
;;
|
||||
"$suspend")
|
||||
systemctl suspend
|
||||
;;
|
||||
"$hibernate")
|
||||
systemctl hibernate
|
||||
;;
|
||||
esac
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
|
||||
# power-profiles-daemon implementation:
|
||||
# needs package power-profiles-daemon installed and the service running see here:
|
||||
# https://wiki.archlinux.org/title/CPU_frequency_scaling#power-profiles-daemon
|
||||
# used in i3-blocks: ~/.config/i3/i3blocks.conf together with: ~/.config/i3/scripts/power-profiles
|
||||
|
||||
|
||||
# assign tags or translations to each profile
|
||||
declare -A tags
|
||||
tags=(
|
||||
[performance]="Performance"
|
||||
[balanced]="Balanced"
|
||||
[power-saver]="Power saver"
|
||||
)
|
||||
|
||||
# Get current profile
|
||||
current_profile=$(/usr/bin/powerprofilesctl get)
|
||||
|
||||
# Get tag from the array
|
||||
profile_tag=${tags[$current_profile]}
|
||||
|
||||
# Show tag on i3block
|
||||
echo "${profile_tag:-$current_profile}"
|
||||
@@ -1,75 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
# Copyright 2014 Pierre Mavro <deimos at deimos dot fr>
|
||||
# Copyright 2014 Vivien Didelot <vivien at didelot.org>
|
||||
# Copyright 2014 Andreas Guldstrand <andreas.guldstrand at gmail dot com>
|
||||
# Copyright 2014 Benjamin Chretien <chretien at lirmm dot fr>
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# Edited by Andreas Lindlbauer <endeavouros.mousily@aleeas.com>
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use Getopt::Long;
|
||||
|
||||
binmode(STDOUT, ":utf8");
|
||||
|
||||
# default values
|
||||
my $t_warn = $ENV{T_WARN} || 70;
|
||||
my $t_crit = $ENV{T_CRIT} || 90;
|
||||
my $chip = $ENV{SENSOR_CHIP} || "";
|
||||
my $temperature = -9999;
|
||||
my $label = "😀 ";
|
||||
|
||||
sub help {
|
||||
print "Usage: temperature [-w <warning>] [-c <critical>] [--chip <chip>]\n";
|
||||
print "-w <percent>: warning threshold to become yellow\n";
|
||||
print "-c <percent>: critical threshold to become red\n";
|
||||
print "--chip <chip>: sensor chip\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
GetOptions("help|h" => \&help,
|
||||
"w=i" => \$t_warn,
|
||||
"c=i" => \$t_crit,
|
||||
"chip=s" => \$chip);
|
||||
|
||||
# Get chip temperature
|
||||
open (SENSORS, "sensors -u $chip |") or die;
|
||||
while (<SENSORS>) {
|
||||
if (/^\s+temp1_input:\s+[\+]*([\-]*\d+\.\d)/) {
|
||||
$temperature = $1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
close(SENSORS);
|
||||
|
||||
$temperature eq -9999 and die 'Cannot find temperature';
|
||||
|
||||
if ($temperature < 45) {
|
||||
$label = '';
|
||||
} elsif ($temperature < 55) {
|
||||
$label = '';
|
||||
} elsif ($temperature < 65) {
|
||||
$label = '';
|
||||
} elsif ($temperature < 75) {
|
||||
$label = '';
|
||||
} else {
|
||||
$label = '';
|
||||
}
|
||||
# Print short_text, full_text
|
||||
print "${label}";
|
||||
print " $temperature°C\n";
|
||||
print "${label}";
|
||||
print " $temperature°C\n";
|
||||
|
||||
# Print color, if needed
|
||||
if ($temperature >= $t_crit) {
|
||||
print "#FF0000\n";
|
||||
exit 33;
|
||||
} elsif ($temperature >= $t_warn) {
|
||||
print "#FFFC00\n";
|
||||
}
|
||||
|
||||
exit 0;
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# i3blocks volume block for PipeWire (PulseAudio compatible)
|
||||
|
||||
STEP=${1:-5%}
|
||||
|
||||
# Default sink
|
||||
SINK=$(pactl info | awk '/Default Sink/ {print $3}')
|
||||
[[ -z "$SINK" ]] && { echo "No audio"; exit 0; }
|
||||
|
||||
# Handle scroll/middle-click
|
||||
case "$BLOCK_BUTTON" in
|
||||
3) pactl set-sink-mute "$SINK" toggle ;; # right click = mute/unmute
|
||||
4) pactl set-sink-volume "$SINK" +$STEP ;; # scroll up
|
||||
5) pactl set-sink-volume "$SINK" -$STEP ;; # scroll down
|
||||
esac
|
||||
|
||||
# Get current volume (front-left channel)
|
||||
VOL=$(pactl list sinks | awk -v s="$SINK" '
|
||||
$0 ~ "Name: " s {found=1}
|
||||
found && /Volume:/ {gsub("%","",$5); print $5; exit}
|
||||
')
|
||||
|
||||
# Get mute state
|
||||
MUTED=$(pactl list sinks | awk -v s="$SINK" '
|
||||
$0 ~ "Name: " s {found=1}
|
||||
found && /Mute:/ {print $2; exit}
|
||||
')
|
||||
|
||||
# Choose symbol
|
||||
AUDIO_HIGH=''
|
||||
AUDIO_MED=''
|
||||
AUDIO_LOW=''
|
||||
AUDIO_MUTED=''
|
||||
MED_THRESH=50
|
||||
LOW_THRESH=0
|
||||
|
||||
if [[ "$MUTED" == "no" ]]; then
|
||||
SYMB=$AUDIO_HIGH
|
||||
[[ $VOL -le $MED_THRESH ]] && SYMB=$AUDIO_MED
|
||||
[[ $VOL -le $LOW_THRESH ]] && SYMB=$AUDIO_LOW
|
||||
else
|
||||
SYMB=$AUDIO_MUTED
|
||||
fi
|
||||
|
||||
# Single-line output for i3blocks
|
||||
echo "${SYMB} ${VOL}%"
|
||||
@@ -1,95 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# original source: https://gitlab.com/Nmoleo/i3-volume-brightness-indicator
|
||||
# changed to use brightnessctl [xbacklight is non functional on modern hardware]
|
||||
# by joekamprad [Aug 2025]
|
||||
|
||||
bar_color="#7f7fff"
|
||||
volume_step=1
|
||||
brightness_step=5
|
||||
max_volume=100
|
||||
notification_timeout=1000 # in ms
|
||||
|
||||
# Uses regex to get volume from pactl
|
||||
function get_volume {
|
||||
pactl get-sink-volume @DEFAULT_SINK@ | grep -Po '[0-9]{1,3}(?=%)' | head -1
|
||||
}
|
||||
|
||||
# Uses regex to get mute status from pactl
|
||||
function get_mute {
|
||||
pactl get-sink-mute @DEFAULT_SINK@ | grep -Po '(?<=Mute: )(yes|no)'
|
||||
}
|
||||
|
||||
# Uses brightnessctl instead of xbacklight
|
||||
function get_brightness {
|
||||
brightnessctl g | awk '{print int($1)}'
|
||||
# You could also use: brightnessctl info | grep -Po '(?<=Current brightness: )[0-9]+'
|
||||
}
|
||||
|
||||
# Calculates brightness percentage
|
||||
function get_brightness_percent {
|
||||
current=$(brightnessctl g)
|
||||
max=$(brightnessctl m)
|
||||
percent=$(( 100 * current / max ))
|
||||
echo $percent
|
||||
}
|
||||
|
||||
function get_volume_icon {
|
||||
volume=$(get_volume)
|
||||
mute=$(get_mute)
|
||||
if [ "$volume" -eq 0 ] || [ "$mute" == "yes" ] ; then
|
||||
volume_icon=""
|
||||
elif [ "$volume" -lt 50 ]; then
|
||||
volume_icon=""
|
||||
else
|
||||
volume_icon=""
|
||||
fi
|
||||
}
|
||||
|
||||
function get_brightness_icon {
|
||||
brightness_icon=""
|
||||
}
|
||||
|
||||
function show_volume_notif {
|
||||
volume=$(get_volume)
|
||||
get_volume_icon
|
||||
notify-send -i volume_icon -t 1000 "Volume" "$volume_icon $volume%" -h int:value:$volume -h string:x-canonical-private-synchronous:volume
|
||||
}
|
||||
|
||||
|
||||
function show_brightness_notif {
|
||||
get_brightness_icon
|
||||
brightness=$(get_brightness_percent)
|
||||
notify-send -i brightness_icon -t $notification_timeout -h string:x-dunst-stack-tag:brightness_notif -h int:value:$brightness "$brightness_icon $brightness%"
|
||||
}
|
||||
|
||||
|
||||
|
||||
case $1 in
|
||||
volume_up)
|
||||
pactl set-sink-mute @DEFAULT_SINK@ 0
|
||||
volume=$(get_volume)
|
||||
if [ $(( "$volume" + "$volume_step" )) -gt $max_volume ]; then
|
||||
pactl set-sink-volume @DEFAULT_SINK@ $max_volume%
|
||||
else
|
||||
pactl set-sink-volume @DEFAULT_SINK@ +$volume_step%
|
||||
fi
|
||||
show_volume_notif
|
||||
;;
|
||||
volume_down)
|
||||
pactl set-sink-volume @DEFAULT_SINK@ -$volume_step%
|
||||
show_volume_notif
|
||||
;;
|
||||
volume_mute)
|
||||
pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||
show_volume_notif
|
||||
;;
|
||||
brightness_up)
|
||||
brightnessctl s +$brightness_step% > /dev/null
|
||||
show_brightness_notif
|
||||
;;
|
||||
brightness_down)
|
||||
brightnessctl s $brightness_step%- > /dev/null
|
||||
show_brightness_notif
|
||||
;;
|
||||
esac
|
||||
@@ -1,168 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# original source: https://gitlab.com/Nmoleo/i3-volume-brightness-indicator
|
||||
# alternative to volume_brightness.sh that uses brightnessctl for both keyboard & screen brightness
|
||||
|
||||
# See README.md for usage instructions
|
||||
volume_step=1
|
||||
keyboard_brightness_step=20
|
||||
screen_brightness_step=1
|
||||
max_volume=100
|
||||
notification_timeout=1000
|
||||
|
||||
# Specify Icon Theme here:
|
||||
volume_theme_icon="audio-volume-high"
|
||||
screen_brightness_theme_icon="display-brightness"
|
||||
keyboard_brightness_theme_icon="display-brightness"
|
||||
|
||||
# Keyboard Backlight device detection here:
|
||||
device_cache="/tmp/kbd_backlight_device"
|
||||
|
||||
if [ -f "$device_cache" ]; then
|
||||
# If there is cache, load it into device
|
||||
device=$(cat "$device_cache")
|
||||
else
|
||||
# If there is no cache, create one
|
||||
device=$(brightnessctl --list | grep -Po '\w+::kbd_backlight')
|
||||
echo "$device" > "$device_cache"
|
||||
fi
|
||||
|
||||
# Uses regex to get volume from pactl
|
||||
function get_volume {
|
||||
pactl get-sink-volume @DEFAULT_SINK@ | grep -Po '[0-9]{1,3}(?=%)' | head -1
|
||||
}
|
||||
|
||||
# Uses regex to get mute status from pactl
|
||||
function get_mute {
|
||||
pactl get-sink-mute @DEFAULT_SINK@ | grep -Po '(?<=Mute: )(yes|no)'
|
||||
}
|
||||
|
||||
# Get keyboard_brightness from brightnessctl
|
||||
function get_keyboard_brightness {
|
||||
if [ -n "$device" ]; then
|
||||
keyboard_curr=$(brightnessctl -d "$device" get)
|
||||
keyboard_max=$(brightnessctl -d "$device" max)
|
||||
echo $(( keyboard_curr * 100 / keyboard_max))
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Grabs screen brightness and formats it out of 100
|
||||
function get_screen_brightness {
|
||||
screen_curr=$(brightnessctl -q get)
|
||||
screen_max=$(brightnessctl -q max)
|
||||
echo $(( screen_curr * 100 / screen_max ))
|
||||
}
|
||||
|
||||
# Returns a mute icon, a volume-low icon, or a volume-high icon, depending on the volume
|
||||
function get_volume_icon {
|
||||
volume=$(get_volume)
|
||||
mute=$(get_mute)
|
||||
if [ "$volume" -eq 0 ] || [ "$mute" == "yes" ] ; then
|
||||
volume_icon=""
|
||||
elif [ "$volume" -lt 50 ] ; then
|
||||
volume_icon=""
|
||||
else
|
||||
volume_icon=""
|
||||
fi
|
||||
}
|
||||
|
||||
# Always returns the same icon - I couldn't get the brightness-low icon to work with fontawesome
|
||||
function get_keyboard_brightness_icon {
|
||||
kb_brightness=$(get_keyboard_brightness)
|
||||
if [ "$kb_brightness" -eq 0 ] ; then
|
||||
keyboard_brightness_icon="" # unfilled circle
|
||||
elif [ "$kb_brightness" -lt 50 ] ; then
|
||||
keyboard_brightness_icon="" # fa-adjust (low brightness)
|
||||
else
|
||||
keyboard_brightness_icon="" # full circle (high brightness)
|
||||
fi
|
||||
}
|
||||
|
||||
function get_screen_brightness_icon {
|
||||
sc_brightness=$(get_screen_brightness)
|
||||
if [ "$sc_brightness" -eq 0 ] ; then
|
||||
screen_brightness_icon="" # unfilled circle
|
||||
elif [ "$sc_brightness" -lt 50 ] ; then
|
||||
screen_brightness_icon="" # fa-adjust (low brightness)
|
||||
else
|
||||
screen_brightness_icon="" # full circle (high brightness)
|
||||
fi
|
||||
}
|
||||
|
||||
# Displays a volume notification using notify-send
|
||||
function show_volume_notif {
|
||||
mute=$(get_mute)
|
||||
volume=$(get_volume)
|
||||
get_volume_icon
|
||||
notify-send -i $volume_theme_icon -t $notification_timeout "Volume" "$volume_icon $volume%" -h int:value:$volume -h string:x-canonical-private-synchronous:volume
|
||||
}
|
||||
|
||||
# Displays a keyboard_brightness notification
|
||||
function show_keyboard_brightness_notif {
|
||||
keyboard_brightness=$(get_keyboard_brightness)
|
||||
# Debug Purposes:
|
||||
# echo $keyboard_brightness
|
||||
get_keyboard_brightness_icon
|
||||
notify-send -i $keyboard_brightness_theme_icon -t $notification_timeout "Keyboard Brightness" -h string:x-dunst-stack-tag:keyboard_brightness_notif -h int:value:$keyboard_brightness "$keyboard_brightness_icon $keyboard_brightness%"
|
||||
}
|
||||
|
||||
# Displays a screen_brightness notification
|
||||
function show_screen_brightness_notif {
|
||||
screen_brightness=$(get_screen_brightness)
|
||||
# Debug Purposes:
|
||||
# echo $screen_brightness
|
||||
get_screen_brightness_icon
|
||||
notify-send -i $screen_brightness_theme_icon -t $notification_timeout "Screen Brightness" -h string:x-dunst-stack-tag:screen_brightness_notif -h int:value:$screen_brightness "$screen_brightness_icon $screen_brightness%"
|
||||
}
|
||||
|
||||
# Main function - Takes user input, "volume_up", "volume_down", "keyboard_brightness_up", "keyboard_brightness_down", "brightness_up", or "brightness_down"
|
||||
case $1 in
|
||||
volume_up)
|
||||
# Unmutes and increases volume, then displays the notification
|
||||
pactl set-sink-mute @DEFAULT_SINK@ 0
|
||||
volume=$(get_volume)
|
||||
if [ $(( "$volume" + "$volume_step" )) -gt $max_volume ]; then
|
||||
pactl set-sink-volume @DEFAULT_SINK@ $max_volume%
|
||||
else
|
||||
pactl set-sink-volume @DEFAULT_SINK@ +$volume_step%
|
||||
fi
|
||||
show_volume_notif
|
||||
;;
|
||||
|
||||
volume_down)
|
||||
# Raises volume and displays the notification
|
||||
pactl set-sink-volume @DEFAULT_SINK@ -$volume_step%
|
||||
show_volume_notif
|
||||
;;
|
||||
|
||||
volume_mute)
|
||||
# Toggles mute and displays the notification
|
||||
pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||
show_volume_notif
|
||||
;;
|
||||
|
||||
keyboard_brightness_up)
|
||||
# Increases keyboard brightness and displays the notification
|
||||
brightnessctl -d "$device" set ${keyboard_brightness_step}+
|
||||
show_keyboard_brightness_notif
|
||||
;;
|
||||
|
||||
keyboard_brightness_down)
|
||||
# Decreases keyboard brightness and displays the notification
|
||||
brightnessctl -d "$device" set ${keyboard_brightness_step}-
|
||||
show_keyboard_brightness_notif
|
||||
;;
|
||||
|
||||
screen_brightness_up)
|
||||
# Increases screen brightness and displays the notification
|
||||
brightnessctl -q set ${screen_brightness_step}%+
|
||||
show_screen_brightness_notif
|
||||
;;
|
||||
|
||||
screen_brightness_down)
|
||||
# Decreases screen brightness and displays the notification
|
||||
brightnessctl -q set ${screen_brightness_step}%-
|
||||
show_screen_brightness_notif
|
||||
;;
|
||||
esac
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# Parses output from nmcli to show the current connected VPN name/status for i3block
|
||||
# Source: https://github.com/vivien/i3blocks-contrib/tree/master/nm-vpn
|
||||
# uncomment in $HOME/.config/i3/i3blocks.conf if you want to use it
|
||||
|
||||
init_color=${init_color:-#FFFF00}
|
||||
on_color=${on_color:-#00FF00}
|
||||
export init_color on_color
|
||||
nmcli -t connection show --active | awk -F ':' '
|
||||
BEGIN {
|
||||
init_color=ENVIRON["init_color"]
|
||||
on_color=ENVIRON["on_color"]
|
||||
}
|
||||
$3=="vpn" {
|
||||
name=$1
|
||||
status="INIT"
|
||||
color=init_color
|
||||
}
|
||||
$3=="tun" || ($4~/^tap/ || $3~/^tap/) {
|
||||
if(!name) name=$1
|
||||
status="ON"
|
||||
color=on_color
|
||||
}
|
||||
END {if(status) printf("%s\n%s\n%s\n", name, status, color)}'
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
wall_dir="${1:?wallpaper directory required}"
|
||||
interval="${2:-1800}"
|
||||
|
||||
pick_wall() {
|
||||
find "$wall_dir" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | shuf -n1
|
||||
}
|
||||
|
||||
set_wall() { [ -n "$1" ] && xwallpaper --zoom "$1"; }
|
||||
|
||||
has_fullscreen() {
|
||||
python3 - <<'EOF'
|
||||
import json, subprocess, sys
|
||||
|
||||
def is_fullscreen(node):
|
||||
if node.get('fullscreen_mode', 0) > 0: return True
|
||||
return any(is_fullscreen(c) for c in node.get('nodes', []) + node.get('floating_nodes', []))
|
||||
|
||||
def find_ws(node, name):
|
||||
if node.get('type') == 'workspace' and node.get('name') == name: return node
|
||||
for c in node.get('nodes', []) + node.get('floating_nodes', []):
|
||||
r = find_ws(c, name)
|
||||
if r: return r
|
||||
|
||||
try:
|
||||
wss = json.loads(subprocess.check_output(['i3-msg', '-t', 'get_workspaces'], stderr=subprocess.DEVNULL))
|
||||
tree = json.loads(subprocess.check_output(['i3-msg', '-t', 'get_tree'], stderr=subprocess.DEVNULL))
|
||||
for ws in wss:
|
||||
if ws.get('visible'):
|
||||
node = find_ws(tree, ws['name'])
|
||||
if node and is_fullscreen(node):
|
||||
sys.exit(0)
|
||||
except Exception:
|
||||
pass
|
||||
sys.exit(1)
|
||||
EOF
|
||||
}
|
||||
|
||||
# Initial wallpaper
|
||||
set_wall "$(pick_wall)"
|
||||
|
||||
while sleep "$interval"; do
|
||||
has_fullscreen || set_wall "$(pick_wall)"
|
||||
done
|
||||
@@ -1,107 +0,0 @@
|
||||
-- Minimal server editor config
|
||||
-- Launch with: NVIM_APPNAME=nvim-server nvim
|
||||
|
||||
-------------------- Options --------------------
|
||||
vim.g.mapleader = ","
|
||||
vim.opt.number = true
|
||||
vim.opt.cursorline = true
|
||||
vim.opt.expandtab = true
|
||||
vim.opt.tabstop = 4
|
||||
vim.opt.shiftwidth = 4
|
||||
vim.opt.softtabstop = 4
|
||||
vim.opt.autoindent = true
|
||||
vim.opt.smartindent = true
|
||||
vim.opt.hlsearch = true
|
||||
vim.opt.incsearch = true
|
||||
vim.opt.ignorecase = true
|
||||
vim.opt.smartcase = true
|
||||
vim.opt.splitright = true
|
||||
vim.opt.splitbelow = true
|
||||
vim.opt.termguicolors = true
|
||||
vim.opt.scrolloff = 8
|
||||
vim.opt.signcolumn = "no"
|
||||
vim.opt.updatetime = 250
|
||||
vim.opt.undofile = true
|
||||
|
||||
-------------------- Clipboard --------------------
|
||||
vim.opt.clipboard = 'unnamedplus'
|
||||
|
||||
vim.g.clipboard = {
|
||||
name = 'OSC 52',
|
||||
copy = {
|
||||
['+'] = require('vim.ui.clipboard.osc52').copy('+'),
|
||||
['*'] = require('vim.ui.clipboard.osc52').copy('*'),
|
||||
},
|
||||
paste = {
|
||||
['+'] = require('vim.ui.clipboard.osc52').paste('+'),
|
||||
['*'] = require('vim.ui.clipboard.osc52').paste('*'),
|
||||
},
|
||||
}
|
||||
vim.keymap.set("v", "<leader>y", '"+y')
|
||||
vim.keymap.set("n", "<leader>Y", '"+yg_')
|
||||
vim.keymap.set("n", "<leader>y", '"+y')
|
||||
vim.keymap.set("n", "<leader>yy", '"+yy')
|
||||
vim.keymap.set("n", "<leader>p", '"+p')
|
||||
vim.keymap.set("n", "<leader>P", '"+P')
|
||||
|
||||
-------------------- Keymaps --------------------
|
||||
vim.keymap.set("n", "i", ":nohls<CR>i", { silent = true })
|
||||
vim.keymap.set("n", "<Space>", ":w<CR>", { silent = true })
|
||||
|
||||
-- Window navigation
|
||||
vim.keymap.set("n", "<C-h>", "<C-W>h")
|
||||
vim.keymap.set("n", "<C-j>", "<C-W>j")
|
||||
vim.keymap.set("n", "<C-k>", "<C-W>k")
|
||||
vim.keymap.set("n", "<C-l>", "<C-W>l")
|
||||
vim.keymap.set("n", "<C-Left>", "<C-W>h")
|
||||
vim.keymap.set("n", "<C-Down>", "<C-W>j")
|
||||
vim.keymap.set("n", "<C-Up>", "<C-W>k")
|
||||
vim.keymap.set("n", "<C-Right>", "<C-W>l")
|
||||
|
||||
-- Tab management
|
||||
vim.keymap.set("n", "<leader>to", ":tabonly<CR>", { silent = true })
|
||||
vim.keymap.set("n", "<leader>o", ":only<CR>", { silent = true })
|
||||
vim.keymap.set("n", "<leader><Tab>", ":tabn<CR>", { silent = true })
|
||||
vim.keymap.set("n", "<S-Tab>", ":tabp<CR>", { silent = true })
|
||||
|
||||
|
||||
-------------------- Netrw (built-in file browser) --------------------
|
||||
vim.g.netrw_banner = 0
|
||||
vim.g.netrw_liststyle = 3
|
||||
vim.keymap.set("n", "<F2>", ":Explore<CR>", { silent = true })
|
||||
|
||||
-------------------- Statusline (built-in) --------------------
|
||||
vim.opt.statusline = " %f %m%r%= %y %l:%c %p%% "
|
||||
|
||||
-------------------- Bootstrap lazy.nvim --------------------
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if vim.fn.isdirectory(lazypath) == 0 then
|
||||
vim.fn.system({
|
||||
"git", "clone", "--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
"--branch=stable",
|
||||
lazypath,
|
||||
})
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
require("lazy").setup({
|
||||
{ "4ree/viml-surround", event = "VeryLazy" },
|
||||
{ "numToStr/Comment.nvim", event = "VeryLazy", opts = {} },
|
||||
{
|
||||
"junegunn/fzf.vim",
|
||||
dependencies = { "junegunn/fzf" },
|
||||
keys = {
|
||||
{ "<leader>f", "<cmd>Files<CR>", desc = "Find files" },
|
||||
{ "<leader>b", "<cmd>Buffers<CR>", desc = "Buffers" },
|
||||
{ "<leader>r", "<cmd>Rg<CR>", desc = "Ripgrep" },
|
||||
{ "<leader>g", "<cmd>GFiles<CR>", desc = "Git files" },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-------------------- Grep (use ripgrep if available) --------------------
|
||||
if vim.fn.executable("rg") == 1 then
|
||||
vim.opt.grepprg = "rg --vimgrep --smart-case"
|
||||
vim.opt.grepformat = "%f:%l:%c:%m"
|
||||
end
|
||||
@@ -0,0 +1,2 @@
|
||||
{"coc.preferences.diagnostic.displayByAle":1
|
||||
}
|
||||
-227
@@ -1,227 +0,0 @@
|
||||
-- Leader key (must be set before lazy.nvim loads)
|
||||
vim.g.mapleader = ","
|
||||
|
||||
-------------------- Options --------------------
|
||||
vim.opt.number = true
|
||||
vim.opt.cursorline = true
|
||||
vim.opt.expandtab = true
|
||||
vim.opt.tabstop = 4
|
||||
vim.opt.shiftwidth = 4
|
||||
vim.opt.softtabstop = 4
|
||||
vim.opt.autoindent = true
|
||||
vim.opt.spelllang = "vi,en"
|
||||
vim.opt.foldmethod = "syntax"
|
||||
vim.opt.foldlevel = 1
|
||||
vim.opt.foldnestmax = 1
|
||||
vim.opt.hlsearch = true
|
||||
vim.opt.splitright = true
|
||||
vim.opt.splitbelow = true
|
||||
vim.opt.termguicolors = true
|
||||
vim.opt.autoread = true
|
||||
|
||||
-------------------- Keymaps --------------------
|
||||
-- Clear hlsearch then enter insert mode
|
||||
vim.keymap.set("n", "i", ":nohls<CR>i", { silent = true })
|
||||
|
||||
-- Save with space
|
||||
vim.keymap.set("n", "<Space>", ":w<CR>", { silent = true })
|
||||
|
||||
-- Window navigation
|
||||
vim.keymap.set("n", "<C-h>", "<C-W>h")
|
||||
vim.keymap.set("n", "<C-j>", "<C-W>j")
|
||||
vim.keymap.set("n", "<C-k>", "<C-W>k")
|
||||
vim.keymap.set("n", "<C-l>", "<C-W>l")
|
||||
vim.keymap.set("n", "<C-Left>", "<C-W>h")
|
||||
vim.keymap.set("n", "<C-Down>", "<C-W>j")
|
||||
vim.keymap.set("n", "<C-Up>", "<C-W>k")
|
||||
vim.keymap.set("n", "<C-Right>", "<C-W>l")
|
||||
|
||||
-- Tab management
|
||||
vim.keymap.set("n", "<leader>to", ":tabonly<CR>", { silent = true })
|
||||
vim.keymap.set("n", "<leader>o", ":only<CR>", { silent = true })
|
||||
vim.keymap.set("n", "<leader><Tab>", ":tabn<CR>", { silent = true })
|
||||
vim.keymap.set("n", "<S-Tab>", ":tabp<CR>", { silent = true })
|
||||
|
||||
-- Clipboard operations
|
||||
vim.keymap.set("v", "<leader>y", '"+y')
|
||||
vim.keymap.set("n", "<leader>Y", '"+yg_')
|
||||
vim.keymap.set("n", "<leader>y", '"+y')
|
||||
vim.keymap.set("n", "<leader>yy", '"+yy')
|
||||
vim.keymap.set("n", "<leader>p", '"+p')
|
||||
vim.keymap.set("n", "<leader>P", '"+P')
|
||||
|
||||
-- Background toogling
|
||||
vim.keymap.set("n", "<leader>bg", function()
|
||||
vim.o.background = vim.o.background == "dark" and "light" or "dark"
|
||||
end, { desc = "Toggle light/dark background" })
|
||||
|
||||
-- Join paragraph
|
||||
vim.keymap.set("n", "<leader>j", "vipJ", { desc = "Join paragraph into one line" })
|
||||
|
||||
-------------------- Bootstrap lazy.nvim --------------------
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not vim.uv.fs_stat(lazypath) then
|
||||
vim.fn.system({
|
||||
"git", "clone", "--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
"--branch=stable",
|
||||
lazypath,
|
||||
})
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
-------------------- Plugins --------------------
|
||||
require("lazy").setup({
|
||||
|
||||
-- Colorscheme
|
||||
{
|
||||
"ellisonleao/gruvbox.nvim",
|
||||
priority = 1000,
|
||||
config = function()
|
||||
require("gruvbox").setup({
|
||||
contrast = "soft",
|
||||
})
|
||||
vim.cmd.colorscheme("gruvbox")
|
||||
vim.o.background = "light"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Icons (dependency for nvim-tree and lualine)
|
||||
{ "nvim-tree/nvim-web-devicons", lazy = true },
|
||||
|
||||
-- File tree
|
||||
{
|
||||
"nvim-tree/nvim-tree.lua",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
keys = {
|
||||
{ "<F2>", "<cmd>NvimTreeToggle<CR>", desc = "Toggle file tree" },
|
||||
},
|
||||
config = function()
|
||||
require("nvim-tree").setup()
|
||||
end,
|
||||
},
|
||||
|
||||
-- Comments
|
||||
{
|
||||
"numToStr/Comment.nvim",
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("Comment").setup()
|
||||
end,
|
||||
},
|
||||
|
||||
-- Fuzzy finder (fzf-lua with ripgrep)
|
||||
{
|
||||
"ibhagwan/fzf-lua",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
keys = {
|
||||
{ "<leader>b", "<cmd>FzfLua buffers<CR>", desc = "Buffers" },
|
||||
{ "<leader>r", "<cmd>FzfLua live_grep<CR>", desc = "Live grep" },
|
||||
{ "<leader>f", "<cmd>FzfLua files<CR>", desc = "Find files" },
|
||||
{ "<leader>g", "<cmd>FzfLua git_files<CR>", desc = "Git files" },
|
||||
{ "<leader>w", "<cmd>FzfLua grep_cword<CR>", desc = "Grep word under cursor" },
|
||||
},
|
||||
config = function()
|
||||
require("fzf-lua").setup({
|
||||
files = {
|
||||
cmd = "rg --files --hidden --glob '!**/.git/*'",
|
||||
},
|
||||
grep = {
|
||||
rg_opts = "--hidden --glob '!**/.git/*' --column --line-number --no-heading --color=always --smart-case",
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Statusline
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
config = function()
|
||||
require("lualine").setup({
|
||||
options = { theme = "gruvbox" },
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Autopairs
|
||||
{
|
||||
"windwp/nvim-autopairs",
|
||||
event = "InsertEnter",
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Surround
|
||||
{ "4ree/viml-surround", event = "VeryLazy" },
|
||||
|
||||
-- LSP
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
config = function()
|
||||
vim.lsp.config("clangd", {})
|
||||
vim.lsp.config("pyright", {})
|
||||
vim.lsp.config("rust_analyzer", {})
|
||||
vim.lsp.config("julials", {})
|
||||
vim.lsp.enable({ "clangd", "pyright", "rust_analyzer", "julials" })
|
||||
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(args)
|
||||
local opts = { buffer = args.buf }
|
||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
|
||||
vim.keymap.set("n", "gr", vim.lsp.buf.references, opts)
|
||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
|
||||
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
|
||||
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Completion (coq_nvim)
|
||||
{
|
||||
"ms-jpq/coq_nvim",
|
||||
branch = "coq",
|
||||
dependencies = {
|
||||
{ "ms-jpq/coq.artifacts", branch = "artifacts" },
|
||||
{ "ms-jpq/coq.thirdparty", branch = "3p" },
|
||||
},
|
||||
init = function()
|
||||
vim.g.coq_settings = { auto_start = "shut-up" }
|
||||
end,
|
||||
},
|
||||
|
||||
-- Quickfix enhancements
|
||||
{ "kevinhwang91/nvim-bqf", ft = "qf" },
|
||||
|
||||
-- Git
|
||||
{ "tpope/vim-fugitive" },
|
||||
|
||||
-- IME support
|
||||
{
|
||||
"4ree/vim-ime",
|
||||
event = "VeryLazy",
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- LaTeX
|
||||
{
|
||||
"lervag/vimtex",
|
||||
config = function()
|
||||
vim.g.vimtex_view_method = "zathura"
|
||||
vim.g.vimtex_compiler_latexmk = {
|
||||
options = {
|
||||
"-verbose",
|
||||
"-file-line-error",
|
||||
"-synctex=1",
|
||||
"-interaction=nonstopmode",
|
||||
"-shell-escape",
|
||||
"-output-directory=./output",
|
||||
"-aux-directory=./",
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- Julia
|
||||
{ "JuliaEditorSupport/julia-vim" },
|
||||
})
|
||||
+196
@@ -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 :nohls<CR>i
|
||||
|
||||
" 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 <silent> <expr> <F2> g:NERDTree.IsOpen() ? "\:NERDTreeClose<CR>" : bufexists(expand('%')) ? "\:NERDTreeFind<CR>" : "\:NERDTree<CR>"
|
||||
|
||||
"Coc.nvim
|
||||
inoremap <silent><expr> <TAB>
|
||||
\ coc#pum#visible() ? coc#_select_confirm() :
|
||||
\ coc#expandableOrJumpable() ? "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
|
||||
\ CheckBackSpace() ? "\<TAB>" :
|
||||
\ coc#refresh()
|
||||
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
|
||||
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
|
||||
|
||||
function! CheckBackSpace() abort
|
||||
let col = col('.') - 1
|
||||
return !col || getline('.')[col - 1] =~# '\s'
|
||||
endfunction
|
||||
|
||||
let g:coc_snippet_next = '<tab>'
|
||||
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
|
||||
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
|
||||
|
||||
" Comments
|
||||
let mapleader = ","
|
||||
|
||||
" remap save
|
||||
nnoremap <space> :w<CR>
|
||||
|
||||
" moving between windows
|
||||
nnoremap <C-h> <C-W>h
|
||||
nnoremap <C-j> <C-W>j
|
||||
nnoremap <C-k> <C-W>k
|
||||
nnoremap <C-l> <C-W>l
|
||||
nnoremap <C-Left> <C-W>h
|
||||
nnoremap <C-Down> <C-W>j
|
||||
nnoremap <C-Up> <C-W>k
|
||||
nnoremap <C-Right> <C-W>l
|
||||
nnoremap <leader>to :tabonly<CR>
|
||||
nnoremap <leader>o :only<CR>
|
||||
nnoremap <leader><tab> :tabn<CR>
|
||||
nnoremap <S-tab> :tabp<CR>
|
||||
|
||||
"set clipboard+=unnamedplus
|
||||
" " Copy to clipboard
|
||||
vnoremap <leader>y "+y
|
||||
nnoremap <leader>Y "+yg_
|
||||
nnoremap <leader>y "+y
|
||||
nnoremap <leader>yy "+yy
|
||||
|
||||
" " Paste from clipboard
|
||||
nnoremap <leader>p "+p
|
||||
nnoremap <leader>P "+P
|
||||
|
||||
|
||||
" FZF key mapping
|
||||
nnoremap <silent> <Leader>b :Buffers<CR>
|
||||
nnoremap <silent> <Leader>r :Rg<CR>
|
||||
nnoremap <silent> <Leader>f :Files<CR>
|
||||
nnoremap <silent> <Leader>g :GFiles<CR>
|
||||
nnoremap <silent> <Leader>w :Rg <C-R><C-W><CR>
|
||||
|
||||
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 <F3> :ALEToggle<CR>
|
||||
|
||||
|
||||
"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
|
||||
@@ -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 :nohls<CR>i
|
||||
|
||||
" 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 <silent> <expr> <F2> g:NERDTree.IsOpen() ? "\:NERDTreeClose<CR>" : bufexists(expand('%')) ? "\:NERDTreeFind<CR>" : "\:NERDTree<CR>"
|
||||
|
||||
|
||||
"Coc.nvim
|
||||
inoremap <silent><expr> <TAB>
|
||||
\ coc#pum#visible() ? coc#_select_confirm() :
|
||||
\ coc#expandableOrJumpable() ? "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
|
||||
\ CheckBackSpace() ? "\<TAB>" :
|
||||
\ coc#refresh()
|
||||
|
||||
inoremap <silent><expr> <CR> 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 = '<tab>'
|
||||
" remap save
|
||||
nnoremap <space> :w<CR>
|
||||
|
||||
" moving between windows
|
||||
nnoremap <C-h> <C-W>h
|
||||
nnoremap <C-j> <C-W>j
|
||||
nnoremap <C-k> <C-W>k
|
||||
nnoremap <C-l> <C-W>l
|
||||
nnoremap <C-Left> <C-W>h
|
||||
nnoremap <C-Down> <C-W>j
|
||||
nnoremap <C-Up> <C-W>k
|
||||
nnoremap <C-Right> <C-W>l
|
||||
nnoremap <leader>to :tabonly<CR>
|
||||
nnoremap <leader>o :only<CR>
|
||||
nnoremap <leader><tab> :tabn<CR>
|
||||
nnoremap <S-tab> :tabp<CR>
|
||||
|
||||
"set clipboard+=unnamedplus
|
||||
" " Copy to clipboard
|
||||
vnoremap <leader>y "+y
|
||||
nnoremap <leader>Y "+yg_
|
||||
nnoremap <leader>y "+y
|
||||
nnoremap <leader>yy "+yy
|
||||
|
||||
" " Paste from clipboard
|
||||
nnoremap <leader>p "+p
|
||||
nnoremap <leader>P "+P
|
||||
|
||||
|
||||
" FZF key mapping
|
||||
nnoremap <silent> <Leader>b :Buffers<CR>
|
||||
nnoremap <silent> <Leader>r :Rg<CR>
|
||||
nnoremap <silent> <Leader>f :Files<CR>
|
||||
nnoremap <silent> <Leader>g :GFiles<CR>
|
||||
nnoremap <silent> <Leader>w :Rg <C-R><C-W><CR>
|
||||
|
||||
filetype plugin on
|
||||
set splitright
|
||||
set splitbelow
|
||||
|
||||
@@ -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
|
||||
@@ -1,20 +0,0 @@
|
||||
{
|
||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||
"coq.artifacts": { "branch": "artifacts", "commit": "ef5f21d638ccc456cfa5b8d0ab37093cefe48c8b" },
|
||||
"coq.thirdparty": { "branch": "3p", "commit": "2bd969a2bcd2624f9c260b1000957c7e665e308e" },
|
||||
"coq_nvim": { "branch": "coq", "commit": "d939a34ceb2b57d2937890337a4aa75eb55e18a8" },
|
||||
"fzf-lua": { "branch": "main", "commit": "d9508cc1d05ffcdc91a32dfd38fc1013a56b20da" },
|
||||
"gruvbox.nvim": { "branch": "main", "commit": "334d5fd49fc8033f26408425366c66c6390c57bb" },
|
||||
"julia-vim": { "branch": "master", "commit": "52b30547346b21bc93acda28d626795667f9e087" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "59bce2eef357189c3305e25bc6dd2d138c1683f5" },
|
||||
"nvim-bqf": { "branch": "main", "commit": "f65fba733268ffcf9c5b8ac381287eca7c223422" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "0203a9608d63eda57679b01e69f33a7b4c34b0d1" },
|
||||
"nvim-tree.lua": { "branch": "master", "commit": "4b30847c91d498446cb8440c03031359b045e050" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "d7462543c9e366c0d196c7f67a945eaaf5d99414" },
|
||||
"vim-fugitive": { "branch": "master", "commit": "3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f0" },
|
||||
"vim-ime": { "branch": "master", "commit": "79e3b02eb50a57305113550be7ca163b267b5e30" },
|
||||
"viml-surround": { "branch": "master", "commit": "98358bad347aa2b8a180c2edde84c3bd8a51fdd1" },
|
||||
"vimtex": { "branch": "master", "commit": "82d2305ff71dfb3bd91602534cc9bb9a195bcb38" }
|
||||
}
|
||||
Binary file not shown.
@@ -1,15 +0,0 @@
|
||||
backend = "xrender";
|
||||
vsync = true;
|
||||
use-damage = true;
|
||||
|
||||
# games bypass picom entirely when fullscreen
|
||||
unredir-if-possible = true;
|
||||
|
||||
# no effects — featherweight
|
||||
shadow = false;
|
||||
fading = false;
|
||||
blur-background = false;
|
||||
corner-radius = 0;
|
||||
|
||||
detect-transient = true;
|
||||
detect-client-leader = true;
|
||||
Executable → Regular
+17
-27
@@ -17,62 +17,57 @@
|
||||
;==========================================================
|
||||
|
||||
[colors]
|
||||
background = #BB111111
|
||||
background-alt = #BB111111
|
||||
foreground = #D0D0D0
|
||||
primary = #5294E2
|
||||
altprime = #6AAFE6
|
||||
secondary = #1A1A1A
|
||||
altsecondary = #5294E2EF
|
||||
alert = #CC3333
|
||||
disabled = #707070
|
||||
background-alt = #00000000
|
||||
foreground = A3D1C6
|
||||
primary = #B3D8A8
|
||||
altprime = #B3D8A8
|
||||
secondary = #FBFFE4
|
||||
altsecondary = #BEABA7EF
|
||||
alert = #A54242
|
||||
disabled = FBFFE4
|
||||
|
||||
[bar/example]
|
||||
bottom = false
|
||||
width = 100%
|
||||
height = 20pt
|
||||
radius = 0
|
||||
radius = 8
|
||||
|
||||
; dpi = 96
|
||||
|
||||
background = ${colors.background}
|
||||
background = #1B4D3E
|
||||
foreground = ${colors.foreground}
|
||||
|
||||
tray-position = right
|
||||
line-size = 2pt
|
||||
|
||||
border-size = 0
|
||||
border-size = 2.5pt
|
||||
border-color = #00000000
|
||||
|
||||
padding-left = 1
|
||||
padding-right = 1
|
||||
|
||||
;module-margin = 1
|
||||
module-margin = 1
|
||||
|
||||
separator = |
|
||||
separator-foreground = ${colors.disabled}
|
||||
|
||||
font-0 = JetBrainsMono Nerd Font:size=14;3
|
||||
#font-0 = 0xProto Nerd Font:pixelsize=14;3
|
||||
font-0 = 0xProto Nerd Font:pixelsize=14;3
|
||||
|
||||
modules-left = xworkspaces xwindow
|
||||
modules-right = polytiramisu date memory cpu battery xkeyboard tray
|
||||
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/xkeyboard]
|
||||
type = internal/xkeyboard
|
||||
|
||||
; List of indicators to ignore
|
||||
blacklist-0 = num lock
|
||||
blacklist-1 = scroll lock
|
||||
|
||||
[module/xworkspaces]
|
||||
type = internal/xworkspaces
|
||||
@@ -181,11 +176,6 @@ exec = ~/.config/polybar/scripts/polytiramisu.sh
|
||||
format = <label>
|
||||
tail = true
|
||||
|
||||
[module/tray]
|
||||
type = internal/tray
|
||||
tray-background = ${colors.background}
|
||||
tray-spacing = 4pt
|
||||
|
||||
[settings]
|
||||
screenchange-reload = true
|
||||
pseudo-transparency = true
|
||||
|
||||
+10
-16
@@ -14,7 +14,7 @@ set $mod Mod1
|
||||
#set $up k
|
||||
#set $right l
|
||||
# Your preferred terminal emulator
|
||||
set $term xfce4-terminal
|
||||
set $term alacritty
|
||||
# Your preferred application launcher
|
||||
# Note: pass the final command to swaymsg so that the resulting window can be opened
|
||||
# on the original workspace that the command was run on.
|
||||
@@ -76,9 +76,8 @@ input "5426:156:Razer_Razer_DeathAdder_V2_X_HyperSpeed" {
|
||||
}
|
||||
|
||||
#exec --no-startup-id /usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh
|
||||
exec --no-startup-id source ~/.config/fcitx.sh
|
||||
exec --no-startup-id fcitx5
|
||||
exec --no-startup-id kwalletd6
|
||||
exec --no-startup-id fcitx5
|
||||
#exec --no-startup-id blueman-applet
|
||||
exec --no-startup-id owncloud
|
||||
exec --no-startup-id waybar
|
||||
@@ -88,19 +87,14 @@ exec --no-startup-id xset m 1/1 0
|
||||
exec --no-startup-id /usr/lib/pam_kwallet_init
|
||||
|
||||
|
||||
set $lower-volume wpctl set-volume @DEFAULT_SINK@ 0.01-
|
||||
set $raise-volume wpctl set-volume @DEFAULT_SINK@ 0.01+ --limit 1
|
||||
set $mute-sink wpctl set-mute @DEFAULT_SINK@ toggle
|
||||
set $mute-source wpctl set-mute @DEFAULT_SOURCE@ toggle
|
||||
|
||||
|
||||
bindsym XF86AudioRaiseVolume exec --no-startup-id $raise-volume
|
||||
bindsym XF86AudioLowerVolume exec --no-startup-id $lower-volume
|
||||
bindsym XF86AudioMute exec --no-startup-id $mute-sink
|
||||
bindsym XF86AudioMicMute exec --no-startup-id $mute-source
|
||||
bindsym $mod+slash exec --no-startup-id $mute-sink
|
||||
bindsym $mod+period exec --no-startup-id $raise-volume
|
||||
bindsym $mod+comma exec --no-startup-id $lower-volume
|
||||
# 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
|
||||
bindsym $mod+slash exec --no-startup-id wpctl set-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
bindsym $mod+period exec --no-startup-id wpctl set-volume @DEFAULT_SINK@ 0.02+ --limit 1 && $refresh_i3status
|
||||
bindsym $mod+comma exec --no-startup-id wpctl set-volume @DEFAULT_SINK@ 0.02- --limit 0 && $refresh_i3status
|
||||
|
||||
|
||||
# Brightness key bindings
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# Set a background image
|
||||
image=/data/sync/images/wallpapers/0002.png
|
||||
|
||||
# Set the scaling mode for the image
|
||||
scaling=fill
|
||||
+6
-7
@@ -4,7 +4,7 @@
|
||||
// Choose the order of the modules
|
||||
"modules-left": ["sway/workspaces", "sway/window"],
|
||||
"modules-center": ["clock"],
|
||||
"modules-right": ["custom/tiramisu","battery", "network", "bluetooth", "wireplumber", "tray"],
|
||||
"modules-right": ["custom/tiramisu","battery", "bluetooth", "network", "wireplumber", "tray"],
|
||||
//"modules-right": ["custom/tiramisu", "bluetooth",network", "wireplumber", "tray"],
|
||||
// Modules configuration
|
||||
// "hyprland/workspaces": {
|
||||
@@ -29,20 +29,19 @@
|
||||
//"format": "{status} ",
|
||||
"format-on": "",
|
||||
"format-off": "",
|
||||
//"format-connected": "{device_alias} ",
|
||||
"format-connected": "",
|
||||
"format-connected": "{device_alias} ",
|
||||
// "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device
|
||||
"tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected",
|
||||
"tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}",
|
||||
"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
|
||||
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%",
|
||||
"on-click": "dbus-launch --exit-with-session blueman-manager"
|
||||
"on-click": "~/.local/bin/rofi-bluetooth"
|
||||
//"on-click": "blueman-manager"
|
||||
},
|
||||
"network": {
|
||||
"interface": "wlp0s20f3",
|
||||
"interface": "wls2",
|
||||
"format": "{ifname}",
|
||||
//"format-wifi": "{essid} {icon}",
|
||||
"format-wifi": "{icon}",
|
||||
"format-wifi": "{essid} {icon}",
|
||||
"format-ethernet": "{ipaddr}/{cidr} ",
|
||||
"format-disconnected": "", //An empty format will hide the module.
|
||||
"tooltip-format": "{ifname} via {gwaddr} ",
|
||||
|
||||
@@ -83,6 +83,15 @@ tooltip label{
|
||||
background: @bg_hover;
|
||||
color: @content_main;
|
||||
}
|
||||
button {
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
button:hover {
|
||||
box-shadow: inherit;
|
||||
text-shadow: inherit;
|
||||
background: inherit;
|
||||
}
|
||||
|
||||
#taskbar {
|
||||
}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
local wezterm = require 'wezterm'
|
||||
local config = wezterm.config_builder()
|
||||
|
||||
-- Font
|
||||
config.font = wezterm.font '0xProto Nerd Font'
|
||||
config.font_size = 14
|
||||
|
||||
|
||||
-- Appearance
|
||||
config.color_scheme = 'Gruvbox Material (Gogh)'
|
||||
config.enable_tab_bar = false
|
||||
config.window_padding = {
|
||||
left = 4, right = 4, top = 4, bottom = 4,
|
||||
}
|
||||
|
||||
-- IME (set to whatever you use)
|
||||
config.use_ime = true
|
||||
-- config.xim_im_name = 'fcitx' -- uncomment and adjust if needed
|
||||
|
||||
-- Scrollback
|
||||
config.scrollback_lines = 10000
|
||||
|
||||
-- OSC 52 — on by default, but explicit is fine
|
||||
config.enable_kitty_keyboard = false -- avoid surprising keybinds
|
||||
|
||||
return config
|
||||
@@ -1 +0,0 @@
|
||||
set selection-clipboard clipboard
|
||||
Reference in New Issue
Block a user