This commit is contained in:
Amaury JOLY
2026-03-25 19:01:19 +01:00
parent c7262c7c68
commit b2038c9105
16 changed files with 795 additions and 27 deletions

0
dotconfig/.gitkeep Normal file
View File

View File

@@ -0,0 +1,2 @@
[font]
normal = { family = "DejaVuSansM Nerd Font Mono", style = "Regular"}

7
dotconfig/i3/autostart.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
sleep 1
i3 gaps inner current set 10
i3 gaps outer current set 0
sleep 1

234
dotconfig/i3/config Normal file
View File

@@ -0,0 +1,234 @@
# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#
# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
gaps inner 10
gaps outer 12
default_border pixel 0
default_floating_border pixel 0
set $mod Mod4
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:monospace 8
# https://thomashunter.name/i3-configurator/
# class border bground text indicator child_border
client.focused #2F4A36 #2F4A36 #FFFFFF #2F4A36 #2F4A36
client.focused_inactive #52805E #52805E #FFFFFF #484E50 #5F676A
client.unfocused #0A100B #0A100B #888888 #292D2E #222222
client.urgent #2F343A #900000 #FFFFFF #900000 #900000
client.placeholder #000000 #0C0C0C #FFFFFF #000000 #0C0C0C
client.background #FFFFFF
# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 8
# Start XDG autostart .desktop files using dex. See also
# https://wiki.archlinux.org/index.php/XDG_Autostart
exec --no-startup-id dex --autostart --environment i3
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
# 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.
# exec --no-startup-id nm-applet
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# start a terminal
# bindsym $mod+Return exec i3-sensible-terminal
# kill focused window
bindsym $mod+Shift+Q kill
# start dmenu (a program launcher)
bindsym $mod+d exec --no-startup-id rofi -show drun -show-icons
# A more modern dmenu replacement is rofi:
# bindcode $mod+40 exec "rofi -modi drun,run -show drun"
# There also is i3-dmenu-desktop which only displays applications shipping a
# .desktop file. It is a wrapper around dmenu, so you need that installed.
# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
# change focus
# bindsym $mod+j focus left
# bindsym $mod+k focus down
# bindsym $mod+l focus up
# bindsym $mod+m focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
# bindsym $mod+Shift+j move left
# bindsym $mod+Shift+k move down
# bindsym $mod+Shift+l move up
# bindsym $mod+Shift+M move right
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+h split h
# split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+z layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+q focus parent
# focus the child container
#bindsym $mod+d focus child
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# switch to workspace
bindsym $mod+ampersand workspace number $ws1
bindsym $mod+eacute workspace number $ws2
bindsym $mod+quotedbl workspace number $ws3
bindsym $mod+apostrophe workspace number $ws4
bindsym $mod+parenleft workspace number $ws5
bindsym $mod+minus workspace number $ws6
bindsym $mod+egrave workspace number $ws7
bindsym $mod+underscore workspace number $ws8
bindsym $mod+ccedilla workspace number $ws9
bindsym $mod+agrave workspace number $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+eacute move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+egrave move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+ccedilla move container to workspace number $ws9
bindsym $mod+Shift+agrave move container to workspace number $ws10
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
# resize window (you can also use the mouse for that)
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
# bindsym j resize shrink width 10 px or 10 ppt
# bindsym k resize grow height 10 px or 10 ppt
# bindsym l resize shrink height 10 px or 10 ppt
# bindsym m resize grow width 10 px or 10 ppt
# same bindings, but for the arrow keys
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
# back to normal: Enter or Escape or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
# bar {
# status_command /home/alice/.config/polybar/start.sh
# }
# exec --no-startup-id tint2
# custom
exec_always --no-startup-id /home/alice/.config/i3/autostart.sh
exec_always --no-startup-id /home/alice/.config/polybar/start.sh
exec_always --no-startup-id picom
# exec_always --no-startup-id eww open frame
# exec_alwaysé --no-startup-id betterlockscreen -u /home/alice/.config/betterlockscreen -u /home/alice/wallpaper/ -l dimb
bindsym $mod+Shift+l exec --no-startup-id i3lock -c 000000
bindsym $mod+Return exec alacritty
bindsym $mod+Tab exec rofi -show combi -show-icons
bindsym $mod+p move workspace to output left
# bindsym $mod+m exec autorandr right_h
# bindsym $mod+Shift+m exec autorandr right_v
# bindsym $mod+k exec autorandr left_h
# bindsym $mod+Shift+k exec autorandr left_v
# bindsym $mod+l exec autorandr laptop
# bindsym $mod+o exec autorandr duplicate
## Screenshots
# bindsym Print exec --no-startup-id maim "/home/$USER/Pictures/$(date)"
# bindsym $mod+Print exec --no-startup-id maim --window $(xdotool getactivewindow) "/home/$USER/Pictures/$(date)"
# bindsym Shift+Print exec --no-startup-id maim --select "/home/$USER/Pictures/$(date)"
## Clipboard Screenshots
# bindsym Ctrl+Print exec --no-startup-id maim | xclip -selection clipboard -t image/png
# bindsym Ctrl+$mod+Print exec --no-startup-id maim --window $(xdotool getactivewindow) | xclip -selection clipboard -t image/png
bindsym $mod+Shift+Print exec --no-startup-id maim --select | xclip -selection clipboard -t image/png

View File

@@ -0,0 +1,40 @@
# Picom configuration file
# Backend
backend = "glx";
vsync = true;
use-damage = true;
# Shadows
shadow = true;
shadow-radius = 10;
shadow-offset-x = -5;
shadow-offset-y = -5;
shadow-opacity = 0.8;
# Opacity
frame-opacity = 1.0;
# Fading
fading = true;
fade-in-step = 0.03;
fade-out-step = 0.03;
fade-delta = 10;
corner-radius = 20;
# regles par application
rules: ({
match = "class_g = 'Alacritty'";
opacity = 0.8;
}, {
match = "class_g = 'i3-frame'";
corner-radius = 0;
} , {
match = "class_g = 'Polybar'";
corner-radius = 0;
} , {
match = "class_g = 'Eww'";
corner-radius = 0;
}
);

View File

@@ -0,0 +1,257 @@
[color]
background = #2f4a36
background-alt = #375740
foreground = #e8e8e8
foreground-dim = #b8c0b8
accent = #a3be8c
alert = #ff6b6b
; =========================
; BASES
; =========================
[bar/base]
monitor = ${env:MONITOR:}
width = 100%
height = 20
offset-x = 0
foreground = ${color.foreground}
border-size = 0
line-size = 0
padding-left = 1
padding-right = 1
module-margin = 1
separator = " · "
separator-foreground = ${color.foreground-dim}
font-0 = "DejaVuSansM Nerd Font Mono:size=10;2"
font-1 = "Noto Sans CJK JP:size=10;2"
font-2 = "Noto Color Emoji:size=10;2"
radius = 10
enable-ipc = true
[module/temp-base]
type = internal/temperature
warn-temperature = 80
format = <label>
label-warn-foreground = ${color.alert}
[fs-base]
type = internal/fs
interval = 30
fixed-values = true
format-mounted = <label-mounted>
; =========================
; BARS
; =========================
[bar/top]
inherit = bar/base
offset-y = 0
background = ${color.background}
modules-left =
modules-center = date-time
modules-right = battery
radius-bottom = 0
[bar/middle]
inherit = bar/base
offset-y = 20
background = ${color.background-alt}
modules-left = cpu memory
modules-center = cpu-temp gpu-temp nvme-temp fan
modules-right = dns
radius = 0
[bar/bottom]
inherit = bar/base
offset-y = 40
background = ${color.background}
modules-left = net-wireless
modules-center = fs-system
modules-right = volume
radius-top = 0
; =========================
; FOOTER
; =========================
[bar/tray-bottom]
inherit = bar/base
bottom = true
offset-y = 0
background = ${color.background-alt}
modules-left = desktops
modules-center = ping-amaury
modules-right = spotify spotify-prev spotify-play-pause spotify-next tray
[bar/bottom-b]
inherit = bar/base
bottom = true
offset-y = 0
background = ${color.background-alt}
modules-left = desktops
modules-center =
modules-right =
; =========================
; MODULES
; =========================
[module/desktops]
type = internal/i3
pin-workspaces = true
enable-click = true
enable-scroll = true
scroll-up = "#i3.prev"
scroll-down = "#i3.next"
label-focused = %name%
label-focused-padding = 1
label-focused-background = ${color.accent}
label-focused-foreground = #1f2a1f
label-unfocused = %name%
label-unfocused-padding = 1
label-unfocused-foreground = ${color.foreground-dim}
label-visible = %name%
label-visible-padding = 1
label-urgent = %name%
label-urgent-padding = 1
label-urgent-background = ${color.alert}
label-urgent-foreground = #ffffff
[module/cpu]
type = internal/cpu
interval = 2
format = <label>
label = CPU %percentage%%
[module/memory]
type = internal/memory
interval = 2
format = <label>
label = RAM %percentage_used%% %used%
[module/cpu-temp]
inherit = module/temp-base
hwmon-path = /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon@HW@/temp1_input
label = CPU %temperature-c%
label-warn = CPU %temperature-c%
[module/gpu-temp]
inherit = module/temp-base
hwmon-path = /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon@HW@/temp2_input
label = GPU %temperature-c%
label-warn = GPU %temperature-c%
[module/nvme-temp]
inherit = module/temp-base
hwmon-path = /sys/devices/pci0000:00/0000:00:06.0/0000:01:00.0/nvme/nvme0/hwmon0/temp1_input
label = NVMe %temperature-c%
label-warn = NVMe %temperature-c%
[module/fan]
type = custom/script
exec = cat /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon*/fan1_input
label = Fan %output% RPM
[module/date-time]
type = internal/date
interval = 1
date = %a %d %b
time = %H:%M:%S
label = %date% · %time%
[module/battery]
type = internal/battery
battery = BAT0
adapter = AC
poll-interval = 1
low-at = 15
full-at = 100
time-format = %Hh %Mm
format-charging = <label-charging>
label-charging = 󰂄 %percentage%% %time% %consumption%W
format-discharging = <label-discharging>
label-discharging = 󱟤 %percentage%% %time% %consumption%W
format-full = <label-full>
label-full = 󱈏 %percentage%%
format-low = <label-low>
label-low = 󰂃 %percentage%%
label-low-foreground = ${color.alert}
[module/net-wireless]
type = internal/network
interface-type = wireless
interval = 3
speed-unit = B/s
format-connected = <label-connected>
label-connected = %essid% · %local_ip% · U %upspeed% · D %downspeed%
format-disconnected = <label-disconnected>
label-disconnected = Wi-Fi down
label-disconnected-foreground = ${color.foreground-dim}
[module/fs-system]
inherit = fs-base
mount-0 = /
label-mounted = / %used% on %total%
[module/dns]
type = custom/script
exec = nslookup amauryjoly.fr | sed -n '2p' | awk '{print $2}'
interval = 30
label = DNS %output%
[module/volume]
type = internal/pulseaudio
format-volume = <label-volume>
label-volume = VOL %percentage%%
format-muted = <label-muted>
label-muted = VOL mute
label-muted-foreground = ${color.foreground-dim}
[module/tray]
type = internal/tray
format-margin = 2
tray-spacing = 0
[module/ping-amaury]
type = custom/script
exec = sh -c 'v=$(ping -c 1 -W 1 amauryjoly.fr 2>/dev/null | sed -n "s/.*temps=\\([0-9.]*\\).*/\\1/p"); [ -n "$v" ] && echo "$v ms" || echo "down"'
interval = 60
format = <label>
label = LAT %output%
[module/spotify]
type = custom/script
tail = true
interval = 5
; prefix symbol is shown before the text
format-prefix = " "
format = <label>
exec = ~/.config/polybar/scroll_spotify_status.sh
[module/spotify-prev]
type = custom/text
format = "󰒮"
click-left = playerctl previous -p spotify
[module/spotify-play-pause]
type = custom/ipc
hook-0 = echo '󰏤'
hook-1 = echo ''
initial = 1
click-left = playerctl play-pause -p spotify
[module/spotify-next]
type = custom/text
format = "󰒭"
click-left = playerctl next -p spotify

View File

@@ -0,0 +1,51 @@
#!/bin/sh
# https://github.com/PrayagS/polybar-spotify/blob/master/get_spotify_status.sh
# The name of polybar bar which houses the main spotify module and the control modules.
PARENT_BAR="tray-bottom"
PARENT_BAR_PID=$(pgrep -a "polybar" | grep "$PARENT_BAR" | cut -d" " -f1)
# Set the source audio player here.
# Players supporting the MPRIS spec are supported.
# Examples: spotify, vlc, chrome, mpv and others.
# Use `playerctld` to always detect the latest player.
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
PLAYER="spotify"
# Format of the information displayed
# Eg. {{ artist }} - {{ album }} - {{ title }}
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
FORMAT="{{ title }} - {{ artist }}"
# Sends $2 as message to all polybar PIDs that are part of $1
update_hooks() {
while IFS= read -r id
do
polybar-msg -p "$id" hook spotify-play-pause $2 1>/dev/null 2>&1
done < <(echo "$1")
}
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
STATUS=$PLAYERCTL_STATUS
else
STATUS="No player is running"
fi
if [ "$1" == "--status" ]; then
echo "$STATUS"
else
if [ "$STATUS" = "Stopped" ]; then
echo "No music is playing"
elif [ "$STATUS" = "Paused" ]; then
update_hooks "$PARENT_BAR_PID" 2
playerctl --player=$PLAYER metadata --format "$FORMAT"
elif [ "$STATUS" = "No player is running" ]; then
echo "$STATUS"
else
update_hooks "$PARENT_BAR_PID" 1
playerctl --player=$PLAYER metadata --format "$FORMAT"
fi
fi

View File

@@ -0,0 +1,12 @@
#!/bin/sh
# see man zscroll for documentation of the following parameters
zscroll -l 30 \
--delay 1 \
--scroll-padding "  " \
--match-command "`dirname $0`/get_spotify_status.sh --status" \
--match-text "Playing" "--scroll 1" \
--match-text "Paused" "--scroll 0" \
--update-check true "`dirname $0`/get_spotify_status.sh" &
wait

40
dotconfig/polybar/start.sh Executable file
View File

@@ -0,0 +1,40 @@
#!/bin/sh
killall -q polybar
while pgrep -x polybar >/dev/null; do
sleep 1
done
hw=""
for h in /sys/class/hwmon/hwmon*; do
if grep -qx 'thinkpad' "$h/name"; then
hw=${h##*/hwmon}
break
fi
done
[ -n "$hw" ] || {
echo "Capteur thinkpad introuvable" >&2
exit 1
}
polybar_dir="/home/alice/.config/polybar"
tmpconf="$polybar_dir/config.ini"
sed "s/@HW@/$hw/g" $polybar_dir/config.ini.model > "$tmpconf"
primary=$(xrandr --query | grep " primary" | cut -d" " -f1)
for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do
MONITOR="$m" HW="$hw" polybar top &
sleep 0.1
MONITOR="$m" HW="$hw" polybar middle &
sleep 0.1
MONITOR="$m" HW="$hw" polybar bottom &
if [ "$m" = "$primary" ]; then
MONITOR="$m" HW="$hw" polybar tray-bottom &
else
MONITOR="$m" HW="$hw" polybar bottom-b &
fi
done