diff --git a/machines/luna/configuration.nix b/machines/luna/configuration.nix index 3e3f844..d564233 100644 --- a/machines/luna/configuration.nix +++ b/machines/luna/configuration.nix @@ -1,11 +1,4 @@ -{ - inputs, - outputs, - lib, - config, - pkgs, - ... -}: { +{...}: { imports = [ ./hardware-configuration.nix ./modules.nix diff --git a/machines/luna/modules.nix b/machines/luna/modules.nix index f19fd1f..29aac0f 100644 --- a/machines/luna/modules.nix +++ b/machines/luna/modules.nix @@ -1,11 +1,4 @@ -{ - inputs, - outputs, - lib, - config, - pkgs, - ... -}: { +{...}: { imports = [ ../../modules ../../modules/boot/loader/systemd.nix @@ -26,6 +19,16 @@ wm = { hyprland.enable = true; + + config = { + monitors.displays = [ + { + output = "eDP-1"; + x = 0; + y = 0; + } + ]; + }; }; hardware = { @@ -35,7 +38,6 @@ }; network = { - mullvad.enable = true; ssh.enable = true; syncthing.enable = true; tailscale.enable = true; diff --git a/machines/solis/configuration.nix b/machines/solis/configuration.nix index 9509a9e..a33ff37 100644 --- a/machines/solis/configuration.nix +++ b/machines/solis/configuration.nix @@ -1,11 +1,4 @@ -{ - inputs, - outputs, - lib, - config, - pkgs, - ... -}: { +{...}: { imports = [ ./hardware-configuration.nix ./modules.nix diff --git a/machines/solis/modules.nix b/machines/solis/modules.nix index dba31eb..a1540b9 100644 --- a/machines/solis/modules.nix +++ b/machines/solis/modules.nix @@ -1,11 +1,4 @@ -{ - inputs, - outputs, - lib, - config, - pkgs, - ... -}: { +{...}: { imports = [ ../../modules ../../modules/boot/loader/grub.nix @@ -24,7 +17,6 @@ }; network = { - mullvad.enable = true; ssh.enable = true; syncthing.enable = true; tailscale.enable = true; diff --git a/machines/terra/configuration.nix b/machines/terra/configuration.nix index a4a6d22..d1c44e6 100644 --- a/machines/terra/configuration.nix +++ b/machines/terra/configuration.nix @@ -1,11 +1,4 @@ -{ - inputs, - outputs, - lib, - config, - pkgs, - ... -}: { +{...}: { imports = [ ./hardware-configuration.nix ./modules.nix diff --git a/machines/terra/modules.nix b/machines/terra/modules.nix index e517108..d9d959d 100644 --- a/machines/terra/modules.nix +++ b/machines/terra/modules.nix @@ -1,11 +1,4 @@ -{ - inputs, - outputs, - lib, - config, - pkgs, - ... -}: { +{...}: { imports = [ ../../modules ]; @@ -24,8 +17,29 @@ refind.enable = true; }; - wm = { - hyprland.enable = true; + wm.hyprland = { + enable = true; + + config = { + monitors = { + displays = [ + { + output = "DP-2"; + x = 0; + y = 0; + wallpaper = ../../misc/landscape.png; + } + { + output = "DP-3"; + x = -1440; + y = 0; + transform = 1; + wallpaper = ../../misc/portrait.png; + } + ]; + bindWorkspaces = "interlaced"; + }; + }; }; hardware = { @@ -34,7 +48,6 @@ }; network = { - mullvad.enable = true; ssh.enable = true; syncthing.enable = true; tailscale.enable = true; diff --git a/misc/landscape.png b/misc/landscape.png new file mode 100644 index 0000000..650c9dc Binary files /dev/null and b/misc/landscape.png differ diff --git a/misc/portrait.png b/misc/portrait.png new file mode 100644 index 0000000..034fc6f Binary files /dev/null and b/misc/portrait.png differ diff --git a/modules/apps/default.nix b/modules/apps/default.nix index a184fcd..c83ec2d 100644 --- a/modules/apps/default.nix +++ b/modules/apps/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./dev.nix diff --git a/modules/apps/dev.nix b/modules/apps/dev.nix index bdb7bd5..c146f9e 100644 --- a/modules/apps/dev.nix +++ b/modules/apps/dev.nix @@ -1,14 +1,11 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.apps.dev; - homeCfg = config.horseman; in { options = { horseman.apps.dev = { diff --git a/modules/apps/server.nix b/modules/apps/server.nix index 46f4426..01b64e1 100644 --- a/modules/apps/server.nix +++ b/modules/apps/server.nix @@ -1,12 +1,10 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.apps.server; in { options = { diff --git a/modules/apps/terminal.nix b/modules/apps/terminal.nix index 8a2e123..a50a90f 100644 --- a/modules/apps/terminal.nix +++ b/modules/apps/terminal.nix @@ -1,12 +1,10 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.apps.terminal; homeCfg = config.horseman; in { @@ -21,10 +19,15 @@ in { imports = [./terminal/helix.nix]; }; + environment.sessionVariables = { + EDITOR = "hx"; + }; + services.lorri.enable = true; environment.systemPackages = with pkgs; [ bat + cowsay direnv docker-compose ethtool @@ -39,17 +42,13 @@ in { sops sxiv termdown - texliveBasic + texliveTeTeX tmux unzip wakeonlan zip ]; - environment.sessionVariables = rec { - TERM = "kitty"; - }; - # Docker virtualisation.docker.enable = true; }; diff --git a/modules/apps/terminal/helix.nix b/modules/apps/terminal/helix.nix index 3864866..340b6d1 100644 --- a/modules/apps/terminal/helix.nix +++ b/modules/apps/terminal/helix.nix @@ -1,9 +1,4 @@ -{ - config, - lib, - pkgs, - ... -}: { +{...}: { programs.helix = { enable = true; defaultEditor = true; @@ -18,6 +13,7 @@ }; soft-wrap.enable = true; + file-picker.hidden = false; statusline = { left = ["mode" "spinner" "file-name" "read-only-indicator" "file-modification-indicator"]; diff --git a/modules/apps/terminal/neovim.nix b/modules/apps/terminal/neovim.nix index e7924a4..f2abf2f 100644 --- a/modules/apps/terminal/neovim.nix +++ b/modules/apps/terminal/neovim.nix @@ -1,5 +1,4 @@ { - config, lib, pkgs, ... diff --git a/modules/apps/visual.nix b/modules/apps/visual.nix index 6d0057e..da0eeb7 100644 --- a/modules/apps/visual.nix +++ b/modules/apps/visual.nix @@ -1,14 +1,11 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.apps.visual; - homeCfg = config.horseman; in { options = { horseman.apps.visual = { @@ -33,10 +30,15 @@ in { parsec-bin qbittorrent reaper + signal-desktop solaar spotify vesktop vlc ]; + + environment.sessionVariables = { + TERM = "kitty"; + }; }; } diff --git a/modules/apps/visual/firefox.nix b/modules/apps/visual/firefox.nix index ef58439..f895326 100644 --- a/modules/apps/visual/firefox.nix +++ b/modules/apps/visual/firefox.nix @@ -1,22 +1,15 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.apps.visual.firefox; lock-false = { Value = false; Status = "locked"; }; - lock-true = { - Value = true; - Status = "locked"; - }; in { options = { horseman.apps.visual.firefox = { diff --git a/modules/base/default.nix b/modules/base/default.nix index 7d6b407..911a23b 100644 --- a/modules/base/default.nix +++ b/modules/base/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./nix.nix ./locale.nix diff --git a/modules/base/locale.nix b/modules/base/locale.nix index 04dd3d8..ba009f2 100644 --- a/modules/base/locale.nix +++ b/modules/base/locale.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.base.locale; in { options = { diff --git a/modules/base/nix.nix b/modules/base/nix.nix index a252b4c..511adae 100644 --- a/modules/base/nix.nix +++ b/modules/base/nix.nix @@ -1,12 +1,11 @@ { inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.base.nix; in { options = { diff --git a/modules/boot/default.nix b/modules/boot/default.nix index 27422e1..5830ec2 100644 --- a/modules/boot/default.nix +++ b/modules/boot/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./greeter/sddm.nix ./greeter/gdm.nix diff --git a/modules/boot/greeter/cosmic.nix b/modules/boot/greeter/cosmic.nix index 3effde4..17c0049 100644 --- a/modules/boot/greeter/cosmic.nix +++ b/modules/boot/greeter/cosmic.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.boot.greeter.cosmic; in { options = { diff --git a/modules/boot/greeter/gdm.nix b/modules/boot/greeter/gdm.nix index 9cd6c05..dd32516 100644 --- a/modules/boot/greeter/gdm.nix +++ b/modules/boot/greeter/gdm.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.boot.greeter.gdm; in { options = { diff --git a/modules/boot/greeter/sddm.nix b/modules/boot/greeter/sddm.nix index 0946aac..fa3017e 100644 --- a/modules/boot/greeter/sddm.nix +++ b/modules/boot/greeter/sddm.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.boot.greeter.sddm; in { options = { diff --git a/modules/boot/loader/grub.nix b/modules/boot/loader/grub.nix index b0ba6fc..8fbd366 100644 --- a/modules/boot/loader/grub.nix +++ b/modules/boot/loader/grub.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.boot.loader.grub; in { options = { diff --git a/modules/boot/loader/systemd.nix b/modules/boot/loader/systemd.nix index e0f0a60..9e3c53e 100644 --- a/modules/boot/loader/systemd.nix +++ b/modules/boot/loader/systemd.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.boot.loader.systemd; in { options = { diff --git a/modules/boot/refind.nix b/modules/boot/refind.nix index 029d876..4857521 100644 --- a/modules/boot/refind.nix +++ b/modules/boot/refind.nix @@ -1,12 +1,10 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.boot.refind; in { options = { diff --git a/modules/default.nix b/modules/default.nix index bd1a481..ed09c87 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./apps ./hardware diff --git a/modules/hardware/audio.nix b/modules/hardware/audio.nix index 8425660..62336db 100644 --- a/modules/hardware/audio.nix +++ b/modules/hardware/audio.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.hardware.audio; in { options = { diff --git a/modules/hardware/bluetooth.nix b/modules/hardware/bluetooth.nix index 834fdf9..e248f96 100644 --- a/modules/hardware/bluetooth.nix +++ b/modules/hardware/bluetooth.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.hardware.bluetooth; in { options = { diff --git a/modules/hardware/default.nix b/modules/hardware/default.nix index 3110830..78ddcd7 100644 --- a/modules/hardware/default.nix +++ b/modules/hardware/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./audio.nix ./bluetooth.nix diff --git a/modules/hardware/gpu/nvidia.nix b/modules/hardware/gpu/nvidia.nix index 8506c82..4d99756 100644 --- a/modules/hardware/gpu/nvidia.nix +++ b/modules/hardware/gpu/nvidia.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.hardware.gpu.nvidia; in { options = { diff --git a/modules/hardware/wifi.nix b/modules/hardware/wifi.nix index 0afae2f..1975692 100644 --- a/modules/hardware/wifi.nix +++ b/modules/hardware/wifi.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.hardware.wifi; in { options = { diff --git a/modules/network/default.nix b/modules/network/default.nix index 2d78aa3..143414f 100644 --- a/modules/network/default.nix +++ b/modules/network/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./mullvad.nix ./ssh.nix diff --git a/modules/network/mullvad.nix b/modules/network/mullvad.nix index 5b4de55..960de5f 100644 --- a/modules/network/mullvad.nix +++ b/modules/network/mullvad.nix @@ -1,12 +1,10 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.network.mullvad; in { options = { diff --git a/modules/network/ssh.nix b/modules/network/ssh.nix index d117d5f..095b15d 100644 --- a/modules/network/ssh.nix +++ b/modules/network/ssh.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.network.ssh; in { options = { diff --git a/modules/network/syncthing.nix b/modules/network/syncthing.nix index d8300fc..73d8cf3 100644 --- a/modules/network/syncthing.nix +++ b/modules/network/syncthing.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.network.syncthing; in { options = { diff --git a/modules/network/tailscale.nix b/modules/network/tailscale.nix index b5b573f..3b03fc0 100644 --- a/modules/network/tailscale.nix +++ b/modules/network/tailscale.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.network.tailscale; in { options = { diff --git a/modules/terminal/default.nix b/modules/terminal/default.nix index a2d32af..da14057 100644 --- a/modules/terminal/default.nix +++ b/modules/terminal/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./zsh.nix ]; diff --git a/modules/terminal/zsh.nix b/modules/terminal/zsh.nix index 2361fe1..3a427cf 100644 --- a/modules/terminal/zsh.nix +++ b/modules/terminal/zsh.nix @@ -1,12 +1,10 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.terminal.zsh; in { options = { diff --git a/modules/timers/backup.nix b/modules/timers/backup.nix index 7970be3..0331f3f 100644 --- a/modules/timers/backup.nix +++ b/modules/timers/backup.nix @@ -1,14 +1,10 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.timers.backup; - homeCfg = config.horseman; in { options = { horseman.timers.backup = { diff --git a/modules/timers/default.nix b/modules/timers/default.nix index 8827a84..5e0f2da 100644 --- a/modules/timers/default.nix +++ b/modules/timers/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./wol.nix ./backup.nix diff --git a/modules/timers/wol.nix b/modules/timers/wol.nix index 5f2241d..371bab3 100644 --- a/modules/timers/wol.nix +++ b/modules/timers/wol.nix @@ -1,14 +1,10 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.timers.wol; - homeCfg = config.horseman; in { options = { horseman.timers.wol = { diff --git a/modules/username.nix b/modules/username.nix index bc9a2b2..888e275 100644 --- a/modules/username.nix +++ b/modules/username.nix @@ -1,13 +1,5 @@ -{ - inputs, - outputs, - lib, - config, - pkgs, - ... -}: let - inherit (lib) mkEnableOption mkIf mkOption types; - cfg = config.horseman; +{lib, ...}: let + inherit (lib) mkOption types; in { options = { horseman = { diff --git a/modules/users/default.nix b/modules/users/default.nix index 7fa55f8..c86646b 100644 --- a/modules/users/default.nix +++ b/modules/users/default.nix @@ -3,10 +3,9 @@ outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.users.default; homeCfg = config.horseman; in { diff --git a/modules/wm/cosmic/default.nix b/modules/wm/cosmic/default.nix index 50f018e..ff9d45b 100644 --- a/modules/wm/cosmic/default.nix +++ b/modules/wm/cosmic/default.nix @@ -1,12 +1,9 @@ { - inputs, - outputs, lib, config, - pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.wm.cosmic; in { options = { diff --git a/modules/wm/default.nix b/modules/wm/default.nix index 0fb0acd..f809977 100644 --- a/modules/wm/default.nix +++ b/modules/wm/default.nix @@ -1,4 +1,4 @@ -{inputs, ...}: { +{...}: { imports = [ ./gnome ./plasma diff --git a/modules/wm/gnome/config.nix b/modules/wm/gnome/config.nix index 11076e8..af0426e 100644 --- a/modules/wm/gnome/config.nix +++ b/modules/wm/gnome/config.nix @@ -1,4 +1,4 @@ -{pkgs, ...}: { +{...}: { dconf.settings = { "org/gnome/desktop/peripherals/touchpad" = { natural-scroll = false; diff --git a/modules/wm/gnome/default.nix b/modules/wm/gnome/default.nix index 787da70..102bdb9 100644 --- a/modules/wm/gnome/default.nix +++ b/modules/wm/gnome/default.nix @@ -1,13 +1,12 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.wm.gnome; + homeCfg = config.horseman; in { options = { horseman.wm.gnome = { @@ -39,7 +38,7 @@ in { gnome-text-editor ]; - home-manager.users.horseman = { + home-manager.users.${homeCfg.username} = { imports = [./config.nix]; }; }; diff --git a/modules/wm/hyprland/config/hypr/hypridle.conf b/modules/wm/hyprland/config/hypr/hypridle.conf deleted file mode 100644 index 5f297e9..0000000 --- a/modules/wm/hyprland/config/hypr/hypridle.conf +++ /dev/null @@ -1,16 +0,0 @@ -general { - lock_cmd = pidof hyprlock || hyprlock -} - -# Turn off screen -listener { - timeout = 300 - on-timeout = hyprctl dispatch dpms off - on-resume = hyprctl dispatch dpms on -} - -# Lock screen ten seconds later -listener { - timeout = 310 - on-timeout = loginctl lock-session -} diff --git a/modules/wm/hyprland/config/hypr/hyprland.conf b/modules/wm/hyprland/config/hypr/hyprland.conf deleted file mode 100644 index 724fdf6..0000000 --- a/modules/wm/hyprland/config/hypr/hyprland.conf +++ /dev/null @@ -1,208 +0,0 @@ -source = ./monitors.conf -source = ./keybinds.conf - -$nix = /home/horseman/nix-config - -################# -### AUTOSTART ### -################# - -exec-once = hyprpaper -exec-once = eww daemon -exec-once = hypridle -exec-once = systemctl --user start hyprpolkitagent -exec-once = hyprpaper -exec-once = swaync - -# Autostart necessary processes (like notifications daemons, status bars, etc.) -# Or execute your favorite apps at launch like this: - -# exec-once = $terminal -# exec-once = nm-applet & -# exec-once = waybar & hyprpaper & firefox - - -############################# -### ENVIRONMENT VARIABLES ### -############################# - -# See https://wiki.hyprland.org/Configuring/Environment-variables/ - -env = XCURSOR_SIZE,24 -env = HYPRCURSOR_SIZE,24 - - -##################### -### LOOK AND FEEL ### -##################### - -# Refer to https://wiki.hyprland.org/Configuring/Variables/ - -# https://wiki.hyprland.org/Configuring/Variables/#general -general { - gaps_in = 5 - gaps_out = 5 - - border_size = 2 - - # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors - col.active_border = rgba(b7bdf8ff) - col.inactive_border = rgba(b7bdf840) - - resize_on_border = true - - # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on - allow_tearing = false - - layout = dwindle -} - -# https://wiki.hyprland.org/Configuring/Variables/#decoration -decoration { - rounding = 10 - - # Change transparency of focused and unfocused windows - active_opacity = 1.0 - inactive_opacity = 1.0 - - shadow { - enabled = true - range = 4 - render_power = 3 - color = rgba(1a1a1aee) - } - - # https://wiki.hyprland.org/Configuring/Variables/#blur - blur { - enabled = true - size = 3 - passes = 3 - - vibrancy = 0.1696 - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#animations -animations { - enabled = yes, please :) - - # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - - bezier = easeOutQuint,0.23,1,0.32,1 - bezier = easeInOutCubic,0.65,0.05,0.36,1 - bezier = linear,0,0,1,1 - bezier = almostLinear,0.5,0.5,0.75,1.0 - bezier = quick,0.15,0,0.1,1 - - animation = global, 1, 10, default - animation = border, 1, 5.39, easeOutQuint - animation = windows, 1, 4.79, easeOutQuint - animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% - animation = windowsOut, 1, 1.49, linear, popin 87% - animation = fadeIn, 1, 1.73, almostLinear - animation = fadeOut, 1, 1.46, almostLinear - animation = fade, 1, 3.03, quick - animation = layers, 1, 3.81, easeOutQuint - animation = layersIn, 1, 4, easeOutQuint, fade - animation = layersOut, 1, 1.5, linear, fade - animation = fadeLayersIn, 1, 1.79, almostLinear - animation = fadeLayersOut, 1, 1.39, almostLinear - animation = workspaces, 1, 1.94, almostLinear, fade - animation = workspacesIn, 1, 1.21, almostLinear, fade - animation = workspacesOut, 1, 1.94, almostLinear, fade -} - -# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ -# "Smart gaps" / "No gaps when only" -# uncomment all if you wish to use that. -# workspace = w[tv1], gapsout:0, gapsin:0 -# workspace = f[1], gapsout:0, gapsin:0 -# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1] -# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1] -# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1] -# windowrulev2 = rounding 0, floating:0, onworkspace:f[1] - -# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more -dwindle { - pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = true # You probably want this -} - -# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more -master { - new_status = master -} - -# https://wiki.hyprland.org/Configuring/Variables/#misc -misc { - force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers - disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( -} - - -############# -### INPUT ### -############# - -# https://wiki.hyprland.org/Configuring/Variables/#input -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - - repeat_rate = 50 - repeat_delay = 300 - - follow_mouse = 1 - - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. - - touchpad { - natural_scroll = true - } -} - -# https://wiki.hyprland.org/Configuring/Variables/#gestures -gestures { - workspace_swipe = false -} - -# Example per-device config -# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more -device { - name = epic-mouse-v1 - sensitivity = -0.5 -} - -############################## -### WINDOWS AND WORKSPACES ### -############################## - -# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules - -# Example windowrule v1 -# windowrule = float, ^(kitty)$ - -# Example windowrule v2 -# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ - -# Ignore maximize requests from apps. You'll probably like this. -windowrulev2 = suppressevent maximize, class:.* - -# Fix some dragging issues with XWayland -windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 - -# No gaps when only one tiled window on workspace -workspace = w[t1], gapsout:0, gapsin:0 -windowrule = rounding 0, floating:0 onworkspace:w[t1] -windowrule = bordersize 0, floating:0 onworkspace:w[t1] - -# Make firefox miniplayer float -windowrule = float, initialTitle:^Picture-in-Picture$ -windowrule = center, initialTitle:^Picture-in-Picture$ -windowrule = size 33% 33%, initialTitle:^Picture-in-Picture$ - -windowrule = float, initialClass:CImg diff --git a/modules/wm/hyprland/config/hypr/hyprlock.conf b/modules/wm/hyprland/config/hypr/hyprlock.conf deleted file mode 100644 index 0a4d96f..0000000 --- a/modules/wm/hyprland/config/hypr/hyprlock.conf +++ /dev/null @@ -1,74 +0,0 @@ -# GENERAL -general { - disable_loading_bar = true - hide_cursor = true - ignore_empty_input = true -} - -# BACKGROUND -background { - path = screenshot - blur_size = 2 - blur_passes = 1 -} - -# INPUT FIELD -input-field { - monitor = - outline_thickness = 0 - dots_size = 0.2 - dots_spacing = 0.5 - dots_center = true - dots_rounding = -1 - inner_color = rgb(36, 39, 58) - font_color = rgb(202, 211, 245) - fade_on_empty = true - fade_timeout = 1000 - placeholder_text = - hide_input = false - rounding = -1 - check_color = rgb(245, 169, 127) - fail_color = rgb(237, 135, 150) - fail_text = $FAIL ($ATTEMPTS) - fail_timeout = 2000 - fail_transition = 300 - capslock_color = -1 - numlock_color = -1 - bothlock_color = -1 - invert_numlock = true - swap_font_color = true - - size = 800, 50 - position = 0, 200 - valign = bottom -} - -# CLOCK -label { - monitor = - text = cmd[update:1000] echo " $(date +"%H:%M") " - color = rgb(183, 189, 248) - font_size = 94 - font_family = JetBrains Mono Nerd Font 10 - - position = 0, -100 - halign = center - valign = top - - shadow_size = 5 - shadow_passes = 1 - shadow_color = rgb(0,0,0) -} - -# USERNAME -label { - monitor = - text = $USER - color = rgb(198, 160, 246) - font_size = 18 - font_family = JetBrains Mono Nerd Font 10 - - position = 0, -250 - halign = center - valign = top -} diff --git a/modules/wm/hyprland/config/hypr/hyprpaper.conf b/modules/wm/hyprland/config/hypr/hyprpaper.conf deleted file mode 100644 index ed3c001..0000000 --- a/modules/wm/hyprland/config/hypr/hyprpaper.conf +++ /dev/null @@ -1,2 +0,0 @@ -preload = /home/horseman/nix-config/misc/wallpaper.jpg -wallpaper = , /home/horseman/nix-config/misc/wallpaper.jpg diff --git a/modules/wm/hyprland/config/hypr/keybinds.conf b/modules/wm/hyprland/config/hypr/keybinds.conf deleted file mode 100644 index 0f08015..0000000 --- a/modules/wm/hyprland/config/hypr/keybinds.conf +++ /dev/null @@ -1,81 +0,0 @@ -$mainMod = SUPER -$terminal = kitty -$launcher = (eww close-all && pkill wofi) || (~/.config/eww/scripts/open.sh; wofi --show drun; eww close-all) - -bind = SUPER, SPACE, exec, $launcher - -bind = $mainMod, RETURN, exec, $terminal - -bind = $mainMod, Q, killactive - -bindo = $mainMod, ESCAPE, submap, disable-all -submap = disable-all -bindo = $mainMod, ESCAPE, submap, reset -submap = reset - -bind = , F11, fullscreen -bindo = $mainMod, L, exec, hyprlock -bind = $mainMod, F, togglefloating -bind = $mainMod, P, pin -bind = $mainMod&SHIFT, S, exec, hyprshot -m region --clipboard-only - -bind = $mainMod, H, movefocus, l -bind = $mainMod, L, movefocus, r -bind = $mainMod, K, movefocus, u -bind = $mainMod, J, movefocus, d - -bind = $mainMod&SHIFT, H, movewindow, l -bind = $mainMod&SHIFT, L, movewindow, r -bind = $mainMod&SHIFT, K, movewindow, u -bind = $mainMod&SHIFT, J, movewindow, d - -binde = $mainMod, Left, moveactive, -50 0 -binde = $mainMod, Right, moveactive, 50 0 -binde = $mainMod, Up, moveactive, 0 -50 -binde = $mainMod, Down, moveactive, 0 50 - -binde = $mainMod&SHIFT, Left, resizeactive, -50 0 -binde = $mainMod&SHIFT, Right, resizeactive, 50 0 -binde = $mainMod&SHIFT, Up, resizeactive, 0 -50 -binde = $mainMod&SHIFT, Down, resizeactive, 0 50 - -bind = $mainMod, 1, workspace, 1 -bind = $mainMod, 2, workspace, 2 -bind = $mainMod, 3, workspace, 3 -bind = $mainMod, 4, workspace, 4 -bind = $mainMod, 5, workspace, 5 -bind = $mainMod, 6, workspace, 6 -bind = $mainMod, 7, workspace, 7 -bind = $mainMod, 8, workspace, 8 -bind = $mainMod, 9, workspace, 9 -bind = $mainMod, 0, workspace, 10 - -bind = $mainMod SHIFT, 1, movetoworkspace, 1 -bind = $mainMod SHIFT, 2, movetoworkspace, 2 -bind = $mainMod SHIFT, 3, movetoworkspace, 3 -bind = $mainMod SHIFT, 4, movetoworkspace, 4 -bind = $mainMod SHIFT, 5, movetoworkspace, 5 -bind = $mainMod SHIFT, 6, movetoworkspace, 6 -bind = $mainMod SHIFT, 7, movetoworkspace, 7 -bind = $mainMod SHIFT, 8, movetoworkspace, 8 -bind = $mainMod SHIFT, 9, movetoworkspace, 9 -bind = $mainMod SHIFT, 0, movetoworkspace, 10 - -bind = CONTROL&$mainMod, right, workspace, e+1 -bind = CONTROL&$mainMod, left, workspace, e-1 - -bindm = $mainMod,mouse:272, movewindow -bindm = $mainMod SHIFT,mouse:272, resizewindow - -bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ -bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%- -bindel = SHIFT,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+ -bindel = SHIFT,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%- -bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle -bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ -bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- -bindl = , XF86AudioNext, exec, playerctl next -bindl = , XF86AudioPause, exec, playerctl play-pause -bindl = , XF86AudioPlay, exec, playerctl play-pause -bindl = , XF86AudioPrev, exec, playerctl previous diff --git a/modules/wm/hyprland/config/hypr/monitors.conf b/modules/wm/hyprland/config/hypr/monitors.conf deleted file mode 100644 index 11c4a26..0000000 --- a/modules/wm/hyprland/config/hypr/monitors.conf +++ /dev/null @@ -1,10 +0,0 @@ -# luna monitors -monitor = eDP-1, 1920x1080@60, 0x0, 1 - -# terra monitors -monitor = DP-1, 2560x1440@165, 0x0, 1 -monitor = DP-2, 2560x1440@165, 2560x0, 1 - -# default monitor config -monitor=,preferred,auto,auto - diff --git a/modules/wm/hyprland/default.nix b/modules/wm/hyprland/default.nix index 320180b..ce7bd03 100644 --- a/modules/wm/hyprland/default.nix +++ b/modules/wm/hyprland/default.nix @@ -1,18 +1,19 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkIf mkEnableOption; cfg = config.horseman.wm.hyprland; in { + imports = [ + ./options.nix + ./keybindings.nix + ]; + options = { - horseman.wm.hyprland = { - enable = mkEnableOption "HyprLand"; - }; + horseman.wm.hyprland.enable = mkEnableOption "Hyprland"; }; config = mkIf cfg.enable { @@ -43,13 +44,286 @@ in { xdg-desktop-portal-hyprland ]; + horseman.wm.hyprland.config = { + execOnce = [ + "hyprpaper" + "eww daemon" + "hypridle" + "hyprpaper" + "swaync" + "systemctl --user start hyprpolkitagent" + ]; + + env = [ + "XCURSOR_SIZE,24" + "HYPRCURSOR_SIZE,24" + ]; + + windowrules = [ + "suppressevent maximize, class:.*" + "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" + "rounding 0, floating:0 onworkspace:w[t1]" + "bordersize 0, floating:0 onworkspace:w[t1]" + "float, initialTitle:^Picture-in-Picture$" + "center, initialTitle:^Picture-in-Picture$" + "size 33% 33%, initialTitle:^Picture-in-Picture$" + "float, initialClass:CImg" + ]; + + workspaces = [ + "w[t1], gapsout:0, gapsin:0" + ]; + + general = { + gapsIn = 5; + gapsOut = 5; + borderSize = 2; + + resizeOnBorder = true; + allowTearing = false; + + col.activeBorder = "rgba(b7bdf8ff)"; + col.inactiveBorder = "rgba(b7bdf840)"; + + layout = "dwindle"; + }; + + decoration = { + rounding = 10; + activeOpacity = 1.0; + inactiveOpacity = 1.0; + + shadow = { + enabled = true; + range = 4; + renderPower = 3; + color = "rgba(1a1a1aee)"; + }; + + blur = { + enabled = true; + size = 3; + passes = 3; + vibrancy = 0.1696; + }; + }; + + animations = { + enabled = true; + beziers = [ + { + name = "easeOutQuint"; + startX = 0.23; + startY = 1.0; + endX = 0.32; + endY = 1.0; + } + { + name = "easeInOutCubic"; + startX = 0.65; + startY = 0.05; + endX = 0.36; + endY = 1.0; + } + { + name = "linear"; + startX = 0.0; + startY = 0.0; + endX = 1.0; + endY = 1.0; + } + { + name = "almostLinear"; + startX = 0.5; + startY = 0.5; + endX = 0.75; + endY = 1.0; + } + { + name = "quick"; + startX = 0.15; + startY = 0.0; + endX = 0.1; + endY = 1.0; + } + ]; + + animations = [ + { + name = "global"; + on = true; + speed = 10.0; + curve = "default"; + } + { + name = "border"; + on = true; + speed = 5.39; + curve = "easeOutQuint"; + } + { + name = "windows"; + on = true; + speed = 4.79; + curve = "easeOutQuint"; + } + { + name = "windowsIn"; + on = true; + speed = 4.1; + curve = "easeOutQuint"; + style = "popin 87%"; + } + { + name = "windowsOut"; + on = true; + speed = 1.49; + curve = "linear"; + style = "popin 87%"; + } + { + name = "fadeIn"; + on = true; + speed = 1.73; + curve = "almostLinear"; + } + { + name = "fadeOut"; + on = true; + speed = 1.46; + curve = "almostLinear"; + } + { + name = "fade"; + on = true; + speed = 3.03; + curve = "quick"; + } + { + name = "layers"; + on = true; + speed = 3.81; + curve = "easeOutQuint"; + } + { + name = "layersIn"; + on = true; + speed = 4.0; + curve = "easeOutQuint"; + style = "fade"; + } + { + name = "layersOut"; + on = true; + speed = 1.5; + curve = "linear"; + style = "fade"; + } + { + name = "fadeLayersIn"; + on = true; + speed = 1.79; + curve = "almostLinear"; + } + { + name = "fadeLayersOut"; + on = true; + speed = 1.39; + curve = "almostLinear"; + } + { + name = "workspaces"; + on = true; + speed = 1.94; + curve = "almostLinear"; + style = "fade"; + } + { + name = "workspacesIn"; + on = true; + speed = 1.21; + curve = "almostLinear"; + style = "fade"; + } + { + name = "workspacesOut"; + on = true; + speed = 1.94; + curve = "almostLinear"; + style = "fade"; + } + ]; + }; + + dwindle = { + pseudotile = true; + preserveSplit = true; + }; + + master = { + newStatus = "master"; + }; + + misc = { + forceDefaultWallpaper = 0; + keyPressEnablesDPMS = true; + }; + + input = { + kbLayout = "us"; + repeatRate = 50; + repeatDelay = 300; + followMouse = 1; + sensitivity = 0.0; + touchpad.naturalScroll = true; + numlockByDefault = true; + }; + + gestures = { + workspaceSwipe = false; + }; + + group = { + autoGroup = false; + dragIntoGroup = 2; + + col = { + borderActive = config.horseman.wm.hyprland.config.general.col.activeBorder; # I don't wanna believe this can't be done better :( + borderInactive = config.horseman.wm.hyprland.config.general.col.inactiveBorder; + borderLockedActive = config.horseman.wm.hyprland.config.general.col.activeBorder; + borderLockedInactive = config.horseman.wm.hyprland.config.general.col.inactiveBorder; + }; + + groupbar = { + fontSize = 14; + height = 26; + keepUpperGap = true; + }; + }; + + monitors = { + defaultMonitor = true; + }; + + sleep = { + lockCommand = "pidof hyprlock || hyprlock"; + + listeners = [ + { + timeout = 300; + onTimeout = "hyprctl dispatch dpms off"; + onResume = "hyprctl dispatch dpms on"; + } + { + timeout = 310; + onTimeout = "loginctl lock-session"; + } + ]; + }; + }; + services.logind.extraConfig = '' HandlePowerKey=ignore ''; - - system.activationScripts.script.text = '' - cd /home/horseman; - cp -r nix-config/modules/wm/hyprland/config/* .config; - ''; }; } diff --git a/modules/wm/hyprland/keybindings.nix b/modules/wm/hyprland/keybindings.nix new file mode 100644 index 0000000..7725c38 --- /dev/null +++ b/modules/wm/hyprland/keybindings.nix @@ -0,0 +1,488 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkIf; + cfg = config.horseman.wm.hyprland; +in { + config = mkIf cfg.enable { + horseman.wm.hyprland.config.keybindings = { + submaps = [ + { + name = "disable-all"; + enterBind = { + flags = ["o"]; + mods = ["SUPER"]; + key = "ESCAPE"; + }; + exitBind = { + flags = ["o"]; + mods = ["SUPER"]; + key = "ESCAPE"; + }; + + binds = []; + } + ]; + + binds = [ + { + flags = []; + mods = ["SUPER"]; + key = "SPACE"; + dispatcher = "exec"; + params = "(eww close-all && pkill wofi) || (~/.config/eww/scripts/open.sh; wofi --show drun; eww close-all)"; + } + + { + flags = []; + mods = ["SUPER"]; + key = "RETURN"; + dispatcher = "exec"; + params = "kitty"; + } + + { + flags = []; + mods = ["SUPER"]; + key = "Q"; + dispatcher = "killactive"; + params = ""; + } + + { + flags = []; + mods = []; + key = "F11"; + dispatcher = "fullscreen"; + params = ""; + } + { + flags = ["o"]; + mods = ["SUPER"]; + key = "L"; + dispatcher = "exec"; + params = "hyprlock"; + } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "TAB"; + dispatcher = "changegroupactive"; + params = "f"; + } + + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "TAB"; + dispatcher = "changegroupactive"; + params = "b"; + } + { + flags = []; + mods = ["SUPER"]; + key = "F"; + dispatcher = "togglefloating"; + params = ""; + } + { + flags = []; + mods = ["SUPER"]; + key = "T"; + dispatcher = "togglegroup"; + params = ""; + } + + { + flags = []; + mods = ["SUPER"]; + key = "P"; + dispatcher = "pin"; + params = ""; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "S"; + dispatcher = "exec"; + params = "hyprshot -m region --clipboard-only"; + } + + { + flags = []; + mods = ["SUPER"]; + key = "H"; + dispatcher = "movefocus"; + params = "l"; + } + { + flags = []; + mods = ["SUPER"]; + key = "L"; + dispatcher = "movefocus"; + params = "r"; + } + { + flags = []; + mods = ["SUPER"]; + key = "K"; + dispatcher = "movefocus"; + params = "u"; + } + { + flags = []; + mods = ["SUPER"]; + key = "J"; + dispatcher = "movefocus"; + params = "d"; + } + + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "H"; + dispatcher = "movewindow"; + params = "l"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "L"; + dispatcher = "movewindow"; + params = "r"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "K"; + dispatcher = "movewindow"; + params = "u"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "J"; + dispatcher = "movewindow"; + params = "d"; + } + + { + flags = ["e"]; + mods = ["SUPER"]; + key = "Left"; + dispatcher = "moveactive"; + params = "-50 0"; + } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "Right"; + dispatcher = "moveactive"; + params = "50 0"; + } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "Up"; + dispatcher = "moveactive"; + params = "0 -50"; + } + { + flags = ["e"]; + mods = ["SUPER"]; + key = "Down"; + dispatcher = "moveactive"; + params = "0 50"; + } + + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "Left"; + dispatcher = "resizeactive"; + params = "-50 0"; + } + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "Right"; + dispatcher = "resizeactive"; + params = "50 0"; + } + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "Up"; + dispatcher = "resizeactive"; + params = "0 -50"; + } + { + flags = ["e"]; + mods = ["SUPER" "SHIFT"]; + key = "Down"; + dispatcher = "resizeactive"; + params = "0 50"; + } + + { + flags = []; + mods = ["SUPER"]; + key = "1"; + dispatcher = "workspace"; + params = "1"; + } + { + flags = []; + mods = ["SUPER"]; + key = "2"; + dispatcher = "workspace"; + params = "2"; + } + { + flags = []; + mods = ["SUPER"]; + key = "3"; + dispatcher = "workspace"; + params = "3"; + } + { + flags = []; + mods = ["SUPER"]; + key = "4"; + dispatcher = "workspace"; + params = "4"; + } + { + flags = []; + mods = ["SUPER"]; + key = "5"; + dispatcher = "workspace"; + params = "5"; + } + { + flags = []; + mods = ["SUPER"]; + key = "6"; + dispatcher = "workspace"; + params = "6"; + } + { + flags = []; + mods = ["SUPER"]; + key = "7"; + dispatcher = "workspace"; + params = "7"; + } + { + flags = []; + mods = ["SUPER"]; + key = "8"; + dispatcher = "workspace"; + params = "8"; + } + { + flags = []; + mods = ["SUPER"]; + key = "9"; + dispatcher = "workspace"; + params = "9"; + } + { + flags = []; + mods = ["SUPER"]; + key = "0"; + dispatcher = "workspace"; + params = "10"; + } + + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "1"; + dispatcher = "movetoworkspace"; + params = "1"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "2"; + dispatcher = "movetoworkspace"; + params = "2"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "3"; + dispatcher = "movetoworkspace"; + params = "3"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "4"; + dispatcher = "movetoworkspace"; + params = "4"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "5"; + dispatcher = "movetoworkspace"; + params = "5"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "6"; + dispatcher = "movetoworkspace"; + params = "6"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "7"; + dispatcher = "movetoworkspace"; + params = "7"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "8"; + dispatcher = "movetoworkspace"; + params = "8"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "9"; + dispatcher = "movetoworkspace"; + params = "9"; + } + { + flags = []; + mods = ["SUPER" "SHIFT"]; + key = "0"; + dispatcher = "movetoworkspace"; + params = "10"; + } + + { + flags = []; + mods = ["SUPER" "CONTROL"]; + key = "Right"; + dispatcher = "workspace"; + params = "e+1"; + } + { + flags = []; + mods = ["SUPER" "CONTROL"]; + key = "Left"; + dispatcher = "workspace"; + params = "e-1"; + } + + { + flags = ["m"]; + mods = ["SUPER"]; + key = "mouse:272"; + dispatcher = "movewindow"; + params = ""; + } + { + flags = ["m"]; + mods = ["SUPER" "SHIFT"]; + key = "mouse:272"; + dispatcher = "resizewindow"; + params = ""; + } + + { + flags = ["e" "l"]; + mods = []; + key = "XF86AudioRaiseVolume"; + dispatcher = "exec"; + params = "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86AudioLowerVolume"; + dispatcher = "exec"; + params = "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%-"; + } + { + flags = ["e" "l"]; + mods = ["SHIFT"]; + key = "XF86AudioRaiseVolume"; + dispatcher = "exec"; + params = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"; + } + { + flags = ["e" "l"]; + mods = ["SHIFT"]; + key = "XF86AudioLowerVolume"; + dispatcher = "exec"; + params = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86AudioMute"; + dispatcher = "exec"; + params = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86AudioMicMute"; + dispatcher = "exec"; + params = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86MonBrightnessUp"; + dispatcher = "exec"; + params = "brightnessctl s 10%+"; + } + { + flags = ["e" "l"]; + mods = []; + key = "XF86MonBrightnessDown"; + dispatcher = "exec"; + params = "brightnessctl s 10%-"; + } + { + flags = ["l"]; + mods = []; + key = "XF86AudioNext"; + dispatcher = "exec"; + params = "playerctl next"; + } + { + flags = ["l"]; + mods = []; + key = "XF86AudioPause"; + dispatcher = "exec"; + params = "playerctl play-pause"; + } + { + flags = ["l"]; + mods = []; + key = "XF86AudioPlay"; + dispatcher = "exec"; + params = "playerctl play-pause"; + } + { + flags = ["l"]; + mods = []; + key = "XF86AudioPrev"; + dispatcher = "exec"; + params = "playerctl previous"; + } + ]; + }; + }; +} diff --git a/modules/wm/hyprland/options.nix b/modules/wm/hyprland/options.nix new file mode 100644 index 0000000..9a337e9 --- /dev/null +++ b/modules/wm/hyprland/options.nix @@ -0,0 +1,487 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkOption mkIf types trivial strings; + inherit (builtins) concatStringsSep elem genList elemAt; + cfg = config.horseman.wm.hyprland; + homeCfg = config.horseman; + keybinding = types.submodule { + options = { + flags = mkOption { + type = types.listOf (types.enum ["l" "r" "c" "g" "o" "e" "m" "t" "i" "s" "d" "p"]); + }; + + mods = mkOption { + type = types.listOf types.str; + }; + + key = mkOption { + type = types.str; + }; + + dispatcher = mkOption { + type = types.str; + }; + + params = mkOption { + type = types.str; + }; + }; + }; + submapKeybinding = types.submodule { + options = { + flags = mkOption { + type = types.listOf (types.enum ["l" "r" "c" "g" "o" "e" "m" "t" "i" "s" "d" "p"]); + }; + + mods = mkOption { + type = types.listOf types.str; + }; + + key = mkOption { + type = types.str; + }; + }; + }; +in { + options = { + horseman.wm.hyprland.config = { + execOnce = mkOption {type = types.listOf types.str;}; + env = mkOption {type = types.listOf types.str;}; + windowrules = mkOption {type = types.listOf types.str;}; + + workspaces = mkOption { + type = types.listOf types.str; + }; + + general = { + gapsIn = mkOption {type = types.int;}; + gapsOut = mkOption {type = types.int;}; + borderSize = mkOption {type = types.int;}; + col.activeBorder = mkOption {type = types.str;}; + col.inactiveBorder = mkOption {type = types.str;}; + resizeOnBorder = mkOption {type = types.bool;}; + allowTearing = mkOption {type = types.bool;}; + layout = mkOption {type = types.enum ["dwindle" "master"];}; + }; + + decoration = { + rounding = mkOption {type = types.int;}; + activeOpacity = mkOption {type = types.float;}; + inactiveOpacity = mkOption {type = types.float;}; + + shadow = { + enabled = mkOption {type = types.bool;}; + range = mkOption {type = types.int;}; + renderPower = mkOption {type = types.int;}; + color = mkOption {type = types.str;}; + }; + + blur = { + enabled = mkOption {type = types.bool;}; + size = mkOption {type = types.int;}; + passes = mkOption {type = types.int;}; + vibrancy = mkOption {type = types.float;}; + }; + }; + + animations = { + enabled = mkOption { + type = types.bool; + }; + + beziers = mkOption { + type = types.listOf (types.submodule { + options = { + name = mkOption {type = types.str;}; + startX = mkOption {type = types.number;}; + startY = mkOption {type = types.number;}; + endX = mkOption {type = types.number;}; + endY = mkOption {type = types.number;}; + }; + }); + }; + + animations = mkOption { + type = types.listOf (types.submodule { + options = { + name = mkOption {type = types.str;}; + on = mkOption {type = types.bool;}; + speed = mkOption { + type = types.number; + default = 0; + }; + curve = mkOption { + type = types.str; + default = ""; + }; + style = mkOption { + type = types.str; + default = ""; + }; + }; + }); + }; + }; + + dwindle = { + pseudotile = mkOption {type = types.bool;}; + preserveSplit = mkOption {type = types.bool;}; + }; + + master = { + newStatus = mkOption {type = types.enum ["master" "slave" "inherit"];}; + }; + + misc = { + forceDefaultWallpaper = mkOption {type = types.enum [0 1 2 (-1)];}; + keyPressEnablesDPMS = mkOption {type = types.bool;}; + }; + + input = { + kbLayout = mkOption {type = types.str;}; + repeatRate = mkOption {type = types.int;}; + repeatDelay = mkOption {type = types.int;}; + followMouse = mkOption {type = types.enum [0 1 2 3];}; + sensitivity = mkOption {type = types.numbers.between (-1.0) 1.0;}; + numlockByDefault = mkOption {type = types.bool;}; + touchpad = { + naturalScroll = mkOption {type = types.bool;}; + }; + }; + + gestures = { + workspaceSwipe = mkOption {type = types.bool;}; + }; + + group = { + autoGroup = mkOption {type = types.bool;}; + dragIntoGroup = mkOption {type = types.enum [0 1 2];}; + + col.borderActive = mkOption {type = types.str;}; + col.borderInactive = mkOption {type = types.str;}; + col.borderLockedActive = mkOption {type = types.str;}; + col.borderLockedInactive = mkOption {type = types.str;}; + + groupbar = { + fontSize = mkOption {type = types.int;}; + height = mkOption {type = types.int;}; + keepUpperGap = mkOption {type = types.bool;}; + }; + }; + + monitors = { + defaultMonitor = mkOption {type = types.bool;}; + bindWorkspaces = mkOption { + type = types.enum ["no" "interlaced"]; + default = "no"; + }; + + displays = mkOption { + type = types.listOf (types.submodule { + options = { + output = mkOption {type = types.str;}; + resolution = mkOption { + type = types.str; + default = "highres"; + }; + refreshRate = mkOption { + type = types.str; + default = "highrr"; + }; + x = mkOption {type = types.int;}; + y = mkOption {type = types.int;}; + scale = mkOption { + type = types.number; + default = 1; + }; + transform = mkOption { + type = types.enum [0 1 2 3 4 5 6 7]; + default = 0; + }; + wallpaper = mkOption { + type = types.nullOr types.path; + default = null; + }; + }; + }); + }; + }; + + keybindings = { + binds = mkOption {type = types.listOf keybinding;}; + + submaps = mkOption { + type = types.listOf (types.submodule { + options = { + name = mkOption {type = types.str;}; + enterBind = mkOption {type = submapKeybinding;}; + exitBind = mkOption {type = submapKeybinding;}; + binds = mkOption {type = types.listOf keybinding;}; + }; + }); + }; + }; + + sleep = { + lockCommand = mkOption {type = types.str;}; + + listeners = mkOption { + type = types.listOf (types.submodule { + options = { + timeout = mkOption {type = types.ints.positive;}; + onTimeout = mkOption {type = types.str;}; + onResume = mkOption { + type = types.str; + default = ""; + }; + ignoreInhibit = mkOption { + type = types.bool; + default = false; + }; + }; + }); + }; + }; + }; + }; + + config = mkIf cfg.enable { + home-manager.users.${homeCfg.username} = { + xdg.configFile."hypr/hypridle.conf".text = '' + # This file has been auto-generated. + general { + lock_cmd = ${cfg.config.sleep.lockCommand} + } + + ${concatStringsSep "\n\n" (map (lis: '' + listener { + timeout = ${toString lis.timeout} + on-timeout = ${lis.onTimeout} + on-resume = ${lis.onResume} + } + '') + cfg.config.sleep.listeners)} + ''; + + xdg.configFile."hypr/hyprpaper.conf".text = '' + # This file has been auto-generated. + ${concatStringsSep "\n" (map (dis: + if dis.wallpaper != null + then '' + preload = ${dis.wallpaper} + wallpaper = ${dis.output}, ${dis.wallpaper} + '' + else "") + cfg.config.monitors.displays)} + + preload = /home/horseman/nix-config/misc/wallpaper.jpg + wallpaper = , /home/horseman/nix-config/misc/wallpaper.jpg + ''; + + xdg.configFile."hypr/hyprland.conf".text = '' + # This file has been auto-generated. + + ${concatStringsSep "\n" (map (kb: "bind${concatStringsSep "" kb.flags} = ${concatStringsSep " " kb.mods}, ${kb.key}, ${kb.dispatcher}${ + if (elem "m" kb.flags) # Mouse binds take one argument less + then "" + else ", ${kb.params}" + }") + cfg.config.keybindings.binds)} + + ${concatStringsSep "\n\n" (map (sm: '' + bind${concatStringsSep "" sm.enterBind.flags} = ${concatStringsSep " " sm.enterBind.mods}, ${sm.enterBind.key}, submap, ${sm.name} + submap = ${sm.name} + + ${concatStringsSep "\n" (map (kb: "bind${concatStringsSep "" kb.flags} = ${concatStringsSep " " kb.mods}, ${kb.key}, ${kb.dispatcher}${ + if (elem "m" kb.flags) # Mouse binds take one argument less + then "" + else ", ${kb.params}" + }") + sm.binds)} + + bind${concatStringsSep "" sm.exitBind.flags} = ${concatStringsSep " " sm.exitBind.mods}, ${sm.exitBind.key}, submap, reset + submap = reset + '') + cfg.config.keybindings.submaps)} + + ${concatStringsSep "\n" (map (x: "exec-once = " + x) cfg.config.execOnce)} + + ${concatStringsSep "\n" (map (x: "env = " + x) cfg.config.env)} + + general { + gaps_in = ${toString cfg.config.general.gapsIn} + gaps_out = ${toString cfg.config.general.gapsOut} + border_size = ${toString cfg.config.general.borderSize} + col.active_border = ${cfg.config.general.col.activeBorder} + col.inactive_border = ${cfg.config.general.col.inactiveBorder} + resize_on_border = ${trivial.boolToString cfg.config.general.resizeOnBorder} + allow_tearing = ${trivial.boolToString cfg.config.general.allowTearing} + layout = ${cfg.config.general.layout} + } + + decoration { + rounding = ${toString cfg.config.decoration.rounding} + + active_opacity = ${strings.floatToString cfg.config.decoration.activeOpacity} + inactive_opacity = ${strings.floatToString cfg.config.decoration.inactiveOpacity} + + shadow { + enabled = ${trivial.boolToString cfg.config.decoration.shadow.enabled} + range = ${toString cfg.config.decoration.shadow.range} + render_power = ${toString cfg.config.decoration.shadow.renderPower} + color = ${cfg.config.decoration.shadow.color} + } + + blur { + enabled = ${trivial.boolToString cfg.config.decoration.blur.enabled} + size = ${toString cfg.config.decoration.blur.size} + passes = ${toString cfg.config.decoration.blur.passes} + vibrancy = ${strings.floatToString cfg.config.decoration.blur.vibrancy} + } + } + + animations { + enabled = ${trivial.boolToString cfg.config.animations.enabled} + + ${concatStringsSep "\n " (map (bez: "bezier = ${bez.name}, ${strings.floatToString bez.startX}, ${strings.floatToString bez.startY}, ${strings.floatToString bez.endX}, ${strings.floatToString bez.endY}") cfg.config.animations.beziers)} + + ${concatStringsSep "\n " (map (anim: "animation = ${anim.name}, ${toString anim.on}, ${strings.floatToString anim.speed}, ${anim.curve}, ${anim.style}") cfg.config.animations.animations)} + } + + dwindle { + pseudotile = ${trivial.boolToString cfg.config.dwindle.pseudotile} + preserve_split = ${trivial.boolToString cfg.config.dwindle.preserveSplit} + } + + master { + new_status = ${cfg.config.master.newStatus} + } + + misc { + force_default_wallpaper = ${toString cfg.config.misc.forceDefaultWallpaper} + key_press_enables_dpms = ${trivial.boolToString cfg.config.misc.keyPressEnablesDPMS} + } + + input { + kb_layout = ${cfg.config.input.kbLayout} + repeat_rate = ${toString cfg.config.input.repeatRate} + repeat_delay = ${toString cfg.config.input.repeatDelay} + follow_mouse = ${toString cfg.config.input.followMouse} + sensitivity = ${strings.floatToString cfg.config.input.sensitivity} + numlock_by_default = ${trivial.boolToString cfg.config.input.numlockByDefault} + + touchpad { + natural_scroll = ${trivial.boolToString cfg.config.input.touchpad.naturalScroll} + } + } + + gestures { + workspace_swipe = ${trivial.boolToString cfg.config.gestures.workspaceSwipe} + } + + + group { + auto_group = ${trivial.boolToString cfg.config.group.autoGroup} + drag_into_group = ${toString cfg.config.group.dragIntoGroup} + + col.border_active = ${cfg.config.group.col.borderActive} + col.border_inactive = ${cfg.config.group.col.borderInactive} + col.border_locked_active = ${cfg.config.group.col.borderLockedActive} + col.border_locked_inactive = ${cfg.config.group.col.borderLockedInactive} + + groupbar { + font_size = ${toString cfg.config.group.groupbar.fontSize} + height = ${toString cfg.config.group.groupbar.height} + keep_upper_gap = ${trivial.boolToString cfg.config.group.groupbar.keepUpperGap} + + col.active = ${cfg.config.group.col.borderActive} + col.inactive = ${cfg.config.group.col.borderInactive} + col.locked_active = ${cfg.config.group.col.borderLockedActive} + col.locked_inactive = ${cfg.config.group.col.borderLockedInactive} + } + } + + ${concatStringsSep "\n" (map (mon: "monitor = ${mon.output}, ${mon.resolution}@${mon.refreshRate}, ${toString mon.x}x${toString mon.y}, ${strings.floatToString mon.scale}, transform, ${toString mon.transform}") cfg.config.monitors.displays)} + + ${ + if cfg.config.monitors.defaultMonitor + then "monitor = ,preferred, auto, auto" + else "" + } + + ${concatStringsSep "\n" (map (wr: "windowrule = " + wr) cfg.config.windowrules)} + + ${concatStringsSep "\n" (map (ws: "workspace = " + ws) cfg.config.workspaces)} + + ${ + concatStringsSep "\n" ( + if cfg.config.monitors.bindWorkspaces == "interlaced" + then (map (x: "workspace = ${toString (x + 1)}, persistent:true, monitor:${(elemAt cfg.config.monitors.displays (x - (2 * (x / 2)))).output}") (genList (x: x) 10)) + else [] + ) + } + ''; + + xdg.configFile."hypr/hyprlock.conf".text = '' + $font = Monospace + + general { + hide_cursor = false + } + + animations { + enabled = true + bezier = linear, 1, 1, 0, 0 + animation = fadeIn, 1, 5, linear + animation = fadeOut, 1, 5, linear + animation = inputFieldDots, 1, 2, linear + } + + background { + monitor = + path = screenshot + blur_passes = 3 + } + + input-field { + monitor = + size = 20%, 5% + outline_thickness = 3 + inner_color = rgba(0, 0, 0, 0.0) # no fill + + outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg + check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg + fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg + + font_color = rgb(143, 143, 143) + fade_on_empty = false + rounding = 15 + + font_family = $font + placeholder_text = Input password... + fail_text = $PAMFAIL + + dots_spacing = 0.3 + + position = 0, -20 + halign = center + valign = center + } + + label { + monitor = + text = $TIME + font_size = 90 + font_family = $font + + position = 0, -50 + halign = center + valign = top + } + ''; + }; + }; +} diff --git a/modules/wm/plasma/default.nix b/modules/wm/plasma/default.nix index d5872f8..d3e2ff9 100644 --- a/modules/wm/plasma/default.nix +++ b/modules/wm/plasma/default.nix @@ -1,12 +1,10 @@ { - inputs, - outputs, lib, config, pkgs, ... }: let - inherit (lib) mkEnableOption mkIf mkOption types; + inherit (lib) mkEnableOption mkIf; cfg = config.horseman.wm.plasma; homeCfg = config.horseman; in {