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 {