Files
dotfiles/programs/i3.nix
Pierre Martin 2dc7c688ed feat(stt): add local speech-to-text with whisper.cpp
- Add stt-dictate script for push-to-talk dictation
- Add Mod+Space keybinding in i3 (hold to record, release to transcribe)
- Add whisper-cpp, alsa-utils, xdotool, libnotify packages
- Enable dunst notification daemon

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 17:04:07 +01:00

99 lines
4.6 KiB
Nix

{ pkgs, ... }:
{
home.file.".i3status.conf".source = ../files/.i3status.conf;
xsession.windowManager.i3 =
let
modifier = "Mod4";
in
{
enable = true;
config = {
assigns = {
# https://rycee.gitlab.io/home-manager/options.html#opt-xsession.windowManager.i3.config.assigns
};
focus = {
mouseWarping = false; # Whether mouse cursor should be warped to the center of the window when switching focus to a window on a different output.
};
modifier = modifier;
# see https://rycee.gitlab.io/home-manager/options.html#opt-xsession.windowManager.i3.config.keybindings
keybindings = pkgs.lib.mkOptionDefault {
"${modifier}+Return" = "exec sakura"; #i3-sensible-terminal
### BÉPO ###
"${modifier}+b" = "kill";
"${modifier}+d" = "exec rofi -combi-modi 'window#run#ssh#emoji#calc' -modi 'calc#combi' -show combi";
"${modifier}+e" = "fullscreen toggle";
# change container layout (stacked, tabbed, toggle split)
"${modifier}+u" = "layout stacking";
"${modifier}+eacute" = "layout tabbed";
"${modifier}+p" = "layout toggle split";
"${modifier}+Shift+t" = "i3lock --colour=000000";
# switch to workspace
"${modifier}+quotedbl" = "workspace 1";
"${modifier}+guillemotleft" = "workspace 2";
"${modifier}+guillemotright" = "workspace 3";
"${modifier}+parenleft" = "workspace 4";
"${modifier}+parenright" = "workspace 5";
"${modifier}+at" = "workspace 6";
"${modifier}+plus" = "workspace 7";
"${modifier}+minus" = "workspace 8";
"${modifier}+slash" = "workspace 9";
"${modifier}+asterisk" = "workspace 10";
# move workspaces between outputs
"${modifier}+Control+Left" = "move workspace to output left";
"${modifier}+Control+Right" = "move workspace to output right";
"${modifier}+Control+Up" = "move workspace to output up";
"${modifier}+Control+Down" = "move workspace to output down";
# move focused container to workspace
"${modifier}+Shift+quotedbl" = "move container to workspace 1";
"${modifier}+Shift+guillemotleft" = "move container to workspace 2";
"${modifier}+Shift+guillemotright" = "move container to workspace 3";
"${modifier}+Shift+4" = "move container to workspace 4";
"${modifier}+Shift+5" = "move container to workspace 5";
"${modifier}+Shift+at" = "move container to workspace 6";
"${modifier}+Shift+plus" = "move container to workspace 7";
"${modifier}+Shift+minus" = "move container to workspace 8";
"${modifier}+Shift+slash" = "move container to workspace 9";
"${modifier}+Shift+asterisk" = "move container to workspace 10";
### /BÉPO ###
# See https://faq.i3wm.org/question/3747/enabling-multimedia-keys.1.html
# Pulse Audio controls
"XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume 0 +5%"; #increase sound volume
"XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume 0 -5%"; #decrease sound volume
"XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute 0 toggle"; # mute sound
# Media player controls
"XF86AudioPlay" = "exec playerctl play";
"XF86AudioPause" = "exec playerctl pause";
"XF86AudioNext" = "exec playerctl next";
"XF86AudioPrev" = "exec playerctl previous";
# Sreen brightness controls
"XF86MonBrightnessUp" = "exec light -A 2"; # increase screen brightness
"XF86MonBrightnessDown" = "exec light -U 2"; # decrease screen brightness
# Speech-to-text (toggle: press to start/stop)
"${modifier}+space" = "exec ~/.local/bin/stt-dictate toggle";
};
startup = [
{ command = "nextcloud"; notification = false; }
{ command = "setxkbmap -layout fr -variant bepo"; notification = false; }
{ command = "copyq"; notification = false; }
{ command = "numlockx on"; notification = false; } # turn verr num on
{ command = "autorandr -c"; notification = false; }
{ command = "feh --bg-scale /home/pierre/Documents/Graphisme/fc-bg-light-black.png"; notification = false; }
# docker run -d --net traefik --ip 172.10.0.10 --restart always -v /var/run/docker.sock:/var/run/docker.sock:ro --name traefik -p 80:80 -p 8080:8080 traefik:2.4.9 --api.insecure=true --providers.docker
# { command = "docker start traefik"; notification = false; }
];
};
};
}