Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c4676f88e4 | ||
|
|
ecf42da629 | ||
|
|
ad123cd12c | ||
|
|
3bbc04c1c8 | ||
|
|
42f9c76675 | ||
|
|
7048bef534 | ||
|
|
ffd3f77322 | ||
|
|
9aee9fb349 | ||
|
|
6c0f4c8882 |
@@ -1,5 +1,7 @@
|
|||||||
# Secrets
|
# Secrets
|
||||||
files/.aider.conf.yml
|
files/.aider.conf.yml
|
||||||
|
# Jetons npm en clair (GitLab Blackswift / Lundi Matin)
|
||||||
|
files/.npmrc
|
||||||
*.conf
|
*.conf
|
||||||
|
|
||||||
# Nix
|
# Nix
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ NixOS dotfiles for Pierre MARTIN (Lundi Matin — Front-Commerce, LMB, NEIA), us
|
|||||||
- `nixos/configuration.nix` — System-level NixOS config (bootloader, networking, services, system packages). Imports `hardware-configuration.nix` et `framework.nix`.
|
- `nixos/configuration.nix` — System-level NixOS config (bootloader, networking, services, system packages). Imports `hardware-configuration.nix` et `framework.nix`.
|
||||||
- `home.nix` — Entry point home-manager. Importe `packages.nix` et les modules de `programs/`. Mappe aussi les fichiers statiques depuis `files/`.
|
- `home.nix` — Entry point home-manager. Importe `packages.nix` et les modules de `programs/`. Mappe aussi les fichiers statiques depuis `files/`.
|
||||||
- `packages.nix` — Tous les packages utilisateur (avec allowlist unfree).
|
- `packages.nix` — Tous les packages utilisateur (avec allowlist unfree).
|
||||||
- `programs/` — Modules home-manager par programme : `git.nix`, `zsh.nix`, `i3.nix`, `hyprland.nix`, `ghostty.nix`, `neovim.nix`, `pi.nix`.
|
- `programs/` — Modules home-manager par programme : `git.nix`, `zsh.nix`, `i3.nix`, `neia.nix`.
|
||||||
- `files/` — Fichiers de config statiques copiés dans `$HOME` par home-manager (`.npmrc`, `traefik.toml`, etc.).
|
- `files/` — Fichiers de config statiques copiés dans `$HOME` par home-manager (`.npmrc`, `traefik.toml`, etc.).
|
||||||
|
|
||||||
Home-manager est intégré au module NixOS (pas standalone). Appliquer avec `sudo nixos-rebuild switch`.
|
Home-manager est intégré au module NixOS (pas standalone). Appliquer avec `sudo nixos-rebuild switch`.
|
||||||
@@ -32,7 +32,7 @@ Formatter Nix : `nixfmt`.
|
|||||||
Après modification des fichiers nix, appliquer avec :
|
Après modification des fichiers nix, appliquer avec :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo nixos-rebuild switch
|
make apply # = sudo nixos-rebuild switch
|
||||||
```
|
```
|
||||||
|
|
||||||
Cette commande applique à la fois la config système (`nixos/`) et home-manager (`home.nix`, `packages.nix`, `programs/`). Un redémarrage n'est pas nécessaire sauf changement kernel/bootloader.
|
Cette commande applique à la fois la config système (`nixos/`) et home-manager (`home.nix`, `packages.nix`, `programs/`). Un redémarrage n'est pas nécessaire sauf changement kernel/bootloader.
|
||||||
@@ -46,7 +46,7 @@ Après modification de fichiers `.sh`, lancer `make fmt && make lint` avant d'ap
|
|||||||
## Key details
|
## Key details
|
||||||
|
|
||||||
- Keyboard layout : bépo (`fr` variant `bepo`)
|
- Keyboard layout : bépo (`fr` variant `bepo`)
|
||||||
- Window manager : i3 (Mod4), session par défaut. Hyprland (Wayland, config Lua dans `files/hypr/hyprland.lua`) en test, mêmes raccourcis bépo
|
- Window manager : i3 (Mod4)
|
||||||
- Shell : zsh + oh-my-zsh + starship + mcfly
|
- Shell : zsh + oh-my-zsh + starship + mcfly
|
||||||
- Terminal : sakura
|
- Terminal : sakura
|
||||||
- Git : difftastic (diffs), meld (merges), `push.autoSetupRemote = true`
|
- Git : difftastic (diffs), meld (merges), `push.autoSetupRemote = true`
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ update:
|
|||||||
$(MAKE) gc
|
$(MAKE) gc
|
||||||
|
|
||||||
# Nettoyage Nix (générations > 14 jours + garbage collect)
|
# Nettoyage Nix (générations > 14 jours + garbage collect)
|
||||||
|
# Même politique que nix.gc.automatic dans nixos/configuration.nix.
|
||||||
gc:
|
gc:
|
||||||
@echo "=== Générations utilisateur ==="
|
@echo "=== Générations utilisateur ==="
|
||||||
nix-env --list-generations
|
nix-env --list-generations
|
||||||
@@ -51,7 +52,7 @@ gc:
|
|||||||
sudo nix-env --delete-generations 14d --profile /nix/var/nix/profiles/system
|
sudo nix-env --delete-generations 14d --profile /nix/var/nix/profiles/system
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "=== Garbage collection ==="
|
@echo "=== Garbage collection ==="
|
||||||
sudo nix-collect-garbage
|
sudo nix-collect-garbage --delete-older-than 14d
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "=== Espace disque /nix/store ==="
|
@echo "=== Espace disque /nix/store ==="
|
||||||
du -sh /nix/store
|
du -sh /nix/store
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
prefix = ${HOME}/.npm
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
-- Hyprland - https://wiki.hypr.land/Configuring/Start/
|
|
||||||
-- Raccourcis repris de programs/i3.nix (bépo), apparence reprise d'Omarchy :
|
|
||||||
-- https://github.com/basecamp/omarchy/tree/master/default/hypr
|
|
||||||
|
|
||||||
local mod = "SUPER"
|
|
||||||
|
|
||||||
local function bind(keys, dispatcher, options)
|
|
||||||
if type(dispatcher) == "string" then
|
|
||||||
dispatcher = hl.dsp.exec_cmd(dispatcher)
|
|
||||||
end
|
|
||||||
hl.bind(keys, dispatcher, options or {})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Écrans : détection automatique (remplace autorandr)
|
|
||||||
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = "auto" })
|
|
||||||
|
|
||||||
hl.env("XCURSOR_SIZE", "24")
|
|
||||||
hl.env("GDK_BACKEND", "wayland,x11,*")
|
|
||||||
hl.env("QT_QPA_PLATFORM", "wayland;xcb")
|
|
||||||
hl.env("ELECTRON_OZONE_PLATFORM_HINT", "wayland")
|
|
||||||
hl.env("TERMINAL", "ghostty")
|
|
||||||
|
|
||||||
hl.config({
|
|
||||||
input = {
|
|
||||||
kb_layout = "fr",
|
|
||||||
kb_variant = "bepo",
|
|
||||||
follow_mouse = 1,
|
|
||||||
repeat_rate = 40,
|
|
||||||
repeat_delay = 250,
|
|
||||||
numlock_by_default = true,
|
|
||||||
touchpad = {
|
|
||||||
clickfinger_behavior = true,
|
|
||||||
scroll_factor = 0.4,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
general = {
|
|
||||||
gaps_in = 5,
|
|
||||||
gaps_out = 10,
|
|
||||||
border_size = 2,
|
|
||||||
col = {
|
|
||||||
active_border = { colors = { "rgba(33ccffee)", "rgba(00ff99ee)" }, angle = 45 },
|
|
||||||
inactive_border = "rgba(595959aa)",
|
|
||||||
},
|
|
||||||
resize_on_border = true,
|
|
||||||
layout = "dwindle",
|
|
||||||
},
|
|
||||||
|
|
||||||
decoration = {
|
|
||||||
rounding = 0,
|
|
||||||
shadow = { enabled = false },
|
|
||||||
blur = { enabled = false },
|
|
||||||
},
|
|
||||||
|
|
||||||
animations = { enabled = true },
|
|
||||||
|
|
||||||
dwindle = {
|
|
||||||
preserve_split = true,
|
|
||||||
force_split = 2,
|
|
||||||
},
|
|
||||||
|
|
||||||
misc = {
|
|
||||||
disable_hyprland_logo = true,
|
|
||||||
disable_splash_rendering = true,
|
|
||||||
background_color = "rgb(000000)",
|
|
||||||
focus_on_activate = true,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Remplace unclutter
|
|
||||||
cursor = { inactive_timeout = 3 },
|
|
||||||
})
|
|
||||||
|
|
||||||
hl.on("hyprland.start", function()
|
|
||||||
hl.exec_cmd("waybar")
|
|
||||||
hl.exec_cmd("swaybg --mode fill --image /home/pierre/Documents/Graphisme/fc-bg-light-black.png")
|
|
||||||
hl.exec_cmd("copyq")
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- Applications
|
|
||||||
bind(mod .. " + Return", "~/.local/bin/workspace-run ghostty --working-directory=")
|
|
||||||
bind(mod .. " + SHIFT + Return", "~/.local/bin/workspace-run code")
|
|
||||||
bind(mod .. " + d", "rofi -combi-modi 'window#run#ssh#emoji#calc' -modi 'calc#combi' -show combi")
|
|
||||||
bind(mod .. " + space", "~/.local/bin/stt-dictate toggle")
|
|
||||||
bind(mod .. " + SHIFT + t", "hyprlock")
|
|
||||||
bind("Print", "grim -g \"$(slurp)\" - | wl-copy")
|
|
||||||
bind("SHIFT + Print", "grim - | wl-copy")
|
|
||||||
|
|
||||||
-- Fenêtres (mêmes touches qu'i3 en bépo)
|
|
||||||
bind(mod .. " + b", hl.dsp.window.close())
|
|
||||||
bind(mod .. " + e", hl.dsp.window.fullscreen({ mode = "fullscreen" }))
|
|
||||||
bind(mod .. " + p", hl.dsp.layout("togglesplit"))
|
|
||||||
-- Pas de layout tabbed/stacking dans Hyprland : les groupes en sont l'équivalent
|
|
||||||
bind(mod .. " + eacute", hl.dsp.group.toggle())
|
|
||||||
bind(mod .. " + u", hl.dsp.group.next())
|
|
||||||
bind(mod .. " + SHIFT + space", hl.dsp.window.float({ action = "toggle" }))
|
|
||||||
|
|
||||||
for _, arrow in ipairs({ { "Left", "l" }, { "Right", "r" }, { "Up", "u" }, { "Down", "d" } }) do
|
|
||||||
local key, direction = arrow[1], arrow[2]
|
|
||||||
bind(mod .. " + " .. key, hl.dsp.focus({ direction = direction }))
|
|
||||||
bind(mod .. " + SHIFT + " .. key, hl.dsp.window.swap({ direction = direction }))
|
|
||||||
bind(mod .. " + CTRL + " .. key, hl.dsp.workspace.move({ monitor = direction }))
|
|
||||||
end
|
|
||||||
|
|
||||||
bind(mod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
|
||||||
bind(mod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
|
||||||
|
|
||||||
-- Espaces de travail : keycodes 10 à 19 = rangée du haut, quelle que soit la
|
|
||||||
-- disposition (" « » ( ) @ + - / * en bépo)
|
|
||||||
for workspace = 1, 10 do
|
|
||||||
local key = "code:" .. tostring(workspace + 9)
|
|
||||||
bind(mod .. " + " .. key, hl.dsp.focus({ workspace = tostring(workspace) }))
|
|
||||||
bind(mod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = tostring(workspace) }))
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Session
|
|
||||||
bind(mod .. " + SHIFT + c", "hyprctl reload")
|
|
||||||
bind(mod .. " + SHIFT + e", "uwsm stop")
|
|
||||||
|
|
||||||
-- Touches multimédia (actives même écran verrouillé)
|
|
||||||
local media = { locked = true, repeating = true }
|
|
||||||
bind("XF86AudioRaiseVolume", "pactl set-sink-volume @DEFAULT_SINK@ +5%", media)
|
|
||||||
bind("XF86AudioLowerVolume", "pactl set-sink-volume @DEFAULT_SINK@ -5%", media)
|
|
||||||
bind("XF86AudioMute", "pactl set-sink-mute @DEFAULT_SINK@ toggle", { locked = true })
|
|
||||||
bind("XF86AudioPlay", "playerctl play-pause", { locked = true })
|
|
||||||
bind("XF86AudioPause", "playerctl play-pause", { locked = true })
|
|
||||||
bind("XF86AudioNext", "playerctl next", { locked = true })
|
|
||||||
bind("XF86AudioPrev", "playerctl previous", { locked = true })
|
|
||||||
bind("XF86MonBrightnessUp", "brightnessctl set +5%", media)
|
|
||||||
bind("XF86MonBrightnessDown", "brightnessctl set 5%-", media)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
require("config.lazy")
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
-- Voir https://www.lazyvim.org/configuration/general
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
-- Voir https://www.lazyvim.org/configuration/general
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
-- Starter LazyVim - https://github.com/LazyVim/starter
|
|
||||||
-- Les plugins sont téléchargés par lazy.nvim au premier lancement (hors Nix) :
|
|
||||||
-- lazy-lock.json est donc écrit dans ~/.config/nvim et n'est pas versionné.
|
|
||||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
|
||||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
|
||||||
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
|
||||||
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
|
||||||
if vim.v.shell_error ~= 0 then
|
|
||||||
vim.api.nvim_echo({
|
|
||||||
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
|
||||||
{ out, "WarningMsg" },
|
|
||||||
{ "\nPress any key to exit..." },
|
|
||||||
}, true, {})
|
|
||||||
vim.fn.getchar()
|
|
||||||
os.exit(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
vim.opt.rtp:prepend(lazypath)
|
|
||||||
|
|
||||||
require("lazy").setup({
|
|
||||||
spec = {
|
|
||||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
|
||||||
{ import = "plugins" },
|
|
||||||
},
|
|
||||||
defaults = {
|
|
||||||
lazy = false,
|
|
||||||
version = false,
|
|
||||||
},
|
|
||||||
install = { colorscheme = { "catppuccin", "habamax" } },
|
|
||||||
checker = { enabled = true, notify = false },
|
|
||||||
})
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
-- Voir https://www.lazyvim.org/configuration/general
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
-- Même thème que Ghostty
|
|
||||||
return {
|
|
||||||
{ "catppuccin/nvim", name = "catppuccin", opts = { flavour = "mocha" } },
|
|
||||||
{ "LazyVim/LazyVim", opts = { colorscheme = "catppuccin" } },
|
|
||||||
}
|
|
||||||
@@ -86,11 +86,7 @@ stop_and_transcribe() {
|
|||||||
# Tape le texte au curseur
|
# Tape le texte au curseur
|
||||||
if [[ -n "$TEXT" ]]; then
|
if [[ -n "$TEXT" ]]; then
|
||||||
sleep 0.1 # petit delai pour focus
|
sleep 0.1 # petit delai pour focus
|
||||||
if [[ -n "${WAYLAND_DISPLAY:-}" ]]; then
|
|
||||||
wtype -d 10 -- "$TEXT"
|
|
||||||
else
|
|
||||||
xdotool type --delay 10 -- "$TEXT"
|
xdotool type --delay 10 -- "$TEXT"
|
||||||
fi
|
|
||||||
notify "$TEXT"
|
notify "$TEXT"
|
||||||
else
|
else
|
||||||
notify "Aucun texte detecte"
|
notify "Aucun texte detecte"
|
||||||
|
|||||||
+5
-23
@@ -3,35 +3,22 @@
|
|||||||
# Examples:
|
# Examples:
|
||||||
# workspace-run.sh zeditor
|
# workspace-run.sh zeditor
|
||||||
# workspace-run.sh sakura --working-directory
|
# workspace-run.sh sakura --working-directory
|
||||||
# workspace-run.sh ghostty --working-directory= (un argument finissant par = est collé au dossier)
|
|
||||||
cmd=${1:?usage: workspace-run.sh <command> [args...]}
|
cmd=${1:?usage: workspace-run.sh <command> [args...]}
|
||||||
shift
|
shift
|
||||||
|
|
||||||
if [ -n "${HYPRLAND_INSTANCE_SIGNATURE:-}" ]; then
|
|
||||||
workspace=$(hyprctl activeworkspace -j | jq -r '.name')
|
|
||||||
else
|
|
||||||
workspace=$(i3-msg -t get_workspaces | jq -r '.[] | select(.focused) | .name')
|
workspace=$(i3-msg -t get_workspaces | jq -r '.[] | select(.focused) | .name')
|
||||||
fi
|
|
||||||
|
|
||||||
window_pids() {
|
|
||||||
if [ -n "${HYPRLAND_INSTANCE_SIGNATURE:-}" ]; then
|
|
||||||
hyprctl clients -j | jq -r --arg ws "$workspace" '.[] | select(.workspace.name == $ws) | .pid'
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
terminal_cwd() {
|
||||||
local wids
|
local wids
|
||||||
wids=$(i3-msg -t get_tree | jq -r "
|
wids=$(i3-msg -t get_tree | jq -r "
|
||||||
.nodes[].nodes[].nodes[]
|
.nodes[].nodes[].nodes[]
|
||||||
| select(.name == \"$workspace\")
|
| select(.name == \"$workspace\")
|
||||||
| .. | objects | select(.window? != null) | .window
|
| .. | objects | select(.window? != null) | .window
|
||||||
")
|
")
|
||||||
for wid in $wids; do
|
|
||||||
xdotool getwindowpid "$wid" 2>/dev/null
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
terminal_cwd() {
|
for wid in $wids; do
|
||||||
for pid in $(window_pids); do
|
local pid
|
||||||
|
pid=$(xdotool getwindowpid "$wid" 2>/dev/null) || continue
|
||||||
local shell_pid
|
local shell_pid
|
||||||
shell_pid=$(pgrep -P "$pid" -x zsh | head -1) || continue
|
shell_pid=$(pgrep -P "$pid" -x zsh | head -1) || continue
|
||||||
local cwd
|
local cwd
|
||||||
@@ -48,9 +35,4 @@ if [ -z "$dir" ]; then
|
|||||||
dir=$(grep "^${workspace}=" "$dir_file" 2>/dev/null | cut -d= -f2-)
|
dir=$(grep "^${workspace}=" "$dir_file" 2>/dev/null | cut -d= -f2-)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dir=${dir:-$HOME}
|
exec "$cmd" "$@" "${dir:-$HOME}"
|
||||||
if [ $# -gt 0 ] && [[ "${!#}" == *= ]]; then
|
|
||||||
set -- "${@:1:$#-1}" "${!#}$dir"
|
|
||||||
exec "$cmd" "$@"
|
|
||||||
fi
|
|
||||||
exec "$cmd" "$@" "$dir"
|
|
||||||
|
|||||||
@@ -52,43 +52,14 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./packages.nix
|
./packages.nix
|
||||||
|
|
||||||
./programs/ghostty.nix
|
|
||||||
./programs/git.nix
|
./programs/git.nix
|
||||||
./programs/hyprland.nix
|
|
||||||
./programs/i3.nix
|
./programs/i3.nix
|
||||||
./programs/neovim.nix
|
|
||||||
./programs/pi.nix
|
./programs/pi.nix
|
||||||
./programs/zsh.nix
|
./programs/zsh.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.btop.enable = true;
|
programs.btop.enable = true;
|
||||||
programs.vim.enable = true;
|
programs.vim.enable = true;
|
||||||
|
|
||||||
# Outils CLI repris d'Omarchy - https://github.com/basecamp/omarchy
|
|
||||||
programs.eza = {
|
|
||||||
enable = true; # alias ls, ll, la, lt…
|
|
||||||
enableZshIntegration = true;
|
|
||||||
git = true;
|
|
||||||
icons = "auto";
|
|
||||||
};
|
|
||||||
programs.fd.enable = true;
|
|
||||||
programs.lazygit.enable = true;
|
|
||||||
programs.tmux = {
|
|
||||||
enable = true;
|
|
||||||
keyMode = "vi";
|
|
||||||
mouse = true;
|
|
||||||
baseIndex = 1;
|
|
||||||
escapeTime = 0;
|
|
||||||
historyLimit = 50000;
|
|
||||||
extraConfig = ''
|
|
||||||
# Nouveaux panneaux et fenêtres dans le répertoire courant
|
|
||||||
bind '"' split-window -v -c "#{pane_current_path}"
|
|
||||||
bind % split-window -h -c "#{pane_current_path}"
|
|
||||||
bind c new-window -c "#{pane_current_path}"
|
|
||||||
set -g renumber-windows on
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.vscode = {
|
programs.vscode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.vscode.fhs;
|
package = pkgs.vscode.fhs;
|
||||||
|
|||||||
+25
-24
@@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
# Enable networking
|
# Enable networking
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
networking.extraHosts = "109.238.11.111 nuage-v1.une-frouzins.fr";
|
networking.extraHosts = "";
|
||||||
|
|
||||||
# Wildcard *.dev.local → 127.0.0.1, requis par gezy-local (Traefik route les
|
# Wildcard *.dev.local → 127.0.0.1, requis par gezy-local (Traefik route les
|
||||||
# sous-domaines clients). systemd-resolved ne sait pas répondre en wildcard :
|
# sous-domaines clients). systemd-resolved ne sait pas répondre en wildcard :
|
||||||
@@ -86,14 +86,6 @@
|
|||||||
defaultSession = "none+i3";
|
defaultSession = "none+i3";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Session Hyprland en test : à choisir sur l'écran de connexion.
|
|
||||||
# UWSM, comme Omarchy, lance les services de session (graphical-session.target).
|
|
||||||
programs.hyprland = {
|
|
||||||
enable = true;
|
|
||||||
withUWSM = true;
|
|
||||||
};
|
|
||||||
security.pam.services.hyprlock = { };
|
|
||||||
|
|
||||||
# Configure console keymap
|
# Configure console keymap
|
||||||
console.keyMap = "fr";
|
console.keyMap = "fr";
|
||||||
|
|
||||||
@@ -133,13 +125,8 @@
|
|||||||
];
|
];
|
||||||
virtualisation.docker.enable = true;
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
# Polices reprises d'Omarchy : Nerd Font pour les icônes (eza, starship) + emoji et CJK
|
# Conteneurs rootless (Yuto tourne dans Podman, cf. INSTALL-PODMAN.txt)
|
||||||
fonts.packages = with pkgs; [
|
virtualisation.podman.enable = true;
|
||||||
nerd-fonts.jetbrains-mono
|
|
||||||
noto-fonts
|
|
||||||
noto-fonts-cjk-sans
|
|
||||||
noto-fonts-color-emoji
|
|
||||||
];
|
|
||||||
|
|
||||||
# Some programs need SUID wrappers, can be configured further or are
|
# Some programs need SUID wrappers, can be configured further or are
|
||||||
# started in user sessions.
|
# started in user sessions.
|
||||||
@@ -213,24 +200,38 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
services.journald.settings.Journal = {
|
||||||
# services.openssh.enable = true;
|
SystemMaxUse = "500M";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Accès distant SSH + mosh (session interactive résistante aux coupures réseau).
|
||||||
|
# mosh s'établit d'abord en SSH (TCP 1987) puis bascule en UDP 60000-61000.
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
ports = [ 1987 ];
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
programs.mosh.enable = true; # ouvre UDP 60000-61000
|
||||||
|
|
||||||
# Open ports in the firewall.
|
# Open ports in the firewall.
|
||||||
# Ports: 9003 - Xdebug
|
# Ports: 9003 - Xdebug, 1987 - SSH (mosh), 60000-61000 - mosh UDP
|
||||||
networking.firewall.allowedTCPPorts = [ 9003 ];
|
networking.firewall.allowedTCPPorts = [ 9003 ];
|
||||||
networking.firewall.allowedUDPPorts = [ 9003 ];
|
networking.firewall.allowedUDPPorts = [ 9003 ];
|
||||||
# Or disable the firewall altogether.
|
# Or disable the firewall altogether.
|
||||||
# networking.firewall.enable = false;
|
# networking.firewall.enable = false;
|
||||||
# https://github.com/nix-community/nix-direnv/
|
|
||||||
nix.extraOptions = ''
|
|
||||||
keep-outputs = true
|
|
||||||
keep-derivations = true
|
|
||||||
'';
|
|
||||||
nix.settings.extra-experimental-features = [
|
nix.settings.extra-experimental-features = [
|
||||||
"nix-command"
|
"nix-command"
|
||||||
"flakes"
|
"flakes"
|
||||||
];
|
];
|
||||||
|
nix.settings.auto-optimise-store = true;
|
||||||
|
|
||||||
|
# Les environnements direnv sont protégés par leurs propres gcroots
|
||||||
|
# (nix-direnv "_nix_add_gcroot"), inutile de garder outputs/derivations.
|
||||||
|
nix.gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 14d";
|
||||||
|
};
|
||||||
|
|
||||||
# Cache binaire de https://github.com/lukasl-dev/pi.nix (cf. programs/pi.nix)
|
# Cache binaire de https://github.com/lukasl-dev/pi.nix (cf. programs/pi.nix)
|
||||||
nix.settings.extra-substituters = [ "https://pi.cachix.org" ];
|
nix.settings.extra-substituters = [ "https://pi.cachix.org" ];
|
||||||
|
|||||||
@@ -144,7 +144,6 @@ in
|
|||||||
bun
|
bun
|
||||||
docker
|
docker
|
||||||
docker-compose
|
docker-compose
|
||||||
lazydocker
|
|
||||||
kubectl
|
kubectl
|
||||||
kubernetes-helm
|
kubernetes-helm
|
||||||
stern
|
stern
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
{ ... }:
|
|
||||||
|
|
||||||
# Réglages repris d'Omarchy - https://github.com/basecamp/omarchy/blob/master/config/ghostty/config
|
|
||||||
{
|
|
||||||
programs.ghostty = {
|
|
||||||
enable = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
settings = {
|
|
||||||
font-family = "JetBrainsMono Nerd Font";
|
|
||||||
font-size = 10;
|
|
||||||
theme = "Catppuccin Mocha";
|
|
||||||
|
|
||||||
window-padding-x = 14;
|
|
||||||
window-padding-y = 14;
|
|
||||||
confirm-close-surface = false;
|
|
||||||
resize-overlay = "never";
|
|
||||||
|
|
||||||
cursor-style = "block";
|
|
||||||
cursor-style-blink = false;
|
|
||||||
shell-integration-features = "no-cursor,ssh-env";
|
|
||||||
|
|
||||||
keybind = [
|
|
||||||
"shift+insert=paste_from_clipboard"
|
|
||||||
"control+insert=copy_to_clipboard"
|
|
||||||
# Distingue Shift+Entrée d'Entrée pour les TUI (Claude Code…)
|
|
||||||
"shift+enter=csi:13;2u"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Lenteurs sous Hyprland - https://github.com/ghostty-org/ghostty/discussions/3224
|
|
||||||
async-backend = "epoll";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -66,17 +66,6 @@
|
|||||||
# see https://adamj.eu/tech/2022/10/15/how-to-rebase-stacked-git-branches/
|
# see https://adamj.eu/tech/2022/10/15/how-to-rebase-stacked-git-branches/
|
||||||
rebase.updateRefs = true;
|
rebase.updateRefs = true;
|
||||||
|
|
||||||
# Repris d'Omarchy - https://github.com/basecamp/omarchy/blob/master/config/git/config
|
|
||||||
rerere = {
|
|
||||||
enabled = true; # mémorise la résolution des conflits…
|
|
||||||
autoupdate = true; # … et la réapplique automatiquement
|
|
||||||
};
|
|
||||||
branch.sort = "-committerdate"; # branches les plus récentes en premier
|
|
||||||
tag.sort = "-version:refname"; # tri des tags par version (v1.10 après v1.9)
|
|
||||||
column.ui = "auto";
|
|
||||||
commit.verbose = true; # diff affiché dans l'éditeur du message de commit
|
|
||||||
diff.mnemonicPrefix = true; # préfixes i/ w/ c/ au lieu de a/ b/
|
|
||||||
|
|
||||||
"url \"git@gitlab.lundimatin.app:\"" = {
|
"url \"git@gitlab.lundimatin.app:\"" = {
|
||||||
insteadOf = "https://gitlab.lundimatin.app/";
|
insteadOf = "https://gitlab.lundimatin.app/";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
# Session Hyprland, en test à côté d'i3. Le compositeur et la session sont
|
|
||||||
# activés côté système (programs.hyprland dans nixos/configuration.nix).
|
|
||||||
{
|
|
||||||
xdg.configFile."hypr/hyprland.lua".source = ../files/hypr/hyprland.lua;
|
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
swaybg # fond d'écran (remplace feh)
|
|
||||||
grim # captures d'écran…
|
|
||||||
slurp # … d'une zone
|
|
||||||
wl-clipboard # wl-copy / wl-paste (remplace xsel)
|
|
||||||
wtype # saisie de texte (remplace xdotool), pour stt-dictate
|
|
||||||
brightnessctl # remplace xbacklight
|
|
||||||
];
|
|
||||||
|
|
||||||
# Lancée par hyprland.lua et pas par systemd, pour ne pas apparaître sous i3
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
settings.main = {
|
|
||||||
layer = "top";
|
|
||||||
position = "top";
|
|
||||||
height = 26;
|
|
||||||
modules-left = [ "hyprland/workspaces" ];
|
|
||||||
modules-center = [ "clock" ];
|
|
||||||
modules-right = [
|
|
||||||
"cpu"
|
|
||||||
"temperature"
|
|
||||||
"disk"
|
|
||||||
"network"
|
|
||||||
"pulseaudio"
|
|
||||||
"battery"
|
|
||||||
"tray"
|
|
||||||
];
|
|
||||||
clock = {
|
|
||||||
format = "{:%a %d %b %H:%M}";
|
|
||||||
tooltip-format = "<tt>{calendar}</tt>";
|
|
||||||
};
|
|
||||||
cpu.format = "CPU {usage}%";
|
|
||||||
disk.format = "/ {percentage_used}%";
|
|
||||||
network = {
|
|
||||||
format-wifi = "{essid} {signalStrength}%";
|
|
||||||
format-ethernet = "{ipaddr}";
|
|
||||||
format-disconnected = "hors ligne";
|
|
||||||
};
|
|
||||||
pulseaudio = {
|
|
||||||
format = "vol {volume}%";
|
|
||||||
format-muted = "muet";
|
|
||||||
on-click = "pavucontrol";
|
|
||||||
};
|
|
||||||
battery.format = "bat {capacity}%";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.hyprlock = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
general.hide_cursor = true;
|
|
||||||
background = [
|
|
||||||
{
|
|
||||||
color = "rgb(000000)";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
input-field = [
|
|
||||||
{
|
|
||||||
size = "400, 60";
|
|
||||||
position = "0, 0";
|
|
||||||
halign = "center";
|
|
||||||
valign = "center";
|
|
||||||
placeholder_text = "Mot de passe";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -87,16 +87,6 @@
|
|||||||
{
|
{
|
||||||
statusCommand = "i3status";
|
statusCommand = "i3status";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
id = "vmux";
|
|
||||||
position = "top";
|
|
||||||
statusCommand = "/home/pierre/Code/vibe/vmux/vmux i3bar";
|
|
||||||
workspaceButtons = false;
|
|
||||||
trayOutput = "none";
|
|
||||||
colors = {
|
|
||||||
background = "#0d0d0d";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
startup = [
|
startup = [
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
# LazyVim, comme Omarchy. vim reste l'$EDITOR le temps de l'essai.
|
|
||||||
{
|
|
||||||
programs.neovim = {
|
|
||||||
enable = true;
|
|
||||||
# Compilation des parsers nvim-treesitter. Les LSP installés par Mason
|
|
||||||
# tournent grâce à programs.nix-ld (nixos/configuration.nix).
|
|
||||||
extraPackages = with pkgs; [
|
|
||||||
tree-sitter
|
|
||||||
gcc
|
|
||||||
unzip
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# recursive : ~/.config/nvim reste un vrai dossier, où LazyVim écrit
|
|
||||||
# lazy-lock.json et lazyvim.json.
|
|
||||||
xdg.configFile."nvim" = {
|
|
||||||
source = ../files/nvim;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
+27
-13
@@ -11,9 +11,21 @@ let
|
|||||||
# Mise à jour : remplacer le rev par le dernier de https://github.com/lukasl-dev/pi.nix
|
# Mise à jour : remplacer le rev par le dernier de https://github.com/lukasl-dev/pi.nix
|
||||||
pi = builtins.getFlake "github:lukasl-dev/pi.nix/1d37b58675b763ae6c9dc05d62321109066a4126";
|
pi = builtins.getFlake "github:lukasl-dev/pi.nix/1d37b58675b763ae6c9dc05d62321109066a4126";
|
||||||
|
|
||||||
|
# Source de vérité des limites modèles : GET /v1/model/info sur la passerelle
|
||||||
|
# (donne le moteur derrière chaque alias, max_input_tokens et
|
||||||
|
# max_output_tokens réels). À interroger AVANT toute bascule ou édition de
|
||||||
|
# modèles : les annonces internes ne sont pas toujours exactes — le
|
||||||
|
# 28/09/2026, qwen3.8-flash-next était annoncé en 64k out alors que la
|
||||||
|
# passerelle plafonne à 32 768. Le champ `description` donne aussi le moteur
|
||||||
|
# derrière l'alias et la date de bascule.
|
||||||
|
#
|
||||||
|
# curl -s https://llm-core.lundimatin.app/v1/model/info \
|
||||||
|
# -H "Authorization: Bearer $(cat ~/.config/lmc-token)" \
|
||||||
|
# | jq -r '.data[] | {model_name, model: .litellm_params.model, in: .model_info.max_input_tokens, out: .model_info.max_output_tokens, desc: .model_info.description}'
|
||||||
|
#
|
||||||
# Passerelle LLM interne Lundi Matin (LiteLLM), même endpoint et même jeton
|
# Passerelle LLM interne Lundi Matin (LiteLLM), même endpoint et même jeton
|
||||||
# que la fonction zsh `lmc`. Côté serveur, LM-Code route vers glm-5.3 servi
|
# que la fonction zsh `lmc`. Côté serveur, LM-Code route vers Mimo Pro 2.6
|
||||||
# 24h/24 depuis le 07/09/2026 (fin de la rotation jour GLM / nuit Kimi).
|
# depuis le 28/09/2026 (remplace GLM 5.3 : plus rapide, qualité équivalente).
|
||||||
# Consigne équipe IA Lundi Matin (07/09/2026) : viser 100-300k de contexte
|
# Consigne équipe IA Lundi Matin (07/09/2026) : viser 100-300k de contexte
|
||||||
# par session et limiter le nombre d'agents en période de pic — le KV cache
|
# par session et limiter le nombre d'agents en période de pic — le KV cache
|
||||||
# GLM 5.3 est la ressource rare. Ne pas tester la limite à 500k.
|
# GLM 5.3 est la ressource rare. Ne pas tester la limite à 500k.
|
||||||
@@ -33,23 +45,22 @@ let
|
|||||||
models = [
|
models = [
|
||||||
{
|
{
|
||||||
id = "LM-Code";
|
id = "LM-Code";
|
||||||
name = "LM-Code (glm-5.3 — Lundi Matin)";
|
name = "LM-Code (Mimo Pro 2.6 — Lundi Matin)";
|
||||||
# Même comportement que qwen3.8-flash-next : envoyer le paramètre
|
# Même comportement que qwen3.8-flash-next : envoyer le paramètre
|
||||||
# `thinking` supprime le bloc thinking côté passerelle (testé
|
# `thinking` supprime le bloc thinking côté passerelle. reasoning =
|
||||||
# 07/09/2026). reasoning = false laisse pi ne pas l'envoyer : le
|
# false laisse pi ne pas l'envoyer : le modèle raisonne nativement et
|
||||||
# modèle raisonne nativement et émet des blocs thinking à signature
|
# émet des blocs thinking à signature vide (re-testé 28/09/2026 sous
|
||||||
# vide, gérés par compat.allowEmptySignature du provider.
|
# Mimo), gérés par compat.allowEmptySignature du provider.
|
||||||
reasoning = false;
|
reasoning = false;
|
||||||
# Vision validée via l'endpoint anthropic /v1/messages (07/09/2026).
|
# Vision re-validée sous Mimo via l'endpoint anthropic /v1/messages
|
||||||
|
# (28/09/2026).
|
||||||
input = [
|
input = [
|
||||||
"text"
|
"text"
|
||||||
"image"
|
"image"
|
||||||
];
|
];
|
||||||
# 500k annoncés côté Lundi Matin (07/09/2026), non re-testés pour
|
# Confirmés le 28/09/2026 sur /v1/model/info (max_input_tokens et
|
||||||
# ne pas charger le KV cache.
|
# max_output_tokens de la passerelle), sans charge de test dédiée.
|
||||||
contextWindow = 500000;
|
contextWindow = 500000;
|
||||||
# Annonce LM : « tous en 128k out » (07/09/2026) ; 128k testé OK.
|
|
||||||
# 256k est aussi accepté par la passerelle mais non retenu.
|
|
||||||
maxTokens = 128000;
|
maxTokens = 128000;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -68,8 +79,11 @@ let
|
|||||||
# Repli serveur de LM-Code, mais 262k de contexte : pas un vrai
|
# Repli serveur de LM-Code, mais 262k de contexte : pas un vrai
|
||||||
# fallback. Recommandé par LM pour les tâches simples, de manière
|
# fallback. Recommandé par LM pour les tâches simples, de manière
|
||||||
# proactive, afin d'alléger GLM 5.3 (07/09/2026).
|
# proactive, afin d'alléger GLM 5.3 (07/09/2026).
|
||||||
|
# 32 768 : plafond réel de la passerelle (max_output_tokens sur
|
||||||
|
# /v1/model/info, vérifié 28/09/2026). Les valeurs antérieures
|
||||||
|
# étaient fausses et risquaient une erreur 400 en fin de réponse.
|
||||||
contextWindow = 262144;
|
contextWindow = 262144;
|
||||||
maxTokens = 128000;
|
maxTokens = 32768;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
id = "glm-ocr";
|
id = "glm-ocr";
|
||||||
|
|||||||
@@ -116,13 +116,10 @@
|
|||||||
s = "fzf"; # show / search / select
|
s = "fzf"; # show / search / select
|
||||||
f = "fzf"; # file
|
f = "fzf"; # file
|
||||||
sf = "fzf"; # interactive file selection
|
sf = "fzf"; # interactive file selection
|
||||||
ff = "fzf --preview 'bat --style=numbers --color=always {}'"; # fzf avec aperçu (Omarchy)
|
|
||||||
|
|
||||||
dc = "docker compose";
|
dc = "docker compose";
|
||||||
dcr = "docker compose run --rm";
|
dcr = "docker compose run --rm";
|
||||||
dcrm = "docker compose rm -fsv";
|
dcrm = "docker compose rm -fsv";
|
||||||
lzd = "lazydocker";
|
|
||||||
lzg = "lazygit";
|
|
||||||
copy = "xclip -selection c";
|
copy = "xclip -selection c";
|
||||||
|
|
||||||
bepo = "setxkbmap -layout fr -variant bepo";
|
bepo = "setxkbmap -layout fr -variant bepo";
|
||||||
@@ -135,7 +132,6 @@
|
|||||||
kp = "kubectl --context prod-eu7";
|
kp = "kubectl --context prod-eu7";
|
||||||
kp9 = "k9s --context prod-eu7";
|
kp9 = "k9s --context prod-eu7";
|
||||||
g = "git";
|
g = "git";
|
||||||
n = "nvim";
|
|
||||||
gui = "gitui";
|
gui = "gitui";
|
||||||
htop = "btop";
|
htop = "btop";
|
||||||
c = "claude";
|
c = "claude";
|
||||||
|
|||||||
Reference in New Issue
Block a user