Compare commits

...

32 commits

Author SHA1 Message Date
grayTerminal-sh
7ed3f78c41 README.md 2026-07-26 23:40:30 +02:00
grayTerminal-sh
41a6c5df2e update 2026-07-26 23:34:14 +02:00
grayTerminal-sh
960faa2d60 update 2026-07-26 21:11:35 +02:00
grayTerminal-sh
890fe92bab update 2026-06-10 10:26:17 +02:00
grayTerminal-sh
c993c233fd modification autostart sway 2026-06-10 10:20:41 +02:00
grayTerminal-sh
4be37d6118 README.md 2026-06-06 08:56:02 +02:00
grayTerminal-sh
7c7093b9cd README.md 2026-06-06 08:50:52 +02:00
grayTerminal-sh
fad850b76d README.md 2026-06-06 08:47:54 +02:00
grayTerminal-sh
ed3b8cddf3 README.md 2026-06-06 08:44:55 +02:00
grayTerminal-sh
de1a669d79 screenshot README.md 2026-06-06 08:39:06 +02:00
grayTerminal-sh
2e85cf8d43 README.md 2026-06-06 08:29:42 +02:00
grayTerminal-sh
f5918e4151 README.md 2026-06-06 08:26:42 +02:00
grayTerminal-sh
c83c2201ec README.md 2026-06-06 08:23:05 +02:00
grayTerminal-sh
edd90f8003 README.md 2026-06-06 07:59:52 +02:00
grayTerminal-sh
a7b1b877eb README.md 2026-06-06 07:58:11 +02:00
grayTerminal-sh
6d843133e7 README.md 2026-06-06 07:54:09 +02:00
grayTerminal-sh
5cdda1e86c ajout .local/bin/batlimit 2026-06-05 13:01:27 +02:00
grayTerminal-sh
109ca4f677 update 2026-06-05 11:09:04 +02:00
grayTerminal-sh
e56585414d update 2026-06-05 10:03:55 +02:00
grayTerminal-sh
0542d1b08a Remove runtime data from repository 2026-06-05 09:43:42 +02:00
grayTerminal-sh
49683dd970 update 2026-06-05 09:39:39 +02:00
grayTerminal-sh
fc76a6278f update 2026-06-05 09:38:56 +02:00
grayTerminal-sh
f85dea2ede update hyprwisper and atuin 2026-06-05 09:37:01 +02:00
grayTerminal-sh
50cdf05a7d plugin heic yazi 2026-06-03 14:15:15 +02:00
grayTerminal-sh
95ce9f00f1 update 2026-05-30 22:24:26 +02:00
grayTerminal-sh
79f56f47f2 general 2026-05-30 09:35:14 +02:00
grayTerminal-sh
4bdcc16092 ajout atuin 2026-05-26 10:50:52 +02:00
grayTerminal-sh
c5bef5dcd0 config nvim + modif config mangowm 2026-05-24 00:48:17 +02:00
grayTerminal-sh
f2b0849175 rules mango 2026-05-21 18:01:45 +02:00
grayTerminal-sh
7ab1abfb21 README.md 2026-05-20 23:45:36 +02:00
grayTerminal-sh
62ee5c6e85 README.md 2026-05-20 23:43:21 +02:00
grayTerminal-sh
e4e7c447cd ajout whisper + modif binds MangoWM 2026-05-20 23:13:15 +02:00
110 changed files with 2587 additions and 1145 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 806 KiB

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
atuin/.local/share/
hyprwhspr/.local/share/

716
README.md
View file

@ -1,621 +1,161 @@
# ArchASP – Arch Sway Professor # Dotfiles ArchASP
<p align="center"> Configurations utilisateur de mon poste principal sous **Arch Linux**, avec un environnement **Wayland / Sway**.
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/screen.jpg width="600" height="400" alt="screenshot">
</picture>
Personal Arch Linux configuration focused on: Ce dépôt contient uniquement les fichiers liés à ma session utilisateur.
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).
- Keyboard-driventerminal-first ## Environnement
- Terminal-first workflow with Sway and MangoWM, Neovim, Kitty
- Catppuccin Mocha themed UI.
- Cyber Learning
**Goal** : - Arch Linux
all reproducible from a single install script and a GNU Stow‑managed dotfiles repo. - Sway
<p> - Wayland
- Kitty
- Zsh
- Neovim
- PipeWire / WirePlumber
- systemd utilisateur
- GNU Stow pour le déploiement des fichiers
[Installation Guide](#installation-on-existing-system) ## Contenu
[Greetd/Regreet config](#regreet-config)
[Snapper install & config](#snapper-config)
## Status Le dépôt regroupe notamment :
ArchASP is currently in active development. ```text
.config/
├── kitty/
├── nvim/
├── sway/
├── systemd/user/
└── ...
.local/
├── bin/
└── share/
If you want to contribute, improve the codebase, suggest ideas, or help .zshrc
shape the installer workflow, feel free to contribute to that repository
too.
---
## Overview
This repo contains my entire user configuration, including:
- Zsh shell configuration with plugins, history tuning, fuzzy-finding and Python helpers
- A Catppuccin Mocha desktop theme applied consistently across GTK 3/4, Qt
- Sway configuration split into modular files with custom keybinds, bar, rules and styling
- Neovim configuration using Lua, Lazy, Treesitter, LSP and a full plugin setup
- Kitty terminal configuration with a large theme collection and a current theme
- Extra configs for GTK, Qt, TUI tools (yazi, fastfetch, calcure, bat, eza, cliphist, i3status-rust)
- Systemd user services for background daemons (idle/lock, clipboard, theming, sync, etc.)
The goal is to provide an opinionated but reusable starting point for an Arch/Linux tiling window manager environment.
---
## Required packages
This setup assumes the following tools are installed (Arch package names):
- [swayfx](https://github.com/WillPower3309/swayfx) (Wayland tiling window manager)
- [swaylock-effects](https://github.com/mortie/swaylock-effects)
- [swayidle](https://github.com/swaywm/swayidle)
- [wofi](https://github.com/SimplyCEO/wofi) (Wayland application launcher)
- [i3status-rust](https://github.com/greshake/i3status-rust?tab=readme-ov-file) (status bar blocks)
- [kitty](https://github.com/kovidgoyal/kitty) (terminal emulator)
- [neovim](https://github.com/neovim/neovim) (text editor)
- [zsh](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH) (shell)
- [starship](https://github.com/starship/starship) (prompt)
- [fzf](https://github.com/junegunn/fzf) (fuzzy finder)
- [fd](https://github.com/sharkdp/fd) (fast file search, used by fzf)
- [ripgrep](https://github.com/burntsushi/ripgrep) (rg, fast grep)
- [eza](https://github.com/eza-community/eza) (ls replacement)
- [fastfetch](https://github.com/fastfetch-cli/fastfetch) (system info on shell startup)
- [yazi](https://github.com/sxyazi/yazi) (terminal file manager)
- [bat](https://github.com/sharkdp/bat) (cat replacement with syntax highlighting)
- [cliphist](https://github.com/sentriz/cliphist) (Wayland clipboard manager)
- [calcure](https://github.com/anufrievroman/calcure) (terminal calendar and tasks)
- [zoxide](https://github.com/ajeetdsouza/zoxide) (smart cd)
- [pyenv](https://github.com/jorgenschaefer/pyvenv) (Python version manager)
- [git](https://github.com/git/git) (version control)
- [yay](https://github.com/jguer/yay) (AUR helper)
- [gtk3](https://github.com/gooroom/gtk3)
- [gtk4](https://gitlab.gnome.org/GNOME/gtk/)
- [catppuccin-gtk-theme-mocha](https://github.com/catppuccin/gtk)
- [catppuccin-cursors-mocha](https://github.com/catppuccin/cursors)
- [greetd](https://github.com/kennylevinsen/greetd)
- [tuigreet](https://github.com/apognu/tuigreet)
- [systemd](https://github.com/systemd/systemd) (init system, login manager and user services used for greetd, idle/lock, snapper, timers, etc.)
- [wlogout](https://github.com/ArtsyMacaw/wlogout) (Power tool for waybar)
- [waybar](https://github.com/Alexays/Waybar) (Status bar with MangoWM)
- [mangown](https://github.com/mangowm/mango) (Windows compositor)
---
## Zsh configuration
The Zsh configuration (`.zshrc`) is kept intentionally minimal and fast, while providing a modern shell experience.
Main features:
- Clean history settings (shared, deduplicated, trimmed) with a large history size
- Completion system using `compinit`, cached in `~/.cache/zsh`, with case-insensitive matching and colored completions
- Fastfetch banner on interactive shell startup if available
- Plugin setup without a plugin manager:
- `zsh-autosuggestions`
- `fast-syntax-highlighting`
- `fzf-tab`
- Prompt powered by `starship` with config in `~/.config/starship.toml`
- Incremental history search via `zsh-history-substring-search` (up/down arrows)
- Tight integration with `fzf` and `zoxide`:
- Custom `FZF_DEFAULT_COMMAND` and previews using `bat`
- Key bindings and completion from the system `fzf` scripts
- Convenient aliases:
- Navigation (`..`, `...`, `....`)
- Tools (`b` for yazi, `n` for neovim)
- Git shortcuts (`g`, `gs`, `ga`, `gc`, `gp`, `gl`)
- `eza` replacing `ls` with different presets
- `rg` as default grep-like search
- OSINT helpers:
- `whois-ip`, `geoip`, `myip`, `headers`, `dns`, `subdomains`, `shot`, `topcmd`
- Arch Linux workflow:
- `pacman` and `yay` aliases for install, upgrade, cleanup, orphan handling
- `journalctl` aliases (`jlog`, `jfollow`, `jboot`)
- Utility functions:
- `extract` for unpacking many archive formats
- `mkcd` to create and enter a directory
- `psgrep` to search running processes
- Python / pyenv helpers:
- pyenv initialization
- `va` to activate `venv/` or `.venv/`
- aliases for creating, destroying and managing virtualenvs and `requirements.txt`
---
## Themes: `.themes/Catppuccin-Mocha`
This directory contains the Catppuccin Mocha theme adapted for several environments:
- `cinnamon/`
Cinnamon desktop theme, including CSS and assets like checkboxes, toggles and window control icons.
- `gnome-shell/`
GNOME Shell theme with CSS files and SVG assets for shell elements (calendar, toggles, process animation).
- `gtk-2.0/`, `gtk-3.0/`, `gtk-4.0/`
GTK themes for legacy and modern GTK applications, including:
- `gtkrc` and `gtkrc.hidpi` for GTK2
- `gtk.css` and `gtk-dark.css` plus a large set of SVG assets for GTK3/4 widgets (checkboxes, radio buttons, sliders, etc.).
- `metacity-1/`
Window manager theme for Metacity-based environments.
- `plank/`
Theme for the Plank dock (`dock.theme`).
- `xfwm4/`
Theme configuration for XFWM4 window manager.
- `index.theme`
The theme index file used by the system to register Catppuccin Mocha.
This ensures a consistent Catppuccin Mocha look across desktops, apps and widgets.
---
## Yazi: `.config/yazi`
<p align="center">
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/yazi.jpg width="600" height="400" alt="screenshot">
</img>
</p>
Configuration for the Yazi terminal file manager:
- `yazi.toml`
Main Yazi configuration.
- `theme.toml`
Custom Yazi theme to match the overall colors.
- `keymap.toml`
Custom key mappings for navigation and actions.
- `package.toml`
Package metadata for the configuration.
- `flavors/tokyo-night.yazi/`
Additional theme flavor based on Tokyo Night, with its own README, flavor definition and preview.
---
## Wofi: `.config/wofi`
Configuration for Wofi, a Wayland application launcher and cliphist manager:
- `config`
Main Wofi settings (mode, matching, behavior).
- `style.css`
CSS styling to match the Catppuccin-like look.
- `wifi`
Script or configuration used to manage Wi-Fi selection via Wofi.
---
## Starship: `.config/starship.toml`
<p align="center">
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/starship.jpg width="600" height="400" alt="screenshot">
</img>
</p>
Prompt configuration for the Starship prompt, referenced from `.zshrc`.
It defines the segments, colors and layout of the prompt to integrate visually with the rest of the setup.
---
## Sway: `.config/sway`
Sway configuration is split into multiple modular files for clarity:
- `config`
Main Sway configuration file that typically includes the others.
- `autostart.conf`
Applications and services launched automatically when Sway starts.
- `bar.conf`
Status bar configuration, including integration with `i3status-rust`.
- `bind.conf`
Keybindings for window management, launching applications, workspaces, etc.
- `input.conf`
Input configuration (keyboard, touchpad, etc.).
- `rules.conf`
Window rules (floating windows, specific workspaces, etc.).
- `style.conf`, `swayfx.conf`, `tty-style.conf`
Visual tweaks, SwayFX configuration and TTY-like styling.
- `catppuccin-mocha`
Theme-related configuration for Sway using the Catppuccin Mocha palette.
- `i3status.toml`
Configuration file for `i3status-rust` used in the bar.
- `assets/screen.jpg`
Screenshot or background asset.
- `scripts/`
Helper scripts:
- `cliphist-wofi-img` to integrate clipboard history with Wofi and images
- `inactive-windows-transparency.py` for window transparency effects
- `README.md`
Local documentation for the Sway setup.
---
## Qt: `.config/qt5ct` and `.config/qt6ct`
Qt theming configuration using `qt5ct` and `qt6ct`:
- `colors/catppuccin-mocha-lavender.conf`
Qt colour scheme matching the Catppuccin Mocha palette.
- `qss/`
Extra styling via Qt Style Sheets.
- `qt5ct.conf`, `qt6ct.conf`
Main Qt configuration files for both Qt5 and Qt6, aligning fonts, colors and style.
---
## Neovim: `.config/nvim`
<p align="center">
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/nvim.jpg width="600" height="400" alt="screenshot">
</img>
</p>
Neovim configuration built in Lua with a modern plugin stack:
- `init.lua`
Entry point that sets up Neovim and loads modules.
- `lua/config/`
Core configuration:
- `lazy.lua` for the Lazy plugin manager
- `maps.lua` for key mappings
- `markdown.lua` for markdown-related settings
- `lua/plugins/`
Plugin configuration files, one per plugin or group:
- `bufferline.lua`
- `catppuccin.lua`
- `cmp.lua`
- `colorscheme.lua`
- `filebrowser.lua`
- `gitsign.lua`
- `lsp.lua`
- `mini-icons.lua`
- `mini_map.lua`
- `neowiki.lua`
- `nvim-autopair.lua`
- `outline.lua`
- `render-markdown.lua`
- `starter.lua`
- `neo-tree.lua`
- `telescope.lua`
- `treesitter.lua`
- `ui.lua`
- `vim-fugitive.lua`
- `witch-key.lua` (which-key style helper)
- `nvim-tree.lua.old` (old configuration kept for reference)
- `lazy-lock.json`
Lockfile for Lazy to pin exact plugin versions.
- `assets/`
Screenshots and images for documentation (`nvim-starter.*`, `screen.jpg`).
- `LICENSE.md`, `readme.md`
Local documentation and license for the Neovim configuration.
This setup gives a modern, IDE-like Neovim experience with LSP, Treesitter, file browsing, git integration, markdown rendering and more.
---
## Kitty: `.config/kitty`
Kitty terminal configuration and themes:
<p align="center">
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/kitty.jpg width="600" height="400" alt="screenshot">
</img>
</p>
- `kitty.conf`
Main Kitty configuration (fonts, window behavior, keybindings, etc.).
- `current-theme.conf`
Includes or defines the currently active theme.
- `kitty-themes/`
A full copy of the kitty-themes collection:
- `LICENSE.md`, `README.md`, `CONTRIBUTING.md`
- `themes/*.conf`
Hundreds of ready-to-use color schemes (Solarized, Dracula, Gruvbox, Monokai variants, Catppuccin-like themes, etc.).
This allows instant switching between many color schemes while defaulting to a Catppuccin-style dark theme.
---
## Snapper
Snapper is used here to manage Btrfs snapshots for the root filesystem.
Its main configuration for this setup lives in /etc/snapper/configs/root, where snapshot limits and cleanup rules are defined.
Together with grub-btrfs, this configuration is integrated into GRUB so that the created snapshots appear as additional boot entries in the GRUB menu and can be selected directly at startup.
---
## wiki
This wiki is my personal cybersecurity knowledge base.
It centralizes course notes, lab write‑ups and reference material for networking, blue team and red team topics, so I can grow a coherent skill set over time instead of scattered notes.
The structure is intentionally simple: foundations first, then focused sections for tools and defensive/offensive techniques, plus dedicated reference indexes to quickly jump back to key resources when needed.
All my notes live in a Neovim‑driven wiki.
From a terminal session, I just launch:
```shell
nvim
```
and use
```
<leader>ww
```
to open my main index page, then navigate through Markdown links like a lightweight personal documentation site.
---
## Other configs
Additional directories complete the environment:
- `.config/i3status-rust/`
Used by the Sway bar via `i3status.toml` (config content is referenced from Sway’s side).
<p align="center">
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/i3s.jpg width="600" height="400" alt="screenshot">
</img>
</p>
- `.config/gtk-3.0/` and `.config/gtk-4.0/`
GTK settings and overrides for applications using GTK3/GTK4 (bookmarks, settings backups, etc.).
- `.config/fastfetch/config.jsonc`
Fastfetch configuration controlling system summary display in the terminal.
<p align="center">
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/fastfetch.jpg width="600" height="400" alt="screenshot">
</img>
</p>
- `.config/eza/catppuccin-mocha-lavender.yml`
eza color theme file tuned to match Catppuccin Mocha.
<p align="center">
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/eza.jpg width="600" height="400" alt="screenshot">
</img>
</p>
- `.config/cliphist/config`
Configuration for cliphist clipboard manager.
- `.config/calcure/`
Calcure TUI calendar and task manager configuration:
- `config.ini`
- `events.csv`
- `tasks.csv`
- `info.log`
- `.config/bat/themes/Catppuccin Mocha.tmTheme`
Bat syntax highlighting theme, again using Catppuccin Mocha.
<p align="center">
<img src=https://raw.githubusercontent.com/grayTerminal-sh/archasp/main/.assets/bat.jpg width="600" height="400" alt="screenshot">
</img>
</p>
---
## Installation (on existing system)
### YAY install
```shell
sudo pacman -S stow git base-devel
cd /tmp
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
``` ```
### Git clone & themes install ### Scripts utilisateur
```shell Le dossier `~/.local/bin` contient plusieurs outils personnels, notamment :
yay -S catppuccin-cursors-mocha catppuccin-gtk-theme-mocha && git clone https://github.com/grayTerminal-sh/archasp.git
```
### Move dotfiles - gestion temporaire du seuil de charge de la batterie ;
- 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.
```shell ### Services systemd utilisateur
mkdir ~/.dotfiles &&\
mv ~/archasp/* ~/.dotfiles &&\
rm -r ~/archasp
```
### Config backup Les unités présentes dans `.config/systemd/user/` permettent notamment de gérer :
```shell - les notifications de batterie ;
cd &&\ - Cliphist ;
mkdir ~/.config/config_backup &&\ - GNOME Keyring ;
mv ~/.config/bat ~/.config/config_backup &&\ - l’agent SSH ;
mv ~/.config/btop ~/.config/config_backup &&\ - Swayidle ;
mv ~/.config/calcure ~/.config/config_backup &&\ - Wlsunset ;
mv ~/.config/cliphist ~/.config/config_backup &&\ - Proton Mail Bridge ;
mv ~/.config/eza ~/.config/config_backup &&\ - différents services propres à la session graphique.
mv ~/.config/fastfetch ~/.config/config_backup &&\
mv ~/.config/gtk-3.0 ~/.config/config_backup &&\
mv ~/.config/gtk-4.O ~/.config/config_backup &&\
mv ~/.config/icons ~/.config/config_backup &&\
mv ~/.config/kitty ~/.config/config_backup &&\
mv ~/.config/mango ~/.config/mango_backup &&\
mv ~/.config/nvim ~/.config/config_backup &&\
mv ~/.config/qt5ct ~/.config/config_backup &&\
mv ~/.config/qt6ct ~/.config/config_backup &&\
mv ~/.config/starship ~/.config/config_backup &&\
mv ~/.config/sway ~/.config/config_backup &&\
mv ~/.config/swaylock ~/.config/config_backup &&\
mv ~/.config/swaync ~/.config/config_backup &&\
mv ~/.config/themes ~/.config/config_backup &&\
mv ~/.config/wofi ~/.config/config_backup &&\
mv ~/.config/yazi ~/.config/config_backup &&\
mv ~/.config/zsh ~/.config/config_backup
```
### Stow dotfiles & install packages Les services lourds ou occasionnels ne sont pas démarrés en permanence.
```shell ## Installation
cd ~/.dotfiles
```
```shell Cloner le dépôt dans le dossier personnel :
stow *\
```
```shell
yay -S \
mangowm-git swayfx wofi i3status-rust kitty neovim zsh \
starship fzf fd ripgrep eza fastfetch yazi bat \
cliphist calcure zoxide pyenv git \
gtk3 gtk4 catppuccin-gtk-theme-mocha \
catppuccin-cursors-mocha swaylock-effects \
swayidle greetd greetd-tuigreet grim slurp \
snapper brtfs-progs grub-snapper
```
### greetd-tuigreet config
---
```toml
# /etc/greetd/config.toml
[terminal]
# The VT to run the greeter on. Can be "next", "current" or a number
# designating the VT.
vt = 1
# The default session, also known as the greeter.
[default_session]
command = "tuigreet tuigreet --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 mango --power-shutdown 'shutdown -h now' --power-reboot 'reboot'"
# 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 = "greetd"
```
---
```desktop
# /usr/share/wayland-sessions/mango.desktop
[Desktop Entry]
Encoding=UTF-8
Name=Mango
DesktopNames=mango;wlroots
Comment=mango WM
Exec=/home/fy59/.local/bin/mango-session.sh
Icon=mango
Type=Application
```
---
```sh
# /etc/greetd/sway-config
exec "regreet; swaymsg exit"
include /etc/sway/config.d/*
### Keyboard (modify it)
input * {
xkb_layout fr
xkb_variant oss
}
### Touchpad
input "type:touchpad" {
tap enabled
tap_button_map lrm
}
```
---
```sh
#!/bin/sh
# .local/bin/mango-session.sh
systemctl --user start wayland-session.target
exec mango
```
```bash ```bash
chmod +x ~/.local/bin/mango-session.sh git clone \
https://git.labfytools.com/fy59/Dotfiles_ArchAP.git \
"$HOME/Dotfiles_ArchAP"
cd "$HOME/Dotfiles_ArchAP"
``` ```
--- Avant tout déploiement, vérifier les liens qui seraient créés :
```shell ```bash
sudo systemctl enable --now greetd.service stow --no --verbose --target="$HOME" .
``` ```
### Snapper config Puis appliquer les dotfiles :
```shell ```bash
sudo snapper -c root create-config /\ stow --verbose --target="$HOME" .
sudo snapper -c root create-config /@
``` ```
```shell
sudo systemctl enable --now grub-btrfsd.service grub-btrfs.path En cas de conflit avec des fichiers existants, les sauvegarder ou les comparer avant de les remplacer.
## Recharger la configuration
Après une modification des unités systemd utilisateur :
```bash
systemctl --user daemon-reload
``` ```
```shell
sudo grub-mkconfig -o /boot/grub/grub.cfg Pour réactiver les unités voulues :
```bash
systemctl --user enable --now NOM.service
systemctl --user enable --now NOM.timer
``` ```
```config
# /etc/snapper/configs/root
# subvolume to snapshot
SUBVOLUME="/"
# filesystem type Pour recharger Sway :
FSTYPE="btrfs"
```bash
# btrfs qgroup for space aware cleanup algorithms swaymsg reload
QGROUP=""
# fraction or absolute size of the filesystems space the snapshots may use
SPACE_LIMIT="0.5"
# fraction or absolute size of the filesystems space that should be free
FREE_LIMIT="0.2"
# users and groups allowed to work with config
ALLOW_USERS=""
ALLOW_GROUPS=""
# sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots
# directory
SYNC_ACL="no"
# start comparing pre- and post-snapshot in background after creating
# post-snapshot
BACKGROUND_COMPARISON="yes"
# run daily number cleanup
NUMBER_CLEANUP="yes"
# limit for number cleanup
NUMBER_MIN_AGE="3600"
NUMBER_LIMIT="5"
NUMBER_LIMIT_IMPORTANT="1"
# create hourly snapshots
TIMELINE_CREATE="yes"
# cleanup hourly snapshots after some time
TIMELINE_CLEANUP="yes"
# limits for timeline cleanup
TIMELINE_MIN_AGE="3600"
TIMELINE_LIMIT_HOURLY="0"
TIMELINE_LIMIT_DAILY="3"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_QUARTERLY="0"
TIMELINE_LIMIT_YEARLY="0"
# cleanup empty pre-post-pairs
EMPTY_PRE_POST_CLEANUP="yes"
# limits for empty pre-post-pair cleanup
EMPTY_PRE_POST_MIN_AGE="3600"
``` ```
## Mise à jour du dépôt
Depuis le dépôt :
```bash
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.
Sont notamment exclus :
- clés SSH ;
- 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`
| Dépôt | Responsabilité |
|---|---|
| [`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.

View file

@ -0,0 +1,371 @@
## Base directory for Atuin data files (databases, keys, session, etc.)
## All data file paths default to being relative to this directory.
## linux/mac: ~/.local/share/atuin (or XDG_DATA_HOME/atuin)
## windows: %USERPROFILE%/.local/share/atuin
# data_dir = "~/.local/share/atuin"
## where to store your database, default is your system data directory
## linux/mac: ~/.local/share/atuin/history.db
## windows: %USERPROFILE%/.local/share/atuin/history.db
# db_path = "~/.history.db"
## where to store your encryption key, default is your system data directory
## linux/mac: ~/.local/share/atuin/key
## windows: %USERPROFILE%/.local/share/atuin/key
# key_path = "~/.key"
## where to store your auth session token, default is your system data directory
## linux/mac: ~/.local/share/atuin/session
## windows: %USERPROFILE%/.local/share/atuin/session
# session_path = "~/.session"
## date format used, either "us" or "uk"
# dialect = "us"
## default timezone to use when displaying time
## either "l", "local" to use the system's current local timezone, or an offset
## from UTC in the format of "<+|->H[H][:M[M][:S[S]]]"
## for example: "+9", "-05", "+03:30", "-01:23:45", etc.
# timezone = "local"
## enable or disable automatic sync
# auto_sync = true
## enable or disable automatic update checks
# update_check = true
## address of the sync server
# sync_address = "https://api.atuin.sh"
## how often to sync history. note that this is only triggered when a command
## is ran, so sync intervals may well be longer
## set it to 0 to sync after every command
# sync_frequency = "10m"
## which search mode to use
## possible values: prefix, fulltext, fuzzy, skim
# search_mode = "fuzzy"
## which filter mode to use by default
## possible values: "global", "host", "session", "session-preload", "directory", "workspace"
## consider using search.filters to customize the enablement and order of filter modes
filter_mode = "global"
## With workspace filtering enabled, Atuin will filter for commands executed
## in any directory within a git repository tree (default: false).
##
## To use workspace mode by default when available, set this to true and
## set filter_mode to "workspace" or leave it unspecified and
## set search.filters to include "workspace" before other filter modes.
# workspaces = false
## which filter mode to use when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "filter_mode"
## leave unspecified to use same mode set in "filter_mode"
# filter_mode_shell_up_key_binding = "global"
## 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"
## leave unspecified to use same mode set in "search_mode"
# search_mode_shell_up_key_binding = "fuzzy"
## which style to use
## possible values: auto, full, compact
style = "compact"
## the maximum number of lines the interface should take up
## set it to 0 to always go full screen
inline_height = 20
## the maximum number of lines the interface should take up
## when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "inline_height"
# inline_height_shell_up_key_binding = 0
## Invert the UI - put the search bar at the top , Default to `false`
# invert = false
## enable or disable showing a preview of the selected command
## useful when the command is longer than the terminal width and is cut off
show_preview = true
## what to do when the escape key is pressed when searching
## possible values: return-original, return-query
# exit_mode = "return-original"
## possible values: emacs, subl
# word_jump_mode = "emacs"
## characters that count as a part of a word
# word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
## number of context lines to show when scrolling by pages
# scroll_context_lines = 1
## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts
## alt-0 .. alt-9
# ctrl_n_shortcuts = false
## Show numeric shortcuts (1..9) beside list items in the TUI
## set to false to hide the moving numbers if you find them distracting
# show_numeric_shortcuts = true
## default history list format - can also be specified with the --format arg
# history_format = "{time}\t{command}\t{duration}"
## Defaults to true. If enabled, strip trailing spaces and tabs from commands
## before saving them to history.
## Escaped trailing spaces (for example `printf foo\\ `) are preserved.
# strip_trailing_whitespace = true
## prevent commands matching any of these regexes from being written to history.
## Note that these regular expressions are unanchored, i.e. if they don't start
## with ^ or end with $, they'll match anywhere in the command.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
# history_filter = [
# "^secret-cmd",
# "^innocuous-cmd .*--secret=.+",
# ]
## prevent commands run with cwd matching any of these regexes from being written
## to history. Note that these regular expressions are unanchored, i.e. if they don't
## start with ^ or end with $, they'll match anywhere in CWD.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
# cwd_filter = [
# "^/very/secret/area",
# ]
## Configure the maximum height of the preview to show.
## Useful when you have long scripts in your history that you want to distinguish
## by more than the first few lines.
# max_preview_height = 4
## Configure whether or not to show the help row, which includes the current Atuin
## version (and whether an update is available), a keymap hint, and the total
## amount of commands in your history.
# show_help = true
## Configure whether or not to show tabs for search and inspect
# show_tabs = true
## Configure whether or not the tabs row may be auto-hidden, which includes the current Atuin
## tab, such as Search or Inspector, and other tabs you may wish to see. This will
## only be hidden if there are fewer than this count of lines available, and does not affect the use
## of keyboard shortcuts to switch tab. 0 to never auto-hide, default is 8 (lines).
## This is ignored except in `compact` mode.
# auto_hide_height = 8
## Defaults to true. This matches history against a set of default regex, and will not save it if we get a match. Defaults include
## 1. AWS key id
## 2. Github pat (old and new)
## 3. Slack oauth tokens (bot, user)
## 4. Slack webhooks
## 5. Stripe live/test keys
# secrets_filter = true
## Defaults to true. If enabled, upon hitting enter Atuin will immediately execute the command,
## whereas tab will put the command in the prompt for editing.
## If set to false, both enter and tab will place the command in the prompt for editing.
## This applies for new installs. Old installs will keep the old behaviour unless configured otherwise.
enter_accept = true
## Defaults to false. If enabled, when triggered after &&, || or |, Atuin will complete commands to chain rather than replace the current line.
# command_chaining = false
## Defaults to "emacs". This specifies the keymap on the startup of `atuin
## search`. If this is set to "auto", the startup keymap mode in the Atuin
## search is automatically selected based on the shell's keymap where the
## keybinding is defined. If this is set to "emacs", "vim-insert", or
## "vim-normal", the startup keymap mode in the Atuin search is forced to be
## the specified one.
# keymap_mode = "auto"
## Cursor style in each keymap mode. If specified, the cursor style is changed
## in entering the cursor shape. Available values are "default" and
## "{blink,steady}-{block,underline,bar}".
# keymap_cursor = { emacs = "blink-block", vim_insert = "blink-block", vim_normal = "steady-block" }
# network_connect_timeout = 5
# network_timeout = 5
## Timeout (in seconds) for acquiring a local database connection (sqlite)
# local_timeout = 5
## Set this to true and Atuin will minimize motion in the UI - timers will not update live, etc.
## Alternatively, set env NO_MOTION=true
# prefers_reduced_motion = false
[stats]
## Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl
# common_subcommands = [
# "apt",
# "cargo",
# "composer",
# "dnf",
# "docker",
# "dotnet",
# "git",
# "go",
# "ip",
# "jj",
# "kubectl",
# "nix",
# "nmcli",
# "npm",
# "pecl",
# "pnpm",
# "podman",
# "port",
# "systemctl",
# "tmux",
# "yarn",
# ]
## Set commands that should be totally stripped and ignored from stats
# common_prefix = ["sudo"]
## Set commands that will be completely ignored from stats
# ignored_commands = [
# "cd",
# "ls",
# "vi"
# ]
[keys]
# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry.
# scroll_exits = true
# Defaults to true. The left arrow key will exit the TUI when scrolling before the first character
# exit_past_line_start = true
# Defaults to true. The right arrow key performs the same functionality as Tab and copies the selected line to the command line to be modified.
# accept_past_line_end = true
# Defaults to false. The left arrow key performs the same functionality as Tab and copies the selected line to the command line to be modified.
# accept_past_line_start = false
# Defaults to false. The backspace key performs the same functionality as Tab and copies the selected line to the command line to be modified when at the start of the line.
# accept_with_backspace = false
[sync]
# Enable sync v2 by default
# This ensures that sync v2 is enabled for new installs only
# In a later release it will become the default across the board
records = true
[preview]
## which preview strategy to use to calculate the preview height (respects max_preview_height).
## possible values: auto, static
## auto: length of the selected command.
## static: length of the longest command stored in the history.
## fixed: use max_preview_height as fixed height.
# strategy = "auto"
[daemon]
## Enables using the daemon to sync.
# enabled = false
## Automatically start and manage the daemon when needed.
## Not compatible with `systemd_socket = true`.
# autostart = false
## How often the daemon should sync in seconds
# sync_frequency = 300
## The path to the unix socket used by the daemon (on unix systems)
## linux/mac: ~/.local/share/atuin/atuin.sock
## windows: Not Supported
# socket_path = "~/.local/share/atuin/atuin.sock"
## The daemon pidfile used for lifecycle management.
## Defaults to the Atuin data directory.
# pidfile_path = "~/.local/share/atuin/atuin-daemon.pid"
## Use systemd socket activation rather than opening the given path (the path must still be correct for the client)
## linux: false
## mac/windows: Not Supported
# systemd_socket = false
## The port that should be used for TCP on non unix systems
# tcp_port = 8889
# [theme]
## Color theme to use for rendering in the terminal.
## There are some built-in themes, including the base theme ("default"),
## "autumn" and "marine". You can add your own themes to the "./themes" subdirectory of your
## Atuin config (or ATUIN_THEME_DIR, if provided) as TOML files whose keys should be one or
## more of AlertInfo, AlertWarn, AlertError, Annotation, Base, Guidance, Important, and
## the string values as lowercase entries from this list:
## https://ogeon.github.io/docs/palette/master/palette/named/index.html
## If you provide a custom theme file, it should be called "NAME.toml" and the theme below
## should be the stem, i.e. `theme = "NAME"` for your chosen NAME.
name = "catppuccin"
## Whether the theme manager should output normal or extra information to help fix themes.
## Boolean, true or false. If unset, left up to the theme manager.
# debug = true
[search]
## The list of enabled filter modes, in order of priority.
## The "workspace" mode is skipped when not in a workspace or workspaces = false.
## Default filter mode can be overridden with the filter_mode setting.
# filters = [ "global", "host", "session", "session-preload", "workspace", "directory" ]
[tmux]
## Enable using atuin with tmux popup (requires tmux >= 3.2)
## When enabled and running inside tmux, Atuin will use a popup window for interactive search.
## Set to false to disable the popup.
## This can also be controlled with the ATUIN_TMUX_POPUP environment variable.
## Note: The tmux popup is currently supported in zsh, bash, and fish shells. This currently doesn't work with iTerm native tmux integration.
# enabled = false
## Width of the tmux popup window
## Can be a percentage, or integer (e.g. "100" means 100 characters wide)
# width = "80%"
## Height of the tmux popup window
## Can be a percentage, or integer (e.g. "100" means 100 lines tall)
# height = "60%"
[ui]
## Columns to display in the interactive search, from left to right.
## The selection indicator (" > ") is always shown first implicitly.
##
## Each column can be specified as a simple string (uses default width)
## or as an object with type, width, and expand:
## { type = "directory", width = 30, expand = true }
##
## Available column types (with default widths):
## duration (5) - Command execution duration (e.g., "123ms")
## time (8) - Relative time since execution (e.g., "59m ago")
## datetime (16) - Absolute timestamp (e.g., "2025-01-22 14:35")
## directory (20) - Working directory (truncated if too long)
## host (15) - Hostname where command was run
## user (10) - Username
## exit (3) - Exit code (colored by success/failure)
## command (*) - The command itself (expands by default)
##
## The "expand" option (default: true for command, false for others) makes a
## column fill remaining space. Only one column should have expand = true.
##
## Default:
# columns = ["duration", "time", "command"]
##
## Examples:
##
## Minimal - more space for commands:
# columns = ["duration", "command"]
##
## With wider directory column:
# columns = ["duration", { type = "directory", width = 30 }, "command"]
##
## Show host for multi-machine sync users:
# columns = ["duration", "time", "host", "command"]
##
## Show exit codes prominently:
# columns = ["exit", "duration", "command"]
##
## Make directory expand instead of command:
# columns = ["duration", "time", { type = "directory", expand = true }, { type = "command", expand = false }]

View file

@ -0,0 +1,12 @@
[theme]
name = "catppuccin"
[colors]
AlertInfo = "#a6e3a1"
AlertWarn = "#fab387"
AlertError = "#f38ba8"
Annotation = "#b4befe"
Base = "#cdd6f4"
Guidance = "#9399b2"
Important = "#f38ba8"
Title = "#b4befe"

BIN
bin/.local/bin/agy Executable file

Binary file not shown.

3
bin/.local/bin/appid Executable file
View file

@ -0,0 +1,3 @@
#!/bin/sh
sleep 3
mmsg -g -c | sed 's/^/title|appid: /'

124
bin/.local/bin/aurinstall Executable file
View file

@ -0,0 +1,124 @@
#!/bin/bash
set -euo pipefail
AUR_DIR="$HOME/Aur"
EDITOR_CMD="${EDITOR:-nvim}"
ASK_EDIT=0
FORCE_EDIT=0
DOWNLOAD_ONLY=0
while getopts ":eEd" opt; do
case "$opt" in
e) ASK_EDIT=1 ;;
E) FORCE_EDIT=1 ;;
d) DOWNLOAD_ONLY=1 ;;
*)
echo "Usage: aurinstall [-e|-E] [-d] <paquet1> [paquet2 ...]"
exit 1
;;
esac
done
shift $((OPTIND - 1))
RESET='\033[0m'
BOLD='\033[1m'
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
CYAN='\033[1;36m'
info() { printf "${BLUE}==>${RESET} %s\n" "$1"; }
ok() { printf "${GREEN}==>${RESET} %s\n" "$1"; }
warn() { printf "${YELLOW}==>${RESET} %s\n" "$1"; }
error() { printf "${RED}==>${RESET} %s\n" "$1"; }
section() { printf "\n${CYAN}${BOLD}>>> %s${RESET}\n" "$1"; }
if [[ $# -lt 1 ]]; then
error "Usage: aurinstall [-e|-E] [-d] <paquet1> [paquet2 ...]"
exit 1
fi
mkdir -p "$AUR_DIR"
if [[ "$DOWNLOAD_ONLY" -eq 0 ]]; then
sudo -v || exit 1
while true; do
sudo -n true || exit
sleep 30
done 2>/dev/null &
SUDO_LOOP_PID=$!
trap 'kill "$SUDO_LOOP_PID" 2>/dev/null' EXIT INT TERM
fi
for pkg in "$@" ; do
section "$pkg"
cd "$AUR_DIR" || exit 1
if [[ "$DOWNLOAD_ONLY" -eq 0 ]] && pacman -Q "$pkg" >/dev/null 2>&1; then
warn "$pkg est déjà installé, on passe."
continue
fi
if [[ -d "$pkg/.git" ]]; then
warn "$pkg déjà cloné, utilisation du dossier existant"
cd "$pkg" || { error "Impossible d'entrer dans $pkg"; continue; }
pull_output=$(git pull --ff-only 2>&1) || {
error "git pull failed pour $pkg"
cd "$AUR_DIR" || exit 1
continue
}
printf "%s\n" "$pull_output"
else
info "Clonage de $pkg"
if ! git clone "https://aur.archlinux.org/${pkg}.git"; then
error "Impossible de cloner $pkg"
continue
fi
cd "$pkg" || { error "Impossible d'entrer dans $pkg"; continue; }
fi
if [[ "$FORCE_EDIT" -eq 1 ]]; then
info "Ouverture de PKGBUILD et .SRCINFO dans $EDITOR_CMD"
"$EDITOR_CMD" PKGBUILD .SRCINFO
elif [[ "$ASK_EDIT" -eq 1 || "$DOWNLOAD_ONLY" -eq 1 ]]; then
printf "${YELLOW}Éditer PKGBUILD/.SRCINFO pour %s ? [y/N] ${RESET}" "$pkg"
read -r ans
if [[ "$ans" == "y" || "$ans" == "Y" ]]; then
"$EDITOR_CMD" PKGBUILD .SRCINFO
fi
fi
if [[ "$DOWNLOAD_ONLY" -eq 1 ]]; then
ok "$pkg prêt pour audit dans $AUR_DIR/$pkg"
continue
fi
info "Vérifie au minimum source=(), checksums, prepare()/build()/package() et validpgpkeys si présents"
rm -f ./*.pkg.tar ./*.pkg.tar.*
if ! makepkg -sf; then
error "Build failed pour $pkg"
cd "$AUR_DIR" || exit 1
continue
fi
pkgfile=$(find . -maxdepth 1 -type f \( -name '*.pkg.tar' -o -name '*.pkg.tar.*' \) ! -name '*.sig' | head -n1 || true)
echo "DEBUG: pkgfile='$pkgfile'"
if [[ -z "$pkgfile" ]]; then
error "Aucun paquet généré pour $pkg"
cd "$AUR_DIR" || exit 1
continue
fi
info "Installation de $pkgfile"
if ! sudo pacman -U --noconfirm "$pkgfile"; then
error "Install failed pour $pkg"
cd "$AUR_DIR" || exit 1
continue
fi
ok "$pkg installé avec succès"
done

59
bin/.local/bin/aurremove Executable file
View file

@ -0,0 +1,59 @@
#!/bin/bash
set -euo pipefail
AUR_DIR="$HOME/Aur"
RESET='\033[0m'
BOLD='\033[1m'
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
CYAN='\033[1;36m'
info() { printf "${BLUE}==>${RESET} %s\n" "$1"; }
ok() { printf "${GREEN}==>${RESET} %s\n" "$1"; }
warn() { printf "${YELLOW}==>${RESET} %s\n" "$1"; }
error() { printf "${RED}==>${RESET} %s\n" "$1"; }
section() { printf "\n${CYAN}${BOLD}>>> %s${RESET}\n" "$1"; }
if [[ $# -lt 1 ]]; then
error "Usage: aurremove <paquet1> [paquet2 ...]"
exit 1
fi
sudo -v || exit 1
while true; do
sudo -n true || exit
sleep 30
done 2>/dev/null &
SUDO_LOOP_PID=$!
trap 'kill "$SUDO_LOOP_PID" 2>/dev/null' EXIT INT TERM
for pkg in "$@" ; do
section "$pkg"
if ! pacman -Q "$pkg" >/dev/null 2>&1; then
warn "$pkg n'est pas installé"
continue
fi
info "Désinstallation de $pkg"
if ! sudo pacman -Rns "$pkg"; then
error "Échec de suppression pour $pkg"
continue
fi
ok "$pkg supprimé du système"
if [[ -d "$AUR_DIR/$pkg" ]]; then
printf "${YELLOW}Supprimer aussi le dossier %s ? [y/N] ${RESET}" "$AUR_DIR/$pkg"
read -r ans
if [[ "$ans" == "y" || "$ans" == "Y" ]]; then
rm -rf "$AUR_DIR/$pkg"
ok "Dossier $AUR_DIR/$pkg supprimé"
else
warn "Dossier conservé : $AUR_DIR/$pkg"
fi
fi
done

155
bin/.local/bin/aursearch Executable file
View file

@ -0,0 +1,155 @@
#!/bin/bash
set -euo pipefail
RPC_BASE="https://aur.archlinux.org/rpc/?v=5"
SEARCH_BY="name-desc"
DETAILS=0
QUIET=0
LIMIT=10
SORT_BY="popularity"
RESET='\033[0m'
BOLD='\033[1m'
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
CYAN='\033[1;36m'
info() { printf "${BLUE}==>${RESET} %s\n" "$1"; }
ok() { printf "${GREEN}==>${RESET} %s\n" "$1"; }
warn() { printf "${YELLOW}==>${RESET} %s\n" "$1"; }
error() { printf "${RED}==>${RESET} %s\n" "$1" >&2; }
section() { printf "\n${CYAN}${BOLD}>>> %s${RESET}\n" "$1"; }
die() {
error "$1"
exit 1
}
usage() {
cat <<'USAGE'
Usage: aursearch [options] <recherche>
Options:
-n rechercher seulement dans le nom
-m rechercher par mainteneur
-d afficher les détails complets
-q afficher seulement les noms des paquets
-l N limiter le nombre de résultats (défaut : 10)
-s mode trier par : popularity | votes | name | modified | submitted
-h afficher cette aide
Exemples:
aursearch proton
aursearch -n sway
aursearch -m Eschwartz
aursearch -d rustdesk
aursearch -q -l 20 python
USAGE
}
require_cmd() {
command -v "$1" >/dev/null 2>&1 || die "Commande requise manquante : $1"
}
while getopts ":nmdql:s:h" opt; do
case "$opt" in
n) SEARCH_BY="name" ;;
m) SEARCH_BY="maintainer" ;;
d) DETAILS=1 ;;
q) QUIET=1 ;;
l)
[[ "$OPTARG" =~ ^[0-9]+$ ]] || die "-l attend un entier"
LIMIT="$OPTARG"
;;
s)
case "$OPTARG" in
popularity|votes|name|modified|submitted) SORT_BY="$OPTARG" ;;
*) die "Mode de tri invalide : $OPTARG" ;;
esac
;;
h)
usage
exit 0
;;
*)
usage
exit 1
;;
esac
done
shift $((OPTIND - 1))
[[ $# -ge 1 ]] || {
usage
exit 1
}
require_cmd curl
require_cmd jq
query="$*"
encoded_query=$(printf '%s' "$query" | jq -sRr @uri)
url="${RPC_BASE}&type=search&by=${SEARCH_BY}&arg=${encoded_query}"
json=$(curl -fsSL "$url") || die "Échec de requête vers l'AUR"
count=$(jq '.resultcount // 0' <<< "$json")
if (( count == 0 )); then
warn "Aucun résultat pour : $query"
exit 0
fi
sorted=$(jq --arg sort "$SORT_BY" '
.results
| if $sort == "name" then sort_by(.Name)
elif $sort == "votes" then sort_by(.NumVotes // 0) | reverse
elif $sort == "submitted" then sort_by(.FirstSubmitted // 0) | reverse
elif $sort == "modified" then sort_by(.LastModified // 0) | reverse
else sort_by(.Popularity // 0) | reverse
end
' <<< "$json")
limited=$(jq --argjson limit "$LIMIT" '.[0:$limit]' <<< "$sorted")
shown=$(jq 'length' <<< "$limited")
if (( QUIET == 1 )); then
jq -r '.[].Name' <<< "$limited"
exit 0
fi
info "$count résultat(s) trouvé(s), affichage de $shown entrée(s)"
if (( DETAILS == 1 )); then
jq -r '
.[] |
"\(.Name)\n" +
" Version : \(.Version // "?")\n" +
" Votes : \(.NumVotes // 0)\n" +
" Popularité : \(.Popularity // 0)\n" +
" Mainteneur : \(.Maintainer // "orphan")\n" +
" Soumis le : \(.FirstSubmitted // 0 | strftime("%Y-%m-%d %H:%M"))\n" +
" Modifié le : \(.LastModified // 0 | strftime("%Y-%m-%d %H:%M"))\n" +
" Hors date : \(if .OutOfDate then "yes" else "no" end)\n" +
" URL AUR : https://aur.archlinux.org/packages/\(.Name)\n" +
" Description : \(.Description // "")\n"
' <<< "$limited"
else
jq -r '
.[] |
[
.Name,
(.Version // "?"),
((.NumVotes // 0) | tostring),
((.Popularity // 0) | tostring),
(.Maintainer // "orphan")
] | @tsv
' <<< "$limited" | awk 'BEGIN {
printf "%-32s %-22s %-8s %-12s %-20s\n", "Nom", "Version", "Votes", "Popularité", "Mainteneur";
printf "%-32s %-22s %-8s %-12s %-20s\n", "--------------------------------", "----------------------", "--------", "------------", "--------------------";
}
{
printf "%-32s %-22s %-8s %-12s %-20s\n", $1, $2, $3, $4, $5;
}'
fi

194
bin/.local/bin/aurupdate Executable file
View file

@ -0,0 +1,194 @@
#!/bin/bash
set -euo pipefail
AUR_DIR="${AUR_DIR:-$HOME/Aur}"
END_UPDATE="Mis à jour avec succès ;p."
SYSTEM_NAME="$(cat /etc/hostname 2>/dev/null || echo "unknown")"
RESET='\033[0m'
BOLD='\033[1m'
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
CYAN='\033[1;36m'
info() { printf "${BLUE}==>${RESET} %s\n" "$1"; }
ok() { printf "${GREEN}==>${RESET} %s\n" "$1"; }
warn() { printf "${YELLOW}==>${RESET} %s\n" "$1"; }
error() { printf "${RED}==>${RESET} %s\n" "$1"; }
section() { printf "\n${CYAN}${BOLD}>>> %s${RESET}\n" "$1"; }
[[ -d "$AUR_DIR" ]] || {
error "Répertoire AUR introuvable : $AUR_DIR"
exit 1
}
sudo -v || exit 1
while true; do
sudo -n true || exit
sleep 30
done 2>/dev/null &
SUDO_LOOP_PID=$!
trap 'kill "$SUDO_LOOP_PID" 2>/dev/null' EXIT INT TERM
cd "$AUR_DIR" || exit 1
shopt -s nullglob
repos=(*/)
shopt -u nullglob
if [[ ${#repos[@]} -eq 0 ]]; then
warn "Aucun dépôt AUR dans $AUR_DIR"
exit 0
fi
declare -a outdated_repos=()
audit_repo() {
local repo="$1"
local branch upstream local_rev remote_rev base_rev
cd "$AUR_DIR/$repo" || return 1
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
error "$repo n'est pas un dépôt git valide"
return 1
fi
branch=$(git symbolic-ref --quiet --short HEAD 2>/dev/null || true)
[[ -n "$branch" ]] || {
warn "$repo : HEAD détachée, ignoré"
return 1
}
if ! git remote update --prune >/dev/null 2>&1; then
error "Impossible de contacter le remote pour $repo"
return 1
fi
upstream=$(git rev-parse --abbrev-ref --symbolic-full-name '@{u}' 2>/dev/null || true)
[[ -n "$upstream" ]] || upstream="origin/$branch"
local_rev=$(git rev-parse HEAD 2>/dev/null || true)
remote_rev=$(git rev-parse "$upstream" 2>/dev/null || true)
base_rev=$(git merge-base HEAD "$upstream" 2>/dev/null || true)
if [[ -z "$remote_rev" || -z "$local_rev" || -z "$base_rev" ]]; then
error "Impossible de comparer $repo avec $upstream"
return 1
fi
if [[ "$local_rev" == "$remote_rev" ]]; then
return 1
fi
if [[ "$local_rev" != "$base_rev" ]]; then
warn "$repo a des commits locaux non poussés, ignoré"
return 1
fi
outdated_repos+=("$repo")
return 0
}
ask_update() {
local repo="$1"
while true; do
printf "${YELLOW}Mettre à jour %s ? [y/N/q] ${RESET}" "$repo"
read -r ans
case "$ans" in
y|Y) return 0 ;;
n|N|"") return 1 ;;
q|Q) return 2 ;;
*) warn "Réponse invalide, utilise y, n ou q" ;;
esac
done
}
info "Scan des dépôts AUR..."
for d in "${repos[@]}"; do
repo="${d%/}"
audit_repo "$repo" || true
done
if [[ ${#outdated_repos[@]} -eq 0 ]]; then
ok "Aucune mise à jour AUR détectée"
exit 0
fi
section "Mises à jour détectées"
for repo in "${outdated_repos[@]}"; do
cd "$AUR_DIR/$repo" || continue
upstream=$(git rev-parse --abbrev-ref --symbolic-full-name '@{u}' 2>/dev/null || echo "origin/HEAD")
printf "${YELLOW}- %s${RESET}\n" "$repo"
git --no-pager log --oneline --decorate HEAD.."$upstream" | sed 's/^/ /'
done
declare -a selected_repos=()
section "Sélection"
for repo in "${outdated_repos[@]}"; do
if ask_update "$repo"; then
selected_repos+=("$repo")
else
rc=$?
if [[ $rc -eq 2 ]]; then
warn "Sélection interrompue"
break
fi
fi
done
if [[ ${#selected_repos[@]} -eq 0 ]]; then
warn "Aucun paquet sélectionné"
exit 0
fi
section "Paquets sélectionnés"
for repo in "${selected_repos[@]}"; do
printf "${GREEN}- %s${RESET}\n" "$repo"
done
for repo in "${selected_repos[@]}"; do
cd "$AUR_DIR/$repo" || continue
section "$repo"
info "Récupération des changements"
if ! git pull --ff-only; then
error "git pull failed for $repo"
continue
fi
info "Vérifie au minimum PKGBUILD, sources, checksums et fonctions de build"
rm -f ./*.pkg.tar.*
if ! makepkg -sf; then
error "Build failed for $repo"
continue
fi
pkgfile=$(find . -maxdepth 1 -type f -name '*.pkg.tar.*' ! -name '*.sig' | head -n1 || true)
if [[ -z "$pkgfile" ]]; then
error "Aucun paquet trouvé pour $repo"
continue
fi
info "Installation de $pkgfile"
if ! sudo pacman -U --noconfirm "$pkgfile"; then
error "Install failed for $repo"
continue
fi
ok "$repo installé avec succès"
done
printf "\n"
if command -v figlet >/dev/null 2>&1; then
figlet -f slant "$SYSTEM_NAME" | while IFS= read -r line; do
printf "${GREEN}%s${RESET}\n" "$line"
done
printf "${GREEN}%s${RESET}\n" "$END_UPDATE"
else
printf "${GREEN}%s : %s${RESET}\n" "$SYSTEM_NAME" "$END_UPDATE"
fi

39
bin/.local/bin/batlimit Executable file
View file

@ -0,0 +1,39 @@
#!/usr/bin/env bash
set -euo pipefail
readonly BATTERY="BAT1"
readonly THRESHOLD_FILE="/sys/class/power_supply/${BATTERY}/charge_control_end_threshold"
readonly CAPACITY_FILE="/sys/class/power_supply/${BATTERY}/capacity"
readonly STATUS_FILE="/sys/class/power_supply/${BATTERY}/status"
readonly HELPER="/usr/local/sbin/batlimit-set"
if [[ ! -e "$THRESHOLD_FILE" ]]; then
echo "Erreur : aucun seuil de charge disponible pour ${BATTERY}."
exit 1
fi
read -rp "Niveau max de charge voulu [%] : " STOP
if [[ ! "$STOP" =~ ^[0-9]+$ ]]; then
echo "Erreur : entre un nombre entier."
exit 1
fi
if (( STOP < 40 || STOP > 100 )); then
echo "Erreur : choisis une valeur entre 40 et 100."
exit 1
fi
if ! sudo -n "$HELPER" "$STOP"; then
echo "Erreur : impossible d’appliquer le seuil."
exit 1
fi
CURRENT_THRESHOLD=$(<"$THRESHOLD_FILE")
echo
echo "Batterie : ${BATTERY}"
echo "Seuil appliqué : ${CURRENT_THRESHOLD}%"
echo "Charge actuelle : $(<"$CAPACITY_FILE")%"
echo "État : $(<"$STATUS_FILE")"

View file

@ -0,0 +1,20 @@
#!/bin/sh
BAT="BAT1"
THRESHOLD=20
STATE_FILE="${XDG_RUNTIME_DIR:-/tmp}/battery-low-notified"
capacity=$(cat /sys/class/power_supply/$BAT/capacity 2>/dev/null)
bat_status=$(cat /sys/class/power_supply/$BAT/status 2>/dev/null)
[ -z "$capacity" ] && exit 0
[ -z "$bat_status" ] && exit 0
if [ "$bat_status" = "Discharging" ] && [ "$capacity" -le "$THRESHOLD" ]; then
if [ ! -f "$STATE_FILE" ]; then
notify-send -u critical -t 10000 "Batterie faible" "Batterie à ${capacity}% — branche le chargeur."
touch "$STATE_FILE"
fi
else
rm -f "$STATE_FILE"
fi

View file

@ -0,0 +1,4 @@
#!/bin/sh
wl-paste --type text --watch cliphist store &
wl-paste --type image --watch cliphist store &
wait

21
bin/.local/bin/dcnvim Executable file
View file

@ -0,0 +1,21 @@
#!/usr/bin/env bash
set -e
PROJECT_DIR="$(pwd)"
devcontainer up --workspace-folder "$PROJECT_DIR" >/dev/null
CONTAINER_ID="$(
docker ps -q \
--filter "label=devcontainer.local_folder=$PROJECT_DIR"
)"
if [ -z "$CONTAINER_ID" ]; then
echo "Aucun conteneur trouvé"
exit 1
fi
export DEVCONTAINER_ID="$CONTAINER_ID"
nvim "$@"

3
bin/.local/bin/i3s_restart Executable file
View file

@ -0,0 +1,3 @@
#!/bin/sh
pkill i3status-rs
i3status-rs ~/.config/i3status-rust/config.toml &

10
bin/.local/bin/kitty-ssh-add.sh Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -e
cd "$HOME"
# lance ssh-add dans ce kitty
ssh-add "$HOME/.ssh/id_ed25519-admin"
# quand c'est fini, on lance un shell interactif normal
exec zsh

1
bin/.local/bin/llama-cli Symbolic link
View file

@ -0,0 +1 @@
/home/fy59/.local/src/llama.cpp/build/bin/llama-cli

1
bin/.local/bin/llama-server Symbolic link
View file

@ -0,0 +1 @@
/home/fy59/.local/src/llama.cpp/build/bin/llama-server

View file

@ -0,0 +1,2 @@
#!/bin/sh
grim -g "$(slurp)" - | wl-copy -t image/png

View file

@ -0,0 +1,3 @@
#!/bin/sh
systemctl --user start graphical-session.target || true
exec mango

58
bin/.local/bin/nextcloud-sync Executable file
View file

@ -0,0 +1,58 @@
#!/usr/bin/env bash
set -u
readonly LOCAL_DIR="$HOME/Documents"
readonly SERVER_URL="https://cloud.labfytools.com"
readonly LOG_DIR="$HOME/.local/state/nextcloud"
readonly LOG_FILE="$LOG_DIR/sync.log"
readonly LOCK_FILE="${XDG_RUNTIME_DIR:-/tmp}/nextcloud-sync.lock"
mkdir -p "$LOG_DIR"
# Empêche deux synchronisations simultanées.
exec 9>"$LOCK_FILE"
if ! flock -n 9; then
notify-send \
-a "Nextcloud" \
-u normal \
"Nextcloud" \
"Une synchronisation est déjà en cours."
exit 0
fi
notify-send \
-a "Nextcloud" \
-u low \
"Nextcloud" \
"Synchronisation en cours…"
{
printf '\n=== %s ===\n' "$(date --iso-8601=seconds)"
} >> "$LOG_FILE"
if nextcloudcmd \
-n \
"$LOCAL_DIR" \
"$SERVER_URL" >> "$LOG_FILE" 2>&1
then
notify-send \
-a "Nextcloud" \
-u normal \
"Nextcloud" \
"✅ Synchronisation réussie."
printf 'Résultat : réussite\n' >> "$LOG_FILE"
else
status=$?
notify-send \
-a "Nextcloud" \
-u critical \
"Nextcloud" \
"❌ Synchronisation échouée — code ${status}."
printf 'Résultat : échec, code %d\n' "$status" >> "$LOG_FILE"
exit "$status"
fi

View file

@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -e
# Laisser le temps aux fenêtres de se lancer
sleep 5
# Aller sur le workspace 1
swaymsg "workspace 1"
# Regrouper les trois fenêtres sur le bon workspace (au cas où)
swaymsg '[app_id="kitty-1"] move to workspace 1'
swaymsg '[app_id="kitty-2"] move to workspace 1'
swaymsg '[title="Perplexity"] move to workspace 1'
# Layout horizontal global
swaymsg '[app_id="kitty-1"] focus'
swaymsg 'move left'
# Revenir sur la zone gauche (un des kitty)
swaymsg '[app_id="kitty-2"] focus'
swaymsg 'move down'
# Envoyer Perplexity à droite
swaymsg '[title="Perplexity"] focus'
swaymsg 'move right'
# Envoyer Perplexity à droite
swaymsg '[title="Perplexity"] focus'
swaymsg 'move right'

View file

@ -0,0 +1,43 @@
#!/usr/bin/env bash
set -u
# Empêche deux lanceurs simultanés.
exec 9>"${XDG_RUNTIME_DIR:-/tmp}/thunderbird-proton.lock"
if ! flock -n 9; then
notify-send "Thunderbird" "Thunderbird est déjà en cours d’utilisation."
exit 0
fi
# Le Bridge utilise le trousseau GNOME pour ses identifiants.
systemctl --user start gnome-keyring-daemon.service
if ! systemctl --user start protonmail-bridge.service; then
notify-send -u critical \
"Proton Mail Bridge" \
"Impossible de démarrer le service."
exit 1
fi
notify-send "Proton Mail Bridge" "Démarrage du serveur de messagerie…"
# Attendre que les processus du Bridge soient réellement présents.
for _ in {1..20}; do
if pgrep -f '/usr/lib/protonmail/bridge/bridge' >/dev/null; then
break
fi
sleep 0.5
done
sleep 2
thunderbird "$@" &
# Attendre la fermeture complète de Thunderbird.
while pgrep -x thunderbird >/dev/null; do
sleep 2
done
systemctl --user stop protonmail-bridge.service
notify-send "Proton Mail Bridge" "Arrêté après la fermeture de Thunderbird."

15
bin/.local/bin/tlp-profile.sh Executable file
View file

@ -0,0 +1,15 @@
#!/bin/sh
# Récupère la ligne "TLP profile = balanced/BAT" et isole "balanced/BAT"
# profile=$(tlp-stat -s 2>/dev/null | awk -F'= ' '/TLP profile/ {print $2}')
# Optionnel : ne garder que le profil logique (performance/balanced/power-saver)
# profile=$(printf "%s" "$profile" | cut -d'/' -f1)
# [ -z "$profile" ] && profile="unknown"
# printf " %s\n" "$profile"
tlp=$(tlp-stat -s 2>/dev/null | awk -F'= ' '/TLP profile/ {print $2}')
platform=$(cat /sys/firmware/acpi/platform_profile 2>/dev/null)
printf " %s | %s\n" "$tlp" "$platform"

48
bin/.local/bin/vmware-on-demand Executable file
View file

@ -0,0 +1,48 @@
#!/usr/bin/env bash
set -u
readonly STACK_HELPER="/usr/local/sbin/vmware-stack"
readonly LOCK_FILE="${XDG_RUNTIME_DIR:-/tmp}/vmware-on-demand.lock"
services_started=0
cleanup() {
if (( services_started == 1 )); then
notify-send "VMware" "Arrêt du réseau VMware et de Samba…"
if sudo -n "$STACK_HELPER" stop; then
notify-send "VMware" "Réseau VMware et Samba arrêtés."
else
notify-send -u critical \
"VMware" \
"Impossible d’arrêter les services."
fi
fi
}
exec 9>"$LOCK_FILE"
if ! flock -n 9; then
notify-send "VMware" "Une session VMware est déjà lancée."
exit 0
fi
notify-send "VMware" "Démarrage du réseau VMware et de Samba…"
if ! sudo -n "$STACK_HELPER" start; then
notify-send -u critical \
"VMware" \
"Impossible de démarrer les services."
exit 1
fi
services_started=1
trap cleanup EXIT INT TERM
vmware "$@" &
while pgrep -x vmware >/dev/null ||
pgrep -x vmware-vmx >/dev/null; do
sleep 3
done

View file

@ -0,0 +1,4 @@
#!/bin/sh
pkill waybar
waybar &

View file

@ -0,0 +1,3 @@
CompileFlags:
Add:
- "-std=c17"

View file

@ -1,12 +1,20 @@
// ~/.config/fastfetch/config.jsonc // ~/.config/fastfetch/config.jsonc
{ {
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", // "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"display": { // "display": {
"separator": "• " // "separator": "• "
}, // },
"logo":{ // "logo":{
"type": "sixel", // "type": "sixel",
"width": 30 // "width": 30
// },
"logo": {
"type": "small",
"padding": {
"top": 4, // Top padding
"left": 3, // Left padding
"right": 3 // Right padding
}
}, },
"modules": [ "modules": [
"break", "break",
@ -16,7 +24,7 @@
}, },
{ {
"type": "custom", "type": "custom",
"format": "╭───────────────────────────────╮" "format": "╭────────────────────────────────────────────╮"
}, },
{ {
"type": "os", "type": "os",
@ -57,7 +65,7 @@
}, },
{ {
"type": "custom", "type": "custom",
"format": "╰───────────────────────────────╯" "format": "╰────────────────────────────────────────────╯"
}, },
{ {
"type": "custom", "type": "custom",

View file

@ -0,0 +1,6 @@
export FZF_DEFAULT_OPTS=" \
--color=bg+:#313244,bg:#1E1E2E,spinner:#F5E0DC,hl:#F38BA8 \
--color=fg:#CDD6F4,header:#F38BA8,info:#CBA6F7,pointer:#F5E0DC \
--color=marker:#B4BEFE,fg+:#CDD6F4,prompt:#CBA6F7,hl+:#F38BA8 \
--color=selected-bg:#45475A \
--color=border:#6C7086,label:#CDD6F4"

View file

@ -1,7 +1,5 @@
file:///home/fy59/Downloads
file:///home/fy59/Ansible file:///home/fy59/Ansible
file:///home/fy59/Documents file:///home/fy59/Documents
file:///home/fy59/Musique file:///home/fy59/Pictures/Assets
file:///home/fy59/Images file:///home/fy59/Share
file:///home/fy59/Vid%C3%A9os
file:///home/fy59/T%C3%A9l%C3%A9chargements
file:///home/fy59/Pictures/Assets/

View file

@ -0,0 +1,9 @@
[main]
gtk-theme=Adwaita-dark
style=/home/fy59/.config/gtklock/style.css
background=/tmp/gtklock-blur.png
time-format=%H:%M
date-format=%A %d %B
idle-hide=true
idle-timeout=10
modules=userinfo-module;playerctl-module;powerbar-module

View file

@ -0,0 +1,53 @@
window {
background-color: #1e1e2e;
background-image: url("/tmp/gtklock-blur.png");
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
#window-box {
background-color: rgba(30, 30, 46, 0.78);
border: 1px solid #b4befe;
border-radius: 12px;
padding: 12px;
box-shadow: 0 0 32px rgba(0, 0, 0, 0.55);
}
#clock-label {
color: #cdd6f4;
font-size: 72px;
font-weight: 700;
}
#date-label {
color: #bac2de;
font-size: 22px;
margin-bottom: 18px;
}
#input-field {
color: #cdd6f4;
background-color: rgba(17, 17, 27, 0.92);
border: 1px solid #b4befe;
border-radius: 6px;
padding: 12px;
font-size: 22px;
}
label {
color: #cdd6f4;
}
button {
color: #b4befe;
background-color: #b4befe;
border-radius: 6px;
border: 1px solid #45475a;
padding: 8px 12px;
}
button:hover {
background-color: rgba(69, 71, 90, 0.95);
border-color: #89b4fa;
}

View file

@ -0,0 +1 @@
/run/user/1000/hyprwhspr/audio_level

View file

@ -0,0 +1,17 @@
{
"$schema": "https://raw.githubusercontent.com/goodroot/hyprwhspr/main/share/config.schema.json",
"primary_shortcut": "SUPER+SHIFT+F23",
"recording_mode": "push_to_talk",
"keyboard_device_names": [
"AT Translated Set 2 keyboard"
],
"model": "large-v3-turbo",
"language": "fr",
"transcription_backend": "vulkan",
"start_sound_volume": 0.5,
"stop_sound_volume": 0.5,
"start_sound_path": "ping-up.ogg",
"stop_sound_path": "ping-down.ogg",
"audio_ducking": true,
"whisper_prompt_fr": "Transcrire en fran\u00e7ais avec des phrases compl\u00e8tes, une ponctuation claire et des majuscules correctes au d\u00e9but des phrases, pour les noms propres et les titres, comme dans un texte r\u00e9dig\u00e9"
}

View file

@ -0,0 +1 @@
/run/user/1000/hyprwhspr/recording_control

View file

@ -0,0 +1 @@
/run/user/1000/hyprwhspr/recording_status

View file

@ -5,11 +5,21 @@ theme = "ctp-mocha"
[icons] [icons]
icons = "material-nf" icons = "material-nf"
[[block]]
block = "scratchpad"
[block.theme_overrides]
idle_bg = "#fab387"
idle_fg = "#1e1e2e"
[[block]] [[block]]
block = "focused_window" block = "focused_window"
[block.format] [block.format]
full = " $title.str(max_w:15) |" full = " $title.str(max_w:15) |"
short = " $title.str(max_w:10) |" short = " $title.str(max_w:10) |"
[block.theme_overrides]
idle_bg = "#f9e2af"
idle_fg = "#1e1e2e"
[[block]] [[block]]
block = "music" block = "music"
@ -25,8 +35,17 @@ action = "toggle_format"
[[block]] [[block]]
block = "bluetooth" block = "bluetooth"
mac = "E4:61:F4:F4:A1:F7" mac = "E4:61:F4:F4:A1:F7"
format = " JBL Tune {{$battery_icon}} " format = " 󰂯 JBL Tune "
disconnected_format = " 󰂲" disconnected_format = " 󰂲 JBL Tune "
[[block.click]]
button = "left"
action = "blueman-manager"
[[block]]
block = "bluetooth"
mac = "1C:57:85:33:54:7F"
format = " 󰂯 EDENWOOD "
disconnected_format = " 󰂲 EDENWOOD "
[[block.click]] [[block.click]]
button = "left" button = "left"
action = "blueman-manager" action = "blueman-manager"
@ -35,26 +54,46 @@ action = "blueman-manager"
block = "net" block = "net"
device = "wlp1s0" device = "wlp1s0"
format = " $icon {$signal_strength $ssid} " format = " $icon {$signal_strength $ssid} "
[block.theme_overrides]
idle_bg = "#a6e3a1"
idle_fg = "#1e1e2e"
[[block]] [[block]]
block = "sound" block = "sound"
step_width = 3 step_width = 3
max_vol = 100 max_vol = 100
[block.theme_overrides]
idle_bg = "#94e2d5"
idle_fg = "#1e1e2e"
[[block]] [[block]]
block = "backlight" block = "backlight"
device = "amdgpu_bl1" device = "amdgpu_bl1"
invert_icons = true invert_icons = true
minimum = 10 minimum = 10
[block.theme_overrides]
idle_bg = "#89dceb"
idle_fg = "#1e1e2e"
[[block]] [[block]]
block = "battery" block = "battery"
format = " $icon $percentage " format = " $icon $percentage "
[block.theme_overrides]
idle_bg = "#a6e3a1"
warning_bg = "#f9e2af"
critical_bg = "#f38ba8"
idle_fg = "#1e1e2e"
warning_fg = "#1e1e2e"
critical_fg = "#1e1e2e"
[[block]] [[block]]
block = "custom" block = "custom"
command = "~/.local/bin/tlp-profile.sh" command = "~/.local/bin/tlp-profile.sh"
interval = 5 interval = 5
[block.theme_overrides]
idle_bg = "#74c7ec"
idle_fg = "#1e1e2e"
[[block]] [[block]]
block = "packages" block = "packages"
@ -68,25 +107,17 @@ format_up_to_date = " $icon Up to date "
# aur_command should output available updates to stdout (ie behave as echo -ne "update\n") # aur_command should output available updates to stdout (ie behave as echo -ne "update\n")
aur_command = "yay -Qua" aur_command = "yay -Qua"
[[block]]
block = "notify"
driver = "swaync"
[[block.click]]
button = "left"
action = "show"
[[block.click]]
button = "right"
action = "toggle_paused"
[[block]] [[block]]
block = "time" block = "time"
interval = 60 interval = 60
[block.format] format = " $timestamp.datetime(f:'%d/%m %H:%M') "
full = " $icon $timestamp.datetime(f:'%d-%m-%Y %R')" [block.theme_overrides]
short = " $icon $timestamp.datetime(f:%R) " idle_bg = "#b4befe"
idle_fg = "#1e1e2e"
[[block]] [[block]]
block = "menu" block = "menu"
text = " \uf011 " text = " \uf011 "
[[block.items]] [[block.items]]
display = " -> Sleep <-" display = " -> Sleep <-"
cmd = "systemctl suspend" cmd = "systemctl suspend"

View file

@ -30,3 +30,5 @@ cursor_trail 0
shell_integration no-cursor shell_integration no-cursor
include kitty-themes/themes/mocha.conf include kitty-themes/themes/mocha.conf
map alt+c no_cp

View file

@ -5,10 +5,10 @@ text-color=#cdd6f4
border-color=#b4befe border-color=#b4befe
progress-color=over #313244 progress-color=over #313244
border-radius=2 border-radius=5
# Comportement # Comportement
default-timeout=5000 default-timeout=10000
ignore-timeout=1 ignore-timeout=1
max-visible=3 max-visible=3
layer=overlay layer=overlay

View file

@ -10,28 +10,25 @@
# gnome-keyring-daemon # gnome-keyring-daemon
# Verrouillage auto (swayidle) # Verrouillage auto (swayidle)
# protonmail-bridge # 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 # Les outils précédent ont été ajouter à systemd --user
# #
# ================================================= # =================================================
# Wallpapers # Wallpapers
exec-once=swaybg -i ~/.wallpapers/662412-vanilla-arch-wallpaper-linuxart.png exec-once=swaybg -i ~/.wallpapers/arch_rainbow.jpg
# Lancement au démarrage # Lancement au démarrage
exec-once=kitty --class kitty-1 --directory $HOME exec-once=kitty --class kitty-1
exec-once=perplexity exec-once=kitty --class kitty-2
exec-once=kitty --class kitty-2 --directory $HOME exec-once=kitty --class kitty-3
exec-once=kitty --class kitty-3 --directory $HOME -- sh -c "ssh srv-admin-ext" exec-once=kitty --class kitty-mon --directory $HOME
exec-once=chromium exec-once=chromium
exec-once=gtk-launch chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default
exec-once=gtk-launch
exec-once=thunderbird exec-once=thunderbird
exec-once=spotify-launcher exec-once=spotify-launcher
exec-once=waybar exec-once=waybar
exec-once=proton-pass exec-once=AppFlowy
# Presse-papier
exec=wl-paste --watch clipvault store
exec=wl-paste --type image/png --watch clipvault store
# Idle
exec-once=swayidle -w timeout 300 'swaylock -f -c 000000' timeout 301 'systemctl suspend' before-sleep 'swaylock -f -c 000000'

View file

@ -6,6 +6,7 @@
# Applications system # Applications system
binds=SUPER,Return,spawn,kitty binds=SUPER,Return,spawn,kitty
binds=SUPER+CTRL,t,spawn,thunderbird
binds=SUPER+SHIFT,b,spawn,blueman-manager binds=SUPER+SHIFT,b,spawn,blueman-manager
binds=SUPER+SHIFT,p,spawn,proton-pass binds=SUPER+SHIFT,p,spawn,proton-pass
binds=ALT,p,toggle_named_scratchpad,Proton Pass,none,proton-pass binds=ALT,p,toggle_named_scratchpad,Proton Pass,none,proton-pass
@ -14,6 +15,8 @@ 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+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=SUPER,v,spawn,~/.config/mango/scripts/copypast
binds=NONE,Print,spawn,~/.config/mango/scripts/screenshot-clip.sh binds=NONE,Print,spawn,~/.config/mango/scripts/screenshot-clip.sh
binds=SUPER+CTRL,f,spawn,AppFlowy
binds=SUPER+CTRL,g,spawn,gimp
# Browsers & net # Browsers & net
binds=SUPER,b,spawn,chromium binds=SUPER,b,spawn,chromium
@ -21,7 +24,6 @@ binds=SUPER+SHIFT,f,spawn,firefox
binds=SUPER,t,spawn,thunderbird binds=SUPER,t,spawn,thunderbird
# IA's # IA's
binds=SUPER+SHIFT,XF86Assistant,spawn,perplexity
binds=SUPER,m,spawn,spotify-launcher binds=SUPER,m,spawn,spotify-launcher
# Virtualisation # Virtualisation

View file

@ -6,10 +6,10 @@
# switch window focus # switch window focus
binds=SUPER,Tab,focusstack,next binds=SUPER,Tab,focusstack,next
binds=ALT,Left,focusdir,left binds=SUPER,Left,focusdir,left
binds=ALT,Right,focusdir,right binds=SUPER,Right,focusdir,right
binds=ALT,Up,focusdir,up binds=SUPER,Up,focusdir,up
binds=ALT,Down,focusdir,down binds=SUPER,Down,focusdir,down
# swap window # swap window
binds=SUPER+SHIFT,Up,exchange_client,up binds=SUPER+SHIFT,Up,exchange_client,up
@ -19,52 +19,52 @@ binds=SUPER+SHIFT,Right,exchange_client,right
# switch window status # switch window status
binds=SUPER,g,toggleglobal, binds=SUPER,g,toggleglobal,
binds=ALT,Tab,toggleoverview, binds=SUPER,Tab,toggleoverview,
binds=ALT,backslash,togglefloating, binds=SUPER,backslash,togglefloating,
binds=ALT,a,togglemaximizescreen, binds=SUPER,a,togglemaximizescreen,
binds=ALT,f,togglefullscreen, binds=SUPER,f,togglefullscreen,
binds=ALT+SHIFT,f,togglefakefullscreen, binds=SUPER+SHIFT,f,togglefakefullscreen,
binds=SUPER,i,minimized, binds=SUPER,i,minimized,
binds=SUPER,o,toggleoverlay, binds=SUPER,o,toggleoverlay,
binds=SUPER+SHIFT,I,restore_minimized binds=SUPER+SHIFT,I,restore_minimized
binds=ALT,z,toggle_scratchpad binds=SUPER,z,toggle_scratchpad
# tag switch # tag switch
binds=SUPER,Left,viewtoleft,0 binds=ALT,Left,viewtoleft,0
binds=CTRL,Left,viewtoleft_have_client,0 binds=ALT+SHIFT,Left,viewtoleft_have_client,0
binds=SUPER,Right,viewtoright,0 binds=ALT,Right,viewtoright,0
binds=CTRL,Right,viewtoright_have_client,0 binds=ALT+SHIFT,Right,viewtoright_have_client,0
binds=CTRL+SUPER,Left,tagtoleft,0 binds=ALT+SUPER,Left,tagtoleft,0
binds=CTRL+SUPER,Right,tagtoright,0 binds=ALT+SUPER,Right,tagtoright,0
binds=CTRL,ampersand,view,1,0 binds=ALT,ampersand,view,1,0
binds=CTRL,eacute,view,2,0 binds=ALT,eacute,view,2,0
binds=CTRL,quotedbl,view,3,0 binds=ALT,quotedbl,view,3,0
binds=CTRL,apostrophe,view,4,0 binds=ALT,apostrophe,view,4,0
binds=CTRL,parenleft,view,5,0 binds=ALT,parenleft,view,5,0
binds=CTRL,minus,view,6,0 binds=ALT,minus,view,6,0
binds=CTRL,egrave,view,7,0 binds=ALT,egrave,view,7,0
binds=CTRL,underscore,view,8,0 binds=ALT,underscore,view,8,0
binds=CTRL,ccedilla,view,9,0 binds=ALT,ccedilla,view,9,0
# tag: move client to the tag and focus it # tag: move client to the tag and focus it
# tagsilent: move client to the tag and not focus it # tagsilent: move client to the tag and not focus it
# bind=ALT,1,tagsilent,1 # bind=ALT,1,tagsilent,1
binds=ALT,ampersand,tag,1,0 binds=ALT+SUPER,ampersand,tag,1,0
binds=ALT,eacute,tag,2,0 binds=ALT+SUPER,eacute,tag,2,0
binds=ALT,quotedbl,tag,3,0 binds=ALT+SUPER,quotedbl,tag,3,0
binds=ALT,apostrophe,tag,4,0 binds=ALT+SUPER,apostrophe,tag,4,0
binds=ALT,parenleft,tag,5,0 binds=ALT+SUPER,parenleft,tag,5,0
binds=ALT,minus,tag,6,0 binds=ALT+SUPER,minus,tag,6,0
binds=ALT,egrave,tag,7,0 binds=ALT+SUPER,egrave,tag,7,0
binds=ALT,underscore,tag,8,0 binds=ALT+SUPER,underscore,tag,8,0
binds=ALT,ccedilla,tag,9,0 binds=ALT+SUPER,ccedilla,tag,9,0
# monitor switch # monitor switch
binds=ALT+SHIFT,Left,focusmon,left binds=CTRL+SHIFT,Left,focusmon,left
binds=ALT+SHIFT,Right,focusmon,right binds=CTRL+SHIFT,Right,focusmon,right
binds=SUPER+ALT,Left,tagmon,left binds=CTRL+SUPER,Left,tagmon,left
binds=SUPER+ALT,Right,tagmon,right binds=CTRL+SUPER,Right,tagmon,right
# gaps # gaps
binds=ALT+SHIFT,X,incgaps,1 binds=ALT+SHIFT,X,incgaps,1
@ -78,10 +78,10 @@ binds=ALT+SHIFT,R,togglegaps
# binds=CTRL+SHIFT,Right,movewin,+50,+0 # binds=CTRL+SHIFT,Right,movewin,+50,+0
# resizewin # resizewin
binds=CTRL+ALT,Up,resizewin,+0,-10 binds=SUPER+CTRL,Up,resizewin,+0,-10
binds=CTRL+ALT,Down,resizewin,+0,+10 binds=SUPER+CTRL,Down,resizewin,+0,+10
binds=CTRL+ALT,Left,resizewin,-10,+0 binds=SUPER+CTRL,Left,resizewin,-10,+0
binds=CTRL+ALT,Right,resizewin,+10,+0 binds=SUPER+CTRL,Right,resizewin,+10,+0
# Mouse Button Bindings # Mouse Button Bindings
# btn_left and btn_right can't bind none mod key # btn_left and btn_right can't bind none mod key
@ -91,4 +91,4 @@ mousebind=SUPER,btn_right,moveresize,curresize
# Axis Bindings # Axis Bindings
axisbind=SUPER,UP,viewtoleft_have_client axisbind=SUPER,UP,viewtoleft_have_client
axisbind=SUPER,DOWN,viewtoright_have_client # axisbind=SUPER,DOWN,viewtoright_have_client

View file

@ -12,13 +12,14 @@
# scrolle5 layout # scrolle5 layout
binds=ALT,e,set_proportion,0.5 binds=ALT,e,set_proportion,0.5
binds=ALT+SHIFT,e,set_proportion,1 binds=ALT+SHIFT,e,set_proportion,1
binds=ALT,x,switch_proportion_preset, binds=SUPER,x,switch_proportion_preset,
# switch layou5 # switch layou5
binds=SUPER,n,switch_layout binds=SUPER,n,switch_layout
# reload config # reload config
binds=SUPER,r,reload_config binds=SUPER,r,reload_config
binds=SUPER+CTRL,w,~/.config/waybar/scripts/restartWaybar.sh
# exit # exit
binds=SUPER+CTRL,q,quit binds=SUPER+CTRL,q,quit

View file

@ -6,7 +6,7 @@
# layout support: # layout support:
# tile,scroller,grid,deck,monocle,center_tile,vertical_tile,vertical_scroller # tile,scroller,grid,deck,monocle,center_tile,vertical_tile,vertical_scroller
tagrule=id:1,layout_name:scroller tagrule=id:1,layout_name:tile
tagrule=id:2,layout_name:scroller tagrule=id:2,layout_name:scroller
tagrule=id:3,layout_name:scroller tagrule=id:3,layout_name:scroller
tagrule=id:4,layout_name:scroller tagrule=id:4,layout_name:scroller

View file

@ -5,16 +5,22 @@
############################## ##############################
# Tag 1 : shell / terminaux / Perplexity # Tag 1 : shell / terminaux / Perplexity
windowrule=tags:1,scroller_proportion:0.5,appid:kitty-1 windowrule=tags:1,appid:kitty-1
windowrule=tags:1,scroller_proportion:0.5,appid:perplexity windowrule=tags:1,appid:kitty-2
windowrule=tags:1,scroller_proportion:0.5,appid:kitty-2 windowrule=tags:1,appid:kitty-3
# Tag 2 : Ssh serveur # Tag 2 : web
windowrule=tags:2,scroller_proportion:1,appid:kitty-3 windowrule=tags:2,scroller_proportion:1,appid:chromium
windowrule=tags:2,appid:firefox
# Tag 3 : web # Tag 5 : web
windowrule=tags:3,scroller_proportion:0.8,appid:chromium windowrule=tags:5,scroller_proportion:1,appid:AppFlowy
windowrule=tags:3,appid:firefox
# 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 # Tag 8 : mail
windowrule=tags:8,scroller_proportion:0.5,appid:proton-bridge windowrule=tags:8,scroller_proportion:0.5,appid:proton-bridge

View file

@ -1,37 +1,41 @@
#!/usr/bin/env bash #!/usr/bin/env bash
thumb_dir="${XDG_CACHE_HOME:-$HOME/.cache}/clipvault/thumbs" thumb_dir="${XDG_CACHE_HOME:-$HOME/.cache}/cliphist/thumbs"
mkdir -p "$thumb_dir" mkdir -p "$thumb_dir"
clip_list="$(clipvault list)" clip_list="$(cliphist list)"
# nettoyer les vignettes orphelines # Nettoyer les vignettes orphelines
for thumb in "$thumb_dir"/*; do for thumb in "$thumb_dir"/*; do
[ -e "$thumb" ] || continue [ -e "$thumb" ] || continue
clip_id="${thumb##*/}" clip_id="${thumb##*/}"
clip_id="${clip_id%.*}" clip_id="${clip_id%.*}"
check=$(printf '%s\n' "$clip_list" | rg "^${clip_id}\s")
if [ -z "$check" ]; then if ! printf '%s\n' "$clip_list" | rg -q "^${clip_id}[[:space:]]"; then
rm -f "$thumb" rm -f "$thumb"
fi fi
done done
# programme gawk : détecter les entrées image, générer les thumbs, préfixer par img:
read -r -d '' prog <<EOF read -r -d '' prog <<EOF
match(\$0, /^([0-9]+)\s\[\[ binary data .*image\/(jpeg|jpg|png|bmp|webp)/, grp) { match(\$0, /^([0-9]+)[[:space:]]+\\[\\[ binary data .* (png|jpeg|jpg|bmp|webp) [0-9]+x[0-9]+ \\]\\]/, grp) {
id = grp[1] id = grp[1]
ext = grp[2] ext = grp[2]
if (ext == "jpeg") ext = "jpg"
image = id "." ext image = id "." ext
cmd = "[ -f $thumb_dir/" image " ] || printf \"" id "\\n\" | clipvault get | magick - -resize '256x256>' $thumb_dir/" image thumb = "$thumb_dir/" image
cmd = "[ -f '" thumb "' ] || printf '%s\\n' '" \$0 "' | cliphist decode | magick - -resize '256x256>' '" thumb "'"
system(cmd) system(cmd)
print "img:$thumb_dir/" image
print "img:" thumb
next next
} }
1 1
EOF EOF
choice=$( choice=$(
gawk <<< "$clip_list" "$prog" | gawk "$prog" <<< "$clip_list" |
wofi -I --dmenu --cache-file=/dev/null \ wofi -I --dmenu --cache-file=/dev/null \
-Dimage_size=100 -Dynamic_lines=true \ -Dimage_size=100 -Dynamic_lines=true \
--xoffset=600 --yoffset=20 --width=45% --height=45% --gtk-dark --xoffset=600 --yoffset=20 --width=45% --height=45% --gtk-dark
@ -43,10 +47,14 @@ if [ "${choice:0:4}" = "img:" ]; then
thumb_file="${choice:4}" thumb_file="${choice:4}"
clip_id="${thumb_file##*/}" clip_id="${thumb_file##*/}"
clip_id="${clip_id%.*}" clip_id="${clip_id%.*}"
else
# on prend l’ID (premier champ) de la ligne choisie
clip_id="$(printf '%s\n' "$choice" | awk '{print $1}')"
fi
# récupérer l’entrée choisie et la remettre dans le clipboard printf '%s\n' "$clip_list" |
printf '%s\n' "$clip_id" | clipvault get | wl-copy rg "^${clip_id}[[:space:]]" |
head -n 1 |
cliphist decode |
wl-copy
else
printf '%s\n' "$choice" |
cliphist decode |
wl-copy
fi

View file

@ -0,0 +1,9 @@
#!/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

View file

@ -1,2 +1,2 @@
#!/usr/bin/env bash #!/usr/bin/env bash
grim -g "$(slurp)" - | wl-copy -t image/png grim -g "$(slurp)" - | wl-copy

View file

@ -42,10 +42,10 @@ zoom_initial_ratio=0.4
zoom_end_ratio=0.8 zoom_end_ratio=0.8
fadein_begin_opacity=0.5 fadein_begin_opacity=0.5
fadeout_begin_opacity=0.8 fadeout_begin_opacity=0.8
animation_duration_move=500 animation_duration_move=250
animation_duration_open=400 animation_duration_open=220
animation_duration_tag=350 animation_duration_tag=100
animation_duration_close=800 animation_duration_close=180
animation_duration_focus=0 animation_duration_focus=0
animation_curve_open=0.46,1.0,0.29,1 animation_curve_open=0.46,1.0,0.29,1
animation_curve_move=0.46,1.0,0.29,1 animation_curve_move=0.46,1.0,0.29,1

View file

@ -26,38 +26,42 @@ vim.opt.clipboard = "unnamedplus"
vim.g.loaded_netrw = 1 vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1 vim.g.loaded_netrwPlugin = 1
vim.g.loaded_ruby_provider = 0
vim.g.loaded_node_provider = 0
vim.g.loaded_perl_provider = 0
-- Avant require("config.lazy") -- Avant require("config.lazy")
local ts_site = vim.fn.stdpath("data") .. "/site" local ts_site = vim.fn.stdpath("data") .. "/site"
if not vim.tbl_contains(vim.opt.rtp:get(), ts_site) then if not vim.tbl_contains(vim.opt.rtp:get(), ts_site) then
vim.opt.rtp:append(ts_site) vim.opt.rtp:append(ts_site)
end end
-- charge lazy.nvim + plugins -- charge lazy.nvim + plugins
require("config.lazy") require("config.lazy")
-- Position du curser -- Position du curser
vim.api.nvim_create_autocmd("BufReadPost", { vim.api.nvim_create_autocmd("BufReadPost", {
callback = function() callback = function()
local mark = vim.api.nvim_buf_get_mark(0, '"') local mark = vim.api.nvim_buf_get_mark(0, '"')
local line_count = vim.api.nvim_buf_line_count(0) local line_count = vim.api.nvim_buf_line_count(0)
if mark[1] > 0 and mark[1] <= line_count then if mark[1] > 0 and mark[1] <= line_count then
vim.api.nvim_win_set_cursor(0, mark) vim.api.nvim_win_set_cursor(0, mark)
end end
end, end,
}) })
-- Undo persistant -- Undo persistant
local undodir = vim.fn.stdpath("state") .. "/undo" local undodir = vim.fn.stdpath("state") .. "/undo"
if vim.fn.isdirectory(undodir) == 0 then if vim.fn.isdirectory(undodir) == 0 then
vim.fn.mkdir(undodir, "p") vim.fn.mkdir(undodir, "p")
end end
vim.opt.undodir = undodir vim.opt.undodir = undodir
vim.opt.undofile = true vim.opt.undofile = true
vim.filetype.add({ vim.filetype.add({
pattern = { [".*/hypr/.*%.conf"] = "hyprlang" }, pattern = { [".*/hypr/.*%.conf"] = "hyprlang" },
}) })
-- require -- require
require("config.filetypes")
-- Keymaps (fichier séparé) -- Keymaps (fichier séparé)
require("config.maps") require("config.maps")
@ -67,7 +71,48 @@ require("config.markdown")
-- Mason/LSP -- Mason/LSP
require("mason-lspconfig").setup() require("mason-lspconfig").setup()
local Terminal = require("toggleterm.terminal").Terminal
local function get_devcontainer()
local project = vim.fn.getcwd()
local handle = io.popen(
'docker ps -q --filter "label=devcontainer.local_folder='
.. project
.. '"'
)
if not handle then
return nil
end
local container = handle:read("*a"):gsub("%s+", "")
handle:close()
if container == "" then
return nil
end
return container
end
vim.keymap.set("n", "<leader>dt", function()
local container = get_devcontainer()
if not container then
vim.notify("Aucun devcontainer actif", vim.log.levels.ERROR)
return
end
local docker_term = Terminal:new({
cmd = "docker exec -it -u vscode -w /workspace " .. container .. " zsh",
direction = "float",
hidden = true,
})
docker_term:toggle()
end, {
desc = "Docker terminal",
})
vim.cmd.colorscheme "catppuccin-mocha" vim.cmd.colorscheme "catppuccin-mocha"

View file

@ -1,38 +1,37 @@
{ {
"LuaSnip": { "branch": "master", "commit": "a62e1083a3cfe8b6b206e7d3d33a51091df25357" }, "LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"catppuccin": { "branch": "main", "commit": "426dbebe06b5c69fd846ceb17b42e12f890aedf1" }, "catppuccin": { "branch": "main", "commit": "c7c692a0ad3080710893abbae100171819a3e4be" },
"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": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gitsigns.nvim": { "branch": "main", "commit": "dd3f588bacbeb041be6facf1742e42097f62165d" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lualine.nvim": { "branch": "master", "commit": "131a558e13f9f28b15cd235557150ccb23f89286" }, "lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "7b01e2974a47d489bb92f47a41e4c0088ea8f86e" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "7adc933dabcc7c86ae6b07aff7ee68eac398491f" },
"mason.nvim": { "branch": "main", "commit": "cbf8d285e1462dd24acf3507817be2bbcb035919" }, "mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
"mini.icons": { "branch": "main", "commit": "9c7b1b90b15bdd69c52f6e31889dbc9987c30ec4" }, "mini.starter": { "branch": "main", "commit": "25de4998197d59673f1918968a8f4060195edca0" },
"mini.map": { "branch": "stable", "commit": "234eaf5cbcaee320d87e96465fbb534aa05b301e" },
"mini.starter": { "branch": "main", "commit": "35b018a035794e341ac01cb2091bbd71b3f823d0" },
"neo-tree.nvim": { "branch": "v3.x", "commit": "ebd66767191714e008ce73b769518a763ff31bdc" }, "neo-tree.nvim": { "branch": "v3.x", "commit": "ebd66767191714e008ce73b769518a763ff31bdc" },
"neowiki.nvim": { "branch": "main", "commit": "85dddf6057b07d4d6772b2f90e754a18e958a865" }, "neowiki.nvim": { "branch": "main", "commit": "85dddf6057b07d4d6772b2f90e754a18e958a865" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" }, "nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
"nvim-cmp": { "branch": "main", "commit": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca" }, "nvim-cmp": { "branch": "main", "commit": "2ffe79f1f021def8dd1fcd81deb16f1bb0d989f3" },
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, "nvim-colorizer.lua": { "branch": "master", "commit": "72a05f62c52241bc7441c820eb53946f92b2e6a4" },
"nvim-lsp-file-operations": { "branch": "master", "commit": "b9c795d3973e8eec22706af14959bc60c579e771" }, "nvim-lsp-file-operations": { "branch": "master", "commit": "b9c795d3973e8eec22706af14959bc60c579e771" },
"nvim-lspconfig": { "branch": "master", "commit": "246572944c2a1e2a646c2e7609ff619b0fe74c18" }, "nvim-lspconfig": { "branch": "master", "commit": "d592c1e6ad9a0a01b3d5ed3f0345d68407167181" },
"nvim-tcss": { "branch": "main", "commit": "bf9001416158f32fe7e92c42de94de3595aa13e5" }, "nvim-tcss": { "branch": "main", "commit": "bf9001416158f32fe7e92c42de94de3595aa13e5" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" }, "nvim-treesitter": { "branch": "main", "commit": "a45a920ec04cda5624f6dea0ff6454c81c3ad2d5" },
"nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" }, "nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" },
"nvim-web-devicons": { "branch": "master", "commit": "7d8dad2c837fcdf2e65997e68657c1a21c568074" }, "nvim-web-devicons": { "branch": "master", "commit": "2ae6958df7ced50baac5035cec0c15799eedfbf7" },
"nvim-window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" }, "nvim-window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" },
"outline.nvim": { "branch": "main", "commit": "c293eb56db880a0539bf9d85b4a27816960b863e" }, "outline.nvim": { "branch": "main", "commit": "2a132953b944561d45b52e4541ebfff71934a742" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"render-markdown.nvim": { "branch": "main", "commit": "629eb9533ec989d9d5c6cab8f3ad5372422c24e0" }, "render-markdown.nvim": { "branch": "main", "commit": "f422cb5c6855f150e2ddcfaf44e7157b98b34f6a" },
"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" },
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
"vim-fugitive": { "branch": "master", "commit": "3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f0" }, "vim-fugitive": { "branch": "master", "commit": "3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f0" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
} }

View file

@ -1,8 +1,5 @@
local ts = require("nvim-treesitter.parsers")
ts.filetype_to_parsername.swayconfig = "i3"
vim.filetype.add({ vim.filetype.add({
pattern = { extension = {
[".*/sway/config.*"] = "swayconfig", h = "c",
}, },
}) })

View file

@ -1,40 +1,89 @@
-- Capabilities avec cmp si disponible
local capabilities = vim.lsp.protocol.make_client_capabilities() local capabilities = vim.lsp.protocol.make_client_capabilities()
local ok_cmp, cmp_lsp = pcall(require, "cmp_nvim_lsp") local ok_cmp, cmp_lsp = pcall(require, "cmp_nvim_lsp")
if ok_cmp then if ok_cmp then
capabilities = cmp_lsp.default_capabilities(capabilities) capabilities = cmp_lsp.default_capabilities(capabilities)
end end
local lspconfig = require("lspconfig") -- Groupe nettoyé à chaque chargement de la configuration
local lsp_attach_group = vim.api.nvim_create_augroup(
"fy59_lsp_attach",
{ clear = true }
)
-- Fonction appelée quand un serveur LSP se connecte à un buffer -- Keymaps LSP
local on_attach = function(_, bufnr) vim.api.nvim_create_autocmd("LspAttach", {
local map = function(mode, lhs, rhs, desc) group = lsp_attach_group,
vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, desc = desc })
end
-- Keymaps de base LSP callback = function(args)
map("n", "gd", vim.lsp.buf.definition, "LSP: Go to definition") local bufnr = args.buf
map("n", "gr", vim.lsp.buf.references, "LSP: References")
map("n", "K", vim.lsp.buf.hover, "LSP: Hover")
map("n", "<leader>rn", vim.lsp.buf.rename, "LSP: Rename")
map("n", "<leader>ca", vim.lsp.buf.code_action, "LSP: Code action")
map("n", "[d", vim.diagnostic.goto_prev, "LSP: Prev diagnostic")
map("n", "]d", vim.diagnostic.goto_next, "LSP: Next diagnostic")
-- Format on save (si le serveur sait formater) local map = function(lhs, rhs, desc)
vim.api.nvim_create_autocmd("BufWritePre", { vim.keymap.set("n", lhs, rhs, {
buffer = bufnr, buffer = bufnr,
callback = function() desc = desc,
vim.lsp.buf.format({ async = false }) })
end
map("ld", vim.lsp.buf.definition, "LSP: Go to definition")
map("lD", vim.lsp.buf.declaration, "LSP: Go to declaration")
map("lr", vim.lsp.buf.references, "LSP: References")
map("K", vim.lsp.buf.hover, "LSP: Hover")
map("<leader>rn", vim.lsp.buf.rename, "LSP: Rename")
map("<leader>ca", vim.lsp.buf.code_action, "LSP: Code action")
map("<leader>e", vim.diagnostic.open_float, "LSP: Show diagnostic")
map("[d", function()
vim.diagnostic.jump({ count = -1 })
end, "LSP: Prev diagnostic")
map("]d", function()
vim.diagnostic.jump({ count = 1 })
end, "LSP: Next diagnostic")
end, end,
})
end
-- Pyright pour Python
-- Exemple approximatif avec la future API
local cfg = vim.lsp._config -- ou vim.lsp.config selon la version
cfg.setup("pyright", {
on_attach = on_attach,
capabilities = capabilities,
}) })
-- Configuration des serveurs
vim.lsp.config("pyright", {
capabilities = capabilities,
})
vim.lsp.config("bashls", {
capabilities = capabilities,
})
vim.lsp.config("lua_ls", {
capabilities = capabilities,
settings = {
Lua = {
diagnostics = {
globals = { "vim" },
},
},
},
})
vim.lsp.config("clangd", {
capabilities = capabilities,
cmd = {
"clangd",
"--background-index",
"--clang-tidy",
},
on_attach = function(client)
client.server_capabilities.semanticTokensProvider = nil
end,
})
-- Activation des serveurs
vim.lsp.enable({
"clangd",
"pyright",
"bashls",
"lua_ls",
})
-- rust_analyzer est géré par rustaceanvim

View file

@ -1,61 +1,103 @@
local map = vim.keymap.set local map = vim.keymap.set
local opts = { noremap = true, silent = true }
-- Recherche -- Recherche
map("n", "<leader>h", "<cmd>nohlsearch<cr>", { desc = "Clear hlsearch" }) map("n", "<leader>h", "<cmd>nohlsearch<cr>", { desc = "Clear hlsearch" })
-- neo-tree -- neo-tree
vim.keymap.set("n", "<C-n>", "<cmd>Neotree toggle<CR>", { silent = true, desc = "Explorer" }) map("n", "<C-n>", "<cmd>Neotree toggle<CR>", { silent = true, desc = "Explorer" })
local telescope = require("telescope.builtin") local telescope = require("telescope.builtin")
-- Fuzzy find files -- Telescope
vim.keymap.set("n", "<leader>ff", telescope.find_files, { desc = "Find files" }) map("n", "<leader>ff", telescope.find_files, { desc = "Find files" })
map("n", "<leader>fg", telescope.live_grep, { desc = "Live grep" })
-- Live grep map("n", "<leader>fb", telescope.buffers, { desc = "Find buffers" })
vim.keymap.set("n", "<leader>fg", telescope.live_grep, { desc = "Live grep" }) map("n", "<leader>fh", telescope.help_tags, { desc = "Find help" })
-- Buffers
vim.keymap.set("n", "<leader>fb", telescope.buffers, { desc = "Find buffers" })
-- Help tags
vim.keymap.set("n", "<leader>fh", telescope.help_tags, { desc = "Find help" })
-- LSP -- LSP
vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) map("n", "gd", vim.lsp.buf.definition, opts)
vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) map("n", "gr", vim.lsp.buf.references, opts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) map("n", "K", vim.lsp.buf.hover, opts)
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts) map("n", "<leader>rn", vim.lsp.buf.rename, opts)
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts) map("n", "<leader>ca", vim.lsp.buf.code_action, opts)
vim.keymap.set("n", "<leader>d", vim.diagnostic.open_float, opts) map("n", "<leader>d", vim.diagnostic.open_float, opts)
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) map("n", "[d", vim.diagnostic.goto_prev, opts)
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts) map("n", "]d", vim.diagnostic.goto_next, opts)
-- Indenter en mode Visuel avec Tab / Shift-Tab
vim.keymap.set("v", "<Tab>", ">gv", { desc = "Indent selection" })
vim.keymap.set("v", "<S-Tab>", "<gv", { desc = "Unindent selection" })
require("which-key").add({ require("which-key").add({
-- mappings sans <leader> -- mappings sans <leader>
{ "f", group = "find" }, { "<leader>f", group = "find" },
{ "ff", "<cmd>Telescope find_files<cr>", desc = "Find files" }, { "ff", "<cmd>Telescope find_files<cr>", desc = "Find files" },
{ "fg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" }, { "fg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" },
{ "fb", "<cmd>Telescope buffers<cr>", desc = "Buffers" }, { "fb", "<cmd>Telescope buffers<cr>", desc = "Buffers" },
{ "fh", "<cmd>Telescope help_tags<cr>", desc = "Help tags" }, { "fh", "<cmd>Telescope help_tags<cr>", desc = "Help tags" },
{ "w", group = "write" }, { "w", group = "write" },
{ "ww", "<cmd>w<cr>", desc = "Write file" }, { "ww", "<cmd>w<cr>", desc = "Write file" },
-- mappings sous <leader> -- mappings sous <leader>
{ "<leader>f", group = "file" }, { "<leader>f", group = "file" },
{ "<leader>ff", "<cmd>Telescope find_files<cr>", desc = "Find files" }, { "<leader>ff", "<cmd>Telescope find_files<cr>", desc = "Find files" },
{ "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" }, { "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" },
--Git
{ "<leader>g", group = "Git"},
{ "<leader>gs", "<cmd>Git status<cr>", desc = "Git status" },
{ "<leader>ga", "<cmd>Git add .<cr>", desc = "Git add all" },
{ "<leader>gc", "<cmd>Git commit<cr>", desc = "Git commit" },
{ "<leader>gp", "<cmd>Git push<cr>", desc = "Git push" },
}) })
vim.keymap.set("x", "<Tab>", ">gv", { desc = "Indent selection" })
vim.keymap.set("x", "<S-Tab>", "<gv", { desc = "Unindent selection" })
local function devcontainer()
local container = vim.fn.getenv("DEVCONTAINER_ID")
if container == vim.NIL or container == nil or container == "" then
vim.notify("Aucun DEVCONTAINER_ID trouvé", vim.log.levels.ERROR)
return nil
end
return tostring(container)
end
local function docker_cmd(cmd)
local container = devcontainer()
if not container then
return
end
vim.cmd("write")
vim.cmd("terminal docker exec -it -u vscode " .. container .. " zsh -lc '" .. cmd .. "'")
end
vim.keymap.set("n", "<F5>", function()
local file = vim.fn.expand("%")
local out = vim.fn.expand("%:r")
docker_cmd("gcc -Wall -Wextra -std=c17 -g " .. file .. " -o " .. out)
end, { desc = "GCC compile current file" })
vim.keymap.set("n", "<F6>", function()
local out = vim.fn.expand("%:r")
docker_cmd("./" .. out)
end, { desc = "Run current program" })
vim.keymap.set("n", "<F7>", function()
local out = vim.fn.expand("%:r")
docker_cmd("gdb ./" .. out)
end, { desc = "Debug with GDB" })
vim.keymap.set("n", "<F8>", function()
local out = vim.fn.expand("%:r")
docker_cmd("valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./" .. out)
end, { desc = "Run Valgrind" })
vim.keymap.set("n", "<leader>cb", function()
docker_cmd(
"cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON && cmake --build build --parallel")
end, { desc = "CMake build" })
vim.keymap.set("n", "<leader>cc", function()
docker_cmd("cmake --build build --target clean")
end, { desc = "CMake clean" })
vim.keymap.set("n", "<leader>cp", function()
docker_cmd("cppcheck --enable=all --std=c17 --suppress=missingIncludeSystem -I include src")
end, { desc = "Cppcheck project" })

View file

@ -1,6 +1,5 @@
return { return {
"norcalli/nvim-colorizer.lua", "catgoose/nvim-colorizer.lua",
config = function() event = "BufReadPre",
require("colorizer").setup() opts = {},
end,
} }

View file

@ -1,9 +0,0 @@
return {
{
"lewis6991/gitsigns.nvim",
opts = {
current_line_blame = true,
},
},
}

View file

@ -1,15 +1,42 @@
return { return {
"mason-org/mason-lspconfig.nvim", -- Mason
opts = { {
ensure_installed = { "mason-org/mason.nvim",
"pyright" opts = {},
},
-- Bridge Mason <-> lspconfig
{
"mason-org/mason-lspconfig.nvim",
opts = {
ensure_installed = {
"pyright", -- Python (tu l'avais déjà)
"bashls", -- Bash
"lua_ls", -- Lua
-- rust_analyzer : géré par rustaceanvim, pas ici
},
automatic_enable = {
exclude = { "rust_analyzer" },
},
},
dependencies = {
{ "mason-org/mason.nvim", opts = {} },
"neovim/nvim-lspconfig",
}, },
}, },
dependencies = {
{ -- nvim-lspconfig : chargé, config dans lsp-setup.lua
"mason-org/mason.nvim", {
opts = {}
},
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
config = function()
require("config.lsp-setup")
end,
},
-- Rust : rustaceanvim
{
"mrcjkb/rustaceanvim",
version = "^5",
lazy = false,
}, },
} }

View file

@ -1,13 +0,0 @@
-- lua/plugins/mini-icons.lua
return {
"nvim-mini/mini.icons",
lazy = true, -- ou enlève lazy si tu veux partout
opts = {
-- style = "glyph", -- icônes Nerd Font (par défaut)
-- style = "ascii", -- si ton terminal n’a pas de Nerd Font
},
config = function(_, opts)
require("mini.icons").setup(opts)
end,
}

View file

@ -1,30 +0,0 @@
return {
{
"echasnovski/mini.map",
branch = "stable",
config = function()
local map = require("mini.map")
map.setup({
symbols = {
encode = map.gen_encode_symbols.dot("4x2"),
},
integrations = {
map.gen_integration.builtin_search(),
map.gen_integration.diagnostic(),
map.gen_integration.gitsigns(),
},
})
-- PAS d'ouverture auto : bloc autocmd commenté
-- <leader>p : toggle minimap
vim.keymap.set("n", "<leader>p", function()
map.toggle()
end, {
desc = "Toggle minimap",
})
end,
},
}

View file

@ -1,11 +1,10 @@
return { return {
{ {
"windwp/nvim-autopairs", "windwp/nvim-autopairs",
event = "InsertEnter", event = "InsertEnter",
opts = { opts = {
disable_filetype = { "TelescopePrompt", "vim" }, disable_filetype = { "TelescopePrompt", "vim" },
-- tu pourras ajuster ici (ignored_next_char, fast_wrap, etc.) -- tu pourras ajuster ici (ignored_next_char, fast_wrap, etc.)
},
}, },
},
} }

View file

@ -1,15 +1,18 @@
---@type LazySpec --@type LazySpec
return { return {
{ {
"MeanderingProgrammer/render-markdown.nvim", "MeanderingProgrammer/render-markdown.nvim",
dependencies = { dependencies = {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
"nvim-tree/nvim-web-devicons", -- ou mini.icons si tu utilises mini "nvim-tree/nvim-web-devicons", -- ou mini.icons si tu utilises mini
},
opts = {
-- preset = "lazy", -- tu peux tester ce preset plus tard
enabled = true,
file_types = { "markdown" },
latex = {
enabled = false,
},
},
}, },
opts = {
-- preset = "lazy", -- tu peux tester ce preset plus tard
enabled = true,
file_types = { "markdown" },
},
},
} }

View file

@ -0,0 +1,7 @@
return {
"akinsho/toggleterm.nvim",
version = "*",
config = function()
require("toggleterm").setup()
end,
}

View file

@ -1,27 +1,29 @@
return { return {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
build = ":TSUpdate", build = ":TSUpdate",
opts = { opts = {
ensure_installed = { ensure_installed = {
"bash", "bash",
"c", "c",
"lua", "lua",
"vim", "vim",
"vimdoc", "vimdoc",
"markdown", "markdown",
"markdown_inline", "markdown_inline",
"query", "query",
"python", "python",
"html", "html",
"yaml",
"latex",
"rust",
},
auto_install = true,
highlight = {
enable = true,
additional_vim_regex_highlighting = {},
},
indent = {
enable = true,
},
}, },
auto_install = true,
highlight = {
enable = true,
additional_vim_regex_highlighting = {},
},
indent = {
enable = true,
},
},
} }

View file

@ -0,0 +1,105 @@
{
"$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/**"
]
}
}

View file

@ -0,0 +1,3 @@
{
"$schema": "https://opencode.ai/config.json"
}

39
sway/.config/sway/autostart Executable file → Normal file
View file

@ -2,16 +2,6 @@
# Autostart # # Autostart #
# =========== # # =========== #
# =================================================
# Filtre lumière bleue (wlsunset)
# Notifications (swaync)
# gnome-keyring-daemon
# protonmail-bridge
#
# Les outils précédent ont été ajouter à systemd --user
#
# =================================================
# ================================================= # =================================================
# Transparence # Transparence
# ================================================= # =================================================
@ -22,38 +12,11 @@ exec python3 ~/.config/sway/scripts/inactive-windows-transparency.py
# Règles d'assignation automatique # Règles d'assignation automatique
# ================================================= # =================================================
assign [app_id="kitty-1"] workspace 1
assign [app_id="kitty-2"] workspace 1
assign [app_id="electron" title="Perplexity"] workspace 1
assign [app_id="chromium"] workspace 2
assign [app_id="firefox"] workspace 3
assign [app_id="proton-bridge"] workspace 9
assign [app_id="org.mozilla.Thunderbird"] workspace 9
assign [class="Spotify"] workspace 10 assign [class="Spotify"] workspace 10
# ================================================= # =================================================
# Lancement des applications # Lancement des applications
# ================================================= # =================================================
exec kitty --class kitty-1 --directory $HOME
exec kitty --class kitty-2 --directory $HOME
exec perplexity
exec chromium
exec thunderbird
exec spotify-launcher exec spotify-launcher
exec autotiling
exec ~/.config/sway/scripts/layout-workspace1.sh
# =================================================
# Presse-papier
# =================================================
exec wl-paste --watch clipvault store
exec wl-paste --type image/png --watch clipvault store
# =================================================
# Verrouillage auto (swayidle)
# =================================================
exec-once=swayidle -w timeout 300 'swaylock -f -c 000000' timeout 301 'systemctl suspend' before-sleep 'swaylock -f -c 000000'

60
sway/.config/sway/autostart.bak Executable file
View file

@ -0,0 +1,60 @@
# =========== #
# 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'

View file

@ -5,7 +5,7 @@
include ~/.config/sway/catppuccin-mocha include ~/.config/sway/catppuccin-mocha
bar { bar {
font pango:JetBrainsMono Nerd Font 12 font pango:Fira Code 12
position top position top
status_command i3status-rs ~/.config/i3status-rust/config.toml status_command i3status-rs ~/.config/i3status-rust/config.toml
colors { colors {
@ -18,6 +18,6 @@ bar {
focused_workspace $base $mauve $crust focused_workspace $base $mauve $crust
active_workspace $base $surface2 $text active_workspace $base $surface2 $text
inactive_workspace $base $base $text inactive_workspace $base $base $text
urgent_workspace $base $red $crust urgent_workspace $base $peach $crust
} }
} }

View file

@ -14,20 +14,20 @@ set $right l
set $term kitty set $term kitty
# Start a terminal # Start a terminal
bindsym $mod+Return exec $term bindsym $mod+Return exec $term
# Kill focused window # Kill focused window
bindsym $mod+q kill bindsym $mod+q kill
# 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.
# Despite the name, also works for non-floating windows. # Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right # Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging. # mouse button for dragging.
floating_modifier $mod normal floating_modifier $mod normal
# Exit sway (logs you out of your Wayland session) # Exit sway (logs you out of your Wayland session)
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
############################################### ###############################################
@ -37,28 +37,28 @@ set $term kitty
############################################### ###############################################
# Move your focus around # Move your focus around
bindsym $mod+$left focus left bindsym $mod+$left focus left
bindsym $mod+$down focus down bindsym $mod+$down focus down
bindsym $mod+$up focus up bindsym $mod+$up focus up
bindsym $mod+$right focus right bindsym $mod+$right focus right
# Or use $mod+[up|down|left|right] # Or use $mod+[up|down|left|right]
bindsym $mod+Left focus left bindsym $mod+Left focus left
bindsym $mod+Down focus down bindsym $mod+Down focus down
bindsym $mod+Up focus up bindsym $mod+Up focus up
bindsym $mod+Right focus right bindsym $mod+Right focus right
# Move the focused window with the same, but add Shift # Move the focused window with the same, but add Shift
bindsym $mod+Shift+$left move left bindsym $mod+Ctrl+$left move left
bindsym $mod+Shift+$down move down bindsym $mod+Ctrl+$down move down
bindsym $mod+Shift+$up move up bindsym $mod+Ctrl+$up move up
bindsym $mod+Shift+$right move right bindsym $mod+Ctrl+$right move right
# Ditto, with arrow keys # Ditto, with arrow keys
bindsym $mod+Shift+Left move left bindsym $mod+Ctrl+Left move left
bindsym $mod+Shift+Down move down bindsym $mod+Ctrl+Down move down
bindsym $mod+Shift+Up move up bindsym $mod+Ctrl+Up move up
bindsym $mod+Shift+Right move right bindsym $mod+Ctrl+Right move right
############################################### ###############################################
# #
@ -67,28 +67,28 @@ set $term kitty
############################################### ###############################################
# Switch to workspace # Switch to workspace
bindsym $mod+ampersand workspace number 1 bindsym $mod+ampersand workspace number 1
bindsym $mod+eacute workspace number 2 bindsym $mod+eacute workspace number 2
bindsym $mod+quotedbl workspace number 3 bindsym $mod+quotedbl workspace number 3
bindsym $mod+apostrophe workspace number 4 bindsym $mod+apostrophe workspace number 4
bindsym $mod+parenleft workspace number 5 bindsym $mod+parenleft workspace number 5
bindsym $mod+minus workspace number 6 bindsym $mod+minus workspace number 6
bindsym $mod+egrave workspace number 7 bindsym $mod+egrave workspace number 7
bindsym $mod+underscore workspace number 8 bindsym $mod+underscore workspace number 8
bindsym $mod+ccedilla workspace number 9 bindsym $mod+ccedilla workspace number 9
bindsym $mod+agrave workspace number 10 bindsym $mod+agrave workspace number 10
# Move focused container to workspace # Move focused container to workspace
bindsym $mod+Shift+ampersand move container to workspace number 1 bindsym $mod+Ctrl+ampersand move container to workspace number 1
bindsym $mod+Shift+eacute move container to workspace number 2 bindsym $mod+Ctrl+eacute move container to workspace number 2
bindsym $mod+Shift+quotedbl move container to workspace number 3 bindsym $mod+Ctrl+quotedbl move container to workspace number 3
bindsym $mod+Shift+apostrophe move container to workspace number 4 bindsym $mod+Ctrl+apostrophe move container to workspace number 4
bindsym $mod+Shift+parenleft move container to workspace number 5 bindsym $mod+Ctrl+parenleft move container to workspace number 5
bindsym $mod+Shift+minus move container to workspace number 6 bindsym $mod+Ctrl+minus move container to workspace number 6
bindsym $mod+Shift+egrave move container to workspace number 7 bindsym $mod+Ctrl+egrave move container to workspace number 7
bindsym $mod+Shift+underscore move container to workspace number 8 bindsym $mod+Ctrl+underscore move container to workspace number 8
bindsym $mod+Shift+ccedilla move container to workspace number 9 bindsym $mod+Ctrl+ccedilla move container to workspace number 9
bindsym $mod+Shift+agrave move container to workspace number 10 bindsym $mod+Ctrl+agrave move container to workspace number 10
# Note: workspaces can have any name you want, not just numbers. # Note: workspaces can have any name you want, not just numbers.
# We just use 1-10 as the default. # We just use 1-10 as the default.
@ -99,36 +99,28 @@ set $term kitty
# #
############################################### ###############################################
bindsym $mod+N exec swaync-client -t
###############################################
#
# Layout stuff
#
###############################################
# You can "split" the current object of your focus with # You can "split" the current object of your focus with
# $mod+b or $mod+v, for horizontal and vertical splits # $mod+b or $mod+v, for horizontal and vertical splits
# respectively. # respectively.
# bindsym $mod+b splith bindsym $mod+b splith
# bindsym $mod+v splitv bindsym $mod+v splitv
# Switch the current container between different layout styles # Switch the current container between different layout styles
bindsym $mod+s layout stacking bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split bindsym $mod+e layout toggle split
# Make the current focus fullscreen # Make the current focus fullscreen
bindsym $mod+f fullscreen bindsym $mod+f fullscreen
# Toggle the current focus between tiling and floating mode # Toggle the current focus between tiling and floating mode
bindsym $mod+Shift+space floating toggle bindsym $mod+Ctrl+space floating toggle
# Swap focus between the tiling area and the floating area # Swap focus between the tiling area and the floating area
bindsym $mod+space focus mode_toggle bindsym $mod+space focus mode_toggle
# Move focus to the parent container # Move focus to the parent container
bindsym $mod+a focus parent bindsym $mod+a focus parent
############################################### ###############################################
# #
@ -140,11 +132,10 @@ bindsym $mod+N exec swaync-client -t
# You can send windows there and get them back later. # You can send windows there and get them back later.
# Move the currently focused window to the scratchpad # Move the currently focused window to the scratchpad
bindsym $mod+Shift+i move scratchpad bindsym $mod+Ctrl+i move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window. # Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them. # If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+i scratchpad show bindsym $mod+i scratchpad show
############################################### ###############################################
@ -184,14 +175,14 @@ bindsym $mod+r mode "resize"
############################################### ###############################################
# Special keys to adjust volume via PulseAudio # Special keys to adjust volume via PulseAudio
bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle
bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5% bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5%
bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5% bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5%
bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle
# Special keys to adjust brightness via brightnessctl # Special keys to adjust brightness via brightnessctl
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
############################################### ###############################################
@ -201,7 +192,7 @@ bindsym $mod+r mode "resize"
############################################### ###############################################
# Reload Sway config # Reload Sway config
bindsym $mod+Shift+c Reload bindsym $mod+Ctrl+r Reload
############################################### ###############################################
# #
@ -209,19 +200,23 @@ bindsym $mod+Shift+c Reload
# #
############################################### ###############################################
bindsym $mod+b exec chromium bindsym $mod+Alt+i exec ~/.local/bin/vmware-on-demand
bindsym $mod+g exec google-chrome-stable bindsym $mod+Alt+f exec firefox
bindsym $mod+Shift+f exec firefox bindsym $mod+Alt+a exec AppFlowy
bindsym $mod+p exec perplexity bindsym $mod+Alt+g exec gimp
bindsym $mod+m exec spotify-launcher bindsym $mod+Alt+m exec spotify-launcher
bindsym $mod+Shift+b exec blueman-manager bindsym $mod+Alt+b exec blueman-manager
bindsym $mod+Ctrl+l exec swaylock bindsym $mod+Alt+o exec swaylock
bindsym $mod+Ctrl+e 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
bindsym $mod+t exec thunderbird bindsym $mod+Alt+p exec proton-pass
bindsym $mod+Shift+p exec proton-pass bindsym $mod+Alt+t exec ~/.local/bin/thunderbird-proton
bindsym $mod+Shift+m exec protonmail-bridge bindsym $mod+Alt+y exec kitty -- sh -c "yazi"
bindsym $mod+Shift+v exec virt-manager bindsym $mod+Alt+w exec gtk-launch chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default
bindsym $mod+Shift+t exec thunar bindsym $mod+Alt+v exec ~/.config/sway/scripts/copypast
bindsym $mod+Alt+c exec freecad
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+n exec ~/.local/bin/nextcloud-sync
############################################### ###############################################
# #
@ -232,12 +227,10 @@ bindsym $mod+Shift+t exec thunar
# Special key to take a screenshot with grim # Special key to take a screenshot with grim
# Shift Print = plein écran -> presse-papier # Shift Print = plein écran -> presse-papier
bindsym Shift+Print exec grim - | wl-copy -t image/png bindsym Shift+Print exec grim - | wl-copy -t image/png
# Print = zone -> presse-papier # Print = zone -> presse-papier
bindsym Print exec grim -g "$(slurp)" - | wl-copy -t image/png bindsym Print exec grim -g "$(slurp)" - | wl-copy -t image/png
bindsym $mod+v exec ~/.config/sway/scripts/cliphist-wofi-img
############################################### ###############################################
@ -245,7 +238,7 @@ bindsym $mod+Shift+t exec thunar
# Power Daemon # Power Daemon
# #
############################################### ###############################################
bindsym $mod+F9 exec powerprofilesctl set power-saver bindsym $mod+F9 exec powerprofilesctl set power-saver
bindsym $mod+F10 exec powerprofilesctl set balanced bindsym $mod+F10 exec powerprofilesctl set balanced
bindsym $mod+F11 exec powerprofilesctl set performance bindsym $mod+F11 exec powerprofilesctl set performance

View file

@ -10,5 +10,5 @@ include ~/.config/sway/bar
include ~/.config/sway/input include ~/.config/sway/input
include ~/.config/sway/rules include ~/.config/sway/rules
include ~/.config/sway/style include ~/.config/sway/style
include ~/.config/sway/swayfx # include ~/.config/sway/swayfx
include ~/.config/sway/autostart include ~/.config/sway/autostart

View file

@ -1 +0,0 @@

View file

@ -0,0 +1,60 @@
#!/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

View file

@ -58,7 +58,7 @@ if __name__ == "__main__":
"--opacity", "--opacity",
"-o", "-o",
type=str, type=str,
default="0.70", default="0.85",
help="set inactive opacity value in range 0...1", help="set inactive opacity value in range 0...1",
) )
parser.add_argument( parser.add_argument(

View file

@ -3,8 +3,8 @@
# #
# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) # Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
output * bg ~/.wallpapers/sway.png fill output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
output eDP-1 mode 3200x2000 pos 3200 0 scale 1.7 output eDP-1 mode 3200x2000@60Hz pos 3200 0 scale 1.4
# #
# Style # Style
@ -22,24 +22,23 @@
# set gtk+ theme # set gtk+ theme
set $gnome-schema org.gnome.desktop.interface set $gnome-schema org.gnome.desktop.interface
exec_always { exec_always {
gsettings set $gnome-schema gtk-theme 'catppuccin-mocha-lavender-standard+default'
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 get $gnome-schema icon-theme 'Tela-circle-blue'
} }
set $cursor_theme catppuccin-mocha-lavender-cursors set $cursor_theme Bibata-Modern-Classic
set $cursor_size 24 set $cursor_size 24
seat seat0 xcursor_theme $cursor_theme $cursor_size seat seat0 xcursor_theme $cursor_theme $cursor_size
# Pas de titre, bordures fines ou nulles # Pas de titre, bordures fines ou nulles
default_border pixel 2 default_border pixel 2
default_floating_border normal default_floating_border pixel 2
titlebar_border_thickness 0 titlebar_border_thickness 0
titlebar_padding 0 0 titlebar_padding 0 0
# Set inner/outer gaps # Set inner/outer gaps
gaps inner 5 gaps inner 8
gaps outer -3 gaps outer 0

View file

@ -1,17 +1,21 @@
image=~/.wallpapers/662412-vanilla-arch-wallpaper-linuxart.png image=~/.wallpapers/swaylock.png
ignore-empty-password
show-failed-attempts
show-keyboard-layout
indicator-idle-visible
font=JetBrainsMono Nerd Font
font-size=40
clock
indicator
indicator-radius=100 indicator-radius=100
indicator-thickness=7 indicator-thickness=12
effect-blur=7x5
effect-vignette=0.5:0.5
effect-pixelate=6
color=1e1e2e color=1e1e2e
bs-hl-color=f5e0dc bs-hl-color=f5e0dc
caps-lock-bs-hl-color=f5e0dc caps-lock-bs-hl-color=f5e0dc
caps-lock-key-hl-color=a6e3a1 caps-lock-key-hl-color=a6e3a1
inside-color=1e1e2e inside-color=1e1e2e70
inside-clear-color=1e1e2e inside-clear-color=1e1e2e
inside-caps-lock-color=1e1e2e inside-caps-lock-color=1e1e2e
inside-ver-color=1e1e2e inside-ver-color=1e1e2e
@ -37,5 +41,4 @@ text-caps-lock-color=fab387
text-ver-color=89b4fa text-ver-color=89b4fa
text-wrong-color=eba0ac text-wrong-color=eba0ac
grace=2 line-uses-ring
fade-in=0.2

View file

@ -1,10 +0,0 @@
[Unit]
Description=Set ASUS BAT1 charge threshold to 80%%
After=graphical-session.target
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c 'echo 80 > /sys/class/power_supply/BAT1/charge_control_end_threshold'
[Install]
WantedBy=default.target

View file

@ -1,13 +1,13 @@
[Unit] [Unit]
Description=Cliphist image watcher Description=Cliphist image watcher
PartOf=wayland-session.target PartOf=graphical-session.target
After=wayland-session.target After=graphical-session.target
[Service] [Service]
Type=simple Type=simple
ExecStartPre=/bin/sh -c 'for i in $(seq 1 50); do [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ] && exit 0; sleep 0.1; done; echo "No Wayland socket" >&2; exit 1' ExecStartPre=/bin/sh -c 'for i in $(seq 1 50); do [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ] && exit 0; sleep 0.1; done; echo "No Wayland socket" >&2; exit 1'
ExecStart=/usr/bin/wl-paste --type image --watch cliphist store ExecStart=/usr/bin/wl-paste --type image/png --watch cliphist store
Restart=on-failure Restart=on-failure
[Install] [Install]
WantedBy=wayland-session.target WantedBy=graphical-session.target

View file

@ -1,7 +1,7 @@
[Unit] [Unit]
Description=Cliphist text watcher Description=Cliphist text watcher
PartOf=wayland-session.target PartOf=graphical-session.target
After=wayland-session.target After=graphical-session.target
[Service] [Service]
Type=simple Type=simple
@ -10,4 +10,4 @@ ExecStart=/usr/bin/wl-paste --watch cliphist store
Restart=on-failure Restart=on-failure
[Install] [Install]
WantedBy=wayland-session.target WantedBy=graphical-session.target

View file

@ -1 +0,0 @@
/home/fy59/.config/systemd/user/proton-bridge.service

View file

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

View file

@ -1,11 +1,11 @@
[Unit] [Unit]
Description=GNOME keyring daemon Description=GNOME keyring daemon
PartOf=wayland-session.target PartOf=graphical-session.target
After=wayland-session.target After=graphical-session.target
[Service] [Service]
ExecStart=/usr/bin/gnome-keyring-daemon --components=pkcs11,secrets,ssh --start ExecStart=/usr/bin/gnome-keyring-daemon --components=pkcs11,secrets,ssh --start
Restart=on-failure Restart=on-failure
[Install] [Install]
WantedBy=wayland-session.target WantedBy=graphical-session.target

View file

@ -0,0 +1 @@
/home/fy59/.config/systemd/user/cliphist-image.service

View file

@ -0,0 +1 @@
/home/fy59/.config/systemd/user/cliphist-text.service

View file

@ -0,0 +1 @@
/home/fy59/.config/systemd/user/keyring.service

View file

@ -0,0 +1 @@
/home/fy59/.config/systemd/user/swayidle.service

View file

@ -0,0 +1,27 @@
[Unit]
Description=hyprwhspr stt
Documentation=https://github.com/goodroot/hyprwhspr
PartOf=graphical-session.target
After=graphical-session.target
After=pipewire.service
Wants=pipewire.service
Wants=wireplumber.service
After=wireplumber.service
[Service]
Type=simple
ExecStartPre=/bin/bash -lc 'for i in $(seq 1 60); do ls "$XDG_RUNTIME_DIR"/wayland-* >/dev/null 2>&1 && exit 0; sleep 0.25; done; echo "Wayland socket not found"; exit 1'
ExecStart=/usr/lib/hyprwhspr/bin/hyprwhspr
ExecStopPost=/bin/bash -c '( pkill -9 -f "hyprwhspr-virtual-keyboard" 2>/dev/null; pkill -9 -f "hyprwhspr-ydotool.sock" 2>/dev/null ) || true'
Environment=HYPRWHSPR_ROOT=/usr/lib/hyprwhspr
Environment=PYTHONUNBUFFERED=1
Restart=on-failure
RestartSec=2
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=graphical-session.target

View file

@ -0,0 +1,11 @@
[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

View file

@ -1,15 +0,0 @@
[Unit]
Description=Proton Mail Bridge (CLI headless)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
# Petit délai pour laisser le réseau et l'environnement user se stabiliser
ExecStartPre=/bin/sleep 5
ExecStart=/usr/bin/protonmail-bridge
Restart=on-failure
RestartSec=10
[Install]
WantedBy=default.target

View file

@ -0,0 +1,13 @@
[Unit]
Description=Proton Mail Bridge
After=gnome-keyring-daemon.service
Wants=gnome-keyring-daemon.service
[Service]
Type=simple
ExecStart=/usr/bin/protonmail-bridge
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target

View file

@ -0,0 +1,11 @@
[Unit]
Description=Wayland swayidle
PartOf=graphical-session.target
After=graphical-session.target
[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'
Restart=on-failure
[Install]
WantedBy=graphical-session.target

View file

@ -1,11 +1,11 @@
[Unit] [Unit]
Description=Wayland notification daemon Description=Wayland notification daemon
PartOf=wayland-session.target PartOf=graphical-session.target
After=wayland-session.target After=graphical-session.target
[Service] [Service]
ExecStart=/usr/bin/swaync ExecStart=/usr/bin/swaync
Restart=on-failure Restart=on-failure
[Install] [Install]
WantedBy=wayland-session.target WantedBy=graphical-session.target

View file

@ -1,4 +0,0 @@
[Unit]
Description=Wayland user session
Requires=basic.target
After=basic.target

View file

@ -1,11 +1,11 @@
[Unit] [Unit]
Description=Wayland color temperature (wlsunset) Description=Wayland color temperature (wlsunset)
PartOf=wayland-session.target PartOf=graphical-session.target
After=wayland-session.target After=graphical-session.target
[Service] [Service]
ExecStart=/usr/bin/wlsunset -l 48.85 -L 2.35 -t 3000 -T 6500 ExecStart=/usr/bin/wlsunset -l 48.85 -L 2.35 -t 3000 -T 6500
Restart=on-failure Restart=on-failure
[Install] [Install]
WantedBy=wayland-session.target WantedBy=graphical-session.target

View file

@ -1,4 +1,4 @@
################################## ##################################
# # # #
# Generals settings # # Generals settings #
# # # #
@ -23,8 +23,17 @@ set -s escape-time 10
# # # #
################################## ##################################
# Catppuccin-mocha # Barre simple sans plugin
set-option -g status-position top set -g status-bg colour238
set -g status-fg colour255
set -g status-left-length 40
set -g status-right-length 80
# Gauche : [session] fenetre:pane
set -g status-left '#[bold] #S #[default]#I:#P '
# Droite : user@host | path | heure
set -g status-right '#(whoami)@#H | #{pane_current_path} | %H:%M '
################################## ##################################
# # # #
@ -57,6 +66,8 @@ set -g @catppuccin_flavor 'mocha'
run ~/.config/tmux/plugins/catppuccin/tmux/catppuccin.tmux run ~/.config/tmux/plugins/catppuccin/tmux/catppuccin.tmux
set -g status-position top
set -g status-right '#[fg=#{@thm_crust},bg=#{@thm_lavender}] #(whoami)@#H | #{pane_current_path} | %H:%M | session: #S ' set -g status-right '#[fg=#{@thm_crust},bg=#{@thm_lavender}] #(whoami)@#H | #{pane_current_path} | %H:%M | session: #S '
set -g status-right-length 120 set -g status-right-length 120
set -g status-left '#[fg=#{@thm_teal},bg=#{@thm_lavender},bold] #S #[fg=#{@thm_crust},bg=#{@thm_lavender}] #I:#P #[default]' set -g status-left '#[fg=#{@thm_teal},bg=#{@thm_lavender},bold] #S #[fg=#{@thm_crust},bg=#{@thm_lavender}] #I:#W #[default]'
set -g status-left-length 120

Some files were not shown because too many files have changed in this diff Show more