Compare commits
44 commits
7ed3f78c41
...
f0d39800d6
| Author | SHA1 | Date | |
|---|---|---|---|
| f0d39800d6 | |||
| 79b08a5369 | |||
| 75289913f6 | |||
| c54d7d22bf | |||
| c071bee8f7 | |||
| 1f3438624e | |||
| 72c663f719 | |||
| 60a00adf8e | |||
| dfd2599a5e | |||
| b475faba2a | |||
| 8551db9e35 | |||
| 7da6cec15c | |||
| de7b8e283e | |||
| ed6888a033 | |||
|
|
525a263c27 | ||
|
|
6d11442134 | ||
|
|
7b74e20dc7 | ||
|
|
76f89d79c0 | ||
|
|
09d5afa549 | ||
|
|
3c9b1427be | ||
|
|
365fa00891 | ||
|
|
af2ae5380e | ||
|
|
2c631074fe | ||
|
|
1180784880 | ||
|
|
4efa9d244d | ||
|
|
90e6e1e134 | ||
|
|
09638119f3 | ||
|
|
a869246478 | ||
|
|
4aad94cb5c | ||
|
|
76879b91e5 | ||
|
|
adf6dd1163 | ||
|
|
c60bd49d51 | ||
|
|
1eec305b93 | ||
|
|
031864d448 | ||
|
|
a0c1a2d197 | ||
|
|
faa9676ef1 | ||
|
|
506bf37d72 | ||
|
|
68f26b1261 | ||
|
|
07d68b06d6 | ||
|
|
2f09785761 | ||
|
|
73ab06d1bb | ||
|
|
03dafbe3ab | ||
|
|
be4e96ebc3 | ||
|
|
32d124441e |
115 changed files with 2187 additions and 3122 deletions
|
|
@ -1,16 +1,16 @@
|
||||||
|
NetworkManager-dispatcher.service
|
||||||
|
NetworkManager-wait-online.service
|
||||||
|
NetworkManager.service
|
||||||
avahi-daemon.service
|
avahi-daemon.service
|
||||||
|
blueman-mechanism.service
|
||||||
bluetooth.service
|
bluetooth.service
|
||||||
cups.service
|
cups.service
|
||||||
getty@.service
|
getty@.service
|
||||||
greetd.service
|
greetd.service
|
||||||
grub-btrfsd.service
|
|
||||||
libvirtd.service
|
|
||||||
NetworkManager-dispatcher.service
|
|
||||||
NetworkManager-wait-online.service
|
|
||||||
NetworkManager.service
|
|
||||||
nftables.service
|
nftables.service
|
||||||
power-profiles-daemon.service
|
nginx.service
|
||||||
seatd.service
|
sshd.service
|
||||||
systemd-oomd.service
|
|
||||||
systemd-resolved.service
|
|
||||||
systemd-timesyncd.service
|
systemd-timesyncd.service
|
||||||
|
tlp-pd.service
|
||||||
|
tlp.service
|
||||||
|
wg-quick@wg0.service
|
||||||
|
|
|
||||||
7
.assets/enabled-system-aux-units.txt
Normal file
7
.assets/enabled-system-aux-units.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
avahi-daemon.socket
|
||||||
|
cups.path
|
||||||
|
cups.socket
|
||||||
|
fstrim.timer
|
||||||
|
snapper-cleanup.timer
|
||||||
|
snapper-timeline.timer
|
||||||
|
systemd-userdbd.socket
|
||||||
6
.assets/enabled-user-aux-units.txt
Normal file
6
.assets/enabled-user-aux-units.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
arch-sentinel-sample.timer
|
||||||
|
battery-low-notify.timer
|
||||||
|
gnome-keyring-daemon.socket
|
||||||
|
p11-kit-server.socket
|
||||||
|
pipewire-pulse.socket
|
||||||
|
pipewire.socket
|
||||||
42
.assets/external-tools.md
Normal file
42
.assets/external-tools.md
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Outils hors Pacman
|
||||||
|
|
||||||
|
Cet inventaire décrit les dépendances observées le 25 septembre 2026 qui ne
|
||||||
|
sont pas restaurées par `pkglist-pacman.txt` ou `pkglist-aur.txt`.
|
||||||
|
|
||||||
|
## Cargo
|
||||||
|
|
||||||
|
- `ytmusic-tui 0.2.1` (`cargo install ytmusic-tui`)
|
||||||
|
|
||||||
|
## npm utilisateur
|
||||||
|
|
||||||
|
Le préfixe actif est `~/.local/npm` et `.zshrc` l'ajoute à `PATH`.
|
||||||
|
|
||||||
|
- `@earendil-works/pi-coding-agent@0.84.3`
|
||||||
|
- `context-mode@1.0.169`
|
||||||
|
- `prettier@3.9.6`
|
||||||
|
|
||||||
|
## Builds et projets locaux
|
||||||
|
|
||||||
|
Ces éléments sont volontairement hors du dépôt de dotfiles. Les liens ou
|
||||||
|
unités du dépôt supposent leur présence à ces emplacements :
|
||||||
|
|
||||||
|
- `~/.local/src/arch-sentinel` fournit `~/.local/bin/arch-sentinel` ;
|
||||||
|
- `~/Documents/trainlog` fournit les exécutables et agents Trainlog ;
|
||||||
|
- `~/Documents/Lardon` fournit la session FreeCAD et ses outils ;
|
||||||
|
- `~/Documents/labfy-remote-ui` fournit `labfy-remote-ui` ;
|
||||||
|
- `~/Applications/openmvs-2.4.0` fournit OpenMVS au pipeline `scan3d` ;
|
||||||
|
- `~/.codex/packages/standalone/current` fournit le lien utilisateur `codex`.
|
||||||
|
|
||||||
|
## Helpers système locaux
|
||||||
|
|
||||||
|
Ces fichiers sous `/usr/local` ne sont possédés par aucun paquet. Ils relèvent
|
||||||
|
de la couche système `arch-system`, pas de ce dépôt utilisateur :
|
||||||
|
|
||||||
|
- `/usr/local/sbin/batlimit-set` ;
|
||||||
|
- `/usr/local/sbin/vmware-stack`.
|
||||||
|
|
||||||
|
## Problème système connu
|
||||||
|
|
||||||
|
`wg-quick@wg0.service` est activé mais échoue au démarrage car `resolvconf`
|
||||||
|
signale une divergence de signature pour `/etc/resolv.conf`. La correction
|
||||||
|
appartient à `arch-system` et n'est pas appliquée ici.
|
||||||
|
|
@ -1,18 +1,6 @@
|
||||||
[terminal]
|
[terminal]
|
||||||
# The VT to run the greeter on. Can be "next", "current" or a number
|
|
||||||
# designating the VT.
|
|
||||||
vt = 1
|
vt = 1
|
||||||
|
|
||||||
# The default session, also known as the greeter.
|
|
||||||
[default_session]
|
[default_session]
|
||||||
|
command = "tuigreet --remember --asterisks --time --greeting 'Welcome to ArchASP' --theme 'container=brightblack;border=magenta;text=white;greet=brightmagenta;prompt=cyan;input=brightcyan;time=brightyellow;error=red;button=green;action=green' --cmd 'uwsm start default' --power-shutdown 'shutdown -h now' --power-reboot 'reboot'"
|
||||||
# `agreety` is the bundled agetty/login-lookalike. You can replace `/bin/sh`
|
user = "greeter"
|
||||||
# with whatever you want started, such as `sway`.
|
|
||||||
command = "sway --config /etc/greetd/sway-config"
|
|
||||||
|
|
||||||
# The user to run the command as. The privileges this user must have depends
|
|
||||||
# on the greeter. A graphical greeter may for example require the user to be
|
|
||||||
# in the `video` group.
|
|
||||||
user = ""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2022 Harish Rajagopal <harish.rajagopals@gmail.com>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
[background]
|
|
||||||
# Path to the background image
|
|
||||||
path = "/home/fy59/Images/Wallpapers/sway.png"
|
|
||||||
|
|
||||||
# How the background image covers the screen if the aspect ratio doesn't match
|
|
||||||
# Available values: "Fill", "Contain", "Cover", "ScaleDown"
|
|
||||||
# Refer to: https://docs.gtk.org/gtk4/enum.ContentFit.html
|
|
||||||
# NOTE: This is ignored if ReGreet isn't compiled with GTK v4.8 support.
|
|
||||||
fit = "Cover"
|
|
||||||
|
|
||||||
[GTK]
|
|
||||||
# Whether to use the dark theme
|
|
||||||
application_prefer_dark_theme = true
|
|
||||||
|
|
||||||
# Cursor theme name
|
|
||||||
cursor_theme_name = "catppuccin-mocha-lavender-cursors"
|
|
||||||
|
|
||||||
# Whether to blink the cursor
|
|
||||||
cursor_blink = true
|
|
||||||
|
|
||||||
# Font name and size
|
|
||||||
font_name = "jetbrains mono nerd font 14"
|
|
||||||
|
|
||||||
# Icon theme name
|
|
||||||
icon_theme_name = "Tela-blue-dark"
|
|
||||||
|
|
||||||
# GTK theme name
|
|
||||||
theme_name = "catppuccin-mocha-lavender-standard+default"
|
|
||||||
|
|
||||||
[commands]
|
|
||||||
# The command used to reboot the system
|
|
||||||
reboot = ["systemctl", "reboot"]
|
|
||||||
|
|
||||||
# The command used to shut down the system
|
|
||||||
poweroff = ["systemctl", "poweroff"]
|
|
||||||
|
|
||||||
[appearance]
|
|
||||||
# The message that initially displays on startup
|
|
||||||
greeting_msg = "Welcome back!"
|
|
||||||
|
|
||||||
|
|
||||||
[widget.clock]
|
|
||||||
# strftime format argument
|
|
||||||
# See https://docs.rs/jiff/0.1.14/jiff/fmt/strtime/index.html#conversion-specifications
|
|
||||||
format = "%H:%M"
|
|
||||||
|
|
||||||
# How often to update the text
|
|
||||||
resolution = "500ms"
|
|
||||||
|
|
||||||
# Override system timezone (IANA Time Zone Database name, aka /etc/zoneinfo path)
|
|
||||||
# Remove to use the system time zone.
|
|
||||||
timezone = "Europe/Paris"
|
|
||||||
|
|
||||||
# Ask GTK to make the label at least this wide. This helps keeps the parent element layout and width consistent.
|
|
||||||
# Experiment with different widths, the interpretation of this value is entirely up to GTK.
|
|
||||||
label_width = 150
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
exec "regreet; swaymsg exit"
|
|
||||||
include /etc/sway/config.d/*
|
|
||||||
|
|
||||||
### Keyboard
|
|
||||||
input * {
|
|
||||||
xkb_layout fr
|
|
||||||
xkb_variant oss
|
|
||||||
}
|
|
||||||
|
|
||||||
### Touchpad
|
|
||||||
input "type:touchpad" {
|
|
||||||
tap enabled
|
|
||||||
tap_button_map lrm
|
|
||||||
}
|
|
||||||
17
.assets/pkglist-aur.txt
Normal file
17
.assets/pkglist-aur.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
appflowy-bin
|
||||||
|
bibata-cursor-theme
|
||||||
|
bridge-utils
|
||||||
|
colmap
|
||||||
|
colmap-debug
|
||||||
|
freeimage
|
||||||
|
go-mtpfs-git
|
||||||
|
hyprwhspr
|
||||||
|
jmtpfs
|
||||||
|
limine-snapper-sync
|
||||||
|
limusic-bin
|
||||||
|
meshlab-bin
|
||||||
|
mozjpeg-debug
|
||||||
|
proton-pass-bin
|
||||||
|
spicetify-marketplace-bin
|
||||||
|
vmware-workstation
|
||||||
|
yay
|
||||||
|
|
@ -1,202 +1,251 @@
|
||||||
7zip
|
7zip
|
||||||
accountsservice
|
|
||||||
acpi
|
|
||||||
alsa-utils
|
alsa-utils
|
||||||
amass
|
amd-ucode
|
||||||
|
amdgpu_top
|
||||||
|
android-file-transfer
|
||||||
|
android-tools
|
||||||
|
ansible
|
||||||
|
atuin
|
||||||
|
autotiling
|
||||||
|
axel
|
||||||
base
|
base
|
||||||
base-devel
|
base-devel
|
||||||
bash-completion
|
|
||||||
bat
|
bat
|
||||||
|
bat-extras
|
||||||
|
bear
|
||||||
|
bind
|
||||||
blueman
|
blueman
|
||||||
bluez
|
bluez
|
||||||
bluez-utils
|
bluez-utils
|
||||||
brightnessctl
|
brightnessctl
|
||||||
broadcom-wl-dkms
|
|
||||||
btop
|
btop
|
||||||
btrfs-progs
|
btrfs-progs
|
||||||
calcure
|
ccache
|
||||||
catppuccin-cursors-mocha
|
clang
|
||||||
catppuccin-gtk-theme-mocha
|
|
||||||
cliphist
|
cliphist
|
||||||
cpio
|
cloc
|
||||||
|
cmake
|
||||||
|
composer
|
||||||
|
cowsay
|
||||||
|
cppcheck
|
||||||
|
cppdap
|
||||||
|
cpupower
|
||||||
cups
|
cups
|
||||||
dante
|
cups-pk-helper
|
||||||
deezer
|
dmidecode
|
||||||
dgop
|
|
||||||
dialog
|
|
||||||
discord
|
|
||||||
dnsmasq
|
dnsmasq
|
||||||
|
docker
|
||||||
dosfstools
|
dosfstools
|
||||||
ecryptfs-utils
|
|
||||||
edk2-ovmf
|
|
||||||
efibootmgr
|
efibootmgr
|
||||||
|
eigen
|
||||||
|
evince
|
||||||
evtest
|
evtest
|
||||||
exfatprogs
|
exfatprogs
|
||||||
eza
|
eza
|
||||||
fastfetch
|
fastfetch
|
||||||
fd
|
fd
|
||||||
|
ffmpegthumbnailer
|
||||||
figlet
|
figlet
|
||||||
file-roller
|
|
||||||
firefox
|
firefox
|
||||||
firefox-i18n-fr
|
firefox-i18n-fr
|
||||||
foomatic-db
|
flatpak
|
||||||
foomatic-db-gutenprint-ppds
|
freecad
|
||||||
foomatic-db-nonfree
|
|
||||||
foomatic-db-nonfree-ppds
|
|
||||||
foomatic-db-ppds
|
|
||||||
fuse-overlayfs
|
|
||||||
fuse2
|
|
||||||
fzf
|
fzf
|
||||||
gammastep
|
ggml-vulkan
|
||||||
|
gimp
|
||||||
|
gimp-help-fr
|
||||||
git
|
git
|
||||||
github-cli
|
github-cli
|
||||||
gnome-themes-extra
|
gnome-keyring
|
||||||
gnu-free-fonts
|
gnu-free-fonts
|
||||||
gobuster
|
gphoto2
|
||||||
google-chrome
|
gradle
|
||||||
greetd-regreet
|
greetd-tuigreet
|
||||||
grim
|
grim
|
||||||
grub
|
grub
|
||||||
grub-btrfs
|
|
||||||
gst-libav
|
gst-libav
|
||||||
|
gst-plugin-gtk4
|
||||||
gst-plugin-pipewire
|
gst-plugin-pipewire
|
||||||
gst-plugins-bad
|
|
||||||
gst-plugins-base
|
|
||||||
gst-plugins-good
|
gst-plugins-good
|
||||||
gst-plugins-ugly
|
gtk4
|
||||||
gum
|
gtklock
|
||||||
hashcat
|
gtklock-playerctl-module
|
||||||
|
gtklock-powerbar-module
|
||||||
|
gtklock-userinfo-module
|
||||||
|
gvfs
|
||||||
|
heimdall
|
||||||
hplip
|
hplip
|
||||||
hunspell-en_us
|
|
||||||
hunspell-fr
|
|
||||||
i3status-rust
|
i3status-rust
|
||||||
inter-font
|
ifuse
|
||||||
inxi
|
imagemagick
|
||||||
|
inotify-tools
|
||||||
|
jadx
|
||||||
|
jdk-openjdk
|
||||||
|
jdk17-openjdk
|
||||||
john
|
john
|
||||||
jq
|
julia
|
||||||
kitty
|
kitty
|
||||||
libspng
|
less
|
||||||
libvirt
|
libgsf
|
||||||
linux
|
libheif
|
||||||
|
libimobiledevice
|
||||||
|
libjpeg-turbo
|
||||||
|
libmtp
|
||||||
|
libplist
|
||||||
|
libpulse
|
||||||
|
limine
|
||||||
linux-firmware
|
linux-firmware
|
||||||
linux-headers
|
linux-lts
|
||||||
lsb-release
|
linux-lts-headers
|
||||||
lsd
|
linux-zen
|
||||||
maim
|
linux-zen-headers
|
||||||
man-db
|
llama-cpp
|
||||||
|
luarocks
|
||||||
|
mako
|
||||||
man-pages
|
man-pages
|
||||||
man-pages-fr
|
man-pages-fr
|
||||||
mercurial
|
memtest86+
|
||||||
mtools
|
memtest86+-efi
|
||||||
|
mesa-utils
|
||||||
|
meson
|
||||||
|
mold
|
||||||
|
mpv
|
||||||
|
mtpfs
|
||||||
neovim
|
neovim
|
||||||
networkmanager
|
networkmanager
|
||||||
nikto
|
nextcloud-client
|
||||||
nmsurf
|
nginx
|
||||||
nodejs
|
nodejs
|
||||||
noto-fonts
|
notcurses
|
||||||
noto-fonts-cjk
|
|
||||||
noto-fonts-emoji
|
noto-fonts-emoji
|
||||||
noto-fonts-extra
|
npm
|
||||||
nss-mdns
|
nss-mdns
|
||||||
openbsd-netcat
|
ntfs-3g
|
||||||
openvpn
|
ntp
|
||||||
optipng
|
nvme-cli
|
||||||
os-prober
|
openresolv
|
||||||
otf-font-awesome
|
openssh
|
||||||
pacman-contrib
|
pacman-contrib
|
||||||
pamixer
|
pavucontrol
|
||||||
parallel
|
|
||||||
pass
|
|
||||||
perl-image-exiftool
|
perl-image-exiftool
|
||||||
|
php
|
||||||
|
pipewire
|
||||||
pipewire-alsa
|
pipewire-alsa
|
||||||
pipewire-jack
|
pipewire-jack
|
||||||
|
pipewire-libcamera
|
||||||
pipewire-pulse
|
pipewire-pulse
|
||||||
playerctl
|
podman
|
||||||
pnpm
|
powertop
|
||||||
polkit-gnome
|
protonmail-bridge
|
||||||
power-profiles-daemon
|
|
||||||
pyenv
|
pyenv
|
||||||
python-gobject
|
pyright
|
||||||
python-i3ipc
|
python-i3ipc
|
||||||
python-jedi
|
python-jsonschema
|
||||||
python-pip
|
python-opencv
|
||||||
python-pipx
|
python-pipenv
|
||||||
python-pyamdgpuinfo
|
python-psutil
|
||||||
python-pyquery
|
python-pynvim
|
||||||
python-utils
|
python-textual
|
||||||
qalculate-gtk
|
qt5-wayland
|
||||||
qt5-quickcontrols2
|
|
||||||
qt5ct
|
qt5ct
|
||||||
|
qt6-wayland
|
||||||
qt6ct
|
qt6ct
|
||||||
|
radeontop
|
||||||
|
rclone
|
||||||
reflector
|
reflector
|
||||||
|
renderdoc
|
||||||
|
rhash
|
||||||
ripgrep
|
ripgrep
|
||||||
rust
|
rocm-smi-lib
|
||||||
|
rofi
|
||||||
|
rsync
|
||||||
|
ruby
|
||||||
|
rustup
|
||||||
|
samba
|
||||||
sane
|
sane
|
||||||
sane-airscan
|
sane-airscan
|
||||||
sassc
|
sbctl
|
||||||
scrollmpris-git
|
|
||||||
seat
|
|
||||||
seatd
|
|
||||||
seclists
|
|
||||||
slop
|
|
||||||
slurp
|
slurp
|
||||||
snap-pac-grub
|
smartmontools
|
||||||
|
snap-pac
|
||||||
snapper
|
snapper
|
||||||
sof-firmware
|
sof-firmware
|
||||||
|
spirv-headers
|
||||||
|
spotify-launcher
|
||||||
|
sqlitebrowser
|
||||||
starship
|
starship
|
||||||
|
stow
|
||||||
strace
|
strace
|
||||||
|
sudo
|
||||||
|
sway
|
||||||
swaybg
|
swaybg
|
||||||
swayfx
|
|
||||||
swayidle
|
swayidle
|
||||||
swayimg
|
swaylock
|
||||||
swaylock-effects
|
|
||||||
swaync
|
swaync
|
||||||
systemd-resolvconf
|
system-config-printer
|
||||||
tcpdump
|
tcpdump
|
||||||
testdisk
|
tea
|
||||||
texinfo
|
tela-circle-icon-theme-all
|
||||||
|
terminus-font
|
||||||
|
tesseract
|
||||||
|
tesseract-data-eng
|
||||||
|
tesseract-data-fra
|
||||||
|
thunar
|
||||||
|
thunar-archive-plugin
|
||||||
|
thunar-volman
|
||||||
|
thunderbird
|
||||||
|
thunderbird-i18n-fr
|
||||||
tlp
|
tlp
|
||||||
|
tlp-pd
|
||||||
|
tlp-rdw
|
||||||
|
tmux
|
||||||
|
traceroute
|
||||||
|
transmission-cli
|
||||||
|
transmission-gtk
|
||||||
tree
|
tree
|
||||||
ttf-bitstream-vera
|
tree-sitter-cli
|
||||||
ttf-dejavu
|
ttf-dejavu
|
||||||
ttf-droid
|
|
||||||
ttf-fantasque-nerd
|
|
||||||
ttf-fira-code
|
ttf-fira-code
|
||||||
ttf-fira-sans
|
|
||||||
ttf-firacode-nerd
|
|
||||||
ttf-jetbrains-mono
|
ttf-jetbrains-mono
|
||||||
ttf-liberation
|
ttf-jetbrains-mono-nerd
|
||||||
ttf-nerd-fonts-symbols-mono
|
tumbler
|
||||||
ttf-noto-nerd
|
typst
|
||||||
ttf-victor-mono
|
|
||||||
umockdev
|
|
||||||
unrar
|
unrar
|
||||||
unzip
|
unzip
|
||||||
|
usbmuxd
|
||||||
usbutils
|
usbutils
|
||||||
vde2
|
uwsm
|
||||||
w3m
|
valgrind
|
||||||
|
vcpkg
|
||||||
|
vlc
|
||||||
|
volk
|
||||||
|
vulkan-headers
|
||||||
|
vulkan-radeon
|
||||||
|
vulkan-tools
|
||||||
|
vulkan-utility-libraries
|
||||||
|
vulkan-validation-layers
|
||||||
|
waybar
|
||||||
|
wayland-utils
|
||||||
|
webp-pixbuf-loader
|
||||||
|
wev
|
||||||
wget
|
wget
|
||||||
|
whois
|
||||||
wireguard-tools
|
wireguard-tools
|
||||||
wl-clip-persist
|
wireplumber
|
||||||
|
wl-clipboard
|
||||||
|
wlopm
|
||||||
|
wlr-randr
|
||||||
wlsunset
|
wlsunset
|
||||||
wofi
|
wofi
|
||||||
wttrbar
|
wpa_supplicant
|
||||||
xclip
|
xdg-desktop-portal
|
||||||
xdg-desktop-portal-gtk
|
|
||||||
xdg-desktop-portal-wlr
|
xdg-desktop-portal-wlr
|
||||||
xdg-user-dirs
|
xf86-video-amdgpu
|
||||||
xf86-video-nouveau
|
xorg-xrdb
|
||||||
xmlstarlet
|
|
||||||
xorg-xwayland
|
xorg-xwayland
|
||||||
xournalpp
|
|
||||||
yarn
|
|
||||||
yazi
|
yazi
|
||||||
zip
|
yt-dlp
|
||||||
zoxide
|
zoxide
|
||||||
zram-generator
|
zram-generator
|
||||||
zsh
|
zsh
|
||||||
zsh-autocomplete
|
|
||||||
zsh-autosuggestions
|
|
||||||
zsh-completions
|
zsh-completions
|
||||||
zsh-history-substring-search
|
|
||||||
zsh-syntax-highlighting
|
|
||||||
|
|
|
||||||
27
.gitignore
vendored
27
.gitignore
vendored
|
|
@ -1,2 +1,29 @@
|
||||||
atuin/.local/share/
|
atuin/.local/share/
|
||||||
hyprwhspr/.local/share/
|
hyprwhspr/.local/share/
|
||||||
|
|
||||||
|
# Generated language/package-manager data
|
||||||
|
**/__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
**/node_modules/
|
||||||
|
|
||||||
|
# Local editor/application backups
|
||||||
|
*.bak
|
||||||
|
*.old
|
||||||
|
|
||||||
|
# Hyprwhspr runtime endpoints are recreated below XDG_RUNTIME_DIR.
|
||||||
|
hyprwhspr/.config/hyprwhspr/audio_level
|
||||||
|
hyprwhspr/.config/hyprwhspr/recording_control
|
||||||
|
hyprwhspr/.config/hyprwhspr/recording_status
|
||||||
|
|
||||||
|
# Machine-local or project-owned launchers exposed through ~/.local/bin.
|
||||||
|
bin/.local/bin/agy
|
||||||
|
bin/.local/bin/android
|
||||||
|
bin/.local/bin/arch-sentinel
|
||||||
|
bin/.local/bin/codex
|
||||||
|
bin/.local/bin/goose
|
||||||
|
bin/.local/bin/labfy-remote-ui
|
||||||
|
bin/.local/bin/trainlog
|
||||||
|
bin/.local/bin/trainlog-bt-watch
|
||||||
|
bin/.local/bin/trainlog-btd
|
||||||
|
bin/.local/bin/trainlog-sync-once
|
||||||
|
bin/.local/bin/trainlog-syncd
|
||||||
|
|
|
||||||
12
.gitmodules
vendored
Normal file
12
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
[submodule "zsh/.zsh/plugins/fast-syntax-highlighting"]
|
||||||
|
path = zsh/.zsh/plugins/fast-syntax-highlighting
|
||||||
|
url = https://github.com/zdharma-continuum/fast-syntax-highlighting.git
|
||||||
|
[submodule "zsh/.zsh/plugins/fzf-tab"]
|
||||||
|
path = zsh/.zsh/plugins/fzf-tab
|
||||||
|
url = https://github.com/Aloxaf/fzf-tab.git
|
||||||
|
[submodule "zsh/.zsh/plugins/zsh-autosuggestions"]
|
||||||
|
path = zsh/.zsh/plugins/zsh-autosuggestions
|
||||||
|
url = https://github.com/zsh-users/zsh-autosuggestions.git
|
||||||
|
[submodule "tmux/.config/tmux/plugins/catppuccin/tmux"]
|
||||||
|
path = tmux/.config/tmux/plugins/catppuccin/tmux
|
||||||
|
url = https://github.com/catppuccin/tmux.git
|
||||||
352
README.md
352
README.md
|
|
@ -1,161 +1,291 @@
|
||||||
# Dotfiles ArchASP
|
<p align="center">
|
||||||
|
<img src=".assets/screen.jpg" alt="ArchASP — Sway desktop" width="100%">
|
||||||
|
</p>
|
||||||
|
|
||||||
Configurations utilisateur de mon poste principal sous **Arch Linux**, avec un environnement **Wayland / Sway**.
|
<h1 align="center">ArchASP Dotfiles</h1>
|
||||||
|
|
||||||
Ce dépôt contient uniquement les fichiers liés à ma session utilisateur.
|
<p align="center">
|
||||||
Les configurations système, les paquets, Btrfs, Snapper, Limine, TLP, nftables et les outils nécessitant les droits root sont gérés séparément dans le dépôt [`arch-system`](https://git.labfytools.com/fy59/arch-system).
|
Configuration utilisateur reproductible pour une station Arch Linux sous
|
||||||
|
Wayland, déployée package par package avec GNU Stow.
|
||||||
|
</p>
|
||||||
|
|
||||||
## Environnement
|
<p align="center">
|
||||||
|
<code>Arch Linux</code> · <code>Sway</code> · <code>GNU Stow</code> ·
|
||||||
|
<code>systemd --user</code> · <code>Zsh</code>
|
||||||
|
</p>
|
||||||
|
|
||||||
- Arch Linux
|
<p align="center">
|
||||||
- Sway
|
<a href="#overview">Overview</a> ·
|
||||||
- Wayland
|
<a href="#desktop-stack">Desktop</a> ·
|
||||||
- Kitty
|
<a href="#shell-stack">Shell</a> ·
|
||||||
- Zsh
|
<a href="#repository-layout">Layout</a> ·
|
||||||
- Neovim
|
<a href="#deployment">Deployment</a> ·
|
||||||
- PipeWire / WirePlumber
|
<a href="#rebuilding-archasp">Rebuild</a>
|
||||||
- systemd utilisateur
|
</p>
|
||||||
- GNU Stow pour le déploiement des fichiers
|
|
||||||
|
|
||||||
## Contenu
|
<a id="overview"></a>
|
||||||
|
|
||||||
Le dépôt regroupe notamment :
|
## ✦ Overview
|
||||||
|
|
||||||
|
Ce dépôt contient la couche **utilisateur** d'ArchASP : session graphique,
|
||||||
|
applications terminal, shell, scripts personnels et unités systemd user. La
|
||||||
|
couche **système/root** est volontairement séparée.
|
||||||
|
|
||||||
|
| Dépôt | Responsabilité |
|
||||||
|
| --- | --- |
|
||||||
|
| **`.dotfiles`** | Sway, Kitty, Neovim, Zsh, scripts, thèmes et services utilisateur |
|
||||||
|
| **[`arch-system`](https://git.labfytools.com/fy59/arch-system)** | Installation Arch, boot, stockage, réseau, paquets, `/etc` et helpers root |
|
||||||
|
|
||||||
|
Cette séparation évite de mêler état personnel et administration système. Le
|
||||||
|
dépôt reste néanmoins spécifique à la machine : sorties Sway, périphériques,
|
||||||
|
chemins sous `/home/fy59` et projets externes doivent être relus avant un
|
||||||
|
déploiement ailleurs.
|
||||||
|
|
||||||
|
<a id="desktop-stack"></a>
|
||||||
|
|
||||||
|
## ✦ Desktop Stack
|
||||||
|
|
||||||
```text
|
```text
|
||||||
.config/
|
greetd
|
||||||
├── kitty/
|
└─ tuigreet
|
||||||
├── nvim/
|
└─ UWSM
|
||||||
├── sway/
|
└─ Sway
|
||||||
├── systemd/user/
|
├─ Swaybar ── i3status-rs
|
||||||
└── ...
|
├─ Mako notifications
|
||||||
|
├─ Wofi launcher
|
||||||
.local/
|
├─ Swaylock verrouillage
|
||||||
├── bin/
|
├─ Cliphist historique du presse-papiers
|
||||||
└── share/
|
└─ Kitty terminal
|
||||||
|
|
||||||
.zshrc
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Scripts utilisateur
|
| Fonction | Composant canonique |
|
||||||
|
| --- | --- |
|
||||||
|
| Session | `greetd → tuigreet → uwsm start default → sway.desktop` |
|
||||||
|
| Compositor | Sway / SwayFX |
|
||||||
|
| Barre | Swaybar avec i3status-rs |
|
||||||
|
| Notifications | Mako |
|
||||||
|
| Launcher | Wofi |
|
||||||
|
| Verrouillage et idle | Swaylock + swayidle |
|
||||||
|
| Presse-papiers | wl-clipboard + Cliphist |
|
||||||
|
| Terminal | Kitty |
|
||||||
|
| Profils d'énergie | TLP via l'interface utilisateur `tlpctl` |
|
||||||
|
|
||||||
Le dossier `~/.local/bin` contient plusieurs outils personnels, notamment :
|
`uwsm/.config/uwsm/default-id` sélectionne `sway.desktop`. La copie de
|
||||||
|
référence de greetd se trouve dans `.assets/greetd/config.toml`; son
|
||||||
|
installation sous `/etc/greetd` appartient à `arch-system`.
|
||||||
|
|
||||||
- gestion temporaire du seuil de charge de la batterie ;
|
<a id="shell-stack"></a>
|
||||||
- synchronisation Nextcloud à la demande ;
|
|
||||||
- lancement conjoint de Thunderbird et Proton Mail Bridge ;
|
|
||||||
- démarrage et arrêt à la demande de VMware et Samba ;
|
|
||||||
- notifications de batterie faible ;
|
|
||||||
- outils de maintenance Arch et AUR ;
|
|
||||||
- scripts liés à Sway, au presse-papiers et à la session Wayland.
|
|
||||||
|
|
||||||
### Services systemd utilisateur
|
## ✦ Shell Stack
|
||||||
|
|
||||||
Les unités présentes dans `.config/systemd/user/` permettent notamment de gérer :
|
```text
|
||||||
|
Zsh
|
||||||
|
├─ Starship
|
||||||
|
├─ Atuin
|
||||||
|
├─ FZF
|
||||||
|
├─ Zoxide
|
||||||
|
├─ Eza
|
||||||
|
├─ Bat
|
||||||
|
└─ Yazi
|
||||||
|
```
|
||||||
|
|
||||||
- les notifications de batterie ;
|
`.zprofile` démarre la session graphique via UWSM lorsque celui-ci autorise un
|
||||||
- Cliphist ;
|
démarrage. `.zshenv` publie le socket de l'agent SSH utilisateur. L'historique,
|
||||||
- GNOME Keyring ;
|
les bases et la clé Atuin restent strictement locaux et hors Git.
|
||||||
- l’agent SSH ;
|
|
||||||
- Swayidle ;
|
|
||||||
- Wlsunset ;
|
|
||||||
- Proton Mail Bridge ;
|
|
||||||
- différents services propres à la session graphique.
|
|
||||||
|
|
||||||
Les services lourds ou occasionnels ne sont pas démarrés en permanence.
|
<a id="repository-layout"></a>
|
||||||
|
|
||||||
## Installation
|
## ✦ Repository Layout
|
||||||
|
|
||||||
Cloner le dépôt dans le dossier personnel :
|
Chaque répertoire de premier niveau, hors `.assets` et `.git`, est un package
|
||||||
|
GNU Stow indépendant. Son arborescence reproduit le chemin attendu depuis
|
||||||
|
`$HOME`.
|
||||||
|
|
||||||
|
```text
|
||||||
|
.dotfiles/
|
||||||
|
├── sway/.config/sway/ → ~/.config/sway/
|
||||||
|
├── i3status-rust/.config/ → ~/.config/i3status-rust/
|
||||||
|
├── kitty/.config/kitty/ → ~/.config/kitty/
|
||||||
|
├── nvim/.config/nvim/ → ~/.config/nvim/
|
||||||
|
├── systemd/.config/systemd/user/ → ~/.config/systemd/user/
|
||||||
|
├── bin/.local/bin/ → ~/.local/bin/
|
||||||
|
├── zsh/.zshrc → ~/.zshrc
|
||||||
|
├── zsh/.zprofile → ~/.zprofile
|
||||||
|
└── .assets/ inventaires et références, non déployés
|
||||||
|
```
|
||||||
|
|
||||||
|
### Packages principaux
|
||||||
|
|
||||||
|
| Groupe | Packages Stow |
|
||||||
|
| --- | --- |
|
||||||
|
| Desktop | `sway`, `swaylock`, `mako`, `wofi`, `cliphist`, `i3status-rust` |
|
||||||
|
| Terminal et shell | `kitty`, `zsh`, `starship`, `atuin`, `fzf`, `eza`, `bat`, `yazi` |
|
||||||
|
| Développement | `nvim`, `tmux`, `opencode`, `bin` |
|
||||||
|
| Services | `systemd`, `uwsm` |
|
||||||
|
| Apparence | `gtk-3.0`, `gtklock`, `qt5ct`, `qt6ct`, `themes`, `icons`, `wallpapers` |
|
||||||
|
| Outils | `btop`, `fastfetch`, `hyprwhspr`, `ytmusic-tui` |
|
||||||
|
|
||||||
|
Les thèmes, icônes et wallpapers sont volontairement versionnés. Les
|
||||||
|
exécutables issus de projets externes restent hors Git même lorsqu'un script
|
||||||
|
ou une unité user les utilise.
|
||||||
|
|
||||||
|
### Sous-modules
|
||||||
|
|
||||||
|
Les plugins Zsh et Tmux sont épinglés par Git :
|
||||||
|
|
||||||
|
| Intégration | Chemin |
|
||||||
|
| --- | --- |
|
||||||
|
| Fast Syntax Highlighting | `zsh/.zsh/plugins/fast-syntax-highlighting` |
|
||||||
|
| FZF Tab | `zsh/.zsh/plugins/fzf-tab` |
|
||||||
|
| Zsh Autosuggestions | `zsh/.zsh/plugins/zsh-autosuggestions` |
|
||||||
|
| Catppuccin Tmux | `tmux/.config/tmux/plugins/catppuccin/tmux` |
|
||||||
|
|
||||||
|
<a id="deployment"></a>
|
||||||
|
|
||||||
|
## ✦ Deployment
|
||||||
|
|
||||||
|
### Prérequis
|
||||||
|
|
||||||
|
- Git ;
|
||||||
|
- GNU Stow ;
|
||||||
|
- les paquets décrits dans `.assets` ;
|
||||||
|
- une sauvegarde des fichiers existants qui pourraient entrer en conflit.
|
||||||
|
|
||||||
|
### Clone
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone \
|
git clone --recurse-submodules \
|
||||||
https://git.labfytools.com/fy59/Dotfiles_ArchAP.git \
|
ssh://git@git.labfytools.com:2223/fy59/Dotfiles_ArchAP.git \
|
||||||
"$HOME/Dotfiles_ArchAP"
|
"$HOME/.dotfiles"
|
||||||
|
|
||||||
cd "$HOME/Dotfiles_ArchAP"
|
cd "$HOME/.dotfiles"
|
||||||
|
git submodule update --init --recursive
|
||||||
```
|
```
|
||||||
|
|
||||||
Avant tout déploiement, vérifier les liens qui seraient créés :
|
### Dry-run Stow
|
||||||
|
|
||||||
|
Construire la liste des packages à partir des répertoires de premier niveau :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
stow --no --verbose --target="$HOME" .
|
mapfile -t packages < <(
|
||||||
|
find . -mindepth 1 -maxdepth 1 -type d \
|
||||||
|
! -name .git ! -name .assets -printf '%f\n' | sort
|
||||||
|
)
|
||||||
|
|
||||||
|
stow --no --verbose=2 --target="$HOME" "${packages[@]}"
|
||||||
```
|
```
|
||||||
|
|
||||||
Puis appliquer les dotfiles :
|
Examiner tout conflit avant le déploiement réel :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
stow --verbose --target="$HOME" .
|
stow --verbose=2 --target="$HOME" "${packages[@]}"
|
||||||
```
|
```
|
||||||
|
|
||||||
En cas de conflit avec des fichiers existants, les sauvegarder ou les comparer avant de les remplacer.
|
> Stow reçoit les **noms des packages**. La racine du dépôt n'est pas un
|
||||||
|
> package : ne pas utiliser `stow .`.
|
||||||
|
|
||||||
## Recharger la configuration
|
<a id="package-inventory"></a>
|
||||||
|
|
||||||
Après une modification des unités systemd utilisateur :
|
## ✦ Package Inventory
|
||||||
|
|
||||||
|
| Fichier | Source | Contenu |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `.assets/pkglist-pacman.txt` | `pacman -Qqen` | Paquets officiels explicitement installés |
|
||||||
|
| `.assets/pkglist-aur.txt` | `pacman -Qqem` | Paquets foreign/AUR explicitement installés |
|
||||||
|
| `.assets/enabled-services.txt` | systemd système | Services système activés |
|
||||||
|
| `.assets/enabled-system-aux-units.txt` | systemd système | Timers, sockets et paths activés |
|
||||||
|
| `.assets/enabled-user-aux-units.txt` | systemd user | Timers, sockets et paths utilisateur activés |
|
||||||
|
| `.assets/external-tools.md` | inventaire manuel | Cargo, npm, builds locaux, projets et helpers `/usr/local` |
|
||||||
|
|
||||||
|
Ces fichiers sont des instantanés vérifiables, pas un installateur. Les paquets
|
||||||
|
AUR, outils Cargo/npm et builds locaux doivent être restaurés séparément.
|
||||||
|
|
||||||
|
<a id="services"></a>
|
||||||
|
|
||||||
|
## ✦ Services
|
||||||
|
|
||||||
|
Le package `systemd` contient les unités utilisateur ainsi que leurs liens
|
||||||
|
d'activation relatifs. Il couvre notamment Cliphist, swayidle, GNOME Keyring,
|
||||||
|
l'agent SSH, les notifications de batterie et les intégrations Trainlog,
|
||||||
|
Lardon et Arch Sentinel.
|
||||||
|
|
||||||
|
Après une modification :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
systemctl --user daemon-reload
|
systemctl --user daemon-reload
|
||||||
|
systemd-analyze --user verify ~/.config/systemd/user/*.service
|
||||||
```
|
```
|
||||||
|
|
||||||
Pour réactiver les unités voulues :
|
Certaines unités lancent du code externe au dépôt. Leurs chemins et
|
||||||
|
dépendances sont documentés dans `.assets/external-tools.md`. Les services
|
||||||
|
système et toute modification de `/etc` restent sous la responsabilité
|
||||||
|
d'`arch-system`.
|
||||||
|
|
||||||
```bash
|
<a id="secrets"></a>
|
||||||
systemctl --user enable --now NOM.service
|
|
||||||
systemctl --user enable --now NOM.timer
|
## ✦ Secrets
|
||||||
|
|
||||||
|
Ce dépôt n'a pas vocation à contenir :
|
||||||
|
|
||||||
|
- clés SSH, GPG, WireGuard ou Atuin ;
|
||||||
|
- `.netrc`, mots de passe, tokens, cookies ou credentials ;
|
||||||
|
- configurations privées Rclone, GitHub CLI ou Nextcloud ;
|
||||||
|
- bases de données, historiques shell ou états applicatifs personnels.
|
||||||
|
|
||||||
|
Les ignorer dans le HEAD ne suffit pas : un secret déjà commité doit être
|
||||||
|
renouvelé, puis supprimé de tout l'historique avant publication.
|
||||||
|
|
||||||
|
<a id="rebuilding-archasp"></a>
|
||||||
|
|
||||||
|
## ✦ Rebuilding ArchASP
|
||||||
|
|
||||||
|
```text
|
||||||
|
┌──────────────────────────────────────────────────────┐
|
||||||
|
│ arch-system │
|
||||||
|
│ Arch · boot · stockage · réseau · paquets · /etc │
|
||||||
|
└──────────────────────────┬───────────────────────────┘
|
||||||
|
│ socle système prêt
|
||||||
|
▼
|
||||||
|
┌──────────────────────────────────────────────────────┐
|
||||||
|
│ .dotfiles │
|
||||||
|
│ Stow · session · shell · scripts · systemd user │
|
||||||
|
└──────────────────────────┬───────────────────────────┘
|
||||||
|
│ restaurations externes
|
||||||
|
▼
|
||||||
|
┌──────────────────────────────────────────────────────┐
|
||||||
|
│ AUR · Cargo/npm · projets locaux · secrets · données│
|
||||||
|
└──────────────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
Pour recharger Sway :
|
Ordre de reconstruction recommandé :
|
||||||
|
|
||||||
```bash
|
1. restaurer la couche système avec `arch-system` ;
|
||||||
swaymsg reload
|
2. installer Git et GNU Stow ;
|
||||||
```
|
3. cloner ce dépôt avec ses sous-modules ;
|
||||||
|
4. restaurer les paquets officiels puis examiner les paquets AUR ;
|
||||||
|
5. effectuer le dry-run et déployer les packages Stow ;
|
||||||
|
6. restaurer les outils Cargo/npm et les projets locaux nécessaires ;
|
||||||
|
7. restaurer les secrets et données applicatives depuis une sauvegarde sûre ;
|
||||||
|
8. valider puis activer les unités systemd voulues.
|
||||||
|
|
||||||
## Mise à jour du dépôt
|
Le dépôt ne reconstruit pas seul les projets sous `Documents`, OpenMVS local,
|
||||||
|
les helpers `/usr/local`, les secrets, les bases applicatives ou les réglages
|
||||||
|
matériels propres à la machine.
|
||||||
|
|
||||||
Depuis le dépôt :
|
<a id="repository-mirrors"></a>
|
||||||
|
|
||||||
```bash
|
## ✦ Repository Mirrors
|
||||||
git status
|
|
||||||
git add -A
|
|
||||||
git commit -m "chore: update user configuration"
|
|
||||||
git push
|
|
||||||
```
|
|
||||||
|
|
||||||
Les données sensibles ne doivent jamais être ajoutées au dépôt.
|
| Rôle | Hébergement | URL |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Upstream principal | Forgejo | `ssh://git@git.labfytools.com:2223/fy59/Dotfiles_ArchAP.git` |
|
||||||
|
| Miroir public | GitHub | `https://github.com/labfytools/Dotfiles_ArchAP` |
|
||||||
|
|
||||||
Sont notamment exclus :
|
Le fetch d'`origin` reste attaché à Forgejo. Ses URLs de push publient vers
|
||||||
|
Forgejo et GitHub afin qu'un `git push origin main` maintienne les deux copies.
|
||||||
|
|
||||||
- clés SSH ;
|
<a id="license"></a>
|
||||||
- mots de passe ;
|
|
||||||
- jetons d’accès ;
|
|
||||||
- fichiers `.netrc` ;
|
|
||||||
- mots de passe d’application ;
|
|
||||||
- clés WireGuard ;
|
|
||||||
- bases de données personnelles ;
|
|
||||||
- fichiers contenant des informations privées.
|
|
||||||
|
|
||||||
## Séparation avec `arch-system`
|
## ✦ License
|
||||||
|
|
||||||
| Dépôt | Responsabilité |
|
Aucune licence n'est actuellement déclarée pour ce dépôt.
|
||||||
|---|---|
|
|
||||||
| [`Dotfiles_ArchAP`](https://git.labfytools.com/fy59/Dotfiles_ArchAP) | Configuration utilisateur, Sway, Neovim, Kitty, Zsh, scripts et unités systemd utilisateur |
|
|
||||||
| [`arch-system`](https://git.labfytools.com/fy59/arch-system) | Paquets, configuration système, Btrfs, Snapper, Limine, TLP, nftables, sudoers et helpers root |
|
|
||||||
|
|
||||||
Cette séparation évite de mélanger les fichiers personnels avec les éléments propres à l’installation du système.
|
|
||||||
|
|
||||||
## Avertissement
|
|
||||||
|
|
||||||
Ces fichiers correspondent à mon matériel, mon utilisateur et mon organisation personnelle.
|
|
||||||
|
|
||||||
Ils peuvent servir de référence, mais ne doivent pas être déployés tels quels sur une autre machine sans vérifier :
|
|
||||||
|
|
||||||
- les chemins ;
|
|
||||||
- le nom d’utilisateur ;
|
|
||||||
- les écrans et périphériques ;
|
|
||||||
- les commandes disponibles ;
|
|
||||||
- les unités systemd ;
|
|
||||||
- les dépendances installées.
|
|
||||||
|
|
||||||
## Licence
|
|
||||||
|
|
||||||
Configuration personnelle fournie sans garantie.
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
|
|
||||||
## which search mode to use
|
## which search mode to use
|
||||||
## possible values: prefix, fulltext, fuzzy, skim
|
## possible values: prefix, fulltext, fuzzy, skim
|
||||||
# search_mode = "fuzzy"
|
search_mode = "prefix"
|
||||||
|
|
||||||
## which filter mode to use by default
|
## which filter mode to use by default
|
||||||
## possible values: "global", "host", "session", "session-preload", "directory", "workspace"
|
## possible values: "global", "host", "session", "session-preload", "directory", "workspace"
|
||||||
|
|
@ -67,7 +67,7 @@ filter_mode = "global"
|
||||||
## which search mode to use when atuin is invoked from a shell up-key binding
|
## which search mode to use when atuin is invoked from a shell up-key binding
|
||||||
## the accepted values are identical to those of "search_mode"
|
## the accepted values are identical to those of "search_mode"
|
||||||
## leave unspecified to use same mode set in "search_mode"
|
## leave unspecified to use same mode set in "search_mode"
|
||||||
# search_mode_shell_up_key_binding = "fuzzy"
|
search_mode_shell_up_key_binding = "prefix"
|
||||||
|
|
||||||
## which style to use
|
## which style to use
|
||||||
## possible values: auto, full, compact
|
## possible values: auto, full, compact
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
sleep 3
|
|
||||||
mmsg -g -c | sed 's/^/title|appid: /'
|
|
||||||
10
bin/.local/bin/colmap-amd
Executable file
10
bin/.local/bin/colmap-amd
Executable file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Évite un rendu logiciel Mesa accidentel.
|
||||||
|
unset LIBGL_ALWAYS_SOFTWARE
|
||||||
|
unset MESA_LOADER_DRIVER_OVERRIDE
|
||||||
|
|
||||||
|
# Utilise Xwayland/GLX pour le contexte OpenGL de SIFTGPU.
|
||||||
|
export QT_QPA_PLATFORM=xcb
|
||||||
|
|
||||||
|
exec colmap "$@"
|
||||||
33
bin/.local/bin/firefox-scribd
Executable file
33
bin/.local/bin/firefox-scribd
Executable file
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
readonly PROFILE="$HOME/.mozilla/firefox-scribd"
|
||||||
|
readonly URL="${1:-https://fr.scribd.com/}"
|
||||||
|
|
||||||
|
case "$URL" in
|
||||||
|
http://scribd.com/*|https://scribd.com/*|\
|
||||||
|
http://*.scribd.com/*|https://*.scribd.com/*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
notify-send \
|
||||||
|
"Firefox Scribd" \
|
||||||
|
"URL refusée : ce lanceur accepte uniquement scribd.com"
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
mkdir -p "$PROFILE"
|
||||||
|
|
||||||
|
exec systemd-run \
|
||||||
|
--user \
|
||||||
|
--scope \
|
||||||
|
--quiet \
|
||||||
|
--unit="firefox-scribd-$(date +%s)-$$" \
|
||||||
|
--slice=app-graphical.slice \
|
||||||
|
--property=MemoryMax=8G \
|
||||||
|
--property=MemorySwapMax=0 \
|
||||||
|
/usr/bin/firefox \
|
||||||
|
--no-remote \
|
||||||
|
--profile "$PROFILE" \
|
||||||
|
--new-window "$URL"
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
/home/fy59/.local/src/llama.cpp/build/bin/llama-cli
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
/home/fy59/.local/src/llama.cpp/build/bin/llama-server
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
grim -g "$(slurp)" - | wl-copy -t image/png
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
systemctl --user start graphical-session.target || true
|
|
||||||
exec mango
|
|
||||||
108
bin/.local/bin/opencode-away
Executable file
108
bin/.local/bin/opencode-away
Executable file
|
|
@ -0,0 +1,108 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -u
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf '%s\n' 'usage: opencode-away [--check] [opencode arguments...]'
|
||||||
|
}
|
||||||
|
|
||||||
|
require_command() {
|
||||||
|
command -v "$1" >/dev/null 2>&1 || {
|
||||||
|
printf 'opencode-away: required command not found: %s\n' "$1" >&2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ ${1-} == --help ]]; then
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_only=0
|
||||||
|
if [[ ${1-} == --check ]]; then
|
||||||
|
check_only=1
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
require_command opencode || exit 127
|
||||||
|
require_command systemd-inhibit || exit 127
|
||||||
|
require_command git || exit 127
|
||||||
|
require_command ps || exit 127
|
||||||
|
require_command kill || exit 127
|
||||||
|
|
||||||
|
if [[ $(systemd-inhibit --help 2>&1) != *handle-lid-switch* ]]; then
|
||||||
|
printf '%s\n' 'opencode-away: systemd-inhibit lacks handle-lid-switch' >&2
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git rev-parse --show-toplevel >/dev/null 2>&1; then
|
||||||
|
printf '%s\n' 'opencode-away: run this command inside a Git worktree' >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ((check_only)); then
|
||||||
|
printf '%s\n' 'OpenCode away mode check: OK'
|
||||||
|
printf 'repository: %s\n' "$(git rev-parse --show-toplevel)"
|
||||||
|
printf 'opencode: %s\n' "$(command -v opencode)"
|
||||||
|
printf 'systemd-inhibit: %s\n' "$(command -v systemd-inhibit)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -a suspended_pids=()
|
||||||
|
cleanup_done=0
|
||||||
|
|
||||||
|
restore_swayidle() {
|
||||||
|
local pid
|
||||||
|
((cleanup_done)) && return 0
|
||||||
|
cleanup_done=1
|
||||||
|
for pid in "${suspended_pids[@]}"; do
|
||||||
|
if kill -0 "$pid" 2>/dev/null &&
|
||||||
|
[[ $(ps -o comm= -p "$pid" 2>/dev/null) == swayidle ]]; then
|
||||||
|
kill -CONT "$pid" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if ((${#suspended_pids[@]})); then
|
||||||
|
printf '%s\n' 'swayidle restored'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
trap restore_swayidle EXIT
|
||||||
|
|
||||||
|
while read -r pid state; do
|
||||||
|
[[ $pid =~ ^[0-9]+$ ]] || continue
|
||||||
|
[[ $state == T* ]] && continue
|
||||||
|
if kill -STOP "$pid" 2>/dev/null; then
|
||||||
|
suspended_pids+=("$pid")
|
||||||
|
fi
|
||||||
|
done < <(ps -C swayidle -o pid=,stat= 2>/dev/null)
|
||||||
|
|
||||||
|
printf '%s\n' 'OpenCode away mode'
|
||||||
|
printf '%s\n' 'sleep inhibited'
|
||||||
|
printf '%s\n' 'lid switch inhibited'
|
||||||
|
if ((${#suspended_pids[@]})); then
|
||||||
|
printf 'swayidle suspended:'
|
||||||
|
printf ' %s' "${suspended_pids[@]}"
|
||||||
|
printf '\n'
|
||||||
|
else
|
||||||
|
printf '%s\n' 'swayidle suspended: none active'
|
||||||
|
fi
|
||||||
|
|
||||||
|
export LARDON_OPENCODE_LONG_RUN=1
|
||||||
|
|
||||||
|
if [[ -n ${OPENCODE_AWAY_COMMAND-} ]]; then
|
||||||
|
child_command=(bash -c "$OPENCODE_AWAY_COMMAND")
|
||||||
|
else
|
||||||
|
child_command=(opencode --auto "$@")
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemd-inhibit \
|
||||||
|
--what=sleep:idle:handle-lid-switch \
|
||||||
|
--who='OpenCode Long Run' \
|
||||||
|
--why='Autonomous Lardon3D development ticket' \
|
||||||
|
--mode=block \
|
||||||
|
"${child_command[@]}"
|
||||||
|
|
||||||
|
child_status=$?
|
||||||
|
|
||||||
|
restore_swayidle
|
||||||
|
|
||||||
|
exit "$child_status"
|
||||||
91
bin/.local/bin/pi-dev
Executable file
91
bin/.local/bin/pi-dev
Executable file
|
|
@ -0,0 +1,91 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
SWAYIDLE_MODE="none"
|
||||||
|
declare -a SWAYIDLE_CMD=()
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
rc=$?
|
||||||
|
|
||||||
|
trap - EXIT INT TERM HUP
|
||||||
|
|
||||||
|
printf '\n[pi-dev] Arrêt de la session...\n'
|
||||||
|
|
||||||
|
# Restaurer swayidle exactement selon son mode d'origine.
|
||||||
|
case "$SWAYIDLE_MODE" in
|
||||||
|
systemd)
|
||||||
|
printf '[pi-dev] Redémarrage de swayidle.service...\n'
|
||||||
|
systemctl --user start swayidle.service || true
|
||||||
|
;;
|
||||||
|
|
||||||
|
process)
|
||||||
|
if ((${#SWAYIDLE_CMD[@]})); then
|
||||||
|
printf '[pi-dev] Redémarrage de swayidle...\n'
|
||||||
|
nohup "${SWAYIDLE_CMD[@]}" \
|
||||||
|
>/dev/null 2>&1 &
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
printf '[pi-dev] Session restaurée.\n'
|
||||||
|
|
||||||
|
exit "$rc"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup EXIT INT TERM HUP
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# 1. Neutraliser swayidle
|
||||||
|
#
|
||||||
|
|
||||||
|
if systemctl --user is-active --quiet swayidle.service 2>/dev/null; then
|
||||||
|
|
||||||
|
SWAYIDLE_MODE="systemd"
|
||||||
|
|
||||||
|
printf '[pi-dev] Neutralisation de swayidle.service...\n'
|
||||||
|
systemctl --user stop swayidle.service
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
SWAYIDLE_PID="$(pgrep -xo swayidle || true)"
|
||||||
|
|
||||||
|
if [[ -n "$SWAYIDLE_PID" ]]; then
|
||||||
|
|
||||||
|
SWAYIDLE_MODE="process"
|
||||||
|
|
||||||
|
# Sauvegarder exactement argv avant d'arrêter swayidle.
|
||||||
|
mapfile -d '' SWAYIDLE_CMD \
|
||||||
|
< "/proc/$SWAYIDLE_PID/cmdline"
|
||||||
|
|
||||||
|
printf '[pi-dev] Neutralisation de swayidle (PID %s)...\n' \
|
||||||
|
"$SWAYIDLE_PID"
|
||||||
|
|
||||||
|
kill "$SWAYIDLE_PID"
|
||||||
|
|
||||||
|
# Attendre sa disparition.
|
||||||
|
for _ in {1..20}; do
|
||||||
|
kill -0 "$SWAYIDLE_PID" 2>/dev/null || break
|
||||||
|
sleep 0.05
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# 2. Lancer Pi avec inhibition de la fermeture du capot
|
||||||
|
#
|
||||||
|
# L'inhibitor existe uniquement pendant que Pi tourne.
|
||||||
|
#
|
||||||
|
|
||||||
|
printf '[pi-dev] swayidle neutralisé.\n'
|
||||||
|
printf '[pi-dev] Veille fermeture du capot neutralisée.\n'
|
||||||
|
printf '[pi-dev] Lancement de Pi / OpenRouter.\n\n'
|
||||||
|
|
||||||
|
systemd-inhibit \
|
||||||
|
--what=handle-lid-switch \
|
||||||
|
--who="pi-dev" \
|
||||||
|
--why="Session de développement Pi / Lardon3D" \
|
||||||
|
--mode=block \
|
||||||
|
pi "$@"
|
||||||
697
bin/.local/bin/scan3d
Executable file
697
bin/.local/bin/scan3d
Executable file
|
|
@ -0,0 +1,697 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
# scan3d
|
||||||
|
# Pipeline interactif :
|
||||||
|
# photos -> pré-tri -> COLMAP -> OpenMVS -> maillage texturé
|
||||||
|
#
|
||||||
|
# Les photos originales ne sont jamais déplacées ni supprimées.
|
||||||
|
# Le script s'arrête avant l'ouverture de MeshLab.
|
||||||
|
|
||||||
|
OPENMVS_BIN="${OPENMVS_BIN:-$HOME/Applications/openmvs-2.4.0/openmvs}"
|
||||||
|
OPENMVS_IMAGE="${OPENMVS_IMAGE:-localhost/openmvs:2.4.0}"
|
||||||
|
|
||||||
|
THREADS="${SCAN3D_THREADS:-4}"
|
||||||
|
SEQUENTIAL_OVERLAP="${SCAN3D_OVERLAP:-20}"
|
||||||
|
RESOLUTION_LEVEL="${SCAN3D_RESOLUTION_LEVEL:-3}"
|
||||||
|
NUMBER_VIEWS="${SCAN3D_NUMBER_VIEWS:-4}"
|
||||||
|
MIN_FREE_GIB="${SCAN3D_MIN_FREE_GIB:-45}"
|
||||||
|
|
||||||
|
USE_GPU=1
|
||||||
|
KEEP_DEPTHMAPS=0
|
||||||
|
|
||||||
|
RED=$'\e[31m'
|
||||||
|
GREEN=$'\e[32m'
|
||||||
|
YELLOW=$'\e[33m'
|
||||||
|
BLUE=$'\e[34m'
|
||||||
|
BOLD=$'\e[1m'
|
||||||
|
RESET=$'\e[0m'
|
||||||
|
|
||||||
|
log() {
|
||||||
|
printf '\n%s%s==>%s %s\n' "$BOLD" "$BLUE" "$RESET" "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
ok() {
|
||||||
|
printf '%s✓%s %s\n' "$GREEN" "$RESET" "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
warn() {
|
||||||
|
printf '%s⚠%s %s\n' "$YELLOW" "$RESET" "$*" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
printf '%sERREUR:%s %s\n' "$RED" "$RESET" "$*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup_on_error() {
|
||||||
|
local code=$?
|
||||||
|
if (( code != 0 )); then
|
||||||
|
printf '\n%sLe pipeline s’est arrêté avec le code %d.%s\n' \
|
||||||
|
"$RED" "$code" "$RESET" >&2
|
||||||
|
printf 'Relance simplement %sscan3d%s pour reprendre à la dernière étape validée.\n' \
|
||||||
|
"$BOLD" "$RESET" >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
trap cleanup_on_error EXIT
|
||||||
|
|
||||||
|
prompt_default() {
|
||||||
|
local prompt="$1"
|
||||||
|
local default="$2"
|
||||||
|
local answer
|
||||||
|
read -r -e -p "$prompt [$default] : " answer
|
||||||
|
printf '%s' "${answer:-$default}"
|
||||||
|
}
|
||||||
|
|
||||||
|
yes_no() {
|
||||||
|
local prompt="$1"
|
||||||
|
local default="${2:-n}"
|
||||||
|
local answer suffix
|
||||||
|
|
||||||
|
if [[ "$default" == "o" ]]; then
|
||||||
|
suffix="[O/n]"
|
||||||
|
else
|
||||||
|
suffix="[o/N]"
|
||||||
|
fi
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
read -r -p "$prompt $suffix : " answer
|
||||||
|
answer="${answer:-$default}"
|
||||||
|
case "${answer,,}" in
|
||||||
|
o|oui|y|yes) return 0 ;;
|
||||||
|
n|non|no) return 1 ;;
|
||||||
|
*) printf 'Réponds par o ou n.\n' ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
require_command() {
|
||||||
|
command -v "$1" >/dev/null 2>&1 || die "commande introuvable : $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_logged() {
|
||||||
|
local logfile="$1"
|
||||||
|
shift
|
||||||
|
mkdir -p "$(dirname "$logfile")"
|
||||||
|
"$@" 2>&1 | tee "$logfile"
|
||||||
|
}
|
||||||
|
|
||||||
|
natural_list() {
|
||||||
|
find "$@" -print0 | sort -zV
|
||||||
|
}
|
||||||
|
|
||||||
|
choose_source_dir() {
|
||||||
|
local default_dir="$PWD"
|
||||||
|
local entered
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
entered="$(prompt_default 'Dossier contenant les photos' "$default_dir")"
|
||||||
|
entered="${entered/#\~/$HOME}"
|
||||||
|
entered="$(realpath -m "$entered")"
|
||||||
|
|
||||||
|
if [[ -d "$entered" ]]; then
|
||||||
|
RAW_DIR="$entered"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
warn "Le dossier n’existe pas : $entered"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
choose_categories() {
|
||||||
|
printf '\n%sQuelles photos utiliser pour la reconstruction ?%s\n' "$BOLD" "$RESET"
|
||||||
|
printf ' 1) Bonnes uniquement — recommandé\n'
|
||||||
|
printf ' 2) Bonnes + suspectes — plus complet, plus risqué\n'
|
||||||
|
printf ' 3) Toutes, y compris mauvaises — déconseillé\n'
|
||||||
|
|
||||||
|
local choice
|
||||||
|
while true; do
|
||||||
|
read -r -p 'Choix [1] : ' choice
|
||||||
|
choice="${choice:-1}"
|
||||||
|
case "$choice" in
|
||||||
|
1)
|
||||||
|
SELECTED_CATEGORIES=("bonnes")
|
||||||
|
CATEGORY_LABEL="bonnes"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
SELECTED_CATEGORIES=("bonnes" "suspectes")
|
||||||
|
CATEGORY_LABEL="bonnes-suspectes"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
SELECTED_CATEGORIES=("bonnes" "suspectes" "mauvaises")
|
||||||
|
CATEGORY_LABEL="toutes"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf 'Choisis 1, 2 ou 3.\n'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
write_tri_script() {
|
||||||
|
cat > "$TRI_PY" <<'PY'
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import csv
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
EXTENSIONS = {".jpg", ".jpeg", ".png", ".tif", ".tiff", ".webp"}
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Result:
|
||||||
|
path: Path
|
||||||
|
category: str
|
||||||
|
sharpness: float
|
||||||
|
white: float
|
||||||
|
black: float
|
||||||
|
brightness: float
|
||||||
|
reason: str
|
||||||
|
|
||||||
|
|
||||||
|
def natural_key(path: Path) -> list[object]:
|
||||||
|
return [
|
||||||
|
int(part) if part.isdigit() else part.lower()
|
||||||
|
for part in re.split(r"(\d+)", path.name)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def load_gray(path: Path) -> np.ndarray:
|
||||||
|
with Image.open(path) as source:
|
||||||
|
source = source.convert("L")
|
||||||
|
gray = np.asarray(source)
|
||||||
|
|
||||||
|
height, width = gray.shape
|
||||||
|
maximum_dimension = 1600
|
||||||
|
|
||||||
|
if max(width, height) > maximum_dimension:
|
||||||
|
scale = maximum_dimension / max(width, height)
|
||||||
|
gray = cv2.resize(
|
||||||
|
gray,
|
||||||
|
(
|
||||||
|
max(1, round(width * scale)),
|
||||||
|
max(1, round(height * scale)),
|
||||||
|
),
|
||||||
|
interpolation=cv2.INTER_AREA,
|
||||||
|
)
|
||||||
|
|
||||||
|
return gray
|
||||||
|
|
||||||
|
|
||||||
|
def analyze(path: Path) -> tuple[dict[str, float] | None, str]:
|
||||||
|
try:
|
||||||
|
gray = load_gray(path)
|
||||||
|
except Exception as error:
|
||||||
|
return None, f"illisible: {error}"
|
||||||
|
|
||||||
|
return {
|
||||||
|
"sharpness": float(cv2.Laplacian(gray, cv2.CV_64F).var()),
|
||||||
|
"white": float(np.count_nonzero(gray >= 250) / gray.size * 100),
|
||||||
|
"black": float(np.count_nonzero(gray <= 5) / gray.size * 100),
|
||||||
|
"brightness": float(gray.mean()),
|
||||||
|
}, ""
|
||||||
|
|
||||||
|
|
||||||
|
def classify(path: Path, metrics: dict[str, float] | None, error: str) -> Result:
|
||||||
|
if metrics is None:
|
||||||
|
return Result(path, "mauvaises", 0.0, 0.0, 0.0, 0.0, error)
|
||||||
|
|
||||||
|
sharpness = metrics["sharpness"]
|
||||||
|
white = metrics["white"]
|
||||||
|
black = metrics["black"]
|
||||||
|
brightness = metrics["brightness"]
|
||||||
|
|
||||||
|
reasons: list[str] = []
|
||||||
|
|
||||||
|
if sharpness < 100:
|
||||||
|
reasons.append("très floue")
|
||||||
|
elif sharpness < 170:
|
||||||
|
reasons.append("floue possible")
|
||||||
|
|
||||||
|
if white > 20:
|
||||||
|
reasons.append("très surexposée")
|
||||||
|
elif white > 8:
|
||||||
|
reasons.append("surexposition possible")
|
||||||
|
|
||||||
|
if black > 35:
|
||||||
|
reasons.append("très sombre")
|
||||||
|
elif black > 15:
|
||||||
|
reasons.append("ombres bouchées possibles")
|
||||||
|
|
||||||
|
if brightness > 225 or brightness < 25:
|
||||||
|
reasons.append("luminosité extrême")
|
||||||
|
|
||||||
|
severe = (
|
||||||
|
sharpness < 100
|
||||||
|
or white > 20
|
||||||
|
or black > 35
|
||||||
|
or brightness > 225
|
||||||
|
or brightness < 25
|
||||||
|
)
|
||||||
|
|
||||||
|
if severe:
|
||||||
|
category = "mauvaises"
|
||||||
|
elif reasons:
|
||||||
|
category = "suspectes"
|
||||||
|
else:
|
||||||
|
category = "bonnes"
|
||||||
|
|
||||||
|
return Result(
|
||||||
|
path,
|
||||||
|
category,
|
||||||
|
sharpness,
|
||||||
|
white,
|
||||||
|
black,
|
||||||
|
brightness,
|
||||||
|
"; ".join(reasons) or "ok",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("images", type=Path)
|
||||||
|
parser.add_argument("--output", type=Path, required=True)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
images_dir = args.images.expanduser().resolve()
|
||||||
|
output_dir = args.output.expanduser().resolve()
|
||||||
|
|
||||||
|
excluded_roots = {
|
||||||
|
output_dir,
|
||||||
|
images_dir / "scan3d",
|
||||||
|
images_dir / "tri_resultat",
|
||||||
|
images_dir / "test_colmap",
|
||||||
|
images_dir / "colmap_complet",
|
||||||
|
}
|
||||||
|
|
||||||
|
images: list[Path] = []
|
||||||
|
for path in images_dir.rglob("*"):
|
||||||
|
if not path.is_file() or path.is_symlink():
|
||||||
|
continue
|
||||||
|
if path.suffix.lower() not in EXTENSIONS:
|
||||||
|
continue
|
||||||
|
if any(root == path or root in path.parents for root in excluded_roots):
|
||||||
|
continue
|
||||||
|
images.append(path)
|
||||||
|
|
||||||
|
images.sort(key=natural_key)
|
||||||
|
|
||||||
|
if not images:
|
||||||
|
print("Aucune image trouvée.", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
print(f"{len(images)} images trouvées.")
|
||||||
|
|
||||||
|
results: list[Result] = []
|
||||||
|
for index, path in enumerate(images, 1):
|
||||||
|
metrics, error = analyze(path)
|
||||||
|
results.append(classify(path, metrics, error))
|
||||||
|
print(
|
||||||
|
f"\rAnalyse {index}/{len(images)} : {path.name[:55]:55s}",
|
||||||
|
end="",
|
||||||
|
flush=True,
|
||||||
|
)
|
||||||
|
print()
|
||||||
|
|
||||||
|
output_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
for category in ("bonnes", "suspectes", "mauvaises"):
|
||||||
|
category_dir = output_dir / category
|
||||||
|
if category_dir.exists():
|
||||||
|
for child in category_dir.iterdir():
|
||||||
|
if child.is_symlink() or child.is_file():
|
||||||
|
child.unlink()
|
||||||
|
category_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
with (output_dir / "resultats.csv").open(
|
||||||
|
"w", encoding="utf-8", newline=""
|
||||||
|
) as csv_file:
|
||||||
|
writer = csv.writer(csv_file)
|
||||||
|
writer.writerow(
|
||||||
|
[
|
||||||
|
"fichier",
|
||||||
|
"categorie",
|
||||||
|
"netteté",
|
||||||
|
"blanc_pct",
|
||||||
|
"noir_pct",
|
||||||
|
"luminosité",
|
||||||
|
"raison",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
counters = {"bonnes": 0, "suspectes": 0, "mauvaises": 0}
|
||||||
|
for result in results:
|
||||||
|
counters[result.category] += 1
|
||||||
|
link_name = f"{counters[result.category]:06d}_{result.path.name}"
|
||||||
|
link_path = output_dir / result.category / link_name
|
||||||
|
link_path.symlink_to(result.path.resolve())
|
||||||
|
|
||||||
|
writer.writerow(
|
||||||
|
[
|
||||||
|
str(result.path),
|
||||||
|
result.category,
|
||||||
|
f"{result.sharpness:.2f}",
|
||||||
|
f"{result.white:.2f}",
|
||||||
|
f"{result.black:.2f}",
|
||||||
|
f"{result.brightness:.2f}",
|
||||||
|
result.reason,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
for category in ("bonnes", "suspectes", "mauvaises"):
|
||||||
|
count = sum(result.category == category for result in results)
|
||||||
|
print(f"{category}: {count}")
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
|
PY
|
||||||
|
}
|
||||||
|
|
||||||
|
podman_openmvs() {
|
||||||
|
podman run --rm \
|
||||||
|
-v "$OPENMVS_BIN:/openmvs:ro,Z" \
|
||||||
|
-v "$WORK_DIR:/data:Z" \
|
||||||
|
-w /data/openmvs \
|
||||||
|
"$OPENMVS_IMAGE" \
|
||||||
|
"$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
printf '%s\n' "${BOLD}scan3d — pipeline photogrammétrique COLMAP + OpenMVS${RESET}"
|
||||||
|
|
||||||
|
require_command colmap
|
||||||
|
require_command podman
|
||||||
|
require_command /usr/bin/python
|
||||||
|
require_command realpath
|
||||||
|
require_command sort
|
||||||
|
require_command find
|
||||||
|
require_command sqlite3
|
||||||
|
|
||||||
|
/usr/bin/python - <<'PY' >/dev/null 2>&1 || die \
|
||||||
|
"Modules Python manquants. Installe : sudo pacman -S python-opencv python-numpy python-pillow"
|
||||||
|
import cv2
|
||||||
|
import numpy
|
||||||
|
from PIL import Image
|
||||||
|
PY
|
||||||
|
|
||||||
|
[[ -x "$OPENMVS_BIN/InterfaceCOLMAP" ]] ||
|
||||||
|
die "OpenMVS introuvable dans : $OPENMVS_BIN"
|
||||||
|
[[ -x "$OPENMVS_BIN/DensifyPointCloud" ]] ||
|
||||||
|
die "DensifyPointCloud introuvable dans : $OPENMVS_BIN"
|
||||||
|
|
||||||
|
podman image exists "$OPENMVS_IMAGE" ||
|
||||||
|
die "Image Podman absente : $OPENMVS_IMAGE"
|
||||||
|
|
||||||
|
choose_source_dir
|
||||||
|
|
||||||
|
PROJECT_ROOT="$RAW_DIR/scan3d"
|
||||||
|
TRI_DIR="$PROJECT_ROOT/tri"
|
||||||
|
TRI_PY="$PROJECT_ROOT/tri_photos.py"
|
||||||
|
|
||||||
|
mkdir -p "$PROJECT_ROOT"
|
||||||
|
write_tri_script
|
||||||
|
|
||||||
|
if [[ -f "$TRI_DIR/resultats.csv" ]]; then
|
||||||
|
if yes_no "Un tri existe déjà. Le réutiliser ?" o; then
|
||||||
|
ok "Tri existant conservé."
|
||||||
|
else
|
||||||
|
log "Nouveau tri des photos"
|
||||||
|
rm -rf "$TRI_DIR"
|
||||||
|
/usr/bin/python "$TRI_PY" "$RAW_DIR" --output "$TRI_DIR"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log "Tri des photos"
|
||||||
|
/usr/bin/python "$TRI_PY" "$RAW_DIR" --output "$TRI_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '\nRésultat du tri :\n'
|
||||||
|
for category in bonnes suspectes mauvaises; do
|
||||||
|
count="$(find "$TRI_DIR/$category" -maxdepth 1 -type l 2>/dev/null | wc -l)"
|
||||||
|
printf ' %-11s : %s\n' "$category" "$count"
|
||||||
|
done
|
||||||
|
|
||||||
|
choose_categories
|
||||||
|
|
||||||
|
WORK_DIR="$PROJECT_ROOT/projet-$CATEGORY_LABEL"
|
||||||
|
|
||||||
|
if [[ -d "$WORK_DIR" ]] && find "$WORK_DIR" -mindepth 1 -print -quit | grep -q .; then
|
||||||
|
printf '\nUn projet existe déjà : %s\n' "$WORK_DIR"
|
||||||
|
printf ' 1) Reprendre là où il s’est arrêté\n'
|
||||||
|
printf ' 2) Tout effacer et recommencer\n'
|
||||||
|
printf ' 3) Annuler\n'
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
read -r -p 'Choix [1] : ' resume_choice
|
||||||
|
resume_choice="${resume_choice:-1}"
|
||||||
|
case "$resume_choice" in
|
||||||
|
1) break ;;
|
||||||
|
2)
|
||||||
|
rm -rf "$WORK_DIR"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
3) exit 0 ;;
|
||||||
|
*) printf 'Choisis 1, 2 ou 3.\n' ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$WORK_DIR"/{images,sparse,logs,openmvs}
|
||||||
|
|
||||||
|
free_gib="$(df -Pk "$WORK_DIR" | awk 'NR==2 {printf "%d", $4/1024/1024}')"
|
||||||
|
printf '\nEspace libre : %s Gio\n' "$free_gib"
|
||||||
|
if (( free_gib < MIN_FREE_GIB )); then
|
||||||
|
warn "Moins de ${MIN_FREE_GIB} Gio libres."
|
||||||
|
yes_no "Continuer malgré le risque de remplir le disque ?" n ||
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if yes_no "Conserver les cartes de profondeur après le résultat final ?" n; then
|
||||||
|
KEEP_DEPTHMAPS=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if yes_no "Utiliser la Radeon via OpenGL pour l’extraction et le matching ?" o; then
|
||||||
|
USE_GPU=1
|
||||||
|
else
|
||||||
|
USE_GPU=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Préparation des images sélectionnées"
|
||||||
|
rm -rf "$WORK_DIR/images"
|
||||||
|
mkdir -p "$WORK_DIR/images"
|
||||||
|
|
||||||
|
index=1
|
||||||
|
for category in "${SELECTED_CATEGORIES[@]}"; do
|
||||||
|
while IFS= read -r -d '' image; do
|
||||||
|
target="$(readlink -f "$image")"
|
||||||
|
[[ -f "$target" ]] || continue
|
||||||
|
|
||||||
|
extension="${target##*.}"
|
||||||
|
extension="${extension,,}"
|
||||||
|
printf -v output_name 'img_%07d.%s' "$index" "$extension"
|
||||||
|
ln -s "$target" "$WORK_DIR/images/$output_name"
|
||||||
|
((index++))
|
||||||
|
done < <(
|
||||||
|
find "$TRI_DIR/$category" -maxdepth 1 -type l -print0 | sort -zV
|
||||||
|
)
|
||||||
|
done
|
||||||
|
|
||||||
|
IMAGE_COUNT="$(find "$WORK_DIR/images" -maxdepth 1 -type l | wc -l)"
|
||||||
|
(( IMAGE_COUNT > 0 )) || die "Aucune image sélectionnée."
|
||||||
|
ok "$IMAGE_COUNT images préparées."
|
||||||
|
|
||||||
|
DATABASE="$WORK_DIR/database.db"
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/.features.done" ]]; then
|
||||||
|
log "COLMAP — extraction des caractéristiques"
|
||||||
|
rm -f "$DATABASE"
|
||||||
|
run_logged "$WORK_DIR/logs/01-features.log" \
|
||||||
|
colmap feature_extractor \
|
||||||
|
--database_path "$DATABASE" \
|
||||||
|
--image_path "$WORK_DIR/images" \
|
||||||
|
--ImageReader.single_camera 1 \
|
||||||
|
--ImageReader.camera_model SIMPLE_RADIAL \
|
||||||
|
--FeatureExtraction.use_gpu "$USE_GPU"
|
||||||
|
touch "$WORK_DIR/.features.done"
|
||||||
|
else
|
||||||
|
ok "Extraction déjà terminée."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/.matching.done" ]]; then
|
||||||
|
log "COLMAP — matching séquentiel"
|
||||||
|
run_logged "$WORK_DIR/logs/02-matching.log" \
|
||||||
|
colmap sequential_matcher \
|
||||||
|
--database_path "$DATABASE" \
|
||||||
|
--FeatureMatching.use_gpu "$USE_GPU" \
|
||||||
|
--SequentialMatching.overlap "$SEQUENTIAL_OVERLAP"
|
||||||
|
touch "$WORK_DIR/.matching.done"
|
||||||
|
else
|
||||||
|
ok "Matching déjà terminé."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/.mapper.done" ]]; then
|
||||||
|
log "COLMAP — reconstruction clairsemée"
|
||||||
|
rm -rf "$WORK_DIR/sparse"
|
||||||
|
mkdir -p "$WORK_DIR/sparse"
|
||||||
|
run_logged "$WORK_DIR/logs/03-mapper.log" \
|
||||||
|
colmap mapper \
|
||||||
|
--database_path "$DATABASE" \
|
||||||
|
--image_path "$WORK_DIR/images" \
|
||||||
|
--output_path "$WORK_DIR/sparse"
|
||||||
|
touch "$WORK_DIR/.mapper.done"
|
||||||
|
else
|
||||||
|
ok "Reconstruction clairsemée déjà terminée."
|
||||||
|
fi
|
||||||
|
|
||||||
|
BEST_MODEL=""
|
||||||
|
BEST_REGISTERED=-1
|
||||||
|
|
||||||
|
while IFS= read -r model; do
|
||||||
|
analysis="$(colmap model_analyzer --path "$model" 2>&1 || true)"
|
||||||
|
registered="$(
|
||||||
|
awk -F': ' '/Registered images:/ {print $NF; exit}' <<<"$analysis" |
|
||||||
|
tr -dc '0-9'
|
||||||
|
)"
|
||||||
|
[[ -n "$registered" ]] || registered=0
|
||||||
|
printf '%s\n' "$analysis" > "$model/model-analysis.txt"
|
||||||
|
|
||||||
|
printf ' Modèle %-5s : %s images enregistrées\n' \
|
||||||
|
"$(basename "$model")" "$registered"
|
||||||
|
|
||||||
|
if (( registered > BEST_REGISTERED )); then
|
||||||
|
BEST_REGISTERED="$registered"
|
||||||
|
BEST_MODEL="$model"
|
||||||
|
fi
|
||||||
|
done < <(
|
||||||
|
find "$WORK_DIR/sparse" -mindepth 1 -maxdepth 1 -type d | sort -V
|
||||||
|
)
|
||||||
|
|
||||||
|
[[ -n "$BEST_MODEL" ]] || die "COLMAP n’a produit aucun modèle."
|
||||||
|
printf '%s\n' "$BEST_MODEL" > "$WORK_DIR/best-model.txt"
|
||||||
|
|
||||||
|
ok "Meilleur modèle : $BEST_REGISTERED/$IMAGE_COUNT images."
|
||||||
|
|
||||||
|
DENSE_DIR="$WORK_DIR/dense"
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/.undistort.done" ]]; then
|
||||||
|
log "COLMAP — correction des images"
|
||||||
|
rm -rf "$DENSE_DIR"
|
||||||
|
run_logged "$WORK_DIR/logs/04-undistort.log" \
|
||||||
|
colmap image_undistorter \
|
||||||
|
--image_path "$WORK_DIR/images" \
|
||||||
|
--input_path "$BEST_MODEL" \
|
||||||
|
--output_path "$DENSE_DIR" \
|
||||||
|
--output_type COLMAP
|
||||||
|
touch "$WORK_DIR/.undistort.done"
|
||||||
|
else
|
||||||
|
ok "Images déjà corrigées."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/openmvs/scene.mvs" ]]; then
|
||||||
|
log "OpenMVS — import du modèle COLMAP"
|
||||||
|
run_logged "$WORK_DIR/logs/05-interface-colmap.log" \
|
||||||
|
podman_openmvs \
|
||||||
|
/openmvs/InterfaceCOLMAP \
|
||||||
|
--input-file /data/dense \
|
||||||
|
--image-folder /data/dense/images \
|
||||||
|
--output-file /data/openmvs/scene.mvs \
|
||||||
|
--working-folder /data/openmvs \
|
||||||
|
--verbosity 1
|
||||||
|
else
|
||||||
|
ok "Projet OpenMVS déjà importé."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/openmvs/scene_dense.ply" ]]; then
|
||||||
|
log "OpenMVS — densification"
|
||||||
|
run_logged "$WORK_DIR/logs/06-densify.log" \
|
||||||
|
podman_openmvs \
|
||||||
|
/openmvs/DensifyPointCloud \
|
||||||
|
--input-file /data/openmvs/scene.mvs \
|
||||||
|
--output-file /data/openmvs/scene_dense.mvs \
|
||||||
|
--working-folder /data/openmvs \
|
||||||
|
--resolution-level "$RESOLUTION_LEVEL" \
|
||||||
|
--number-views "$NUMBER_VIEWS" \
|
||||||
|
--max-threads "$THREADS" \
|
||||||
|
--verbosity 1
|
||||||
|
else
|
||||||
|
ok "Nuage dense déjà généré."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/openmvs/scene_dense_mesh.ply" ]]; then
|
||||||
|
log "OpenMVS — reconstruction du maillage"
|
||||||
|
run_logged "$WORK_DIR/logs/07-reconstruct-mesh.log" \
|
||||||
|
podman_openmvs \
|
||||||
|
/openmvs/ReconstructMesh \
|
||||||
|
--input-file /data/openmvs/scene_dense.mvs \
|
||||||
|
--output-file /data/openmvs/scene_dense_mesh.mvs \
|
||||||
|
--working-folder /data/openmvs \
|
||||||
|
--max-threads "$THREADS" \
|
||||||
|
--min-point-distance 4 \
|
||||||
|
--verbosity 1
|
||||||
|
else
|
||||||
|
ok "Maillage déjà reconstruit."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/openmvs/scene_dense_mesh_refine.ply" ]]; then
|
||||||
|
log "OpenMVS — raffinement du maillage"
|
||||||
|
run_logged "$WORK_DIR/logs/08-refine-mesh.log" \
|
||||||
|
podman_openmvs \
|
||||||
|
/openmvs/RefineMesh \
|
||||||
|
--input-file /data/openmvs/scene_dense.mvs \
|
||||||
|
--mesh-file /data/openmvs/scene_dense_mesh.ply \
|
||||||
|
--output-file /data/openmvs/scene_dense_mesh_refine.mvs \
|
||||||
|
--working-folder /data/openmvs \
|
||||||
|
--resolution-level "$RESOLUTION_LEVEL" \
|
||||||
|
--max-threads "$THREADS" \
|
||||||
|
--verbosity 1
|
||||||
|
else
|
||||||
|
ok "Maillage déjà raffiné."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$WORK_DIR/openmvs/scene_dense_mesh_refine_texture.ply" ]]; then
|
||||||
|
log "OpenMVS — texturage"
|
||||||
|
run_logged "$WORK_DIR/logs/09-texture-mesh.log" \
|
||||||
|
podman_openmvs \
|
||||||
|
/openmvs/TextureMesh \
|
||||||
|
--input-file /data/openmvs/scene_dense.mvs \
|
||||||
|
--mesh-file /data/openmvs/scene_dense_mesh_refine.ply \
|
||||||
|
--output-file /data/openmvs/scene_dense_mesh_refine_texture.mvs \
|
||||||
|
--working-folder /data/openmvs \
|
||||||
|
--max-threads "$THREADS" \
|
||||||
|
--verbosity 1
|
||||||
|
else
|
||||||
|
ok "Maillage déjà texturé."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( !KEEP_DEPTHMAPS )); then
|
||||||
|
log "Nettoyage des cartes de profondeur intermédiaires"
|
||||||
|
find "$WORK_DIR/openmvs" -maxdepth 1 -type f \
|
||||||
|
\( -name 'depth*.png' -o -name 'depth*.conf.png' \) \
|
||||||
|
-delete
|
||||||
|
fi
|
||||||
|
|
||||||
|
FINAL="$WORK_DIR/openmvs/scene_dense_mesh_refine_texture.ply"
|
||||||
|
[[ -f "$FINAL" ]] || die "Le modèle final est absent."
|
||||||
|
|
||||||
|
trap - EXIT
|
||||||
|
|
||||||
|
printf '\n%s%sSCAN 3D TERMINÉ%s\n' "$BOLD" "$GREEN" "$RESET"
|
||||||
|
printf 'Modèle texturé :\n %s\n' "$FINAL"
|
||||||
|
printf 'Images enregistrées : %s/%s\n' "$BEST_REGISTERED" "$IMAGE_COUNT"
|
||||||
|
printf 'Espace occupé : '
|
||||||
|
du -sh "$WORK_DIR" | awk '{print $1}'
|
||||||
|
printf '\nPour l’ouvrir manuellement :\n'
|
||||||
|
printf ' meshlab %q\n' "$FINAL"
|
||||||
430
bin/.local/bin/scan3d-watch
Executable file
430
bin/.local/bin/scan3d-watch
Executable file
|
|
@ -0,0 +1,430 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""scan3d-watch — TUI Textual en lecture seule pour scan3d."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from pathlib import Path
|
||||||
|
from time import monotonic
|
||||||
|
|
||||||
|
import psutil
|
||||||
|
from textual.app import App, ComposeResult
|
||||||
|
from textual.binding import Binding
|
||||||
|
from textual.containers import Horizontal, Vertical
|
||||||
|
from textual.widgets import Footer, Label, ProgressBar, Static
|
||||||
|
|
||||||
|
|
||||||
|
PROCESS_NAMES = {
|
||||||
|
"colmap",
|
||||||
|
"DensifyPointCloud",
|
||||||
|
"ReconstructMesh",
|
||||||
|
"RefineMesh",
|
||||||
|
"TextureMesh",
|
||||||
|
"InterfaceCOLMAP",
|
||||||
|
}
|
||||||
|
|
||||||
|
PROGRESS_PATTERNS = (
|
||||||
|
re.compile(r"Processing image \[(\d+)/(\d+)\]"),
|
||||||
|
re.compile(r"Estimated depth-maps (\d+) \((\d+)%"),
|
||||||
|
re.compile(r"Geometric-consistent estimated depth-maps (\d+) \((\d+)%"),
|
||||||
|
re.compile(r"Dense fused depth-maps (\d+) \((\d+)%"),
|
||||||
|
)
|
||||||
|
|
||||||
|
PHASES = (
|
||||||
|
("features", "Extraction"),
|
||||||
|
("sequential", "Matching séquentiel"),
|
||||||
|
("vocab", "Matching global"),
|
||||||
|
("transitive", "Matching transitif"),
|
||||||
|
("matching", "Matching"),
|
||||||
|
("mapper", "Mapper"),
|
||||||
|
("undistort", "Undistortion"),
|
||||||
|
("interface", "Import OpenMVS"),
|
||||||
|
("densify", "Densification"),
|
||||||
|
("reconstruct", "Maillage"),
|
||||||
|
("refine", "Raffinement"),
|
||||||
|
("texture", "Texturage"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Progress:
|
||||||
|
phase: str = "En attente"
|
||||||
|
current: int = 0
|
||||||
|
total: int = 0
|
||||||
|
percent: float = 0.0
|
||||||
|
message: str = ""
|
||||||
|
|
||||||
|
|
||||||
|
def human_bytes(value: int | float) -> str:
|
||||||
|
units = ("o", "Kio", "Mio", "Gio", "Tio")
|
||||||
|
number = float(value)
|
||||||
|
for unit in units:
|
||||||
|
if abs(number) < 1024 or unit == units[-1]:
|
||||||
|
return f"{number:.1f} {unit}"
|
||||||
|
number /= 1024
|
||||||
|
return f"{number:.1f} Tio"
|
||||||
|
|
||||||
|
|
||||||
|
def directory_size(path: Path) -> int:
|
||||||
|
total = 0
|
||||||
|
try:
|
||||||
|
for root, _dirs, files in os.walk(path):
|
||||||
|
for name in files:
|
||||||
|
try:
|
||||||
|
total += (Path(root) / name).stat().st_size
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
return total
|
||||||
|
|
||||||
|
|
||||||
|
def find_project(root: Path) -> Path:
|
||||||
|
scan3d = root / "scan3d"
|
||||||
|
return scan3d if scan3d.is_dir() else root
|
||||||
|
|
||||||
|
|
||||||
|
def latest_log(project: Path) -> Path | None:
|
||||||
|
logs: list[Path] = []
|
||||||
|
try:
|
||||||
|
logs = [path for path in project.rglob("*.log") if path.is_file()]
|
||||||
|
except OSError:
|
||||||
|
return None
|
||||||
|
return max(logs, key=lambda path: path.stat().st_mtime, default=None)
|
||||||
|
|
||||||
|
|
||||||
|
def read_tail(path: Path, lines: int = 12) -> list[str]:
|
||||||
|
try:
|
||||||
|
with path.open("rb") as file:
|
||||||
|
file.seek(0, os.SEEK_END)
|
||||||
|
size = file.tell()
|
||||||
|
block = 8192
|
||||||
|
data = b""
|
||||||
|
while size > 0 and data.count(b"\n") <= lines:
|
||||||
|
read_size = min(block, size)
|
||||||
|
size -= read_size
|
||||||
|
file.seek(size)
|
||||||
|
data = file.read(read_size) + data
|
||||||
|
return data.decode("utf-8", errors="replace").splitlines()[-lines:]
|
||||||
|
except OSError:
|
||||||
|
return []
|
||||||
|
|
||||||
|
def detect_progress(project: Path) -> Progress:
|
||||||
|
log = latest_log(project)
|
||||||
|
if log is None:
|
||||||
|
return Progress()
|
||||||
|
|
||||||
|
lower_name = log.name.lower()
|
||||||
|
phase = next(
|
||||||
|
(label for token, label in PHASES if token in lower_name),
|
||||||
|
log.stem,
|
||||||
|
)
|
||||||
|
|
||||||
|
result = Progress(phase=phase)
|
||||||
|
tail = read_tail(log, 120)
|
||||||
|
|
||||||
|
# COLMAP : extraction ou matching.
|
||||||
|
for line in reversed(tail):
|
||||||
|
match = re.search(r"Processing image \[(\d+)/(\d+)\]", line)
|
||||||
|
if match:
|
||||||
|
current = int(match.group(1))
|
||||||
|
total = int(match.group(2))
|
||||||
|
|
||||||
|
result.current = current
|
||||||
|
result.total = total
|
||||||
|
result.percent = current * 100 / total if total else 0
|
||||||
|
result.message = line.strip()
|
||||||
|
return result
|
||||||
|
|
||||||
|
# COLMAP Mapper : nombre d’images réellement enregistrées.
|
||||||
|
for line in reversed(tail):
|
||||||
|
match = re.search(r"num_reg_frames=(\d+)", line)
|
||||||
|
if not match:
|
||||||
|
continue
|
||||||
|
|
||||||
|
current = int(match.group(1))
|
||||||
|
|
||||||
|
# Le log est normalement dans projet-*/logs/.
|
||||||
|
work_dir = log.parent.parent
|
||||||
|
images_dir = work_dir / "images"
|
||||||
|
|
||||||
|
try:
|
||||||
|
total = sum(
|
||||||
|
1
|
||||||
|
for path in images_dir.iterdir()
|
||||||
|
if path.is_file() or path.is_symlink()
|
||||||
|
)
|
||||||
|
except OSError:
|
||||||
|
total = 0
|
||||||
|
|
||||||
|
result.current = current
|
||||||
|
result.total = total
|
||||||
|
result.percent = current * 100 / total if total else 0
|
||||||
|
result.message = line.strip()
|
||||||
|
return result
|
||||||
|
|
||||||
|
# OpenMVS : cartes de profondeur.
|
||||||
|
for line in reversed(tail):
|
||||||
|
match = re.search(
|
||||||
|
r"(?:Estimated|Geometric-consistent estimated|Dense fused) "
|
||||||
|
r"depth-maps (\d+) \((\d+)%",
|
||||||
|
line,
|
||||||
|
)
|
||||||
|
if match:
|
||||||
|
result.current = int(match.group(1))
|
||||||
|
result.percent = float(match.group(2))
|
||||||
|
result.message = line.strip()
|
||||||
|
return result
|
||||||
|
|
||||||
|
if tail:
|
||||||
|
result.message = tail[-1].strip()
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def amd_gpu() -> tuple[str, str, str]:
|
||||||
|
for card in sorted(Path("/sys/class/drm").glob("card[0-9]*")):
|
||||||
|
device = card / "device"
|
||||||
|
try:
|
||||||
|
if (device / "vendor").read_text().strip() != "0x1002":
|
||||||
|
continue
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
busy = "?"
|
||||||
|
used = total = None
|
||||||
|
temperature = "?"
|
||||||
|
|
||||||
|
try:
|
||||||
|
busy = (device / "gpu_busy_percent").read_text().strip()
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
used = int((device / "mem_info_vram_used").read_text())
|
||||||
|
total = int((device / "mem_info_vram_total").read_text())
|
||||||
|
except (OSError, ValueError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
for hwmon in (device / "hwmon").glob("hwmon*"):
|
||||||
|
try:
|
||||||
|
temperature = f"{int((hwmon / 'temp1_input').read_text()) / 1000:.0f}°C"
|
||||||
|
break
|
||||||
|
except (OSError, ValueError):
|
||||||
|
continue
|
||||||
|
|
||||||
|
vram = (
|
||||||
|
f"{human_bytes(used)}/{human_bytes(total)}"
|
||||||
|
if used is not None and total is not None
|
||||||
|
else "indisponible"
|
||||||
|
)
|
||||||
|
return f"{busy}%", vram, temperature
|
||||||
|
|
||||||
|
return "absent", "—", "—"
|
||||||
|
|
||||||
|
def active_process() -> str:
|
||||||
|
cpu_count = psutil.cpu_count(logical=True) or 1
|
||||||
|
rows: list[tuple[float, str]] = []
|
||||||
|
|
||||||
|
for process in psutil.process_iter(
|
||||||
|
["name", "cpu_percent", "memory_percent"]
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
name = process.info["name"] or ""
|
||||||
|
if name not in PROCESS_NAMES:
|
||||||
|
continue
|
||||||
|
|
||||||
|
raw_cpu = float(process.info["cpu_percent"] or 0)
|
||||||
|
global_cpu = raw_cpu / cpu_count
|
||||||
|
memory = float(process.info["memory_percent"] or 0)
|
||||||
|
|
||||||
|
rows.append(
|
||||||
|
(
|
||||||
|
raw_cpu,
|
||||||
|
f"{name} CPU {global_cpu:.0f}% RAM {memory:.1f}%",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
except (
|
||||||
|
psutil.NoSuchProcess,
|
||||||
|
psutil.AccessDenied,
|
||||||
|
TypeError,
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not rows:
|
||||||
|
return "Aucun processus COLMAP/OpenMVS"
|
||||||
|
|
||||||
|
rows.sort(reverse=True)
|
||||||
|
return rows[0][1]
|
||||||
|
|
||||||
|
class Scan3DWatch(App[None]):
|
||||||
|
TITLE = "scan3d-watch"
|
||||||
|
SUB_TITLE = "lecture seule"
|
||||||
|
|
||||||
|
BINDINGS = [
|
||||||
|
Binding("q", "quit", "Quitter"),
|
||||||
|
Binding("r", "refresh_now", "Actualiser"),
|
||||||
|
Binding("l", "toggle_logs", "Logs"),
|
||||||
|
]
|
||||||
|
|
||||||
|
CSS = """
|
||||||
|
Screen {
|
||||||
|
layout: vertical;
|
||||||
|
background: #11111b;
|
||||||
|
color: #cdd6f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title {
|
||||||
|
height: 1;
|
||||||
|
padding: 0 1;
|
||||||
|
background: #313244;
|
||||||
|
color: #cba6f7;
|
||||||
|
text-style: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#phase {
|
||||||
|
height: 3;
|
||||||
|
padding: 0 1;
|
||||||
|
border: round #89b4fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProgressBar {
|
||||||
|
height: 1;
|
||||||
|
margin: 0 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#stats {
|
||||||
|
height: 7;
|
||||||
|
padding: 0 1;
|
||||||
|
border: round #a6e3a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#project {
|
||||||
|
height: 5;
|
||||||
|
padding: 0 1;
|
||||||
|
border: round #f9e2af;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logs {
|
||||||
|
height: 1fr;
|
||||||
|
min-height: 4;
|
||||||
|
padding: 0 1;
|
||||||
|
border: round #fab387;
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
Footer {
|
||||||
|
height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, root: Path) -> None:
|
||||||
|
super().__init__()
|
||||||
|
self.root = root
|
||||||
|
self.project = find_project(root)
|
||||||
|
self.logs_visible = True
|
||||||
|
psutil.cpu_percent(interval=None)
|
||||||
|
|
||||||
|
def compose(self) -> ComposeResult:
|
||||||
|
yield Label("", id="title")
|
||||||
|
yield Static("", id="phase")
|
||||||
|
yield ProgressBar(total=100, show_eta=False, id="progress")
|
||||||
|
yield Static("", id="stats")
|
||||||
|
yield Static("", id="project")
|
||||||
|
yield Static("", id="logs")
|
||||||
|
yield Footer()
|
||||||
|
|
||||||
|
def on_mount(self) -> None:
|
||||||
|
self.refresh_data()
|
||||||
|
self.set_interval(1.0, self.refresh_data)
|
||||||
|
|
||||||
|
def action_refresh_now(self) -> None:
|
||||||
|
self.refresh_data()
|
||||||
|
|
||||||
|
def action_toggle_logs(self) -> None:
|
||||||
|
self.logs_visible = not self.logs_visible
|
||||||
|
logs = self.query_one("#logs")
|
||||||
|
logs.set_class(not self.logs_visible, "hidden")
|
||||||
|
|
||||||
|
def refresh_data(self) -> None:
|
||||||
|
progress = detect_progress(self.project)
|
||||||
|
memory = psutil.virtual_memory()
|
||||||
|
swap = psutil.swap_memory()
|
||||||
|
disk = psutil.disk_usage(self.root)
|
||||||
|
cpu = psutil.cpu_percent(interval=None)
|
||||||
|
gpu, vram, gpu_temp = amd_gpu()
|
||||||
|
|
||||||
|
self.query_one("#title", Label).update(
|
||||||
|
f"SCAN3D {self.root.name} • {self.project}"
|
||||||
|
)
|
||||||
|
|
||||||
|
progress_text = progress.phase
|
||||||
|
if progress.total:
|
||||||
|
progress_text += (
|
||||||
|
f"\n{progress.current}/{progress.total} "
|
||||||
|
f"({progress.percent:.1f}%)"
|
||||||
|
)
|
||||||
|
elif progress.percent:
|
||||||
|
progress_text += f"\n{progress.current} ({progress.percent:.1f}%)"
|
||||||
|
elif progress.message:
|
||||||
|
progress_text += "\nactivité détectée"
|
||||||
|
|
||||||
|
self.query_one("#phase", Static).update(progress_text)
|
||||||
|
self.query_one("#progress", ProgressBar).update(
|
||||||
|
total=100,
|
||||||
|
progress=max(0, min(100, progress.percent)),
|
||||||
|
)
|
||||||
|
|
||||||
|
self.query_one("#stats", Static).update(
|
||||||
|
"[b]Système[/b]\n"
|
||||||
|
f"CPU {cpu:.0f}% GPU {gpu} Temp GPU {gpu_temp}\n"
|
||||||
|
f"RAM {human_bytes(memory.used)}/{human_bytes(memory.total)} "
|
||||||
|
f"dispo {human_bytes(memory.available)}\n"
|
||||||
|
f"Swap {human_bytes(swap.used)}/{human_bytes(swap.total)} "
|
||||||
|
f"VRAM {vram}\n"
|
||||||
|
f"{active_process()}"
|
||||||
|
)
|
||||||
|
|
||||||
|
size = directory_size(self.project)
|
||||||
|
self.query_one("#project", Static).update(
|
||||||
|
"[b]Projet[/b]\n"
|
||||||
|
f"Taille {human_bytes(size)}\n"
|
||||||
|
f"Disque {human_bytes(disk.used)}/{human_bytes(disk.total)} "
|
||||||
|
f"libre {human_bytes(disk.free)}"
|
||||||
|
)
|
||||||
|
|
||||||
|
log = latest_log(self.project)
|
||||||
|
if log is None:
|
||||||
|
log_text = "[b]Logs[/b]\nAucun fichier .log trouvé"
|
||||||
|
else:
|
||||||
|
lines = read_tail(log, 8)
|
||||||
|
cleaned = [
|
||||||
|
re.sub(r"^[IWEF]\d+\s+\S+\s+\d+\s+", "", line)
|
||||||
|
for line in lines
|
||||||
|
]
|
||||||
|
log_text = f"[b]Logs — {log.name}[/b]\n" + "\n".join(cleaned)
|
||||||
|
|
||||||
|
self.query_one("#logs", Static).update(log_text)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
root = Path(sys.argv[1] if len(sys.argv) > 1 else Path.cwd())
|
||||||
|
root = root.expanduser().resolve()
|
||||||
|
|
||||||
|
if not root.is_dir():
|
||||||
|
print(f"Dossier introuvable : {root}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
Scan3DWatch(root).run()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
16
bin/.local/bin/sway-close
Executable file
16
bin/.local/bin/sway-close
Executable file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
app_id="$(
|
||||||
|
swaymsg -t get_tree |
|
||||||
|
jq -r '.. | objects | select(.focused? == true) |
|
||||||
|
(.app_id // .window_properties.class // "")'
|
||||||
|
)"
|
||||||
|
|
||||||
|
case "$app_id" in
|
||||||
|
limusic-app|LiMusic|limusic)
|
||||||
|
pkill -TERM -x limusic-app
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
swaymsg kill
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
pkill waybar
|
|
||||||
waybar &
|
|
||||||
|
|
@ -1,139 +0,0 @@
|
||||||
[Parameters]
|
|
||||||
folder_with_datafiles = ~/.config/calcure
|
|
||||||
calcurse_todo_file = ~/.local/share/calcurse/todo
|
|
||||||
calcurse_events_file = ~/.local/share/calcurse/apts
|
|
||||||
log_file = ~/.config/calcure/info.log
|
|
||||||
language = fr
|
|
||||||
default_view = calendar
|
|
||||||
default_calendar_view = monthly
|
|
||||||
birthdays_from_abook = Yes
|
|
||||||
show_keybindings = Yes
|
|
||||||
privacy_mode = No
|
|
||||||
show_weather = No
|
|
||||||
weather_city =
|
|
||||||
weather_metric_units = Yes
|
|
||||||
minimal_today_indicator = Yes
|
|
||||||
minimal_days_indicator = Yes
|
|
||||||
minimal_weekend_indicator = Yes
|
|
||||||
show_calendar_borders = No
|
|
||||||
show_moon_phases = No
|
|
||||||
cut_titles_by_cell_length = No
|
|
||||||
ask_confirmations = Yes
|
|
||||||
ask_confirmation_to_quit = Yes
|
|
||||||
use_unicode_icons = Yes
|
|
||||||
show_current_time = No
|
|
||||||
show_holidays = Yes
|
|
||||||
show_nothing_planned = Yes
|
|
||||||
one_timer_at_a_time = No
|
|
||||||
holiday_country = France
|
|
||||||
use_persian_calendar = No
|
|
||||||
start_week_day = 1
|
|
||||||
weekend_days = 6,7
|
|
||||||
refresh_interval = 1
|
|
||||||
data_reload_interval = 0
|
|
||||||
split_screen = Yes
|
|
||||||
right_pane_percentage = 25
|
|
||||||
journal_header = JOURNAL
|
|
||||||
event_icon = •
|
|
||||||
privacy_icon = •
|
|
||||||
today_icon = •
|
|
||||||
birthday_icon = ★
|
|
||||||
holiday_icon = ⛱
|
|
||||||
hidden_icon = ...
|
|
||||||
done_icon = ✔
|
|
||||||
todo_icon = •
|
|
||||||
important_icon = ‣
|
|
||||||
separator_icon = │
|
|
||||||
deadline_icon = ⚑
|
|
||||||
|
|
||||||
[Colors]
|
|
||||||
color_today = 2
|
|
||||||
color_events = 4
|
|
||||||
color_days = 7
|
|
||||||
color_day_names = 4
|
|
||||||
color_weekends = 1
|
|
||||||
color_weekend_names = 1
|
|
||||||
color_hints = 7
|
|
||||||
color_prompts = 7
|
|
||||||
color_confirmations = 1
|
|
||||||
color_birthdays = 1
|
|
||||||
color_holidays = 2
|
|
||||||
color_todo = 7
|
|
||||||
color_done = 6
|
|
||||||
color_title = 4
|
|
||||||
color_calendar_header = 4
|
|
||||||
color_important = 1
|
|
||||||
color_unimportant = 6
|
|
||||||
color_timer = 2
|
|
||||||
color_timer_paused = 7
|
|
||||||
color_time = 7
|
|
||||||
color_deadlines = 3
|
|
||||||
color_weather = 2
|
|
||||||
color_active_pane = 2
|
|
||||||
color_separator = 7
|
|
||||||
color_calendar_border = 7
|
|
||||||
color_ics_calendars = 2,3,1,7,4,5,2,3,1,7
|
|
||||||
color_background = -1
|
|
||||||
|
|
||||||
[Styles]
|
|
||||||
bold_today = No
|
|
||||||
bold_days = No
|
|
||||||
bold_day_names = No
|
|
||||||
bold_weekends = No
|
|
||||||
bold_weekend_names = No
|
|
||||||
bold_title = No
|
|
||||||
bold_active_pane = No
|
|
||||||
underlined_today = No
|
|
||||||
underlined_days = No
|
|
||||||
underlined_day_names = No
|
|
||||||
underlined_weekends = No
|
|
||||||
underlined_weekend_names = No
|
|
||||||
underlined_title = No
|
|
||||||
underlined_active_pane = No
|
|
||||||
strikethrough_done = No
|
|
||||||
|
|
||||||
[Event icons]
|
|
||||||
travel = ✈
|
|
||||||
plane = ✈
|
|
||||||
voyage = ✈
|
|
||||||
flight = ✈
|
|
||||||
airport = ✈
|
|
||||||
trip = 🏕
|
|
||||||
vacation = ⛱
|
|
||||||
holiday = ⛱
|
|
||||||
day-off = ⛱
|
|
||||||
hair = ✂
|
|
||||||
barber = ✂
|
|
||||||
beauty = ✂
|
|
||||||
nails = ✂
|
|
||||||
game = ♟
|
|
||||||
match = ♟
|
|
||||||
play = ♟
|
|
||||||
interview = 🎙️
|
|
||||||
conference = 🎙️
|
|
||||||
talk = 🎙️
|
|
||||||
dating = ♥
|
|
||||||
concert = ♪
|
|
||||||
dance = ♪
|
|
||||||
music = ♪
|
|
||||||
rehearsal = ♪
|
|
||||||
call = 🕻
|
|
||||||
zoom = 🕻
|
|
||||||
deadline = ⚑
|
|
||||||
over = ⚑
|
|
||||||
finish = ⚑
|
|
||||||
end = ⚑
|
|
||||||
doctor = ✚
|
|
||||||
dentist = ✚
|
|
||||||
medical = ✚
|
|
||||||
hospital = ✚
|
|
||||||
party = ☘
|
|
||||||
bar = ☘
|
|
||||||
museum = ⛬
|
|
||||||
meet = ⛬
|
|
||||||
sport = ⛷
|
|
||||||
gym = 🏋
|
|
||||||
training = ⛷
|
|
||||||
email = ✉
|
|
||||||
letter = ✉
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
1,2026,3,7,"ARP",1,once,normal
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
[WARNING] Couldn't load birthdays. File. /home/fy59/.abook/addressbook does not exist.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
CompileFlags:
|
|
||||||
Add:
|
|
||||||
- "-std=c17"
|
|
||||||
1
cliphist/.config/cliphist/config
Normal file
1
cliphist/.config/cliphist/config
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
max-items 50
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
max-items 50
|
|
||||||
max-size 100000
|
|
||||||
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
file:///home/fy59/Documents/Lardon/lardon3d
|
||||||
file:///home/fy59/Downloads
|
file:///home/fy59/Downloads
|
||||||
file:///home/fy59/Ansible
|
file:///home/fy59/Ansible
|
||||||
file:///home/fy59/Documents
|
file:///home/fy59/Documents
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
[Settings]
|
|
||||||
gtk-theme-name=Adwaita-dark
|
|
||||||
gtk-icon-theme-name = "Tela-dracula-dark"
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
[Settings]
|
|
||||||
gtk-theme-name=Adwaita-dark
|
|
||||||
gtk-icon-theme-name = "Tela-dracula-dark"
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
/run/user/1000/hyprwhspr/audio_level
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
/run/user/1000/hyprwhspr/recording_control
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
/run/user/1000/hyprwhspr/recording_status
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Autostart #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
# Filtre lumière bleue (wlsunset)
|
|
||||||
# Notifications (swaync)
|
|
||||||
# gnome-keyring-daemon
|
|
||||||
# Verrouillage auto (swayidle)
|
|
||||||
# protonmail-bridge
|
|
||||||
# cliphist
|
|
||||||
# proton-pass
|
|
||||||
# exec-once=swayidle -w timeout 300 '~/.config/mango/scripts/lock.sh' timeout 310 'wlopm --off "*"' resume 'wlopm --on "*"' before-sleep '~/.config/mango/scripts/lock.sh'
|
|
||||||
# Les outils précédent ont été ajouter à systemd --user
|
|
||||||
#
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
# Wallpapers
|
|
||||||
exec-once=swaybg -i ~/.wallpapers/arch_rainbow.jpg
|
|
||||||
|
|
||||||
# Lancement au démarrage
|
|
||||||
exec-once=kitty --class kitty-1
|
|
||||||
exec-once=kitty --class kitty-2
|
|
||||||
exec-once=kitty --class kitty-3
|
|
||||||
exec-once=kitty --class kitty-mon --directory $HOME
|
|
||||||
exec-once=chromium
|
|
||||||
exec-once=gtk-launch chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default
|
|
||||||
exec-once=gtk-launch
|
|
||||||
exec-once=thunderbird
|
|
||||||
exec-once=spotify-launcher
|
|
||||||
exec-once=waybar
|
|
||||||
exec-once=AppFlowy
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Binds Applications #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# Applications system
|
|
||||||
binds=SUPER,Return,spawn,kitty
|
|
||||||
binds=SUPER+CTRL,t,spawn,thunderbird
|
|
||||||
binds=SUPER+SHIFT,b,spawn,blueman-manager
|
|
||||||
binds=SUPER+SHIFT,p,spawn,proton-pass
|
|
||||||
binds=ALT,p,toggle_named_scratchpad,Proton Pass,none,proton-pass
|
|
||||||
binds=SUPER+SHIFT,m,spawn,protonmail-bridge
|
|
||||||
binds=SUPER+CTRL,l,spawn,swaylock
|
|
||||||
binds=SUPER+CTRL,e,spawn,wofi --cache-file=/dev/null -Dimage_size=26 -Dynamic_lines=true --location top --yoffset=10 --width=600 --height=300 --gtk-dark --show drun
|
|
||||||
binds=SUPER,v,spawn,~/.config/mango/scripts/copypast
|
|
||||||
binds=NONE,Print,spawn,~/.config/mango/scripts/screenshot-clip.sh
|
|
||||||
binds=SUPER+CTRL,f,spawn,AppFlowy
|
|
||||||
binds=SUPER+CTRL,g,spawn,gimp
|
|
||||||
|
|
||||||
# Browsers & net
|
|
||||||
binds=SUPER,b,spawn,chromium
|
|
||||||
binds=SUPER+SHIFT,f,spawn,firefox
|
|
||||||
binds=SUPER,t,spawn,thunderbird
|
|
||||||
|
|
||||||
# IA's
|
|
||||||
binds=SUPER,m,spawn,spotify-launcher
|
|
||||||
|
|
||||||
# Virtualisation
|
|
||||||
binds=SUPER+SHIFT,v,spawn,virt-manager
|
|
||||||
|
|
||||||
# Fichiers
|
|
||||||
binds=SUPER+SHIFT,t,spawn,thunar
|
|
||||||
binds=ALT,y,spawn,kitty --class kitty-yazi -- sh -c "yazi"
|
|
||||||
|
|
||||||
|
|
@ -1,94 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Navigation bindings #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# switch window focus
|
|
||||||
binds=SUPER,Tab,focusstack,next
|
|
||||||
binds=SUPER,Left,focusdir,left
|
|
||||||
binds=SUPER,Right,focusdir,right
|
|
||||||
binds=SUPER,Up,focusdir,up
|
|
||||||
binds=SUPER,Down,focusdir,down
|
|
||||||
|
|
||||||
# swap window
|
|
||||||
binds=SUPER+SHIFT,Up,exchange_client,up
|
|
||||||
binds=SUPER+SHIFT,Down,exchange_client,down
|
|
||||||
binds=SUPER+SHIFT,Left,exchange_client,left
|
|
||||||
binds=SUPER+SHIFT,Right,exchange_client,right
|
|
||||||
|
|
||||||
# switch window status
|
|
||||||
binds=SUPER,g,toggleglobal,
|
|
||||||
binds=SUPER,Tab,toggleoverview,
|
|
||||||
binds=SUPER,backslash,togglefloating,
|
|
||||||
binds=SUPER,a,togglemaximizescreen,
|
|
||||||
binds=SUPER,f,togglefullscreen,
|
|
||||||
binds=SUPER+SHIFT,f,togglefakefullscreen,
|
|
||||||
binds=SUPER,i,minimized,
|
|
||||||
binds=SUPER,o,toggleoverlay,
|
|
||||||
binds=SUPER+SHIFT,I,restore_minimized
|
|
||||||
binds=SUPER,z,toggle_scratchpad
|
|
||||||
|
|
||||||
# tag switch
|
|
||||||
binds=ALT,Left,viewtoleft,0
|
|
||||||
binds=ALT+SHIFT,Left,viewtoleft_have_client,0
|
|
||||||
binds=ALT,Right,viewtoright,0
|
|
||||||
binds=ALT+SHIFT,Right,viewtoright_have_client,0
|
|
||||||
binds=ALT+SUPER,Left,tagtoleft,0
|
|
||||||
binds=ALT+SUPER,Right,tagtoright,0
|
|
||||||
|
|
||||||
binds=ALT,ampersand,view,1,0
|
|
||||||
binds=ALT,eacute,view,2,0
|
|
||||||
binds=ALT,quotedbl,view,3,0
|
|
||||||
binds=ALT,apostrophe,view,4,0
|
|
||||||
binds=ALT,parenleft,view,5,0
|
|
||||||
binds=ALT,minus,view,6,0
|
|
||||||
binds=ALT,egrave,view,7,0
|
|
||||||
binds=ALT,underscore,view,8,0
|
|
||||||
binds=ALT,ccedilla,view,9,0
|
|
||||||
|
|
||||||
# tag: move client to the tag and focus it
|
|
||||||
# tagsilent: move client to the tag and not focus it
|
|
||||||
# bind=ALT,1,tagsilent,1
|
|
||||||
binds=ALT+SUPER,ampersand,tag,1,0
|
|
||||||
binds=ALT+SUPER,eacute,tag,2,0
|
|
||||||
binds=ALT+SUPER,quotedbl,tag,3,0
|
|
||||||
binds=ALT+SUPER,apostrophe,tag,4,0
|
|
||||||
binds=ALT+SUPER,parenleft,tag,5,0
|
|
||||||
binds=ALT+SUPER,minus,tag,6,0
|
|
||||||
binds=ALT+SUPER,egrave,tag,7,0
|
|
||||||
binds=ALT+SUPER,underscore,tag,8,0
|
|
||||||
binds=ALT+SUPER,ccedilla,tag,9,0
|
|
||||||
|
|
||||||
# monitor switch
|
|
||||||
binds=CTRL+SHIFT,Left,focusmon,left
|
|
||||||
binds=CTRL+SHIFT,Right,focusmon,right
|
|
||||||
binds=CTRL+SUPER,Left,tagmon,left
|
|
||||||
binds=CTRL+SUPER,Right,tagmon,right
|
|
||||||
|
|
||||||
# gaps
|
|
||||||
binds=ALT+SHIFT,X,incgaps,1
|
|
||||||
binds=ALT+SHIFT,Z,incgaps,-1
|
|
||||||
binds=ALT+SHIFT,R,togglegaps
|
|
||||||
|
|
||||||
# movewin
|
|
||||||
# binds=CTRL+SHIFT,Up,movewin,+0,-50
|
|
||||||
# binds=CTRL+SHIFT,Down,movewin,+0,+50
|
|
||||||
# binds=CTRL+SHIFT,Left,movewin,-50,+0
|
|
||||||
# binds=CTRL+SHIFT,Right,movewin,+50,+0
|
|
||||||
|
|
||||||
# resizewin
|
|
||||||
binds=SUPER+CTRL,Up,resizewin,+0,-10
|
|
||||||
binds=SUPER+CTRL,Down,resizewin,+0,+10
|
|
||||||
binds=SUPER+CTRL,Left,resizewin,-10,+0
|
|
||||||
binds=SUPER+CTRL,Right,resizewin,+10,+0
|
|
||||||
|
|
||||||
# Mouse Button Bindings
|
|
||||||
# btn_left and btn_right can't bind none mod key
|
|
||||||
mousebind=SUPER,btn_left,moveresize,curmove
|
|
||||||
mousebind=NONE,btn_middle,togglemaximizescreen,0
|
|
||||||
mousebind=SUPER,btn_right,moveresize,curresize
|
|
||||||
|
|
||||||
# Axis Bindings
|
|
||||||
axisbind=SUPER,UP,viewtoleft_have_client
|
|
||||||
# axisbind=SUPER,DOWN,viewtoright_have_client
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Binds sys #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# Key Bindings
|
|
||||||
# key name refer to `xev` or `wev` command output,
|
|
||||||
# mod keys name: super,ctrl,alt,shift,none
|
|
||||||
|
|
||||||
# Layout Bindings
|
|
||||||
# scrolle5 layout
|
|
||||||
binds=ALT,e,set_proportion,0.5
|
|
||||||
binds=ALT+SHIFT,e,set_proportion,1
|
|
||||||
binds=SUPER,x,switch_proportion_preset,
|
|
||||||
|
|
||||||
# switch layou5
|
|
||||||
binds=SUPER,n,switch_layout
|
|
||||||
|
|
||||||
# reload config
|
|
||||||
binds=SUPER,r,reload_config
|
|
||||||
binds=SUPER+CTRL,w,~/.config/waybar/scripts/restartWaybar.sh
|
|
||||||
|
|
||||||
# exit
|
|
||||||
binds=SUPER+CTRL,q,quit
|
|
||||||
binds=SUPER,q,killclient
|
|
||||||
|
|
||||||
# Brightness
|
|
||||||
bind=NONE,XF86MonBrightnessUp,spawn,brightnessctl set +2%
|
|
||||||
bind=SHIFT,XF86MonBrightnessUp,spawn,brightnessctl set 100%
|
|
||||||
bind=NONE,XF86MonBrightnessDown,spawn,brightnessctl set 2%-
|
|
||||||
bind=SHIFT,XF86MonBrightnessDown,spawn,brightnessctl set 10%
|
|
||||||
|
|
||||||
# Volume
|
|
||||||
bind=NONE,XF86AudioRaiseVolume,spawn,wpctl set-volume @DEFAULT_SINK@ 2%+
|
|
||||||
bind=NONE,XF86AudioLowerVolume,spawn,wpctl set-volume @DEFAULT_SINK@ 2%-
|
|
||||||
bind=NONE,XF86AudioMute,spawn,wpctl set-mute @DEFAULT_SINK@ toggle
|
|
||||||
bind=SHIFT,XF86AudioMute,spawn,wpctl set-mute @DEFAULT_SOURCE@ toggle
|
|
||||||
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Mango Config #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# More option see https://github.com/DreamMaoMao/mango/wiki/
|
|
||||||
|
|
||||||
# Sources
|
|
||||||
source=~/.config/mango/rules.conf
|
|
||||||
source=~/.config/mango/style.conf
|
|
||||||
source=~/.config/mango/bind_apps.conf
|
|
||||||
source=~/.config/mango/bind_navigation.conf
|
|
||||||
source=~/.config/mango/bind_sys.conf
|
|
||||||
source=~/.config/mango/gestures.conf
|
|
||||||
source=~/.config/mango/layout_settings.conf
|
|
||||||
source=~/.config/mango/input.conf
|
|
||||||
source=~/.config/mango/output.conf
|
|
||||||
source=~/.config/mango/autostart.conf
|
|
||||||
|
|
||||||
# Overview Setting
|
|
||||||
hotarea_size=10
|
|
||||||
enable_hotarea=1
|
|
||||||
ov_tab_mode=0
|
|
||||||
overviewgappi=5
|
|
||||||
overviewgappo=30
|
|
||||||
|
|
||||||
# Misc
|
|
||||||
no_border_when_single=0
|
|
||||||
axis_bind_apply_timeout=100
|
|
||||||
focus_on_activate=1
|
|
||||||
idleinhibit_ignore_visible=0
|
|
||||||
sloppyfocus=1
|
|
||||||
warpcursor=1
|
|
||||||
focus_cross_monitor=0
|
|
||||||
focus_cross_tag=0
|
|
||||||
enable_floating_snap=0
|
|
||||||
snap_distance=30
|
|
||||||
cursor_size=24
|
|
||||||
drag_tile_to_tile=1
|
|
||||||
drag_tile_small=1
|
|
||||||
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Gestures #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# 3-finger: Window focus
|
|
||||||
gesturebind=none,left,3,focusdir,right
|
|
||||||
gesturebind=none,right,3,focusdir,left
|
|
||||||
gesturebind=none,up,3,focusdir,up
|
|
||||||
gesturebind=none,down,3,focusdir,down
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Input #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# keyboard
|
|
||||||
repeat_rate=25
|
|
||||||
repeat_delay=600
|
|
||||||
numlockon=1
|
|
||||||
xkb_rules_layout=fr
|
|
||||||
|
|
||||||
# Trackpad
|
|
||||||
# need relogin to make it apply
|
|
||||||
disable_trackpad=0
|
|
||||||
tap_to_click=1
|
|
||||||
tap_and_drag=1
|
|
||||||
drag_lock=1
|
|
||||||
trackpad_natural_scrolling=1
|
|
||||||
disable_while_typing=1
|
|
||||||
left_handed=0
|
|
||||||
middle_button_emulation=0
|
|
||||||
swipe_min_threshold=1
|
|
||||||
button_map=1
|
|
||||||
|
|
||||||
# mouse
|
|
||||||
# need relogin to make it apply
|
|
||||||
mouse_natural_scrolling=1
|
|
||||||
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Layout settings #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# layout support:
|
|
||||||
# tile,scroller,grid,deck,monocle,center_tile,vertical_tile,vertical_scroller
|
|
||||||
tagrule=id:1,layout_name:tile
|
|
||||||
tagrule=id:2,layout_name:scroller
|
|
||||||
tagrule=id:3,layout_name:scroller
|
|
||||||
tagrule=id:4,layout_name:scroller
|
|
||||||
tagrule=id:5,layout_name:scroller
|
|
||||||
tagrule=id:6,layout_name:scroller
|
|
||||||
tagrule=id:7,layout_name:scroller
|
|
||||||
tagrule=id:8,layout_name:scroller
|
|
||||||
tagrule=id:9,layout_name:scroller
|
|
||||||
|
|
||||||
# Scroller Layout Setting
|
|
||||||
scroller_structs=20
|
|
||||||
scroller_default_proportion=0.8
|
|
||||||
scroller_focus_center=0
|
|
||||||
scroller_prefer_center=0
|
|
||||||
edge_scroller_pointer_focus=1
|
|
||||||
scroller_default_proportion_single=1.0
|
|
||||||
scroller_proportion_preset=0.5,0.8,1.0
|
|
||||||
|
|
||||||
# Master-Stack Layout Setting
|
|
||||||
new_is_master=1
|
|
||||||
default_mfact=0.55
|
|
||||||
default_nmaster=1
|
|
||||||
smartgaps=0
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Output #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# monitor
|
|
||||||
monitorrule=name:^eDP-1$,width:3200,height:2000,refresh:120,scale:1.5
|
|
||||||
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Rules #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# Tag 1 : shell / terminaux / Perplexity
|
|
||||||
windowrule=tags:1,appid:kitty-1
|
|
||||||
windowrule=tags:1,appid:kitty-2
|
|
||||||
windowrule=tags:1,appid:kitty-3
|
|
||||||
|
|
||||||
# Tag 2 : web
|
|
||||||
windowrule=tags:2,scroller_proportion:1,appid:chromium
|
|
||||||
windowrule=tags:2,appid:firefox
|
|
||||||
|
|
||||||
# Tag 5 : web
|
|
||||||
windowrule=tags:5,scroller_proportion:1,appid:AppFlowy
|
|
||||||
|
|
||||||
# Tag 6 : web
|
|
||||||
windowrule=tags:6,scroller_proportion:1,appid:kitty-mon
|
|
||||||
|
|
||||||
# Tag 7 : web
|
|
||||||
windowrule=tags:7,scroller_proportion:1,appid:chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default
|
|
||||||
|
|
||||||
# Tag 8 : mail
|
|
||||||
windowrule=tags:8,scroller_proportion:0.5,appid:proton-bridge
|
|
||||||
windowrule=tags:8,scroller_proportion:1,appid:org.mozilla.Thunderbird
|
|
||||||
|
|
||||||
# Tag 9 : musique
|
|
||||||
# adapte la valeur d'appid à ce que ton script affiche pour Spotify
|
|
||||||
windowrule=tags:9,scroller_proportion:1,appid:Spotify
|
|
||||||
|
|
||||||
windowrule=isfloating:1,width:800,height:600,offsetx:0,offsety:0,appid:blueman-manager
|
|
||||||
windowrule=isnamedscratchpad:1,width:1000,height:700,appid:Proton Pass
|
|
||||||
|
|
||||||
# layer rule
|
|
||||||
layerrule=animation_type_open:slide,layer_name:wofi
|
|
||||||
layerrule=animation_type_close:slide,layer_name:wofi
|
|
||||||
|
|
||||||
# Specifics rules
|
|
||||||
windowrule=scroller_proportion:0.5,appid:kitty-yazi
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
thumb_dir="${XDG_CACHE_HOME:-$HOME/.cache}/cliphist/thumbs"
|
|
||||||
mkdir -p "$thumb_dir"
|
|
||||||
|
|
||||||
clip_list="$(cliphist list)"
|
|
||||||
|
|
||||||
# Nettoyer les vignettes orphelines
|
|
||||||
for thumb in "$thumb_dir"/*; do
|
|
||||||
[ -e "$thumb" ] || continue
|
|
||||||
clip_id="${thumb##*/}"
|
|
||||||
clip_id="${clip_id%.*}"
|
|
||||||
|
|
||||||
if ! printf '%s\n' "$clip_list" | rg -q "^${clip_id}[[:space:]]"; then
|
|
||||||
rm -f "$thumb"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
read -r -d '' prog <<EOF
|
|
||||||
match(\$0, /^([0-9]+)[[:space:]]+\\[\\[ binary data .* (png|jpeg|jpg|bmp|webp) [0-9]+x[0-9]+ \\]\\]/, grp) {
|
|
||||||
id = grp[1]
|
|
||||||
ext = grp[2]
|
|
||||||
if (ext == "jpeg") ext = "jpg"
|
|
||||||
|
|
||||||
image = id "." ext
|
|
||||||
thumb = "$thumb_dir/" image
|
|
||||||
|
|
||||||
cmd = "[ -f '" thumb "' ] || printf '%s\\n' '" \$0 "' | cliphist decode | magick - -resize '256x256>' '" thumb "'"
|
|
||||||
system(cmd)
|
|
||||||
|
|
||||||
print "img:" thumb
|
|
||||||
next
|
|
||||||
}
|
|
||||||
1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
choice=$(
|
|
||||||
gawk "$prog" <<< "$clip_list" |
|
|
||||||
wofi -I --dmenu --cache-file=/dev/null \
|
|
||||||
-Dimage_size=100 -Dynamic_lines=true \
|
|
||||||
--xoffset=600 --yoffset=20 --width=45% --height=45% --gtk-dark
|
|
||||||
)
|
|
||||||
|
|
||||||
[ -z "$choice" ] && exit 1
|
|
||||||
|
|
||||||
if [ "${choice:0:4}" = "img:" ]; then
|
|
||||||
thumb_file="${choice:4}"
|
|
||||||
clip_id="${thumb_file##*/}"
|
|
||||||
clip_id="${clip_id%.*}"
|
|
||||||
|
|
||||||
printf '%s\n' "$clip_list" |
|
|
||||||
rg "^${clip_id}[[:space:]]" |
|
|
||||||
head -n 1 |
|
|
||||||
cliphist decode |
|
|
||||||
wl-copy
|
|
||||||
else
|
|
||||||
printf '%s\n' "$choice" |
|
|
||||||
cliphist decode |
|
|
||||||
wl-copy
|
|
||||||
fi
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
img="/tmp/gtklock-shot.png"
|
|
||||||
blur="/tmp/gtklock-blur.png"
|
|
||||||
|
|
||||||
grim "$img"
|
|
||||||
magick "$img" -blur 0x14 -brightness-contrast -8x-5 "$blur"
|
|
||||||
|
|
||||||
pidof gtklock || gtklock -d
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
grim -g "$(slurp)" - | wl-copy
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
||||||
##############################
|
|
||||||
# #
|
|
||||||
# Style #
|
|
||||||
# #
|
|
||||||
##############################
|
|
||||||
|
|
||||||
# Window effect
|
|
||||||
blur=0
|
|
||||||
blur_layer=0
|
|
||||||
blur_optimized=1
|
|
||||||
blur_params_num_passes = 2
|
|
||||||
blur_params_radius = 5
|
|
||||||
blur_params_noise = 0.02
|
|
||||||
blur_params_brightness = 0.9
|
|
||||||
blur_params_contrast = 0.9
|
|
||||||
blur_params_saturation = 1.2
|
|
||||||
|
|
||||||
shadows = 0
|
|
||||||
layer_shadows = 0
|
|
||||||
shadow_only_floating = 1
|
|
||||||
shadows_size = 10
|
|
||||||
shadows_blur = 15
|
|
||||||
shadows_position_x = 0
|
|
||||||
shadows_position_y = 0
|
|
||||||
shadowscolor= 0x000000ff
|
|
||||||
|
|
||||||
border_radius=4
|
|
||||||
no_radius_when_single=0
|
|
||||||
focused_opacity=1.0
|
|
||||||
unfocused_opacity=0.8
|
|
||||||
|
|
||||||
# Animation Configuration(support type:zoom,slide)
|
|
||||||
# tag_animation_direction: 1-horizontal,0-vertical
|
|
||||||
animations=1
|
|
||||||
layer_animations=1
|
|
||||||
animation_type_open=slide
|
|
||||||
animation_type_close=slide
|
|
||||||
animation_fade_in=1
|
|
||||||
animation_fade_out=1
|
|
||||||
tag_animation_direction=1
|
|
||||||
zoom_initial_ratio=0.4
|
|
||||||
zoom_end_ratio=0.8
|
|
||||||
fadein_begin_opacity=0.5
|
|
||||||
fadeout_begin_opacity=0.8
|
|
||||||
animation_duration_move=250
|
|
||||||
animation_duration_open=220
|
|
||||||
animation_duration_tag=100
|
|
||||||
animation_duration_close=180
|
|
||||||
animation_duration_focus=0
|
|
||||||
animation_curve_open=0.46,1.0,0.29,1
|
|
||||||
animation_curve_move=0.46,1.0,0.29,1
|
|
||||||
animation_curve_tag=0.46,1.0,0.29,1
|
|
||||||
animation_curve_close=0.08,0.92,0,1
|
|
||||||
animation_curve_focus=0.46,1.0,0.29,1
|
|
||||||
animation_curve_opafadeout=0.5,0.5,0.5,0.5
|
|
||||||
animation_curve_opafadein=0.46,1.0,0.29,1
|
|
||||||
|
|
||||||
# Appearance
|
|
||||||
gappih=5
|
|
||||||
gappiv=5
|
|
||||||
gappoh=10
|
|
||||||
gappov=10
|
|
||||||
scratchpad_width_ratio=0.8
|
|
||||||
scratchpad_height_ratio=0.9
|
|
||||||
borderpx=2
|
|
||||||
rootcolor=0x201b14ff
|
|
||||||
bordercolor=0x444444ff
|
|
||||||
dropcolor=0x8FBA7C55
|
|
||||||
focuscolor=0xb4befeff
|
|
||||||
maximizescreencolor=0x89aa61ff
|
|
||||||
urgentcolor=0xad401fff
|
|
||||||
scratchpadcolor=0x516c93ff
|
|
||||||
globalcolor=0xb153a7ff
|
|
||||||
overlaycolor=0x14a57cff
|
|
||||||
|
|
||||||
|
|
@ -1,33 +1,32 @@
|
||||||
{
|
{
|
||||||
"LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
|
"LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
|
||||||
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
||||||
"catppuccin": { "branch": "main", "commit": "c7c692a0ad3080710893abbae100171819a3e4be" },
|
"catppuccin": { "branch": "main", "commit": "edefef779ab08ce1a4a404713e3012b0d202bd35" },
|
||||||
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
|
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
|
||||||
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
|
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
|
||||||
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
|
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
|
||||||
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
||||||
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
"friendly-snippets": { "branch": "main", "commit": "b4d01b0fdf3c9a549961c2f9ffe8dc09be166219" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||||
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
|
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
|
||||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "7adc933dabcc7c86ae6b07aff7ee68eac398491f" },
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "137bd0feba2c1885545b6934d36f5e5aa6adb486" },
|
||||||
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
|
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
|
||||||
"mini.starter": { "branch": "main", "commit": "25de4998197d59673f1918968a8f4060195edca0" },
|
"mini.starter": { "branch": "main", "commit": "25de4998197d59673f1918968a8f4060195edca0" },
|
||||||
"neo-tree.nvim": { "branch": "v3.x", "commit": "ebd66767191714e008ce73b769518a763ff31bdc" },
|
"neo-tree.nvim": { "branch": "v3.x", "commit": "1a14083046d96e88e361d1da00761c40d45012f3" },
|
||||||
"neowiki.nvim": { "branch": "main", "commit": "85dddf6057b07d4d6772b2f90e754a18e958a865" },
|
"nui.nvim": { "branch": "main", "commit": "10fc361835c856ba4233ef5ea135b919bf3dce97" },
|
||||||
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
|
"nvim-autopairs": { "branch": "master", "commit": "430522f95fe4fb7c511ec64f8c1a90cc6a66c05c" },
|
||||||
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
|
|
||||||
"nvim-cmp": { "branch": "main", "commit": "2ffe79f1f021def8dd1fcd81deb16f1bb0d989f3" },
|
"nvim-cmp": { "branch": "main", "commit": "2ffe79f1f021def8dd1fcd81deb16f1bb0d989f3" },
|
||||||
"nvim-colorizer.lua": { "branch": "master", "commit": "72a05f62c52241bc7441c820eb53946f92b2e6a4" },
|
"nvim-colorizer.lua": { "branch": "master", "commit": "72a05f62c52241bc7441c820eb53946f92b2e6a4" },
|
||||||
"nvim-lsp-file-operations": { "branch": "master", "commit": "b9c795d3973e8eec22706af14959bc60c579e771" },
|
"nvim-lsp-file-operations": { "branch": "master", "commit": "0b939aff068c859b6f8cdbc3b3e676d038e6e15d" },
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "d592c1e6ad9a0a01b3d5ed3f0345d68407167181" },
|
"nvim-lspconfig": { "branch": "master", "commit": "046b1a797af1effe8e0474b9af9657a3761ec58a" },
|
||||||
"nvim-tcss": { "branch": "main", "commit": "bf9001416158f32fe7e92c42de94de3595aa13e5" },
|
"nvim-tcss": { "branch": "main", "commit": "bf9001416158f32fe7e92c42de94de3595aa13e5" },
|
||||||
"nvim-treesitter": { "branch": "main", "commit": "a45a920ec04cda5624f6dea0ff6454c81c3ad2d5" },
|
"nvim-treesitter": { "branch": "main", "commit": "f603a2f4da48728f80257fb5fbb90145fd1dc173" },
|
||||||
"nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" },
|
"nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" },
|
||||||
"nvim-web-devicons": { "branch": "master", "commit": "2ae6958df7ced50baac5035cec0c15799eedfbf7" },
|
"nvim-web-devicons": { "branch": "master", "commit": "58447c1fca354bbf184425e4a8d01deecbd6f3c4" },
|
||||||
"nvim-window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" },
|
"nvim-window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" },
|
||||||
"outline.nvim": { "branch": "main", "commit": "2a132953b944561d45b52e4541ebfff71934a742" },
|
"outline.nvim": { "branch": "main", "commit": "2a132953b944561d45b52e4541ebfff71934a742" },
|
||||||
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
|
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
|
||||||
"render-markdown.nvim": { "branch": "main", "commit": "f422cb5c6855f150e2ddcfaf44e7157b98b34f6a" },
|
"render-markdown.nvim": { "branch": "main", "commit": "640a3ec6d538bad17c328be373c7cad0293d9589" },
|
||||||
"rustaceanvim": { "branch": "main", "commit": "e9c5aaba16fead831379d5f44617547a90b913c7" },
|
"rustaceanvim": { "branch": "main", "commit": "e9c5aaba16fead831379d5f44617547a90b913c7" },
|
||||||
"telescope-file-browser.nvim": { "branch": "master", "commit": "3610dc7dc91f06aa98b11dca5cc30dfa98626b7e" },
|
"telescope-file-browser.nvim": { "branch": "master", "commit": "3610dc7dc91f06aa98b11dca5cc30dfa98626b7e" },
|
||||||
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
||||||
|
|
|
||||||
|
|
@ -31,5 +31,36 @@ require("lazy").setup({
|
||||||
-- colorscheme that will be used when installing plugins.
|
-- colorscheme that will be used when installing plugins.
|
||||||
install = { colorscheme = { "habamax" } },
|
install = { colorscheme = { "habamax" } },
|
||||||
-- automatically check for plugin updates
|
-- automatically check for plugin updates
|
||||||
checker = { enabled = true },
|
checker = { enabled = false },
|
||||||
|
})
|
||||||
|
local lazy_update_group =
|
||||||
|
vim.api.nvim_create_augroup("LazyAutoUpdate", { clear = true })
|
||||||
|
|
||||||
|
-- Fermer l'interface lorsque la mise à jour est terminée
|
||||||
|
vim.api.nvim_create_autocmd("User", {
|
||||||
|
group = lazy_update_group,
|
||||||
|
pattern = "LazyUpdate",
|
||||||
|
once = true,
|
||||||
|
callback = function()
|
||||||
|
vim.schedule(function()
|
||||||
|
local ok, view = pcall(require, "lazy.view")
|
||||||
|
|
||||||
|
if ok and view.view and view.visible() then
|
||||||
|
view.view:close()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Lancer la mise à jour à l'ouverture de Neovim
|
||||||
|
vim.api.nvim_create_autocmd("VimEnter", {
|
||||||
|
group = lazy_update_group,
|
||||||
|
once = true,
|
||||||
|
callback = function()
|
||||||
|
vim.schedule(function()
|
||||||
|
require("lazy").update({
|
||||||
|
show = true,
|
||||||
|
})
|
||||||
|
end)
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
return {
|
|
||||||
"echaya/neowiki.nvim",
|
|
||||||
opts = {
|
|
||||||
wiki_dirs = {
|
|
||||||
-- neowiki.nvim supports both absolute and tilde-expanded paths
|
|
||||||
{ name = "Pentest", path = "~/.dotfiles/wiki/Wiki/pentest/" },
|
|
||||||
{ name = "Osint", path = "~/.dotfiles/wiki/Wiki/osint/" },
|
|
||||||
{ name = "Python", path = "~/.dotfiles/wiki/Wiki/python/" },
|
|
||||||
{ name = "ArchASP", path = "~/.dotfiles/wiki/Wiki/archasp/" },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ "<leader>ww", "<cmd>lua require('neowiki').open_wiki()<cr>", desc = "Open Wiki" },
|
|
||||||
{ "<leader>wW", "<cmd>lua require('neowiki').open_wiki_floating()<cr>", desc = "Open Wiki in Floating Window" },
|
|
||||||
{ "<leader>wT", "<cmd>lua require('neowiki').open_wiki_new_tab()<cr>", desc = "Open Wiki in Tab" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
return {
|
|
||||||
"nvim-tree/nvim-tree.lua",
|
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
||||||
opts = {
|
|
||||||
hijack_netrw = true,
|
|
||||||
sync_root_with_cwd = true,
|
|
||||||
view = { width = 30 },
|
|
||||||
renderer = { group_empty = true },
|
|
||||||
filters = { dotfiles = false },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,46 +1,40 @@
|
||||||
return {
|
return {
|
||||||
{
|
{
|
||||||
"nvim-mini/mini.starter",
|
"nvim-mini/mini.starter",
|
||||||
version = false,
|
version = false,
|
||||||
config = function()
|
config = function()
|
||||||
local starter = require("mini.starter")
|
local starter = require("mini.starter")
|
||||||
|
|
||||||
starter.setup({
|
starter.setup({
|
||||||
autoopen = true,
|
autoopen = true,
|
||||||
header = table.concat({
|
header = table.concat({
|
||||||
"███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗",
|
"███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗",
|
||||||
"████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║",
|
"████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║",
|
||||||
"██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║",
|
"██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║",
|
||||||
"██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║",
|
"██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║",
|
||||||
"██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║",
|
"██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║",
|
||||||
"",
|
"",
|
||||||
"##############################################################",
|
"##############################################################",
|
||||||
"#### FY59's nvim config ####",
|
"#### FY59's nvim config ####",
|
||||||
"##############################################################",
|
"##############################################################",
|
||||||
"",
|
"",
|
||||||
}, "\n"),
|
}, "\n"),
|
||||||
items = {
|
items = {
|
||||||
starter.sections.recent_files(8),
|
starter.sections.recent_files(8),
|
||||||
{
|
starter.sections.telescope(),
|
||||||
name = "Open Wiki",
|
{
|
||||||
action = "edit ~/wiki/index.md", -- adapte le chemin
|
name = "Open Nvim config",
|
||||||
section = " Wiki",
|
action = "edit ~/.config/nvim/init.lua",
|
||||||
},
|
section = "Config",
|
||||||
starter.sections.telescope(),
|
},
|
||||||
{
|
{
|
||||||
name = "Open Nvim config",
|
name = "Quit",
|
||||||
action = "edit ~/.config/nvim/init.lua",
|
action = "quit",
|
||||||
section = " Config",
|
section = "Actions",
|
||||||
},
|
},
|
||||||
{
|
},
|
||||||
name = "Quit",
|
footer = "Happy editing – from FY59's config",
|
||||||
action = "quit",
|
})
|
||||||
section = " Actions",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
footer = "Happy editing – from FY59's config",
|
|
||||||
})
|
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,7 @@ Objectif : un setup léger, lisible, facile à maintenir et à hacker.
|
||||||
│ ├── lsp.lua
|
│ ├── lsp.lua
|
||||||
│ ├── mini-icons.lua
|
│ ├── mini-icons.lua
|
||||||
│ ├── mini_map.lua
|
│ ├── mini_map.lua
|
||||||
│ ├── neowiki.lua
|
|
||||||
│ ├── nvim-autopair.lua
|
│ ├── nvim-autopair.lua
|
||||||
│ ├── nvim-tree.lua.old
|
|
||||||
│ ├── outline.lua
|
│ ├── outline.lua
|
||||||
│ ├── render-markdown.lua
|
│ ├── render-markdown.lua
|
||||||
│ ├── starter.lua
|
│ ├── starter.lua
|
||||||
|
|
@ -153,16 +151,9 @@ Keymaps personnalisés :
|
||||||
- lewis6991/gitsigns.nvim pour les signes Git dans la marge.
|
- lewis6991/gitsigns.nvim pour les signes Git dans la marge.
|
||||||
- tpope/vim-fugitive
|
- tpope/vim-fugitive
|
||||||
|
|
||||||
9. Notes / Wiki
|
9. starter
|
||||||
- echaya/neowiki.nvim comme wiki moderne (successeur de Vimwiki).
|
|
||||||
|
|
||||||
10. starter
|
|
||||||
- nvim-mini/mini.starter
|
- nvim-mini/mini.starter
|
||||||
|
|
||||||
Support Markdown + Treesitter, GTD, multiple wikis.
|
|
||||||
|
|
||||||
Mappings typiques (configurable) : <leader>ww pour ouvrir le wiki, navigation entre pages, tâches, etc.
|
|
||||||
|
|
||||||
## Keymaps principaux
|
## Keymaps principaux
|
||||||
|
|
||||||
- folke/which-key.nvim
|
- folke/which-key.nvim
|
||||||
|
|
@ -195,4 +186,3 @@ LSP
|
||||||
- <leader>h : clear search.
|
- <leader>h : clear search.
|
||||||
|
|
||||||
En Visuel : Tab / Shift-Tab → indent/désindent la sélection.
|
En Visuel : Tab / Shift-Tab → indent/désindent la sélection.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://opencode.ai/config.json",
|
|
||||||
|
|
||||||
"autoupdate": false,
|
|
||||||
|
|
||||||
"enabled_providers": [
|
|
||||||
"ollama"
|
|
||||||
],
|
|
||||||
|
|
||||||
"model": "ollama/labfy-coder:latest",
|
|
||||||
|
|
||||||
"provider": {
|
|
||||||
"ollama": {
|
|
||||||
"npm": "@ai-sdk/openai-compatible",
|
|
||||||
"name": "Ollama local",
|
|
||||||
"options": {
|
|
||||||
"baseURL": "http://127.0.0.1:11434/v1",
|
|
||||||
"timeout": 600000,
|
|
||||||
"chunkTimeout": 120000
|
|
||||||
},
|
|
||||||
"models": {
|
|
||||||
"labfy-coder:latest": {
|
|
||||||
"name": "Labfy Coder",
|
|
||||||
"limit": {
|
|
||||||
"context": 6144,
|
|
||||||
"output": 1024
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"permission": {
|
|
||||||
"*": "ask",
|
|
||||||
|
|
||||||
"read": {
|
|
||||||
"*": "allow",
|
|
||||||
"*.env": "deny",
|
|
||||||
"*.env.*": "deny",
|
|
||||||
"Enquete.sqlite": "deny",
|
|
||||||
"**/Enquete.sqlite": "deny"
|
|
||||||
},
|
|
||||||
|
|
||||||
"glob": "allow",
|
|
||||||
"grep": "allow",
|
|
||||||
"lsp": "allow",
|
|
||||||
"question": "allow",
|
|
||||||
|
|
||||||
"edit": {
|
|
||||||
"*": "ask",
|
|
||||||
"Enquete.sqlite": "deny",
|
|
||||||
"**/Enquete.sqlite": "deny"
|
|
||||||
},
|
|
||||||
|
|
||||||
"bash": {
|
|
||||||
"*": "ask",
|
|
||||||
|
|
||||||
"git status*": "allow",
|
|
||||||
"git diff*": "allow",
|
|
||||||
"git log*": "allow",
|
|
||||||
"git branch --show-current": "allow",
|
|
||||||
"git grep*": "allow",
|
|
||||||
"rg *": "allow",
|
|
||||||
"grep *": "allow",
|
|
||||||
|
|
||||||
"git commit*": "deny",
|
|
||||||
"git push*": "deny",
|
|
||||||
"git reset*": "deny",
|
|
||||||
"git clean*": "deny",
|
|
||||||
|
|
||||||
"rm *": "deny",
|
|
||||||
"sudo *": "deny",
|
|
||||||
"doas *": "deny",
|
|
||||||
|
|
||||||
"curl *": "deny",
|
|
||||||
"wget *": "deny",
|
|
||||||
"ssh *": "deny",
|
|
||||||
"scp *": "deny",
|
|
||||||
"rsync *": "deny"
|
|
||||||
},
|
|
||||||
|
|
||||||
"external_directory": "deny",
|
|
||||||
"websearch": "allow",
|
|
||||||
"webfetch": "ask",
|
|
||||||
"websearch": "deny",
|
|
||||||
"task": "deny",
|
|
||||||
"skill": "deny",
|
|
||||||
"doom_loop": "deny"
|
|
||||||
},
|
|
||||||
|
|
||||||
"compaction": {
|
|
||||||
"auto": true,
|
|
||||||
"prune": true,
|
|
||||||
"reserved": 2048
|
|
||||||
},
|
|
||||||
|
|
||||||
"watcher": {
|
|
||||||
"ignore": [
|
|
||||||
".git/**",
|
|
||||||
"build/**",
|
|
||||||
"*.o",
|
|
||||||
"tests/tmp/**"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -31,6 +31,8 @@ Personal SwayFX configuration, modular and lightweight, designed for everyday Wa
|
||||||
- swayfx
|
- swayfx
|
||||||
- swaylock
|
- swaylock
|
||||||
- swayidle
|
- swayidle
|
||||||
|
- tlp
|
||||||
|
- tlp-pd
|
||||||
|
|
||||||
### Bar and status
|
### Bar and status
|
||||||
- i3status-rs
|
- i3status-rs
|
||||||
|
|
@ -45,8 +47,6 @@ Personal SwayFX configuration, modular and lightweight, designed for everyday Wa
|
||||||
- cliphist
|
- cliphist
|
||||||
- wlsunset
|
- wlsunset
|
||||||
- brightnessctl
|
- brightnessctl
|
||||||
- powerprofilesctl
|
|
||||||
- swaync
|
|
||||||
- nm-connection-editor
|
- nm-connection-editor
|
||||||
- playerctl
|
- playerctl
|
||||||
|
|
||||||
|
|
@ -87,7 +87,7 @@ Example:
|
||||||
|
|
||||||
The Sway bar is placed at the top and uses `i3status-rs` as its backend.
|
The Sway bar is placed at the top and uses `i3status-rs` as its backend.
|
||||||
|
|
||||||
The `i3status.toml` file includes:
|
The i3status-rust configuration includes:
|
||||||
- workspaces,
|
- workspaces,
|
||||||
- focused window,
|
- focused window,
|
||||||
- music,
|
- music,
|
||||||
|
|
@ -103,11 +103,8 @@ The `i3status.toml` file includes:
|
||||||
|
|
||||||
## Autostart
|
## Autostart
|
||||||
|
|
||||||
On startup, the config launches:
|
On startup, Sway launches the inactive-window transparency helper, LiMusic and
|
||||||
- `wlsunset` for blue light reduction,
|
`autotiling`. Wlsunset, Cliphist and swayidle are owned by user systemd units.
|
||||||
- `wl-paste --watch cliphist store` for clipboard history,
|
|
||||||
- `swayidle` for automatic locking and screen power management.
|
|
||||||
- `swaync`
|
|
||||||
|
|
||||||
## Keybinds
|
## Keybinds
|
||||||
|
|
||||||
|
|
@ -116,25 +113,26 @@ Some important shortcuts:
|
||||||
- `Mod + q`: close the focused window.
|
- `Mod + q`: close the focused window.
|
||||||
- `Mod + Shift + e`: exit Sway via `swaynag`.
|
- `Mod + Shift + e`: exit Sway via `swaynag`.
|
||||||
- `Mod + r`: resize mode.
|
- `Mod + r`: resize mode.
|
||||||
- `Mod + Shift + c`: reload the config.
|
- `Mod + Ctrl + r`: reload the config.
|
||||||
- `Mod + Ctrl + l`: lock the screen.
|
- `Mod + Alt + o`: lock the screen.
|
||||||
- `Print`: capture a selected area to the clipboard.
|
- `Print`: capture a selected area to the clipboard.
|
||||||
- `Shift + Print`: capture the full screen to the clipboard.
|
- `Shift + Print`: capture the full screen to the clipboard.
|
||||||
- `Mod + Ctrl + e`: launcher wofi
|
- `Mod + Alt + l`: launcher Wofi.
|
||||||
- `Mod + v`: wofi cliphist
|
- `Mod + Alt + v`: Cliphist via Wofi.
|
||||||
- `Mod + F9``Mod + F10``Mod + F11`: power profiles
|
- `Mod + F9`, `Mod + F10`, `Mod + F11`: TLP power profiles.
|
||||||
|
|
||||||
## Power profiles
|
## Power profiles
|
||||||
|
|
||||||
The bar includes a `powerprofilesctl` block with:
|
The bar displays the current TLP and platform profiles. The related keybinds
|
||||||
|
use the unprivileged `tlpctl` interface provided by `tlp-pd`:
|
||||||
- `performance`,
|
- `performance`,
|
||||||
- `balanced`,
|
- `balanced`,
|
||||||
- `power-saver`.
|
- `power-saver`.
|
||||||
|
|
||||||
The related keybinds are:
|
The related keybinds are:
|
||||||
- `Mod + F9`: power-saver.
|
- `Mod + F9`: `tlpctl power-saver`.
|
||||||
- `Mod + F10`: balanced.
|
- `Mod + F10`: `tlpctl balanced`.
|
||||||
- `Mod + F11`: performance.
|
- `Mod + F11`: `tlpctl performance`.
|
||||||
|
|
||||||
## Floating windows
|
## Floating windows
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,11 @@ exec python3 ~/.config/sway/scripts/inactive-windows-transparency.py
|
||||||
# Règles d'assignation automatique
|
# Règles d'assignation automatique
|
||||||
# =================================================
|
# =================================================
|
||||||
|
|
||||||
assign [class="Spotify"] workspace 10
|
assign [app_id="limusic-app"] workspace 10
|
||||||
|
|
||||||
# =================================================
|
# =================================================
|
||||||
# Lancement des applications
|
# Lancement des applications
|
||||||
# =================================================
|
# =================================================
|
||||||
|
|
||||||
exec spotify-launcher
|
exec limusic-app
|
||||||
exec autotiling
|
exec autotiling
|
||||||
|
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
# =========== #
|
|
||||||
# Autostart #
|
|
||||||
# =========== #
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
# Filtre lumière bleue (wlsunset)
|
|
||||||
# Notifications (swaync)
|
|
||||||
# gnome-keyring-daemon
|
|
||||||
# protonmail-bridge
|
|
||||||
#
|
|
||||||
# Les outils précédent ont été ajouter à systemd --user
|
|
||||||
#
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
# Transparence
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
exec python3 ~/.config/sway/scripts/inactive-windows-transparency.py
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
# Règles d'assignation automatique
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
assign [app_id="kitty-1"] workspace 1
|
|
||||||
assign [app_id="chromium"] workspace 2
|
|
||||||
assign [app_id="firefox"] workspace 3
|
|
||||||
assign [app_id="AppFlowy"] workspace 5
|
|
||||||
assign [app_id="org.mozilla.Thunderbird"] workspace 9
|
|
||||||
assign [class="Spotify"] workspace 10
|
|
||||||
assign [app_id="proton-bridge"] workspace 11
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
# Lancement des applications
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
exec kitty --class kitty-1 --directory $HOME
|
|
||||||
exec chromium
|
|
||||||
exec thunderbird
|
|
||||||
exec spotify-launcher
|
|
||||||
exec AppFlowy
|
|
||||||
# move to systemctl --user
|
|
||||||
# exec gnome-keyring-daemon --components=pkcs11,secrets,ssh --start
|
|
||||||
# exec proton-pass
|
|
||||||
# exec protonmail-bridge
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
# Presse-papier
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
# move to systemctl --user
|
|
||||||
# exec wl-paste --watch cliphist store
|
|
||||||
# exec wl-paste --type image/png --watch cliphist store
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
# Verrouillage auto (swayidle)
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
# move to systemctl --user
|
|
||||||
# exec swayidle -w timeout 300 'swaylock -f -c 000000' timeout 360 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' before-sleep 'playerctl pause; swaylock -f -c 000000'
|
|
||||||
|
|
@ -17,7 +17,7 @@ set $term kitty
|
||||||
bindsym $mod+Return exec $term
|
bindsym $mod+Return exec $term
|
||||||
|
|
||||||
# Kill focused window
|
# Kill focused window
|
||||||
bindsym $mod+q kill
|
bindsym $mod+q exec ~/.local/bin/sway-close
|
||||||
|
|
||||||
# Drag floating windows by holding down $mod and left mouse button.
|
# Drag floating windows by holding down $mod and left mouse button.
|
||||||
# Resize them with right mouse button + $mod.
|
# Resize them with right mouse button + $mod.
|
||||||
|
|
@ -204,7 +204,7 @@ bindsym $mod+Alt+i exec ~/.local/bin/vmware-on-demand
|
||||||
bindsym $mod+Alt+f exec firefox
|
bindsym $mod+Alt+f exec firefox
|
||||||
bindsym $mod+Alt+a exec AppFlowy
|
bindsym $mod+Alt+a exec AppFlowy
|
||||||
bindsym $mod+Alt+g exec gimp
|
bindsym $mod+Alt+g exec gimp
|
||||||
bindsym $mod+Alt+m exec spotify-launcher
|
bindsym $mod+Alt+m exec limusic-app
|
||||||
bindsym $mod+Alt+b exec blueman-manager
|
bindsym $mod+Alt+b exec blueman-manager
|
||||||
bindsym $mod+Alt+o exec swaylock
|
bindsym $mod+Alt+o exec swaylock
|
||||||
bindsym $mod+Alt+l exec wofi --cache-file=/dev/null -Dimage_size=26 -Dynamic_lines=true --location top --yoffset=10 --width=600 --height=300 --gtk-dark --show drun
|
bindsym $mod+Alt+l exec wofi --cache-file=/dev/null -Dimage_size=26 -Dynamic_lines=true --location top --yoffset=10 --width=600 --height=300 --gtk-dark --show drun
|
||||||
|
|
@ -213,10 +213,11 @@ bindsym $mod+Alt+t exec ~/.local/bin/thunderbird-proton
|
||||||
bindsym $mod+Alt+y exec kitty -- sh -c "yazi"
|
bindsym $mod+Alt+y exec kitty -- sh -c "yazi"
|
||||||
bindsym $mod+Alt+w exec gtk-launch chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default
|
bindsym $mod+Alt+w exec gtk-launch chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default
|
||||||
bindsym $mod+Alt+v exec ~/.config/sway/scripts/copypast
|
bindsym $mod+Alt+v exec ~/.config/sway/scripts/copypast
|
||||||
bindsym $mod+Alt+c exec freecad
|
bindsym $mod+Alt+c exec --no-startup-id kitty --app-id=lardon-freecad-log --title="Lardon · FreeCAD autopush" --directory=/home/fy59/Documents/Lardon /home/fy59/Documents/Lardon/tools/lardon-freecad-launcher
|
||||||
bindsym $mod+Alt+s exec sqlitebrowser
|
bindsym $mod+Alt+s exec sqlitebrowser
|
||||||
bindsym $mod+Alt+e exec sh -c 'cd /home/fy59/Documents/Enquetes/Template/labfy-investigation && exec ./labfy-investigation'
|
bindsym $mod+Alt+e exec sh -c 'cd /home/fy59/Documents/Enquetes/Template/labfy-investigation && exec ./labfy-investigation'
|
||||||
bindsym $mod+Alt+n exec ~/.local/bin/nextcloud-sync
|
bindsym $mod+Alt+n exec ~/.local/bin/nextcloud-sync
|
||||||
|
bindsym $mod+c exec codex-desktop
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
#
|
#
|
||||||
|
|
@ -238,7 +239,6 @@ bindsym Print exec grim -g "$(slurp)" - | wl-copy -t image/png
|
||||||
# Power Daemon
|
# Power Daemon
|
||||||
#
|
#
|
||||||
###############################################
|
###############################################
|
||||||
bindsym $mod+F9 exec powerprofilesctl set power-saver
|
bindsym $mod+F9 exec tlpctl power-saver
|
||||||
bindsym $mod+F10 exec powerprofilesctl set balanced
|
bindsym $mod+F10 exec tlpctl balanced
|
||||||
bindsym $mod+F11 exec powerprofilesctl set performance
|
bindsym $mod+F11 exec tlpctl performance
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,3 +8,12 @@
|
||||||
|
|
||||||
for_window [app_id="blueman-manager"] floating enable, resize set 40ppt 40ppt, move position center
|
for_window [app_id="blueman-manager"] floating enable, resize set 40ppt 40ppt, move position center
|
||||||
for_window [app_id="Proton Pass"] floating enable, resize set 40ppt 40ppt, move position right top
|
for_window [app_id="Proton Pass"] floating enable, resize set 40ppt 40ppt, move position right top
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# Lardon
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
for_window [app_id="lardon-freecad-log"] floating enable
|
||||||
|
for_window [app_id="lardon-freecad-log"] resize set width 850 px height 360 px
|
||||||
|
for_window [app_id="lardon-freecad-log"] move position center
|
||||||
|
for_window [app_id="lardon-freecad-log"] border pixel 2
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
exec_always {
|
exec_always {
|
||||||
gsettings set $gnome-schema font-name 'jetbrains mono nerd font 12'
|
gsettings set $gnome-schema font-name 'jetbrains mono nerd font 12'
|
||||||
gsettings set $gnome-schema color-scheme 'prefer-dark'
|
gsettings set $gnome-schema color-scheme 'prefer-dark'
|
||||||
gsettings get $gnome-schema icon-theme 'Tela-circle-blue'
|
gsettings set $gnome-schema icon-theme 'Tela-circle-blue'
|
||||||
}
|
}
|
||||||
|
|
||||||
set $cursor_theme Bibata-Modern-Classic
|
set $cursor_theme Bibata-Modern-Classic
|
||||||
|
|
@ -40,5 +40,5 @@ seat seat0 xcursor_theme $cursor_theme $cursor_size
|
||||||
|
|
||||||
|
|
||||||
# Set inner/outer gaps
|
# Set inner/outer gaps
|
||||||
gaps inner 8
|
gaps inner 5
|
||||||
gaps outer 0
|
gaps outer 0
|
||||||
|
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "/etc/xdg/swaync/configSchema.json",
|
|
||||||
"ignore-gtk-theme": false,
|
|
||||||
"positionX": "right",
|
|
||||||
"positionY": "top",
|
|
||||||
"control-center-margin-top": 10,
|
|
||||||
"control-center-margin-bottom": 10,
|
|
||||||
"control-center-margin-right": 10,
|
|
||||||
"notification-body-image-height": 100,
|
|
||||||
"notification-body-image-width": 200,
|
|
||||||
"cssPriority": "user",
|
|
||||||
"timeout": 10,
|
|
||||||
"timeout-low": 5,
|
|
||||||
"timeout-critical": 0,
|
|
||||||
"fit-to-screen": false,
|
|
||||||
"control-center-width": 500,
|
|
||||||
"control-center-height": 1035,
|
|
||||||
"notification-window-width": 500,
|
|
||||||
"keyboard-shortcuts": true,
|
|
||||||
"image-visibility": "when-available",
|
|
||||||
"transition-time": 200,
|
|
||||||
"hide-on-clear": false,
|
|
||||||
"hide-on-action": true,
|
|
||||||
"script-fail-notify": true,
|
|
||||||
"text-empty": "No Notification",
|
|
||||||
"widgets": [
|
|
||||||
"title",
|
|
||||||
"dnd",
|
|
||||||
"inhibitors",
|
|
||||||
"mpris",
|
|
||||||
"buttons-grid",
|
|
||||||
"notifications"
|
|
||||||
],
|
|
||||||
"widget-config": {
|
|
||||||
"notifications": {
|
|
||||||
"group-by-app": true,
|
|
||||||
"sort": "time"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"text": "Notification Center",
|
|
||||||
"clear-all-button": true,
|
|
||||||
"button-text": " Clear All"
|
|
||||||
},
|
|
||||||
"mpris": {
|
|
||||||
"blacklist": ["playerctl"],
|
|
||||||
"autohide": false,
|
|
||||||
"show-album-art": "always",
|
|
||||||
"loop-carousel": false
|
|
||||||
},
|
|
||||||
"volume": {
|
|
||||||
"label": ""
|
|
||||||
},
|
|
||||||
"backlight": {
|
|
||||||
"label": ""
|
|
||||||
},
|
|
||||||
"buttons-grid": {
|
|
||||||
"actions": [
|
|
||||||
{
|
|
||||||
"label": "",
|
|
||||||
"command": "swaync-client -C"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "",
|
|
||||||
"command": "pactl set-sink-mute @DEFAULT_SINK@ toggle",
|
|
||||||
"type": "toggle"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "",
|
|
||||||
"command": "nm-connection-editor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "",
|
|
||||||
"command": "blueman-manager"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "",
|
|
||||||
"command": "kooha"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
|
@ -1,328 +0,0 @@
|
||||||
* {
|
|
||||||
all: unset;
|
|
||||||
font-size: 14px;
|
|
||||||
font-family: "Ubuntu Nerd Font";
|
|
||||||
transition: 200ms;
|
|
||||||
}
|
|
||||||
|
|
||||||
trough highlight {
|
|
||||||
background: #cdd6f4;
|
|
||||||
}
|
|
||||||
|
|
||||||
scale {
|
|
||||||
margin: 0 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
scale trough {
|
|
||||||
margin: 0rem 1rem;
|
|
||||||
min-height: 8px;
|
|
||||||
min-width: 70px;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
trough slider {
|
|
||||||
margin: -10px;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.8);
|
|
||||||
transition: all 0.2s ease;
|
|
||||||
background-color: #89b4fa;
|
|
||||||
}
|
|
||||||
|
|
||||||
trough slider:hover {
|
|
||||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.8), 0 0 8px #89b4fa;
|
|
||||||
}
|
|
||||||
|
|
||||||
trough {
|
|
||||||
background-color: #313244;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* notifications */
|
|
||||||
.notification-background {
|
|
||||||
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #45475a;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
margin: 18px;
|
|
||||||
background: #181825;
|
|
||||||
color: #cdd6f4;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-background .notification {
|
|
||||||
padding: 7px;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-background .notification.critical {
|
|
||||||
box-shadow: inset 0 0 7px 0 #f38ba8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification .notification-content {
|
|
||||||
margin: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification .notification-content overlay {
|
|
||||||
/* icons */
|
|
||||||
margin: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-content .summary {
|
|
||||||
color: #cdd6f4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-content .time {
|
|
||||||
color: #a6adc8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-content .body {
|
|
||||||
color: #bac2de;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification > *:last-child > * {
|
|
||||||
min-height: 3.4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-background .close-button {
|
|
||||||
margin: 7px;
|
|
||||||
padding: 2px;
|
|
||||||
border-radius: 6.3px;
|
|
||||||
color: #1e1e2e;
|
|
||||||
background-color: #f38ba8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-background .close-button:hover {
|
|
||||||
background-color: #eba0ac;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification-background .close-button:active {
|
|
||||||
background-color: #f5c2e7;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification .notification-action {
|
|
||||||
border-radius: 7px;
|
|
||||||
color: #cdd6f4;
|
|
||||||
box-shadow: inset 0 0 0 1px #45475a;
|
|
||||||
margin: 4px;
|
|
||||||
padding: 8px;
|
|
||||||
font-size: 0.2rem; /* controls the button size not text size*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification .notification-action {
|
|
||||||
background-color: #313244;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification .notification-action:hover {
|
|
||||||
background-color: #45475a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification .notification-action:active {
|
|
||||||
background-color: #585b70;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification.critical progress {
|
|
||||||
background-color: #f38ba8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification.low progress,
|
|
||||||
.notification.normal progress {
|
|
||||||
background-color: #89b4fa;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification progress,
|
|
||||||
.notification trough,
|
|
||||||
.notification progressbar {
|
|
||||||
border-radius: 12.6px;
|
|
||||||
padding: 3px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* control center */
|
|
||||||
.control-center {
|
|
||||||
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #313244;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
background-color: #1e1e2e;
|
|
||||||
color: #cdd6f4;
|
|
||||||
padding: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-background {
|
|
||||||
border-radius: 7px;
|
|
||||||
box-shadow: inset 0 0 0 1px #45475a;
|
|
||||||
margin: 4px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-background .notification {
|
|
||||||
border-radius: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-background .notification.low {
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-title > label {
|
|
||||||
color: #cdd6f4;
|
|
||||||
font-size: 1.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-title button {
|
|
||||||
border-radius: 7px;
|
|
||||||
color: #cdd6f4;
|
|
||||||
background-color: #313244;
|
|
||||||
box-shadow: inset 0 0 0 1px #45475a;
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-title button:hover {
|
|
||||||
background-color: #45475a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-title button:active {
|
|
||||||
background-color: #585b70;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-group {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-group:focus .notification-background {
|
|
||||||
background-color: #313244;
|
|
||||||
}
|
|
||||||
|
|
||||||
scrollbar slider {
|
|
||||||
margin: -3px;
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
|
|
||||||
scrollbar trough {
|
|
||||||
margin: 2px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* dnd */
|
|
||||||
.widget-dnd {
|
|
||||||
margin-top: 5px;
|
|
||||||
border-radius: 8px;
|
|
||||||
font-size: 1.1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-dnd > switch {
|
|
||||||
font-size: initial;
|
|
||||||
border-radius: 8px;
|
|
||||||
background: #313244;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-dnd > switch:checked {
|
|
||||||
background: #89b4fa;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-dnd > switch slider {
|
|
||||||
background: #45475a;
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* mpris */
|
|
||||||
.widget-mpris-player {
|
|
||||||
background: #313244;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
color: #cdd6f4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mpris-overlay {
|
|
||||||
background-color: #313244;
|
|
||||||
opacity: 0.9;
|
|
||||||
padding: 15px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris-album-art {
|
|
||||||
-gtk-icon-size: 100px;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
margin: 0 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris-title {
|
|
||||||
font-size: 1.2rem;
|
|
||||||
color: #cdd6f4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris-subtitle {
|
|
||||||
font-size: 1rem;
|
|
||||||
color: #bac2de;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris button {
|
|
||||||
border-radius: 12.6px;
|
|
||||||
color: #cdd6f4;
|
|
||||||
margin: 0 5px;
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris button image {
|
|
||||||
-gtk-icon-size: 1.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris button:hover {
|
|
||||||
background-color: #313244;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris button:active {
|
|
||||||
background-color: #45475a;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris button:disabled {
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-menubar > box > .menu-button-bar > button > label {
|
|
||||||
font-size: 3rem;
|
|
||||||
padding: 0.5rem 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-menubar > box > .menu-button-bar > :last-child {
|
|
||||||
color: #f38ba8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.power-buttons button:hover,
|
|
||||||
.powermode-buttons button:hover,
|
|
||||||
.screenshot-buttons button:hover {
|
|
||||||
background: #313244;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-label > label {
|
|
||||||
color: #cdd6f4;
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-buttons-grid {
|
|
||||||
padding-top: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-buttons-grid > flowbox > flowboxchild > button label {
|
|
||||||
font-size: 2.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-volume {
|
|
||||||
padding: 1rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-volume label {
|
|
||||||
color: #74c7ec;
|
|
||||||
padding: 0 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-volume trough highlight {
|
|
||||||
background: #74c7ec;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-backlight trough highlight {
|
|
||||||
background: #f9e2af;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-backlight label {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
color: #f9e2af;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-backlight .KB {
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.image {
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
}
|
|
||||||
16
systemd/.config/systemd/user/arch-sentinel-sample.service
Normal file
16
systemd/.config/systemd/user/arch-sentinel-sample.service
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Arch Sentinel - collecte légère
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=%h/.local/bin/arch-sentinel sample
|
||||||
|
Nice=10
|
||||||
|
IOSchedulingClass=idle
|
||||||
|
NoNewPrivileges=yes
|
||||||
|
PrivateTmp=yes
|
||||||
|
ProtectSystem=strict
|
||||||
|
ProtectHome=read-only
|
||||||
|
ReadWritePaths=%h/.local/share/arch-sentinel
|
||||||
|
RestrictAddressFamilies=AF_UNIX
|
||||||
|
LockPersonality=yes
|
||||||
|
MemoryDenyWriteExecute=yes
|
||||||
11
systemd/.config/systemd/user/arch-sentinel-sample.timer
Normal file
11
systemd/.config/systemd/user/arch-sentinel-sample.timer
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Arch Sentinel - relevé périodique
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnBootSec=2min
|
||||||
|
OnUnitActiveSec=5min
|
||||||
|
AccuracySec=30s
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/fy59/.config/systemd/user/clean-makepkg.service
|
../clean-makepkg.service
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/fy59/.config/systemd/user/gnome-keyring-daemon.service
|
../gnome-keyring-daemon.service
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/fy59/.config/systemd/user/ssh-agent.service
|
../ssh-agent.service
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../trainlog-btd.service
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../trainlog-syncd.service
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../trainlog-web.service
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=GNOME keyring daemon
|
|
||||||
PartOf=graphical-session.target
|
|
||||||
After=graphical-session.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=/usr/bin/gnome-keyring-daemon --components=pkcs11,secrets,ssh --start
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/fy59/.config/systemd/user/cliphist-image.service
|
../cliphist-image.service
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/fy59/.config/systemd/user/cliphist-text.service
|
../cliphist-text.service
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
/home/fy59/.config/systemd/user/keyring.service
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/fy59/.config/systemd/user/swayidle.service
|
../swayidle.service
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/fy59/.config/systemd/user/wlsunset.service
|
../wlsunset.service
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Wayland color temperature (wlsunset)
|
|
||||||
PartOf=graphical-session.target
|
|
||||||
After=graphical-session.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=/usr/bin/gnome-keyring-daemon --components=pkcs11,secrets,ssh --start
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
||||||
16
systemd/.config/systemd/user/lardon-freecad.service
Normal file
16
systemd/.config/systemd/user/lardon-freecad.service
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Session FreeCAD Lardon avec autopush
|
||||||
|
Documentation=file://%h/Documents/Lardon/README.md
|
||||||
|
|
||||||
|
ConditionPathExists=%h/Documents/Lardon/FreeCAD/Lardon_Master.FCStd
|
||||||
|
ConditionFileIsExecutable=%h/Documents/Lardon/tools/freecad-autopush
|
||||||
|
ConditionFileIsExecutable=%h/Documents/Lardon/tools/lardon-freecad-session
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=exec
|
||||||
|
WorkingDirectory=%h/Documents/Lardon
|
||||||
|
ExecStart=%h/Documents/Lardon/tools/lardon-freecad-session
|
||||||
|
|
||||||
|
KillMode=control-group
|
||||||
|
TimeoutStopSec=15s
|
||||||
|
Restart=no
|
||||||
|
|
@ -4,7 +4,7 @@ PartOf=graphical-session.target
|
||||||
After=graphical-session.target
|
After=graphical-session.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=/usr/bin/swayidle -w timeout 300 'swaylock -f -c 000000' timeout 360 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' before-sleep 'playerctl pause; swaylock -f -c 000000'
|
ExecStart=/usr/bin/swayidle -w timeout 300 'swaylock -f -c 000000' timeout 360 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' timeout 420 'playerctl -a pause 2>/dev/null || true' idlehint 420 before-sleep 'playerctl -a pause 2>/dev/null || true; swaylock -f -c 000000'
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Wayland notification daemon
|
|
||||||
PartOf=graphical-session.target
|
|
||||||
After=graphical-session.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=/usr/bin/swaync
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
../arch-sentinel-sample.timer
|
||||||
|
|
@ -1 +1 @@
|
||||||
/home/fy59/.config/systemd/user/battery-low-notify.timer
|
../battery-low-notify.timer
|
||||||
13
systemd/.config/systemd/user/trainlog-btd.service
Normal file
13
systemd/.config/systemd/user/trainlog-btd.service
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Trainlog Bluetooth RFCOMM agent
|
||||||
|
ConditionPathExists=/home/fy59/.config/trainlog/sync-generation-config-v1.json
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecCondition=/usr/bin/grep -Eq '"bluetooth_enabled"[[:space:]]*:[[:space:]]*true' "/home/fy59/.config/trainlog/sync-generation-config-v1.json"
|
||||||
|
ExecStart=/usr/bin/python3 "/home/fy59/Documents/trainlog/tools/trainlog_bt_agent.py" --config "/home/fy59/.config/trainlog/sync-generation-config-v1.json"
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=2
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
13
systemd/.config/systemd/user/trainlog-syncd.service
Normal file
13
systemd/.config/systemd/user/trainlog-syncd.service
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Trainlog automatic synchronization agent
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Environment=TRAINLOG_SYNC_BT_ADAPTER=/home/fy59/Documents/trainlog/tools/trainlog_generation_bt_adapter.py
|
||||||
|
Environment=TRAINLOG_SYNC_MTP_ADAPTER=/home/fy59/Documents/trainlog/build/tui/trainlog-generation-mtp-adapter
|
||||||
|
ExecStart=/usr/bin/python3 "/home/fy59/Documents/trainlog/tools/trainlog_syncd.py" --sync-once "/home/fy59/Documents/trainlog/build/tui/trainlog-sync-once" --bt-adapter "/home/fy59/Documents/trainlog/tools/trainlog_generation_bt_adapter.py" --mtp-adapter "/home/fy59/Documents/trainlog/build/tui/trainlog-generation-mtp-adapter" --interval 3
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=2
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
[Service]
|
||||||
|
Environment=TRAINLOG_SYNC_GENERATION_CONFIG=/home/fy59/.config/trainlog/sync-generation-config-v1.json
|
||||||
35
systemd/.config/systemd/user/trainlog-web.service
Normal file
35
systemd/.config/systemd/user/trainlog-web.service
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Trainlog Web local user service
|
||||||
|
Documentation=https://github.com/labfytools/trainlog
|
||||||
|
After=default.target
|
||||||
|
# WHY: A persistent bind failure (notably an occupied 127.0.0.1:8080) must not
|
||||||
|
# become an aggressive restart loop in the user's session.
|
||||||
|
StartLimitIntervalSec=60
|
||||||
|
StartLimitBurst=3
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
# CONTRACT: The user-managed executable is the canonical manual and service
|
||||||
|
# entry point; the repository/build location must not leak into this unit.
|
||||||
|
ExecStart=%h/.local/bin/trainlog -w
|
||||||
|
# INVARIANT: Trainlog stays in the foreground, owns its ordered SIGTERM
|
||||||
|
# shutdown, and always keeps the frozen loopback address and port contract.
|
||||||
|
KillSignal=SIGTERM
|
||||||
|
TimeoutStopSec=20
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
# These protections do not isolate the home directory: Trainlog must retain
|
||||||
|
# access to its SQLite data and configuration below ~/.local/share and ~/.config.
|
||||||
|
NoNewPrivileges=true
|
||||||
|
PrivateTmp=true
|
||||||
|
ProtectSystem=strict
|
||||||
|
ProtectControlGroups=true
|
||||||
|
ProtectKernelModules=true
|
||||||
|
ProtectKernelTunables=true
|
||||||
|
RestrictSUIDSGID=true
|
||||||
|
LockPersonality=true
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
[Service]
|
||||||
|
Environment=TRAINLOG_SYNC_GENERATION_CONFIG=/home/fy59/.config/trainlog/sync-generation-config-v1.json
|
||||||
1
uwsm/.config/uwsm/default-id
Normal file
1
uwsm/.config/uwsm/default-id
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
sway.desktop
|
||||||
|
|
@ -1,178 +0,0 @@
|
||||||
{
|
|
||||||
"modules-left": [
|
|
||||||
"ext/workspaces",
|
|
||||||
"custom/hyprwhspr"
|
|
||||||
],
|
|
||||||
"modules-right": [
|
|
||||||
"mpris",
|
|
||||||
"bluetooth",
|
|
||||||
"network",
|
|
||||||
"wireplumber",
|
|
||||||
"backlight",
|
|
||||||
"custom/updates",
|
|
||||||
"systemd-failed-units",
|
|
||||||
"custom/tlp",
|
|
||||||
"group/hardware",
|
|
||||||
"clock",
|
|
||||||
"custom/power",
|
|
||||||
"tray"
|
|
||||||
],
|
|
||||||
"group/hardware": {
|
|
||||||
"orientation": "horizontal",
|
|
||||||
"drawer": {
|
|
||||||
"transition-duration": 200,
|
|
||||||
"children-class": "hardware-item"
|
|
||||||
},
|
|
||||||
"modules": [
|
|
||||||
"battery",
|
|
||||||
"cpu",
|
|
||||||
"memory",
|
|
||||||
"disk"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"tray": {
|
|
||||||
"icon-size": 18,
|
|
||||||
"spacing": 8
|
|
||||||
},
|
|
||||||
"custom/tlp": {
|
|
||||||
"format": "{}",
|
|
||||||
"exec": "~/.config/waybar/scripts/tlp-profile.sh",
|
|
||||||
"interval": 20,
|
|
||||||
"return-type": "json",
|
|
||||||
},
|
|
||||||
"custom/power": {
|
|
||||||
"format": "⏻",
|
|
||||||
"tooltip": false,
|
|
||||||
"on-click": "wlogout --protocol layer-shell"
|
|
||||||
},
|
|
||||||
"backlight": {
|
|
||||||
"device": "amdgpu_bl0",
|
|
||||||
"format": "{icon} {percent}%",
|
|
||||||
"format-icons": ["", ""],
|
|
||||||
"reverse-scrolling": true,
|
|
||||||
"on-scroll-up": "brightnessctl set +2%",
|
|
||||||
"on-scroll-down": "brightnessctl set 2%-"
|
|
||||||
},
|
|
||||||
"systemd-failed-units": {
|
|
||||||
"hide-on-ok": false, // Do not hide if there is zero failed units.
|
|
||||||
"format": "✗ {nr_failed}",
|
|
||||||
"format-ok": "✓",
|
|
||||||
"system": true, // Monitor failed systemwide units.
|
|
||||||
"user": false // Ignore failed user units.
|
|
||||||
},
|
|
||||||
"disk": {
|
|
||||||
"interval": 30,
|
|
||||||
"format": "Only {percentage_free}% remaining on {path}",
|
|
||||||
"path": "/"
|
|
||||||
},
|
|
||||||
"memory": {
|
|
||||||
"interval": 5,
|
|
||||||
"format": "{used:0.1f}G/{total:0.1f}G "
|
|
||||||
},
|
|
||||||
"cpu": {
|
|
||||||
"format": "{icon0} {icon1} {icon2} {icon3} {icon4} {icon5} {icon6} {icon7}",
|
|
||||||
"format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"]
|
|
||||||
},
|
|
||||||
"ext/workspaces": {
|
|
||||||
"format": "{icon}",
|
|
||||||
"ignore-hidden": true,
|
|
||||||
"on-click": "activate",
|
|
||||||
"on-click-right": "deactivate",
|
|
||||||
"sort-by-id": true
|
|
||||||
},
|
|
||||||
"battery": {
|
|
||||||
"bat": "BAT1",
|
|
||||||
"interval": 15,
|
|
||||||
"format": "{capacity}% {icon}",
|
|
||||||
"format-icons": {
|
|
||||||
"default": ["", "", "", "", "", "", "", "", "", "", ""],
|
|
||||||
"charging": ["", "", "", "", "", "", "", "", "", "", ""]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wireplumber": {
|
|
||||||
"format": "{volume}% {icon}",
|
|
||||||
"format-muted": "",
|
|
||||||
"format-icons": ["", "", ""],
|
|
||||||
"reverse-scrolling": true,
|
|
||||||
"max-volume": 100,
|
|
||||||
"scroll-step": 0.05
|
|
||||||
},
|
|
||||||
"clock": {
|
|
||||||
"interval": 60,
|
|
||||||
"format": "{:%H:%M}",
|
|
||||||
"max-length": 25
|
|
||||||
},
|
|
||||||
"mpris": {
|
|
||||||
"player": "playerctld",
|
|
||||||
"format": "{status_icon} {dynamic}",
|
|
||||||
"format-paused": "{status_icon} {dynamic}",
|
|
||||||
"format-stopped": "",
|
|
||||||
"tooltip-format": "{player}\n{title}\n{artist}",
|
|
||||||
"on-click": "playerctl play-pause",
|
|
||||||
"on-click-middle": "playerctl previous",
|
|
||||||
"on-click-right": "playerctl next",
|
|
||||||
|
|
||||||
"dynamic-order": ["title", "artist"],
|
|
||||||
"dynamic-separator": " - ",
|
|
||||||
"dynamic-len": 24,
|
|
||||||
"title-len": 20,
|
|
||||||
"artist-len": 0,
|
|
||||||
"album-len": 0,
|
|
||||||
|
|
||||||
"player-icons": {
|
|
||||||
"default": "",
|
|
||||||
"mpv": "",
|
|
||||||
"firefox": "",
|
|
||||||
"spotify": "",
|
|
||||||
"vlc": ""
|
|
||||||
},
|
|
||||||
"status-icons": {
|
|
||||||
"playing": "",
|
|
||||||
"paused": "",
|
|
||||||
"stopped": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bluetooth": {
|
|
||||||
"format": " {status}",
|
|
||||||
"format-connected": " {device_alias}",
|
|
||||||
"format-connected-battery": " {device_alias} {device_battery_percentage}%",
|
|
||||||
// "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": "blueman-manager"
|
|
||||||
},
|
|
||||||
"network": {
|
|
||||||
"interface": "wlp1s0",
|
|
||||||
"format": "{ifname}",
|
|
||||||
"format-wifi": "{essid} ({signalStrength}%) ",
|
|
||||||
"format-ethernet": "{ipaddr}/{cidr} ",
|
|
||||||
"format-disconnected": "", //An empty format will hide the module.
|
|
||||||
"tooltip-format": "{ifname} via {gwaddr} ",
|
|
||||||
"tooltip-format-wifi": "{essid} ({signalStrength}%) ",
|
|
||||||
"tooltip-format-ethernet": "{ifname} ",
|
|
||||||
"tooltip-format-disconnected": "Disconnected",
|
|
||||||
"max-length": 50
|
|
||||||
},
|
|
||||||
"custom/updates": {
|
|
||||||
"format": "{} {icon}",
|
|
||||||
"return-type": "json",
|
|
||||||
"format-icons": {
|
|
||||||
"has-updates": "",
|
|
||||||
"updated": ""
|
|
||||||
},
|
|
||||||
"exec-if": "which waybar-module-pacman-updates",
|
|
||||||
"exec": "waybar-module-pacman-updates --no-zero-output"
|
|
||||||
},
|
|
||||||
"custom/hyprwhspr": {
|
|
||||||
"format": "{}",
|
|
||||||
"exec": "/usr/lib/hyprwhspr/config/hyprland/hyprwhspr-tray.sh status",
|
|
||||||
"interval": 1,
|
|
||||||
"return-type": "json",
|
|
||||||
"exec-on-event": true,
|
|
||||||
"on-click": "/usr/lib/hyprwhspr/config/hyprland/hyprwhspr-tray.sh record",
|
|
||||||
"on-click-right": "/usr/lib/hyprwhspr/config/hyprland/hyprwhspr-tray.sh restart",
|
|
||||||
"tooltip": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"custom/hyprwhspr": {
|
|
||||||
"format": "{}",
|
|
||||||
"exec": "/usr/lib/hyprwhspr/config/hyprland/hyprwhspr-tray.sh status",
|
|
||||||
"interval": 1,
|
|
||||||
"return-type": "json",
|
|
||||||
"exec-on-event": true,
|
|
||||||
"on-click": "/usr/lib/hyprwhspr/config/hyprland/hyprwhspr-tray.sh record",
|
|
||||||
"on-click-right": "/usr/lib/hyprwhspr/config/hyprland/hyprwhspr-tray.sh restart",
|
|
||||||
"tooltip": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
@define-color rosewater #f5e0dc;
|
|
||||||
@define-color flamingo #f2cdcd;
|
|
||||||
@define-color pink #f5c2e7;
|
|
||||||
@define-color mauve #cba6f7;
|
|
||||||
@define-color red #f38ba8;
|
|
||||||
@define-color maroon #eba0ac;
|
|
||||||
@define-color peach #fab387;
|
|
||||||
@define-color yellow #f9e2af;
|
|
||||||
@define-color green #a6e3a1;
|
|
||||||
@define-color teal #94e2d5;
|
|
||||||
@define-color sky #89dceb;
|
|
||||||
@define-color sapphire #74c7ec;
|
|
||||||
@define-color blue #89b4fa;
|
|
||||||
@define-color lavender #b4befe;
|
|
||||||
@define-color text #cdd6f4;
|
|
||||||
@define-color subtext1 #bac2de;
|
|
||||||
@define-color subtext0 #a6adc8;
|
|
||||||
@define-color overlay2 #9399b2;
|
|
||||||
@define-color overlay1 #7f849c;
|
|
||||||
@define-color overlay0 #6c7086;
|
|
||||||
@define-color surface2 #585b70;
|
|
||||||
@define-color surface1 #45475a;
|
|
||||||
@define-color surface0 #313244;
|
|
||||||
@define-color base #1e1e2e;
|
|
||||||
@define-color mantle #181825;
|
|
||||||
@define-color crust #11111b;
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
title="$(mango-msg -t get_tree 2>/dev/null | jq -r '
|
|
||||||
recurse(.nodes[]?, .floating_nodes[]?)
|
|
||||||
| select(.focused == true)
|
|
||||||
| .name // empty
|
|
||||||
' | head -n1)"
|
|
||||||
|
|
||||||
if [ -z "$title" ]; then
|
|
||||||
title="Bureau"
|
|
||||||
fi
|
|
||||||
|
|
||||||
short="$(printf '%s' "$title" | cut -c1-60)"
|
|
||||||
|
|
||||||
jq -cn --arg text " $short" --arg tooltip "$title" \
|
|
||||||
'{text:$text, tooltip:$tooltip}'
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue