hyprland: separate settings for user and host

This commit is contained in:
2025-11-27 15:33:23 +03:00
parent 7356fbe8f6
commit d934e358c0
8 changed files with 151 additions and 95 deletions
+27
View File
@@ -0,0 +1,27 @@
{ pkgs, lib, ... }: {
wayland.windowManager.hyprland = let
wallpaper = pkgs.fetchurl {
name = "miku_wallpaper.jpg";
url = "https://c.codrs.ru/pub/miku_wallpaper.jpeg?raw";
hash = "sha256-inK4X5KzQk5FHwDw2DYy43nm7XtXlC6I0S1PkYUv+3w=";
};
in {
settings = {
monitor = [
"DP-3 , 1920x1080@165, 0x0 , 1"
"HDMI-A-1, preferred , -1080x0, 1, transform, 1"
];
workspace = [
"1, monitor:DP-3, default:true"
"10, monitor:HDMI-A-1, default:true"
];
exec-once = [
"hyprctl dispatch workspace 1"
"${lib.getExe pkgs.swww} img -o HDMI-A-1 ${wallpaper}"
"${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"
];
};
};
}
+44
View File
@@ -0,0 +1,44 @@
{ pkgs, lib, ...}: {
wayland.windowManager.hyprland = let
monitor-switcher = pkgs.writers.writeBashBin "monitor_switcher" /*bash*/ ''
MODE=$1
case $MODE in
"tv")
hyprctl keyword monitor "DP-3, 1920x1080@60, 3840x0, 1"
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
notify-send "TV mode"
;;
"mirror")
hyprctl keyword monitor "HDMI-A-1, 3840x2160@60, 0x0, 1"
hyprctl keyword monitor "DP-3, preferred, auto, 1, mirror, HDMI-A-1"
notify-send "TV-only mode"
;;
"display"|*)
hyprctl keyword monitor "HDMI-A-1, disable"
hyprctl keyword monitor "DP-3, 3440x1440@165, 0x0, 1"
notify-send "Display mode"
;;
esac
'';
in {
settings = {
monitor = [
"DP-3, 3440x1440@165, auto-right, 1"
# "HDMI-A-1, 3840x2160@60, auto-left, 2"
"HDMI-A-1, disabled"
];
bind = [
'', XF86Calculator, exec, ghostty --title=pulsemixer -e pulsemixer''
''$mainMod, F1, exec, ${lib.getExe monitor-switcher} tv''
''$mainMod, F2, exec, ${lib.getExe monitor-switcher} mirror''
''$mainMod, F3, exec, ${lib.getExe monitor-switcher}''
];
};
};
}
+9
View File
@@ -0,0 +1,9 @@
{
wayland.windowManager.hyprland = {
settings = {
monitor = [
"eDP-1, 1920x1080@60, 0x0, 1"
];
};
};
}
+1
View File
@@ -12,6 +12,7 @@
./user/wofi.nix ./user/wofi.nix
./user/mako.nix ./user/mako.nix
./user/ghostty.nix ./user/ghostty.nix
./user/hyprland.nix
./user/packages/art.nix ./user/packages/art.nix
./user/packages/desktop.nix ./user/packages/desktop.nix
./user/packages/coding.nix ./user/packages/coding.nix
@@ -1,4 +1,11 @@
{ pkgs, lib, config, collection, swww_flags, inputs }: { { pkgs, lib, config, osConfig, inputs, username, ... }: let
optImport = path: lib.optional (builtins.pathExists path) path;
hostname = osConfig.networking.hostName;
in {
imports =
optImport ../../host/${hostname}/modules/hyprland.nix ++
optImport ../../user/${username}/modules/hyprland.nix;
home.packages = with pkgs; [ home.packages = with pkgs; [
ghostty ghostty
pamixer pamixer
@@ -9,60 +16,12 @@
xclip xclip
]; ];
wayland.windowManager.hyprland = wayland.windowManager.hyprland = let
let
colors = config.lib.stylix.colors; colors = config.lib.stylix.colors;
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
libraries = [ pkgs.python3Packages.requests ];
flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ];
} /*py*/ ''
import requests as requests
from random import choice
from os import system, mkdir, listdir
from os.path import exists
notify = lambda s: system(f"notify-desktop Wallpaper '{s}'")
folder = "${config.home.homeDirectory}/Wallpapers"
url = "https://wallhaven.cc/api/v1/collections/${collection}"
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
token = f.read()
notify("Updating wallpaper!")
try:
json = requests.get(url, params={'apikey': token}).json()
wallpaper = choice(json['data'])
link = wallpaper['path']
format = wallpaper['file_type']
id = wallpaper['id']
if format == "image/jpeg": ext = "jpg"
else: ext = "png"
filename = f"{id}.{ext}"
if not exists(f"{folder}/{filename}"):
if not exists(folder):
mkdir(f"{folder}")
notify("Downloading...")
with open(f"{folder}/{filename}", 'wb') as f:
r = requests.get(link)
f.write(r.content)
except requests.exceptions.ConnectionError:
notify("Offline mode")
filename = choice(listdir(folder))
finally:
system(f"${lib.getExe pkgs.swww} img {folder}/{filename} ${swww_flags}")
'';
in { in {
enable = true; enable = true;
xwayland.enable = true; xwayland.enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland; package = inputs.hyprland.packages.${pkgs.system}.hyprland;
plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [ plugins = with inputs.hyprland-plugins.packages.${pkgs.system}; [
# hyprbars # Version mismatch # hyprbars # Version mismatch
@@ -136,10 +95,9 @@
"size 622 652, title:(clipse)" "size 622 652, title:(clipse)"
]; ];
exec-once = [ exec-once = lib.mkBefore [
"systemctl --user start plasma-polkit-agent" "systemctl --user start plasma-polkit-agent"
"${lib.getExe' pkgs.swww "swww-daemon"}" "${lib.getExe' pkgs.swww "swww-daemon"}"
"${lib.getExe wallpaper_changer}"
"wl-clip-persist --clipboard both" "wl-clip-persist --clipboard both"
"clipse -listen" "clipse -listen"
"${lib.getExe' pkgs.udiskie "udiskie"}" "${lib.getExe' pkgs.udiskie "udiskie"}"
@@ -213,22 +171,14 @@
", XF86AudioMute, exec, pamixer -t" ", XF86AudioMute, exec, pamixer -t"
", XF86AudioMicMute, exec, pamixer --default-source -m" ", XF86AudioMicMute, exec, pamixer --default-source -m"
", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause" ", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause"
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} position 5-"
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} position 5+"
", XF86Explorer, exec, ghostty -e sh -c yazi" ", XF86Explorer, exec, ghostty -e sh -c yazi"
", XF86Mail, exec, thunderbird" ", XF86Mail, exec, thunderbird"
", XF86WWW, exec, google-chrome-stable" # TODO: Replace hard-code to some variable ", XF86WWW, exec, google-chrome-stable" # TODO: Replace hard-code to some variable
# Brightness control # Brightness control
", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%- " ", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%- "
", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set +5% " ", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set +5% "
# Waybar
"$mainMod, B, exec, pkill -SIGUSR1 waybar"
#"$mainMod, W, exec, pkill -SIGUSR2 waybar"
"$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
]; ];
binde = [ binde = [
@@ -236,6 +186,11 @@
", XF86AudioLowerVolume, exec, pamixer -d 5 " ", XF86AudioLowerVolume, exec, pamixer -d 5 "
]; ];
bindc = [
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} position 5-"
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} position 5+"
];
bindo = [ bindo = [
", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous" ", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous"
", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next" ", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next"
-13
View File
@@ -1,21 +1,8 @@
{ pkgs, lib, config, inputs, ... }: { { pkgs, lib, config, inputs, ... }: {
imports = [(
import ../../../modules/user/patterns/hyprland.nix {
inherit lib;
inherit pkgs;
inherit config;
inherit inputs;
collection = "cheeeest/1767552";
swww_flags = "";
}
)];
wayland.windowManager.hyprland = let wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors; colors = config.lib.stylix.colors;
in { in {
settings = { settings = {
monitor = ",preferred,auto,1";
exec-once =["${lib.getExe pkgs.linux-wallpaperengine} ~/.local/share/wpe/wallpaper --assets-dir ~/.local/share/wpe/assets --screen-root DP-3 --noautomute"];
general = { general = {
gaps_in = 5; gaps_in = 5;
gaps_out = 5; gaps_out = 5;
+1 -1
View File
@@ -13,7 +13,6 @@
inputs.stylix.homeModules.stylix inputs.stylix.homeModules.stylix
../modules/user.nix ../modules/user.nix
./${name}/modules/git.nix ./${name}/modules/git.nix
./${name}/modules/hyprland.nix
./${name}/modules/style.nix ./${name}/modules/style.nix
./${name}/home.nix ./${name}/home.nix
]; ];
@@ -35,6 +34,7 @@
laptop = laptop; laptop = laptop;
name = config.networking.hostName; name = config.networking.hostName;
}; };
username = name;
}; };
}; };
} }
+52 -19
View File
@@ -1,26 +1,55 @@
{ pkgs, lib, config, inputs, ... }: { { pkgs, lib, config, inputs, ... }: {
imports = [(
import ../../../modules/user/patterns/hyprland.nix {
inherit lib;
inherit pkgs;
inherit config;
inherit inputs;
collection = "sweetbread/1764377";
swww_flags = "--transition-type center";
}
)];
wayland.windowManager.hyprland = let wayland.windowManager.hyprland = let
colors = config.lib.stylix.colors; colors = config.lib.stylix.colors;
wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" {
libraries = [ pkgs.python3Packages.requests ];
flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ];
} /*py*/ ''
import requests as requests
from random import choice
from os import system, mkdir, listdir
from os.path import exists
notify = lambda s: system(f"notify-desktop Wallpaper '{s}'")
folder = "${config.home.homeDirectory}/Wallpapers"
url = "https://wallhaven.cc/api/v1/collections/sweetbread/1764377"
with open("${config.sops.secrets."tokens/apis/wallhaven".path}") as f:
token = f.read()
notify("Updating wallpaper!")
try:
json = requests.get(url, params={'apikey': token}).json()
wallpaper = choice(json['data'])
link = wallpaper['path']
format = wallpaper['file_type']
id = wallpaper['id']
if format == "image/jpeg": ext = "jpg"
else: ext = "png"
filename = f"{id}.{ext}"
if not exists(f"{folder}/{filename}"):
if not exists(folder):
mkdir(f"{folder}")
notify("Downloading...")
with open(f"{folder}/{filename}", 'wb') as f:
r = requests.get(link)
f.write(r.content)
except requests.exceptions.ConnectionError:
notify("Offline mode")
filename = choice(listdir(folder))
finally:
system(f"${lib.getExe pkgs.swww} img {folder}/{filename} --transition-type center")
'';
in { in {
settings = { settings = {
monitor = [
"DP-3, 3440x1440@165.00Hz, auto-right, 1"
# "HDMI-A-1, 3840x2160@60.00Hz, auto-left, 2"
"HDMI-A-1, disabled"
",preferred,auto,1"
];
general = { general = {
gaps_in = 5; gaps_in = 5;
gaps_out = 10; gaps_out = 10;
@@ -76,12 +105,16 @@
enable_swallow = true; enable_swallow = true;
}; };
exec-once = [
"${lib.getExe wallpaper_changer}"
];
bind = [ bind = [
" , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output" " , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m output"
"CTRL, Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region" "CTRL, Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m region"
"ALT , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window" "ALT , Print, exec, ${lib.getExe pkgs.hyprshot} -z -o ~/Screenshots -m active -m window"
'', XF86Calculator, exec, ghostty --title=pulsemixer -e pulsemixer'' "$mainMod, W, exec, ${lib.getExe wallpaper_changer}"
]; ];
}; };
}; };