diff --git a/modules/home/apps/helpers/ags/default.nix b/modules/home/apps/helpers/ags/default.nix index e8f04ea..3190580 100644 --- a/modules/home/apps/helpers/ags/default.nix +++ b/modules/home/apps/helpers/ags/default.nix @@ -45,64 +45,64 @@ in { }; config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { - programs.ags = { - enable = true; + programs.ags = { + enable = true; - # Generate _colors.scss with our theme colors - configDir = pkgs.runCommand "ags-config" {} '' - cp -r ${./cfg} $out - chmod -R +w $out - cat > $out/scss/_colors.scss << EOF - /* Generated from lib/theme/default.nix */ - $rosewater: ${colors.rosewater.hex}; - $flamingo: ${colors.flamingo.hex}; - $pink: ${colors.pink.hex}; - $mauve: ${colors.mauve.hex}; - $red: ${colors.red.hex}; - $maroon: ${colors.maroon.hex}; - $peach: ${colors.peach.hex}; - $yellow: ${colors.yellow.hex}; - $green: ${colors.green.hex}; - $teal: ${colors.teal.hex}; - $sky: ${colors.sky.hex}; - $sapphire: ${colors.sapphire.hex}; - $blue: ${colors.blue.hex}; - $lavender: ${colors.lavender.hex}; - $text: ${colors.text.hex}; - $subtext1: ${colors.subtext1.hex}; - $subtext0: ${colors.subtext0.hex}; - $overlay2: ${colors.overlay2.hex}; - $overlay1: ${colors.overlay1.hex}; - $overlay0: ${colors.overlay0.hex}; - $surface2: ${colors.surface2.hex}; - $surface1: ${colors.surface1.hex}; - $surface0: ${colors.surface0.hex}; - $base: ${colors.base.hex}; - $mantle: ${colors.mantle.hex}; - $crust: ${colors.crust.hex}; + # Generate _colors.scss with our theme colors + configDir = pkgs.runCommand "ags-config" {} '' + cp -r ${./cfg} $out + chmod -R +w $out + cat > $out/scss/_colors.scss << EOF + /* Generated from lib/theme/default.nix */ + $rosewater: ${colors.rosewater.hex}; + $flamingo: ${colors.flamingo.hex}; + $pink: ${colors.pink.hex}; + $mauve: ${colors.mauve.hex}; + $red: ${colors.red.hex}; + $maroon: ${colors.maroon.hex}; + $peach: ${colors.peach.hex}; + $yellow: ${colors.yellow.hex}; + $green: ${colors.green.hex}; + $teal: ${colors.teal.hex}; + $sky: ${colors.sky.hex}; + $sapphire: ${colors.sapphire.hex}; + $blue: ${colors.blue.hex}; + $lavender: ${colors.lavender.hex}; + $text: ${colors.text.hex}; + $subtext1: ${colors.subtext1.hex}; + $subtext0: ${colors.subtext0.hex}; + $overlay2: ${colors.overlay2.hex}; + $overlay1: ${colors.overlay1.hex}; + $overlay0: ${colors.overlay0.hex}; + $surface2: ${colors.surface2.hex}; + $surface1: ${colors.surface1.hex}; + $surface0: ${colors.surface0.hex}; + $base: ${colors.base.hex}; + $mantle: ${colors.mantle.hex}; + $crust: ${colors.crust.hex}; - /* Default accent color */ - $accent: ${colors.sapphire.hex}; - EOF - ''; + /* Default accent color */ + $accent: ${colors.sapphire.hex}; + EOF + ''; - extraPackages = dependencies; - }; - - systemd.user.services.ags = { - Unit = { - Description = "Aylur's Gtk Shell"; - PartOf = [ - "tray.target" - "hyprland-session.target" - ]; - }; - Service = { - Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}"; - ExecStart = "${config.programs.ags.package}/bin/ags"; - Restart = "on-failure"; - }; - Install.WantedBy = ["hyprland-session.target"]; - }; + extraPackages = dependencies; }; + + systemd.user.services.ags = { + Unit = { + Description = "Aylur's Gtk Shell"; + PartOf = [ + "tray.target" + "hyprland-session.target" + ]; + }; + Service = { + Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}"; + ExecStart = "${config.programs.ags.package}/bin/ags"; + Restart = "on-failure"; + }; + Install.WantedBy = ["hyprland-session.target"]; + }; + }; } diff --git a/modules/home/apps/helpers/anyrun/default.nix b/modules/home/apps/helpers/anyrun/default.nix index c405c54..fb49784 100644 --- a/modules/home/apps/helpers/anyrun/default.nix +++ b/modules/home/apps/helpers/anyrun/default.nix @@ -14,8 +14,9 @@ in { enable = mkBoolOpt false "Enable Anyrun"; }; - config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { - }; + config = + mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { + }; # programs.anyrun = { # enable = true; # config = { diff --git a/modules/home/apps/helpers/rofi/default.nix b/modules/home/apps/helpers/rofi/default.nix index 1efc516..ae800e8 100644 --- a/modules/home/apps/helpers/rofi/default.nix +++ b/modules/home/apps/helpers/rofi/default.nix @@ -13,9 +13,9 @@ in { }; config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { - programs.rofi = { - enable = true; - package = pkgs.rofi-wayland; + programs.rofi = { + enable = true; + package = pkgs.rofi-wayland; # Basic configuration terminal = "kitty"; @@ -196,5 +196,5 @@ in { size: 0; } ''; - }; + }; } diff --git a/modules/home/rice/gtk/default.nix b/modules/home/rice/gtk/default.nix index 16baff7..872ba98 100644 --- a/modules/home/rice/gtk/default.nix +++ b/modules/home/rice/gtk/default.nix @@ -60,11 +60,12 @@ in { }; # Linux-specific packages (Qt theming) - home.packages = with pkgs; lib.mkIf (!pkgs.stdenv.isDarwin) [ - qt5.qttools - qt6Packages.qtstyleplugin-kvantum - libsForQt5.qtstyleplugin-kvantum - libsForQt5.qt5ct - ]; + home.packages = with pkgs; + lib.mkIf (!pkgs.stdenv.isDarwin) [ + qt5.qttools + qt6Packages.qtstyleplugin-kvantum + libsForQt5.qtstyleplugin-kvantum + libsForQt5.qt5ct + ]; }; } diff --git a/modules/home/services/hypridle/default.nix b/modules/home/services/hypridle/default.nix index 8edc1e9..27082f0 100644 --- a/modules/home/services/hypridle/default.nix +++ b/modules/home/services/hypridle/default.nix @@ -15,75 +15,75 @@ in { }; config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { - programs.swaylock = { - enable = true; - catppuccin.enable = false; - package = pkgs.swaylock-effects; - settings = with colors; { - clock = true; - color = base.hex; - font = "Work Sans"; - image = "${wallpaper}"; - show-failed-attempts = false; - indicator = true; - indicator-radius = 200; - indicator-thickness = 20; - line-color = "00000000"; - ring-color = "00000000"; - inside-color = "00000000"; - key-hl-color = "f2cdcd"; - separator-color = "00000000"; - text-color = text.hex; - text-caps-lock-color = ""; - line-ver-color = rosewater.hex; - ring-ver-color = rosewater.hex; - inside-ver-color = base.hex; - text-ver-color = text.hex; - ring-wrong-color = teal.hex; - text-wrong-color = teal.hex; - inside-wrong-color = base.hex; - inside-clear-color = base.hex; - text-clear-color = text.hex; - ring-clear-color = lavender.hex; - line-clear-color = base.hex; - line-wrong-color = base.hex; - bs-hl-color = teal.hex; - line-uses-ring = false; - grace = 2; - grace-no-mouse = true; - grace-no-touch = true; - datestr = "%d.%m"; - fade-in = "0.1"; - ignore-empty-password = true; - }; + programs.swaylock = { + enable = true; + catppuccin.enable = false; + package = pkgs.swaylock-effects; + settings = with colors; { + clock = true; + color = base.hex; + font = "Work Sans"; + image = "${wallpaper}"; + show-failed-attempts = false; + indicator = true; + indicator-radius = 200; + indicator-thickness = 20; + line-color = "00000000"; + ring-color = "00000000"; + inside-color = "00000000"; + key-hl-color = "f2cdcd"; + separator-color = "00000000"; + text-color = text.hex; + text-caps-lock-color = ""; + line-ver-color = rosewater.hex; + ring-ver-color = rosewater.hex; + inside-ver-color = base.hex; + text-ver-color = text.hex; + ring-wrong-color = teal.hex; + text-wrong-color = teal.hex; + inside-wrong-color = base.hex; + inside-clear-color = base.hex; + text-clear-color = text.hex; + ring-clear-color = lavender.hex; + line-clear-color = base.hex; + line-wrong-color = base.hex; + bs-hl-color = teal.hex; + line-uses-ring = false; + grace = 2; + grace-no-mouse = true; + grace-no-touch = true; + datestr = "%d.%m"; + fade-in = "0.1"; + ignore-empty-password = true; }; - - systemd.user.services.hypridle = { - Unit = { - Description = "Idle Daemon for Hyprland"; - }; - Service = { - Type = "simple"; - ExecStart = lib.getExe inputs.hypridle.packages.${pkgs.system}.hypridle; - Restart = "on-failure"; - }; - Install = { - WantedBy = ["hyprland-session.target"]; - }; - }; - - xdg.configFile."hypr/hypridle.conf".text = '' - general { - lock_cmd = ${pkgs.swaylock-effects}/bin/swaylock -fF - before_sleep_cmd = ${pkgs.swaylock-effects}/bin/swaylock -fF # command ran before sleep - ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) - } - - listener { - timeout = 300 # in seconds - on-timeout = ${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off - on-resume = ${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on - } - ''; }; + + systemd.user.services.hypridle = { + Unit = { + Description = "Idle Daemon for Hyprland"; + }; + Service = { + Type = "simple"; + ExecStart = lib.getExe inputs.hypridle.packages.${pkgs.system}.hypridle; + Restart = "on-failure"; + }; + Install = { + WantedBy = ["hyprland-session.target"]; + }; + }; + + xdg.configFile."hypr/hypridle.conf".text = '' + general { + lock_cmd = ${pkgs.swaylock-effects}/bin/swaylock -fF + before_sleep_cmd = ${pkgs.swaylock-effects}/bin/swaylock -fF # command ran before sleep + ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) + } + + listener { + timeout = 300 # in seconds + on-timeout = ${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off + on-resume = ${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on + } + ''; + }; } diff --git a/modules/home/services/wallpaper/default.nix b/modules/home/services/wallpaper/default.nix new file mode 100644 index 0000000..7eeed78 --- /dev/null +++ b/modules/home/services/wallpaper/default.nix @@ -0,0 +1,32 @@ +{ + lib, + config, + pkgs, + ... +}: +with lib; +with lib.custom; let + cfg = config.services.wallpaper; + + mkService = recursiveUpdate { + Unit.PartOf = ["graphical-session.target"]; + Unit.After = ["graphical-session.target"]; + Install.WantedBy = ["graphical-session.target"]; + }; +in { + options.services.wallpaper = with types; { + enable = mkBoolOpt false "Enable MPD (Music Player Daemon)"; + }; + + config = mkIf (cfg.enable && !pkgs.stdenv.isDarwin) { + systemd.user.services = { + swaybg = mkService { + Unit.Description = "Wallpaper Chooser"; + Service = { + ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; + Restart = "always"; + }; + }; + }; + }; +} diff --git a/modules/home/shells/fish/default.nix b/modules/home/shells/fish/default.nix index efbbd4b..be0e9bb 100644 --- a/modules/home/shells/fish/default.nix +++ b/modules/home/shells/fish/default.nix @@ -73,75 +73,81 @@ in { shellAliases = import ../aliases.nix {inherit pkgs lib config;}; }; - home.packages = with pkgs; [ - gnumake - # Runs programs without installing them - comma + home.packages = with pkgs; + [ + gnumake + # Runs programs without installing them + comma - # grep replacement - ripgrep + # grep replacement + ripgrep - # ping, but with cool graph - gping + # ping, but with cool graph + gping - fzf + fzf - # dns client - dogdns + # dns client + dogdns - # neofetch but for git repos - onefetch + # neofetch but for git repos + onefetch - # neofetch but for cpu's - cpufetch + # neofetch but for cpu's + cpufetch - # download from yt and other websites - yt-dlp + # download from yt and other websites + yt-dlp - zsh-history + zsh-history - # man pages for tiktok attention span mfs - tealdeer + # man pages for tiktok attention span mfs + tealdeer - # markdown previewer - glow + # markdown previewer + glow - # profiling tool - hyperfine + # profiling tool + hyperfine - imagemagick - ffmpeg-full + imagemagick + ffmpeg-full - # preview images in terminal - catimg + # preview images in terminal + catimg - # networking stuff - nmap - wget + # networking stuff + nmap + wget - # faster find - fd + # faster find + fd - # http request thingy - xh + # http request thingy + xh - # generate regex - grex + # generate regex + grex - # json thingy - jq + # json thingy + jq - # syncthnig for acoustic people - rsync + # syncthnig for acoustic people + rsync - figlet - # Generate qr codes - qrencode + figlet + # Generate qr codes + qrencode - unzip - ] ++ (if !pkgs.stdenv.isDarwin then [ - hcxdumptool - hashcat - ] else []); + unzip + ] + ++ ( + if !pkgs.stdenv.isDarwin + then [ + hcxdumptool + hashcat + ] + else [] + ); }; } diff --git a/modules/home/shells/nu/default.nix b/modules/home/shells/nu/default.nix index 8730b5b..30906e3 100644 --- a/modules/home/shells/nu/default.nix +++ b/modules/home/shells/nu/default.nix @@ -46,36 +46,42 @@ in { programs.carapace.enable = true; programs.carapace.enableNushellIntegration = true; - home.packages = with pkgs; [ - gnumake - comma - ripgrep - gping - fzf - dogdns - onefetch - cpufetch - yt-dlp - zsh-history - tealdeer - glow - hyperfine - imagemagick - ffmpeg-full - catimg - nmap - wget - fd - xh - grex - jq - rsync - figlet - qrencode - unzip - ] ++ (if !pkgs.stdenv.isDarwin then [ - hcxdumptool - hashcat - ] else []); + home.packages = with pkgs; + [ + gnumake + comma + ripgrep + gping + fzf + dogdns + onefetch + cpufetch + yt-dlp + zsh-history + tealdeer + glow + hyperfine + imagemagick + ffmpeg-full + catimg + nmap + wget + fd + xh + grex + jq + rsync + figlet + qrencode + unzip + ] + ++ ( + if !pkgs.stdenv.isDarwin + then [ + hcxdumptool + hashcat + ] + else [] + ); }; } diff --git a/modules/home/shells/zsh/default.nix b/modules/home/shells/zsh/default.nix index 9d39868..2db4371 100644 --- a/modules/home/shells/zsh/default.nix +++ b/modules/home/shells/zsh/default.nix @@ -80,75 +80,81 @@ in { shellAliases = import ../aliases.nix {inherit pkgs lib config;}; }; - home.packages = with pkgs; [ - gnumake - # Runs programs without installing them - comma + home.packages = with pkgs; + [ + gnumake + # Runs programs without installing them + comma - # grep replacement - ripgrep + # grep replacement + ripgrep - # ping, but with cool graph - gping + # ping, but with cool graph + gping - # dns client - dogdns + # dns client + dogdns - # neofetch but for git repos - onefetch + # neofetch but for git repos + onefetch - # neofetch but for cpu's - cpufetch + # neofetch but for cpu's + cpufetch - # download from yt and other websites - yt-dlp + # download from yt and other websites + yt-dlp - zsh-history + zsh-history - # man pages for tiktok attention span mfs - tealdeer + # man pages for tiktok attention span mfs + tealdeer - # markdown previewer - glow + # markdown previewer + glow - # profiling tool - hyperfine + # profiling tool + hyperfine - imagemagick - ffmpeg-full + imagemagick + ffmpeg-full - # preview images in terminal - catimg + # preview images in terminal + catimg - # networking stuff - nmap - wget + # networking stuff + nmap + wget - # faster find - fd + # faster find + fd - # http request thingy - xh + # http request thingy + xh - # generate regex - grex + # generate regex + grex - # json thingy - jq + # json thingy + jq - # syncthnig for acoustic people - rsync + # syncthnig for acoustic people + rsync - figlet - # Generate qr codes - qrencode + figlet + # Generate qr codes + qrencode - # script kidde stuff + # script kidde stuff - unzip - ] ++ (if !pkgs.stdenv.isDarwin then [ - hcxdumptool - hashcat - ] else []); + unzip + ] + ++ ( + if !pkgs.stdenv.isDarwin + then [ + hcxdumptool + hashcat + ] + else [] + ); }; } diff --git a/modules/home/wms/hyprland/default.nix b/modules/home/wms/hyprland/default.nix index fa22ded..6ea73f7 100644 --- a/modules/home/wms/hyprland/default.nix +++ b/modules/home/wms/hyprland/default.nix @@ -257,14 +257,6 @@ in { # }; # }; - # systemd.user.services = { - # swaybg = mkService { - # Unit.Description = "Wallpaper chooser"; - # Service = { - # ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; - # Restart = "always"; - # }; - # }; - # }; - }; + services.wallpaper.enable = true; + }; } diff --git a/modules/home/wms/niri/config.nix b/modules/home/wms/niri/config.nix deleted file mode 100644 index 833ba54..0000000 --- a/modules/home/wms/niri/config.nix +++ /dev/null @@ -1,554 +0,0 @@ -# This file contains the Niri configuration that will only be included on Linux -{ - options, - config, - lib, - inputs, - pkgs, - ... -}: -with lib; -with lib.custom; let - cfg = config.wms.niri; - - mkService = recursiveUpdate { - Unit.PartOf = ["graphical-session.target"]; - Unit.After = ["graphical-session.target"]; - Install.WantedBy = ["graphical-session.target"]; - }; - - actions = config.lib.niri.actions; - niri = "${config.programs.niri.package}/bin/niri"; - - mkColor = color: {inherit color;}; - mkGradient = from: to: { - angle ? 180, - relative-to ? "window", - in' ? null, - }: { - gradient = {inherit from to angle relative-to in';}; - }; - - spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" '' - # Get the day of the week (1=Monday, ..., 7=Sunday) - DAY_OF_WEEK=$(${pkgs.coreutils}/bin/date +%u) - - # Check if it's a weekday (between 1 and 5 inclusive) - if [ "$DAY_OF_WEEK" -ge 1 ] && [ "$DAY_OF_WEEK" -le 5 ]; then - # Execute Slack. Use the full path for robustness. - # Ensure pkgs.slack is available (e.g., via environment.systemPackages) - exec ${pkgs.slack}/bin/slack - fi - # Exit successfully if not a weekday or after exec replaces the process - exit 0 - ''; -in { - config = mkIf cfg.enable { - programs.niri = { - package = pkgs.niri; - - settings = { - # Input device configuration - input = { - keyboard = { - xkb = { - rules = ""; - model = ""; - layout = "us"; - variant = ""; - options = "ctrl:nocaps"; - }; - }; - - touchpad = { - enable = true; - tap = true; - dwt = true; - dwtp = true; - natural-scroll = true; - - # Other options - # accel-profile = "flat"; - # accel-speed = 0.0; - disabled-on-external-mouse = true; - }; - - mouse = { - enable = true; - natural-scroll = false; - accel-speed = 0.0; - accel-profile = "flat"; - }; - - trackpoint = { - enable = true; - natural-scroll = false; - # accel-profile = "flat"; - # accel-speed = 0.0; - # scroll-button = "middle"; - middle-emulation = true; - }; - - warp-mouse-to-focus = true; - - focus-follows-mouse = { - enable = true; - threshold = 1; - }; - }; - - # Output configuration - outputs."DP-1" = { - enable = true; - mode = { - width = 2560; - height = 1440; - refresh = 240.000; - }; - variable-refresh-rate = true; - scale = 1.0; - transform = { - flipped = false; - rotation = 0; - }; - position = { - x = 0; - y = 0; - }; - }; - - # Environment variables - environment = { - DISPLAY = ":0"; # for applications using xwayland-satillite - }; - - hotkey-overlay = { - skip-at-startup = true; - }; - - # Window manager behavior - layout = { - gaps = 4; - center-focused-column = true; - - # Column widths in preset-column-widths are relative to the available space - preset-column-widths = [ - {proportion = 1.0;} # One column that takes all available space - {proportion = 0.5;} # Two columns of equal size - {proportion = 0.66;} # Two columns: first takes 2/3, second takes 1/3 - ]; - - # A new column will use this width by default - default-column-width = { - proportion = 0.5; # Half of the available space - }; - - # Focused window highlight - focus-ring = { - enable = true; - width = 4; - active = mkGradient colors.lavender.hex colors.sapphire.hex { - angle = 45; - }; - inactive = mkGradient colors.overlay0.hex colors.overlay0.hex { - angle = 45; - relative-to = "window"; - }; - }; - - # Window borders - border = { - enable = true; - width = 4; - active = colors.lavender.hex; - inactive = colors.overlay0.hex; - }; - - # Reserved screen areas (e.g., for panels) - struts = { - left = 0; - right = 0; - top = 0; - bottom = 0; - }; - }; - - # Spawn processes at startup - spawn-at-startup = [ - {command = ["xwayland-satellite"];} - {command = ["${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"];} - {command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];} - {command = ["vesktop"];} - {command = ["spotify"];} - {command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];} - ]; - - # Prefer server-side decorations - prefer-no-csd = true; - - # Screenshot path - screenshot-path = "${config.home.homeDirectory}/Pictures/screenshots/Screenshot_%F_%H-%M-%S.png"; - - # Animations for windows, workspace transitions, etc. - animations = { - enable = true; - }; - - debug = { - wait-for-frame-completion-in-pipewire = []; - }; - - layer-rules = [ - { - # Match layer shell surfaces with the GTK layer shell namespace - matches = [ - {namespace = "gtk-layer-shell";} - ]; - - # Don't blur out this layer shell surface - block-out-from = ["blur"]; - } - ]; - - window-rules = [ - { - # Matching criteria - matches = [ - {app-id = "waybar";} - {app-id = "eww-bar";} - {app-id = "ags";} - {app-id = "gtk-layer-shell";} - {app-id = "mako";} - {app-id = "swaync-client";} - {app-id = "swaync-control-center";} - ]; - - # Rules - block-out-from = ["blur"]; - } - - # Configure rounded corners - { - geometry-corner-radius = { - top-left = 0; - top-right = 0; - bottom-left = 0; - bottom-right = 0; - }; - clip-to-geometry = true; - } - - # Configure a different appearance for window cast targets - { - matches = [{is-window-cast-target = true;}]; - focus-ring = { - active = colors.red.hex; - inactive = colors.red.hex; - }; - shadow = { - color = colors.red.hex; - }; - tab-indicator = { - active = colors.red.hex; - inactive = colors.red.hex; - }; - } - - # Configure floating Windows - { - matches = [ - {app-id = "zenity";} - ]; - excludes = [ - {title = "Zen Browser";} - ]; - open-floating = true; - open-focused = true; - default-floating-position = { - relative-to = "window-manager"; - x = 0; - y = 0; - }; - } - - # Configure video apps - { - matches = [ - {app-id = "mpv";} - {app-id = "io.github.celluloid_player.Celluloid";} - ]; - variable-refresh-rate = true; - } - - # Configure maximized Firefox - { - matches = [ - {at-startup = true;} - {app-id = "firefox";} - ]; - open-maximized = true; - open-on-workspace = "01-browser"; - } - - # Configure Zen Browser - { - matches = [ - {at-startup = true;} - {app-id = "zen";} - ]; - open-on-workspace = "01-browser"; - } - - # Configure VSCode - { - matches = [ - {at-startup = true;} - {app-id = "code-url-handler";} - ]; - open-on-workspace = "02-code"; - } - - # Configure chat apps - { - matches = [ - {at-startup = true;} - {app-id = "vesktop";} - ]; - open-on-workspace = "03-chat"; - } - ]; - - # Named workspaces - workspaces."01-browser" = { - name = "browser"; - }; - workspaces."02-code" = { - name = "code"; - }; - workspaces."03-chat" = { - name = "chat"; - }; - workspaces."04-work" = { - name = "work"; - }; - - # Keybindings - binds = { - # Show help - "Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;}; - - # Terminal and launcher - "Mod+Return" = {action = actions.spawn "kitty";}; - "Mod+D" = {action = actions.spawn "fuzzel";}; - "Super+Alt+L" = {action = actions.spawn "swaylock";}; - # "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; }; - - # "Mod+S" = {action = actions.set-dynamic-cast-window;}; - # - # "Mod+Shift+S" = {action = actions.set-dynamic-cast-monitor;}; - # - # "XF86AudioLowerVolume" = { - # action = actions.spawn "pamixer" "--decrease" "5"; - # allow-when-locked = true; - # }; - # "XF86AudioRaiseVolume" = { - # action = actions.spawn "pamixer" "--increase" "5"; - # allow-when-locked = true; - # }; - # "XF86AudioMute" = { - # action = actions.spawn "pamixer" "--toggle-mute"; - # allow-when-locked = true; - # }; - # "XF86AudioMicMute" = { - # action = actions.spawn "pamixer" "--default-source" "--toggle-mute"; - # allow-when-locked = true; - # }; - # "XF86MonBrightnessDown" = { - # action = actions.spawn "brightnessctl" "set" "5%-"; - # allow-when-locked = true; - # }; - # "XF86MonBrightnessUp" = { - # action = actions.spawn "brightnessctl" "set" "5%+"; - # allow-when-locked = true; - # }; - - # Media controls - "XF86AudioRaiseVolume" = { - allow-when-locked = true; - action = actions.spawn "pamixer" "-i" "5"; - }; - "XF86AudioLowerVolume" = { - allow-when-locked = true; - action = actions.spawn "pamixer" "-d" "5"; - }; - "XF86AudioMute" = { - allow-when-locked = true; - action = actions.spawn "pamixer" "--toggle-mute"; - }; - "XF86AudioMicMute" = { - allow-when-locked = true; - action = actions.spawn "pamixer" "--default-source" - "--toggle-mute"; - }; - - # Close window - "Mod+Q" = {action = actions.close-window;}; - - # Focus windows and columns - "Mod+Left" = {action = actions.focus-column-left;}; - "Mod+Down" = {action = actions.focus-window-down;}; - "Mod+Up" = {action = actions.focus-window-up;}; - "Mod+Right" = {action = actions.focus-column-right;}; - "Mod+H" = {action = actions.focus-column-left;}; - "Mod+J" = {action = actions.focus-window-down;}; - "Mod+K" = {action = actions.focus-window-up;}; - "Mod+L" = {action = actions.focus-column-right;}; - - # Move windows within a column - "Mod+Ctrl+Left" = {action = actions.move-column-left;}; - "Mod+Ctrl+Down" = {action = actions.move-window-down;}; - "Mod+Ctrl+Up" = {action = actions.move-window-up;}; - "Mod+Ctrl+Right" = {action = actions.move-column-right;}; - "Mod+Ctrl+H" = {action = actions.move-column-left;}; - "Mod+Ctrl+J" = {action = actions.move-window-down;}; - "Mod+Ctrl+K" = {action = actions.move-window-up;}; - "Mod+Ctrl+L" = {action = actions.move-column-right;}; - - # "Mod+Alt+Left" = {action = actions.move-to-monitor-left;}; - # "Mod+Alt+Down" = {action = actions.move-to-monitor-down;}; - # "Mod+Alt+Up" = {action = actions.move-to-monitor-up;}; - # "Mod+Alt+Right" = {action = actions.move-to-monitor-right;}; - # "Mod+Alt+H" = {action = actions.move-to-monitor-left;}; - # "Mod+Alt+J" = {action = actions.move-to-monitor-down;}; - # "Mod+Alt+K" = {action = actions.move-to-monitor-up;}; - # "Mod+Alt+L" = {action = actions.move-to-monitor-right;}; - - "Mod+Home" = {action = actions.focus-column-first;}; - "Mod+End" = {action = actions.focus-column-last;}; - "Mod+Ctrl+Home" = {action = actions.move-column-to-first;}; - "Mod+Ctrl+End" = {action = actions.move-column-to-last;}; - - # Move window out of column - "Mod+Shift+Left" = {action = actions.move-view-left;}; - "Mod+Shift+Down" = {action = actions.move-view-down;}; - "Mod+Shift+Up" = {action = actions.move-view-up;}; - "Mod+Shift+Right" = {action = actions.move-view-right;}; - "Mod+Shift+H" = {action = actions.move-view-left;}; - "Mod+Shift+J" = {action = actions.move-view-down;}; - "Mod+Shift+K" = {action = actions.move-view-up;}; - "Mod+Shift+L" = {action = actions.move-view-right;}; - - "Mod+Ctrl+Shift+F" = {action = actions.toggle-windowed-fullscreen;}; - - # Move to a different monitor - "Mod+Shift+Ctrl+Left" = {action = actions.move-to-monitor-left;}; - "Mod+Shift+Ctrl+Down" = {action = actions.move-to-monitor-down;}; - "Mod+Shift+Ctrl+Up" = {action = actions.move-to-monitor-up;}; - "Mod+Shift+Ctrl+Right" = {action = actions.move-to-monitor-right;}; - "Mod+Shift+Ctrl+H" = {action = actions.move-to-monitor-left;}; - "Mod+Shift+Ctrl+J" = {action = actions.move-to-monitor-down;}; - "Mod+Shift+Ctrl+K" = {action = actions.move-to-monitor-up;}; - "Mod+Shift+Ctrl+L" = {action = actions.move-to-monitor-right;}; - - # Switch to workspace - "Mod+Page_Down" = {action = actions.focus-workspace-down;}; - "Mod+Page_Up" = {action = actions.focus-workspace-up;}; - "Mod+U" = {action = actions.focus-workspace-previous;}; - "Mod+I" = {action = actions.focus-workspace-next;}; - "Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;}; - "Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;}; - "Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;}; - "Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;}; - - # Move window to workspace - "Mod+Shift+Page_Down" = {action = actions.move-view-to-workspace-down;}; - "Mod+Shift+Page_Up" = {action = actions.move-view-to-workspace-up;}; - "Mod+Shift+U" = {action = actions.move-view-to-workspace-previous;}; - "Mod+Shift+I" = {action = actions.move-view-to-workspace-next;}; - - # Switch workspaces using scroll wheel - "Mod+WheelScrollDown" = { - cooldown-ms = 50; - action = actions.focus-workspace-down; - }; - "Mod+WheelScrollUp" = { - cooldown-ms = 50; - action = actions.focus-workspace-up; - }; - "Mod+Ctrl+WheelScrollDown" = { - cooldown-ms = 50; - action = actions.move-column-to-workspace-down; - }; - "Mod+Ctrl+WheelScrollUp" = { - cooldown-ms = 50; - action = actions.move-column-to-workspace-up; - }; - - "Mod+WheelScrollRight" = {action = actions.focus-column-right;}; - "Mod+WheelScrollLeft" = {action = actions.focus-column-left;}; - "Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;}; - "Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;}; - - "Mod+Shift+WheelScrollDown" = {action = actions.move-view-to-workspace-down;}; - "Mod+Shift+WheelScrollUp" = {action = actions.move-view-to-workspace-up;}; - "Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-view-to-workspace-down;}; - "Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-view-to-workspace-up;}; - - # Named workspaces - "Mod+Comma" = {action = actions.focus-workspace-previous;}; - "Mod+Period" = {action = actions.focus-workspace-next;}; - - "Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;}; - "Mod+BracketRight" = {action = actions.consume-or-expel-window-right;}; - - "Mod+R" = {action = actions.switch-preset-column-width;}; - "Mod+Shift+R" = {action = actions.switch-preset-window-height;}; - "Mod+Ctrl+R" = {action = actions.reset-window-height;}; - "Mod+F" = {action = actions.maximize-column;}; - "Mod+Shift+F" = {action = actions.toggle-fullscreen;}; - "Mod+C" = {action = actions.center-column;}; - "Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;}; - - "Mod+V" = {action = actions.toggle-floating;}; - - "Mod+Minus" = {action = actions.decrease-column-width;}; - "Mod+Equal" = {action = actions.increase-column-width;}; - - "Mod+Shift+Minus" = {action = actions.set-column-width 33;}; - "Mod+Shift+Equal" = {action = actions.set-column-width 67;}; - - "Print" = {action = actions.screen-shot {};}; - "Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation - "Ctrl+Alt+Delete" = {action = actions.quit {};}; - - "Mod+Shift+P" = {action = actions.lock-screen {};}; - - # Navigate to specific workspaces - # These bindings use the names of the workspaces defined above - "Mod+1" = { - action = actions.focus-workspace "01-browser"; - }; - "Mod+2" = { - action = actions.focus-workspace "02-code"; - }; - "Mod+3" = { - action = actions.focus-workspace "03-chat"; - }; - "Mod+4" = { - action = actions.focus-workspace "04-work"; - }; - }; - }; - - systemd.user.services = { - swaybg = mkService { - Unit.Description = "Wallpaper Chooser"; - Service = { - ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; - Restart = "always"; - }; - }; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home/wms/niri/default.nix b/modules/home/wms/niri/default.nix index 333479a..7f37d6e 100644 --- a/modules/home/wms/niri/default.nix +++ b/modules/home/wms/niri/default.nix @@ -12,12 +12,499 @@ with lib.custom; { enable = mkBoolOpt false "Enable niri"; }; - imports = optionals (pkgs.stdenv.isLinux) [ - ./config.nix - ]; - # For Darwin, just provide empty configuration - config = mkIf (config.wms.niri.enable && pkgs.stdenv.isDarwin) { - # Empty configuration for Darwin - module is effectively disabled + config = mkIf (config.wms.niri.enable && !pkgs.stdenv.isDarwin) { + programs.niri = let + actions = config.lib.niri.actions; + + mkGradient = from: to: { + angle ? 180, + relative-to ? "window", + in' ? null, + }: { + gradient = {inherit from to angle relative-to in';}; + }; + + spawnSlackOnWeekday = pkgs.writeShellScriptBin "spawn-slack-on-weekday" '' + # Get the day of the week (1=Monday, ..., 7=Sunday) + DAY_OF_WEEK=$(${pkgs.coreutils}/bin/date +%u) + + # Check if it's a weekday (between 1 and 5 inclusive) + if [ "$DAY_OF_WEEK" -ge 1 ] && [ "$DAY_OF_WEEK" -le 5 ]; then + # Execute Slack. Use the full path for robustness. + # Ensure pkgs.slack is available (e.g., via environment.systemPackages) + exec ${pkgs.slack}/bin/slack + fi + # Exit successfully if not a weekday or after exec replaces the process + exit 0 + ''; + in { + package = pkgs.niri; + + settings = { + # Input device configuration + input = { + keyboard = { + # xkb settings are empty in KDL, using defaults/empty strings + xkb = { + rules = ""; + model = ""; + layout = ""; + variant = ""; + options = null; # Or "" if you prefer explicit empty + }; + }; + + touchpad = { + enable = true; # Not explicitly 'off' in KDL + tap = true; + dwt = false; # Commented out in KDL + dwtp = false; # Commented out in KDL + natural-scroll = true; + # accel-speed = 0.2; # Commented out + # accel-profile = "flat"; # Commented out + # scroll-method = "two-finger"; # Commented out + disabled-on-external-mouse = true; + }; + + mouse = { + enable = true; # Not explicitly 'off' in KDL + natural-scroll = false; # Commented out in KDL + accel-speed = 0.2; + accel-profile = "flat"; + # scroll-method = "no-scroll"; # Commented out + }; + + trackpoint = { + enable = true; # Not explicitly 'off' in KDL + natural-scroll = false; # Commented out + # accel-speed = 0.2; # Commented out + # accel-profile = "flat"; # Commented out + # scroll-method = "on-button-down"; # Commented out + # scroll-button = 273; # Commented out + middle-emulation = false; # Commented out + }; + + warp-mouse-to-focus = true; + + focus-follows-mouse = { + enable = false; # Commented out in KDL + # max-scroll-amount = "0%"; # Only relevant if enabled + }; + }; + + # Output configuration + outputs."DP-1" = { + enable = true; # Not explicitly 'off' + mode = { + width = 2560; + height = 1440; + refresh = 239.972; + }; + variable-refresh-rate = "on-demand"; + scale = 1; + transform = { + # "normal" + rotation = 0; + flipped = false; + }; + position = { + x = 0; + y = 0; + }; + }; + + # Environment variables + environment = { + DISPLAY = ":0"; # for applications using xwayland-satillite + }; + + hotkey-overlay = { + skip-at-startup = true; + }; + + # Layout settings + layout = { + gaps = 16; + center-focused-column = "never"; + + preset-column-widths = [ + {proportion = 0.33333;} + {proportion = 0.5;} + {proportion = 0.66667;} + # { fixed = 1920; } # Example if needed + ]; + + # preset-window-heights = []; # Empty in KDL + + default-column-width = {proportion = 0.5;}; + # default-column-width = {}; # Alternative from KDL comments + + focus-ring = { + enable = true; # Not explicitly 'off' + width = 4; + active = mkGradient colors.blue.hex colors.sky.hex {angle = 45;}; + # active = mkColor "#7fc8ff"; # Alternative solid color from KDL + inactive = mkGradient colors.surface1.hex colors.surface2.hex { + angle = 45; + relative-to = "workspace-view"; + }; + # inactive = mkColor "#505050"; # Alternative solid color from KDL + }; + + border = { + enable = true; # Explicitly 'off' in KDL + width = 0; + active = mkColor colors.blue.hex; + inactive = mkColor colors.base.hex; + # active-gradient = ... # Commented out in KDL + # inactive-gradient = ... # Commented out in KDL + }; + + struts = { + # left = 64; # Commented out + # right = 64; # Commented out + # top = 64; # Commented out + # bottom = 64; # Commented out + }; + }; + + # Spawn processes at startup + spawn-at-startup = [ + {command = ["xwayland-satellite"];} + {command = ["${pkgs.writeShellScriptBin "thunderbird-delayed" ''sleep 5; thunderbird''}/bin/thunderbird-delayed"];} + {command = ["${pkgs.writeShellScriptBin "zen-delayed" ''sleep 5; zen''}/bin/zen-delayed"];} + {command = ["vesktop"];} + {command = ["spotify"];} + + {command = ["${spawnSlackOnWeekday}/bin/spawn-slack-on-weekday"];} + ]; + + # Prefer server-side decorations + prefer-no-csd = true; + + # Screenshot path + screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"; + # screenshot-path = null; # Alternative from KDL comments + + # Animation settings + animations = { + enable = true; # Not explicitly 'off' + # slowdown = 3.0; # Commented out + # Individual animation settings can be added here if needed + }; + + debug = { + wait-for-frame-completion-in-pipewire = []; + }; + + layer-rules = [ + { + matches = [ + {namespace = "notifications$";} + ]; + + block-out-from = "screen-capture"; + } + ]; + + # Window rules + window-rules = [ + # Password manager rule (example from KDL comments) + { + matches = [ + {app-id = "^org\\.keepassxc\\.KeePassXC$";} + {app-id = "^org\\.gnome\\.World\\.Secrets$";} + {app-id = "^1Password$";} + {app-id = "^thunderbird$";} + {app-id = "^signal$";} + {app-id = "^vesktop$";} + {app-id = "^slack$";} + ]; + block-out-from = "screen-capture"; + } + # Rounded corners rule (example from KDL comments) + { + # No matches means apply to all windows + geometry-corner-radius = { + top-left = 12.0; + top-right = 12.0; + bottom-left = 12.0; + bottom-right = 12.0; + }; + clip-to-geometry = true; + } + # Window cast target rule + { + matches = [{is-window-cast-target = true;}]; + focus-ring = { + active = mkColor colors.red.hex; + inactive = mkColor (lerpColor colors.red.hex colors.base.hex 0.5); + }; + shadow = { + # Only color is specified in KDL rule + color = "#7d0d2d70"; + }; + tab-indicator = { + active = mkColor colors.red.hex; + inactive = mkColor (lerpColor colors.red.hex colors.base.hex 0.5); + }; + } + + # fix steam popups holy fuck they're annoying + { + matches = [ + {app-id = "^steam$";} + ]; + + excludes = [{title = "^Steam$";}]; + + open-floating = true; + + open-focused = false; + + default-floating-position = { + relative-to = "bottom-right"; + x = 16; + y = 16; + }; + } + { + matches = [ + { + app-id = "^cyberpunk2077.exe$"; + } + { + app-id = "^Overwatch2.exe$"; + } + ]; + + variable-refresh-rate = true; + } + { + matches = [ + { + at-startup = true; + app-id = "^zen$"; + } + ]; + + open-maximized = true; + + open-on-workspace = "browser"; + } + { + matches = [ + { + at-startup = true; + app-id = "^spotify$"; + } + { + at-startup = true; + app-id = "^vesktop$"; + } + ]; + + open-on-workspace = "chat"; + } + { + matches = [ + { + at-startup = true; + app-id = "^Slack$"; + } + { + at-startup = true; + app-id = "^thunderbird$"; + } + ]; + + open-on-workspace = "work"; + } + ]; + + workspaces."01-browser" = { + name = "browser"; + }; + workspaces."02-code" = { + name = "code"; + }; + workspaces."03-chat" = { + name = "chat"; + }; + workspaces."04-work" = { + name = "work"; + }; + + # Keybindings + binds = + { + "Mod+Shift+Slash" = {action = actions.show-hotkey-overlay;}; + + "Mod+Return" = {action = actions.spawn "kitty";}; + "Mod+D" = {action = actions.spawn "fuzzel";}; + "Super+Alt+L" = {action = actions.spawn "swaylock";}; + # "Mod+T" = { action = actions.spawn "bash" "-c" "notify-send hello && exec alacritty"; }; + + # "Mod+S" = {action = actions.set-dynamic-cast-window;}; + # + # "Mod+Shift+S" = {action = actions.set-dynamic-cast-monitor;}; + # + # "Mod+Z" = {action = actions.clear-dynamic-cast-target;}; + + "XF86AudioRaiseVolume" = { + allow-when-locked = true; + action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; + }; + "XF86AudioLowerVolume" = { + allow-when-locked = true; + action = actions.spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; + }; + "XF86AudioMute" = { + allow-when-locked = true; + action = actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; + }; + "XF86AudioMicMute" = { + allow-when-locked = true; + action = + actions.spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; + }; + + "Mod+Q" = {action = actions.close-window;}; + + "Mod+Left" = {action = actions.focus-column-left;}; + "Mod+Down" = {action = actions.focus-window-down;}; + "Mod+Up" = {action = actions.focus-window-up;}; + "Mod+Right" = {action = actions.focus-column-right;}; + "Mod+H" = {action = actions.focus-column-left;}; + "Mod+J" = {action = actions.focus-window-down;}; + "Mod+K" = {action = actions.focus-window-up;}; + "Mod+L" = {action = actions.focus-column-right;}; + + "Mod+Ctrl+Left" = {action = actions.move-column-left;}; + "Mod+Ctrl+Down" = {action = actions.move-window-down;}; + "Mod+Ctrl+Up" = {action = actions.move-window-up;}; + "Mod+Ctrl+Right" = {action = actions.move-column-right;}; + "Mod+Ctrl+H" = {action = actions.move-column-left;}; + "Mod+Ctrl+J" = {action = actions.move-window-down;}; + "Mod+Ctrl+K" = {action = actions.move-window-up;}; + "Mod+Ctrl+L" = {action = actions.move-column-right;}; + + # Alternative commands (commented out in KDL) + # "Mod+J" = { action = actions.focus-window-or-workspace-down; }; + # "Mod+K" = { action = actions.focus-window-or-workspace-up; }; + # "Mod+Ctrl+J" = { action = actions.move-window-down-or-to-workspace-down; }; + # "Mod+Ctrl+K" = { action = actions.move-window-up-or-to-workspace-up; }; + + "Mod+Home" = {action = actions.focus-column-first;}; + "Mod+End" = {action = actions.focus-column-last;}; + "Mod+Ctrl+Home" = {action = actions.move-column-to-first;}; + "Mod+Ctrl+End" = {action = actions.move-column-to-last;}; + + "Mod+Shift+Left" = {action = actions.focus-monitor-left;}; + "Mod+Shift+Down" = {action = actions.focus-monitor-down;}; + "Mod+Shift+Up" = {action = actions.focus-monitor-up;}; + "Mod+Shift+Right" = {action = actions.focus-monitor-right;}; + "Mod+Shift+H" = {action = actions.focus-monitor-left;}; + "Mod+Shift+J" = {action = actions.focus-workspace-down;}; + "Mod+Shift+K" = {action = actions.focus-workspace-up;}; + "Mod+Shift+L" = {action = actions.focus-monitor-right;}; + + "Mod+Ctrl+Shift+F" = {action = actions.toggle-windowed-fullscreen;}; + + "Mod+Shift+Ctrl+Left" = {action = actions.move-column-to-monitor-left;}; + "Mod+Shift+Ctrl+Down" = {action = actions.move-column-to-monitor-down;}; + "Mod+Shift+Ctrl+Up" = {action = actions.move-column-to-monitor-up;}; + "Mod+Shift+Ctrl+Right" = {action = actions.move-column-to-monitor-right;}; + "Mod+Shift+Ctrl+H" = {action = actions.move-column-to-monitor-left;}; + "Mod+Shift+Ctrl+J" = {action = actions.move-column-to-monitor-down;}; + "Mod+Shift+Ctrl+K" = {action = actions.move-column-to-monitor-up;}; + "Mod+Shift+Ctrl+L" = {action = actions.move-column-to-monitor-right;}; + + "Mod+Page_Down" = {action = actions.focus-workspace-down;}; + "Mod+Page_Up" = {action = actions.focus-workspace-up;}; + "Mod+U" = {action = actions.focus-workspace-down;}; + "Mod+I" = {action = actions.focus-workspace-up;}; + "Mod+Ctrl+Page_Down" = {action = actions.move-column-to-workspace-down;}; + "Mod+Ctrl+Page_Up" = {action = actions.move-column-to-workspace-up;}; + "Mod+Ctrl+U" = {action = actions.move-column-to-workspace-down;}; + "Mod+Ctrl+I" = {action = actions.move-column-to-workspace-up;}; + + "Mod+Shift+Page_Down" = {action = actions.move-workspace-down;}; + "Mod+Shift+Page_Up" = {action = actions.move-workspace-up;}; + "Mod+Shift+U" = {action = actions.move-workspace-down;}; + "Mod+Shift+I" = {action = actions.move-workspace-up;}; + + "Mod+WheelScrollDown" = { + cooldown-ms = 150; + action = actions.focus-workspace-down; + }; + "Mod+WheelScrollUp" = { + cooldown-ms = 150; + action = actions.focus-workspace-up; + }; + "Mod+Ctrl+WheelScrollDown" = { + cooldown-ms = 150; + action = actions.move-column-to-workspace-down; + }; + "Mod+Ctrl+WheelScrollUp" = { + cooldown-ms = 150; + action = actions.move-column-to-workspace-up; + }; + + "Mod+WheelScrollRight" = {action = actions.focus-column-right;}; + "Mod+WheelScrollLeft" = {action = actions.focus-column-left;}; + "Mod+Ctrl+WheelScrollRight" = {action = actions.move-column-right;}; + "Mod+Ctrl+WheelScrollLeft" = {action = actions.move-column-left;}; + + "Mod+Shift+WheelScrollDown" = {action = actions.focus-column-right;}; + "Mod+Shift+WheelScrollUp" = {action = actions.focus-column-left;}; + "Mod+Ctrl+Shift+WheelScrollDown" = {action = actions.move-column-right;}; + "Mod+Ctrl+Shift+WheelScrollUp" = {action = actions.move-column-left;}; + + "Mod+Comma" = {action = actions.consume-window-into-column;}; + "Mod+Period" = {action = actions.expel-window-from-column;}; + + "Mod+BracketLeft" = {action = actions.consume-or-expel-window-left;}; + "Mod+BracketRight" = {action = actions.consume-or-expel-window-right;}; + + "Mod+R" = {action = actions.switch-preset-column-width;}; + "Mod+Shift+R" = {action = actions.switch-preset-window-height;}; + "Mod+Ctrl+R" = {action = actions.reset-window-height;}; + "Mod+F" = {action = actions.maximize-column;}; + "Mod+Shift+F" = {action = actions.fullscreen-window;}; + "Mod+C" = {action = actions.center-column;}; + "Mod+Ctrl+F" = {action = actions.expand-column-to-available-width;}; + + "Mod+V" = {action = actions.toggle-window-floating;}; + + "Mod+Minus" = {action = actions.set-column-width "-10%";}; + "Mod+Equal" = {action = actions.set-column-width "+10%";}; + + "Mod+Shift+Minus" = {action = actions.set-window-height "-10%";}; + "Mod+Shift+Equal" = {action = actions.set-window-height "+10%";}; + + "Print" = {action = actions.screenshot {};}; # Empty attrset for default args + "Mod+Shift+E" = {action = actions.quit {};}; # Default: no skip-confirmation + "Ctrl+Alt+Delete" = {action = actions.quit {};}; + + "Mod+Shift+P" = {action = actions.power-off-monitors;}; + } + // lib.attrsets.listToAttrs (builtins.concatMap (i: + with actions; [ + { + name = "Mod+${toString i}"; + value.action = focus-workspace i; + } + # FIXME: use this action directly untril sodiboo/niri-flake#1018 is fixed. + { + name = "Mod+Shift+${toString i}"; + value.action = spawn [niri "msg" "action" "move-column-to-workspace" (toString i)]; + } + ]) (lib.range 1 9)); + }; + }; + + services.wallpaper.enable = true; }; -} \ No newline at end of file +} diff --git a/modules/home/wms/river/default.nix b/modules/home/wms/river/default.nix index a4da2e2..845acb1 100644 --- a/modules/home/wms/river/default.nix +++ b/modules/home/wms/river/default.nix @@ -45,5 +45,7 @@ in { }; }; }; + + services.wallpaper.enable = true; }; } diff --git a/modules/home/wms/sway/default.nix b/modules/home/wms/sway/default.nix index 8c71463..3c337f0 100644 --- a/modules/home/wms/sway/default.nix +++ b/modules/home/wms/sway/default.nix @@ -57,14 +57,6 @@ in { }; }; - systemd.user.services = { - swaybg = mkService { - Unit.Description = "Wallpaper Chooser"; - Service = { - ExecStart = "${getExe pkgs.swaybg} -i ${wallpaper}"; - Restart = "always"; - }; - }; - }; + services.wallpaper.enable = true; }; } diff --git a/modules/nixos/sites/hydra/default.nix b/modules/nixos/sites/hydra/default.nix index f5ceda0..2ff3e73 100644 --- a/modules/nixos/sites/hydra/default.nix +++ b/modules/nixos/sites/hydra/default.nix @@ -50,7 +50,7 @@ in { { hostName = "localhost"; protocol = null; - system = "x86_64-linux"; + systems = ["builtin" "x86_64-linux"]; supportedFeatures = ["kvm" "nixos-test" "big-parallel" "benchmark"]; maxJobs = 8; } diff --git a/modules/nixos/ui/fonts/default.nix b/modules/nixos/ui/fonts/default.nix index f860026..93c487b 100644 --- a/modules/nixos/ui/fonts/default.nix +++ b/modules/nixos/ui/fonts/default.nix @@ -18,7 +18,6 @@ in { packages = with pkgs; [ material-icons material-design-icons - roboto work-sans comic-neue source-sans diff --git a/systems/aarch64-darwin/mercury/default.nix b/systems/aarch64-darwin/mercury/default.nix index de08988..eaf53b5 100644 --- a/systems/aarch64-darwin/mercury/default.nix +++ b/systems/aarch64-darwin/mercury/default.nix @@ -1,31 +1,31 @@ -{pkgs, ...}:{ +{pkgs, ...}: { # List packages installed in system profile. To search by name, run: - # $ nix-env -qaP | grep wget - environment.systemPackages = - [ pkgs.vim - ]; + # $ nix-env -qaP | grep wget + environment.systemPackages = [ + pkgs.vim + ]; - # Auto upgrade nix package - nix.package = pkgs.nix; + # Auto upgrade nix package + nix.package = pkgs.nix; - # Necessary for using flakes on this system. - nix.settings.experimental-features = "nix-command flakes"; + # Necessary for using flakes on this system. + nix.settings.experimental-features = "nix-command flakes"; - # Create /etc/zshrc that loads the nix-darwin environment. - programs.zsh.enable = true; # default shell on catalina - programs.fish.enable = true; + # Create /etc/zshrc that loads the nix-darwin environment. + programs.zsh.enable = true; # default shell on catalina + programs.fish.enable = true; - # Used for backwards compatibility, please read the changelog before changing. - # $ darwin-rebuild changelog - system.stateVersion = 4; + # Used for backwards compatibility, please read the changelog before changing. + # $ darwin-rebuild changelog + system.stateVersion = 4; - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - users.users.zack = { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + users.users.zack = { name = "zack"; home = "/Users/zack"; - }; + }; - # The platform the configuration will be used on. - nixpkgs.hostPlatform = "aarch64-darwin"; + # The platform the configuration will be used on. + nixpkgs.hostPlatform = "aarch64-darwin"; }