Restructure dotfiles : suppression outils abandonnés, migration sway→hyprland, neomutt→aerc

- Supprimés : fish, qtile, X, vim, sway, neomutt (+ package systemd vide)
- Nouveau package hyprland : waybar, rofi, mako, gammastep, rofi-pass, systemd (mail+kanata+mpd+voxtype), script rofi
- Nouveau package aerc : config aerc + infra mail (msmtp, khard, vdirsyncer) migrée depuis neomutt
- Nettoyage .gitignore : suppression entrées neomutt/vim, ajout patterns moc/mpd/vifm manquants, vdirsyncer/status pour aerc
- Mise à jour des configs trackées modifiées (nvim, zsh, tmux, git, newsboat)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-19 06:40:49 +02:00
parent d84f20edf0
commit 0a00251742
86 changed files with 2032 additions and 1717 deletions

View File

@@ -0,0 +1,58 @@
; Global settings
[general]
; Set the day and night screen temperatures
temp-day=5700
temp-night=4000
; Disable the smooth fade between temperatures when Redshift starts and stops.
; 0 will cause an immediate change between screen temperatures.
; 1 will gradually apply the new screen temperature over a couple of seconds.
fade=1
; Solar elevation thresholds.
; By default, Redshift will use the current elevation of the sun to determine
; whether it is daytime, night or in transition (dawn/dusk). When the sun is
; above the degrees specified with elevation-high it is considered daytime and
; below elevation-low it is considered night.
;elevation-high=3
;elevation-low=-6
; Custom dawn/dusk intervals.
; Instead of using the solar elevation, the time intervals of dawn and dusk
; can be specified manually. The times must be specified as HH:MM in 24-hour
; format.
;dawn-time=6:00-7:45
;dusk-time=18:35-20:15
; Set the screen brightness. Default is 1.0.
; brightness=0.8
; It is also possible to use different settings for day and night
; since version 1.8.
brightness-day=1
brightness-night=0.7
; Set the screen gamma (for all colors, or each color channel
; individually)
; gamma=0.8
;gamma=0.8:0.7:0.8
; This can also be set individually for day and night since
; version 1.10.
gamma-day=0.8:0.7:0.8
gamma-night=0.7
; Set the location-provider: 'geoclue2', 'manual'.
; The location provider settings are in a different section.
location-provider=manual
; Set the adjustment-method: 'randr', 'vidmode', 'drm', 'wayland'.
; 'randr' is the preferred X11 method, 'vidmode' is an older API
; that works in some cases when 'randr' does not.
; The adjustment method settings are in a different section.
adjustment-method=wayland
; Configuration of the location-provider:
; type 'gammastep -l PROVIDER:help' to see the settings.
; ex: 'gammastep -l manual:help'
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
; are negative numbers.
[manual]
lat=46.2
lon=5.7
; Configuration of the adjustment-method
; type 'gammastep -m METHOD:help' to see the settings.
; ex: 'gammastep -m randr:help'
; In this example, randr is configured to adjust only screen 0.
; Note that the numbering starts from 0, so this is actually the first screen.
; If this option is not specified, Redshift will try to adjust _all_ screens.

View File

@@ -0,0 +1,23 @@
sort=-time
layer=overlay
background-color=#282828
width=300
height=110
border-size=2
border-color=#88c0d0
border-radius=5
icons=0
max-icon-size=64
default-timeout=5000
ignore-timeout=1
font=monospace 10
[urgency=low]
border-color=#ebdbb2
[urgency=normal]
border-color=#d65d0e
[urgency=high]
border-color=#cc241d
default-timeout=0

View File

@@ -0,0 +1,127 @@
# permanently set alternative root dir. Use ":" to separate multiple roots
# which can be switched at runtime with shift+left/right
# root=/path/to/root
# rofi command. Make sure to have "$@" as last argument
_rofi () {
rofi -i -no-auto-select "$@"
}
# default command to generate passwords
_pwgen () {
pwgen -y "$@"
}
# image viewer to display qrcode of selected entry
# qrencode is needed to generate the image and a viewer
# that can read from pipes. Known viewers to work are feh and display
_image_viewer () {
# feh -
display
}
# It is possible to use wl-copy and wl-paste from wl-clipboard
# Just uncomment the lines with wl-copy and wl-paste
# and comment the xclip lines
#
_clip_in_primary() {
# xclip
wl-copy-p
}
_clip_in_clipboard() {
#xclip -selection clipboard
wl-copy
}
_clip_out_primary() {
# xclip -o
wl-paste -p
}
_clip_out_clipboard() {
# xclip --selection clipboard -o
wl-paste
}
# xdotool needs the keyboard layout to be set using setxkbmap
# You can do this in your autostart scripts (e.g. xinitrc)
# If for some reason, you cannot do this, you can set the command here.
# and set fix_layout to true
fix_layout=true
layout_cmd () {
setxkbmap fr
}
# fields to be used
URL_field='url'
USERNAME_field='user'
AUTOTYPE_field='autotype'
# delay to be used for :delay keyword
delay=2
# rofi-pass needs to close itself before it can type passwords. Set delay here.
wait=0.2
# delay between keypresses when typing (in ms)
xdotool_delay=12
## Programs to be used
# Editor
EDITOR='gvim -f'
# Browser
BROWSER='xdg-open'
## Misc settings
default_do='menu' # menu, autotype, copyPass, typeUser, typePass, copyUser, copyUrl, viewEntry, typeMenu, actionMenu, copyMenu, openUrl
auto_enter='false'
notify='false'
default_autotype='user :tab pass'
# color of the help messages
# leave empty for autodetection
help_color="#4872FF"
# Clipboard settings
# Possible options: primary, clipboard, both
clip=primary
# Seconds before clearing pass from clipboard
clip_clear=45
## Options for generating new password entries
# open new password entries in editor
edit_new_pass="true"
# default_user is also used for password files that have no user field.
default_user=:filename
#default_user="${ROFI_PASS_DEFAULT_USER-$(whoami)}"
#default_user2=mary_ann
#password_length=12
# Custom Keybindings
autotype="Alt+1"
type_user="Alt+2"
type_pass="Alt+3"
open_url="Alt+4"
copy_name="Alt+u"
copy_url="Alt+l"
copy_pass="Alt+p"
show="Alt+o"
copy_entry="Alt+2"
type_entry="Alt+1"
copy_menu="Alt+c"
action_menu="Alt+a"
type_menu="Alt+t"
help="Alt+h"
switch="Alt+x"
clipboard_backend=wl-clipboard
backend=wtype

View File

@@ -0,0 +1,18 @@
configuration {
terminal: "kitty";
modi: "combi,window,drun";
combi-modi: "drun,window";
font: "Noto Sans Bold 10";
show-icons: true;
icon-theme: "Tela circle dark";
combi-hide-mode-prefix: true;
drun-show-actions: true;
drun-display-format: "{name}";
disable-history: false;
fullscreen: false;
hide-scrollbar: true;
sidebar-mode: false;
auto-select: false;
}
@theme "/home/lafrite/.local/share/rofi/rofi-themes-collection/themes/spotlight-dark.rasi"

View File

@@ -0,0 +1 @@
/home/lafrite/.config/systemd/user/kanata.service

View File

@@ -0,0 +1 @@
/home/lafrite/.config/systemd/user/msmtp-queue.path

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire.service

View File

@@ -0,0 +1 @@
/home/lafrite/.config/systemd/user/voxtype.service

View File

@@ -0,0 +1,14 @@
[Unit]
Description=Kanata keyboard remapper
Documentation=https://github.com/jtroo/kanata
[Service]
Environment=PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin
Environment=DISPLAY=:0
Environment=HOME=/home/lafrite/
Type=simple
ExecStart=/usr/bin/kanata --cfg /home/lafrite/scripts/Cloned/arsenik/kanata/kanata.kbd
Restart=no
[Install]
WantedBy=default.target

View File

@@ -0,0 +1,9 @@
[Unit]
Description=mbsync mail sync
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/mbsync -a
ExecStartPost=/usr/bin/notmuch new
ExecStartPost=/bin/sh -c 'date > ~/.local/share/mbsync/last-sync'

View File

@@ -0,0 +1,9 @@
[Unit]
Description=mbsync every 5 minutes
[Timer]
OnBootSec=1m
OnUnitActiveSec=5m
[Install]
WantedBy=timers.target

View File

@@ -0,0 +1,18 @@
[Unit]
Description=Music Player Daemon
Documentation=man:mpd(1) man:mpd.conf(5)
After=network.target sound.target
[Service]
Type=notify
ExecStart=/usr/bin/mpd --systemd %E/mpd/mdp.conf
#WatchdogSec=120
LimitRTPRIO=40
LimitRTTIME=infinity
LimitMEMLOCK=64M
[Install]
WantedBy=default.target
Also=mpd.socket

View File

@@ -0,0 +1,9 @@
[Socket]
ListenStream=%t/mpd/socket
ListenStream=6600
Backlog=5
KeepAlive=true
PassCredentials=true
[Install]
WantedBy=sockets.target

View File

@@ -0,0 +1,9 @@
[Unit]
Description=Watch msmtp queue and flush immediately
[Path]
PathChanged=%h/.msmtp/queue
Unit=msmtp-queue.service
[Install]
WantedBy=default.target

View File

@@ -0,0 +1,7 @@
[Unit]
Description=Flush msmtp queue
[Service]
Type=oneshot
ExecStart=/usr/bin/msmtp-queue --run
ExecStartPost=/usr/bin/maildir-rank-addr

View File

@@ -0,0 +1,9 @@
[Unit]
Description=Flush msmtp queue every 10 minutes
[Timer]
OnBootSec=1m
OnUnitActiveSec=10m
[Install]
WantedBy=timers.target

View File

@@ -0,0 +1 @@
/home/lafrite/.config/systemd/user/mpd.socket

View File

@@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire.socket

View File

@@ -0,0 +1 @@
/home/lafrite/.config/systemd/user/mbsync.timer

View File

@@ -0,0 +1 @@
/home/lafrite/.config/systemd/user/msmtp-queue.timer

View File

@@ -0,0 +1 @@
/home/lafrite/.config/systemd/user/vdirsyncer.timer

View File

@@ -0,0 +1,7 @@
[Unit]
Description=vdirsyncer sync
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/vdirsyncer sync

View File

@@ -0,0 +1,9 @@
[Unit]
Description=vdirsyncer sync every 15 minutes
[Timer]
OnBootSec=2m
OnUnitActiveSec=15m
[Install]
WantedBy=timers.target

View File

@@ -0,0 +1,17 @@
[Unit]
Description=Voxtype push-to-talk voice-to-text daemon
Documentation=https://voxtype.io
PartOf=graphical-session.target
After=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/voxtype daemon
Restart=on-failure
RestartSec=5
# Ensure we have access to the display
Environment=XDG_RUNTIME_DIR=%t
[Install]
WantedBy=graphical-session.target

View File

@@ -0,0 +1,111 @@
[{
"layer": "top",
"output": "eDP-1",
"height": 30,
"modules-left": ["sway/mode","sway/window" ],
"modules-center": ["sway/workspaces" ],
"modules-right": ["pulseaudio", "battery", "tray", "clock"],
"sway/window": {
"max-length": 50
},
"sway/workspaces": {
"all-outputs": true
},
"battery": {
"states": {
// "good": 95,
"warning": 20,
"critical": 10
},
"format": "{capacity}% {icon}",
"format-charging": "{capacity}% ",
"format-plugged": "{capacity}% ",
"format-alt": "{time} {icon}",
// "format-good": "", // An empty format will hide the module
// "format-full": "",
"format-icons": ["", "", "", "", ""]
},
"clock": {
"format": "{:%a, %d. %b %H:%M}",
"on-click": "gnome-calendar"
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
"format": "{volume}% {icon} {format_source}",
"format-bluetooth": "{volume}% {icon} {format_source}",
"format-bluetooth-muted": " {icon} {format_source}",
"format-muted": " {format_source}",
"format-source": "{volume}% ",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click": "pavucontrol"
},
"tray": {
"icon-size": 21,
"spacing": 10,
}
},
{
"layer": "bottom",
"position": "bottom",
"output": "DP-2",
"height": 30,
"modules-left": ["sway/workspaces", "sway/mode"],
"modules-center": ["sway/window"],
"modules-right": ["pulseaudio", "battery", "tray", "clock"],
"sway/window": {
"max-length": 50
},
"sway/workspaces": {
"all-outputs": true
},
"battery": {
"states": {
// "good": 95,
"warning": 20,
"critical": 10
},
"format": "{capacity}% {icon}",
"format-charging": "{capacity}% ",
"format-plugged": "{capacity}% ",
"format-alt": "{time} {icon}",
// "format-good": "", // An empty format will hide the module
// "format-full": "",
"format-icons": ["", "", "", "", ""]
},
"clock": {
"format": "{:%a, %d. %b %H:%M}",
"on-click": "gnome-calendar"
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
"format": "{volume}% {icon} {format_source}",
"format-bluetooth": "{volume}% {icon} {format_source}",
"format-bluetooth-muted": " {icon} {format_source}",
"format-muted": " {format_source}",
"format-source": "{volume}% ",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
},
"on-click": "pavucontrol"
},
"tray": {
"icon-size": 21,
"spacing": 10,
}
}]

View File

@@ -0,0 +1,72 @@
[{
"layer": "top",
"output": ["eDP-1", "DVI-I-1"],
"height": 30,
"spacing": 0,
"modules-left": ["hyprland/workspaces"],
"modules-center": [],
"modules-right": ["mpris", "pulseaudio", "battery", "tray", "clock"],
"hyprland/workspaces": {
"on-click": "activate",
"disable-scroll": true,
"all-outputs": true,
"show-special": false,
"persistent-workspaces": {
"*": [1, 2, 3, 4]
},
"format": "{id}"
},
"battery": {
"states": {
"warning": 20,
"critical": 10
},
"format": "{capacity}% {icon}",
"format-charging": "{capacity}% 󰂄",
"format-plugged": "{capacity}% 󰂄",
"format-alt": "{time} {icon}",
"format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
},
"clock": {
"format": "{:%a %d %b %H:%M}",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"on-click": "gnome-calendar"
},
"pulseaudio": {
"format": "{volume}% {icon}",
"format-bluetooth": "{volume}% {icon}",
"format-bluetooth-muted": "󰸈 {icon}",
"format-muted": "󰸈",
"format-icons": {
"headphone": "󰋋",
"hands-free": "󰋎",
"headset": "󰋎",
"phone": "󰏲",
"portable": "󰏲",
"car": "󰄋",
"default": ["󰕿", "󰖀", "󰕾"]
},
"on-click": "pavucontrol"
},
"tray": {
"icon-size": 22,
"spacing": 10
},
"mpris": {
"format": "{player_icon} 󰐊",
"format-paused": "{player_icon} 󰏤",
"format-stopped": "",
"tooltip-format": "{title} — {artist}",
"player-icons": {
"default": "󰎆",
"spotify": "󰓇",
"firefox": "󰈹",
"chromium": "󰊯",
"mpv": "󰐊",
"vlc": "󰕼"
},
"on-click": "playerctl play-pause",
"on-scroll-up": "playerctl next",
"on-scroll-down": "playerctl previous"
}
}]

View File

@@ -0,0 +1,23 @@
@define-color background #282828;
@define-color foreground #ebdbb2;
@define-color black #282828;
@define-color red #cc241d;
@define-color green #98971a;
@define-color yellow #d79921;
@define-color blue #458588;
@define-color magenta #b16286;
@define-color cyan #689d6a;
@define-color white #a89984;
@define-color aqua #689d6a;
@define-color orange #d65d0e;
@define-color magenta_b #d3869b;
@define-color cyan_b #8ec07c;
@define-color yellow_b #fabd2f;
@define-color white_b #ebdbb2;
@define-color black_b #928374;
@define-color red_b #fb4934;
@define-color green_b #b8bb26;
@define-color blue_b #83a598;
@define-color aqua_b #8ec07c;
@define-color orange_b #fe8010;

View File

@@ -0,0 +1,107 @@
* {
border: none;
border-radius: 0;
font-family: "Noto Sans", "JetBrainsMono Nerd Font", monospace;
font-size: 16px;
min-height: 0;
}
@import "gruvbox.css";
window#waybar {
background: #32302f;
color: @foreground;
}
/* Workspaces */
#workspaces {
padding: 0 2px;
}
#workspaces button {
padding: 0 7px;
background: transparent;
color: @white;
border-radius: 6px;
min-width: 18px;
}
#workspaces button.empty {
color: rgba(168, 153, 132, 0.3);
}
#workspaces button.active {
background: rgba(214, 93, 14, 0.25);
color: @orange_b;
}
#workspaces button.visible:not(.active) {
background: rgba(69, 133, 136, 0.25);
color: @blue_b;
}
#workspaces button:hover {
background: rgba(168, 153, 132, 0.15);
color: @foreground;
}
/* Mode (sway) */
#mode {
background: @red;
color: @foreground;
border-radius: 8px;
margin: 4px 2px;
padding: 0 10px;
font-style: italic;
}
/* Right modules */
#clock,
#battery,
#pulseaudio,
#mpris,
#tray {
padding: 0 8px;
margin: 0;
color: @foreground;
}
#battery.charging {
color: @green;
}
#battery.warning:not(.charging) {
color: @red_b;
}
@keyframes blink {
to {
color: @red;
}
}
#battery.critical:not(.charging) {
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#pulseaudio.muted {
color: @white;
}
#tray {
padding: 0 4px;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: @red;
border-radius: 4px;
}

View File

@@ -0,0 +1,89 @@
#! /usr/bin/zsh
set -e
PICTURES_DIR="$(xdg-user-dir PICTURES)"
ZK_NOTEBOOK_DIR="/home/lafrite/Nextcloud/Documents/zettelkasten/"
monitor="$(hyprctl monitors -j | jq '[.[].focused] | index(true)')"
# monitor="$(swaymsg -t get_outputs | jq '[.[].focused] | index(true)')"
alias myrofi="fuzzel --dmenu"
# alias myrofi="rofi -dmenu -matching fuzzy -i -sort -sorting-method fzf -monitor $monitor"
select_window() {
declare -A windows
swaymsg -t get_tree |
jq -r '..|.nodes? + .floating_nodes?|arrays|select(length > 0)|.[]|select((.nodes + .floating_nodes | length) == 0)|select(.visible)|(.app_id + ": " + .name + "\n" + (.rect.x | tostring) + "," + (.rect.y | tostring) + " " + (.rect.width | tostring) + "x" + (.rect.height | tostring))' |
while read window_name; read geometry; do
windows[$window_name]="$geometry"
done
echo ${windows[$(print -l ${(@k)windows} | myrofi)]}
}
main() {
actions="Copy region to clipboard\nSave region to $PICTURES_DIR\nCopy window to clipboard\nSave window to $PICTURES_DIR\nSave region to zk"
if [[ "$(swaymsg -t get_outputs | jq length)" == "1" ]]; then
actions+="\nCopy screen to clipboard\nSave screen to $PICTURES_DIR"
else
actions+="\nCopy current monitor to clipboard\nSave current monitor to $PICTURES_DIR\nCopy all monitors to clipboard\nSave all monitors to $PICTURES_DIR"
fi
selection="$(echo "$actions" | myrofi -p "Take a screenshot")"
filename="$(date +'screenshot_%Y%m%d%H%M%s.png')"
imagepath="${PICTURES_DIR}/$filename"
zkpath="${ZK_NOTEBOOK_DIR}/fig/$filename"
case "$selection" in
"Copy region to clipboard")
grim -g "$(slurp)" - | wl-copy
notify-send "Region copied to clipboard"
;;
"Save region to $PICTURES_DIR")
grim -g "$(slurp)" "$imagepath"
reply=$(notify-send -A 'open,Open' -i "$imagepath" "Screenshot saved")
;;
"Save region to zk")
grim -g "$(slurp)" "$zkpath"
sh_path="../fig/${zkpath##*/}"
wl-copy $sh_path
reply=$(notify-send -A 'open,Open' -i "$imagepath" "Screenshot saved" "$sh_path is copied")
;;
"Copy window to clipboard")
grim -g "$(select_window)" - | wl-copy
notify-send "Window copied to clipboard"
;;
"Save window to $PICTURES_DIR")
grim -g "$(select_window)" "$imagepath"
reply=$(notify-send -A 'open,Open' -i "$imagepath" "Screenshot saved")
;;
"Copy current monitor to clipboard")
monitor="$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')"
grim -o $monitor - | wl-copy
notify-send "Monitor $monitor copied to clipboard"
;;
"Save current monitor to $PICTURES_DIR")
grim -o "$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')" "$imagepath"
reply=$(notify-send -A 'open,Open' -i "$imagepath" "Screenshot saved")
;;
"Copy screen to clipboard"|"Copy all monitors to clipboard")
grim - | wl-copy
notify-send "Screen copied to clipboard"
;;
"Save screen to $PICTURES_DIR"|"Save all monitors to $PICTURES_DIR")
grim "$imagepath"
reply=$(notify-send -A 'open,Open' -i "$imagepath" "Screenshot saved")
;;
*)
exit 1
;;
esac
if [[ "$reply" == "2" ]]; then
nautilus -s $imagepath
fi
}
main "$@"