{ pkgs, config, lib, ... }: let nixGLIntelPrefix = "${pkgs.nixgl.nixVulkanIntel}/bin/nixVulkanIntel ${pkgs.nixgl.nixGLIntel}/bin/nixGLIntel "; wmPrefix = "${lib.optionalString config.frogeye.desktop.nixGLIntel nixGLIntelPrefix}"; in { imports = [ ./audio ./autorandr ./background ./browser ./frobar ./i3.nix ./lock ./mpd ./presentation ./redness ./screenshots ./terminal ]; config = lib.mkIf config.frogeye.desktop.xorg { xsession = { enable = true; # Not using config.xdg.configHome because it needs to be $HOME-relative paths and path manipulation is hard scriptPath = ".config/xsession"; profilePath = ".config/xprofile"; windowManager = { command = lib.mkForce "${wmPrefix} ${config.xsession.windowManager.i3.package}/bin/i3"; i3.enable = true; }; numlock.enable = config.frogeye.desktop.numlock; }; programs = { # Terminal bash.shellAliases = { x = "startx ${config.home.homeDirectory}/${config.xsession.scriptPath}; logout"; lmms = "lmms --config ${config.xdg.configHome}/lmmsrc.xml"; }; rofi = { # TODO This theme template, that was used for Arch, looks much better: # https://gitlab.com/jordiorlando/base16-rofi/-/blob/master/templates/default.mustache enable = true; pass.enable = true; extraConfig = { lazy-grab = false; matching = "regex"; }; }; mpv = { enable = true; config = { audio-display = false; save-position-on-quit = true; osc = false; # Required by thumbnail script # Hardware acceleration (from https://nixos.wiki/wiki/Accelerated_Video_Playback#MPV) hwdec = "auto-safe"; vo = "gpu"; profile = "gpu-hq"; }; scripts = with pkgs.mpvScripts; [ thumbnail ]; scriptOpts = { mpv_thumbnail_script = { autogenerate = false; # TODO It creates too many processes at once, crashing the system cache_directory = "/tmp/mpv_thumbs_${config.home.username}"; mpv_hwdec = "auto-safe"; }; }; }; }; xdg = { userDirs = { enable = true; # TODO Which ones do we want? createDirectories = true; # French, because then it there's a different initial for each, making navigation easier desktop = null; download = "${config.home.homeDirectory}/Téléchargements"; pictures = "${config.home.homeDirectory}/Images"; publicShare = null; templates = null; videos = "${config.home.homeDirectory}/Vidéos"; }; }; services = { blueman-applet.enable = true; unclutter.enable = true; dunst = { enable = true; settings = # TODO Change dmenu for rofi, so we can use context with config.lib.stylix.colors.withHashtag; { global = { separator_color = lib.mkForce base05; idle_threshold = 120; markup = "full"; max_icon_size = 48; # TODO Those shortcuts don't seem to work, maybe try: # > define shortcuts inside your window manager and bind them to dunstctl(1) commands close_all = "ctrl+mod4+n"; close = "mod4+n"; context = "mod1+mod4+n"; history = "shift+mod4+n"; }; urgency_low = { background = lib.mkForce base01; foreground = lib.mkForce base03; frame_color = lib.mkForce base05; }; urgency_normal = { background = lib.mkForce base02; foreground = lib.mkForce base05; frame_color = lib.mkForce base05; }; urgency_critical = { background = lib.mkForce base08; foreground = lib.mkForce base06; frame_color = lib.mkForce base05; }; }; }; }; home = { file = { ".face" = { # TODO Only works on pindakaas? See https://wiki.archlinux.org/title/LightDM#Changing_your_avatar source = pkgs.runCommand "face.png" { } "${pkgs.inkscape}/bin/inkscape ${./face.svg} -w 1024 -o $out"; }; }; packages = with pkgs; [ # remote tigervnc # multimedia common gimp inkscape libreoffice # data management freefilesync # misc gnome.gedit feh zbar zathura meld python3Packages.magic # x11-exclusive simplescreenrecorder trayer xclip keynav xorg.xinit # organisation thunderbird ]; sessionVariables = { # XAUTHORITY = "${config.xdg.configHome}/Xauthority"; # Disabled as this causes lock-ups with DMs }; }; }; }